feat(dashboard): «Активность» в нижний ряд + удалён остаток «Теории»
- Блок «Активность» (heatmap + календарь) вынесен из 3-й колонки в отдельный нижний ряд .bottom-grid рядом с «Мои сдачи» и «Испытания». - Удалён остаток разметки «Теория — в процессе» и разметка рейтинга (lb-section) с дашборда; конфиг виджетов обновлён (Активность вместо Теории/Рейтинга). - Селектор скрытия для учителя и адаптив обновлены под .bottom-grid. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+45
-62
@@ -148,6 +148,15 @@
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
.full-row { margin-bottom: 22px; }
|
||||
/* Bottom row: Activity · My submissions · Challenges side by side */
|
||||
.bottom-grid {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(3, 1fr);
|
||||
gap: 22px;
|
||||
margin-bottom: 22px;
|
||||
align-items: start;
|
||||
}
|
||||
.bottom-grid > * { margin-bottom: 0; }
|
||||
|
||||
.qa-btn {
|
||||
display: flex; align-items: center; gap: 8px;
|
||||
@@ -1602,31 +1611,6 @@
|
||||
</div>
|
||||
<div id="fcw-body"></div>
|
||||
</div>
|
||||
<!-- Combined Activity Widget (heatmap + streak calendar) -->
|
||||
<div id="w-activity" style="display:none">
|
||||
<div class="w-head">
|
||||
<div class="w-title">Активность</div>
|
||||
<div class="act-tabs">
|
||||
<button class="act-tab active" onclick="switchActTab('heatmap',this)">Карта</button>
|
||||
<button class="act-tab" onclick="switchActTab('calendar',this)">Месяц</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Pane 1: Heatmap -->
|
||||
<div class="act-pane visible" id="act-heatmap-pane">
|
||||
<div style="display:flex;justify-content:flex-end;margin-bottom:6px">
|
||||
<div class="act-scale-btns" id="hm-scale-btns">
|
||||
<button class="act-scale-btn" onclick="setHmScale(6,this)">6н</button>
|
||||
<button class="act-scale-btn active" onclick="setHmScale(12,this)">12н</button>
|
||||
<button class="act-scale-btn" onclick="setHmScale(26,this)">6м</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="activity-heatmap"></div>
|
||||
</div>
|
||||
<!-- Pane 2: Streak calendar -->
|
||||
<div class="act-pane" id="act-cal-pane">
|
||||
<div id="streak-cal-body"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Day popup (floating) -->
|
||||
<div class="hm-day-popup" id="hm-day-popup" style="display:none"></div>
|
||||
<!-- Subject progress bars -->
|
||||
@@ -1645,42 +1629,50 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- My submissions compact widget (student only) -->
|
||||
<div class="full-row" id="w-my-subs" style="display:none">
|
||||
<div class="widget">
|
||||
<!-- ZONE 4: Bottom row — Activity · My submissions · Challenges -->
|
||||
<div class="bottom-grid">
|
||||
|
||||
<!-- Combined Activity Widget (heatmap + streak calendar) -->
|
||||
<div class="widget" id="w-activity" style="display:none">
|
||||
<div class="w-head">
|
||||
<div class="w-title">Активность</div>
|
||||
<div class="act-tabs">
|
||||
<button class="act-tab active" onclick="switchActTab('heatmap',this)">Карта</button>
|
||||
<button class="act-tab" onclick="switchActTab('calendar',this)">Месяц</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Pane 1: Heatmap -->
|
||||
<div class="act-pane visible" id="act-heatmap-pane">
|
||||
<div style="display:flex;justify-content:flex-end;margin-bottom:6px">
|
||||
<div class="act-scale-btns" id="hm-scale-btns">
|
||||
<button class="act-scale-btn" onclick="setHmScale(6,this)">6н</button>
|
||||
<button class="act-scale-btn active" onclick="setHmScale(12,this)">12н</button>
|
||||
<button class="act-scale-btn" onclick="setHmScale(26,this)">6м</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="activity-heatmap"></div>
|
||||
</div>
|
||||
<!-- Pane 2: Streak calendar -->
|
||||
<div class="act-pane" id="act-cal-pane">
|
||||
<div id="streak-cal-body"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- My submissions compact widget (student only) -->
|
||||
<div class="widget" id="w-my-subs" style="display:none">
|
||||
<div class="w-head">
|
||||
<div class="w-title">Мои сдачи</div>
|
||||
<a class="ae-btn-submit" href="/homework" style="text-decoration:none">Загрузить работу</a>
|
||||
</div>
|
||||
<div class="my-subs-list" id="my-subs-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Leaderboard (students only) -->
|
||||
<div class="full-row" id="lb-section" style="display:none">
|
||||
<div class="lb-widget">
|
||||
<div class="lb-head">
|
||||
<div class="lb-title" id="lb-title">Рейтинг</div>
|
||||
<div style="display:flex;gap:8px;align-items:center">
|
||||
<select class="lb-class-sel" id="lb-class-sel" onchange="loadLeaderboard()">
|
||||
<option value="">Все</option>
|
||||
</select>
|
||||
<div class="lb-tabs">
|
||||
<button class="lb-tab active" onclick="setLbPeriod('week',this)">Неделя</button>
|
||||
<button class="lb-tab" onclick="setLbPeriod('all',this)">Всё время</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="lb-list" id="lb-list"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Challenges (students only) -->
|
||||
<div class="full-row" id="ch-section" style="display:none">
|
||||
<div class="widget ch-widget">
|
||||
<!-- Challenges (students only) -->
|
||||
<div class="widget ch-widget" id="ch-section" style="display:none">
|
||||
<div class="w-head"><div class="w-title" id="ch-title">Испытания недели</div></div>
|
||||
<div class="ch-list" id="ch-list"></div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Statistics Charts (students only) -->
|
||||
@@ -1710,14 +1702,6 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Full width: Theory -->
|
||||
<div class="full-row">
|
||||
<div class="widget" id="w-theory-progress" style="display:none">
|
||||
<div class="w-head"><div class="w-title">Теория — в процессе</div></div>
|
||||
<div id="theory-progress-grid" class="theory-courses-grid"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Full width: Full history (hidden) -->
|
||||
<div class="full-row">
|
||||
<div class="widget" id="w-full-history" style="display:none">
|
||||
@@ -1779,7 +1763,7 @@
|
||||
document.getElementById('dh-greeting').innerHTML = `${gr}, <span>${esc(user?.name?.split(' ')[0] || 'Администратор')}</span>`;
|
||||
document.getElementById('dh-sub').textContent = user?.role === 'admin' ? 'Панель администратора' : 'Панель учителя';
|
||||
// teacher/admin: hide student-only widgets, show admin compact layout
|
||||
document.querySelectorAll('.action-zone,.main-grid,#w-theory-progress,.full-row').forEach(el => { if (el) el.style.display = 'none'; });
|
||||
document.querySelectorAll('.action-zone,.main-grid,.bottom-grid,.full-row').forEach(el => { if (el) el.style.display = 'none'; });
|
||||
if (isAdmin) {
|
||||
// admin: full command center (redesign) instead of compact layout
|
||||
const dh = document.querySelector('.dash-header'); if (dh) dh.style.display = 'none';
|
||||
@@ -4002,11 +3986,10 @@
|
||||
|
||||
/* ── Dashboard widget visibility ──────────────────────────────────── */
|
||||
const _DASH_WIDGETS = [
|
||||
{ id: 'lb-section', label: 'Рейтинг' },
|
||||
{ id: 'ch-section', label: 'Испытания недели' },
|
||||
{ id: 'stats-section', label: 'Статистика' },
|
||||
{ id: 'w-my-subs', label: 'Мои сдачи' },
|
||||
{ id: 'w-theory-progress',label: 'Теория' },
|
||||
{ id: 'w-activity', label: 'Активность' },
|
||||
];
|
||||
|
||||
async function applyDashboardPrefs() {
|
||||
|
||||
Reference in New Issue
Block a user