feat(admin): phase 3 — dashboard #overview landing
GET /api/admin/overview returns 24h digest (~0.08ms/call).
- adminController.getOverview: 7 prepared statements (users 24h, sessions 24h, active users, classes count, failed sessions, banned this week, top-5 sessions)
- new section frontend/js/admin/sections/overview.js (~205L): bento-grid cards, alerts (only when >0), top-5 table, quick-links
- nav-item + tab-pane reordered: #overview is now default; #stats remains routable
Auth: admin-only (inside requireRole('admin') block, sibling of /stats).
Backward compat: all 13 existing routes unchanged.
Known follow-ups (post-merge polish):
- activeClasses counts all (label could be 'Всего классов')
- failedSessions24h includes in_progress (could tighten to abandoned only)
- topSessions24h drops NULL-score completed rows
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+11
-2
@@ -919,7 +919,10 @@
|
||||
<svg class="adm-chev" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="6 9 12 15 18 9"/></svg>
|
||||
</button>
|
||||
<div class="admin-nav-body">
|
||||
<button class="admin-nav-item active" data-tab="stats" onclick="switchTab(this)">
|
||||
<button class="admin-nav-item active" data-tab="overview" onclick="switchTab(this)">
|
||||
<i data-lucide="layout-dashboard" style="width:15px;height:15px"></i> Обзор
|
||||
</button>
|
||||
<button class="admin-nav-item" data-tab="stats" onclick="switchTab(this)">
|
||||
<i data-lucide="bar-chart-2" style="width:15px;height:15px"></i> Статистика
|
||||
</button>
|
||||
<button class="admin-nav-item" data-tab="sessions" onclick="switchTab(this)">
|
||||
@@ -1016,8 +1019,13 @@
|
||||
</nav>
|
||||
<div class="admin-main">
|
||||
|
||||
<!-- ── Обзор (Phase 3) ── -->
|
||||
<div class="tab-pane active" id="tab-overview">
|
||||
<div id="overview-content"><div class="spinner"></div></div>
|
||||
</div>
|
||||
|
||||
<!-- ── Статистика ── -->
|
||||
<div class="tab-pane active" id="tab-stats">
|
||||
<div class="tab-pane" id="tab-stats">
|
||||
<div class="section-title">Общая статистика</div>
|
||||
<div class="stats-grid" id="stats-grid"><div class="spinner"></div></div>
|
||||
<div class="section-title">По предметам</div>
|
||||
@@ -1983,6 +1991,7 @@
|
||||
<script src="/js/sidebar.js"></script>
|
||||
<script src="/js/admin/router.js"></script>
|
||||
<script src="/js/admin/_shared.js"></script>
|
||||
<script src="/js/admin/sections/overview.js"></script>
|
||||
<script src="/js/admin/sections/stats.js"></script>
|
||||
<script src="/js/admin/sections/sublog.js"></script>
|
||||
<script src="/js/admin/sections/sims.js"></script>
|
||||
|
||||
Reference in New Issue
Block a user