fix(import): 导入提示改成「能照着改」的话 + 模板给「姓名」「队员名单」加说明;版本 dev_0.5.9
## 起因(主人原话)
> 我应该如何用表格导入团体报名? 我现在不管怎么填的话,它都提示:
> 「第2行填写了队伍 但是这一行有运动员姓名 按个人报名处理」。但实际上我们程序里,团体报名是可以包含运动员姓名的。
## 核实结论:不是功能 bug,是提示没用
系统用「**`姓名` 列有没有填**」区分个人 / 团体报名(数据模型决定的:一条报名要么属于某个人、要么属于一支队)。
**团体报名的队员要填在「队员名单」列**(写号码布),`姓名` 列留空;队员就是这条报名的成员。
原来那条提示**只说了后果、没说动作**,所以现场只能反复换填法重试。
## 改了什么
1. **两条行级提示改成「后果 + 两步动作」**(保留旧文案里的关键词,既有断言一字未改仍通过):
- 队伍那条:`第 N 行填了队伍「一队」,但这一行也填了运动员姓名,系统按个人报名处理:队伍只对团体报名生效,这一格没有写进库里。要报团体(一支队)请把姓名列留空、把队员的号码布填到「队员名单」列;这一行确实是个人报名,把「队伍」这一格删掉即可`
- 队员名单那条:同口径(`…队员只对团体报名生效,这一格只作文字名单保留、没有关联到人。要报团体请把姓名列留空、队员的号码布就填在「队员名单」列…`)
2. **导入模板加说明**:原来只有「单位编码」表头挂了批注;现在给 **`姓名`**(填了就是个人报名、团体请留空)与 **`队员名单`**(团体报名的队员写这里、**写号码布**才会关联到人)两个表头**各加一条批注 + 输入提示**,中英文两套。
3. ⚠️ **模板的表头文字、列序、13 列、工作表命名一个字没动**(动了模板就导不回去,有测试逐字钉着)。
## 文档
`docs/报名名单导入规范.md`(新增「个人报名 vs 团体报名」对照表 + 两条提示原文收进常见报错 + 队员名单分隔符说明)、
`docs/使用手册.md`(在工作台导入那节点明判据)、`docs/升级说明.md`(新增 `dev_0.5.9` 一节)。
## 验证
- **先红后绿**;全量自检两轮**全绿、`EXIT=0`**:服务端 14 包 / 前端 **944 例** 0 fail / Console 68 例 0 fail。
## 版本
`dev_0.5.8` → **`dev_0.5.9`**(**无数据迁移**);安装器素材同步重生成(照例只动 `brand.bmp` 两张)。
This commit is contained in:
1 parent
c5ce1878fc
commit
55051fd633
12 files changed
+364
-76
No files matched your search
@@ -801,6 +801,8 @@
|
||||
5. 点「加入报名」,一次为所有勾选的单位各建一条报名(**同一个单位 + 同一个队名**只留一条)。
|
||||
- 「全选」只勾启用中且还没报名的单位(已停用的单位要单独勾),且不会展开队员面板;「清空」只取消单位勾选,已登记的队员名单留着,重新勾上就回来。
|
||||
|
||||
> **用表格导入报团体时注意「姓名」列**:报名表里的**「姓名」列填了就是个人报名**——这一格是系统区分个人 / 团体报名的**唯一判据**。想报一支队却把队里某个人的姓名填进这一列,导入后会落成**他的个人报名**,那一行的「队伍」与「队员名单」都不生效(导入结果里会给出可照改的中文提示)。**团体报名请把「姓名」列留空,队员的号码布写进「队员名单」列**(写号码布才会关联到人;只写姓名只当文字名单)。两种填法的逐列对照见[报名名单导入规范](./报名名单导入规范.md)。
|
||||
|
||||
**表格导入**
|
||||
|
||||
> 报名表的完整格式、每一列怎么填、个人 / 团体 / 「个人+团体」三种项目的填法和常见报错对照,见单独一份文档 [报名名单导入规范](./报名名单导入规范.md)——**可以直接把那份文件发给各单位填表人**。
|
||||
@@ -812,6 +814,7 @@
|
||||
- **两个单位联合参赛(联队)**:把「单位编码」那一格写成 `F1+F2`(加号左边是主单位,默认均分,见 4.11)。**分工作表模板**里,「单位编码」表头那一格挂了一条**单元格批注**(鼠标停上去就弹出来)、这一列还有**输入提示**(点中该列的格子就弹出来),中英各一份,写的正是这套写法——表头文字、列顺序与工作表名一个字都没动,**老表格照常导入**;
|
||||
2. 表头共 13 列:`event_code`、`category`、`team_code`、`athlete_name`、`id_card`、`gender`、`age`、`bib`、`seed`、`heat`、`status`、`member_names`、`squad`(大小写不敏感)。其中 `id_card`(证件号)、`gender`(性别)、`age`(年龄)、`heat`(批次)、`squad`(队伍)为可选列,缺失不影响导入,其余列必须包含;
|
||||
- `team_code`(单位编码)有两种填法:**一个单位**填它的编码(`F1`);**两个单位联合参赛**填 `F1+F2`(加号左边是主单位,默认均分;非均分要到录入页改,见 4.11);
|
||||
- `athlete_name`(运动员姓名)这一格**填了就是个人报名**(这一行属于这个人);**团体报名请留空**,队员的号码布写进 `member_names`(队员名单)列——两格都填的行会按**个人报名**导入,队伍与队员名单不生效(导入结果里会给可照改的中文提示),详见[报名名单导入规范](./报名名单导入规范.md);
|
||||
- `squad`(队伍)是**最后一列**、**新加的(2026 年 9 月)**:同一个单位在同一个组别派两支队时(羽毛球双打的一队 / 二队)用它区分,写队名即可(中文表头里叫「队伍」,也认「队名」「队伍名」);**只有一支队的单位整列留空**、整列不写、表头里没有它,三种都合法。**老 12 列表照常导入**(新列加在最后,一列都不会错位),详见 4.12 与[报名名单导入规范 · 第三节「队伍」](./报名名单导入规范.md);
|
||||
- 用**分工作表模板**时,`event_code`、`category` 两列也可以整列不要或整列留空(范围由工作表名决定);一旦填了就必须与工作表名一致,不一致的那一行会报错并跳过;
|
||||
- 工作表名必须是「小项名称@组别名称」;工作簿里只要有**一张**表名带 `@`,整份文件就按分工作表模板处理,别的表名不合规会**整份拒绝并点名是哪张表**(不让数据无声消失);
|
||||
|
||||
+33
-1
@@ -6,7 +6,39 @@
|
||||
|
||||
---
|
||||
|
||||
## dev_0.5.8(当前版本)
|
||||
## dev_0.5.9(当前版本)
|
||||
|
||||
### 一句话
|
||||
|
||||
**没有数据迁移,升级后不用重配任何东西**:只改**提示与模板上的说明**。以前在团体项目的报名表里把队员姓名填进「姓名」列,导入时只回一句「填了队伍 / 队员名单,但这一行有运动员姓名,按个人报名处理」——**没告诉你该怎么改**,于是现场反复换填法重试。现在这两条提示会**直接写出两步动作**(要报团体就把姓名列留空、号码布填到「队员名单」列;确实是个人报名就把那一格删掉),下载的模板里**「姓名」与「队员名单」两列表头也各挂了一条说明**(鼠标停上去或点中该列的格子就能看到)。**导入表、模板结构、已有数据一个字都没动。**
|
||||
|
||||
### ① 两条导入提示改成「能照着改」的话
|
||||
|
||||
- 以前现场看到的那句(**问题就出在这里**)只说清后果,没说出改法:`第 N 行填了队伍「一队」,但这一行有运动员姓名、按个人报名处理:队伍只对团体报名(不填姓名那几行)生效,这一格没有写进库里`;
|
||||
- 现在改成(**原文**,队员名单那条同理):
|
||||
> 第 N 行填了队伍「一队」,但这一行也填了运动员姓名,系统按个人报名处理:队伍只对团体报名生效,这一格没有写进库里。**要报团体(一支队)请把姓名列留空、把队员的号码布填到「队员名单」列**;**这一行确实是个人报名,把「队伍」这一格删掉即可**
|
||||
- **判据本身没变**(这也是没把它当 bug 的原因):**「姓名」那一格填了,这一行就是个人报名;团体报名要把它留空**,队员写进「队员名单」列(写号码布才会关联到人)。系统一直是这样区分的,这次只是**把话说明白**。
|
||||
- ⚠️ 一行提示现在约 120 字(含两步动作):一次导入几十行时看着会长一点,但**每行只说一次**;嫌吵的话可以跟我们要一版更短的。
|
||||
|
||||
### ② 模板里的「姓名」与「队员名单」加了说明
|
||||
|
||||
- 下载的模板(分工作表 xlsx)现在有三列表头挂了**单元格批注 + 该列的输入提示**(中英各一份):原来的「**单位编码**」(联队怎么写),加上新的「**姓名**」(填了姓名就是个人报名;团体报名请把姓名留空,队员写进「队员名单」列)与「**队员名单**」(团体报名的队员写这里,**写号码布**才会关联到人、参与个人算分);
|
||||
- **模板的表头文字、列序、13 列、工作表命名一个字都没动**(有测试逐字钉着)——**手里已有的表格照常导入**。
|
||||
|
||||
### ③ 顺带写清:「队员名单」那一列怎么分隔
|
||||
|
||||
- 多人之间用 **`,`、`,`(中文逗号)或 `/`** 分开,**三种都认、可以混用**;**空格不是分隔符**(`张三 李四` 会被当成一段);
|
||||
- **每一段要单独是一个号码布**:`A001`、`A002/101` 都行;**`张三(A001)` 这种「姓名 + 号码布写在同一段」认不出人**——那是**导出件**的显示格式,不是导入接受的写法。要「名字也看得见」,写号码布就行(导出件与录入页会显示成 `张三(A001)`)。
|
||||
|
||||
### ④ 升级后 5 分钟核对
|
||||
|
||||
1. 拿一份**含团体报名**的报名表(原来会触发那两条提示的那种)试着导入一次:报错里应能看清**两步动作**,而不是只有「没写进库里」;
|
||||
2. 打开「基础数据 → 报名导入」下载一份「**分工作表 · 中文表头**」,鼠标停在「**姓名**」和「**队员名单**」表头上,应各弹出一条说明;
|
||||
3. 其余照旧:**不需要重新导入规则包,也不需要重配任何东西**;已有报名、成绩、榜单与导出件**一个字不变**。
|
||||
|
||||
---
|
||||
|
||||
## dev_0.5.8
|
||||
|
||||
### 一句话
|
||||
|
||||
|
||||
+28
-5
@@ -133,6 +133,22 @@ F1+F2
|
||||
- **团体项目**:**这一列留空**,表示"这是某个单位的一条团体报名",队员写在 `member_names` 里。
|
||||
- 姓名为空的行,系统只建一条单位报名,不会去建运动员档案。
|
||||
|
||||
> ⚠️ **这一格「填了 / 没填」就是系统区分「个人报名」和「团体报名」的唯一判据**——最容易踩的坑:把团体报名的队员姓名填在了这一列。填了就按**个人报名**处理,那一行的「队伍」「队员名单」都**不会生效**(只会得到一条提示)。**团体报名请把这一列留空**,队员写进[「队员名单」](#member_names-队员名单)。
|
||||
|
||||
#### 个人报名 vs 团体报名:同一条表里怎么填
|
||||
|
||||
同一份表里两种报名**可以混着写**(一人一行),差别只在下面这几格:
|
||||
|
||||
| 列 | **个人报名**(一个人一条) | **团体报名**(一个单位一支队一条) |
|
||||
| --- | --- | --- |
|
||||
| `athlete_name` 姓名 | **必填**(这一段报名的归属人) | **留空**(填了就变成个人报名) |
|
||||
| `id_card` 证件号 / `bib` 号码布 | **至少填一个**(认人用;证件号优先) | 可以不填(这一行没有"人") |
|
||||
| `member_names` 队员名单 | **留空**(个人报名没有队员) | 写队员的**号码布**(`A001/A002`);写姓名只当文字、不关联人 |
|
||||
| `squad` 队伍 | **留空**(个人报名没有队) | 同一个单位派两支队时写队名(一支队留空) |
|
||||
| `team_code` 单位编码 | 这个人所属单位 | 这支队的单位(联队写 `A+B`) |
|
||||
|
||||
> **一句话**:**姓名列填了 = 个人报名,姓名列留空 = 团体报名**。现场最常错的是「想报一支队,却把队里最出名的那个人填进了姓名列」——那样只会落成他的个人报名,队名与队员名单被忽略(导入结果里会给提示,见第六节)。
|
||||
|
||||
### `id_card` 证件号 / `bib` 号码布 —— 有姓名就至少填一个
|
||||
只要有姓名,**证件号与号码布至少要填一个**,否则无法确认是哪一个人,这一行会被跳过,提示「填写了 athlete_name 就必须填 id_card 或 bib」。
|
||||
|
||||
@@ -181,13 +197,17 @@ F1+F2
|
||||
|
||||
### `member_names` 队员名单
|
||||
|
||||
团体项目用这一列写队员,多人之间用 `/`、`,` 或 `,` 分开:
|
||||
团体项目用这一列写队员,**多人之间用 `/`、`,`(英文逗号)或 `,`(中文逗号)分开,三种都认、可以混用**:
|
||||
|
||||
```
|
||||
张三/李四/王五
|
||||
张三,李四,王五
|
||||
A001/A002 ← 推荐:写号码布,队员会被关联到人
|
||||
A001,A002
|
||||
A001,A002
|
||||
张三/李四/王五 ← 只写姓名:名单照常显示,但拿不到个人分
|
||||
```
|
||||
|
||||
- ⚠️ **空格不是分隔符**:`A001 A002` 会被当成**一段**(认不出人);
|
||||
- ⚠️ **每一段要单独是一个号码布**:`张三(A001)` 这种「姓名 + 号码布写在同一段」**认不出人**——那是**导出件**的显示格式,不是导入接受的写法(要名字也看得见,写号码布就行);
|
||||
- 团体项目**可以只报单位、不写队员**(这一列留空即可),队员名单以后还能补。
|
||||
- 系统界面里会把这条名单显示成「张三、李四、王五」。
|
||||
|
||||
@@ -212,7 +232,7 @@ F1+F2
|
||||
- **号码布是运动员的唯一标识,不看单位**:号码布认到的是**别的单位**的人时,**照常关联**,并在导入结果里给一条提示让你核对号码布是不是写错了(不是冲突、不拦截);
|
||||
- **认不出人的段不报错**:没录档案的临时队员、写错的名字,都只当文字留在名单里(这条报名仍然只有单位、没有队员身份);
|
||||
- **同一格里同一个号码布写两次**:只关联一次,并给一条提示(同一条报名里一个人只占一个位置);
|
||||
- **个人行(填了姓名的那几行)这一列只当文字**:个人报名自己就是那个人的身份,不存在「队员」。这一格里写了号码布也不关联,只会给一条提示;
|
||||
- **个人行(填了姓名的那几行)这一列只当文字**:个人报名自己就是那个人的身份,不存在「队员」。这一格里写了号码布也不关联,只会给一条提示(提示里会直接告诉你团体该怎么填,见第六节);
|
||||
- **一条报名最多关联 30 个人**:超过的那一行会被**整行拦下**(多半是把号码布写错了位置);
|
||||
- **老数据的人要补挂**:升级前已经报好的团体报名,如果当时只写了姓名(或连姓名都没写),**升级时会尽力按「号码布 → 姓名 + 单位」回填一次**;**回填不上的,要重新导入一份写着号码布的名单,或到录入页手动挂人**(见[使用手册 · 4.13](./使用手册.md))。
|
||||
|
||||
@@ -342,6 +362,8 @@ F1+F2
|
||||
- [ ] `event_code`、`team_code` 都是从系统里抄的编码,没有空格
|
||||
- [ ] `category` 与系统里的组别名一字不差
|
||||
- [ ] 个人行都有姓名,且都有证件号或号码布
|
||||
- [ ] **团体报名的那几行「姓名」列是空的**(填了姓名就会被当成个人报名,那一行的「队伍」「队员名单」都不生效——见第三节的对照表)
|
||||
- [ ] 「队员名单」列里写的是**单独的号码布**(多人用 `/`、`,`、`,` 分开,**不要用空格**;`张三(A001)` 这种整段认不出人)
|
||||
- [ ] 证件号优先填、填准(**它是系统认人的第一依据**,填错最容易认错人)
|
||||
- [ ] 一份表里**没有把同一个号码布给两个不同的人**(同一个人报多个组别时可以重复)
|
||||
- [ ] 同一小项同一个组别里没有把同一个人写两遍(真重复会进「冲突」列表等决策)
|
||||
@@ -378,7 +400,8 @@ F1+F2
|
||||
| 第 N 行:单位 A 在本组别已经有这个人的报名:同一个人在同一组别只能报一条,请把重复行合并后再导入 | **个人行**(填了姓名的行)在同一个小项同一个组别里写了两次。个人报名按「人」唯一,队伍列不参与(也不影响)这件事 | 把两行合并成一行;同一个人要参加两个项目就写在**不同小项**里,不能靠队名分成两条 |
|
||||
| 第 N 行:队员名单里认出了 31 名运动员,超过一条报名最多 30 人:请检查这一格是不是把号码布写错了位置 | 这一格里能对上号码布的段**超过 30 个**(多半是把别的内容写进去了) | 核对这一格:一条报名最多 30 个队员;只有一支队时这一格留空即可。**这一行整行未导入** |
|
||||
| 第 N 行:队员名单里的号码布 101 写了两次,只关联一个人(同一条报名里一个人只占一个位置) | 同一格里同一个号码布写了两次 | 不算错误(照常导入、只关联一次);把这一格里重复的那个号码布删掉即可 |
|
||||
| 第 N 行的队员名单里有 2 个号码布认得出人,但这一行有运动员姓名、按个人报名处理:队员只对团体报名(不填姓名那几行)生效,这一格只作文字名单保留,没有关联到人 | **个人行**(有姓名的行)里写了号码布。个人报名自己就是那个人的身份,不存在「队员」 | 不算错误(这一行照常导入,只是**没有**建立队员关联);团体报名的那一行才需要写号码布 |
|
||||
| 第 N 行填了队伍「一队」,但这一行也填了运动员姓名,系统按个人报名处理:队伍只对团体报名生效,这一格没有写进库里。**要报团体(一支队)请把姓名列留空、把队员的号码布填到「队员名单」列**;**这一行确实是个人报名,把「队伍」这一格删掉即可** | **「姓名」列填了**(= 系统按个人报名处理)却还填了「队伍」。团体报名要**把姓名列留空** | 按提示二选一:**要报这支团体**,把这一行的姓名(以及证件号 / 号码布)**删掉**、队员的号码布写进「队员名单」列,队名留在「队伍」列;**这一行本来就是个人报名**,把「队伍」这一格删掉。⚠️ **注意别把这一行整行删掉了再重报**——按上面改完重传即可(同一小项同组别同单位同队名会更新原报名) |
|
||||
| 第 N 行的队员名单里有 2 个号码布认得出人,但这一行也填了运动员姓名,系统按个人报名处理:队员只对团体报名生效,这一格只作文字名单保留、没有关联到人。**要报团体请把姓名列留空、队员的号码布就填在「队员名单」列**;**这一行确实是个人报名,把「队员名单」这一格删掉即可** | **「姓名」列填了**(= 个人报名)却还在「队员名单」里写了号码布。个人报名自己就是那个人的身份,不存在「队员」 | 同样二选一:**要报团体**就把姓名列清空(队员的号码布留在原处就行);**这一行是个人报名**就把「队员名单」这一格删掉 |
|
||||
| 第 N 行:队员名单里的号码布 205 是单位 F3 的 李四,本行报名挂在单位 F1 名下 —— 号码布是运动员的唯一标识,已按它关联为队员,请核对号码布是否写错 | 号码布认到的是**别的单位**的人。号码布是唯一标识,系统**照它认、不看单位** | 先核对号码布有没有抄错:抄错了改成正确的号码布;**确实就是借调/跨单位的人**,这条提示可以忽略(关联已经生效) |
|
||||
| **(没有报错,但名单里的人上不了个人榜)** | 队员名单里写的是**姓名**(例如 `张三/李四`),或号码布写成了 `张三(101)` 这种「姓名 + 号码布写在同一段」的形式 —— 系统拿**整段**去比号码布,认不出人 | 这是**正常行为**(不报错):把这一段改成**单独的号码布**(`101/102`),队员才会被关联、才会拿到个人分。要「姓名 + 号码布」都显示,直接写号码布即可(导出件与录入页会显示成 `张三(101)`) |
|
||||
| 第 N 行:组别 XXX 不存在 | 组别名和系统里不一致,或该小项还没有这个组别 | 到「基础数据 → 组别」核对名称(注意别多字少字) |
|
||||
|
||||
Reference in new issue
Block a user