feat(ctmath): человекочитаемые подписи вариантов-пробников
Вместо «Вариант 101/102/103» (технические номера) показываем источник: «РТ-2024/25 · этап I/II/III». examVariantLabel() в exam-prep.js — единый источник подписи: listVariants (пикер/dropdown) + variant_label в ответе mock/:id (строка прохождения и результата). Номера в БД остаются 101+ (нужны для фильтра-диапазона [101;1999] и провенанса). math9 — fallback «Вариант N» (не затронут). Новые варианты (104+) — дописывать в VARIANT_LABEL. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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 = `
|
||||
|
||||
Reference in New Issue
Block a user