feat(exam-prep F8): слабые темы на дашборде + strategy=weak в тренажёре
This commit is contained in:
@@ -104,9 +104,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ep-card" style="opacity:.7">
|
||||
<div class="ep-card" id="dh-weak">
|
||||
<h3>Слабые темы</h3>
|
||||
<div class="ep-card-hint">Топ-3 темы с худшей точностью появятся после F6 (тегирование) и F8.</div>
|
||||
<div id="dh-weak-list"><div class="ep-empty" style="padding:20px"><span class="ep-skel" style="width:200px;height:1em"> </span></div></div>
|
||||
</div>
|
||||
`;
|
||||
|
||||
@@ -120,6 +120,7 @@
|
||||
renderRecent(dash.recent_attempts, track.exam_key);
|
||||
renderHeatmap(dash.heatmap);
|
||||
renderMocks(dash.recent_mocks, track.exam_key);
|
||||
renderWeakTopics(dash.weak_topics || [], track.exam_key);
|
||||
if (window.lucide) lucide.createIcons();
|
||||
}
|
||||
|
||||
@@ -397,6 +398,37 @@ function formatRuDate(iso) {
|
||||
return `${d} ${months[m - 1]} ${y}`;
|
||||
}
|
||||
|
||||
function renderWeakTopics(items, examKey) {
|
||||
const el = document.getElementById('dh-weak-list');
|
||||
if (!el) return;
|
||||
if (!items.length) {
|
||||
el.innerHTML = `<div class="ep-empty" style="padding:20px">
|
||||
<i data-lucide="check-circle-2"></i>
|
||||
<p>Слабых тем не выявлено. Решите больше задач, чтобы увидеть приоритеты.</p>
|
||||
</div>`;
|
||||
return;
|
||||
}
|
||||
el.innerHTML = `
|
||||
<div class="dh-weak-rows">
|
||||
${items.map(w => {
|
||||
const tasksLeft = Math.max(0, w.total_tasks - w.solved_tasks);
|
||||
return `<a class="dh-weak-row" href="/exam-prep/${examKey}/topics/${encodeURIComponent(w.slug)}">
|
||||
<div class="dh-weak-info">
|
||||
<div class="dh-weak-title">${escapeHtml(w.title)}</div>
|
||||
<div class="dh-weak-meta">${w.correct}/${w.attempts} попыток · ${tasksLeft} задач не взято</div>
|
||||
</div>
|
||||
<div class="dh-weak-accuracy">${w.accuracy}%</div>
|
||||
<div class="dh-weak-cta">Прокачать <i data-lucide="arrow-right"></i></div>
|
||||
</a>`;
|
||||
}).join('')}
|
||||
</div>
|
||||
<div class="ep-cta-row" style="margin-top:14px">
|
||||
<a class="ep-btn ep-btn-primary" href="/exam-prep/${examKey}/practice?strategy=weak">
|
||||
<i data-lucide="target"></i> Тренировать слабые темы
|
||||
</a>
|
||||
</div>`;
|
||||
}
|
||||
|
||||
function renderMocks(items, examKey) {
|
||||
const el = document.getElementById('dh-mocks-list');
|
||||
if (!el) return;
|
||||
|
||||
Reference in New Issue
Block a user