⛷️ 跳绳比赛裁判系统

完整使用说明 · 图文版

管理员端 · 裁判员端(Web/小程序)· 大屏展示端 · Android/iOS 端

管理员端 裁判员端 (Web) 裁判员端 (小程序) 大屏展示端 Android App iOS App

1. 系统概览 #

本系统是一套面向跳绳比赛的实时成绩管理平台,支持比赛建档、项目编排、运动员分组、场地分配、裁判执裁、成绩录入、实时大屏展示与导出统计的全流程。

1.1 五大端的能力矩阵

主要用户 核心功能 访问方式
管理员端 比赛管理员 建赛、项目、组别、场地、运动员、裁判分配、大屏配置、成绩导出 浏览器访问 admin.html
裁判员端 Web 裁判员 登录、执裁、成绩录入(计数赛 + 规定赛三角色) 浏览器 judge.html(手机/平板)
裁判员端 小程序 裁判员 同上(移动体验更佳) 微信小程序搜索
大屏展示端 现场观众 实时成绩展示、场次切换动画、赛后庆祝 浏览器 display.html(大屏幕)
Android App / iOS App 裁判员 等同小程序,多端框架打包 多端应用模式构建

1.2 技术架构(极简版)

— Cloudflare 全栈架构 —
🌐
前端
HTML / Alpine.js / WXML
后端
Cloudflare Workers
🗄️
数据库
Cloudflare D1 (SQLite)
所有数据云端存储 · 多端实时同步

2. 系统入口与登录 #

2.1 三大端入口

访问部署后的主域名 https://你的域名/,进入系统门户:

跳绳比赛裁判系统
请选择您的角色入口
① 管理员端
比赛管理 · 数据查看
/admin
② 裁判员端
成绩录入 · 实时同步
/judge
③ 大屏端
实时展示 · 成绩大屏

2.2 默认账号

角色编号 / 账号默认密码备注
管理员 17653420201 ysd200608 首次登录后请修改密码
裁判员 自行注册 自行设置 注册后需管理员审核通过
⚠️ 安全提醒
• 管理员密码登录后请在「裁判员管理」或个人资料处及时修改
• 裁判员注册后需管理员在「裁判员管理」页面点击「通过审核」才能登录

3. 管理员端使用 #

管理员端是整个系统的"驾驶舱",通过左侧导航切换 7 大功能模块:

3.1 侧边栏导航

🏆
比赛管理
📋
项目管理
👥
赛事组别
📍
场地管理
🏃
运动员管理
🖥️
大屏管理
📊
成绩总览
⚖️
裁判员管理

3.1.1 比赛管理

创建一场新比赛,作为所有数据(项目、组别、场地、运动员、成绩)的顶层容器

1
新建比赛:点击右上「+ 新建比赛」,填写比赛名称、举办时间、地点等信息。
2
设为大屏:在比赛列表中点击「📺 设为大屏」按钮,该比赛的数据将推送到 display.html
3
编辑/删除:点击「✏️ 编辑」可修改比赛信息,「🗑️ 删除」会级联删除该比赛下的所有项目、组别、场地、成绩(不可恢复,请谨慎)。

3.1.2 项目管理

管理比赛中的所有竞赛项目(如 30 秒单摇、3 分钟单摇接力、个人花样、规定套路等)。

1
批量导入预设项目:点击「📥 批量导入」,从内置的预设项目库中勾选需要的项目(如「30 秒单摇」「3 分钟长绳」),支持搜索/筛选(按类型、按计分方式),一键导入。
2
新建项目:点击「+ 新建项目」手动创建。必填字段:项目名称、所属类型(计数赛/规定赛)、计分方式(个数/分数)。可选:关联预设模板。
3
批量删除:勾选行首复选框 → 顶部「🗑️ 批量删除」按钮。
💡 关键概念
计数赛:1 名裁判计数 30 秒/3 分钟内的跳绳个数,得分 = 跳绳个数
规定赛:3 名裁判分别评分,最终得分 = T1(创意) + T2(完成) + T3(主裁判扣分),满分 100

