AskaEth
24fff8dd08
feat: 人员唯一标识改为证件号 + 导入冲突逐条决策
需求:人员以证件号为准(避免重名);批量导入时若证件号已存在于本地人员数据,
先导入其余人员,再把重复的人单独列出,由用户逐条/多选决定保留已有数据还是新数据。
服务端:
- 迁移 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 与人员绑定单位不一致会计入冲突,由用户决策,不会静默改单位。
2026-09-10 02:09:15 +08:00
..
2026-09-10 02:09:15 +08:00
2026-09-10 02:09:15 +08:00
2026-09-09 20:57:58 +08:00
2026-09-09 18:47:34 +08:00
2026-09-09 23:13:20 +08:00
2026-09-09 23:13:20 +08:00
2026-09-09 20:59:42 +08:00