feat: 多班级版班级管理系统 v2.0
技术栈:Go (Gin + GORM) + PHP + MySQL 5.7 + Redis 主要功能: - 多班级完全隔离(class_id 贯穿全系统) - 后端从 Python FastAPI 重写为 Go Gin(端口 56789) - 超级管理员独立登录(env 配置路径,默认账密 admin/Admin123) - 科任老师/课代表新角色 - 课代表作业管理页面 - 排行榜分项排行(操行分/考勤/作业) - 角色加减分上下限由班主任配置 - 家长改密功能(可开关) - 班级角色按需开关 - 宿舍号格式:南0-000 - 周度/月度重置功能 - MySQL 5.7 兼容 - Nginx 反向代理部署 开发者: Canglan 版权归属: Sea Network Technology Studio 许可证: Apache License 2.0
This commit is contained in:
59
frontend/assets/js/rankings.js
Normal file
59
frontend/assets/js/rankings.js
Normal file
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* 多班级版班级管理系统 - 排行榜JS
|
||||
*
|
||||
* 开发者: Canglan
|
||||
* 版权归属: Sea Network Technology Studio
|
||||
*
|
||||
* 版权所有 © Sea Network Technology Studio
|
||||
*/
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
let currentType = 'conduct';
|
||||
|
||||
async function loadRankings(type) {
|
||||
const res = await apiGet('/api/admin/rankings', { type: type, limit: 50 });
|
||||
if (res && res.success && res.data) {
|
||||
const rankings = res.data.ranking || [];
|
||||
let html = '';
|
||||
if (rankings.length === 0) {
|
||||
html = '<tr><td colspan="4" style="text-align:center;">暂无排行数据</td></tr>';
|
||||
} else {
|
||||
rankings.forEach(function(item, index) {
|
||||
let rankClass = '';
|
||||
if (index === 0) rankClass = 'rank-gold';
|
||||
else if (index === 1) rankClass = 'rank-silver';
|
||||
else if (index === 2) rankClass = 'rank-bronze';
|
||||
|
||||
let pointsText = Number(item.points !== undefined ? item.points : (item.total_points || 0));
|
||||
if (pointsText > 0) {
|
||||
pointsText = '+' + pointsText;
|
||||
}
|
||||
|
||||
html += '<tr>' +
|
||||
'<td><span class="rank-badge ' + rankClass + '">' + (index + 1) + '</span></td>' +
|
||||
'<td>' + escapeHtml(item.student_no || '-') + '</td>' +
|
||||
'<td>' + escapeHtml(item.name || '-') + '</td>' +
|
||||
'<td><span class="record-points ' + (pointsText > 0 ? 'plus' : (pointsText < 0 ? 'minus' : '')) + '">' + pointsText + '</span></td>' +
|
||||
'</tr>';
|
||||
});
|
||||
}
|
||||
document.getElementById('rankingList').innerHTML = html;
|
||||
} else {
|
||||
document.getElementById('rankingList').innerHTML = '<tr><td colspan="4" style="text-align:center;">加载失败</td></tr>';
|
||||
}
|
||||
}
|
||||
|
||||
window.switchTab = function(type, btn) {
|
||||
currentType = type;
|
||||
document.querySelectorAll('.tab-btn').forEach(function(b) { b.classList.remove('active'); });
|
||||
btn.classList.add('active');
|
||||
loadRankings(type);
|
||||
};
|
||||
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
loadRankings(currentType);
|
||||
});
|
||||
|
||||
})();
|
||||
Reference in New Issue
Block a user