主人点名要的功能:大屏控制页加一个**可热开关**的侧边栏,在**指定的屏幕**上(不管它当前在哪一页)叠一个
**手填的赛事日程列表**,带**竖向进度条**;日程**不与登记的小项时间关联**、完全手填;竖向时间轴要好看,
**字多时字号自动缩放与换行**要做到位(不能过小、不能过大)。
设计口径(主人逐条拍板):放不下时**围绕当前项开窗**;进度条是**一条竖向时间轴 + 三态节点**;
**深色半透明 + 毛玻璃**;已完成的项**淡化保留**;备注**默认上屏 + 一个总开关**;
明细覆盖层 / 全屏公告期间**自动收起**、结束后自动回来;编辑权限**录入员及以上**;单屏覆盖按**实例 id**。
服务端(走大屏公告那条路 —— PUT /api/settings 是 admin-only,会与「录入员可改」冲突)
- 新增 `schedule` 动作 + 白名单;`POST /api/display/command` 同一个 handler:**先校验 → 再转发 → 最后落库**
(校验排在转发前,非法配置不会在大屏上闪一帧)
- 落库到赛事库 settings 的 `display.schedule`(**不新建表、不写迁移**,随赛事包走);
与公告共用那份「写设置键 + bumpVersion」的实现
- **读写不对称容错**:写侧严格 400(含中文提示与第几条),读侧坏数据一律静默当空 —— 老数据 / 手改库不会炸大屏
- 上限:40 条;time ≤20 / title ≤40 / note ≤60(按字符,清洗控制字符);宽度夹 15–40;覆盖 ≤50 条
- 口径收口三处:**时间允许为空**(与管理端同口径)、**showNote 缺键 = true**(区分「键不存在」与「显式 false」)、
**`inherit` 不落库**(不再白占覆盖预算)
大屏端
- 新增 `ScheduleSidebar.vue` + `schedulePanel.ts`(纯函数:开窗 / 三态 / 整体进度 / 字号与行数 / 按显示宽度截断 /
单屏覆盖 / 抑制 / 指纹去重)
- 字号是**舞台设计坐标**(1920×1080),靠 `.stage` 的 `transform: scale()` 整体缩放,**不做二次缩放**
(wiring 断言禁止出现 `window.`/`innerWidth`/`vh`);复用既有的 `fitRowFontPx`(**16–56px 硬上下限**)与 `textEm`;
固定点迭代 ≤4 轮;**贴下限时宁可行数少也不缩字**;标题 ≤3 行、备注 ≤2 行,超出截断
- 容器 `position:absolute; inset:0; z-index:50`(**不用 fixed** —— `.stage` 带 transform,是 fixed 后代的包含块);
**独立于 detail 状态机**(goto 会关明细、明细会停轮播,侧边栏必须不受影响)
- 深色半透明 + `backdrop-filter`,并带 `@supports not (backdrop-filter: blur(1px))` 退化为更不透明的深底
- 关着时**不留任何 DOM**(逐字节等同于没有这个功能);`prefers-reduced-motion` 下不做动效
管理端
- 大屏控制页(左列、公告之后)新增「赛事日程」卡片:条目表格(时间/标题/备注/已完成 + 上移/下移/删除)、
总开关、备注上屏、位置与宽度、**每块屏三态覆盖**(跟随 / 强制开 / 强制关;切回「跟随」会真删掉那条键)
- 保存走 `adminApi.displayCommand`(**不走 admin-only 的设置接口**);本地校验不过**一个请求都不发**
- 排序只有上移 / 下移(该页面禁止挂 pointerdown/mousedown 监听,有既有测试钉着)
测试
- 服务端 16 个包全绿;前端 **1174 例**全过(基线 1096,本批 +78:大屏端 44 + 管理端 34)
- 大屏端另有 **40 项 playwright 实机**(用 `page.routeWebSocket` 假造实时通道):开/关后 DOM 无残留、
五个页面下都在、`lock=0` 真等轮播翻页且侧边栏不掉、明细与公告期间自动收起并自动回来、
**1080p 与 4K 字号完全相同**、`reducedMotion` 下无动画;并钉住两条硬指标(真机列表高度 ≥ 纯函数预算、
容量×行高 ≤ 真机高度)
文档:`docs/升级说明` 新增 `dev_0.5.16`;`使用手册` 9.2 + 17.6;`常见问题` Q108–Q111;`上线检查清单`/`部署指南`
各一条;`devdocs/05·07·13` 同步。
⚠️ 一条**既有边界**(本版故意没改,按主人「兼容性最大化」的要求):导出的名次口径是「通道名次优先」、
屏幕是「成绩行名次优先」,只在「先按决赛计分发布、之后又只更新名次发布一次」这种序列下分叉
(导出显示上次计分的名次)。正常赛程遇不到;遇到时对该组再「按决赛成绩发布」一次即恢复一致。
已写进《升级说明》④ 与《常见问题》Q111。
853 lines
103 KiB
Markdown
853 lines
103 KiB
Markdown
# 常见问题(FAQ)
|
||
|
||
> 更完整的操作步骤见 [使用手册](./使用手册.md),部署与排障见 [部署指南](./部署指南.md)。
|
||
|
||
---
|
||
|
||
## 账号与权限
|
||
|
||
**Q1:初始密码是多少?**
|
||
首次启动时随机生成、只打印一次。用 Console 启动时,在 `logs\console.log` 里搜索「初始密码」即可找到,方法见 [部署指南 · 首次登录](./部署指南.md#5-首次登录)。
|
||
|
||
**Q2:忘记密码怎么办?**
|
||
先停止服务,然后执行(配置在用户数据目录,不要用部署目录里那份模板):
|
||
`scoreboard.exe passwd -config "%LOCALAPPDATA%\ScoreboardConsole\config.yaml" -data "%LOCALAPPDATA%\ScoreboardConsole\data"`
|
||
会打印新的随机密码,并要求下次登录强制改密。
|
||
|
||
**Q3:访客和录入员有什么区别?**
|
||
访客只能只读查看;录入员可以录入、存草稿、发布、撤销发布、确认破纪录、做积分调整、控制大屏;管理员在此基础上还能管理用户、备份、看审计日志、导入规则包和赛事包。
|
||
|
||
**Q4:为什么登录后还是只读?**
|
||
可能未登录成功、会话已过期(登录有效期默认 24 小时、可配 1–720 小时,见 Q89),或页面处于示例数据模式。看右上角是否显示账号名与角色。
|
||
|
||
**Q5:可以建「访客账号」吗?**
|
||
不可以。访客是未登录时的默认身份,不需要也不允许建账号;可落库的角色只有管理员和录入员。
|
||
|
||
**Q6:管理员能改用户名吗?**
|
||
管理界面里账号创建后不可改;命令行可用 `scoreboard.exe passwd -user 旧名 -new-username 新名` 修改。
|
||
|
||
---
|
||
|
||
## 成绩与积分
|
||
|
||
**Q7:为什么录入后大屏没变化?**
|
||
草稿不上屏。需要「发布」(或 `Alt+Enter`),发布后 1 秒内大屏更新。
|
||
|
||
**Q8:发布错了怎么改?**
|
||
撤销发布 → 修改 → 重新发布。撤销会作废该组积分流水,大屏回退到发布前状态,过程可在「变更历史」查看。**只错了一条成绩时不必撤销整组**,点那一格(或那一行的「修改本条」)退回草稿改完重发即可,见 Q98。
|
||
|
||
若想让这一组 / 这一批**回到「没录过」的样子**(**连成绩内容一起清掉**),用工具栏上的「**清空本组 / 清空本批**」:同样收回分、退榜并记进「变更历史」,区别只在**成绩内容留不留**(撤销发布保留、清空清掉)。它是危险操作,确认框里要勾选一行字才点得动,清整组时还会一并清掉按单位录的「团体名次」。两者对照见《使用手册》4.7。
|
||
|
||
**Q9:为什么「发布」是灰的?**
|
||
常见原因:未登录、服务端断开、示例数据模式,或存在**会阻止发布**的校验错误(秒位 ≥ 60、成绩写法无法识别、手动名次项目缺名次)。**没录成绩不算错误、不挡发布**(见 Q77)。成绩格的报错会把**那一格的实际内容**打出来并对症给改法(见 Q75、Q76)。
|
||
|
||
**Q10:并列名次怎么处理?**
|
||
成绩相同(或手动名次相同)自动按并列处理,显示同一名次。默认口径是「顺延」:并列第 3 各得第 3 名的分,无第 4 名,下一名第 5 名;奖牌同样并列(并列第 1 各记 1 金、无银)。具体口径由规则包配置决定。
|
||
|
||
**Q11:状态里的 DNS / DQ / DNF / 退赛有什么区别?**
|
||
都是不参与名次与积分计算的异常状态:DNS = 弃赛,DQ = 取消资格,DNF = 未完赛,退赛 = 主动退出。正常成绩选「有效」。
|
||
唯一例外:「个人+团体」小项若把平均值口径选成「全部报名人员都计入」,这些人在队内平均里会按 0 分占一个分母名额(见 Q15)。
|
||
|
||
**Q12:时间类成绩怎么写?**
|
||
按 `分:秒.毫秒` 形式输入最直观,例如 `1:06.33`;工具栏会显示当前项目的单位。实际上能接受的写法比过去多,中文输入法下的全角冒号 `1:06`、全角数字也认,完整清单见 Q76。成绩格里的 `例 1:06.33` 是**更淡的斜体灰字**,只是示例、不是已填内容(见 Q75)。
|
||
|
||
**Q13:能批量录入吗?**
|
||
可以。支持从 Excel 复制后粘贴:两列及以上时第一列按单位名称 / 简称匹配行、最后一列作为成绩;单列时从当前行向下依次填充。也可以用 `Tab` / `Enter` 在格子间移动,`Ctrl+Enter` 存草稿。
|
||
|
||
**Q14:为什么「个人+团体」小项的个人分没进单位总分?**
|
||
这是「个人+团体」小项的默认口径,不是漏算。这类小项的一条报名会同时走两条计分通道:
|
||
|
||
- **个人通道**:按个人成绩排名、套个人积分模板给分,分只记在个人积分榜;
|
||
- **团体通道**:按团体成绩排名、套团体积分模板给分,计入单位总分。
|
||
|
||
个人通道的「计入单位总分」关掉了才不进单位总分:按规则包里的「个人+团体」模板生成的通道,个人通道默认就是不勾的。**手工新建通道时的默认值也按小项类型给**:普通个人项目 / 团体项目默认勾选;**「个人 + 团体」项目的个人通道默认不勾**——所以**以页面上实际的勾选状态为准**。到「基础数据 → 计分通道」选中该小项就能看到每行通道的勾选状态,关掉的行在「大项 / 小项」的通道摘要里带「不计入单位总分」徽标。
|
||
|
||
想让个人分也折算进单位总分,把个人通道那一行勾上并「保存全部」,然后对该组成绩**撤销发布 → 重新发布**——积分流水是发布时按当时的通道配置生成的,不重新发布不会变。规则包对个别小项写了例外配置时以例外为准。
|
||
|
||
**Q15:队内平均的团体成绩怎么算?平均值口径在哪改?**
|
||
团体成绩 = **该单位在本组别各条报名成绩的平均值**。系统拿这个平均值和其他单位比名次(并列按积分模板的并列口径处理,默认顺延),再套团体积分模板给分,计入单位总分。大屏与管理端只显示算出来的数值,不显示「平均」字样。
|
||
|
||
- 正常做法是给每个参赛人员各报一条(「基础数据 → 报名导入 → 个人报名」),成绩照常录到每个人那一行;团体那一行即便也报了,也不用填成绩。
|
||
- 平均值的分母有两种口径,选中该小项后在「成绩录入」页的工具栏下方用**「平均值口径」**单选切换,点选即保存(小项级设置,该小项的组别共用,不用重新点保存):
|
||
- `只算有效成绩`(默认):分母是有有效成绩的人数;
|
||
- `全部报名人员都计入`:分母是该单位在本组别的报名条数,没成绩的按 0 计入。
|
||
- **团体成绩怎么汇总**:到「基础数据 → 计分通道」选中该小项,那条团体通道的**「聚合口径」**列可选 **`平均`**(默认,团体成绩 = 该单位成员成绩的平均值)或 **`总和`**(团体成绩 = 该单位成员成绩的总和)。点一下即选中,点「保存全部」生效、该小项立即重算。**各队人数相同时两种口径排出来的名次完全相同**,人数不同时可能不同;上面那条「平均值口径」只对 `平均` 有意义——换成 `总和` 后,它只决定「一个人都没有成绩的单位算不算 0 分参与排名」。
|
||
- 改完口径、要让已发布的成绩按新口径重算,需要对该组**撤销发布 → 重新发布**(草稿不受影响,改口径本身在点选时就已保存);发布之前可以先看右侧「实时积分预览」,它已经按新口径显示各单位的分数变化。改「聚合口径」不用这一步——它保存时就重算。
|
||
- 报名表里 `status` 不是 `registered` 的报名项(弃赛 / 取消资格)既不算分子也不算分母。
|
||
|
||
**Q16:某个单位一个人都没有效成绩,团体项目怎么算?**
|
||
看该小项的「平均值口径」:
|
||
|
||
- `只算有效成绩`(默认):这个单位不参与团体排名、不得分(不会按 0 分排到最后、占掉一个名次);
|
||
- `全部报名人员都计入`:按平均 0 参加排名,通常排最后;这个名次若不在团体积分模板的录取范围内,同样不得分,但会占掉一个名次、影响后面单位的录取。
|
||
|
||
**Q17:团体项目可以只给单位报名、不填队员吗?**
|
||
可以。「基础数据 → 报名导入 → 从已有名单勾选报名」分成「个人报名」「团体报名」两个页签,团体 / 对抗 / 「个人+团体」小项默认停在「团体报名」:从已配置的参赛单位里勾选参加本组别的单位(默认一个都不勾),每个勾选的单位各建一条报名,**一个队员都不勾就是纯单位报名**,队员名单之后还能再补。
|
||
|
||
- 要登记队员就点该行的「登记队员」展开勾选(可按姓名 / 工号搜索),提交时队员名单按列表顺序写入;
|
||
- 勾选已报名的单位时该行会提示「提交将清空原名单」:再次提交是用本次登记的队员覆盖原名单,一个队员都不勾就等于清空;
|
||
- 「全选」只勾启用中且还没报名的单位,已停用的单位要单独勾;
|
||
- 选中小项后页签会自动切到与该小项类型相符的一边,也可以手动切换,页面会提示「生成的报名行以当前部分为准」。
|
||
|
||
**Q18:改了「榜单口径」的折算系数,为什么单位总分没变 / 变了?**
|
||
「基础数据 → 积分模板 → **榜单口径(全局)**」里的**个人项目得分折算系数**(键名 `standings.individual_to_team_weight`,默认 1)作用在汇总环节:`单位总分 = Σ 只记单位的流水 + 系数 × Σ 记到个人的流水`。流水里存的是原始分、折算在生成榜单时做,所以点「保存榜单口径」后单位总分与单位积分明细**立刻按新系数变化,不需要重新发布**,大屏也会跟着刷新。
|
||
|
||
改完看不出变化,通常是这几种情况:
|
||
|
||
- 单位总分里本来就没有「记到个人的流水」:团体 / 对抗项目走单位通道,或者该小项的个人通道被关掉了「计入单位总分」(「个人+团体」的个人通道就是这样),这些分不受系数影响;
|
||
- 只有部分单位有个人得分,变的只是那几家;
|
||
- 系数没存上:系数必须大于 0(0 与负数服务端会直接拒绝),输入框允许 0–100、步进 0.1,保存成功会提示「榜单口径已保存」;
|
||
- 当前账号不是管理员:赛事设置接口只对管理员开放,非管理员读不到当前系数,卡片上会写明是只读。
|
||
|
||
导入规则包时,规则包里的同名配置会覆盖这里的取值。
|
||
|
||
**Q19:破纪录加分为什么点不了?**
|
||
规则包里破纪录加分默认关闭(`recordBonus.enabled = false`)时按钮不可用;若当前角色读不到规则包,页面显示「未知」,可提交,由服务端校验决定是否加分。
|
||
|
||
> 这个开关只管「**确认加分**」能不能点,不影响的:疑似破纪录照样列出,「**拒绝**」照样能用(它不会加分),以及 **已批准但批错了的登记可以「作废」**(会撤回加分并恢复上一条纪录,见 Q99)。
|
||
|
||
**Q20:人工调整为什么点不了?**
|
||
规则包里人工调整默认关闭(`manualAdjustment.enabled = false`)时不可用;以页面顶部显示的开关状态为准。
|
||
|
||
---
|
||
|
||
## 大屏
|
||
|
||
**Q21:大屏不亮 / 只有桌面怎么办?**
|
||
检查 HDMI、扩展显示模式、Console「大屏窗口」状态,点「重新排布」;服务端未就绪时最多等 20 秒才开屏;单屏窗口化时按 `F11` 切全屏。详见 [部署指南 · 故障排查](./部署指南.md#9-故障排查)。
|
||
|
||
**Q22:单屏和多屏的显示方式有什么不同?**
|
||
单屏时大屏以窗口化方式打开,按 `F11` 切全屏;多屏时除内置屏外每块屏一个 kiosk 全屏窗口,各锁一页,不响应 F11,**默认吞掉鼠标点击、不穿透**(点击不会漏到后面的窗口或桌面,被别的窗口盖住后点一下就能回到最前);确实要穿透时在配置里显式写 `display.allowClickThrough: true`(旧键 `display.ignoreMouse` 已废弃、不再生效),详见 [部署指南 6.2](./部署指南.md)。
|
||
|
||
**Q23:大屏为什么不自动轮播?**
|
||
Console 启动的多屏窗口默认每屏锁定一页。到「大屏控制」点「解锁」后开始轮播,每 20 秒一页;公告页不参与轮播。
|
||
|
||
**Q24:推送的积分明细怎么关?**
|
||
60 秒后自动关闭;也可以点「积分榜」页的「关闭大屏明细」立即关闭。
|
||
|
||
**Q25:推送的公告撤下后,大屏底部为什么还有字?**
|
||
因为「推送公告」只是一次**全屏展示**,不是公告的生命周期:设好滚动时长(5–120 秒,即全屏展示的秒数)点「推送公告」后,大屏先全屏显示这条公告,到时间自动退回原来的页面,**公告正文会留在底部信息栏的「公告」槽位继续显示**,直到被下一条公告替换或你点「清除公告」。底栏这个槽位是一直都在的,没有公告时显示占位「暂无公告」。
|
||
|
||
- 要撤下:到「大屏控制 → 公告」点「清除公告」,底栏随即回到「暂无公告」;
|
||
- 卡片右上角的徽标显示「当前公告:有 / 无」,下方一行就是当前公告正文,可以先确认再清;
|
||
- 公告保存在赛事设置里(`display.announce_text` / `display.announce_seconds`),所以服务端重启、大屏窗口重开、断线重连之后仍然显示;重开的大屏会先把当前公告全屏播 15 秒,再留在底栏。
|
||
|
||
**Q26:大屏上的单位图标显示在哪?没显示怎么办?**
|
||
配了 logo 的参赛单位会在这几处显示单位图标:总积分榜(单位名左侧)、单位奖牌榜(单位名左侧)、分项成绩(单位列名字左侧)、个人积分奖牌榜(运动员姓名左侧)。图标按行内文字大小缩放(1em),不会撑开行距;没有 logo 的单位不占位,图片临时加载不出来时保留占位、不会出现破图,队名不会跳动。
|
||
|
||
没显示就去「基础数据 → 参赛单位 → 编辑 → Logo 路径」上传或填写该单位的 logo(管理端页面本身不显示 logo,只在大屏上显示)。上传的图片存在该赛事的 `data\event_projs\<项目名>\uploads\` 里,会随赛事项目包一起导出 / 导入。
|
||
|
||
**Q27:「实例 x · 屏 x」这个标识怎么不见了?**
|
||
它只是**调试标识**:只在窗口化的调试窗口里、并且**没有全屏**时显示,用来分辨这块屏是哪个实例。正式上屏(多屏 kiosk 全屏,或单屏窗口化后按 `F11` 全屏)都不显示——按 F11 时它会和自绘标题栏一起收起来,再按一次就回来。
|
||
|
||
以前右上角还有一个 `vN` 数据版本号角标,**现在已经去掉,任何情况下都不再显示**。要核对某块屏有没有跟上服务端,看管理端仪表盘「实时连接」里的「版本 N」。
|
||
|
||
**Q28:大屏控制页的「在线大屏」列表显示的是什么?**
|
||
显示的是**真实**的在线大屏实例,直接读服务端 `GET /api/display/instances`,打开页面时每 5 秒自动刷新一次:本机用 Console 打开的大屏窗口、局域网设备打开 `/display` 连上的浏览器都在里面(后者没有屏号,标记为「局域网浏览器」),每行显示实例 ID、在线 / 离线、当前所在页、来源地址与最后心跳,服务端判定落后时还会多一个「落后」徽标。以前这里确实是本机占位、恒显示「未知」,**那个占位现在已经被真实列表取代了**。离线实例会在服务端保留一段时间;列表读不到时页面提示「读取在线大屏失败」,并保留上一次的结果,不会清空。
|
||
|
||
**Q29:安卓电视能用吗?**
|
||
可以,用电视自带浏览器访问 `http://<主机IP>:19540/display`。但它不受 Console 的 kiosk、防熄屏控制,字体与动画表现以实际设备为准。
|
||
|
||
**Q30:大屏时间不对怎么办?**
|
||
系统没有外网时间同步,以主机时间为准。校准 Windows 时间与时区即可。
|
||
|
||
**Q31:大屏的字体在哪里改?**
|
||
在「系统设置 → 赛事信息 → **字体**」区块(需要管理员):**标题字体**与**正文字体**两个下拉,第一项是「默认(跟随系统)」,后面是四款内置字体与已上传的字体;区块底部的「预览」会按所选字体实时渲染一行中文,选完点页面上的「保存」生效。这两个设置**只影响大屏画面**,管理端界面的字体不变。
|
||
|
||
四款内置字体随程序分发,不用上传:`Noto Sans SC(思源黑体同源)`、`Noto Serif SC(思源宋体同源)`、`MiSans`、`Source Han Sans CN(思源黑体)`。
|
||
|
||
**Q32:怎么上传自己的字体?**
|
||
1. 到「系统设置 → 赛事信息 → 字体 → 字体库」,点「上传字体」选择本地字体文件;
|
||
2. 上传成功后,新字体立刻出现在两个下拉里(按文件名显示,文件名里的中文会保留,其他特殊字符会换成下划线);
|
||
3. 在「标题字体」「正文字体」下拉里选上它,再点页面上的「保存」——下拉的改动要保存才生效;
|
||
4. 字体文件存在当前赛事项目的 `data\event_projs\<项目名>\uploads\fonts\` 里,列表里会显示它的地址 `/uploads/fonts/<文件名>`。
|
||
|
||
**Q33:字体支持哪些格式?有大小限制吗?**
|
||
只支持 `.ttf` / `.otf` / `.woff` / `.woff2`,**单个文件不超过 20 MiB**;格式不符或超过上限,会在上传前就直接提示,不会传到服务端。同一个文件名再传一次会被拒绝(提示「已存在,请先删除或重命名后再上传」),所以换字体请先删掉旧的、或把文件改成别的名字。上传的字体不做格式解析,损坏的文件传得上去,但大屏加载不了会回落到默认字体(见 Q34)。
|
||
|
||
**Q34:为什么上传的字体在大屏上没生效?**
|
||
按这个顺序排查:
|
||
|
||
- **保存了吗**:「赛事信息」里的下拉选完要点页面上的「保存」,没保存时页面显示「未保存」徽标;保存时服务端会校验字体是否存在,选了不存在的字体会直接报错;
|
||
- **看错地方了**:这两个设置只作用于**大屏**,管理端界面的字体不受影响,别拿管理端的显示效果判断;
|
||
- **字体文件加载失败**:大屏是无人值守的,字体只是外观,加载失败时会**静默回落到默认字体**(不会出现方块或空白)。检查 `data\event_projs\<项目名>\uploads\fonts\` 下的文件是否还在(被手工删掉就会出现这种情况),必要时重新上传并保存一次;
|
||
- **大屏还没刷新**:保存会立刻下发给在线大屏;仍没变化可以重开大屏窗口,或等大屏自动重载。
|
||
|
||
**Q35:为什么删不掉某个字体?**
|
||
**正在被标题字体或正文字体使用的字体不允许删除**,会提示「正在被大屏使用,请先在赛事信息里改掉标题/正文字体」。先把这两个下拉改成别的字体并**保存**,再回「字体库」点该行的「删除」(会有二次确认,删除前请确认大屏上已不再使用它)。
|
||
|
||
**Q36:换一台机器还要重新传字体吗?**
|
||
不用。字体文件就在当前赛事项目的 `uploads\fonts\` 里,所以**导出赛事项目包(zip)会连字体一起带走**,导入到另一台机器后直接可用、不用重新上传;字体设置存在赛事库里,也随包走(见 Q43)。
|
||
|
||
只有一个小陷阱:`backups\` 里的 `.db` 快照**不含**字体这些上传文件(见 Q37),如果只拷数据库快照换机器,字体就没了——记得把 `event_projs\<项目名>\uploads\` 一起拷(见 Q41)。
|
||
|
||
---
|
||
|
||
## 数据与备份
|
||
|
||
**Q37:备份在哪里?**
|
||
在数据目录下的 `backups\`,默认即 `%LOCALAPPDATA%\ScoreboardConsole\data\backups\`(数据目录改过就按改后的路径找,见 Q54)。
|
||
|
||
文件是数据库快照,命名形如 `system-<原因>-<时间戳>.db` 与 `event-<原因>-<时间戳>.db`:`system` 是系统库(账号、会话),`event` 是赛事库(成绩、积分、报名、基础数据),原因是 `auto` / `manual` / `publish`,时间戳是「年月日-时分秒」,例如 `event-publish-20260910-120500.db`。
|
||
|
||
> 备份里只有数据库,**上传的图片与字体**(赛事会标、大屏背景图、单位 logo、自定义字体)不在其中,它们在 `data\event_projs\<项目名>\uploads\` 里(字体在 `uploads\fonts\`),需要另外归档。部署目录下的 `deploy\backup.bat` 除了 `.db` 快照,**还会把每个项目的 `uploads\` 打成 `<项目名>-uploads-<时间戳>.zip`**;该 zip **不在 20 份滚动清理范围内**(清理只认 `.db`),要手工删旧的(见 Q39)。「一键恢复」也只换数据库文件,不会带回图片。
|
||
|
||
**Q38:多久备份一次?**
|
||
服务端会自动备份,默认每 5 分钟一次(`config.yaml` 的 `backup.intervalMinutes`,设成 `0` 可关闭)。也可以手动触发:管理端「系统设置 → 备份 → 立即备份」,或执行 `scoreboard.exe backup -config "%LOCALAPPDATA%\ScoreboardConsole\config.yaml" -data "%LOCALAPPDATA%\ScoreboardConsole\data"`(部署目录下的 `deploy\backup.bat` 已经带好这些路径)。另外每次发布成绩前会自动备一份。
|
||
|
||
**Q39:备份会自动删除旧的么?**
|
||
会。自动、手动、命令行三种方式都按 `backup.keep`(默认 20 份)滚动保留,`system` 库与赛事库各自计算。⚠️ 但 `deploy\backup.bat` 另外产出的 `*-uploads-*.zip`(上传图片与字体)**不在这个滚动清理里**,不会被自动删,需要手工清理,建议每个项目至少留最新一份。
|
||
|
||
**Q40:怎么恢复备份?**
|
||
**管理端有一键恢复(仅管理员)**:到「系统设置 → 备份」,在列表里找到要退回到的那份(`pre-restore-…` 是系统自动留的「恢复前安全副本」),点该行的**「恢复」**并过危险确认框。服务端会先给当前库拍一份安全副本(**每类库只保留最近 5 份**,更旧的会被后续恢复自动清理),再替换库文件并优雅重启,页面自动等待刷新。「恢复系统库」会连账号与会话一起换掉,重启后需要用那个时间点的账号重新登录;**恢复不会带回上传的图片与字体**(它们在 `uploads\` 里,不在 `.db` 内)。恢复是覆盖式的,备份时间点之后的改动都会丢。
|
||
|
||
没有 Console 或恢复不了时的兜底是停机手工替换数据库文件:在 Console 里停止服务,到 `<数据目录>\event_projs\<项目名>\` 把目标备份复制为 `event.db`(覆盖原文件),删掉同目录的 `event.db-wal` 与 `event.db-shm`,再启动服务,详见 [部署指南 · 备份与恢复](./部署指南.md#8-备份与恢复)。
|
||
|
||
**Q41:换一台电脑怎么迁移?**
|
||
用户数据目录和安装目录都要带走:
|
||
|
||
- **用户数据目录** `%LOCALAPPDATA%\ScoreboardConsole\`(里面是 `data\` + `config.yaml` + `console\config.json` + `rules\`):整个拷到新机器的同一位置即可,赛事数据、账号、配置、规则包原样接管,`data\` 里自然也包括上传的图片与字体;
|
||
- **安装目录**(`Scoreboard_Console.exe`、`scoreboard.exe` 等):按同样路径放好,或用新机器上的安装包装一遍(安装目录里那几份配置与规则只是模板,拷不拷都行)。
|
||
|
||
只拷安装目录会丢数据——成绩、账号、配置、规则包都在用户数据目录里。若数据目录放到了别处,还要同步改 `console\config.json` 的 `server.dataDir`。详见部署指南第 8.4 节。
|
||
|
||
**Q42:怎么切换赛事项目?**
|
||
启动时服务端会自动打开**上次打开的赛事**,不用改启动参数。切换在页面里完成:管理面板「导出 → 赛事项目包 → **赛事项目列表**」里找到目标项目(带「当前」徽标的就是正在打开的那一项),点「切换为当前赛事」。服务端会退出并由服务管理窗口自动拉起,页面显示「正在重启服务端…」,恢复后自动刷新;最多等 60 秒,超时就打开服务管理窗口确认服务端状态,待其显示「运行中」后手动刷新本页。
|
||
|
||
- 导入赛事包**不会**自动切换当前赛事,导入完成的结果框里直接给了「立即切换并重启服务端」按钮;
|
||
- 切换需要服务管理窗口(Console)在运行,否则服务端退出后没人拉起,得手动启动一次;
|
||
- 比赛进行中请避开切换;
|
||
- 账号与会话存在数据目录下的 `system.db` 里,属于整个系统而不属于某个赛事库(赛事包里也只带赛事数据、不带账号),所以切换赛事不会动它,一般不用重新登录;万一重启后页面是只读访客视图,登录一次即可,忘记密码用 `scoreboard.exe passwd` 重置。
|
||
|
||
> 不要用启动参数 `-project` 来切换赛事:给 Console 的 `config.json` 里 `server.args` 加上 `-project <项目名>` 后,服务端每次启动都会优先打开这个项目并把它写回「上次打开的赛事」,在页面里切换完、重启后又被拉回它。只有「刻意固定只开某一个项目」时才会这么用。
|
||
|
||
---
|
||
|
||
## 导出与导入
|
||
|
||
**Q43:能导出哪些文件?**
|
||
「导出 → 结果导出」页有六类 Excel:**总表**(`总积分榜.xlsx`)、**全部**(`赛事成绩总表.xlsx`,多 sheet)、**全部(单页)**(`赛事成绩总表(单页).xlsx`,单张表平铺)、**分项成绩表**(`分项成绩表.xlsx`)、**单位积分明细**(`单位积分明细.xlsx`),以及可筛选的**报名名单**(`报名名单.xlsx`,见 Q87;同一张卡片里另有「导入格式」的两个版本 `报名名单(导入格式).xlsx` / `报名名单(导入格式·分小项).xlsx`,见 Q104)。「积分榜」页另有四项:单位总分榜卡片头的**导出总明细**(`单位积分总明细.xlsx`)、单位奖牌榜卡片头的**导出奖牌明细**(`单位奖牌明细.xlsx`)、个人积分榜卡片头的**导出个人明细**(`个人积分总明细.xlsx`),以及展开单位后明细卡头的**导出该单位明细**(`单位积分明细.xlsx`)。另外可导出赛事项目包(zip)、**基础数据包**(xlsx,见 Q88)与规则包(YAML)。
|
||
|
||
**Q44:导出文件保存在哪?**
|
||
浏览器默认下载目录。服务端生成的临时包位于 `data\exports\`,下载完成后自动删除。
|
||
|
||
**Q45:谁能导入规则包 / 赛事项目包 / 基础数据包?**
|
||
三者都只有管理员能导入。规则包导入后全量重算积分且不能一键撤销;赛事包覆盖同名项目前会二次确认;**基础数据包**按编码「存在就更新、不存在就新建」,**绝不删除**(见 Q88)。
|
||
|
||
**Q46:导入赛事包后为什么看不到数据?**
|
||
因为导入只把包解到数据目录,**不会自动切换当前赛事**。服务端启动时只打开一个赛事项目(启动参数 `-project` 指定的那个;没带参数时用上次切换记下的,从未切换过则是 `default`),页面上看到的是它的数据——通常是导入前那个空赛事,所以看着像「没导进去」。
|
||
|
||
处理办法:在「导出 → 赛事项目包」的**赛事项目列表**里找到刚导入的项目(导入完成的结果框里也直接给了「立即切换并重启服务端」按钮),点「切换为当前赛事」。服务端会退出并由服务管理窗口自动拉起,页面显示「正在重启服务端…」,恢复后自动刷新,数据就出来了。超过 60 秒仍未恢复时,请打开服务管理窗口确认服务端状态,待其显示「运行中」后手动刷新本页。
|
||
|
||
> 切换会让服务端重启,比赛进行中请避开操作。账号与会话不在赛事库里(见 Q42),一般不用重新登录;万一回到只读访客视图,登录一次即可,若原密码登不上就用 `scoreboard.exe passwd` 重置。导入的赛事包里如果带了自定义字体,切换过去后大屏直接可用,不用重新上传(见 Q36)。
|
||
|
||
**Q47:导入规则包后积分变了,能撤销吗?**
|
||
不能一键撤销。纠错需要重新导入旧规则包,或逐项修正后重新发布。导入前请务必先「预览差异」。
|
||
|
||
**Q48:报名表里的证件号重复了怎么办?**
|
||
先分清三种「重复」,处理方式完全不同:
|
||
|
||
- **同一份表里同一个证件号出现多次**:**不报错**,照常导入——证件号是**人员的唯一标识**,同一个证件号就是同一个人(同一个人报多个组别时本来就会重复)。导入结果里会给一条提示:`证件号 XXXX 在本表中出现 N 次(同一人报名多个组别)`,只是在提醒你别把不同的人写成同一个证件号。
|
||
- **同一证件号 + 同一个小项同一个组别**:这才是**真重复**(同一个人在同一组里被写了两遍)。这一行会进「冲突」列表,由你选**保留已有**(已导入的那条报名不动)或**使用新数据**(用这一行覆盖它)。
|
||
- **证件号已经登记在系统里另一个人名下**:这一行会**按证件号认到那个人**,姓名 / 单位等对不上就进「冲突」列表让你决定;只有实在认不到(例如同时又给了别人的号码布)时才会报 `第 N 行:证件号 X 已被另一个人占用(姓名 Y,号码布 Z)` 并**跳过该行**。处理办法:先核对证件号是不是抄错了——不是这个人的,把这一格留空即可(只填号码布也能导入);确实是他的,先到「基础数据 → 运动员」把另一条档案里的证件号清掉或改对,再重新上传。
|
||
- **在「运动员」里新增 / 编辑时提示证件号重复**:同上,说明该证件号已属于另一个人。是同一个人的话直接用已有记录;证件号填错就改对。已有历史数据可以没有证件号。
|
||
|
||
详细步骤见 [使用手册 · 报名导入](./使用手册.md#107-报名导入)。
|
||
|
||
**Q49:人员没有身份证,只有号码布,能报名吗?**
|
||
可以。证件号是系统认人的**第一依据**,但没有身份证的人只填号码布也能用:号码布此时**顶替证件号认人**。在「运动员」里只填号码布也能保存;报名表里有姓名的行,`id_card` 与 `bib` 至少填一个就能导入;从已有名单勾选报名时,两项里有一项就能勾选。号码布会同时写入人员档案与报名记录。因为没有证件号,认人就全看号码布了——能编上号码布就编上,重名重姓、号码布还必须写成同一个人每次都用的那个号。
|
||
|
||
**Q50:号码布重复了怎么办?**
|
||
两个人**不能**共用同一个号码布(同一个人报多个组别时可以重复)。
|
||
|
||
- **在「运动员」里新增 / 编辑时提示重复**:说明该号码布已属于另一个人员。请先核对是不是同一个人:是,就直接用已有记录;不是,请检查号码布是否填错。
|
||
- **同一份报名表里,同一个号码布给了两个不同的人**:重复的那一行会报错并跳过,改好后重新上传。(同一个人报多个组别、号码布写成同一个,不报错。)
|
||
- **号码布在系统里已有、但表里这个人跟他对不上**(姓名 / 性别 / 年龄 / 单位不同):会列为「冲突」,本次不写入(报名也不会创建),需要在导入结果里勾选后决定「保留已有数据」还是「使用新数据」。表里同时给了**别人的证件号**时,会先按证件号认人,同样是进「冲突」列表。
|
||
- **表里某人的证件号(或号码布)与库里「同名 + 同单位」的人不同**:系统按「**同名的另一个人**」给他**新建档案**(不报错),并在导入结果里单独列出 `姓名(单位):证件号 XXX → XXX;号码布 XXX → XXX` 提醒核对。多半是证件号或号码布写错了:到「基础数据 → 运动员」把档案里的号改回来、删掉多出来的那条档案即可。
|
||
|
||
详细步骤见 [使用手册 · 报名导入](./使用手册.md#107-报名导入)。
|
||
|
||
**Q51:导入 CSV 时中文变成乱码,或者提示「报名表缺少列 event_code」怎么办?**
|
||
**不用转码,直接传原文件就行。** 服务端会自己识别编码:UTF-8、带 BOM 的 UTF-8(Excel 的「CSV UTF-8」)、GBK / GB18030(中文 Windows 上 Excel「另存为 CSV」的默认编码)、UTF-16(PowerShell `Export-Csv` 的默认编码)都能正常导入。
|
||
|
||
- 这两种症状以前长这样:GBK 文件的中文单位名、运动员名**变成乱码**;带 BOM 的文件报「**报名表缺少列 event_code**」——看着像表头写错,其实是 BOM 粘在了第一列表头上。现在都已修好,两种文件都直接传。
|
||
- 如果还是报「报名表缺少列 xxx」,那就是表头真的不对:第一行必须是英文列名(`event_code,category,team_code,athlete_name,…`),不能是中文标题行,上面也不要有多余的标题行或合并单元格。最稳妥的做法是下载页面上的「CSV 模板」照着填,格式细节见 [报名名单导入规范](./报名名单导入规范.md)。
|
||
- xlsx 不受影响,它自带编码信息。
|
||
|
||
---
|
||
|
||
## 其他
|
||
|
||
**Q52:系统需要联网吗?**
|
||
不需要。完全离线运行,不依赖外网,也不需要在现场安装任何运行时。
|
||
|
||
**Q53:页面提示「示例数据」是什么意思?**
|
||
表示后端未就绪,此时所有改动只停留在界面,不会写入真实赛事。恢复连接后刷新即可。
|
||
|
||
> 注意区分:顶部若只是显示「连接中断」,说明实时推送断了(数据可能不是最新),但写操作仍会照常提交给服务端并做校验。
|
||
|
||
**Q54:为什么登录 / 写操作偶尔被拒绝?**
|
||
系统有频率限制:登录每 IP 每分钟 5 次,写操作每用户每分钟 **120 次**。稍等一分钟再试。
|
||
|
||
**Q55:数据目录在哪?**
|
||
默认 `%LOCALAPPDATA%\ScoreboardConsole\data`(当前用户的本地应用数据目录,升级 / 覆盖安装 / 卸载都不会删)。里面是 `system.db`(账号、会话)、`event_projs\<项目名>\`(每个赛事的 `event.db` 与上传资源 `uploads\`,图片与自定义字体都在里面,字体在 `uploads\fonts\`)、`backups\`、`exports\`。
|
||
|
||
同一层还有 `config.yaml`(服务端配置)、`console\config.json`(Console 配置)与 `rules\`(规则包目录),也都在安装目录之外,同样不会被覆盖安装或卸载删掉。
|
||
|
||
要换位置:改 `%LOCALAPPDATA%\ScoreboardConsole\console\config.json` 里的 `server.dataDir`(支持绝对路径,相对路径按安装目录解析),重启 Console 生效。Console 会把这个目录用 `-data` 传给服务端,**它优先于 `config.yaml` 里的 `dataDir`**,所以只改 `config.yaml` 是不生效的。详见部署指南第 3.4 节与第 3.5 节。
|
||
|
||
**Q56:运动员为什么删不掉?怎么彻底删掉一个人?**
|
||
|
||
「基础数据 → 运动员」每行有三个动作:**编辑**、**停用**(已停用的人显示为「启用」)、**彻底删除**。以前只提供「停用」,所以看着像「删不掉」;现在点该行右侧红色的「彻底删除」,在二次确认框里再点一次「彻底删除」即可,删完页面会给出规模提示,例如「已彻底删除「张伟」:报名 1 条、成绩 1 条、积分流水 2 条,已重算 1 个小项的积分与名次」。它删掉什么、为什么会让榜单变化,见 Q57。
|
||
|
||
**Q57:停用和彻底删除有什么区别?**
|
||
|
||
| 动作 | 人员列表里 | 还能被报名选中吗 | 他名下的报名 / 成绩 / 积分 | 能恢复吗 |
|
||
| --- | --- | --- | --- | --- |
|
||
| 停用 | 还在(标「已停用」) | 不能 | 保留 | 点「启用」即可 |
|
||
| 彻底删除 | **不在了** | 不能 | **一并删除** | 恢复不了 |
|
||
|
||
- **停用**是软删除:人还留在名单里,只是不再出现在新报名的选择里;历史报名、成绩与积分全部保留;随时可以再启用。只是想暂时不让他报名,用它就够了。
|
||
- **彻底删除是真删除**:人员档案,以及他名下的报名、成绩、由这些成绩产生的积分流水(含已作废的历史流水)与破纪录记录,都会从库里删掉,界面上无法恢复。删完他也就不再出现在人员列表、报名选择和各类榜单里。
|
||
- **删人会改动榜单**:删掉成绩会改变同组其他人的名次与得分,所以系统会在删除的同时**按新排序重算受影响小项的排名与积分**并推送到大屏。已经有成绩的比赛,删人后原来的第二名可能升到第一、得分跟着变,删完请核对一下榜单。
|
||
- 已经发布的比赛要改人,更稳妥的做法是撤销发布、改好成绩再重新发布(见 Q8);「彻底删除」是给「这个人根本不该出现在系统里」的情况用的。
|
||
|
||
**Q58:删掉的人怎么又出现在名单里了?**
|
||
|
||
彻底删除之后,如果又在报名表里导入同一个人(同一个证件号、或同一个号码布、或同一「单位 + 姓名」),他会以**全新的档案**重新出现在运动员名单里——因为旧档案已经连同他的报名与成绩一起删掉了,系统按「证件号 → 号码布 → 姓名 + 单位」都找不到他,就当作新人员建档。所以名单里突然多出一个「以前删过的人」,通常就是某次导入带回来的。
|
||
|
||
- 新出现的这条是**全新的记录**:以前的报名、成绩与积分不会回来,需要重新录;
|
||
- 不想他再出现,就让各单位不要把这个人填进报名表;确实不该有的,再「彻底删除」一次即可。
|
||
|
||
**Q59:报名表的 status 能填中文吗?**
|
||
|
||
能。`status` 列**大小写不敏感**(`DNS`、`Registered`、`registered` 都认),也认这些中文别名:
|
||
|
||
- `正常` / `正常参赛` / `参赛` → 正常参赛;
|
||
- `退赛` / `弃赛` / `请假` → 退赛;
|
||
- `取消资格` / `犯规` → 取消资格;
|
||
- `未出场` / `未到` / `缺席` → 未出场。
|
||
|
||
留空就是「正常参赛」。这四个是**报名**状态,和「成绩录入」里每个成绩的状态(有效 / DNS / DQ / DNF / 退赛,见 Q11)是两回事。逐列说明见 [报名名单导入规范](./报名名单导入规范.md)。
|
||
|
||
**Q60:为什么导入报 status「xxx」无法识别?**
|
||
|
||
说明那一行的 `status` 填了系统不认的词(例如「已报到」「未参赛」)。这一行会被跳过并给出中文提示,其余行照常导入:
|
||
|
||
> 第 12 行:status「已报到」无法识别,只能填 registered / scratched / dq / dns(或留空)
|
||
|
||
改法:换成四个标准词之一(`registered` / `scratched` / `dq` / `dns`,大小写都行)或 Q59 里的中文别名,也可以直接留空(= 正常参赛),改完重新上传即可。对照表见 [报名名单导入规范 · 常见报错怎么办](./报名名单导入规范.md#六常见报错怎么办)。
|
||
|
||
**Q61:参赛单位怎么彻底删除?和删运动员一样吗?**
|
||
|
||
不一样,两个按钮同名、行为完全不同,现场别按错。「基础数据 → 参赛单位」每行有三个动作:**编辑**、**停用**(已停用的单位显示为「启用」)、**彻底删除**。点该行右侧红色的「彻底删除」,在确认框里核对提示后再点一次「彻底删除」即可,完成后该单位从默认列表里消失,页面提示「已彻底删除「XX」」。
|
||
|
||
一句话概括:**删运动员是真删,删单位是假删**。
|
||
|
||
| | 运动员的「彻底删除」(见 Q57) | 参赛单位的「彻底删除」 |
|
||
| --- | --- | --- |
|
||
| 数据 | 人员档案连同报名、成绩、积分流水、破纪录记录**一并从库里删掉** | **一条都不删**,报名 / 成绩 / 积分 / 人工调整 / 纪录 / 名下运动员全部保留 |
|
||
| 榜单 | **重算**受影响小项的排名与积分,删完榜单会变 | **积分榜不变**,不触发任何重算 |
|
||
| 列表 | 从运动员名册里消失 | 从参赛单位列表里消失 |
|
||
| 恢复 | 恢复不了 | **管理员**可在参赛单位页勾选「显示已彻底删除的单位」,再点该行「恢复」(见 Q62);再次导入用到它的编码也会自动回来 |
|
||
|
||
想让某个单位暂时不参赛,用「停用」就够了:单位还在列表里,历史数据保留,随时能再启用。详细说明见[使用手册 · 10.1 参赛单位](./使用手册.md#101-参赛单位)。
|
||
|
||
**Q62:删掉的单位怎么又出现在列表里了?**
|
||
|
||
两种常见原因:**管理员恢复了它**,或者**导入把它带回来了**。
|
||
|
||
- **恢复**:只有**管理员**能在参赛单位页勾选「**显示已彻底删除的单位**」把已删除的单位翻出来(标「已删除」),点该行的「**恢复**」即可原样放回列表;录入员(recorder)界面上看不到这个开关,删错了要**找管理员恢复**。恢复是幂等的,本来就还在时会提示「本就未被彻底删除」;若该编码已被另一个可见单位占用(只能来自手工改库),会拒绝并说明原因。
|
||
- **导入带回**:报名表里再次用到这个单位的编码(`team_code`),系统会把它**原样复活**——清掉删除标记、恢复成启用,重新出现在参赛单位列表里。因为单位编码是唯一的,系统按编码找到的就是原来那一行,所以**不会新建第二个同名单位**,原有的报名、成绩与积分也都还在。(**注意**:这只针对**报名表**导入;用**基础数据包**导入不会复活它,见 Q88。)
|
||
|
||
这和人员的规则**看着像、结果不同**:删掉的人再次导入是**以全新档案建档**,旧数据不会回来(见 Q58);删掉的单位再次导入是**原来那个单位直接复活**,旧数据一直都在。
|
||
|
||
- 不想让它回来,就别在报名表里填这个单位编码;
|
||
- 名单里「突然多出一个以前删过的单位」,通常就是这么来的。
|
||
|
||
**Q63:为什么积分榜里还能看到已删除的单位?**
|
||
|
||
这是**刻意设计**,不是 bug。「彻底删除」只是把单位从参赛单位列表里移除的假删除——它的报名、成绩与积分流水**一条都没删**。既然分数还在,积分榜(总积分榜、单位奖牌榜、分项成绩表)就会照旧列出这个单位的名字与分数,否则总分和名次就对不上了。
|
||
|
||
所以「单位列表里没有它」不等于「它的历史成绩不存在」,两处不一致是正常的。如果确实希望它的分数不再影响榜单,那不是「彻底删除单位」能解决的事——它动的只有列表里的条目,不碰任何成绩数据。
|
||
|
||
**Q64:单位下面还有运动员,能删吗?**
|
||
|
||
能。单位被彻底删除时,名下的运动员**不会**被一起删掉:他们仍在「运动员」名册里,报名、成绩与积分全部保留。但有两处会变得不好操作,删之前最好先处理:
|
||
|
||
- 运动员列表的「所属单位」列会显示成**未知单位**(那个单位已经不在列表里,名字查不到了);按单位筛选时也筛不到这些运动员,只有在「全部单位」下才看得到;
|
||
- 编辑这些运动员时,「所属单位」下拉里没有这个单位,**必须改选另一个单位才能保存**。
|
||
|
||
所以更稳妥的做法是:先把名下运动员调到别的单位(或者干脆用「停用」代替「彻底删除」),再决定要不要彻底删除这个单位。
|
||
|
||
**Q65:大屏控制页为什么看不到局域网那台电视?**
|
||
先确认那台设备真的打开了 `http://<主机IP>:19540/display` 并且能连上主机(同一局域网、服务端端口 19540 已放行)。连上后它会出现在「大屏控制 → 在线大屏」列表里——这个列表每 5 秒自动刷新一次,刚打开时等几秒即可。另外注意:
|
||
|
||
- 列表里在线实例排在前,离线实例也会保留一段时间(挂在后面),别只看第一屏就以为没有;
|
||
- 页面提示「读取在线大屏失败」时是列表没读出来,按提示刷新或检查登录状态(该接口需要记录员及以上),不是那台设备没连上;
|
||
- 本机「显示器」卡片只列**本机接的显示器**,局域网设备没有屏号,不会出现在那张卡片里,只会在「在线大屏」列表里显示为「局域网浏览器」。
|
||
|
||
**Q66:怎么给某一块屏单独切页?**
|
||
在「大屏控制 → 在线大屏」列表里找到那一行,用「当前页」旁的下拉选好页名,点「切到此页」——**只切这一台**,其他屏不受影响。本机显示器也可以直接在「显示器」卡片对应那一行的下拉 + 「切到此页」切。要让**所有大屏一起切**,才用上方「切页」卡片选页后点「立即跳转」。离线实例的下拉和按钮是灰的,切不了。
|
||
|
||
**Q67:切页时提示「目标大屏已离线」怎么办?**
|
||
这条提示只在**点名切页、但一块屏都没收到指令**时出现,说明目标实例已经离线或实例 ID 失效。处理办法:
|
||
|
||
1. 在「在线大屏」列表里看那一行的状态与「最后心跳」,确认大屏窗口 / 浏览器还开着、网络正常;
|
||
2. 等它重连(列表每 5 秒一刷,重连后会变回「在线」)再切;
|
||
3. 列表里根本没有它时,说明大屏没连上服务端,先解决连接再切页。
|
||
|
||
离线实例切不动是正常的:指令发不到它,系统不会谎报「已切换」。
|
||
|
||
**Q68:导出里「全部」和「全部(单页)」有什么区别?**
|
||
两者内容同源,覆盖的都是全部小项的全部报名 / 成绩,区别在排版:
|
||
|
||
- **全部**(`赛事成绩总表.xlsx`):一个工作簿里每个小项一张分表(多 sheet),适合归档打印;
|
||
- **全部(单页)**(`赛事成绩总表(单页).xlsx`):一个工作簿**只有一张表**,把所有单位、所有项目、所有成绩平铺在一起;每行前面带「大项 / 小项 / 组别」三列,脱离分表也能看懂。列是:大项、小项、组别、名次、号码、单位、运动员/队、成绩、积分、状态、备注。适合筛选、排序与二次统计。
|
||
|
||
**Q69:怎么把一个单位的积分明细导出成表格?**
|
||
两种方式:
|
||
|
||
1. **只导一个单位**:到「积分榜」页展开该单位的明细,点右侧明细面板头部的「导出该单位明细」,得到 `单位积分明细.xlsx`(逐条列出每一分的来源,末行是「合计」);
|
||
2. **一次导全部单位**:在「积分榜 → 单位总分榜」的**卡片头**点「导出总明细」,得到 `单位积分总明细.xlsx`——一张带「单位」列的总表,外加每个**有数据**的单位一张分表(没有积分的单位不出分表)。
|
||
|
||
单位奖牌榜那一列的「明细」展开的仍是**同一个单位积分明细面板**,所以想按单位看时也可以在那上面点「导出该单位明细」;但单位奖牌榜本身另有专属的逐枚奖牌导出(卡片头「导出奖牌明细」,见 Q71),个人积分榜也有专属的逐条得分导出(卡片头「导出个人明细」,见 Q70、Q72)。另外「导出 → 结果导出」里的「单位积分明细」也能先选一个单位再导出。这些导出都是只读下载,访客也能用。
|
||
|
||
> 明细面板与这份导出里的列:**运动员**(团体项目、按队内平均的团体分、人工调整这几类显示单位名或 `—`)、**来源**(`成绩` / `破纪录加分` / `人工调整`),以及**被改过的成绩**:面板上带「已修订 ×N」角标(悬停看最后一次修订的时间、原因与操作人),导出的**备注列**写「已修订 ×N;最后一次 <时间> <原因>」。没改过的行没有角标、备注留空。
|
||
|
||
**Q70:个人积分榜能导出明细吗?**
|
||
能。个人积分榜的**卡片头**有「导出个人明细」按钮,导出 `个人积分总明细.xlsx`:第一张总表逐条列出「单位 / 运动员 / 大项 / 小项 / 组别 / 名次 / 成绩 / 得分 / 来源」,其后每个**有得分**的单位一张分表(按单位分,不按人分;没有得分流水的人不出现在表里)。`得分` 是记到个人的原始分,与「个人积分榜」逐个数字一致,**不受榜单口径里的个人项目得分折算系数影响**(那个系数只作用于单位总分),详见 Q72。
|
||
|
||
**Q71:单位奖牌榜能导出每一块奖牌的来源吗?**
|
||
能。到「积分榜 → 单位奖牌榜」,点**卡片头**的「导出奖牌明细」,得到 `单位奖牌明细.xlsx`:
|
||
|
||
- 第一张总表逐枚列出「单位 / 大项 / 小项 / 组别 / 名次 / 奖牌 / 运动员、队」,`奖牌` 列是 `金牌` / `银牌` / `铜牌`;
|
||
- 其后每个**有奖牌**的单位一张分表,列与总表相同但去掉「单位」,末尾多一行小计 `金 X / 银 Y / 铜 Z`;没有奖牌的单位不出分表;
|
||
- 口径与「单位奖牌榜」一致:同一个报名项在「个人+团体」这类双计通道下只记一枚奖牌,导出不会重复计数。
|
||
|
||
**Q72:个人积分明细导出的数字跟个人积分榜对得上吗?会不会受榜单口径系数影响?**
|
||
对得上,而且**不受系数影响**。「导出个人明细」(`个人积分总明细.xlsx`)里的 `得分` 是**记到个人的原始分**,与「个人积分榜」逐个数字一致;「基础数据 → 积分模板 → 榜单口径」里的个人项目得分折算系数(键名 `standings.individual_to_team_weight`,默认 1)只在汇总环节把个人分折算进单位总分,**不会改变个人明细里的数字**——比如把系数改成 0.5,个人明细的得分仍是原始分,只有单位总分变小(见 Q18)。
|
||
|
||
**Q73:操作被拒绝了,怎么查是谁在什么时候、因为什么被拦的?**
|
||
服务端把「主动拦截」单独记到数据目录的拦截日志里(默认 `%LOCALAPPDATA%\ScoreboardConsole\data\logs\interceptions\`):
|
||
|
||
1. 找当天的 `interceptions-YYYYMMDD.log`(同一天有续写文件时按 `.1`、`.2` 往后看);
|
||
2. 搜 `请求被拦截`(WARN)那一行,它已经带齐:`reason` 中文原因、`origin` **拦截点**(形如 `internal/httpapi/repo_events.go:231 normalizeAvgMode`,直接看出是哪个函数的哪一行拦下的)、`code` / `method` / `path`,以及 `actor`(`用户名#id`,未登录是 `guest`)/ `role` / `requestId`;
|
||
3. 想定位得更准:浏览器开发者工具 **Network** 面板点开那条失败请求,复制响应头 `X-Request-Id`,拿它去日志文件里搜;同值的 DEBUG 行「拦截上下文」还会补 `detail` 与来源 IP;
|
||
4. 想对照同一时间有没有成功的操作,去 `operations\` 里搜同一个 `requestId`(放行日志带 action / 实体 / 操作人)。
|
||
|
||
中间件层的拦截(未登录 401、无权限 403、CSRF 校验失败、未改初始密码、操作过于频繁 429)同样记在这里。完整说明见部署指南第 10 节。
|
||
|
||
**Q74:日志文件在哪?会不会把盘写满?**
|
||
服务端日志在**数据目录**下的 `logs\`,分两类:
|
||
|
||
- `operations\`(放行类):放行的写操作(`操作已放行`,含 action / 实体 / 操作人 / requestId)+ 启动、数据库迁移等常规运行日志,按 `log.level` 过滤(默认 `info`);
|
||
- `interceptions\`(拦截类):我们主动拦下的报错 + 服务端异常(5xx),**固定按 debug 采集,不受 `log.level` 影响**。
|
||
|
||
不会写满:文件名按天(`interceptions-20260911.log`),同一天写满一个文件后续写 `.1`、`.2`…;每类保留份数**含当前文件**,超出自动删最旧的。单文件上限与保留份数由 `config.yaml` 的 `log.maxSizeMB`(默认 20 MB)、`log.keepFiles`(默认 10)决定,两类合计最多约 `2 × keepFiles × maxSizeMB`(默认约 400 MB);目录可用 `log.dir` 改(留空 = `<数据目录>\logs`)。日志目录不可写时,服务端只告警一次并降级为只写控制台,不影响业务。
|
||
|
||
别和 Console 自己的 `logs\console.log`(在安装目录里)混淆:那个装的是 Console 与服务端的控制台输出;服务端日志文件在数据目录。
|
||
|
||
**Q75:为什么我明明填了成绩,那一行还是被当成「还没录」?**
|
||
最可能是把格子里的**灰字示例文本**当成了已填内容。过去成绩格的示例是 `1:06.33`,没有样式区分,看起来就像已经填好;现在示例统一带「例」字(时间 `例 1:06.33`、距离 `例 12.34`、计数 `例 12`、得分 `例 96.5`,备注格是 `可留空`),并且是**更淡的斜体灰字**,和真实输入明显不一样。灰字不会被提交,那一格仍然是空的。
|
||
|
||
那空着会不会发不出去?**不会**。空格子在防呆校验里只是**提醒**,文案是 `第 3 行 张三:还没录成绩(当前「(空)」),本次发布不计入这一行`,**不挡发布**;点发布会只发已填的行,其余保持未发布,补录后再发一次即可(见 Q77)。真正挡发布的只有写错:`秒位不能 ≥ 60(当前「1:70」)…` 或 `成绩写法无法识别(当前「约1分06秒」)…`(见 Q76)。
|
||
|
||
**Q76:成绩能怎么填?**
|
||
按项目单位填(工具栏会显示当前单位:秒 / 米 / 次 / 分):
|
||
|
||
- **时间类(秒)**:`66`、`66.33`、`1:06`、`1:06.33`、`1:6`、`1分06秒`、`1分6秒`、`1分06`、`1小时2分3秒` 都认;中文输入法下的**全角冒号 `1:06` 与全角数字**也认;
|
||
- **距离 / 计数 / 得分类**:按提示填数字,例如米 `12.34`、次 `12`、分 `96.5`;无法识别时的提示会换成对应的数字说明,不会拿时间格式去教距离项目;
|
||
- **秒位 ≥ 60 会被拒**(`1:70` 不是 70 秒),但原因写明:`秒位不能 ≥ 60(当前「1:70」),请写成 1:06 或 66 这类`;
|
||
- 成绩格已经加宽,四位数也能看全。
|
||
|
||
有未保存的成绩时,切到别的菜单页面会先弹确认框,不会静默丢弃。
|
||
|
||
**Q77:100 米要分好几场跑,必须等所有人跑完才能发布吗?**
|
||
不用。跑道只有 8 条、一个项目分好几场时,**每跑完一批就能先发一批**,没跑到的先空着:
|
||
|
||
1. 这一批跑完,把已出的成绩填上,其他还没跑的行保持空白;
|
||
2. 点「发布」(该组已有发布过的成绩、还有没发的已填行时,按钮显示为「**发布本批**」);
|
||
3. 确认框会写明 `本组还有 N 人没有成绩,本次将发布已填的 M 人;其余保持未发布,补录后再发布即可`——确认后系统只发布已填的 M 人,**不会把没成绩的人当成 0 分发出去**;
|
||
4. 这批成绩立即上屏,名次与积分先按已发布的这部分算;
|
||
5. 下一批跑完补录后,再点一次「发布本批」,系统会把两批放在一起**自动重算**名次与积分。
|
||
|
||
防呆校验里的「还没录成绩」只是提醒,**不挡发布**;只有写错(秒位 ≥ 60、写法无法识别)或手动名次项目缺名次才挡(见 Q75、Q76)。审核页的「发布整组」也是同一套口径。
|
||
|
||
**Q78:为什么有的成绩还没录就发布成功了?会不会发漏?**
|
||
不会发漏,也不会算错:分批发布**只发布已经填了成绩的那部分**,没录的行本次**跳过**、保持未发布状态,确认框和发布后的提示都会写明「本次发布 M 人;其余 N 人保持未发布,补录后再次发布即可」。
|
||
|
||
要留意的是「跳过」不等于「算 0 分」——没成绩的人这一批根本不参与排名,不会占名次也不会拉低别人。等下一批补录后再发布一次,系统会把两批合起来重算;先前发布的那部分名次与积分会跟着一起更新。所以只要最后把所有人补录并发布完整,结果与一次性发布是一致的。
|
||
|
||
**Q79:大屏上的「实时赛况」显示的是哪个项目?**
|
||
按三条依据**依次**判定,先满足的优先:
|
||
|
||
1. **人工指定**:管理端「大屏控制 → 实时赛况」卡片里指定的项目(最多 2 个);
|
||
2. **排期命中**:小项的排期时间落在当前时间**前后 30 分钟内**;
|
||
3. **最近发布过成绩的项目**:以上都没有时,显示最近一次发布过成绩的项目——所以**下一场开始之前,这一页会一直保持显示上一场**。
|
||
|
||
当前实际显示哪个项目、为什么选中,可以在卡片里的「当前生效」一行看到,格式如 `男子 100 米(排期命中)`;没有可显示的项目时显示「当前没有可显示的项目」。选「人工指定」模式时只认第 1 条,不做任何回退。该页只显示**已发布**的成绩,所以配合分批发布,发一批它就更新一批。
|
||
|
||
**Q80:两个项目同时进行,实时赛况页怎么显示?**
|
||
会**自动左右分栏**,每个项目一栏,最多 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 宽的窄屏,桌面端布局不受影响。
|
||
|
||
**Q86:号码布和证件号,哪个才是系统认人的依据?**
|
||
**证件号。** 报名导入时的匹配顺序是「证件号 → 号码布 → 姓名 + 单位」:先按证件号认人;证件号为空、或库里的档案还没登记证件号时按号码布认;两者都没命中才按「姓名 + 单位」找,并把表里给的证件号 / 号码布**回填**进档案。系统里**一个证件号只能属于一个人**,撞上别人的证件号会按证件号认到那个人并进「冲突」列表(见 Q48)。号码布不再单独充当唯一标识,但仍然**不能给两个人共用**(同一个人报多个组别可以重复)。完整匹配规则见[报名名单导入规范](./报名名单导入规范.md)。
|
||
|
||
**Q87:怎么把报名名单导出来?**
|
||
到「导出 → 结果导出」页,往下找**「报名名单」**卡片:先按**小项 / 组别 / 单位 / 批次**筛选(都可以留空 = 不筛,即导全部),再点「导出报名名单」,得到 `报名名单.xlsx`。表里有 13 列:小项编码、小项名、组别、单位编码、单位名、姓名、证件号、号码布、批次、性别、年龄、状态(中文:正常参赛 / 已退赛 / 取消资格 / 未出场)、备注;号码布按文本导出,前导零不会丢。访客也能导出(只读)。
|
||
|
||
> 这份是**给人看的报表,不能导回去**。同一张卡片下面还有「**导出(汇总·导入格式)**」「**导出(分小项·导入格式)**」两个按钮,导出的 13 列与报名导入模板逐列一致、可以直接重新导入(见 Q104)。
|
||
|
||
**Q88:基础数据(单位 / 大项 / 小项 / 组别)能批量导入导出吗?**
|
||
能。到「导出 → 基础数据」页:
|
||
|
||
- **导出**:一个工作簿四张工作表(单位 / 大项 / 小项 / 组别,组别表带所属小项编码);
|
||
- **导入**(**仅管理员**,只认 `.xlsx`):按编码匹配,**存在就更新、不存在就新建,绝不删除**(表里没有的行不会被删、也不会被停用)。先点「预览差异」看「新增 / 更新 / 无变化 / 错误」与逐行变化,确认后再点「**确认写入**」;**有错的行会跳过、合法的行照常写入**,行级错误是中文并带真实 Excel 行号(如 `单位 第 3 行:单位编码必填`)。已「彻底删除」的单位不在导出件里,命中它的编码那一行会**整行跳过并报错**(不更新它的任何字段、也不会把它恢复出来,想让单位回来先用「参赛单位」页的「恢复」,见 Q62)。
|
||
|
||
要点:**列不在表里 = 不动该字段**(**布尔列也一样**,缺整列 ≠ 取默认值);**列在表里但格子空**:文本列与年龄上下限清空,权重按 1、布尔列(启用 / 计分等)按「是」,**排序留空保持原值**(**四张表口径一致**,单位 / 大项留空同样不会被改写)。**只有枚举列例外:列在表里但格子空 = 不改动**(小项的类型 / 结果模式 / 结果类型 / 比较 / 状态 / 平均口径、组别的性别),留空就沿用原来的值,只有**新建的行**才用默认值(新建组别时性别留空 = 不限)——这样误清一格不会把已发布小项打回「待录入」、也不会把「团体」改成「个人」。表头行在第 4 行(导出件)或第 1 行(手工表)都能识别;枚举列要填英文规范值、布尔列填「是 / 否」。**最稳的做法是从系统导出、改完再导回**。详见使用手册 11.4。
|
||
|
||
**Q89:登录会不会用着用着被踢下线?「登录有效期」怎么设?**
|
||
默认有效期 **24 小时**,管理员可在「系统设置 → 登录有效期」里改成 **1–720 小时**(最长 30 天);比赛期间建议设成 **72 小时**。会话是**滑动续期**的:只要在有效期内继续操作(页面开着也会定期自动续期),到期时间就往后顺延——**不会因为「登录满 N 小时」被踢**。当前到期时间在右上角用户菜单与系统设置页都写着「当前会话将于 X 过期」。
|
||
|
||
⚠️ 但它不是「永不掉线」:超过设定的有效期一直没操作(浏览器关掉、机器关机过夜),再打开仍要重新登录。改设置不会把正在用的会话当场踢下线:已登录会话的到期时间不会在改设置的一刻改变,它会在**下一次操作时按新的有效期续期**(调长立即顺延,例如 12 小时改 72 小时后,正在用的会话下次有请求就顺延成 72 小时;调短也只影响之后的续期)。
|
||
|
||
**Q90:发布后成绩上屏了,为什么积分榜没变、名次还是「—」?**
|
||
多半是管理员把「榜单口径」里的**「分批发布时实时更新榜单」关掉了**(默认是开的),也就是**延迟结算**:分批发布时只把成绩上屏,**积分与名次等该项目该组所有批次都录完才一次性结算**(报名状态不是「正常参赛」的人——退赛 / 取消资格 / 未出场——不算在等待里)。未结算组的**名次显示 `—`**(成绩照常显示)是有意的,免得出现「有金牌但 0 分」这种自相矛盾的画面。导出的「分项成绩表」「全部」「全部(单页)」对这类行也是**名次与积分列写 `—`、状态列写「未结算」**(成绩照常打印),见使用手册 11.1。
|
||
|
||
想让榜单立刻跟上:等该组录完会自动结算;确实有人永远录不出成绩时,在**成绩录入页**点 **「立即结算」**,按当前已发布成绩先结算一次。想改回实时结算:管理员到「基础数据 → 积分模板 → 榜单口径」,把「分批发布时实时更新榜单」勾上并点「保存结算方式」(见使用手册 10.5)。
|
||
|
||
**Q91:能不能一次把多个人退赛 / 恢复 / 移出报名?**
|
||
能,在「成绩录入」页操作:表格每行最左边勾选(表头是全选,**只作用于当前筛选范围**),选中后工具栏出现 **批量退赛** / **批量恢复** / **批量移出报名**。
|
||
|
||
- **批量退赛**:标记弃权(0 分、不占名次),**随时可以批量恢复**;已经是「取消资格 / 未出场」的行会被跳过、不覆盖原判定;
|
||
- **批量移出报名**:**物理删除**报名项连同他的成绩与积分流水,**不可恢复**,确认框会列出将被删的人与将重算的小项 / 组别;
|
||
- **移出后想加回来**:还在「成绩录入」页,点工具栏右侧的 **「补报名」**——打开的是「基础数据 → 报名导入」里的同一套勾选界面,并预选当前小项与组别,勾完点「加入报名」本组名单立刻刷新(见使用手册 4.8 / 10.7)。**退赛**的人不用走这条路:直接「批量恢复」即可。
|
||
- 一次最多 500 条;有未保存的成绩修改时请先「存草稿」再操作。
|
||
- 这三个动作(以及**撤销发布**、**作废单条成绩**、**改积分模板 / 组别权重 / 计分通道**)都**立即重算并推榜**,**不受「分批发布时实时更新榜单」这个延迟结算开关影响**——它们改的是「谁还算数」「按什么规则算」,不是「录了多少」,留着旧分就会变成「榜上还有分、成绩却撤了」。延迟结算只作用于**发布成绩**这一步(见 Q90)。
|
||
|
||
运动员列表也有类似的多选与**批量停用 / 批量彻底删除**(见使用手册 10.6)。
|
||
|
||
**Q92:新建单位 / 大项 / 小项时没填「启用」「计分」这类开关,会不会被静默关掉?**
|
||
不会。**漏传这些开关时会取默认值,而不是按「关」处理**:
|
||
|
||
- **单位 / 大项**:漏传「启用」= **默认启用**(以前会静默建成「停用」,在界面上等于不存在);**更新**时漏传则沿用原来的状态,不会顺手把它停掉;
|
||
- **小项**:漏传「计分」「计破纪录」= **两个都默认打开**(以前会被静默建成「只排名不计分、不能破纪录」);更新时漏传同样沿用原值。
|
||
|
||
用**基础数据包**导入时同理:「启用 / 计分 / 计破纪录」列留空 = 「是」,这些列**不在表里 = 不改动**该字段(见 Q88)。
|
||
|
||
**Q93:换了大屏背景图 / 单位 logo 之后,旧图片还占着地方,能删掉吗?**
|
||
能,管理员到「**系统设置 → 图片资源**」页签清理:那里列出 `uploads\` 里**没有被任何配置引用**的图片(孤儿),可以单张「删除」或勾选后「删除选中」,删除前有危险确认框、**删掉不可恢复**。
|
||
|
||
「被引用」指被下面四处任意一处用着——**赛事会标 / 大屏会标 / 大屏背景图 / 任一参赛单位的单位图标**(**已被「彻底删除」的单位也算**,因为它还能恢复,logo 得留着)。所以想清掉一张旧图,正确顺序是:
|
||
|
||
1. 先在「赛事信息」(或参赛单位)里把那个字段换成新图、或清空,并**保存**——这一步做完旧图才「没人引用」;
|
||
2. 再回「图片资源」页签点「刷新」,旧图就会出现在孤儿列表里;
|
||
3. 核对预览后删除。若某张图在你打开页面之后刚被配到别处,服务端会**拒删并说明被谁引用**(宁可漏删、不误删)。
|
||
|
||
注意:这个页签**只管图片**,上传的字体在「赛事信息 → 字体库」里各自删除(被标题 / 正文字体引用的不能删);这些图片和字体都是文件,**备份的 `.db` 快照和「一键恢复」都不含它们**(见 Q37),要清点或搬迁请到 `data\event_projs\<项目名>\uploads\`。
|
||
|
||
**Q94:奖牌榜上一个牌都没有,或者金牌数不对,怎么查?**
|
||
按下面顺序一项项排除(都不需要改数据,改完保存会自动重算榜单):
|
||
|
||
1. **是不是刚升级完、第一次启动**?→ 见 Q96,那是升级后的正常现象,服务端会自己补齐;
|
||
2. **该小项关了「该项启用奖牌结算」吗**?到「基础数据 → 大项 / 小项」编辑这个小项,看「选项」里的**「该项启用奖牌结算」**有没有被取消勾选——取消后这个小项**只出积分、不发奖牌**(见使用手册 10.2);
|
||
3. **该小项的通道关了「发奖牌」吗**?到「基础数据 → 计分通道」选中该小项,看「奖牌通道」列里这条通道的**「发奖牌」**有没有被取消——取消后这条通道的名次只出积分、不发牌(见使用手册 10.4);关掉的通道在「大项 / 小项」页的通道摘要里会标出 `不发奖牌`;
|
||
4. **个人项目的牌子是不是被排除在单位金牌榜之外**?同一列的**「个人奖牌并入单位金牌榜」**被取消时,这些个人奖牌仍进**个人积分榜**的奖牌列,但**不进单位金牌榜**——所以「某单位的金牌数比现场数的少」多半是这一条;
|
||
5. **这个小项本身计分吗**?标记为「不计分」(只排名不计分)的小项**从来不发奖牌**,这是它本来的口径,不用去动上面那些开关;
|
||
6. **名次是不是还没结算**?如果管理员开了**延迟结算**(Q90),未结算的组名次显示 `—`,自然也没有奖牌;等该组录完,或在录入页点「立即结算」;
|
||
7. **奖牌只发给前三名**,而且**并列第 1 各记 1 金、不发银牌**(名次顺延口径,见 Q10)——「牌数比名次人数少」通常就是这个原因;
|
||
8. 还有一条**全局开关**在规则包里(`standings.medalCountsTeamEvents`,默认**计入**团体项目的奖牌),界面上没有勾选框;本赛会的规则包是「计入」,一般不需要动。只有导入过别的规则包时才会把它改掉,检查办法见 Q47。
|
||
|
||
**Q95:团体名次在哪里录?为什么有时候录入页没有那一块?**
|
||
团体名次在**「成绩录入」页**录:选中项目与组别后,成绩表格下面会有一块 **「团体名次」** 卡片,按**单位**一行一个输入框,填完点「保存团体名次」。**留空就清空该单位的名次**;名次重复允许并列(会提示确认,不挡保存);**个人名次不受影响**——它是另一套数据,每个人的名次仍然在成绩列表里录。
|
||
|
||
**录入页没有这一块是正常的**,说明这个项目**没有配「团体名次 + 手动名次」的计分通道**。常见情况:
|
||
|
||
- 纯团体项目(篮球、拔河等):团体名次就是那条**团体报名行上的名次**,仍在成绩列表里照常录,不需要这块卡片;
|
||
- 「个人+团体」项目:团体名次是**按队内成绩平均**算出来的,也不在这里录;
|
||
- 真的需要按单位手填名次(例如「团体引体向上」):到「基础数据 → 计分通道」给这个小项加一条**名次范围 = 团体名次、名次来源 = 手动名次**的通道并「保存全部」,回录入页就会出现这块卡片。
|
||
|
||
完整说明见使用手册 4.9。
|
||
|
||
**Q96:升级到新版本后,奖牌榜是空的(全是 0),怎么办?**
|
||
这是升级后的**正常现象,会自己好**。原因:本版把奖牌统计的数据来源换成了一张新的「通道名次」表,而升级脚本只**建表、不回填**历史名次——所以升级完成到第一次重算之间,奖牌榜会短暂是 0。
|
||
|
||
服务端**下一次启动时**会自动做一次全量重算把名次补齐(重算在对外提供服务之前跑完,所以大屏不会先亮出一帧全 0)。在 Console「运行日志」或 `logs\operations\` 当天文件里能看到这两行,**是正常的,不是报错**:
|
||
|
||
```
|
||
检测到通道名次为空但已有已发布成绩,正在执行一次性全量重算
|
||
一次性全量重算完成,通道名次与奖牌榜已补齐(events=… ledgerRows=… elapsed=…)
|
||
```
|
||
|
||
- 通常**几秒内**跑完(数据量大时稍久,日志里会写耗时);跑完后刷新管理端/大屏即可看到奖牌;
|
||
- 它**只在需要时跑一次**:表里已经有名次(说明重算过)时不会再触发;
|
||
- 如果看到的是 `通道名次自愈失败,奖牌榜可能仍为空`,那不是"坏了"而是重算没做完:**随便发布一次成绩**、或**重新导入一次规则包**都会触发重算,重算完奖牌就回来了;
|
||
- 想立刻确认数据没问题,也可以手动**重新导入一次规则包**(会全量重算)。
|
||
|
||
**Q97(已知限制):双计项目回看历史版本时,积分跟当时现场对不上?**
|
||
有这种可能,属于**已知限制,不影响当前榜单**。
|
||
|
||
- **哪些项目**:配了「团体名次 + 手动名次」通道的项目(也就是录入页会出现「团体名次」卡片的那类,例如「团体引体向上」);
|
||
- **什么现象**:在「变更历史」里展开某个历史版本时,页面会按**那一版保存下来的成绩**重新算一遍各单位分数。而**按单位录入的「团体名次」不在历史版本快照里**,所以回看时这些组别的团体分算不出来,各单位的分数增减可能与当时现场看到的略有差异;
|
||
- **不影响什么**:**当前榜单、大屏、导出全部是对的**(它们读的是库里现存的团体名次,与历史快照无关);只有「历史版本详情」里那一列**分数增减**(以及它影响的单位数)会因此偏小或对不上;
|
||
- 想核对当时的真实分数,以**当时的导出件**(成绩总表 / 单位积分明细)为准。
|
||
|
||
**Q98:成绩填错了怎么改?**
|
||
|
||
先看是**只错一条**还是**整组都要改**——两条路的影响面完全不同:
|
||
|
||
**① 只错一条(最常见)**:到「成绩录入」找到那一行,**点成绩格(或点状态格),也可以点最右端「操作」列的「修改本条」**:
|
||
|
||
1. 点下去会弹出确认框,写明「这一条会退回草稿、榜单先把它退下来、改完需重新发布本组」,并要你填 **「修改原因」**(必填,留空点了不提交)——**点「取消」则什么都不做**(成绩、榜单、大屏都不动);
|
||
2. 确认后这一条退回草稿,名次与积分先按「没有这条成绩」重算,**大屏立即更新**;原来填的成绩还在格里,直接改就行;
|
||
3. 把成绩改对,再点页头的 **「发布」**(该组还有别的已发布成绩时显示为「发布本批」,见 Q77)。同组别人的成绩一直在榜上,不会被翻下来。
|
||
|
||
**② 这一条根本不该算**(成绩无效、重复录入等):同一行点 **「作废本条」**,填 **「作废原因」**(必填)→ 确认。这一条不再计入名次与积分,同组其它人重新排名、**大屏立即更新**;成绩文字还留在格里,录入列变成红徽标「已作废」,状态格变成「退赛」。以后要让它重新算数,用同一行的 **「重新录入」** 退回草稿改完再发布。**只是填错了要用 ① 的「修改」,不要用「作废」**——「作废」会在榜上留下一条作废痕迹。
|
||
|
||
**③ 整组都要改**(例如整组被判罚、名次口径整体调整):点「撤销发布」→ 修改 → 重新发布(见 Q8)。它会把该组已产生的积分流水整体作废再重发,大屏先回退一次。
|
||
|
||
三个入口的细节:
|
||
|
||
- **已发布的行仍然锁着**(名次、备注改不了),但**成绩格与状态格点得动**:点一下只弹出与「修改本条」同一个确认框,不确认就什么都不会发生——这是有意的,已发布就意味着已经上屏、已经计分,**绝不能「点一下成绩就悄悄从榜上退下去」**;要改必须先明确地把它退回来,所以给了「修改本条 / 作废本条」这一对按钮,而不是直接解锁;
|
||
- **「修改」与「作废」的区别**:**修改**是「这一条填错了,退回草稿改一改再发」,不会把这一条标成「已作废」;**作废**是「这一条不算了」,成绩留在表里但不再计分。改错字用「修改」,别用「作废」;
|
||
- 修改 / 作废 / 退回都**立即重算并推大屏**,**不受「分批发布时实时更新榜单」这个延迟结算开关影响**(它们改的是「这条成绩算不算数」,不是「录了多少」);
|
||
- 三者都会**留痕**:审计日志(见使用手册第 13 节)里的动作分别是 `result.reopen`(修改 / 重新录入)与 `result.void`(作废),含操作人、时间与填写的原因。「变更历史」记的是**发布 / 撤销发布**这类整组版本,单条的修改 / 作废 / 退回不会在那里新增一个节点;
|
||
- 有个前提:点之前先把未保存的编辑「存草稿」——修改 / 作废 / 退回会重算并整表刷新,页面会拦下并提示。
|
||
|
||
**Q99:误批准了破纪录怎么办?**
|
||
|
||
到「破纪录」页,下面有 **「已批准的破纪录」** 卡片(需要**录入员及以上**才能看),找到那一条,点右端的 **「作废」**:
|
||
|
||
1. 确认框会写清后果并给一个 **「作废原因」** 输入框(必填);
|
||
2. 确认后服务端在同一件事里做完三样:**撤回该笔加分**、**重算并推榜**(榜单回退)、**把该级别的当前纪录恢复为上一条**;
|
||
3. 完成提示「加分已撤回,该级别纪录已恢复上一条」。
|
||
|
||
注意两点:
|
||
|
||
- 如果**该级别本来就没有更早的纪录**,撤下后就留空——「无纪录」是事实,不会留一条刚被作废的纪录充数;
|
||
- **撤回的是「加分」**:这条成绩本身的积分(名次分)不受影响,它当初是按正常成绩算的。
|
||
|
||
顺带纠正一个旧说法:点「拒绝」现在**不是**只在本机隐藏了——系统会在服务端**先登记一条破纪录记录、再立即驳回**(原因固定写「现场判定不是破纪录」),所以**刷新后不会再出现**,谁在什么时候否掉了哪一条也能在审计日志里查到。只有示例数据模式 / 服务端连不上时才退回本机隐藏,并会如实提示「刷新页面后该条会重新出现」。
|
||
|
||
> 升级提醒:**升级前在本机「拒绝」过的疑似破纪录,升级后刷新会重新出现一次**——那次拒绝没有写到服务端,重新点一次「拒绝」即可。
|
||
|
||
**Q100:历史纪录怎么录?**
|
||
|
||
到「破纪录」页的 **「纪录库」** 卡片,点卡片头部的 **「新增历史纪录」**:
|
||
|
||
1. 选 **小项**(必选)与 **级别**(赛会 / 市级 / 省级 / 全国,默认赛会);
|
||
2. 填 **成绩值**(数字)与 / 或 **成绩文本**(如 `11.20`、`1:06.33`)——**至少填一个**,都填时比较与破纪录判断以成绩值为准;
|
||
3. 可选填 **保持人姓名**、**保持单位**、**创造日期**(都可以留空,老资料常常只有一部分,留空不会逼你编数据);
|
||
4. 点「保存纪录」,提示「已新增历史纪录 · 来源记为「历史」」。
|
||
|
||
新录的这条会成为该小项该级别的**当前纪录**,原来那条自动变成非当前(仍留在库里)。纪录库的 **「来源」列**因此有了两种值:**历史** = 赛前手工登记的旧资料,**本届** = 本场赛事批准破纪录时自动写入的(以前没有历史录入入口,实际只会看到「本届」)。
|
||
|
||
**删除**:每行右端有「删除」(需**录入员及以上**)。确认框会说明「若它是当前纪录,会恢复上一条」,并注明「删除只影响纪录库,不会改动任何已发布的成绩与积分」;删除不会触发重算。
|
||
|
||
**Q101:大屏控制页显示「未检测到局域网地址」怎么办?**
|
||
|
||
先说结论:这多半不是故障,而是主机此刻没有「别的设备能连上」的地址被系统枚举出来。按下面顺序排查:
|
||
|
||
1. **先看卡片列出的「已检查」原因**:新版空态会逐条列出检查过的网卡与各自被跳过的原因,例如「没找到可用的局域网地址。已检查:以太网(接口未连接)、WLAN(只有 IPv6 地址)。」——原因有「**接口未连接**」「**只有 IPv6 地址**」「**接口没有地址**」「**回环接口**」四种;最多列 5 条,网卡更多时其余折叠成「**等共 N 块网卡**」。照着原因去修那一张网卡(插好网线 / 给它一个 IPv4 地址 / 看看 DHCP)。如果看到的仍是旧句「未检测到局域网地址(可能是没插网线 / 只有回环)。」,说明这台机器上的前后端还没更新到最新版,按下面几步照样能排查;
|
||
2. **`ipconfig` 确认有没有 IPv4 地址**:在 cmd / PowerShell 里跑 `ipconfig`。注意 **Windows 里「网线插着、网卡显示 Up」不等于拿到了 IP**;如果只看到 `169.254.x.x`,说明**本网段没有 DHCP**,地址是设备自配的——这在**独立小网络**(没有路由器、设备直连或只接一台交换机)里是**正常用法,不是故障**,同网段的平板 / 手机照样能访问;
|
||
3. **手动添加地址**:自动检测不到、或者列出来的不是你要的那个网段时,把 `ipconfig` 里那条 IPv4 地址填进卡片下方的「手动添加地址」再点「添加」——立刻出链接和二维码(排第一条、带「手动」徽标、刷新不丢,最多 10 个);
|
||
4. **放行防火墙入站 19540**:地址对了、别的设备还是打不开,多半是主机防火墙挡了。装的时候选的是**「为所有用户安装」**的话,安装程序提权时**已经自动放行**(防火墙里能看到规则 `Scoreboard Console (TCP 19540)`),不用再手工加;选「仅为我安装」的机器要手工放行——在**管理员** cmd 里执行 `netsh advfirewall firewall add rule name="Scoreboard 19540" dir=in action=allow protocol=TCP localport=19540`(改过端口就换成实际端口;也可以改用「为所有用户安装」重跑一次安装程序让它自动放行,但自动放行只认默认端口 19540);临时关闭防火墙只用于**验证**是不是它挡的,验证完要恢复;
|
||
5. **还不行就跑自检**:运行 `debug\诊断\局域网地址自检.exe`,把它的输出发回给我们。
|
||
|
||
**Q102:我改了小项的显示名称,回到录入页发现「撤销发布」按钮不见了?**
|
||
|
||
**先说结论:不是改名弄坏的。** 改名那条路一直是干净的:录入页加载报名名单、读成绩、算分,**全都按小项的编号(ID)关联,不看名字**。
|
||
|
||
**真正的原因是「回到录入页时被切到了另一个小项」**:进入「成绩录入」页时,系统**不记得你上次录的是哪个小项**,兜底挑**第一个「待录入」的小项**;而**刚发布完的小项状态已经是「已发布」**,正好被这条兜底排除——所以你离开一趟(例如去基础数据改个名字)再回来,右侧看的是**另一个小项**;而「撤销发布」按钮是**按当前这张表里有没有已发布的行**显示的,换到那个还没发过的小项上,按钮自然就不在。
|
||
|
||
所以现场看到的那几条**本来不矛盾,它们说的是两个不同的小项**:
|
||
|
||
| 你看到的 | 说的是哪个小项 |
|
||
| --- | --- |
|
||
| 左栏那个小项仍写着「已发布」 | 你**原来**录的那个(左栏是项目列表,全部小项都在,不会因为你切走而变) |
|
||
| 单位成绩仍有加分 / 榜上还有分 | 还是**原来**那个——分没丢,也没被撤 |
|
||
| 「撤销发布」按钮不见了 | **右侧表里现在显示的那个**——是另一个还没发布过的小项 |
|
||
|
||
**怎么办**:从 `dev_0.5.12` 起,录入页会**记住你上次录的那个小项**,离开再回来还是它,按钮就在。想确认自己看的是哪个小项,看**右侧表格上方选中的那个小项名**、以及表里的人是不是你刚才那一组;也可以从仪表盘「当前赛程」点那一项的 **「录入」** 直接进到指定小项。记忆失效时(那个小项被删了、或浏览器不允许存本机数据,例如隐私模式)会**自动退回原来的默认挑法**,不影响使用。详见使用手册 4.1 / 4.7。
|
||
|
||
**Q103:大屏上的分数为什么过一会儿才变?有时候干脆一直不变?**
|
||
|
||
**先说结论:分早就变了,卡住的只是屏幕上那一格数字的画法。**
|
||
|
||
服务端在你点下确认的那一刻就把分算完并写库了——**积分榜接口、导出件、别的电脑上打开同一个榜单,看到的都是新值**。大屏上「**单位总分**」那一格是**逐帧滚动**过去的,而浏览器对**被别的窗口完全盖住的窗口**会**停掉逐帧绘制**,于是数字停在旧值上,**卡多久 = 被盖住多久**。
|
||
|
||
**怎么一眼认出来**:把盖住大屏的那个窗口挪开(或者按一下 Alt+Tab)——数字会**「啪」地一下跳到新值**,而不是慢慢滚过去。
|
||
|
||
**为什么只有这一格**:全场只有「单位总分」是**滚动显示**的,**单位奖牌榜、分项成绩、实时赛况里的数字都是直接写上去的**,所以它们一直是立刻变的。
|
||
|
||
**怎么办**:
|
||
|
||
- 从 `dev_0.5.13` 起已经修好:就算一帧都画不出来,**最迟约 1.3 秒**也会直接落到新值;大屏窗口**重新露出来 / 被点活**时立刻是正确值,不会再补滚一遍过时动画;
|
||
- 日常使用上:**别用别的窗口把大屏盖住**(尤其别把管理面板拖到接大屏的那块显示器上);大屏那块屏播放中**不要切走输入源或关屏**,那也会让它判定为「看不见」而停止绘制;
|
||
- 升级前的旧版本遇到这个现象时,**挪一下盖在它上面的窗口**即可立刻恢复显示,**不需要重新发布成绩、也不需要重算**。详见《升级说明》的 `dev_0.5.13` 一节。
|
||
|
||
> 顺带分清另一件事:「**撤销发布**」**保留**成绩内容(只把分收回来,改完重新发布即可);要**连成绩内容一起清掉**,那是工具栏上另一对按钮「**清空本组 / 清空本批**」(危险操作,要勾选确认,清整组时还会一并清掉按单位录的团体名次)。两者的对照见使用手册 4.7。
|
||
|
||
**Q104:导出的报名名单为什么和导入模板不一样?能不能直接导回去?**
|
||
|
||
**先说结论:以前导出的那份不能,现在报名名单卡片里多了两个能导回去的按钮——挑对按钮就行。**
|
||
|
||
原来「导出报名名单」导出的是一张**给人看的报表**:额外有小项名称、单位名称与备注三列,**姓名列拼了队员**、状态写「已退赛」、单位名后面还拼着队名。**导入器不认这份表**(列对不上,状态那个写法也不认),拿它去「基础数据 → 报名导入」重导会被拦下——所以那份只能看、不能导回去。
|
||
|
||
现在同一个**报名名单卡片**里多了一组「**导入格式**」导出,与「基础数据 → 报名导入」里下载的模板**逐列一致**,可以直接导回去:
|
||
|
||
| 按钮 | 导出来是什么 | 文件名 |
|
||
| --- | --- | --- |
|
||
| 导出(汇总·导入格式) | 13 列汇总在**一张工作表**里 | `报名名单(导入格式).xlsx` |
|
||
| 导出(分小项·导入格式) | 13 列,按「小项名称@组别名称」**分成多张工作表** | `报名名单(导入格式·分小项).xlsx` |
|
||
|
||
- 13 列是:项目编码 / 组别 / 单位编码 / 姓名 / 证件号 / 性别 / 年龄 / 号码布 / 种子 / 批次 / 状态 / 队员名单 / 队伍(顺序就是这个,没有小项名称 / 单位名称 / 备注那三列);
|
||
- **团体报名的「姓名」列是空的**、队员写在「队员名单」列(「姓名」列填了就会被当成个人报名);「**队伍**」是**独立的一列**(报表件里是拼在单位名后面的);「状态」写的是导入器认的四个中文说法:`正常参赛` / `退赛` / `取消资格` / `未出场`;
|
||
- 筛选与权限跟报表一样:小项 / 组别 / 单位 / 批次都可留空(留空 = 不筛),**访客也能导**;
|
||
- 上方的**表头语言**(中文表头 / 英文表头)**只管这两个导出**,改它不会动上面那份报表(界面上写明了);
|
||
- **往返已经测过**:这两种导出件原样喂回导入接口,零错误、行数一致、13 列逐项一致,**团体行不会被变成个人报名**(队员关联还在)。想自己验一遍:导出 → **一个字都不改** → 在「基础数据 → 报名导入」原样上传,结果应当是「新增 0 / 更新 N / 错误 0」。
|
||
|
||
**重导前要知道的三条限制**(它不是"完全无损"):
|
||
|
||
1. **号码布可能进冲突面板**:导出件写的是**报名上登记的号码布**,导入时对个人行会拿它跟**运动员档案里的号码布**比;两边都非空且不同,这一行就进「冲突」列表等你逐条决定(库里两者一致是常态,那时是静默幂等);
|
||
2. **联队的份额会变成均分**:13 列里联队只能写 `A+B`,重导回去是**各 50%**;当初设成 `2:1` 这种非均分的会变均分——表格本身表达不了,要保权重只能在界面上改;
|
||
3. **「队员名单」只增不减**:导出时会把界面上后来补进这支队的队员一并补上,所以重导后这支队的队员**不会少**,但个别名单的**顺序 / 写法**可能与最初上传的那张表不完全一样。
|
||
|
||
**一句话**:给人看的用「导出报名名单」;**要拿回去重导,用「导出(汇总·导入格式)」或「导出(分小项·导入格式)」**,导出的文件**不要改表头、不要插删列**。详见[使用手册 §11.1](./使用手册.md)与[报名名单导入规范 · 第九节](./报名名单导入规范.md#九导出的名单怎么导回去)。
|
||
|
||
**Q105:大屏上某个团体项目的名次显示 `-`,是不是没算出来?**
|
||
|
||
**先说结论:名次早就算出来了——导出件与积分明细里一直是对的,以前只是大屏那一处没读它。新版起来刷新一下大屏就有了,不用重发、不用重算。**
|
||
|
||
以前会这样的原因:纯团体项目的名次(例如团体 4×100 接力的单位名次)只写在**发布时算出来的那份名次(通道名次)**上;而成绩行上的「个人名次」这一列是**有意收窄的**——它只记个人名次,**对团体主体一直是空的**。大屏原来只读「个人名次」、没有兜底,于是团体行画出来就是一个 `-`;导出件与积分明细下钻**早就带了兜底**,所以当时是「导出的文件有名次、屏幕上没有」。录入页也一直看得见名次。
|
||
|
||
现在大屏的两个读者(分项成绩 / 底栏「最新完成项目」,以及实时赛况)都改成 **「个人名次」优先、为空时回落到「通道名次」**,**算分与写回一行没动**。
|
||
|
||
- **已经发布过的数据不用重发、不用重算**:新版起来大屏下一次刷新就显示出来;
|
||
- **为什么不干脆让「通道名次」优先**:「**只更新名次**」的发布只写「个人名次」、**不重建通道名次**,通道名次一优先,个人项目在那种发布之后会显示**上一次的旧名次**(见使用手册 4.5 / 5 与《升级说明》`dev_0.5.15` 的 ④);
|
||
- ⚠️ **还有一类项目仍然显示 `-`(已知限制)**:**只在「团体名次」卡片里按单位录了名次、成绩行上一个数都没填**的项目(例如拔河只用卡片录)——那类名次只存在「按单位录入的团体名次」里、**没有对应的成绩行**,大屏上仍然没有名次可画(团体名次本身照常算分,见 Q95)。要上屏就得在成绩行上也有成绩。
|
||
|
||
详见《升级说明》`dev_0.5.15` 的 ①。
|
||
|
||
**Q106:分项成绩页第 3 栏看不到第 1 名、名次看着是跳的,是不是算错了?**
|
||
|
||
**先说结论:没算错,是那一栏被「截断」过。这个毛病跟着栏位走、不跟着项目走——同一批项目放在前两栏就没事,落到第 3 栏就少人。**
|
||
|
||
原因:服务端快照里「最新成绩」的窗口原来是**按行取 20 行**,而屏上是「一组一栏」——窗口的切口**只能落在最旧的那一栏(通常就是第 3 栏)内部**,把那一组里**建号最早的行**(手录项目通常就是第 1 名)挤了出去;剩下能画的行名次自然是跳的。
|
||
|
||
现在窗口改成 **「最近 8 组 × 每组 10 行」**:先按每组最近一次发布时间取**最近 8 组**,再在每组里**按名次保底取前 10 行**。名次的切口不再落在某一栏内部,**第 3 栏从第 1 名开始画**;**底栏那条「最新完成项目」也一起吃这个修复**。
|
||
|
||
- ⚠️ **取舍**:单组**超过 10 行**的部分**不再下发**。前端每栏只画 6 行、「实时赛况」上限也是 10 行,所以三个页面都看不出来;**将来若把每栏的行数上限调到 10 以上,必须同步调这个「每组 10 行」**;
|
||
- 想核对某一组的**完整**名次:看「导出 → 结果」里的分项成绩表,或切到大屏的「实时赛况」页(当前项目下发的是完整名单,本来就不受这个窗口限制)。
|
||
|
||
详见《升级说明》`dev_0.5.15` 的 ②。
|
||
|
||
**Q107:大屏控制页「在线大屏」里的设备名看不懂、两台一样的平板分不出来,能改名吗?**
|
||
|
||
能。列表里每条都有「**改名**」入口(**录入员及以上**可用,与切页同一档)。
|
||
|
||
- 现在显示的是**自动设备标签**,形如 `安卓 13 · Chrome 120 · 1080×2400 @3x · 手机`——写法是 **系统 + 版本 · 浏览器 · 分辨率 · 形态(手机 / 平板 / 桌面)**,取不到的段会自动跳过(例如 `iPadOS 17 · Safari 17 · 2048×2732 @2x · 平板`、`Windows 10 · Edge 120 · 1920×1080 · 桌面`、`安卓 13 · 微信 8 · 1080×2340 @2.75x · 手机`);
|
||
- ⚠️ **自动标签认不出「哪台机器」**:浏览器**没有**读主机名 / 设备名的 API(这是安全边界),所以**拿不到 `XIAOMI-PAD-05` 那种真机名**;两台同型号设备只能靠**手动改名**或**来源 IP** 分辨;
|
||
- **怎么改**:点该行的「改名」→ 就地填一个现场看得懂的名字(例如 `二号楼平板`)→「保存」(`Enter` 也可);旁边的**「清除」**回到自动标签、**「取消」**什么都不改。名字**存在服务端**,**重启服务端与切换赛事项目都不丢**(最长 40 个字符)。显示优先级是 **手动名 → 自动标签 → 那个随机实例 id**(id 降级成小字,排障时还在);鼠标停在设备名上能看到设备标签、**原始 UA**、实例 id、来源 IP、屏号(取不到的整行不出现);
|
||
- **上限 200 条**:满了会**拒绝新增并提示先清理**,不会悄悄顶掉别的设备;
|
||
- 别名跟着**设备**走:设备太久没连、条目被服务端清理之后,**别名仍然留着**,同一台设备再连上来还是那个名字;
|
||
- **以前给某台设备切页后,列表底部会多出一个该设备的离线条目**(根因是翻页会补发一次握手,而浏览器没有稳定 id、服务端每次都新开一条实例),**现在已经修好**:浏览器本机记住自己的实例 id,服务端也做了兜底(同一条连接重复握手复用原实例),升级后不会再出现这种重复条目。
|
||
|
||
顺带一句:「局域网大屏」卡片里**每一条地址**都能出二维码了——第一条是常驻二维码,其余每条点「**二维码**」按钮临时出码(再点一次 / 按 Esc / 点空白处收起,同一时刻只留一个),不用为别的网段再手敲地址。详见《使用手册》第 9 节、《部署指南》7.5。
|
||
|
||
**Q108:大屏上那条「赛事日程」侧边栏怎么开?为什么有一块屏没有?**
|
||
|
||
到管理端「**大屏控制**」页**左列、公告卡下面**那张「**赛事日程**」卡片(**录入员及以上**就能改,与大屏公告同档):
|
||
|
||
- **先加日程**:点「新增一条」,填**时间**(自由文本,`08:30` / `上午` / `待定` 都行,最长 20 字)、**标题**(必填,最长 40 字)、**备注**(可留空,最长 60 字),最多 **40 条**;顺序用**上移 / 下移**调(只有这两个按钮,**不能拖拽**);
|
||
- **再开开关**:把「**侧边栏默认开启**」打开(开 = 所有大屏默认显示;关 = 都不显示),选**位置**(默认右侧)与**宽度**(15–40 %,默认 22 %),点「**保存**」;
|
||
- **保存后就生效,不用刷新大屏**:侧边栏是**叠在当前页之上**的,不改当前页、也不停轮播——所以那块屏本来在轮播就继续轮,锁着就继续锁着。
|
||
|
||
**某一块屏没有,多半是这三件事之一**:
|
||
|
||
1. 卡片下半部分「**每块屏单独设置**」里,那一块屏被设成了「**强制关**」——下拉切回「跟随总开关」再保存即可(切回「跟随总开关」会把那条设置**真的删掉**);
|
||
2. 那块屏**当时没连上**(大屏窗口被关掉过、或网络断过)——它重连 / 刷新后就会带上侧边栏(**配置存在赛事库里**,刷新、重启服务端、切赛事都不丢);还看不到就先点一次管理端的「强制刷新」让它重拉快照;
|
||
3. 「侧边栏默认开启」本来就是关的,而那块屏没有单独的「强制开」。
|
||
|
||
⚠️ 另外两个常见误会:**「当前项」看的是勾选、不是时间**——它就是**第一个没勾「已完成」的条目**;**顺序就是你排的顺序**,系统**不按时间自动排序**(手填的时间是自由文本,`上午` / `待定` 没法可靠解析,所以**不做、也不会做**)。详见《使用手册》9.2 / 17.6。
|
||
|
||
**Q109:侧边栏上为什么看不到全部日程?字会不会太小或太大?**
|
||
|
||
**先说结论:它不是「完整日程公示」,是「围绕现在进行到哪一项」的现场提示。**
|
||
|
||
- 条目**放不下**时,面板会**围绕当前项开窗**:当前项固定在显眼位置、前后各显示若干条,**已完成的与很靠后的条目会滚出视图**(被截住的方向上会写一句「上方 / 下方还有 N 项」)。要**完整公示**日程,请用轮播页或另行打印,别指望这条侧边栏;
|
||
- 想让它一次显示更多条:把**宽度**调大一点(最大 40 %),或**精简标题 / 备注**(长文本会占掉行数)——**最多 40 条**是硬上限,但放不下时**绝不会**把字缩到看不清。
|
||
|
||
**字号**:按文本长度与可用高度**自适应**,且有**硬上下限**——**宁可少显示几行,也不缩到看不清**;长标题最多 3 行、长备注最多 2 行,超出**省略**(按显示宽度算,中文与字母各自计宽);时间与备注比标题小一档(0.8 倍,同样有下限)。**1080p 与 4K 都按屏幕等比缩放**:4K 上字与面板**一起**放大,不会出现「4K 上字特别小」或「字特别大」。
|
||
|
||
**Q110:打开积分明细或推公告的时候,侧边栏不见了,是坏了吗?**
|
||
|
||
没坏,这是**故意的**:
|
||
|
||
- **明细覆盖层**开着期间(「推送到大屏」那块半屏明细);
|
||
- **全屏公告**正在播期间。
|
||
|
||
这两种情况下侧边栏会**自动收起**,**开关状态一个字节都不动**——明细关掉 / 公告退场后**它自己就回来了**,不用重新保存、也不用重新开开关。为什么要这样:这两件事都是「临时要在整块屏上讲另一件事」,被侧边栏压住会看不全。
|
||
|
||
**Q111:导出件上的名次和大屏上的名次为什么不一样?**
|
||
|
||
**先说结论:这是一条既有口径**(屏幕上和导出件上「名次取谁」的优先级**故意不同**),**正常赛程遇不到**;真遇到了,**按决赛发布一次**就能让两边一致。
|
||
|
||
| 看哪 | 名次取谁 |
|
||
| --- | --- |
|
||
| **屏幕**(大屏的分项成绩 / 实时赛况 / 底栏「最新完成项目」) | **成绩行上的名次优先**,为空时回落「通道名次」 |
|
||
| **导出件**(「导出 → 结果」的分项成绩表) | **「通道名次」优先**,为空时回落成绩行上的名次 |
|
||
|
||
**什么时候两边会分叉**:只有一种序列——**先「按决赛成绩发布」**(会重建通道名次),**之后又只发了一次「只更新名次」**(只写成绩行上的名次、**不重建通道名次**)。这时**导出件显示的是上一次计分的名次,屏幕显示的是新名次**。
|
||
|
||
**为什么这么设计**:屏幕侧必须「成绩行优先」——因为「只更新名次」的发布**只写成绩行上的名次、不重建通道名次**,一旦让通道名次优先,个人项目在那种发布之后会**显示上一次的旧名次**(见 Q105 与《升级说明》`dev_0.5.15` 的 ①/④)。导出侧则是**既有口径、有测试钉着**,本版按「兼容性最大化、不动已交付的东西」**原样保留**(见《升级说明》`dev_0.5.16` 的 ④)。
|
||
|
||
**遇到了怎么办**:对该小项 + 组别**再按「按决赛成绩发布」发布一次**即可(通道名次会按当前成绩重建,两边立刻一致),**不用改库、不用重导、也不用重算整场**。正常赛程(预赛只排名次 → 决赛才计分)两边名次本来就是同一个值,不会遇到。
|