3.1.3 赛事组别

为比赛划分组别(如「男子组 - 三年级」「女子组 - 四年级」「混合组 - 五年级」),便于成绩分组统计。

1
批量导入预设组别:点击「📥 导入预设组别」,从预置的「男子组/女子组/混合组 × 各年级」组合中勾选添加。
2
新建组别:手动填写「组别名称」(如"男子组 - 三年级"),选择「性别」「年龄段」。

3.1.4 场地管理

这是系统的核心调度界面,用于把"裁判员 + 运动员 + 项目"三者绑定到具体场地。

1
新建场地:点击「+ 新建场地」,输入场地编号(如 1/2/3 号)、场地名称。设置该场地容纳的运动员数
2
分配裁判员:在场地卡片上点击「⚖️ 分配裁判」,勾选要承担本场地的裁判员(计数赛规定赛-主裁判/创意/完成)。同一裁判员可分配到多个场地
3
分配运动员:点击「👥 分配运动员」,从左侧运动员池中勾选要加入本场地的运动员,右侧用「↑↓ 上下移」调整出场顺序。这个出场顺序将决定裁判员的录入顺序。
🎯 调度技巧
• 一个场地通常安排 3-8 名运动员,避免选手等待过长
• 规定赛场地需要 3 名裁判同时在岗(主裁判 + 创意 + 完成)
• 计数赛只需 1 名裁判(或 1 名计数 + 1 名计时分工)

3.1.5 运动员管理

1
新增运动员:手动填写姓名、性别、所属学校/单位、组别。支持全选所有页(分页时使用),以便一次性批量操作。
2
批量导入:点击「📥 批量导入」下载 Excel 模板 → 填好后上传 → 系统实时预览并校验分组 → 「确认导入」。
3
编辑/移除:点击行内「编辑」可修改运动员信息;「移除」是从当前比赛中移除(不会删除账号本身)。

批量导入 · 分组校验详解

系统采用两层防护机制,确保只有分组正确的运动员才能被导入:

— 批量导入预览界面 —
# 姓名 学校 分组
1 张三 清华附小 青年组混合组 ✓
2 李四 北大附小 少年组 分组不匹配:运动员所属分组[少年组]不在赛事组别中
⚠️ 1 条标红记录将被跳过,仅导入 1 条有效记录
确认导入 1 条有效记录
取消

导入完成后,系统会弹出导入结果汇总

1
成功导入
1
导入失败
2
共计

失败记录支持:📥 导出 Excel(便于修正后重新导入)、重新导入失败记录(快速重试)。

⚠️ 分组校验规则
• 运动员的「分组」字段必须与「赛事组别」中已配置的组别名称完全一致(含空格、全半角)
• 若赛事尚未配置任何组别,则所有运动员均可通过分组校验(视为不限组别)
• 分组为空的运动员不会触发校验,可正常导入
• 双层防护:预览阶段前端校验标红提示 + 提交阶段后端再次验证,确保数据一致性

3.1.6 大屏管理

在管理员端无需打开大屏窗口,就能直接调整大屏的呈现样式。

1
选择布局:从内置的多种网格布局中选用(如 2×2、3×3、4 列、6 列)。
2
选择背景:内置 6 套主题(火焰、深蓝、紫罗兰、森林、夕阳、自定义图片)。
3
自动切换 / 手动下一场:开启「自动模式」后大屏将按倒计时自动切换场次;也可点「手动下一场」即时切换。
4
自定义滚动播报文案:底部跑马灯支持自定义公告(如"请下一组选手准备")。
5
实时预览:右侧"实时成绩预览"模块会即时显示大屏当前状态,所见即所得。

3.1.7 成绩总览

查看、修改、导出所有已录入的成绩。

