diff --git a/backend/src/routes/exam-prep.js b/backend/src/routes/exam-prep.js index 1ee459e..079d7d7 100644 --- a/backend/src/routes/exam-prep.js +++ b/backend/src/routes/exam-prep.js @@ -30,6 +30,18 @@ const isMockVariant = (examKey, v) => { return r ? (v >= r[0] && v <= r[1]) : (v >= 1); }; +/* Человекочитаемая подпись варианта (номер в БД остаётся техническим, напр. 101). + Для ctmath варианты-пробники именуются по источнику; при добавлении новых + вариантов (104+) — дописывать сюда. Иначе fallback «Вариант N». */ +const VARIANT_LABEL = { + ctmath: { + 101: 'РТ-2024/25 · этап I', + 102: 'РТ-2024/25 · этап II', + 103: 'РТ-2024/25 · этап III', + }, +}; +const examVariantLabel = (examKey, v) => VARIANT_LABEL[examKey]?.[v] || `Вариант ${v}`; + /* ── Statements (prepared once) ────────────────────────────────── */ const SQL = { listTracks: db.prepare(` @@ -496,7 +508,7 @@ router.get('/:examKey/variants', (req, res) => { const rows = SQL.listVariants.all(req.user.id, examKey).filter(r => isMockVariant(examKey, r.variant)); const variants = rows.map(r => ({ n: r.variant, - label: `Вариант ${r.variant}`, + label: examVariantLabel(examKey, r.variant), total: r.total, solved: r.solved, viewed_sol: r.viewed_sol, @@ -1267,6 +1279,7 @@ router.get('/mock/:id', (req, res) => { id: sess.id, exam_key: sess.exam_key, variant: sess.variant, + variant_label: sess.variant != null ? examVariantLabel(sess.exam_key, sess.variant) : null, source: sess.source, status: sess.status, started_at: sess.started_at, diff --git a/frontend/js/exam-prep/mock.js b/frontend/js/exam-prep/mock.js index 0922480..9b563b3 100644 --- a/frontend/js/exam-prep/mock.js +++ b/frontend/js/exam-prep/mock.js @@ -149,7 +149,7 @@ const totalMs = session.duration_planned_min * 60 * 1000; const sourceLabel = session.source === 'variant' - ? `Вариант ${session.variant}` + ? (session.variant_label || `Вариант ${session.variant}`) : `Случайные ${tasks.length} задач`; main.innerHTML = `