fix: банк вопросов — сортировка и фильтр по темам
- Исправлены ключи сортировки: oldest→date_asc, easy→diff_asc, hard→diff_desc - loadTopics() теперь использует /api/subjects/:slug/topics вместо запроса 200 вопросов (не хватало для 400+ вопросов) - Добавлен onchange для select#f-topic (без него выбор темы не срабатывал)
This commit is contained in:
@@ -262,7 +262,7 @@
|
|||||||
|
|
||||||
<div class="filter-section">
|
<div class="filter-section">
|
||||||
<div class="filter-label">Тема</div>
|
<div class="filter-label">Тема</div>
|
||||||
<select class="filter-select" id="f-topic">
|
<select class="filter-select" id="f-topic" onchange="onFilterChange()">
|
||||||
<option value="">Все темы</option>
|
<option value="">Все темы</option>
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
@@ -476,14 +476,11 @@
|
|||||||
topicSel.innerHTML = '<option value="">Все темы</option>';
|
topicSel.innerHTML = '<option value="">Все темы</option>';
|
||||||
if (!subject) return;
|
if (!subject) return;
|
||||||
try {
|
try {
|
||||||
const data = await LS.api('/api/questions?subject=' + subject + '&limit=200');
|
const topics = await LS.api('/api/subjects/' + subject + '/topics');
|
||||||
const rows = data.rows || [];
|
(Array.isArray(topics) ? topics : []).forEach(t => {
|
||||||
const topicMap = new Map();
|
|
||||||
rows.forEach(q => { if (q.topic_id && q.topic) topicMap.set(q.topic_id, q.topic); });
|
|
||||||
topicMap.forEach((name, id) => {
|
|
||||||
const opt = document.createElement('option');
|
const opt = document.createElement('option');
|
||||||
opt.value = id;
|
opt.value = t.id;
|
||||||
opt.textContent = name;
|
opt.textContent = t.name + (t.question_count ? ' (' + t.question_count + ')' : '');
|
||||||
topicSel.appendChild(opt);
|
topicSel.appendChild(opt);
|
||||||
});
|
});
|
||||||
} catch {}
|
} catch {}
|
||||||
@@ -498,9 +495,9 @@
|
|||||||
if (f.topic_id) params.set('topic_id', f.topic_id);
|
if (f.topic_id) params.set('topic_id', f.topic_id);
|
||||||
if (f.difficulty) params.set('difficulty', f.difficulty);
|
if (f.difficulty) params.set('difficulty', f.difficulty);
|
||||||
if (f.type) params.set('type', f.type);
|
if (f.type) params.set('type', f.type);
|
||||||
if (f.sort === 'oldest') params.set('sort', 'oldest');
|
if (f.sort === 'oldest') params.set('sort', 'date_asc');
|
||||||
else if (f.sort === 'easy') params.set('sort', 'difficulty_asc');
|
else if (f.sort === 'easy') params.set('sort', 'diff_asc');
|
||||||
else if (f.sort === 'hard') params.set('sort', 'difficulty_desc');
|
else if (f.sort === 'hard') params.set('sort', 'diff_desc');
|
||||||
|
|
||||||
document.getElementById('qb-grid').innerHTML = '<div style="grid-column:1/-1"><div class="spinner" style="margin:60px auto"></div></div>';
|
document.getElementById('qb-grid').innerHTML = '<div style="grid-column:1/-1"><div class="spinner" style="margin:60px auto"></div></div>';
|
||||||
document.getElementById('qb-pagination').style.display = 'none';
|
document.getElementById('qb-pagination').style.display = 'none';
|
||||||
|
|||||||
Reference in New Issue
Block a user