1
视图切换:顶部两个标签「成绩列表 / 成绩统计表」。
2
成绩列表:支持按「全部 / 计数赛 / 规定赛 / 场地 N」筛选,每行可「修改」成绩。
3
成绩统计表:按项目 × 组别自动生成模板表,支持打印(带边框)和导出 Excel。
💡 打印小技巧
• 统计表已优化 @media print 样式,打印预览时会自动带上边框
• 推荐在 Chrome 浏览器中打印 → 设置边距为"默认"或"无"以获得最佳效果

3.1.8 裁判员管理

1
审核注册:新裁判员注册后「审核状态」显示为待审核,点击「通过审核」按钮激活账号(审核通过后自动启用)。
2
新增/编辑裁判:管理员可直接创建裁判员账号(用于纸质登记),设置裁判类型(计数赛 / 规定赛-主裁判/创意/完成)和默认密码。管理员创建的裁判员默认为"审核通过"状态。
3
禁用/启用切换:审核通过的裁判员操作列显示「禁用」或「启用」切换按钮。点击后根据当前状态自动切换:
禁用(橙色)→ 点击后账号停用,裁判员无法登录
启用(灰色)→ 点击后账号恢复,裁判员可正常登录
💡 审核状态 vs 启用状态
审核状态(独立显示):表示裁判员是否通过了管理员审核,只有"待审核"和"审核通过"两种
启用/禁用(切换按钮):审核通过后才出现,用于临时停用或恢复裁判员登录权限
• 两者完全独立:禁用裁判员不影响其审核通过状态,启用也不需要重新审核

4. 裁判员端 Web 版 #

4.1 登录与执裁任务选择

1
登录:访问 judge.html,输入裁判员编号 + 密码。错误时密码框会变红(编号不存在时编号框变橙色),并显示引导按钮。
2
注册:未注册的裁判员点「注册账号」→ 填写姓名、手机号、编号、密码。
3
任务中心(Hub):登录后进入任务中心,卡片列表显示你被分配的所有执裁任务(如「1号场地 - 计数赛」「2号场地 - 规定赛-主裁判」)。点卡片进入对应执裁界面。
🔒 单点登录限制
同一裁判员账号同一时间只能在一个设备上登录(不限 Web 或小程序)。如果账号已在某设备登录,其他设备尝试登录时会提示「账号已在其他设备登录,请等待当前用户退出后再尝试」。
• 当前登录端退出后,其他设备即可正常登录
• 不会出现"被挤下线"的情况——先登录者不受影响
💡 PWA 安装(推荐)
首次访问 judge.html 时,手机浏览器会提示「添加到主屏幕」。安装后即可全屏使用,体验接近原生 App。

4.2 计数赛执裁流程

执裁场次
场次:1-1 | 1号场地
比赛项目
30秒单摇
完成进度 2/5 人
第 3 位 / 共 5 位
张三
清华附小 · 男子组-三年级
156
输入成绩(个)
1
2
3
4
5
6
7
8
9
0
抢跳
×2
弃权
确认提交 156 个 →
1
输入成绩:使用屏幕底部数字键盘逐位输入运动员跳绳个数(0-9999)。回车键 = 快速提交。
2
特殊处理:抢跳:运动员提前起跳,自动扣除 10 个或直接置 0
×2:计数 × 2(用于多人同时跳)
弃权:标记为弃权
3
跳过:点击底部「暂时跳过」可在不录入成绩的情况下移动到下一位。
4
返回:顶部「←」按钮返回任务中心,可切换到其他场地。
5
全部完成:所有运动员成绩录入完毕后,显示「全部完成」汇总页(金银铜牌 + 同步到大屏提示)。

4.3 规定赛执裁(3 个角色)

规定赛由3 名裁判员分工评分,各角色登录后会自动进入对应执裁界面(judge-head.html / judge-creative.html / judge-completion.html)。

角色页面打分范围说明
主裁判 (T3) judge-head.html 扣分 0-100 勾选犯规减分(如脚触地 +5、绳触地 +5)和取消资格项;得分 = 100 − 扣分
创意裁判 (T1) judge-creative.html 0-20 分 整体创意编排 + 现场表现效果
完成裁判 (T2) judge-completion.html 0-80 分 动作准确性 / 熟练性 / 合拍性 / 一致性

