feat: 人员年龄/号码布、图片上传、多显示器菜单、Console 两栏、exe 改名等一批改动
人员与报名:
- 人员唯一标识改为「证件号 或 号码布」二选一(0013/0014 迁移 + 导入匹配/回填/冲突)
- 人员新增「年龄」(0015 迁移):表单/列表/导入模板表头 11 列;冲突比较只在两边
都有值且不同时才算差异,旧数据不误报
- 冲突决策键改为「证件号优先 → 号码布」(前端原先只用 idCard,号码布行会互相覆盖)
- 报名选择器支持无证件号但有号码布的运动员
大屏与 Console:
- 大屏控制新增「显示器」菜单:可给指定显示器重建全屏窗口;单屏/主显示器强制窗口化,
限制在 Console 侧判定,不信任页面传参
- Console 服务管理窗口改左右两栏,运行日志独占右栏满高;窗口默认尺寸 1280×860
- 大屏右上角时钟精确到秒(同时把刷新间隔 15s 改为 1s)
图片与配置:
- 新增图片上传 POST /api/uploads(recorder+,png/jpg/webp/gif,≤5MiB)与匿名静态
访问 GET /uploads/{name}(防目录穿越);文件落赛事项目目录 uploads/,随赛事包
一起导出/导入
- 「赛事信息」新增赛事会标 / 大屏会标 / 大屏背景图三个上传项
- 参赛单位 logo 输入框右侧加上传按钮
关于页与构建:
- 构建时间打通:version.BuildTime + /api/system/about 返回 + build.bat 注入
(用 PowerShell 取时间戳,避免本地化 %DATE% 的非 ASCII 星期)
安装包:
- 主程序改名 Scoreboard_Console.exe(win.executableName;productName/显示名不变)
- 记住上次安装目录:自定义 NSIS 宏优先沿用自存路径(卸载不清除),并在 customInit
里补写回 electron-builder 的键,避免安装模式页把 $INSTDIR 打回默认
自检:服务端 12 包全绿;前端 vue-tsc + build 通过、node --test 58/58;console 12 文件通过。
This commit is contained in:
1 parent
24fff8dd08
commit
6483acf9ad
50 files changed
+2980
-395
No files matched your search
+1
-1
@@ -22,7 +22,7 @@
|
||||
|
||||
## 3. 首次启动
|
||||
|
||||
- [ ] 双击 `Scoreboard Console.exe`,启动管理窗口出现
|
||||
- [ ] 双击 `Scoreboard_Console.exe`,启动管理窗口出现
|
||||
- [ ] 服务端状态变为「运行中 · 就绪」
|
||||
- [ ] 打开管理面板(窗口内「打开服务端管理面板」按钮),用管理员账号登录
|
||||
- [ ] **管理员初始密码**在 `logs\console.log` 里搜 `INITIAL ADMIN CREATED`,密码就在该行上方;也可以直接打开 Console 的「运行日志」面板往上翻。首次登录会要求改密
|
||||
|
||||
+47
-13
@@ -220,6 +220,32 @@
|
||||
|
||||
**在线看板**:当前版本后端未提供大屏实例上报接口,因此在线状态恒显示「未知」,「最近下发」只是本机下发指令的时间,**不代表大屏在线**。
|
||||
|
||||
### 9.1 显示器菜单(重建被关掉的大屏窗口)
|
||||
|
||||
扩展屏上的大屏窗口平时由服务管理程序(Console)按配置自动开出来,只有在**有人手动关掉了某块屏的大屏窗口**时才需要这一节。
|
||||
|
||||
这张「显示器」卡片只在**从服务管理窗口点「打开服务端管理面板」打开的面板**里可用;用浏览器直接打开管理面板时,卡片只显示一行提示,这是正常的。
|
||||
|
||||
1. **窗口页面**:先选好新窗口锁定显示哪一页(默认「总积分榜」);
|
||||
2. **显示器列表**:逐块屏列出名称、分辨率、缩放、是否主显示器,以及当前是否已开窗口(「已开窗口(全屏)」「已开窗口(窗口化)」或「未开窗口」);
|
||||
3. **每行的按钮**:
|
||||
- 该屏已经有窗口 → **聚焦窗口**:把窗口提到最前,不重建、不打断正在展示的比分;
|
||||
- 该屏还没有窗口,且允许多屏全屏 → **创建全屏窗口**;
|
||||
- 该屏还没有窗口,但不允许全屏 → **创建窗口(窗口化)**,行内会注明「单显示器 / 主显示器只能窗口化」;
|
||||
- 已开窗口的行还有一个 **关闭窗口**:全屏大屏窗口是锁定鼠标的,万一开到了错误的屏上,从大屏本身退不出来,用这个按钮收掉;
|
||||
4. **重新排布(按设置重建全部窗口)**:按服务管理程序里的选屏配置重建所有大屏窗口。不在该配置范围内的窗口会被关掉,所以日常只想恢复某一块屏时,请优先用上面的「创建」按钮。
|
||||
|
||||
**为什么单显示器 / 主显示器只能创建窗口化窗口**:全屏窗口会盖住整块屏,而且没有标题栏和关闭按钮。单显示器上开全屏,等于把操作人员的桌面整个盖住;主显示器上开全屏,会把服务管理窗口、管理面板这些工作窗口全部遮住——现场又没有键盘可以退出来。所以这两种情况下按钮只提供窗口化:窗口约占屏幕 80%、居中显示、带标题栏,随时可关。只有「本机有多于一块显示器,且目标不是主显示器」时才放行全屏。
|
||||
|
||||
**副屏全屏窗口被误关后,一键恢复**:
|
||||
|
||||
1. 在服务管理窗口点「打开服务端管理面板」;
|
||||
2. 进入管理端「大屏控制」页;
|
||||
3. 在「显示器」卡片里找到那块副屏(那一行没有「主显示器」标记,且分辨率/缩放与副屏一致),点它的 **创建全屏窗口**;
|
||||
4. 列表刷新后该行显示「已开窗口(全屏)」,副屏上即出现全屏积分榜。
|
||||
|
||||
多块副屏都被关掉时,在同一张卡片里逐块点「创建全屏窗口」即可;改用「重新排布」也行,但前提是这些屏都在 Console 的选屏配置里。
|
||||
|
||||
---
|
||||
|
||||
## 10. 基础数据
|
||||
@@ -229,7 +255,7 @@
|
||||
### 10.1 参赛单位
|
||||
|
||||
1. 点「新增单位」;
|
||||
2. 填写代码 *(唯一,字母 / 数字 / `_` / `-`,最长 16 位)、全称 *、简称、主题色、排序、logo 路径;
|
||||
2. 填写代码 *(唯一,字母 / 数字 / `_` / `-`,最长 16 位)、全称 *、简称、主题色、排序、logo(可点输入框右侧「上传图片」直接传,png / jpg / webp / gif,单张不超过 5 MiB;也能手填已有路径,留空则不显示);
|
||||
3. 「编辑」修改;「停用」为软删除——历史成绩与积分流水保留,但新报名不再可选该单位,可随时「启用」。
|
||||
|
||||
### 10.2 大项 / 小项
|
||||
@@ -263,8 +289,8 @@
|
||||
|
||||
### 10.6 运动员
|
||||
|
||||
1. 点「新增运动员」,填写姓名 *、证件号、性别、工号 / 学号、所属单位等;
|
||||
2. **证件号是人员的唯一标识**(如身份证号),用于区分重名;同一个证件号不允许重复,重复会被拒绝。已有历史数据可以留空;
|
||||
1. 点「新增运动员」,填写姓名 *、证件号、号码布、性别、工号 / 学号、所属单位等;
|
||||
2. **证件号(如身份证号)与号码布二者取其一**即可唯一标识一个人,用于区分重名;两个人员不能共用同一个证件号,也不能共用同一个号码布,重复会被拒绝;没有身份证信息的人可以只填号码布。已有历史数据两项可以都为空;
|
||||
3. 「编辑」修改,「停用」后不再出现在新报名选择中;
|
||||
4. 个人项目的报名项会关联到运动员,团体项目可以留空。
|
||||
|
||||
@@ -276,7 +302,7 @@
|
||||
|
||||
1. 依次选择小项、组别、单位;
|
||||
2. 在运动员列表里按姓名 / 工号搜索并勾选:
|
||||
- 个人项目:勾选的人各生成一条报名;已报名的运动员显示「已报名」且不可重复勾选;
|
||||
- 个人项目:勾选的人各生成一条报名;已报名的运动员显示「已报名」且不可重复勾选;证件号与号码布都没有的运动员无法勾选,请先到「运动员」分区补齐其中一项;
|
||||
- 团体 / 对抗项目:勾选的人合成一条报名,队员名单按列表顺序写入;该单位已报名时再次提交会更新队员名单;
|
||||
3. 点「加入报名」,结果同样显示**新增 / 更新 / 跳过**数量。
|
||||
|
||||
@@ -284,24 +310,29 @@
|
||||
|
||||
1. 点「下载 CSV 模板」获取表头样例;
|
||||
2. 表头共 10 列:`event_code`、`category`、`team_code`、`athlete_name`、`id_card`、`gender`、`bib`、`seed`、`status`、`member_names`(大小写不敏感)。其中 `id_card`(证件号)与 `gender`(性别)为可选列,缺失不影响导入,其余列必须包含;
|
||||
3. **只要有姓名的行必须填 `id_card`**,否则该行报错并跳过;`gender` 只认「男」「女」,其他值忽略;同一份文件里同一个证件号重复出现时,重复的行会报错;
|
||||
4. 人员匹配顺序:先按证件号匹配已有人员;没匹配到,再按「姓名 + 单位」匹配且该人员证件号为空,视为同一人并回填证件号(不算冲突);都没匹配到则新建人员;
|
||||
5. 把 `.csv` 或 `.xlsx` 拖入虚线框,或点击选择文件(单个文件不超过 16MB;xlsx 只解析第一个工作表);
|
||||
6. 点「开始导入」,页面显示**新增 / 更新 / 跳过**数量;匹配不到的行会跳过并回显行号,修正后可重新上传。
|
||||
3. **只要有姓名的行,`id_card` 与 `bib` 必须至少填一个**,否则该行报错并跳过;`gender` 只认「男」「女」,其他值忽略;同一份文件里同一个证件号或同一个号码布重复出现时,重复的行会报错;
|
||||
4. 人员匹配顺序:
|
||||
1. 先按 `id_card` 匹配已有人员;
|
||||
2. 没匹配到,再按 `bib`(号码布)匹配;
|
||||
3. 还没匹配到,按「姓名 + 单位」匹配且该人员证件号为空,视为同一人,把表里给的证件号 / 号码布补进去(不算冲突);如果该人员已有号码布且与表里不同,则算冲突;
|
||||
4. 都没匹配到则新建人员(姓名、性别、单位、证件号、号码布);
|
||||
5. `bib` 列会同时写入人员档案与报名记录;从已有名单勾选生成的报名也会带上人员的证件号(优先)或号码布;
|
||||
6. 把 `.csv` 或 `.xlsx` 拖入虚线框,或点击选择文件(单个文件不超过 16MB;xlsx 只解析第一个工作表);
|
||||
7. 点「开始导入」,页面显示**新增 / 更新 / 跳过**数量;匹配不到的行会跳过并回显行号,修正后可重新上传。
|
||||
|
||||
**证件号冲突的处理**
|
||||
**人员信息冲突的处理**
|
||||
|
||||
导入时如果某个证件号在系统里已经存在,但表里的姓名、性别或单位与已有人员不一致,这个人会被列为**冲突**,本次不写入(该人的报名也不会创建)。处理办法:
|
||||
导入时如果某个证件号或号码布在系统里已经存在,但表里的姓名、性别、单位或号码布与已有人员不一致,这个人会被列为**冲突**,本次不写入(该人的报名也不会创建)。处理办法:
|
||||
|
||||
1. 导入结果里会单独列出冲突人员,每条显示已有数据、新数据,以及不一致的字段;
|
||||
1. 导入结果里会单独列出冲突人员,每条显示已有数据、新数据,以及不一致的字段(含号码布);
|
||||
2. 用左侧复选框选中一条或多条(也可以全选),再点「保留已有数据」或「使用新数据」:
|
||||
- **保留已有数据**:人员字段沿用系统里已有的,按这个人的信息建 / 更新报名;
|
||||
- **使用新数据**:用表里的姓名、性别、单位等更新该人员,再建 / 更新报名;
|
||||
- **使用新数据**:用表里的姓名、性别、单位、号码布等更新该人员,再建 / 更新报名;
|
||||
3. **没有做决定的冲突不会被写入**,可以稍后再处理;全部处理完后冲突列表清空。
|
||||
|
||||
> 「从已有名单勾选」走的是同一个导入通道,人员匹配与冲突处理规则完全一致。
|
||||
|
||||
号码布、种子等字段无法在勾选界面填写,仍需通过表格导入。
|
||||
种子等字段无法在勾选界面填写,仍需通过表格导入;号码布取自人员档案,勾选时会自动写入报名。
|
||||
|
||||
---
|
||||
|
||||
@@ -389,7 +420,10 @@
|
||||
| --- | --- |
|
||||
| 赛事名称 * | 必填 |
|
||||
| 副标题 / 主办方 | 可选,显示在大屏顶部 |
|
||||
| 赛事会标 | 图片,显示在大屏左上角。点「上传图片」选文件即可(png / jpg / webp / gif,单张不超过 5 MiB);上传的图片存在赛事项目目录的 `uploads/` 里,会随赛事包一起导出/导入 |
|
||||
| 大屏标题 / 大屏副标题 | 大屏顶部标题区 |
|
||||
| 大屏会标 | 图片,只对大屏生效;留空则用上面的「赛事会标」 |
|
||||
| 大屏背景图 | 图片,铺满大屏底层;留空则用内置深色背景 |
|
||||
| 轮播间隔(秒) | 控制大屏底部滚动条(奖牌榜 Top3 / 最新完成项目 / 公告)的切换间隔,5–120 秒 |
|
||||
| 主题色 | 大屏主色,如 `#3482FF` |
|
||||
| 个人积分榜上屏 | 开关;关闭后大屏不展示个人积分榜 |
|
||||
|
||||
+14
-5
@@ -119,25 +119,34 @@ Console 启动的多屏窗口默认每屏锁定一页。到「大屏控制」点
|
||||
不能一键撤销。纠错需要重新导入旧规则包,或逐项修正后重新发布。导入前请务必先「预览差异」。
|
||||
|
||||
**Q33:导入时提示证件号重复怎么办?**
|
||||
证件号是人员的唯一标识,系统不允许两个人员共用同一个证件号,用来区分重名。
|
||||
证件号与号码布是人员的两项唯一标识,系统不允许两个人员共用同一个证件号,用来区分重名。
|
||||
|
||||
- **在「运动员」里新增 / 编辑时提示重复**:说明该证件号已属于另一个人员。请先核对是不是同一个人:是,就直接用已有记录;不是,请检查证件号是否填错。已有历史数据可以没有证件号。
|
||||
- **表格导入时出现重复**:分两种情况。同一份文件里同一个证件号重复出现,重复的行会报错并跳过,改好后重新上传;证件号在系统中已存在、但姓名、性别或单位不一致的,会列为「冲突」,本次不写入(报名也不会创建),需要在导入结果里勾选后逐条或多选决定「保留已有数据」还是「使用新数据」,没有做决定的人不会被写入。详细步骤见 [使用手册 · 报名导入](./使用手册.md#107-报名导入)。
|
||||
|
||||
**Q34:人员没有身份证,只有号码布,能报名吗?**
|
||||
可以。证件号与号码布二者取其一即可作为人员唯一标识:在「运动员」里只填号码布也能保存;报名表里有姓名的行,`id_card` 与 `bib` 至少填一个就能导入;从已有名单勾选报名时,两项里有一项就能勾选。号码布会同时写入人员档案与报名记录。
|
||||
|
||||
**Q35:号码布重复了怎么办?**
|
||||
号码布和证件号一样是人员唯一标识,系统不允许两个人员共用同一个号码布。
|
||||
|
||||
- **在「运动员」里新增 / 编辑时提示重复**:说明该号码布已属于另一个人员。请先核对是不是同一个人:是,就直接用已有记录;不是,请检查号码布是否填错。
|
||||
- **表格导入时出现重复**:同一份文件里同一个号码布重复出现,重复的行会报错并跳过,改好后重新上传;号码布在系统中已存在、但姓名、性别或单位不一致的,会列为「冲突」,本次不写入(报名也不会创建),需要在导入结果里勾选后决定「保留已有数据」还是「使用新数据」。详细步骤见 [使用手册 · 报名导入](./使用手册.md#107-报名导入)。
|
||||
|
||||
---
|
||||
|
||||
## 其他
|
||||
|
||||
**Q34:系统需要联网吗?**
|
||||
**Q36:系统需要联网吗?**
|
||||
不需要。完全离线运行,不依赖外网,也不需要在现场安装任何运行时。
|
||||
|
||||
**Q35:页面提示「示例数据」是什么意思?**
|
||||
**Q37:页面提示「示例数据」是什么意思?**
|
||||
表示后端未就绪,此时所有改动只停留在界面,不会写入真实赛事。恢复连接后刷新即可。
|
||||
|
||||
> 注意区分:顶部若只是显示「连接中断」,说明实时推送断了(数据可能不是最新),但写操作仍会照常提交给服务端并做校验。
|
||||
|
||||
**Q36:为什么登录 / 写操作偶尔被拒绝?**
|
||||
**Q38:为什么登录 / 写操作偶尔被拒绝?**
|
||||
系统有频率限制:登录每 IP 每分钟 5 次,写操作每用户每分钟 30 次。稍等一分钟再试。
|
||||
|
||||
**Q37:数据目录在哪?**
|
||||
**Q39:数据目录在哪?**
|
||||
由 `config.yaml` 的 `dataDir` 指定,默认 `data`,相对服务端工作目录解析。
|
||||
+3
-3
@@ -56,7 +56,7 @@ deploy\build.bat
|
||||
### 3.2 使用免安装包
|
||||
|
||||
1. 把 `Scoreboard Console-0.1.0-x64.zip` 解压到任意目录(建议使用纯英文路径)。
|
||||
2. 双击目录里的 `Scoreboard Console.exe` 启动。
|
||||
2. 双击目录里的 `Scoreboard_Console.exe` 启动。
|
||||
|
||||
### 3.3 首次启动会自动完成
|
||||
|
||||
@@ -71,7 +71,7 @@ deploy\build.bat
|
||||
|
||||
```
|
||||
安装目录\
|
||||
├── Scoreboard Console.exe # 桌面宿主,双击启动
|
||||
├── Scoreboard_Console.exe # 桌面宿主,双击启动
|
||||
├── resources\app.asar # Console 自身资源
|
||||
├── config.json # Console 配置(可编辑)
|
||||
├── scoreboard.exe # Go 服务端
|
||||
@@ -217,7 +217,7 @@ scoreboard.exe passwd -config config.yaml
|
||||
| `display.waitForServerMs` | `20000` | 服务端未就绪时,最多等这么久也先把大屏开出来 |
|
||||
| `display.backgroundColor` | `#0b0f1a` | 大屏窗口底色,减少加载白闪 |
|
||||
| `startup.openAtLogin` | `false` | 默认注册但不启用(任务管理器可见、已禁用);在服务管理窗口「开机自启」开关里控制 |
|
||||
| `admin.width` / `admin.height` | `1040` / `760` | 启动管理窗口初始尺寸 |
|
||||
| `admin.width` / `admin.height` | `1280` / `860` | 启动管理窗口初始尺寸(服务管理窗口与服务端管理面板共用) |
|
||||
| `log.maxLines` | `2000` | 内存中保留的日志行数 |
|
||||
| `log.file` | `logs/console.log` | 日志文件,相对 `config.json` 所在目录 |
|
||||
| `log.maxFileBytes` | `4194304` | 单个日志文件上限,超出后轮转为 `.1` |
|
||||
|
||||
Reference in new issue
Block a user