Spaces:
No application file
No application file
{% extends "admin/base.html" %} | |
{% block title %}Дашборд{% endblock %} | |
{% block content %} | |
<div class="admin-header"> | |
<h1><i class="fas fa-tachometer-alt"></i> Дашборд</h1> | |
</div> | |
<div class="row mb-4"> | |
<div class="col-md-3"> | |
<div class="stat-card bg-primary"> | |
<div class="stat-icon"> | |
<i class="fas fa-users"></i> | |
</div> | |
<div class="stat-info"> | |
<h3>{{ users_count }}</h3> | |
<p>Пользователей</p> | |
</div> | |
</div> | |
</div> | |
<div class="col-md-3"> | |
<div class="stat-card bg-success"> | |
<div class="stat-icon"> | |
<i class="fas fa-user-plus"></i> | |
</div> | |
<div class="stat-info"> | |
<h3>{{ new_users }}</h3> | |
<p>Новых за 30 дней</p> | |
</div> | |
</div> | |
</div> | |
<div class="col-md-3"> | |
<div class="stat-card bg-info"> | |
<div class="stat-icon"> | |
<i class="fas fa-chart-bar"></i> | |
</div> | |
<div class="stat-info"> | |
<h3>{{ reports_count }}</h3> | |
<p>Анализов</p> | |
</div> | |
</div> | |
</div> | |
<div class="col-md-3"> | |
<div class="stat-card bg-warning"> | |
<div class="stat-icon"> | |
<i class="fas fa-comments"></i> | |
</div> | |
<div class="stat-info"> | |
<h3>{{ active_users }}</h3> | |
<p>Активных</p> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="row"> | |
<div class="col-md-6"> | |
<div class="card mb-4"> | |
<div class="card-header"> | |
<h5><i class="fas fa-chart-pie"></i> Распределение эмоций</h5> | |
</div> | |
<div class="card-body"> | |
<div class="table-responsive"> | |
<table class="table"> | |
<thead> | |
<tr> | |
<th>Эмоция</th> | |
<th>Количество</th> | |
<th>Процент</th> | |
</tr> | |
</thead> | |
<tbody> | |
{% for emotion, count in emotion_stats %} | |
<tr> | |
<td>{{ emotion_map.get(emotion, emotion) }}</td> | |
<td>{{ count }}</td> | |
<td> | |
<div class="progress"> | |
<div class="progress-bar" | |
style="width: {{ (count / reports_count * 100) if reports_count > 0 else 0 }}%"> | |
{{ (count / reports_count * 100)|round(1) if reports_count > 0 else 0 }}% | |
</div> | |
</div> | |
</td> | |
</tr> | |
{% endfor %} | |
</tbody> | |
</table> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div class="col-md-6"> | |
<div class="card"> | |
<div class="card-header"> | |
<h5><i class="fas fa-user-chart"></i> Топ пользователей</h5> | |
</div> | |
<div class="card-body"> | |
<div class="table-responsive"> | |
<table class="table"> | |
<thead> | |
<tr> | |
<th>Пользователь</th> | |
<th>Анализов</th> | |
</tr> | |
</thead> | |
<tbody> | |
{% for user, count in user_activity %} | |
<tr> | |
<td>{{ user }}</td> | |
<td>{{ count }}</td> | |
</tr> | |
{% endfor %} | |
</tbody> | |
</table> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
{% endblock %} |