diff --git a/app/templates/classes.html b/app/templates/classes.html index 2cc3c55..3cc8c74 100644 --- a/app/templates/classes.html +++ b/app/templates/classes.html @@ -236,8 +236,6 @@ function toggleMineFilter() { // 加载班级列表 function loadClasses() { - saveClassFilterState(); - const activeFilter = document.getElementById('activeFilter').value; const mineFilter = document.getElementById('mineFilterBtn').classList.contains('active'); let url = '/api/classes?'; @@ -248,69 +246,27 @@ function loadClasses() { fetch(url).then(r => r.json()).then(classes => { const tbody = document.querySelector('#classesTable tbody'); const isAdmin = currentUserRole === 'admin'; - tbody.innerHTML = classes.map(c => ` - - ${c.id} - ${c.name} - ${c.level || '启蒙'} - ${c.description || '-'} - ${c.active ? '进行中' : '已结束'} - ${c.student_count} - ${c.created_at} - - - ${isAdmin ? ` - ` : ''} - - - `).join(''); - }); -} - loadClasses(); -}; - -// 我的班级筛选 -function toggleMineFilter() { - const btn = document.getElementById('mineFilterBtn'); - btn.classList.toggle('active'); - if (btn.classList.contains('active')) { - btn.classList.remove('btn-outline-secondary'); - btn.classList.add('btn-primary'); - } else { - btn.classList.remove('btn-primary'); - btn.classList.add('btn-outline-secondary'); - } - loadClasses(); -} - -// 加载班级列表 -function loadClasses() { - const activeFilter = document.getElementById('activeFilter').value; - const mineFilter = document.getElementById('mineFilterBtn').classList.contains('active'); - let url = '/api/classes?'; - if (activeFilter) url += 'active=' + activeFilter + '&'; - if (mineFilter) url += 'mine=true&'; - url = url.endsWith('&') ? url.slice(0, -1) : url; - url = url.endsWith('?') ? '/api/classes' : url; - fetch(url).then(r => r.json()).then(classes => { - const tbody = document.querySelector('#classesTable tbody'); - const isAdmin = currentUserRole === 'admin'; - tbody.innerHTML = classes.map(c => ` - - ${c.id} - ${c.name} - ${c.level || '启蒙'} - ${c.description || '-'} - ${c.active ? '进行中' : '已结束'} - ${c.student_count} - ${c.created_at} - - - ${isAdmin ? ` - ` : ''} - - - `).join(''); + tbody.innerHTML = classes.map(c => { + const esc = (s) => s == null ? '' : String(s).replace(/'/g, "\\'").replace(/"/g, '"'); + const level = c.level || '启蒙'; + const desc = c.description || ''; + const teacherId = c.teacher_id || 'null'; + const active = c.active ? 'true' : 'false'; + return '' + + '' + c.id + '' + + '' + esc(c.name) + '' + + '' + level + '' + + '' + esc(desc) + '' + + '' + (c.active ? '进行中' : '已结束') + '' + + '' + c.student_count + '' + + '' + c.created_at + '' + + '' + + '' + + (isAdmin ? '' : '') + + '' + + '' + + ''; + }).join(''); }); } @@ -518,7 +474,8 @@ document.getElementById('confirm-assign-goal').addEventListener('click', async ( // 弹出确认框 if (!confirm('将给班级所有学员分配此目标,确定吗?')) return; - const res = await fetch(`/api/classes/${currentClassId}/goals`, { + const url = '/api/classes/' + currentClassId + '/goals'; + const res = await fetch(url, { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ @@ -533,7 +490,11 @@ document.getElementById('confirm-assign-goal').addEventListener('click', async ( if (res.ok) { const data = await res.json(); assignGoalModal.hide(); - alert(data.message + (data.skipped_count ? `(${data.skipped_count}个学员已分配此目标,跳过)` : '')); + let msg = data.message; + if (data.skipped_count) { + msg += ' (' + data.skipped_count + '个学员已分配此目标跳过)'; + } + alert(msg); } else { const err = await res.json(); alert(err.error || '分配失败');