最终得分 = 100 − T3扣分 + T1 + T2(满分 100 + 20 + 80 = 100,因为 T1 + T2 也是 0-100)

4.4 查看历史成绩

小程序端提供"我的历史"页面(history.wxml),可查看本裁判员历史上报的所有成绩,便于赛后回顾和申诉。

5. 裁判员端 小程序 / App #

移动端(微信小程序 / Android / iOS App)使用流程与 Web 版完全一致,但 UI 针对小屏做了优化(数字键盘更大、按钮更易点击)。

5.1 登录与界面

1
错误提示样式: • 密码错误 → 密码框红框 + 错误卡片带 ✕ 图标
• 编号不存在 → 编号框橙框 + 错误卡片带 ⚠ 图标 + 「立即注册」快捷按钮
• 账号审核中 → 带 ⏳ 图标
• 已禁用 → 带 🔒 图标
• 已在其他设备登录 → 带 🔒 图标 + 「账号已在其他设备登录,请等待当前用户退出后再尝试」
2
任务列表:登录后显示与 Web 版完全相同的执裁任务卡片。
3
规定赛:主裁判界面勾选扣分项(多选);创意/完成裁判用滑块或数字键盘输入分数。

5.2 Android / iOS App 构建

  1. 在微信开发者工具中切换到「多端应用模式」。
  2. 点击菜单「工具」→「多端框架」→「生成 Android 工程」 / 「生成 iOS 工程」 → 自动生成原生项目壳。
  3. Android:使用 Android Studio 打开生成的工程 → 编译 APK。
    iOS:使用 Xcode 打开 → 配置证书 → 编译 IPA。
  4. App 内核与小程序完全一致,无需重复开发业务逻辑。
💡 配置要求
project.miniapp.json 中需包含 mini-android / mini-ios 段(首次生成时开发工具会自动创建)
• 详见 APK快速构建指南.md

6. 大屏展示端 #

大屏端面向现场观众,通过浏览器全屏运行,实时同步裁判员录入的成绩。

6.1 启动与全屏

1
打开大屏:访问 display.html,浏览器自动连接到管理员设置的比赛。
2
进入全屏:F11(或点击右上角 ⛶ 按钮)→ 全屏显示,Esc 退出。

6.2 界面布局

14:32:08
2026-06-14 周六
2026 全国跳绳锦标赛
项目:30 秒单摇
第 1 场次 ● 实时
共 5 名运动员 3/5 已录入 · 60%
1-1
张三
清华附小
156
1-1
李四
北大附小
142
1-1
王五
复旦附小
--

6.3 场次切换动画

当管理员切换到下一场次时,大屏会显示"第 X 场次 → 第 Y 场次"的过渡卡片,旧场次卡片向左滑出,新场次卡片从右滑入。

6.4 赛后庆祝特效

当某场次所有运动员成绩录入完成时,大屏会触发:

6.5 底部跑马灯

滚动播报最新成绩或管理员自定义的公告文案。右侧实时显示「已录 / 总人数」统计。

7. 完整比赛流程 #

下面以一场 30 人 30 秒单摇计数赛为例,演示从开赛到结束的完整操作流。

赛前 1 天:管理员准备
创建比赛 → 批量导入项目(如"30秒单摇")→ 批量导入组别(男子/女子 × 各年级)→ 批量导入 30 名运动员 → 至少新建 5 个场地 → 给每个场地分配运动员(3-8 人/场)→ 审核通过所有注册裁判员 → 把大屏调到目标比赛。
赛前 30 分钟:裁判员就位
裁判员用手机/平板打开 judge.html,登录后在 Hub 中确认自己负责的场地 → 等待比赛开始。
比赛进行中
每位裁判员按出场顺序逐个录入成绩 → 提交后实时同步到大屏 → 观众实时看到最新排名。管理员可在「成绩总览」实时查看进度。
比赛结束
当某场次所有运动员成绩录入完毕 → 大屏触发🏆庆祝特效 → 管理员切到下一场次 → 重复。
赛后归档
管理员进入「成绩总览」→「成绩统计表」标签 → 切换到「成绩统计表」视图 → 打印或导出 Excel → 装订成纸质证书/奖状。

