📖 目录
1. 系统概览 #
本系统是一套面向跳绳比赛的实时成绩管理平台,支持比赛建档、项目编排、运动员分组、场地分配、裁判执裁、成绩录入、实时大屏展示与导出统计的全流程。
1.1 多端能力矩阵
| 端 | 主要用户 | 核心功能 | 访问方式 |
|---|---|---|---|
| 管理员端 | 比赛管理员 | 建赛、项目、组别、场地、运动员、裁判分配、大屏配置、成绩导出 | 浏览器访问 /admin?role=admin |
| 裁判员端 Web | 裁判员 | 登录、执裁、成绩录入(计数赛 + 规定赛三角色 + 花样赛多角色) | 浏览器访问 /judge |
| 裁判员端 小程序 | 裁判员 | 同上,针对手机优化 | 微信小程序搜索 |
| 大屏展示端 | 现场观众 | 实时成绩展示、场次切换动画 | 浏览器访问 /display(接大屏/投影仪) |
| Android / iOS | 裁判员 | 等同小程序,多端框架打包 | 安装 APK / IPA |
1.2 技术架构
前端:HTML / Alpine.js / 微信小程序 WXML | 后端:Cloudflare Workers / Functions | 数据库:Cloudflare D1 (SQLite) + KV | 实时同步:SSE(Server-Sent Events)
2. 系统入口与登录 #
2.1 门户首页
打开主域名后进入系统门户,根据角色点击对应入口。上图(图 1)即为门户首页实拍。
2.2 管理员登录
点击「管理员端」进入管理员登录页,URL 为 /admin?role=admin。输入管理员账号和密码后登录。
• 管理员密码通过环境变量
ADMIN_PASSWORD 配置,无硬编码默认值• 登录失败 5 次自动锁定 5 分钟(管理员 + 裁判员双端)
• 锁定期间即使密码正确也会被拒绝,5 分钟后自动解锁;管理员也可在「审计日志」手动解锁
2.3 角色隔离(共存登录)
管理员端同一页面承载三个岗位:
/admin?role=admin→ 管理员/admin?role=certificate→ 证书组/admin?role=recorder→ 记录组
三个岗位的登录态分别保存在不同 localStorage key 中(如
adminToken / certificateToken / recorderToken)。你可以同时打开三个浏览器标签页分别登录三个岗位,互不串台、互不踢下线。
2.4 裁判员登录
裁判员通过 Web 或小程序进入登录页,输入裁判员编号和密码。
手机浏览器首次访问
/judge 时会提示「添加到主屏幕」。安装后全屏使用,体验接近原生 App。
3. 管理员端使用 #
管理员端是系统的"驾驶舱",左侧导航可切换全部功能模块。
3.1 侧边栏导航
3.1.1 比赛管理
创建一场比赛,作为所有数据的顶层容器。
/display。
display?id=当前比赛ID,直接进入本场比赛大屏。
3.1.2 比赛项目管理
管理比赛中的所有竞赛项目(如 30 秒单摇、3 分钟单摇接力、个人花样、规定套路等)。
• 计数赛:1 名裁判计数,得分 = 跳绳个数
• 规定赛:3 名裁判(T1 创意 + T2 完成 + T3 主裁扣分),满分 100
• 花样赛:多角色裁判(DP/DM/DR 难度 + 完成 + 创意 + 规定扣分 + 主裁扣分)
3.1.3 赛事组别
划分组别(如「男子组 - 三年级」「女子组 - 四年级」),便于成绩分组统计。
3.1.4 场地管理
把「裁判员 + 运动员 + 项目」绑定到具体场地,是系统核心调度界面。
• 一个场地通常安排 3-8 名运动员
• 规定赛场地需要 3 名裁判同时在岗(主裁判 + 创意 + 完成)
• 计数赛只需 1 名裁判
3.1.5 运动员管理
• 运动员「分组」字段必须与「赛事组别」中已配置的组别名称完全一致
• 预览阶段前端标红提示,提交阶段后端再次验证,双层防护
• 分组不匹配的记录会被跳过,支持导出失败记录修正后重新导入
3.1.6 大屏管理
在管理员端直接调整大屏呈现样式,所见即所得。
3.1.7 成绩总览
查看、修改、导出所有已录入成绩。
3.1.8 裁判员管理
3.1.9 审计日志
记录登录、成绩提交、账号锁定/解锁等操作,便于事后追溯。
4. 裁判员端 Web 版 #
4.1 登录与任务中心
• 单点登录:同一裁判账号同一时间只能在一个设备登录
• 失败锁定:密码错误 5 次锁定 5 分钟
• 断网提示:网络断开时顶部红色横幅提示
4.2 计数赛执裁
• 抢跳:运动员提前起跳处理
• ×2:计数 ×2(多人同时跳)
• 弃权:标记为弃权
4.3 规定赛执裁(3 个角色)
| 角色 | 打分范围 | 说明 |
|---|---|---|
| 主裁判 T3 | 扣分 0-100 | 犯规减分 + 取消资格 |
| 创意裁判 T1 | 0-20 分 | 创意编排 + 现场表现 |
| 完成裁判 T2 | 0-80 分 | 动作准确性 / 熟练性 / 合拍性 |
最终得分 = T1 + T2 − T3 扣分(满分 100)。3 名裁判全部提交后大屏自动显示最终成绩。
4.4 花样赛执裁
| 角色 | 说明 |
|---|---|
| 难度裁判 DP/DM/DR | 独立评定难度动作分值 |
| 完成裁判 | 完成质量扣分(0/1/2/3/5 分档) |
| 创意裁判 | 创意编排评分 0-10 分 |
| 规定扣分 / 主裁扣分 | 规定动作缺失、总体印象扣分 |
任一维度所有裁判提交后,大屏立即显示该维度分数,无需等全部维度完成。
4.5 SSE 实时同步
裁判员提交成绩后 < 300ms 同步到其他裁判端和大屏。SSE 断开后自动重连,同时保留版本号轮询作为 fallback。
5. 裁判员端 小程序 / App #
移动端使用流程与 Web 版完全一致,UI 针对小屏优化(更大数字键盘、更易点击按钮)。
Android / iOS App 构建
- 微信开发者工具 → 切换到「多端应用模式」。
- 「工具」→「多端框架」→「生成 Android 工程」/「生成 iOS 工程」。
- Android 用 Android Studio 编译 APK;iOS 用 Xcode 配置证书后编译 IPA。
6. 大屏展示端 #
大屏端面向现场观众,通过浏览器全屏运行,使用 SSE 实时同步裁判成绩。
6.1 启动大屏
从门户点击「大屏端」或管理端顶部「大屏显示」进入时,会首先显示选择比赛界面:
/display,选择本场比赛;若从管理端「打开大屏」按钮进入,则直接绑定当前比赛。
F11 全屏,Esc 退出。
6.2 界面布局
6.3 场次切换与庆祝特效
管理员切换场次时,大屏显示过渡动画。某场次所有运动员成绩录入完成后,触发金色闪光 + 彩色纸屑庆祝特效,5 秒后自动消失。
7. 完整比赛流程 #
创建比赛 → 导入项目 → 导入组别 → 导入运动员 → 新建场地 → 分配裁判与运动员 → 审核裁判 → 设为大屏。
裁判员登录后进入任务中心,确认负责场地,等待开始。
按出场顺序录入成绩 → 提交后实时同步大屏 → 管理员在成绩总览监控进度。
进入「成绩总览」→「成绩统计表」→ 打印或导出 Excel。
8. 常见问题 FAQ #
Q1. 裁判员显示"账号审核中"怎么办?
管理员在「裁判员管理」中点击「通过审核」激活账号。
Q2. 成绩提交后大屏没更新?
- 检查网络连接
- SSE 断开后会自动重连,同时有 30 秒版本号轮询兜底
- 在管理员端重新点击「设为大屏」可强制刷新
Q3. 大屏显示"暂无比赛"?
需要在管理员端「比赛管理」中点击「📺 设为大屏」。每个时刻只能有一个比赛被设为大屏。
Q4. 打印成绩统计表没边框?
使用 Chrome 浏览器打印,边距设为"默认"或"无"。
Q5. 裁判员被锁定了怎么办?
等待 5 分钟自动解锁,或管理员在「审计日志」手动解除锁定。
Q6. "账号已在其他设备登录"?
裁判账号严格单点登录。需要当前使用者退出,或管理员禁用再启用该裁判。
Q7. 批量导入分组不匹配?
预览阶段会标红提示。最佳实践:先在「赛事组别」中配置好组别,再从组别列表复制粘贴名称到 Excel 模板。
Q8. 如何重置管理员密码?
在 Cloudflare Dashboard → Pages 项目 → Settings → Environment Variables 中修改 ADMIN_PASSWORD,然后重新部署。