/** * 班级操行分管理系统 - 加减分管理函数 * * 开发者: Canglan * 联系方式: admin@sea-studio.top * 版权归属: Sea Network Technology Studio * 许可证: MIT License * * 版权所有 © Sea Network Technology Studio */ (function() { 'use strict'; // 全局变量 var selectedStudentIds = []; var currentHistoryPage = 1; // 显示批量加减分模态框 function showBatchPointsModal() { selectedStudentIds = []; document.querySelectorAll('.student-checkbox:checked').forEach(cb => { selectedStudentIds.push(parseInt(cb.dataset.id)); }); if (selectedStudentIds.length === 0) { showToast('请先选择学生', 'warning'); return; } document.getElementById('selectedStudentsCount').innerHTML = `${selectedStudentIds.length} 人`; document.getElementById('pointsChange').value = ''; document.getElementById('pointsReason').value = ''; document.getElementById('batchPointsModal').style.display = 'flex'; } // 提交批量加减分 async function submitBatchPoints(options = {}) { const pointsChange = parseInt(document.getElementById('pointsChange').value); const reason = document.getElementById('pointsReason').value; if (isNaN(pointsChange) || pointsChange === 0) { showToast('分值不能为0', 'error'); return; } if (!reason.trim()) { showToast('请填写原因', 'error'); return; } const data = { student_ids: selectedStudentIds, points_change: pointsChange, reason: reason }; if (options.related_type) { data.related_type = options.related_type; } const res = await apiPost('/api/admin/conduct/add', data); if (res && res.success) { showToast(`操作成功: ${res.data.success_count} 人成功`); closeModal('batchPointsModal'); loadStudents(); if (typeof loadConductStudents === 'function') loadConductStudents(); } else { showToast(res?.message || '操作失败', 'error'); } } // 撤销扣分记录 async function revokeRecord(recordId) { if (!confirm('确定要撤销这条记录吗?撤销后学生分数将恢复。')) return; const res = await apiPost('/api/admin/conduct/revoke', { record_id: recordId }); if (res && res.success) { showToast('撤销成功'); loadHistory(currentHistoryPage); } else { showToast(res?.message || '撤销失败', 'error'); } } // 反撤销(恢复)记录 async function restoreRecord(recordId) { if (!confirm('确定要反撤销这条记录吗?分数变动将重新生效。')) return; const res = await apiPost('/api/admin/conduct/restore', { record_id: recordId }); if (res && res.success) { showToast('反撤销成功'); loadHistory(currentHistoryPage); } else { showToast(res?.message || '反撤销失败', 'error'); } } window.showBatchPointsModal = showBatchPointsModal; window.submitBatchPoints = submitBatchPoints; window.revokeRecord = revokeRecord; window.restoreRecord = restoreRecord; })();