/** * 班级操行分管理系统 - 作业扣分页JS * * 开发者: Canglan * 版权归属: Sea Network Technology Studio * * 版权所有 © Sea Network Technology Studio */ (function() { 'use strict'; const hwRole = window.PAGE_CONFIG.role; // 初始化扣分配置 const hwMaxPoints = hwRole === '班主任' ? 100 : 5; const hwNotSubmit = window.DEDUCTION_HOMEWORK_NOT_SUBMIT || 2; const hwLate = window.DEDUCTION_HOMEWORK_LATE || 1; // 更新页面中的配置值显示 document.querySelectorAll('.hw-not-submit').forEach(el => el.textContent = hwNotSubmit); document.querySelectorAll('.hw-late').forEach(el => el.textContent = hwLate); document.querySelectorAll('.hw-max').forEach(el => el.textContent = hwMaxPoints); // 更新输入框的 min/max document.getElementById('pointsChange').setAttribute('min', -hwMaxPoints); document.getElementById('pointsChange').setAttribute('max', hwMaxPoints); // 加载科目列表(学习委员) async function loadSubjectsForHomework() { const subjectSelect = document.getElementById('hwSubjectSelect'); if (!subjectSelect) return; const res = await apiGet('/api/subject/list'); if (res && res.success && res.data && res.data.subjects) { let html = ''; res.data.subjects.forEach(s => { html += ``; }); subjectSelect.innerHTML = html; } } async function loadStudents() { const res = await apiGet('/api/admin/students', {page_size: 1000}); if (res && res.success) { let html = ''; res.data.students.forEach(student => { html += ` ${escapeHtml(student.student_no)} ${escapeHtml(student.name)} ${student.total_points} `; }); if (res.data.students.length === 0) { html = '暂无学生数据'; } document.getElementById('studentList').innerHTML = html; } } function showSinglePointsModal(studentId, studentName) { window.selectedStudentIds = [studentId]; document.getElementById('selectedStudentsCount').innerHTML = `${studentName} (1人)`; document.getElementById('pointsChange').value = ''; document.getElementById('pointsReason').value = ''; document.getElementById('batchPointsModal').style.display = 'flex'; } function handleSubmitPoints() { const pointsChange = parseInt(document.getElementById('pointsChange').value); if (isNaN(pointsChange) || pointsChange === 0) { showToast('请输入有效的加减分值', 'warning'); return; } if (Math.abs(pointsChange) > hwMaxPoints) { showToast(`每次加减分不超过${hwMaxPoints}分`, 'warning'); return; } // 学习委员附加科目前缀、具体作业和缴交时间 if (hwRole === '学习委员' || hwRole === '班主任') { const subjectSelect = document.getElementById('hwSubjectSelect'); const subjectName = subjectSelect ? subjectSelect.value : ''; const hwTitle = document.getElementById('hwTitle').value.trim(); const hwDeadline = document.getElementById('hwDeadline').value; const reasonEl = document.getElementById('pointsReason'); let prefix = ''; if (subjectName) { prefix = `[${subjectName}]`; } if (hwTitle) { prefix += `[${hwTitle}]`; } if (hwDeadline) { prefix += ` 缴交:${hwDeadline}`; } if (prefix) { reasonEl.value = prefix + ' ' + reasonEl.value; } } submitBatchPoints({ related_type: 'homework' }); } // ========== 科目管理功能 ========== function toggleSubjectPanel() { const content = document.getElementById('subjectPanelContent'); const toggle = document.getElementById('subjectPanelToggle'); if (!content || !toggle) return; const isExpanded = content.classList.contains('expanded'); if (isExpanded) { content.classList.remove('expanded'); toggle.classList.remove('expanded'); toggle.textContent = '▶ 展开'; } else { content.classList.add('expanded'); toggle.classList.add('expanded'); toggle.textContent = '▼ 收起'; loadSubjectList(); } } async function loadSubjectList() { const res = await apiGet('/api/subject/list', { is_active: true }); if (res && res.success && res.data) { let html = ''; const subjects = res.data.subjects || []; subjects.forEach(sub => { const safeName = escapeHtml(sub.subject_name || ''); const safeCode = escapeHtml(sub.subject_code || ''); const sortOrder = sub.sort_order || 0; html += `
${safeName} ${safeCode} ${sub.is_active ? '启用' : '禁用'}
`; }); if (subjects.length === 0) { html = '

暂无科目,请点击"添加科目"

'; } document.getElementById('subjectList').innerHTML = html; } } function showAddSubjectModal() { const form = document.getElementById('addSubjectFormInHw'); if (form) form.reset(); document.getElementById('addSubjectModal').style.display = 'flex'; } async function submitAddSubject() { const subjectName = document.getElementById('subjectName').value.trim(); const subjectCode = document.getElementById('subjectCode').value.trim(); if (!subjectName) { showToast('请填写科目名称', 'warning'); return; } const res = await apiPost('/api/subject/create', { subject_name: subjectName, subject_code: subjectCode }); if (res && res.success) { showToast('科目添加成功'); closeModal('addSubjectModal'); loadSubjectList(); loadSubjectsForHomework(); } else { showToast(res?.message || '添加失败', 'error'); } } async function toggleSubjectStatus(subjectId, enable) { const res = await apiPut(`/api/subject/update/${subjectId}`, { is_active: enable }); if (res && res.success) { showToast(enable ? '科目已启用' : '科目已禁用'); loadSubjectList(); loadSubjectsForHomework(); } else { showToast(res?.message || '操作失败', 'error'); } } async function deleteSubject(subjectId) { if (!confirm('确定要删除该科目吗?如果科目下有作业数据将无法删除。')) return; const res = await apiDelete('/api/subject/delete/' + subjectId); if (res && res.success) { showToast('科目删除成功'); loadSubjectList(); loadSubjectsForHomework(); } else { showToast(res?.message || '删除失败', 'error'); } } function showEditSubjectModal(subjectId, name, code, sortOrder) { document.getElementById('editSubjectId').value = subjectId; document.getElementById('editSubjectName').value = name; document.getElementById('editSubjectCode').value = code; document.getElementById('editSubjectSortOrder').value = sortOrder; document.getElementById('editSubjectModal').style.display = 'flex'; } async function submitEditSubject() { const subjectId = document.getElementById('editSubjectId').value; const subjectName = document.getElementById('editSubjectName').value.trim(); const subjectCode = document.getElementById('editSubjectCode').value.trim(); const sortOrder = document.getElementById('editSubjectSortOrder').value; if (!subjectName) { showToast('请填写科目名称', 'warning'); return; } const data = { subject_name: subjectName }; if (subjectCode) data.subject_code = subjectCode; if (sortOrder !== '') data.sort_order = parseInt(sortOrder); const res = await apiPut(`/api/subject/update/${subjectId}`, data); if (res && res.success) { showToast('科目更新成功'); closeModal('editSubjectModal'); loadSubjectList(); loadSubjectsForHomework(); } else { showToast(res?.message || '更新失败', 'error'); } } // 绑定科目管理折叠面板 var subjectHeader = document.getElementById('subjectPanelHeader'); if (subjectHeader) { subjectHeader.addEventListener('click', toggleSubjectPanel); } loadStudents(); loadSubjectsForHomework(); window.loadStudents = loadStudents; window.showSinglePointsModal = showSinglePointsModal; window.handleSubmitPoints = handleSubmitPoints; window.toggleSubjectPanel = toggleSubjectPanel; window.showAddSubjectModal = showAddSubjectModal; window.submitAddSubject = submitAddSubject; window.toggleSubjectStatus = toggleSubjectStatus; window.deleteSubject = deleteSubject; window.showEditSubjectModal = showEditSubjectModal; window.submitEditSubject = submitEditSubject; })();