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 %} |