docs: 用户文档补齐批次层/成绩框实时提示/窄屏支持/版本号来源/权限说明

This commit is contained in:
AskaEth committed 2026-09-11 04:17:40 +08:00
1 parent 08a5740fb2
commit 0485975cd1
5 files changed
+115 -22

No files matched your search

+3
View File
@@ -17,6 +17,9 @@
- **全屏公告**:推送后先全屏显示(5–120 秒),随即常驻大屏底部公告栏,直到替换或清除
- **分批发布**:一个项目分多场跑(如跑道 8 条、30 人分 4 场)时,**每跑完一批就能先发布一批**——空成绩只是提示、**不再挡发布**,未录的行自动跳过,补录后再发一次即自动重算;名次与积分先按已发布的那部分算,大屏立刻有内容
- **实时赛况大屏页**:新增「实时赛况」页,显示当前进行中项目的实时排名(名次 / 运动员·队 / 单位 / 成绩);1 个项目单栏、2 个自动左右分栏;当前项目按「人工指定 → 排期命中(开始时间前后 30 分钟)→ 最近发布过成绩的项目」判定,**下一场开始前持续显示上一场**;可在「大屏控制 → 实时赛况」卡片配置
- **显式批次层**:组别之下可再分批(`第 1 批`、`第 2 批`…),录入页按批筛选、只在自己这一批里找人;支持手动勾选设置批次、报名表可选列 `heat`、以及按人数「一键均分」。**批次只是录入 / 展示分组,不参与算分**——名次与积分仍按「小项 + 组别」计算
- **成绩框实时提示**:聚焦成绩格打字时旁边浮出小气泡——合法显示解析结果(`1:06` → `= 66 秒`)、可疑 / 不合法直接说原因并带出那一格原文;不挡输入、不改行高,与发布前防呆同一套口径
- **窄屏 / 手机可用**:管理面板适配窄窗口与手机浏览器(局域网访问 `/admin`):侧栏收成抽屉、宽表格横向滑动、对话框不超出屏幕、触控目标放大
- **小项类型齐全**:个人 / 团体 / 对抗比赛 / **个人+团体**(同一个项目同时按个人与团体通道记分)
- **多显示器**:支持多屏各锁一页(kiosk 全屏),也能在管理端为指定显示器单独开窗或收窗;「大屏控制」页的「在线大屏」列表实时显示每个在线实例(含局域网浏览器打开的 `/display`)当前在哪一页,可逐屏 / 逐设备单独切页
- **规则可配置**:积分规则以规则包(YAML)描述,可导入导出、跨赛事复用
+35 -4
View File
@@ -18,6 +18,8 @@
> 未登录也能进管理面板,只是所有写操作按钮被禁用,顶部会出现「当前为访客只读视图」提示。
> 个别功能对身份要求更高:「大屏控制」里的**切页、公告、锁定 / 解锁、强制刷新**(走服务端指令)记录员及以上可用;**开窗 / 收窗 / 重新排布**是服务管理程序在本机执行的操作(只在从服务管理窗口打开的面板里可用),不受角色限制;同页的「**实时赛况**」配置(模式与当前项目)属于赛事设置,**只有管理员能保存**——非管理员看到的是整组置灰加一行提示条(见第 9 节)。
### 1.1 登录
1. 打开管理面板地址,进入登录页;
@@ -45,6 +47,8 @@
顶部栏显示:实时连接状态、服务端版本、刷新按钮、当前账号与角色、退出按钮。左侧栏底部有快捷键提示:`Ctrl+Enter` 存草稿、`Alt+Enter` 发布。
**窄窗口 / 手机**:管理面板可以在**窄窗口与手机浏览器**里用(局域网内访问 `http://<主机IP>:19540/admin` 即可)。窄屏下左侧导航收成抽屉(点顶栏的菜单按钮展开)、宽表格可以**横向滑动**查看、对话框不会超出屏幕、按钮与分页的点击区域也放大了,触屏点得中。录入、发布、看榜这些日常操作在手机上都能完成;赛事配置这类操作条目较多,仍建议在电脑上做。
---
## 3. 仪表盘
@@ -60,12 +64,24 @@
## 4. 成绩录入
### 4.1 选择项目
### 4.1 选择项目与批次
1. 左侧「项目」列表按大项分组,点选要录入的小项;
2. 每个小项带状态徽标:**已发布** 或 **待录入**;
3. 多个组别时,表格上方出现组别页签,切换组别分别录入;
4. 配了「按队内平均」通道的小项(例如「个人+团体」项目的团体通道),工具栏下方会出现 **「平均值口径」单选**:`只算有效成绩`(没有有效成绩的人不进分母)或 `全部报名人员都计入`(没成绩的按 0 计入平均)。点选后立即保存到该小项,不需要另外点保存;这是小项级设置,该小项的所有组别共用。
4. 组别页签旁边有**批次下拉**(`全部` / `第 1 批` / `第 2 批` / … / `未分批`),默认 `全部`(`未分批` 只在确实还有未分批的行时才出现)。选某一批后表格只显示那一批的人,方便录入员**只在自己这一批里找名字**,不用在一大堆人里翻;
5. 配了「按队内平均」通道的小项(例如「个人+团体」项目的团体通道),工具栏下方会出现 **「平均值口径」单选**:`只算有效成绩`(没有有效成绩的人不进分母)或 `全部报名人员都计入`(没成绩的按 0 计入平均)。点选后立即保存到该小项,不需要另外点保存;这是小项级设置,该小项的所有组别共用。
**批次是什么**:层级是 **大项 → 小项 → 组别 → 批次**。批次只是「把一条组别里的人分成几组,方便分批录入 / 分批查找」的**录入与展示分组**——**不参与算分**:名次与积分仍然按「小项 + 组别」整体计算,分批与否不会让分数、名次发生任何变化(评审口径不会变成「按批排名」)。批次筛选也只影响这张表格显示哪些行,不影响发布、积分榜与大屏。
**怎么分批**(三种方式,可混用):
1. **手动勾选**:勾选若干行 → 在「已选 N 行」工具栏里填批次号 → 点 **设为第 N 批**;批次号留空时输入框会提示推荐的**下一个批次号**(已有最大号 + 1),也可直接写新的号;点 **清除批次** 把选中的行改回 `未分批`;
2. **报名表里填**:导入报名表时用可选列 `heat`(正整数,留空 = 未分批),见[报名名单导入规范](./报名名单导入规范.md);
3. **一键均分**:在同一个工具栏里填「每批 N 人」(默认 8),点 **一键均分**——只对**未分批**的行按当前表格顺序切片,批次号接着已有最大号往后排;**已经分好批的行一个都不动**,手工编排不会被冲掉。确认框会先说明将编排多少行、共几批、从第几批到第几批。
> 批次号是 1–999 的整数。切换组别后批次筛选与勾选都会重置(批次是「组别之下」的概念,换组别后旧的批次号没有意义)。
> 分项成绩表与导出**暂不**按批次分块,导出的仍是整组成绩——需要按批查看时,请在「成绩录入」页用批次下拉筛选。
> 团体成绩 = 该单位在本组别所有报名项成绩的平均值(成绩从每个人那一行读),由系统算出来:正常流程是给每个参赛人员各报一条(走 10.7 的「个人报名」),成绩照常录到每个人那一行,团体那一行(如果也报了)不用填成绩。
> 选「全部报名人员都计入」时,只报了单位、一个人都没报(或队员都没成绩)的那条报名也会按 0 进分母,会把该单位的平均成绩拉低;口径与算法见 10.2「大项 / 小项」与 10.4「计分通道」。
@@ -76,7 +92,7 @@
| 列 | 操作 |
| --- | --- |
| 成绩输入 | 直接输入成绩;工具栏会提示当前单位(秒 / 米 / 次 / 分),成绩格比过去更宽,四位数也看得全 |
| 成绩输入 | 直接输入成绩;工具栏会提示当前单位(秒 / 米 / 次 / 分),成绩格比过去更宽,四位数也看得全;打字时格子旁边会浮出一个小提示(见下) |
| 名次 | 自动排名项目由系统自动计算,不可编辑;手动名次项目(录入方式为「手动名次」或比较方式为「不比较」)可直接填名次 |
| 状态 | 下拉选择:**有效**、**DNS 弃赛**、**DQ 取消**、**DNF 未完赛**、**退赛** |
| 积分(自动) | 随成绩实时计算,仅供参考 |
@@ -88,6 +104,15 @@
- 距离 / 计数 / 得分类:按工具栏提示的单位填数字,如米 `12.34`、次 `12`、分 `96.5`;
- 秒位 ≥ 60 仍然拒绝(`1:70` 不是 70 秒),但报错会写明原因(见 4.4)。
**打字时的实时提示**:光标停在某个成绩格里打字时,**这一格旁边会浮出一个小提示**,边打边告诉你系统怎么理解它——不用等发布才知道对错。提示分三种:
- **合法** → 直接显示**解析结果**,例如打 `1:06` 显示 `= 66 秒`、打 `66.33` 显示 `= 66.33 秒`(米 / 次 / 分项目显示对应单位),让你确认系统理解的和你想的是同一个数;
- **可疑** → 例如 `成绩 ≤ 0,疑似录入错误`,放行但提个醒;
- **不合法** → 直接说明原因,并**带出那一格的实际内容**,例如 `秒位不能 ≥ 60(当前「1:70」),请写成 1:06 或 66 这类`、`成绩写法无法识别(当前「约1分06秒」),可用 66、66.33、1:06、1:06.33、1分06秒`;
- **空格子不提示**(还没录是正常状态);提示只是浮层,**不接收点击、不占布局、不会改变行高**,继续打字不受影响;靠屏幕底部时提示会自动翻到格子上面显示。
这个提示与发布前的「防呆校验」(见 4.4)**用的是同一套判定**,不会出现「打字时说没问题、发布时却被拦下」这种自相矛盾。
**示例文本不是已填内容**:空格子里显示的 `例 1:06.33`(距离 `例 12.34`、计数 `例 12`、得分 `例 96.5`)是**更淡的斜体灰字**,只是告诉你大概怎么写,**不代表这一格已经有成绩**。灰字不会被提交;点发布时如果那一格还是灰字,就按「还没录」自动跳过(本次不发布这一行),不会连累其他已填成绩的发布。过去示例文本长得和真实输入一样,容易看成「我已经填了」。
右侧「实时积分预览」显示:若现在发布,各单位积分的变化、最大分差、受影响单位数。
@@ -122,6 +147,8 @@
有**错误**时点「发布」会被拦下并提示第一处问题;只有提醒(含还没录的行)时发布会照常进行,未录的行自动跳过。
> 这套判定与打字时格子旁的实时提示(见 4.2)**同源**:输入时看到的解析结果 / 报错原因,与这里、以及发布时的拦截口径完全一致。
### 4.5 存草稿与发布
1. **存草稿**:保存当前组别的成绩,草稿**不会上屏**,也不计入积分榜;有未保存修改时页面会显示「有未保存修改」徽标。
@@ -260,6 +287,8 @@
页面顶部徽标显示当前是「轮播中」还是「已锁定」。
> **权限**:本页的**切页、公告、锁定 / 解锁、强制刷新**(服务端指令)记录员及以上都能用;**开窗 / 收窗 / 重新排布**由服务管理程序在本机执行,不受角色限制(该卡片只在从服务管理窗口打开的面板里可用);只有「实时赛况」卡片(模式与当前项目)属于赛事设置,**仅管理员能保存**,非管理员看到的是整组置灰 + 一行提示条。
**公告**:点「推送公告」后所有大屏先**全屏**展示这条公告,到时间后自动退回原来的页面(没锁定就继续轮播),公告正文留在底栏的「公告」槽位继续显示,直到被新公告替换或点「清除公告」。公告卡片顶部徽标显示「当前公告:有 / 无」,徽标下面那一行就是当前公告正文(没有公告时显示「暂无公告(大屏底栏显示占位)」)。公告会随赛事设置保存:新开的大屏窗口、断线重连之后,会先把当前公告再全屏播一遍(默认 15 秒)后留在底栏;点「清除公告」后底栏回到「暂无公告」占位。
**实时赛况**:「实时赛况」卡片决定大屏「实时赛况」页显示哪几个项目(**最多 2 个**)。
@@ -268,7 +297,7 @@
- **项目 1 / 项目 2** 两个下拉:从当前赛事的小项里选(选项里有「未指定」),已选的行可以「清除」;同一个项目不会重复占两个槽位;
- **当前生效**:显示此刻大屏实际会显示的项目与入选原因,格式如 `男子 100 米(排期命中)`;没有可显示的项目时显示「当前没有可显示的项目」。旁边的「刷新」只重新读取,不改配置;
- **保存**:改完模式或项目后点「保存」,提示「实时赛况设置已保存」后大屏按新配置显示;卡片底部注明「当前项目最多 2 个」;
- 该卡片的「保存」需要**管理员**身份(实时赛况属于赛事设置,只有管理员能改);示例数据模式下不能保存。
- 该卡片的「保存」需要**管理员**身份(见本节开头的权限说明);示例数据模式下不能保存。
**在线大屏**:右侧「在线大屏」卡片列出的是**真实**的在线实例,直接读服务端 `GET /api/display/instances`,打开页面时每 5 秒自动刷新一次(浏览器切到后台时暂停,切回来立刻补一次)。每个实例一行,显示实例 ID、在线 / 离线徽标、「局域网浏览器」或「屏 N」标记、当前所在页、来源地址与最后心跳;服务端判定某个实例落后时还会多一个「落后」徽标(大屏可能在卡或网络差)。**本机用 Console 打开的大屏窗口、以及局域网设备打开 `/display` 连上的浏览器,都会出现在这里**——局域网浏览器没有屏号,那一栏显示「局域网浏览器」。离线实例会在服务端保留一段时间,方便排查它是什么时候掉的。
@@ -374,6 +403,8 @@
3. 用「上移 / 下移」调整顺序,「移除」删除;
4. 点「保存全部」整体替换该小项的组别配置。**若该项目已有报名数据,服务端会拒绝替换。**
> **组别之下还有「批次」**:批次(`第 1 批`、`第 2 批`…)是在**成绩录入页**给报名行分的录入 / 展示分组,不属于这里的组别配置,也**不参与算分**——名次与积分仍按「小项 + 组别」整体计算。怎么分批见 4.1。
### 10.4 计分通道
通道 = 「排谁的名次 + 名次从哪来 + 用哪张积分模板」。
+44
View File
@@ -472,3 +472,47 @@ Console 启动的多屏窗口默认每屏锁定一页。到「大屏控制」点
会**自动左右分栏**,每个项目一栏,最多 2 栏(一个项目时单栏铺开,不会分栏)。每栏显示该项目的名次、运动员 / 队、单位(带单位 logo)与成绩,按名次升序、最多列前 10 个名次;同一个小项分了多个组别时,栏里显示最近发布的那一组,标题旁用「另有 N 组」标注。
场地上两个项目时间撞在一起、自动判定没选中你想看的组合时,让管理员到「大屏控制 → 实时赛况」把模式切到「人工指定」,把这两个项目分别选进「项目 1」「项目 2」并保存即可(该设置只有管理员能保存)。
**Q81:批次是什么?和组别、名次有关系吗?**
批次是**组别之下**的一层**录入 / 展示分组**,层级是「大项 → 小项 → 组别 → 批次」。它**不参与算分**:名次与积分仍然按「小项 + 组别」整体计算,一个人分到第几批不会改变他的名次、分数,也不会变成「按批排名」。批次只影响「成绩录入」页里表格显示哪些行(批次下拉筛选)与录入时的查找,发布、积分榜与大屏都不受它影响。
- 批次号是 **1–999 的整数**;**留空 = 未分批**(以前导入的报名没有批次,就是未分批);
- 批次在**成绩录入页**设置(见 Q82)或由报名表的 `heat` 列带进来(见 Q83),不在「基础数据 → 组别」里配;
- 切换组别后批次筛选会重置(批次是组别之下的概念);
- 分项成绩表与导出**暂不**按批次分块,导出的仍是整组成绩。
**Q82:怎么把 30 个人分成每 8 人一批?**
到「成绩录入」页选中该小项与组别,工具栏里填「每批 8 人」(默认就是 8),点「一键均分」,确认框会先说明将编排多少行、共几批、从第几批到第几批,确认即可。规则是:
- 只对**未分批**的行、按当前表格显示顺序切片;
- **已分批的行一个都不动**,手工编好的批次不会被冲掉;
- 新批次号**接着已有最大号往后排**(已有第 1、2 批时,从第 3 批开始);
- 列表里没有未分批的行时按钮不可用,鼠标停上去会说明原因。
也可以手动分批:勾选若干行 → 在「已选 N 行」工具栏里填批次号(留空会提示推荐的下一个号)→ 点「设为第 N 批」;点「清除批次」把选中的行改回未分批。
**Q83:报名表要加批次怎么填?**
报名表新增了可选列 `heat`:填 **1–999 的正整数**,同一小项 + 组别里号相同的就是同一批;**留空 = 未分批**,不报错。列的先后顺序可以随便调,列名写 `heat`(大小写不敏感)。
- 填了非整数、0 或超过 999(如 `第1批`、`一组`、`1000`)的行会被跳过,提示「heat 需要是 1-999 的整数(留空表示未分批)」,其余行照常导入;
- ⚠️ **重新上传同一份表会整条覆盖**:表里 `heat` 留空会把这一行原来的批次清掉,手工调整过批次的话重传前要在表里写清楚;
- 完整说明见[报名名单导入规范](./报名名单导入规范.md)。
**Q84:成绩格旁边那个小提示是什么?**
那是**聚焦成绩格时的实时提示**:光标停在某个成绩格里打字时,格子旁边会浮出一个小气泡,边打边告诉你系统怎么理解它。
- **合法** → 显示**解析结果**,例如打 `1:06` 显示 `= 66 秒`(米 / 次 / 分项目显示对应单位),让你确认系统理解的和你想的是同一个数;
- **可疑** → 例如 `成绩 ≤ 0,疑似录入错误`,放行但提个醒;
- **不合法** → 说明原因并**带出那一格的实际内容**,例如 `秒位不能 ≥ 60(当前「1:70」),请写成 1:06 或 66 这类`、`成绩写法无法识别(当前「约1分06秒」),可用 66、66.33、1:06、1:06.33、1分06秒`;
- **空格子不提示**;气泡不接收点击、不占布局、不改变行高,继续打字不受影响;靠屏幕底部时会自动翻到格子上方显示。
它和发布前的「防呆校验」用**同一套判定**,不会「打字时说没事、发布时被拦下」。
**Q85:手机上能打开管理面板吗?**
可以。管理面板已适配窄窗口与手机浏览器:在**同一局域网**内用手机浏览器打开 `http://<主机IP>:19540/admin` 即可(与电脑访问同一个地址)。窄屏下:
- 左侧导航收成抽屉,点顶栏的**菜单按钮**展开;
- 宽表格可以**左右滑动**查看(表头保留);
- 对话框不会超出屏幕,按钮与分页的点击区域也放大了,触屏点得中。
录入、发布、看榜这些日常操作手机上都能做;赛事配置这类条目较多的操作仍建议在电脑上完成。如果某台手机上仍显示不全,请把**机型、浏览器与屏幕宽度**(或截图)告诉维护人员——目前适配覆盖到 390px 宽的窄屏,桌面端布局不受影响。
+32 -17
View File
@@ -10,14 +10,14 @@
## 一、先看懂三件事
1. **用什么软件做表**:Excel 或 WPS 都行,做完存成 `.xlsx` 或 `.csv` 都可以(推荐 `.csv`,系统兼容性最好,不用管编码)。
2. **表格长什么样**:**第一行是表头**(固定的 11 个英文列名),**从第二行开始每人一行**。不要合并单元格,不要在表头上方再加标题行、说明行。
2. **表格长什么样**:**第一行是表头**(固定的 12 个英文列名),**从第二行开始每人一行**。不要合并单元格,不要在表头上方再加标题行、说明行。
3. **编码不能自己编**:表里的「小项编码」「单位编码」「组别名称」必须是系统里已经配好的,**照抄系统里的写法**。系统里没有的编码,这一行会被跳过并报错。
---
## 二、表头(第一行的列名)
一共 11 列。**列名请直接用下面这套英文名,不要翻译成中文**;列的**先后顺序可以随便调**,多出来的列系统会忽略。
一共 12 列。**列名请直接用下面这套英文名,不要翻译成中文**;列的**先后顺序可以随便调**,多出来的列系统会忽略。
| 列名 | 是否必须 | 填什么 | 示例 |
|---|---|---|---|
@@ -30,6 +30,7 @@
| `age` | 可选 | 年龄,0–120 的整数 | `26` |
| `bib` | 可选 | 号码布 | `101` |
| `seed` | 可选 | 道次 / 种子,随便写或留空 | `种子1` |
| `heat` | 可选 | 批次号:1–999 的整数;**留空 = 未分批**(不参与算分,见下) | `1` |
| `status` | 可选 | 报名状态:4 个英文词(大小写都行)或等价的中文别名(见下) | `registered` |
| `member_names` | 可选 | 团体项目的队员名单,多人用 `/` 隔开 | `张三/李四/王五` |
@@ -75,6 +76,17 @@
### `seed` 道次 / 种子
自由填写,可以留空。系统只做记录,不参与算分、不影响名次。
### `heat` 批次 —— 可以留空
给同一组别的人**分批**用的号:填 **1–999 的正整数**,留空表示「未分批」。现场分批比赛(例如 100 米跑道只有 8 条、一组 30 人要分 4 场跑)时,填上批次,录入员就能在「成绩录入」页按批筛选,只在自己这一批里找人录成绩。
- **批次不参与算分**:名次与积分仍然按「小项 + 组别」整体计算,分批与否不会改变任何分数与名次;批次只是录入 / 展示分组;
- 同一小项、同一组别里,批次号相同的人就是同一批;批次号不要求连续,也不要求从 1 开始;
- 格子**留空**就是未分批,不报错;
- 填了不是整数、或超出 1–999(例如 `第1批`、`0`、`1000`),这一行会被跳过并提示「heat 需要是 1-999 的整数(留空表示未分批)」,其余行照常导入;
- 重新上传同一份表会把这一列**整条覆盖**:表里留空就会把这行原来的批次清掉(见第七节第 2 条)。
> 不想在报名表里写批次也行:导入后到「成绩录入」页勾选若干行点「设为第 N 批」,或用「一键均分」按人数自动分批(见[使用手册 · 4.1](./使用手册.md#41-选择项目与批次))。
### `status` 报名状态 —— 英文词或中文别名都认
**大小写不敏感**(`registered`、`Registered`、`DNS` 都认),也可以直接写中文:
@@ -110,12 +122,12 @@
表头那一行照抄,下面每人一行。假设 `M100` 是按年龄分组的男子100米,`F1`/`F2` 是两个单位:
| event_code | category | team_code | athlete_name | id_card | gender | age | bib | seed | status | member_names |
|---|---|---|---|---|---|---|---|---|---|---|
| M100 | 男子30岁以下 | F1 | 张伟 | 110101199001011234 | 男 | 26 | 101 | | registered | |
| M100 | 男子31岁以上 | F1 | 李强 | 110101198505054321 | 男 | 41 | 102 | | registered | |
| M100 | 女子组 | F2 | 王芳 | | 女 | | 202 | | registered | |
| W100 | 女子组 | F2 | 王芳 | 110101199203031234 | 女 | 34 | 202 | | registered | |
| event_code | category | team_code | athlete_name | id_card | gender | age | bib | seed | heat | status | member_names |
|---|---|---|---|---|---|---|---|---|---|---|---|
| M100 | 男子30岁以下 | F1 | 张伟 | 110101199001011234 | 男 | 26 | 101 | | 1 | registered | |
| M100 | 男子31岁以上 | F1 | 李强 | 110101198505054321 | 男 | 41 | 102 | | 1 | registered | |
| M100 | 女子组 | F2 | 王芳 | | 女 | | 202 | | 2 | registered | |
| W100 | 女子组 | F2 | 王芳 | 110101199203031234 | 女 | 34 | 202 | | 2 | registered | |
要点:**同一个人报多个项目,就写多行**(如上面的王芳报了两项);每行的 `event_code` 不同。
@@ -123,12 +135,12 @@
`BB` 是「多人抓杆蛇形跑」,七家单位各出基层组和领导组两支队伍:
| event_code | category | team_code | athlete_name | id_card | gender | age | bib | seed | status | member_names |
|---|---|---|---|---|---|---|---|---|---|---|
| BB | 基层组 | F1 | | | | | | | registered | 张三/李四/王五/赵六 |
| BB | 基层组 | F2 | | | | | | | registered | 钱七/孙八 |
| BB | 领导组 | F1 | | | | | | | registered | 周九 |
| BB | 领导组 | F3 | | | | | | | registered | |
| event_code | category | team_code | athlete_name | id_card | gender | age | bib | seed | heat | status | member_names |
|---|---|---|---|---|---|---|---|---|---|---|---|
| BB | 基层组 | F1 | | | | | | | | registered | 张三/李四/王五/赵六 |
| BB | 基层组 | F2 | | | | | | | | registered | 钱七/孙八 |
| BB | 领导组 | F1 | | | | | | | | registered | 周九 |
| BB | 领导组 | F3 | | | | | | | | registered | |
要点:`athlete_name` 一列**全部留空**;不参赛的单位**不写行**(不写就是没报名);最后一行是不写队员的纯单位报名,也是允许的。
@@ -140,13 +152,14 @@
## 五、导入前请先检查(自检清单)
- [ ] 第一行是那 11 个英文列名,没有被翻译、没有被合并单元格
- [ ] 第一行是那 12 个英文列名,没有被翻译、没有被合并单元格
- [ ] 表头上方没有多余的标题行或空行
- [ ] `event_code`、`team_code` 都是从系统里抄的编码,没有空格
- [ ] `category` 与系统里的组别名一字不差
- [ ] 个人行都有姓名,且都有证件号或号码布
- [ ] 一份表里没有重复的证件号、没有重复的号码布
- [ ] `status` 只用那 4 个英文词(大小写都行)或第三节列的中文别名,不写别的词;拿不准就留空
- [ ] `heat` 要么留空,要么是 1–999 的整数(不参与算分,只是录入分组)
- [ ] 全表没有因为"怕麻烦"把某些列删掉——**表头 8 个必须列一个都不能少**(哪怕整列是空的)
---
@@ -165,6 +178,7 @@
| 第 N 行:填写了 athlete_name 就必须填 id_card 或 bib | 个人行缺两项唯一标识 | 补证件号或号码布;确实都没有的,请先在「运动员」里登记 |
| 第 N 行:证件号 / 号码布 … 在报名表内重复出现 | 同一份表里同一个人出现了两次 | 删掉重复行(同一个人报多个项目时,`event_code` 必须不同) |
| 第 N 行:status「xxx」无法识别 | `status` 填了系统不认的词(4 个标准词以外的英文,或第三节没列的中文) | 改成 `registered` / `scratched` / `dq` / `dns`(大小写都行)或第三节列的中文别名,也可以留空(= 正常参赛);改完重新上传 |
| 第 N 行:heat 需要是 1-999 的整数(留空表示未分批) | `heat` 填了非整数、0、负数或超过 999 的值(如 `第1批`、`一组`、`1000`) | 改成 1–999 的整数,或者整格留空(= 未分批);批次只影响录入分组,不参与算分 |
| 提示「冲突」,人员没有写入 | 这个人在系统里已有记录,但姓名 / 性别 / 年龄 / 单位 / 号码布跟表里**对不上** | 在导入结果里逐条选「保留已有数据」或「使用新数据」,选完再提交 |
| 文件传不上去 | 超过 16MB | 拆分上传,或改用 xlsx |
| 只导入了第一张表 | xlsx 只读第一个工作表 | 把要导入的数据放在第一个工作表里 |
@@ -178,7 +192,7 @@
- **更新**:这个人本来就有这个项目的报名,用表里的信息覆盖了(**不会产生重复报名**);
- **跳过**:没能导入的行,会带着**行号**列出来,改好那几行重新上传即可。
2. **重复上传同一份表是安全的**,不会把名单变成两份。改完再传一遍就行。
- ⚠️ 但要注意「更新」是**整条覆盖**:表里空着的格会把系统里原来的值清掉(队员名单、道次、号码布都会被清空),`status` 空着会被重置成「正常参赛」。如果之前手工调整过某些人的状态,**重传前请在表里把 `status` 写清楚**。
- ⚠️ 但要注意「更新」是**整条覆盖**:表里空着的格会把系统里原来的值清掉(队员名单、道次、号码布、**批次**都会被清空),`status` 空着会被重置成「正常参赛」。如果之前手工调整过某些人的状态或批次,**重传前请在表里把 `status`、`heat` 写清楚**。
3. 名单导入后,到「成绩录入」里录成绩、发布,积分榜就会自动更新。
4. **被「彻底删除」的人,导入时会以新人员建档**:管理员彻底删除某个人时,他的档案连同他名下的报名与成绩会一起从库里删掉;之后表里再出现同一个证件号或号码布,系统匹配不到旧档案,会把他当作**新人员**重新建档——名单里多出一条「以前删过的人」通常就是这么来的。新档案是全新的,他以前的报名、成绩与积分不会回来,需要重新录。
5. **被「彻底删除」的单位则相反,导入时会「复活」**:管理员彻底删除某个单位,只是把它从单位列表里移除,它的报名与成绩一条都没删;表里再出现这个 `team_code`,系统按编码复用原来那条单位记录,清掉删除标记并让它重新出现在列表里,**原有的报名、成绩与积分都还在**,也不会新建第二个同名单位。
@@ -194,4 +208,5 @@
> 5. 团体项目:姓名列留空,队员写进 `member_names`,多人用 `/` 隔开;
> 6. 拿不准的列**留空**,不要写「无」「/」「—」这类符号;
> 7. 表里**不要合并单元格**、不要加标题行、不要插图;
> 8. 填完先对着第五节的清单自查一遍,再发给收表人。
> 8. 填完先对着第五节的清单自查一遍,再发给收表人;
> 9. **批次(`heat`)**可以不填;要分批比赛就填 1–999 的整数,它只影响录入时怎么分组找人,**不影响成绩与名次**。
+1 -1
View File
@@ -36,7 +36,7 @@ deploy\build.bat
| `dist\console\Scoreboard Console-0.1.1-x64.zip` | 免安装包 | 解压即用 |
| `dist\console\win-unpacked\` | 目录 | 未压缩的运行目录,便于现场调试 |
> 版本号来自仓库根的 `VERSION` 文件:构建时由 `deploy\build.bat` 注入服务端二进制(`-ldflags -X main.version`,运行期不再读任何文件),并同步到 `console\package.json` 决定安装包/免安装包的文件名。升级版本只改 `VERSION` 一处;以 `dist\console\` 下的实际文件名为准。
> 版本号来自仓库根的 `VERSION` 文件:构建时由 `deploy\build.bat` 注入服务端二进制(`-ldflags -X main.version`,运行期不再读任何文件),并同步到 `console\package.json` 决定安装包/免安装包的文件名。**当前版本 `dev_0.1.1`**,在管理端「关于」页与 `GET /api/health` 里都能看到(没走构建脚本直接 `go build` 时兜底显示 `dev`,不编造版本号)。升级版本只改 `VERSION` 一处;以 `dist\console\` 下的实际文件名为准。
>
> 目标机器**不需要** Go / Node / pnpm,也不联网;上述工具只用于构建机。
>