feat(dashboard): блок активности — все виды учёбы, тренд, разбивка по типам, empty-state
- Бэкенд /api/dashboard/activity: per-day агрегация активности по типам (тест/экзамен/карты/уроки/ онлайн/домашка) из 6 таблиц за ~182 дня (раньше карта считала только тесты). - Карта раскрашивается по доминирующему типу активности + легенда типов; интенсивность/размер по числу. - Недельный тренд в футере («эта неделя N · +K к прошлой»). - Тултип и попап по клику показывают разбивку дня по типам. - Empty-state для новичков (вместо пустой сетки — призыв + CTA). Календарь «Месяц» тоже от всех активностей. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1048,7 +1048,7 @@ window.LS = {
|
||||
crJoin, crLeave, crSendChat, crGetChat, crGetAttendance, crSignal, crGetOnlineStudents, crGetMySession,
|
||||
crGetMyHistory, crGetClassHistory, crGetSessionSummary, crExportChatUrl, crGetAllNotes, crDeleteHistory,
|
||||
crAdminGetAllHistory, crAdminGetTeachersList,
|
||||
listMaterials, saveMaterial, updateMaterial, deleteMaterial, shareMaterial,
|
||||
listMaterials, saveMaterial, updateMaterial, deleteMaterial, shareMaterial, getActivity,
|
||||
createMaterialCollection, updateMaterialCollection, deleteMaterialCollection,
|
||||
fcListDecks, fcCreateDeck, fcAddCard,
|
||||
escapeHtml, esc,
|
||||
@@ -1250,6 +1250,7 @@ async function saveMaterial(data) { return req('POST', '/materials', data)
|
||||
async function updateMaterial(id, d) { return req('PATCH', `/materials/${id}`, d); }
|
||||
async function deleteMaterial(id) { return req('DELETE', `/materials/${id}`); }
|
||||
async function shareMaterial(id, d) { return req('POST', `/materials/${id}/share`, d); }
|
||||
async function getActivity() { return req('GET', '/dashboard/activity'); }
|
||||
async function createMaterialCollection(d) { return req('POST', '/materials/collections', d); }
|
||||
async function updateMaterialCollection(id,d){ return req('PATCH', `/materials/collections/${id}`, d); }
|
||||
async function deleteMaterialCollection(id) { return req('DELETE', `/materials/collections/${id}`); }
|
||||
|
||||
Reference in New Issue
Block a user