fix(exam-prep): список «Варианты» показывает метку (ЦТ-2015…), а не «Вариант N»
variants.js хардкодил «Вариант ${n}» в гриде-пикере, заголовке и подписи кнопки,
игнорируя поле label из listVariants (бэкенд его уже отдаёт через examVariantLabel).
Добавлен хелпер labelOf(n) → подставляет v.label с фолбэком. mock.js дропдаун уже
использовал label — там достаточно перезапуска сервера, чтобы бэкенд отдал метки.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -34,6 +34,12 @@
|
|||||||
const pickerOver = document.getElementById('vp-overlay');
|
const pickerOver = document.getElementById('vp-overlay');
|
||||||
const pickerGrid = document.getElementById('vp-grid');
|
const pickerGrid = document.getElementById('vp-grid');
|
||||||
|
|
||||||
|
/* Человекочитаемая метка варианта (ЦТ-2015 и т.п.); фолбэк — «Вариант N». */
|
||||||
|
const labelOf = (n) => {
|
||||||
|
const v = variants.find(x => x.n === n);
|
||||||
|
return (v && v.label) || `Вариант ${n}`;
|
||||||
|
};
|
||||||
|
|
||||||
/* ── Picker overlay ─────────────────────────────────────────── */
|
/* ── Picker overlay ─────────────────────────────────────────── */
|
||||||
function buildGrid() {
|
function buildGrid() {
|
||||||
pickerGrid.innerHTML = variants.map(v => {
|
pickerGrid.innerHTML = variants.map(v => {
|
||||||
@@ -45,7 +51,7 @@
|
|||||||
const active = v.n === currentN ? ' active' : '';
|
const active = v.n === currentN ? ' active' : '';
|
||||||
const title = `${v.label} · решено ${v.solved}/${v.total}` +
|
const title = `${v.label} · решено ${v.solved}/${v.total}` +
|
||||||
(v.viewed_sol ? ` · решений открыто ${v.viewed_sol}` : '');
|
(v.viewed_sol ? ` · решений открыто ${v.viewed_sol}` : '');
|
||||||
return `<button class="vg-btn${cls}${active}" data-n="${v.n}" title="${title}">${v.n}</button>`;
|
return `<button class="vg-btn${cls}${active}" data-n="${v.n}" title="${title}">${v.label || v.n}</button>`;
|
||||||
}).join('');
|
}).join('');
|
||||||
pickerGrid.querySelectorAll('button[data-n]').forEach(b => {
|
pickerGrid.querySelectorAll('button[data-n]').forEach(b => {
|
||||||
b.onclick = () => { selectVariant(Number(b.dataset.n)); closePicker(); };
|
b.onclick = () => { selectVariant(Number(b.dataset.n)); closePicker(); };
|
||||||
@@ -74,7 +80,7 @@
|
|||||||
/* ── Variant rendering ──────────────────────────────────────── */
|
/* ── Variant rendering ──────────────────────────────────────── */
|
||||||
async function selectVariant(n) {
|
async function selectVariant(n) {
|
||||||
currentN = n;
|
currentN = n;
|
||||||
pickerLabel.textContent = `Вариант ${n}`;
|
pickerLabel.textContent = labelOf(n);
|
||||||
try { localStorage.setItem(`exam_prep_${examKey}_last_variant`, String(n)); } catch {}
|
try { localStorage.setItem(`exam_prep_${examKey}_last_variant`, String(n)); } catch {}
|
||||||
|
|
||||||
if (!tasksCache.has(n)) {
|
if (!tasksCache.has(n)) {
|
||||||
@@ -94,7 +100,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderVariant(n, tasks) {
|
function renderVariant(n, tasks) {
|
||||||
main.innerHTML = `<div class="vp-title">Вариант ${n}<small>${tasks.length} заданий</small></div>`;
|
main.innerHTML = `<div class="vp-title">${labelOf(n)}<small>${tasks.length} заданий</small></div>`;
|
||||||
|
|
||||||
const variantMeta = variants.find(v => v.n === n);
|
const variantMeta = variants.find(v => v.n === n);
|
||||||
const solvedTracked = new Set(); // tasks already solved this session
|
const solvedTracked = new Set(); // tasks already solved this session
|
||||||
|
|||||||
Reference in New Issue
Block a user