24fff8dd08a237f35e91641ca36a5ceee9ea699b
需求:人员以证件号为准(避免重名);批量导入时若证件号已存在于本地人员数据, 先导入其余人员,再把重复的人单独列出,由用户逐条/多选决定保留已有数据还是新数据。 服务端: - 迁移 0013:athletes 增加 id_card + 部分唯一索引(空值可共存) - athleteDTO/CRUD 读写 idCard,重复返回 409 - 导入表头新增可选列 id_card/gender;有姓名的行必须给证件号 - 匹配顺序:证件号 → 姓名+单位(且库中证件号为空则回填)→ 新建人员 - 证件号命中但姓名/性别/单位不一致 → 冲突,本轮不落库(报名也不建) - 新增 POST /api/entries/import/resolve(file + decisions),keep-existing/keep-new - 10 个新测试覆盖匹配/回填/冲突/决策/唯一索引 前端: - 运动员表单与列表新增「证件号」,搜索支持证件号 - 报名导入:新模板 10 列;导入后冲突面板(每行复选框 + existing↔incoming 差异高亮 + 全选/清空 + 保留已有数据/使用新数据 批量与逐条),未决策项始终可见 - 勾选报名(EntryPicker)缺证件号的运动员禁止勾选并提示 - 新增 import-conflicts.test.ts 等,前端测试 39/39 文档:使用手册(运动员证件号、导入表头与冲突流程)、常见问题(证件号重复怎么办)。 注:报名行的 team_code 与人员绑定单位不一致会计入冲突,由用户决策,不会静默改单位。
Scoreboard · 赛事积分榜系统
一套局域网内部署的赛事成绩与积分系统:一个服务端 + 两个界面,后台一改数据,前台大屏实时跟着变。
| 界面 | 地址 | 用途 |
|---|---|---|
| 实时积分大屏 | /display |
只读、无人值守;成绩发布后 1 秒内更新 |
| 管理面板 | /admin |
录入、发布成绩,控制大屏;未登录可只读查看全部赛事数据 |
功能概览
- 四个榜:总积分榜、团体奖牌榜、个人积分奖牌榜、分项成绩表
- 录入即上屏:成绩录入 → 发布 → 大屏即时更新
- 可追溯、可撤销:草稿不上屏;发布后纠错走「撤销发布 → 改 → 重新发布」,全程留痕
- 变更历史:仿 Git 图谱,一眼看清成绩是怎么变成现在这样的
- 现场公开:积分明细可下钻,争议时一键推送到大屏
- 规则可配置:积分规则以规则包(YAML)描述,可导入导出、跨赛事复用
- 赛事独立存档:每个赛事一个独立项目目录,可整包导出/导入
- 结果导出:Excel 总表与分项可单独导出
快速开始
- 解压部署包
- 双击
Scoreboard Console.exe(现场推荐:守护服务端、把大屏投到扩展屏、防熄屏、开机自启) - 浏览器打开终端提示的地址
大屏 http://<主机IP>:19540/display
管理面板 http://<主机IP>:19540/admin
也可以直接双击
scoreboard.exe(Linux 下执行./scoreboard)只跑服务端,大屏投放与进程守护需自行接管。完全离线运行,不依赖外网,不需要安装任何运行时。
文档
- 上线检查清单:比赛当天照着走一遍的核对表(含交付物、目标机、首次启动、规则包导入、大屏、备份与回退)
- 部署指南:运行环境、安装与首次启动、端口与配置、大屏接线、备份恢复、故障排查
- 使用手册:角色权限、各功能页面的操作步骤、大屏端使用、常见操作问题
- 常见问题(FAQ):账号、成绩与积分、大屏、数据备份、导出导入
- 规则包格式:见 rules/README.md
许可证
MIT
Languages
Go
53.5%
TypeScript
25.9%
Vue
14.5%
JavaScript
3.7%
NSIS
1.2%
Other
1.2%