P0(9 条全修): - 多通道项目奖牌重复计数:domain 层按 (EventID,CategoryID,EntryID/Subject) 去重, 通道优先级 athlete→team→id - 「只排名不计分」项目(scored:false)不再进奖牌榜,REST/WS/导出口径统一 - aggregate 流水 entry_id 恒 NULL 导致重算后分数翻倍:作废范围改按 event+category 定位 - 已发布成绩仍可被「存草稿」覆盖并清空 rank:服务端 409 STATE_INVALID + 前端禁编辑 - voidResult / 规则导入重算后名次不回写:接住 Ranked 调 applyComputedRanks - 赛事包覆盖导入可能「旧项目已删、新项目没成」:先改名成功再清理,失败回滚 - 导入赛事包可覆盖正在运行的赛事目录:name==当前项目直接 400 - Console spawn 失败后守护器永久卡死:清 child/pid + 调度重启 + stop 超时兜底 - /ws 快照向非 admin 下发 admin-only 配置:按角色裁剪 settings P1(计分口径 / 契约 / 现场): - standings.tieBreak 三处接线;profiles[].recordBonusMode 生效;破纪录校验 RecordEligible 与 entry 归属;破纪录登记校验已发布成绩 - export.loadRanked 与主路径对齐;ListBackups reason 解析;CLI backup 前缀修正 (原来只增不减会撑爆磁盘);单位积分明细/导出统一权重折算;停用单位展示 - 规则导入原子化(重算并入同一事务)+ 返回 compatible/affectedEventCount/ recalculatedLedgerRows;登录审计 user_id 修正 - WS 策略性断开用 Close(code,reason);HelloMessage 补 page/instanceId; 实例注册表清理;settings/单位/项目写操作补 change_log 触发大屏刷新 - 大屏:全量快照不再被版本守卫丢弃;个人积分榜刷新;公告返回页/轮播;行数截断; REST 竞态;1008 停止重连;握手超时;时区补 Z;401 仅 AUTH_REQUIRED 才登出 - 管理端:published 行禁编辑;saveDraft 补 unit(1:06.33 显示);前端预览改用服务端 points;空成绩行不再恒「已修改」;修订详情按 id 拉取;切项目请求序号与 dirty 保护; 发布后刷新项目状态;NAV/路由按角色过滤;recorder 不再打 admin-only 接口 - Console:大屏窗口销毁后重建;大屏 URL 复用 host 归一化;backup.bat 改纯 ASCII (已在 Meowhome 实跑验证) 自检:服务端 gofmt/build/vet 通过、12 包测试全绿;前端 vue-tsc + build 通过、 node --test 24/24;console check-syntax 12 文件通过。
46 lines
2.1 KiB
Markdown
46 lines
2.1 KiB
Markdown
# Scoreboard · 赛事积分榜系统
|
||
|
||
一套局域网内部署的赛事成绩与积分系统:**一个服务端 + 两个界面**,后台一改数据,前台大屏实时跟着变。
|
||
|
||
| 界面 | 地址 | 用途 |
|
||
| --- | --- | --- |
|
||
| 实时积分大屏 | `/display` | 只读、无人值守;成绩发布后 1 秒内更新 |
|
||
| 管理面板 | `/admin` | 录入、发布成绩,控制大屏;未登录可只读查看全部赛事数据 |
|
||
|
||
## 功能概览
|
||
|
||
- **四个榜**:总积分榜、团体奖牌榜、个人积分奖牌榜、分项成绩表
|
||
- **录入即上屏**:成绩录入 → 发布 → 大屏即时更新
|
||
- **可追溯、可撤销**:草稿不上屏;发布后纠错走「撤销发布 → 改 → 重新发布」,全程留痕
|
||
- **变更历史**:仿 Git 图谱,一眼看清成绩是怎么变成现在这样的
|
||
- **现场公开**:积分明细可下钻,争议时一键推送到大屏
|
||
- **规则可配置**:积分规则以规则包(YAML)描述,可导入导出、跨赛事复用
|
||
- **赛事独立存档**:每个赛事一个独立项目目录,可整包导出/导入
|
||
- **结果导出**:Excel 总表与分项可单独导出
|
||
|
||
## 快速开始
|
||
|
||
1. 解压部署包
|
||
2. 双击 `Scoreboard Console.exe`(现场推荐:守护服务端、把大屏投到扩展屏、防熄屏、开机自启)
|
||
3. 浏览器打开终端提示的地址
|
||
|
||
```
|
||
大屏 http://<主机IP>:19540/display
|
||
管理面板 http://<主机IP>:19540/admin
|
||
```
|
||
|
||
> 也可以直接双击 `scoreboard.exe`(Linux 下执行 `./scoreboard`)只跑服务端,大屏投放与进程守护需自行接管。
|
||
>
|
||
> 完全离线运行,不依赖外网,不需要安装任何运行时。
|
||
|
||
## 文档
|
||
|
||
- [部署指南](./docs/部署指南.md):运行环境、安装与首次启动、端口与配置、大屏接线、备份恢复、故障排查
|
||
- [使用手册](./docs/使用手册.md):角色权限、各功能页面的操作步骤、大屏端使用、常见操作问题
|
||
- [常见问题(FAQ)](./docs/常见问题.md):账号、成绩与积分、大屏、数据备份、导出导入
|
||
- 规则包格式:见 [rules/README.md](./rules/README.md)
|
||
|
||
## 许可证
|
||
|
||
MIT
|