v1.5.1-stable
🐛 Bug 修复
- 标签分类修复:题目页
暂无评定标签不再被错误归类到「算法细目」组,现归入「难度档」组并排在最末 - 取消评测严格实现:管理员标记取消评测时,
judge_state.status立即写为Cancelled;评测机后续返回的结果会被丢弃,不再覆盖 Cancelled 状态 - 邮箱验证状态显示:在个人资料
/edit页保存任意字段后,已验证用户的「邮箱验证状态」不再错误显示为「未验证」(新增全局缓存syzoj.verifiedUserIds) - 重算 Hit 值弹窗 bug:点击取消后不再误执行该任务;结果页改为
success.ejs模板,显示绿色对勾(之前永远显示红叉) - console define error:修复
user_edit.ejs加载blueimp-md5库时的ReferenceError: define is not defined
🆕 新增功能
🔄 重新评测按钮
取消评测过的提交,提交作者本人或管理员均可在详情页点击「重新评测」恢复评测状态,重新进入队列。设计与 Hydro OJ 对齐。
🛡️ 作弊判定的完整后果
被标作弊的提交,影响范围现在覆盖到:
| 维度 | 修改前 | v1.5.1 |
|---|---|---|
| 提交详情页测试点 | 显示原结果 | 隐藏测试点(类似 Cancelled) |
| 提交列表分数 | 显示原分(如 100) | 强制显示 0 |
| 比赛排行榜该题分数 | 原分 | 0 |
| 比赛排行榜该用户其他题分数 | 各自原分 | 全部清 0(未作答仍留空) |
| 比赛排行榜该用户总分 | 各题相加 | -1(自动沉底) |
| Hit 值比赛参与分 | 计入 | 剔除该比赛的所有贡献 |
数据完整性:所有"分数为 0"和"总分为 -1"逻辑都是展示层修正,原始
judge_state/contest_player数据不被污染,撤销作弊标记后立即恢复(60 秒内)。
📄 通用成功页模板 success.ejs
跟 error.ejs 对偶——绿色对勾样式,给所有"操作成功"场景使用。
🛠️ 数据库 Schema 变更
-- judge_state.status enum 新增 'Cancelled' 值
-- (typeorm 启动时自动 ALTER,无需手动执行)📦 新增文件
custom/modules/_email_verified_cache.js(全局已验证用户缓存)custom/modules/_contest_cheater_cache.js(全局比赛作弊用户缓存)custom/views/success.ejs(通用成功页模板)custom/libs-built/judger.js(SYZOJ judger 自定义版)custom/models-built/judge_state.js(让 typeorm 认识 'Cancelled')
升级方式
cd /etc/docker/compose/AlgoBeat
git pull origin main
docker compose up -d --force-recreate web
⚠️ 必须--force-recreate(不是 restart),因为 docker-compose.yml 加了多个新挂载。