8. 常见问题 FAQ #

Q1. 裁判员登录时一直显示"账号审核中"怎么办?

显示"账号审核中"说明该裁判员注册后尚未通过管理员审核。需要管理员在「裁判员管理」中找到该裁判员,点击「通过审核」按钮。审核通过后账号自动启用,裁判员即可登录。

Q2. 输入密码错误时只有通用错误,没有红色边框?

检查后端是否正确返回 errorCode: 'WRONG_PASSWORD'。如果后端没问题但前端没显示,尝试清除浏览器缓存(Ctrl+Shift+R 强制刷新)。

Q3. 成绩提交后大屏没有立即更新?

大屏默认 5 秒自动轮询。如需即时刷新,在管理员端"大屏管理"中调整轮询频率;或在管理员端点击「设为大屏」重新下发一次。

Q4. 打印成绩统计表时没有边框?

已修复(2026-06-13 更新)。如仍有问题,请使用 Chrome 浏览器,且在打印设置中将边距设为"默认"或"无"。

Q5. 多个裁判员同时录入同一运动员会冲突吗?

不会。系统在数据库层使用唯一约束 + 后写入覆盖原则。同一个运动员的规定赛 T1/T2/T3 来自不同裁判员,互不冲突;计数赛成绩以后提交者为准。

Q6. 大屏显示"暂无比赛"?

需要在管理员端「比赛管理」中找到目标比赛,点击「📺 设为大屏」按钮。每个时刻只能有一个比赛被设为大屏。

Q7. 小程序编译报错 "Cannot read property of undefined"?

通常是用了 ?.?? 这类 ES2020 语法。微信小程序编译器默认不支持,需要改写成传统写法

// ❌ 不支持
const name = app.globalData.judgeInfo?.name
// ✅ 改写为
const info = app.globalData.judgeInfo || {}
const name = info.name

Q8. 如何重置管理员密码?

登录 Cloudflare Dashboard → D1 → 找到 admins 表 → 用 SQL 直接更新密码字段(密码需先用 BCrypt 加密)。

Q9. 部署到 Cloudflare Pages 失败?

常见原因:wrangler.tomldatabase_id 没改成真实 ID。详见 DEPLOY.md

Q10. 大屏可以连接投影仪吗?

可以。推荐用一台笔记本电脑连接投影仪 → 浏览器打开大屏 → F11 全屏 → 设置浏览器开机自启。系统对宽屏(1920×1080+)和超宽屏(21:9)都做了适配。

Q11. 批量导入运动员时,分组名称不匹配怎么处理?

预览阶段会将分组不匹配的行标红,并在分组列下方显示具体原因(如"分组不匹配:运动员所属分组[少年组]不在赛事组别中")。处理方式:

🎯 避免分组不匹配的最佳实践
先在「赛事组别」中配置好所有组别,再下载运动员 Excel 模板填写数据,并从组别列表中复制粘贴组别名称,确保完全一致。

Q12. 批量导入时提示"确认导入"按钮是灰色的?

这说明预览中所有记录都不符合分组要求(全部标红),没有可导入的有效数据。需要先修正 Excel 中的组别名称,重新上传文件。

Q13. 分组字段为空的运动员能导入吗?

可以。分组为空的运动员不触发分组校验,会直接导入。导入后可在运动员管理列表中手动编辑补充组别。

Q14. 裁判员提示"账号已在其他设备登录"怎么办?

系统采用严格单点登录机制——同一裁判员账号同一时间只能在一个设备上使用(不限 Web 或小程序)。出现此提示说明该账号已在其他设备登录。解决方式:

💡 单点登录要点
• 先登录者不受影响,不会被挤下线
• 退出登录即可释放,无需等待超时
• Web 端和小程序端共享同一套登录限制