feat: 多班级版 v2.0 - Go后端重写 + 43轮代码审查

- 后端从 Python FastAPI 重写为 Go Gin(端口 56789)
- 多班级完全隔离
- 超级管理员独立登录
- 课代表作业管理、排行榜分项排行
- 角色加减分上下限可配置
- 家长改密功能(可开关)
- 周度/月度重置功能
- MySQL 5.7 兼容
- 43轮代码审查+全部修复
- Apache 2.0 许可证
This commit is contained in:
2026-06-22 10:06:10 +08:00
parent 4084afc53c
commit d6dec878bd
214 changed files with 12622 additions and 9725 deletions

View File

@@ -1,11 +1,11 @@
<?php
/**
* 班级操行分管理系统 - 学生端主页
* 多班级版班级管理系统 - 学生端主页
*
* 开发者: Canglan
* 联系方式: admin@sea-studio.top
* 版权归属: Sea Network Technology Studio
* 许可证: MIT License
* 许可证: Apache License 2.0
*
* 版权所有 © Sea Network Technology Studio
*/
@@ -237,7 +237,7 @@ include __DIR__ . '/../includes/header.php';
</div>
<script>
const STUDENT_ID = <?php echo $student_id; ?>;
const STUDENT_ID = <?php echo intval($student_id); ?>;
let conductPage = 1;
let conductTotalPages = 1;
@@ -302,8 +302,8 @@ include __DIR__ . '/../includes/header.php';
// 获取个人信息(宿舍号)
const infoRes = await apiGet('/api/student/my-info');
if (infoRes && infoRes.success && infoRes.data.dormitory_number) {
document.getElementById('dormitoryNumber').textContent = infoRes.data.dormitory_number;
if (infoRes && infoRes.success && infoRes.data.student && infoRes.data.student.dormitory_number) {
document.getElementById('dormitoryNumber').textContent = infoRes.data.student.dormitory_number;
document.getElementById('dormitoryInfo').style.display = '';
}
@@ -311,9 +311,9 @@ include __DIR__ . '/../includes/header.php';
const rankingRes = await apiGet('/api/student/ranking', { limit: 100 });
if (rankingRes && rankingRes.success) {
const ranking = rankingRes.data.ranking || [];
const rank = ranking.find(s => s.student_id === parseInt(STUDENT_ID));
if (rank) {
document.getElementById('studentRank').textContent = `第${rank.rank}名`;
const rankIndex = ranking.findIndex(s => s.student_id === parseInt(STUDENT_ID));
if (rankIndex >= 0) {
document.getElementById('studentRank').textContent = `第${rankIndex + 1}名`;
} else {
document.getElementById('studentRank').textContent = '--';
}
@@ -321,9 +321,8 @@ include __DIR__ . '/../includes/header.php';
// 获取作业扣分统计
const homeworkRes = await apiGet(`/api/student/homework/${STUDENT_ID}`);
if (homeworkRes && homeworkRes.success) {
const stats = homeworkRes.data.statistics;
const deductions = stats.deductions || 0;
const total = stats.total || 0;
const homework = homeworkRes.data.homework || [];
const deductions = homework.length;
document.getElementById('homeworkRate').textContent = `${deductions} 次扣分`;
}