feat(0.5.1): 业务逻辑审查 9 条 P0 全修 + 自绘安装器 + 现场反馈四项
## 算分正确性(6 份只读审查 → 收敛成 5 个病根,均先复现失败再修) - 「人工名次」与「自动名次回写」互斥:原来同一份成绩**发布两次分数不同** (团体报名项 dual 通道 10/8/6 → 25/18/14),现在连发多次逐字节一致 - 删小项时在同一事务作废旧流水并推榜:原来分数**永久残留**在总榜、任何重算都打不到 - 规则包导入整体事务化:原来中途失败会清空名次表且补不回(奖牌全丢); 另加守卫「compare=none 的小项不得配 basis=result/aggregate」 - 末位归零只抹真正落在末位的那一档:原来跨末位的并列组会被整组抹 0 (7 人三人并列第 5 时第 5、6 名的分也一起没了) - 模板「分值表档位超出录取名次」现在拒绝保存:原来静默截断成 0 分 ## 现场反馈(主人实测报的) - 已发布成绩可改:行内「修改本条」+ 成绩格/状态格可点(退回草稿→改→重新发布本组), 与「作废」语义分开;取消路径不产生任何副作用 - 单位积分明细补「运动员 / 来源」列,并显示「已修订 ×N(时间·原因)」: 管理端、大屏覆盖层、xlsx 备注列三处同源 - 单位奖牌榜改为按奖牌独立排名(金→银→铜→单位编码),与积分榜解耦 - 历史孤儿积分流水清理(迁移 0022,只动 result/record_bonus,人工调整分不受影响) ## 新功能 - 团体项目聚合口径二选一:平均(默认)/ 总和(迁移 0023,通道编辑器可切) ## 安装器 - 自绘五页安装界面:无边框、自绘标题栏、DPI 自适应(4K@200% 实测)、 安装/卸载逻辑复用 electron-builder 宏不变;默认「为所有用户安装」并自动放行防火墙 19540 - 构建期校验:安装器素材里的版本号必须与 VERSION 一致,否则构建失败 自检:服务端 14 包 ×2 / 前端 vue-tsc + build + 742 例 ×2 / Console 20 文件 + 68 例 ×2,全绿。 端到端对拍:修前 vs 修后,纯团体 / 双计 / 普通个人三形态**逐字节一致**,仅出 bug 的双通道形态按要求改变。
This commit is contained in:
1 parent
78b14efaa9
commit
877ff15823
181 files changed
+8747
-371
No files matched your search
+40
-21
@@ -109,7 +109,9 @@
|
||||
| 状态 | 下拉选择:**有效**、**DNS 弃赛**、**DQ 取消**、**DNF 未完赛**、**退赛** |
|
||||
| 积分(自动) | 随成绩实时计算,仅供参考 |
|
||||
| 备注 | 自由填写,示例文本是 `可留空` |
|
||||
| 操作 | 已发布的行显示 **「作废本条」**(已作废的行改显示 **「重新录入」**);草稿行这里是 `—`(草稿本来就能直接改)。详见 4.10 |
|
||||
| 操作 | 已发布的行并排两个按钮 **「修改本条」**(退回草稿改一改,改完重新发布本组)与 **「作废本条」**(这一条不算了);已作废的行改显示 **「重新录入」**;草稿行这里是 `—`(草稿本来就能直接改)。详见 4.10 |
|
||||
|
||||
> 已发布的行里,**成绩格与状态格可以直接点**:点一下弹出确认框(写明会退回草稿、榜单先把它退下来、改完需重新发布本组),确认后才退回,点「取消」什么都不做。名次格与备注格点不动。
|
||||
|
||||
**成绩写法**:能接受的写法比过去多,中文输入法下的全角冒号 `1:06`、全角数字也认。
|
||||
|
||||
@@ -179,7 +181,7 @@
|
||||
3. 确认框会写明:`本组还有 N 人没有成绩,本次将发布已填的 M 人;其余保持未发布,补录后再发布即可。本次影响 … 个单位,最大分差变化 … 分。发布后立即上屏并重算积分榜。`——**看完再确认**,系统只发布已填的那 M 人,不会把没成绩的人当成 0 分发出去(末句在延迟结算下会换成「名次与榜单等该组全部录完后再更新」,见下面);
|
||||
4. 确认后这批成绩立即上屏;**实时结算(默认)下,名次与积分先按已发布的这部分算**,大屏立刻有内容(延迟结算下先不动,见下);
|
||||
5. 下一批跑完,回到本页补录成绩,再点一次「发布本批」——系统会把两批放在一起重算名次与积分,先发的部分自动跟着更新;
|
||||
6. 全部发完后按钮不再显示「本批」(并变为不可用),此时该组视为已全部发布。**只错一条**时不必撤销整组发布,用该行的「作废本条 → 重新录入」(见 4.10);整组都要改才走「撤销发布 → 修改 → 重新发布」(见 4.7)。
|
||||
6. 全部发完后按钮不再显示「本批」(并变为不可用),此时该组视为已全部发布。**只错一条**时不必撤销整组发布,点那一格(或该行的「修改本条」)退回草稿改完重发即可(见 4.10);整组都要改才走「撤销发布 → 修改 → 重新发布」(见 4.7)。
|
||||
|
||||
> 只有「会被算错」的写法才会挡住发布(见 4.4);空格子只是「还没录」,属于提醒,不影响发布。审核页(第 5 节)也是同一套口径:只有写错或缺名次才挡「发布整组」,空成绩只是本次跳过。
|
||||
|
||||
@@ -197,7 +199,7 @@
|
||||
2. 系统作废该组已产生的积分流水,大屏回退到发布前状态;
|
||||
3. 修改后重新发布即可。全程留痕,可在「变更历史」查看。
|
||||
|
||||
> **只错了一条成绩时**,不必撤销整组发布、把别人的成绩也一起翻下来——用该行「操作」列的「作废本条 / 重新录入」即可,见 4.10。
|
||||
> **只错了一条成绩时**,不必撤销整组发布、把别人的成绩也一起翻下来——点那一格(或该行的「修改本条」)退回草稿改完重发即可,见 4.10。
|
||||
|
||||
### 4.8 勾选与批量操作(退赛 / 恢复 / 移出报名)
|
||||
|
||||
@@ -236,33 +238,38 @@
|
||||
- **权限**:读得到成绩的人都能看到这块卡片(访客只读,输入框置灰并写明原因);**能保存的是录入员及以上**(与成绩录入同权限)。示例数据模式下不能保存;
|
||||
- 团体名次是**独立保存**的:点「保存团体名次」只提交这块卡片,不会顺手发布成绩;成绩仍然要另外「发布」。
|
||||
|
||||
### 4.10 单条作废 / 重新录入(手滑填错了怎么办)
|
||||
### 4.10 单条修改 / 作废 / 重新录入(手滑填错了怎么办)
|
||||
|
||||
已发布的成绩行在表格里仍然是**锁着的**(成绩、名次、状态、备注都改不了)——这是有意的:已发布的行已经上屏、已经计分,允许就地改会让「看到的榜单」和「改到一半的数据」对不上。要改就必须先明确地把它退回来。表格最后一列 **「操作」** 就是这件事的入口,只有已发布的行才有按钮。
|
||||
已发布的成绩行在表格里仍然是**锁着的**(名次、备注改不了)——这是有意的:已发布的行已经上屏、已经计分,允许就地改会让「看到的榜单」和「改到一半的数据」对不上。要改就必须先明确地把它退回来。入口有两个,效果一样:
|
||||
|
||||
**两个按钮,什么时候用哪个**
|
||||
- **直接点那一格**:已发布的**成绩格**与**状态格**点得动,点一下会弹出确认框,写明「这一条会退回草稿、榜单先把它退下来、改完需重新发布本组」;点「取消」**什么都不做**(成绩、榜单、大屏都不动),点确认才退回来。名次格与备注格仍然点不动;
|
||||
- **点表格最右端「操作」列的按钮**,只有已发布的行才有按钮。
|
||||
|
||||
**三个按钮,什么时候用哪个**
|
||||
|
||||
| 按钮 | 什么时候出现 | 做什么 |
|
||||
| --- | --- | --- |
|
||||
| **作废本条** | 这一行是**已发布且正常**的成绩 | 让这**一条**成绩退出名次与积分(同组其它人重新排名),但**不改**它的原始记录——需要改回来时还是用「重新录入」 |
|
||||
| **重新录入** | 这一行是**已作废**的(红徽标「已作废」) | 把这一条**退回草稿**(原来填的成绩还在格里,直接改就行)、不再计入名次与积分,之后就能像普通草稿一样编辑;改完再发布本组 |
|
||||
| **修改本条** | 这一行是**已发布且正常**的成绩 | 把这一条**退回草稿**(原来填的成绩还在格里,直接改就行),名次与积分先按「没有这条成绩」重算,改完再发布本组。**只是填错了改用这个**——它不会把这一条标成「已作废」 |
|
||||
| **作废本条** | 同上 | 让这**一条**成绩不再算数(同组其它人重新排名):成绩文字还留在格里,录入列变成红徽标「已作废」,**不计入名次与积分**。这一条确实不算了才用它 |
|
||||
| **重新录入** | 这一行是**已作废**的(红徽标「已作废」) | 把这一条**退回草稿**(同「修改本条」),改完就能像普通草稿一样重新发布 |
|
||||
|
||||
两个按钮**都必须填写原因**(确认框里的「作废原因 / 退回原因」),留空时确认键点了也不会提交——原因会写进审计日志,事后能查清是谁、什么时候、为什么动的这一条。
|
||||
三个按钮**都必须填写原因**(确认框里的「修改原因 / 作废原因 / 退回原因」),留空时确认键点了也不会提交——原因会写进审计日志,事后能查清是谁、什么时候、为什么动的这一条。
|
||||
|
||||
**点完会立刻发生什么**
|
||||
|
||||
- 服务端在同一个事务里**按当前已发布成绩重算**该小项该组的名次与积分,并**立即推送大屏**;
|
||||
- 这一步**不受**「分批发布时实时更新榜单」这个延迟结算开关影响(它改的是「这条成绩算不算数」,不是「录了多少」),不会出现「榜上还有分、成绩却已经撤了」;
|
||||
- 两者都会留痕:**审计日志**(第 13 节)里的动作分别是 `result.void` 与 `result.reopen`,含操作人、时间与填写的原因。注意「变更历史」(第 12 节)记的是**发布 / 撤销发布**这类整组版本,单条作废 / 重新录入**不会**在那里新增一个版本节点。
|
||||
- 三个动作都会留痕:**审计日志**(第 13 节)里的动作分别是 `result.void`(作废)与 `result.reopen`(修改 / 重新录入),含操作人、时间与填写的原因。注意「变更历史」(第 12 节)记的是**发布 / 撤销发布**这类整组版本,单条的修改 / 作废 / 重新录入**不会**在那里新增一个版本节点。
|
||||
|
||||
**手滑填错了怎么办:两条路**
|
||||
**手滑填错了怎么办:三条路**
|
||||
|
||||
1. **只错了一条**(最常见):在那一行点 **「作废本条」** 填原因 → 这一条退出名次与积分、大屏立刻更新 → 同一行点 **「重新录入」**(此时按钮已变成它)填原因 → 退回草稿,该行可以编辑了 → 改对成绩 → 再点页头的 **「发布」**(该组还有别的已发布成绩时显示为「发布本批」,见 4.6)。全程只动这一条,同组别人的成绩一直留在榜上;
|
||||
2. **整组都要改**(例如整组被判罚、名次口径整体调整):点页面上的 **「撤销发布」** → 修改 → 重新发布(见 4.7)。这条会把该组已产生的积分流水整体作废再重发,大屏会先回退一次。
|
||||
1. **只错了一条、要改对**(最常见):在那一行点 **成绩格**(或点 **「修改本条」**),确认框会写明后果,填「修改原因」→ 确认:这一条退回草稿、大屏按「没有这条成绩」重算 → **直接改格里的内容** → 再点页头的 **「发布」**(该组还有别的已发布成绩时显示为「发布本批」,见 4.6)。全程只动这一条,同组别人的成绩一直留在榜上;
|
||||
2. **这一条根本不该算**(成绩无效、重复录入等):同一行点 **「作废本条」** 填原因 → 这一条不再计入名次与积分(成绩文字还留在格里,录入列变成红徽标「已作废」)。以后要让它重新算数,用同一行的 **「重新录入」** 退回草稿改完再发布。**只是填错了用第 1 条**——用「作废」会在榜上留下一条作废痕迹;
|
||||
3. **整组都要改**(例如整组被判罚、名次口径整体调整):点页面上的 **「撤销发布」** → 修改 → 重新发布(见 4.7)。这条会把该组已产生的积分流水整体作废再重发,大屏会先回退一次。
|
||||
|
||||
> 只错一条时**优先用第 1 条路**:撤销发布会让整组的分数先消失再回来,大屏在中间会闪一下;作废 / 重新录入只影响这一条。
|
||||
> 只错一条时**优先用第 1、2 条路**:撤销发布会让整组的分数先消失再回来,大屏在中间会闪一下;单条修改 / 作废只影响这一条。
|
||||
|
||||
> 需要先「存草稿」再点这两个按钮:作废 / 退回会重算并整表刷新,未保存的编辑会被刷新覆盖,页面会拦下并提示。
|
||||
> 需要先「存草稿」再动这些入口:修改 / 作废 / 退回会重算并整表刷新,未保存的编辑会被刷新覆盖,页面会拦下并提示。
|
||||
|
||||
---
|
||||
|
||||
@@ -371,11 +378,15 @@
|
||||
|
||||
- 列:名次、单位、总分、金、银、铜、变化、明细;
|
||||
- 「变化」列显示名次升降(如 `↑2`、`↓1`);
|
||||
- 点「展开」下钻该单位的积分明细,右侧面板显示合计与每一条得分来源(项目、组别、运动员、成绩、名次、积分),每一分都可溯源。
|
||||
- 点「展开」下钻该单位的积分明细,右侧面板显示合计与每一条得分来源(项目 / 组别、运动员、来源、成绩、名次、积分),每一分都可溯源;
|
||||
- **「运动员」列**:团体项目、按队内平均算出的团体分、以及人工调整这几类没有单个运动员的明细,这一列显示**单位名**(单位的团体分就是该单位挣的);人工调整没有项目也没有运动员,显示 `—`;
|
||||
- **「来源」列**:这一分是怎么来的——`成绩`(正常计分)、`破纪录加分`、`人工调整`,与导出的「来源」列用词一致;
|
||||
- **被改过的成绩带一个「已修订 ×N」小角标**(N = 发布后被改过的次数),鼠标悬停在角标上会显示**最后一次修订的时间、原因与操作人**;没改过的行没有角标。
|
||||
|
||||
### 8.2 单位奖牌榜 / 个人积分榜
|
||||
|
||||
- 单位奖牌榜显示金、银、铜与合计;
|
||||
- **单位奖牌榜有自己的名次与顺序:金牌多的在前,其次比银牌、铜牌,最后按单位编码排**——它不看总分,所以「金牌多但总分低」的单位在这里排在前面,在单位总分榜上却靠后,这是口径不同,不是数据错了;
|
||||
- 个人积分榜显示运动员、单位、个人总分与奖牌数;
|
||||
- 单位奖牌榜那一列的「明细」展开的是**同一个单位积分明细面板**(见 8.1),不是奖牌专属明细;但这份榜单本身有专属的逐枚奖牌导出(见 8.3);
|
||||
- 个人积分榜**没有明细列**(不能点开下钻),但它的逐条得分来源也有专属导出(见 8.3)。
|
||||
@@ -386,7 +397,7 @@
|
||||
- **导出总明细**(单位总分榜卡片头):导出 `单位积分总明细.xlsx`——一张带「单位」列的总表,外加每个**有数据**的单位一张分表;没有积分的单位不出分表;
|
||||
- **导出奖牌明细**(单位奖牌榜卡片头):导出 `单位奖牌明细.xlsx`——第一张总表逐枚奖牌列出「单位 / 大项 / 小项 / 组别 / 名次 / 奖牌 / 运动员、队」,`奖牌` 列是 `金牌` / `银牌` / `铜牌`;其后每个**有奖牌**的单位一张分表(列同上、去掉「单位」,末尾一行小计 `金 X / 银 Y / 铜 Z`),没有奖牌的单位不出分表。口径与「单位奖牌榜」一致:同一个报名项在「个人+团体」这类双计通道下只记一枚奖牌,不会重复计数;
|
||||
- **导出个人明细**(个人积分榜卡片头):导出 `个人积分总明细.xlsx`——第一张总表逐条列出「单位 / 运动员 / 大项 / 小项 / 组别 / 名次 / 成绩 / 得分 / 来源」;其后每个**有得分**的单位一张分表(按单位分,不按人分),没有得分流水的人不出现在表里。`得分` 是记到个人的原始分,**与「个人积分榜」逐个数字一致,且不乘榜单口径里的个人项目得分折算系数**(那个系数只作用于单位总分);
|
||||
- **导出该单位明细**(右侧单位明细面板头部):先展开某个单位再点,导出 `单位积分明细.xlsx`(列:序号、大项、小项、组别、运动员、名次、成绩、来源、积分、备注,末行是「合计」)。单位奖牌榜展开的也是这个单位积分明细面板,所以想按单位逐条看时同样用它;
|
||||
- **导出该单位明细**(右侧单位明细面板头部):先展开某个单位再点,导出 `单位积分明细.xlsx`(列:序号、大项、小项、组别、运动员、名次、成绩、来源、积分、备注,末行是「合计」)。**备注列会写下修订痕迹**:被改过的成绩写「已修订 ×N;最后一次 <时间> <原因>」,没改过的行留空——与屏幕上那个角标是同一句话,事后拿表格对账不会对不上。单位奖牌榜展开的也是这个单位积分明细面板,所以想按单位逐条看时同样用它;
|
||||
- 这些导出都是只读下载(访客也能用),不需要写权限;导出过程中按钮会变成「导出中…」并禁用,避免重复下载。
|
||||
|
||||
### 8.4 推送明细到大屏
|
||||
@@ -569,8 +580,13 @@
|
||||
2. 点「新增通道」逐条配置,同一「名次范围 + 名次来源」只能有一个通道;
|
||||
3. 点「保存全部」整体替换该小项的通道配置;
|
||||
4. 标记为「不计分」的小项,通道可以保存但不参与积分计算;
|
||||
5. 「名次来源」选「按队内平均」时,把同一个单位(或个人)在该组别的成绩**取平均**后排名,并列按积分模板的并列口径处理(默认顺延);平均值分母取录入页选的「平均值口径」——`只算有效成绩`时是本单位有有效成绩的条数(一个人都没有效成绩的单位不参与团体排名、不得分),`全部报名人员都计入`时是本单位在该组别的报名条数(没成绩的按 0 计入)。报名表里 `status` 不是 `registered` 的报名项(弃赛 / 取消)既不算参与,也不进分母;
|
||||
6. 每条通道有一个「计入单位总分」开关,默认打开。关掉后该通道的分只记在个人头上,不进单位总分——「个人+团体」项目的个人通道就靠它做到只记个人;
|
||||
5. 「名次来源」选「按队内平均」时,把同一个单位(或个人)在该组别的成绩**汇总成一个值**后排名,并列按积分模板的并列口径处理(默认顺延)。汇总口径在该行的**「聚合口径」列**上选,两个按钮点一下即切换:
|
||||
- **平均**(默认):团体成绩 = 该单位成员成绩的**平均值**。分母取录入页选的「平均值口径」——`只算有效成绩`时是本单位有有效成绩的条数(一个人都没有效成绩的单位不参与团体排名、不得分),`全部报名人员都计入`时是本单位在该组别的报名条数(没成绩的按 0 计入);
|
||||
- **总和**:团体成绩 = 该单位成员成绩的**总和**(没成绩的人按 0 加与不加都一样)。
|
||||
- **各队人数相同时,两种口径排出来的名次完全相同**;人数不同时可能不同(这时按你们要的口径选,默认是「平均」)。改完点「保存全部」生效,该小项立即重算;
|
||||
- 报名表里 `status` 不是 `registered` 的报名项(弃赛 / 取消)既不算参与,也不进分母;
|
||||
- 不是「按队内平均」的通道这一列显示 `—`(对它没有意义);
|
||||
6. 每条通道有一个「计入单位总分」开关。**新建通道时的默认值按小项类型给**:**普通个人项目 / 团体项目默认勾选**;**「个人 + 团体」项目的个人通道默认不勾**(这类项目的个人分本来就只记个人榜、不并入单位总分)。关掉后该通道的分只记在个人头上,不进单位总分——「个人+团体」项目的个人通道就靠它做到只记个人;**所以现场要留意自己那一行的实际勾选状态**;
|
||||
7. 每条通道还有一个**「奖牌通道」**列,里面是两个开关(都默认打开):
|
||||
|
||||
| 开关 | 默认 | 关掉之后 |
|
||||
@@ -804,7 +820,7 @@
|
||||
1. 顶部可筛选小项,以及「全部时间 / 近 24 小时 / 近 7 天」;
|
||||
2. 左侧时间轴最新在上,节点显示动作(发布 / 撤销发布 / 编辑)、项目、操作人、时间与备注;
|
||||
3. 点节点,右侧显示操作人、影响单位与成绩前后对比(diff);
|
||||
4. 本页**不提供一键回滚**。纠错请到「成绩录入」:只错一条走「作废本条 → 重新录入 → 修改 → 重新发布」(见 4.10),整组要改才走「撤销发布 → 修改 → 重新发布」(见 4.7)。
|
||||
4. 本页**不提供一键回滚**。纠错请到「成绩录入」:只错一条走「点成绩格(或「修改本条」)→ 改 → 重新发布本组」(见 4.10),整组要改才走「撤销发布 → 修改 → 重新发布」(见 4.7)。
|
||||
|
||||
---
|
||||
|
||||
@@ -978,6 +994,9 @@
|
||||
### 17.3 明细覆盖层
|
||||
|
||||
- 管理端推送单位积分明细后,大屏右侧弹出半屏覆盖层,显示该单位每一分的来源;
|
||||
- 覆盖层的表头是**项目 / 组别、运动员、名次、成绩、积分**五列:团体项目、按队内平均算出的团体分这类没有单个运动员的明细,「运动员」列显示**单位名**(不显示 `null`、也不留空格);
|
||||
- **破纪录加分**那一类明细会在项目名后面多一个小标签 `破纪录`,一眼看出这几分不是名次分(人工调整的项目列本来就写着「人工调整」,不再重复打标签);
|
||||
- **被改过的成绩**在那一行下面多一行小字,形如 `10:42 已修订(成绩录入笔误)`——大屏不能悬停、观众也离得远,所以时间只写几点几分、原因超过十几个字会截断(完整的时间、原因与操作人在管理端明细的角标悬停里看);
|
||||
- 默认 **60 秒后自动关闭**并恢复轮播;
|
||||
- 管理端「关闭大屏明细」可立即关闭。
|
||||
|
||||
@@ -1002,7 +1021,7 @@
|
||||
草稿不会上屏。需要点「发布」(或 `Alt+Enter`),发布成功后立即更新。
|
||||
|
||||
**Q:发布后发现有错怎么办?**
|
||||
只错一条成绩:到「成绩录入」找到那一行,点「作废本条」→ 再点「重新录入」→ 改 → 重新发布,只动这一条(见 4.10)。
|
||||
只错一条成绩:到「成绩录入」找到那一行,**点那一格(或点「修改本条」)→ 填原因 → 确认 → 改对 → 重新发布本组**,只动这一条(见 4.10)。
|
||||
整组要改:点「撤销发布」→ 修改 → 重新发布。撤销会作废该组积分流水,大屏回退;全程可在「变更历史」追溯。
|
||||
|
||||
**Q:并列名次怎么显示?**
|
||||
|
||||
+88
-1
@@ -6,7 +6,94 @@
|
||||
|
||||
---
|
||||
|
||||
## dev_0.5.0(当前版本)
|
||||
## dev_0.5.1(当前版本)
|
||||
|
||||
### 一句话
|
||||
|
||||
**两条数据迁移、三处计分口径变化、安装器换新,升级后建议重新导入一次新版规则包**:迁移 `0022` 把「小项已被删除、积分流水却还挂在榜上」的历史脏数据一次性作废(**只影响分数,不影响名次与奖牌,人工调整分不受影响**);迁移 `0023` 给计分通道加一列「聚合口径」(默认「平均」,不切就与升级前一样);**单位奖牌榜改为按奖牌数独立排名,可能与积分榜顺序不同**;安装界面全面重做(**安装逻辑不变**)。
|
||||
|
||||
### ① 数据迁移:两条(0022 / 0023)
|
||||
|
||||
**`0022` —— 历史孤儿积分流水一次性作废**(现场可能少几分,那是升级前就该清掉的分)
|
||||
|
||||
- **它清理什么**:升级前删掉一个「只按单位录名次、没有报名行」的小项时,它名下**已经产生**的积分流水会留在库里、并且没有被作废——分数继续算在单位总分里,但这个小项已经不存在,此后任何一次重算都再也碰不到这些流水(只能改库才能清)。
|
||||
- **只作废「成绩流水」与「破纪录加分」**:这两类流水一定挂着小项,空小项 = 小项已被删除。**人工调整分不受影响**——人工调整本来就可以不挂小项,是合法的,不会被误清。
|
||||
- **影响面**:**只影响分数**。这些流水本来就没有名次、也没有奖牌,所以**名次与奖牌一件不变**;作废后这些分在**单位总分与单位积分明细里一起消失**(不会出现「榜上无分、明细有分」)。它是**作废不是删除**:流水行与作废时间都留着,并注明是升级时清理的历史数据,事后查得到。
|
||||
- **怎么确认**:启动一次 Console,在运行日志或 `logs\operations\` 当天文件里能看到迁移记录(`已应用迁移 … name=0022_void_historical_orphan_ledger.sql`)。**现场确认删过「带分的小项」的机器上,相应单位的总分会少一点**——那是清掉了历史脏数据,不是这次升级算错了。
|
||||
- **想核对到条**:升级前先导出一次单位积分明细存底(「积分榜」页的「导出该单位明细」或「导出总明细」),升级后再导一次对比,就能看出少了哪几条。
|
||||
|
||||
**`0023` —— 计分通道新增一列「聚合口径」**(只加列、不动既有数据)
|
||||
|
||||
- 老通道一律取默认**「平均」**(团体成绩 = 该单位成员成绩的平均值),**升级前后榜单一分不差**;想改成「总和」的,到「基础数据 → 计分通道」手工切(见《使用手册》10.4)。
|
||||
|
||||
### ② 三处口径变化(现场看到的数字 / 顺序可能不同)
|
||||
|
||||
**1)「末位归零」:末位不再丢分**
|
||||
|
||||
- 本版随包规则包里两个模板的「末位归零」都设成**关**:**参赛人数少于表里档位数时,最后一名按表拿分**(例:3 人参赛、模板有 6 档,第 3 名按表拿 6 分),不再被抹成 0。重新导入规则包会把库里这个开关一起写成「关」——**此前在模板页手工勾过它、或导入过把它勾上的规则包**的机器,这一步之后末位分数会变(这是定稿口径:规则里没配的名次分数就是 0 分,分只按表发)。
|
||||
- 另外,**开关打开时也只抹「真正落在最末那一档」的那一条**:并列档位从更靠前的名次起步、区间跨过末位的并列组**不再被整组抹 0**,按他们并列到的名次照表拿分(7 人里三人并列第 5、前六档表 → 每人按第 5 名拿分;升级前是 0 分)。
|
||||
- **名次与奖牌不受影响**:这一段改的只是「这一组拿多少分」。
|
||||
|
||||
**2)单位奖牌榜改为按奖牌数独立排名**
|
||||
|
||||
- 顺序与名次:**金牌 → 银牌 → 铜牌 → 单位编码**,**不再跟着单位总分榜**。所以「金牌多、总分低」的单位在奖牌榜上排前面、在单位总分榜上排后面——**这是口径不同,不是数据错了**(升级前奖牌榜沿用总分榜顺序,会出现「金牌多的排在后面」)。
|
||||
- 三处同一个口径:管理端「积分榜 → 单位奖牌榜」、大屏的单位奖牌榜页、大屏底栏滚动的奖牌 Top3。
|
||||
- 「导出奖牌明细」(`单位奖牌明细.xlsx`)逐枚列出奖牌的总表不受影响;各单位**分表的先后仍按单位总分排**(得分高的在前),与奖牌榜的顺序不同,这不是错。
|
||||
|
||||
**3)同分并列段的排列按规则包的排序口径**
|
||||
|
||||
- 总积分榜(及个人积分榜)里**总分相同**的单位那一段内,先后按规则包里的排序口径排——本赛会包的默认是 **总分 → 金 → 银 → 铜 → 单位编码**。
|
||||
- 重新导入规则包会把这条口径按规则包的值写回库里(本赛会包是 **总分 → 金 → 银 → 铜 → 单位编码**):**此前导入过排序口径写法不同的规则包**的机器,这一段里单位的先后可能变化——**变的是顺序,分数与奖牌都不变**,看到顺序变了不要当成故障。
|
||||
- **单位奖牌榜不受这条影响**:它固定按金 → 银 → 铜 → 单位编码(见上面第 2 条)。
|
||||
|
||||
### ③ 安装器换新(界面重做,安装逻辑不变)
|
||||
|
||||
- 安装程序(`Scoreboard Console-<版本>-x64.exe`)**界面全面重做**:欢迎 / 目录 / 许可 / 进度 / 完成各页与按钮换成新素材,并**支持 4K 高 DPI**(系统缩放到 200% 时界面按缩放后的尺寸排布,字与按钮不会糊成一团)。
|
||||
- **安装逻辑一个字没改**:装到哪、装什么、桌面快捷方式(「赛事积分榜」)、卸载方式、覆盖安装时先静默跑一遍旧卸载器、数据与配置在 `%LOCALAPPDATA%\ScoreboardConsole\`(**覆盖安装不会丢**)——全部与升级前一致。
|
||||
- 默认安装模式是**「为所有用户安装」**(装到 Program Files,安装时提一次权);**这台机器上次装过时,向导沿用上次的装法**,静默安装也可以用 `/allusers` / `/currentuser` 指定。这一趟**仍然自动放行防火墙入站 19540**(在防火墙里能看到规则 `Scoreboard Console (TCP 19540)`),局域网大屏不用再手工放行;选「仅为我安装」的机器要手工放行(命令见《部署指南》7.5)。
|
||||
|
||||
### ④ 升级后建议:把新版规则包重新导入一次
|
||||
|
||||
**做法**:管理端「导出 → 规则包 → 选择 YAML → **预览差异** → 确认导入并全量重算」,导入随本次发布的新版规则包。
|
||||
|
||||
**为什么建议做**:旧包缺少本次修正的通道配置(几个双计项目的团体通道口径、纯团体项目该走「按成绩自动排名」还是「人工名次」等),**不重新导入就不会生效**。
|
||||
|
||||
⚠️ **动手前先看清这个前提**:**导入会按规则包重写各小项的计分通道配置**——规则包覆盖到的小项,库里现有的通道会被整包替换。所以:
|
||||
|
||||
- **建议先导入、再按需要手工微调个别项目**;顺序反过来(先微调再导入),手工改动会被这次导入覆盖掉;
|
||||
- 导入前先看「预览差异」里列出的通道增删改,确认没有把现场专门配过的项目改掉;发现被改,导入后到「基础数据 → 计分通道」改回来即可(保存后该小项会重算);
|
||||
- 导入会**全量重算积分并刷新榜单**,尽量安排在**没有正在进行的项目**时做;
|
||||
- 导入后正是上面那三处口径变化的生效点,请对着 ② 逐条看一遍榜单。
|
||||
|
||||
### ⑤ 升级时可能遇到的拦截(这两处以前会静默通过)
|
||||
|
||||
- **导入规则包时**:如果这份规则包存在**配置冲突**——典型情形是某个小项的**名次是靠人工录入的**(例如球类、拔河这类由裁判判名次的项目),规则包却给它配了**「按成绩自动排名」**(或「按队内平均」)的通道——导入会被**整包拒收**,一个字节都不写,并直接说明**是哪个小项、为什么不行、怎么改**(给这个小项单独写一段人工名次的通道配置,或调整规则包的匹配条件别套到它身上)。升级前这种情况是「先把通道换掉、紧接着重算时才报错」,名次表会停在半空(分数还在、奖牌却清零),自愈与重试导入都会因为同一个小项再失败一次——**现在不会留下这种坏状态**。
|
||||
- **保存积分模板时**:如果**分值表里配的名次超过了「录取名次」**(例如分值表配到第 7 档、录取名次还留着 6),保存会被**拒绝**并说明怎么改:要么把录取名次改成 7、要么改成 0(0 = 不按名次封顶),要么删掉超出录取名次的那几档(例子里的第 7 档)。升级前这种配置能安静存下来,但第 7 档及以后在榜上恒为 0 分,界面上看不出任何异常——**现在会在保存这一步就说清楚**。
|
||||
|
||||
### ⑥ 升级后 5 分钟核对
|
||||
|
||||
1. 启动一次 Console,看运行日志 / `logs\operations\` 当天文件:应能看到 `0022` 与 `0023` 两条迁移记录,没有别的报错;
|
||||
2. 刷新管理端「积分榜」:**单位总分榜、个人积分榜的数字与升级前一致**(除了 `0022` 清掉的历史脏数据);**单位奖牌榜的先后可能变了**(现在按金 → 银 → 铜排);
|
||||
3. **看到「同分单位的先后变了」不要当故障**:重导规则包会把排序口径按规则包的值写回(本赛会包是 总分 → 金 → 银 → 铜 → 单位编码),**变的是顺序,分数与奖牌一件不变**(见 ② 第 3 条);
|
||||
4. 打开「基础数据 → 计分通道」,选中一个双计项目(例如团体引体向上),确认「聚合口径」一列是**「平均」**——不切换就与升级前口径一致;
|
||||
5. 打开「成绩录入」页:已发布的行右侧应**并排**「修改本条」与「作废本条」两个按钮;点一下成绩格会弹确认框(**点「取消」什么都不做**);
|
||||
6. 按 ④ 导入新版规则包,导入后核对该项目的计分通道与榜单;
|
||||
7. 用《上线检查清单》过一遍。
|
||||
|
||||
### ⑦ 详细说明在哪
|
||||
|
||||
| 想了解 | 看 |
|
||||
| --- | --- |
|
||||
| 已发布成绩怎么改(修改 / 作废的区别) | 《使用手册》4.10;《常见问题》Q98 |
|
||||
| 单位明细里的运动员 / 来源 / 已修订 | 《使用手册》8.1、8.3、17.3 |
|
||||
| 团体分的「平均 / 总和」口径 | 《使用手册》10.4;《常见问题》Q15 |
|
||||
| 单位奖牌榜为什么与积分榜顺序不同 | 《使用手册》8.2 |
|
||||
| 导入被拒 / 保存模板被拒是什么原因 | 本文件 ⑤ |
|
||||
| 迁移与安装 | 本文件 ① ③;《部署指南》3.1、7.5 |
|
||||
|
||||
---
|
||||
|
||||
## dev_0.5.0
|
||||
|
||||
### 一句话
|
||||
|
||||
|
||||
+18
-12
@@ -34,7 +34,7 @@
|
||||
草稿不上屏。需要「发布」(或 `Alt+Enter`),发布后 1 秒内大屏更新。
|
||||
|
||||
**Q8:发布错了怎么改?**
|
||||
撤销发布 → 修改 → 重新发布。撤销会作废该组积分流水,大屏回退到发布前状态,过程可在「变更历史」查看。**只错了一条成绩时不必撤销整组**,用那一行的「作废本条 → 重新录入」即可,见 Q98。
|
||||
撤销发布 → 修改 → 重新发布。撤销会作废该组积分流水,大屏回退到发布前状态,过程可在「变更历史」查看。**只错了一条成绩时不必撤销整组**,点那一格(或那一行的「修改本条」)退回草稿改完重发即可,见 Q98。
|
||||
|
||||
**Q9:为什么「发布」是灰的?**
|
||||
常见原因:未登录、服务端断开、示例数据模式,或存在**会阻止发布**的校验错误(秒位 ≥ 60、成绩写法无法识别、手动名次项目缺名次)。**没录成绩不算错误、不挡发布**(见 Q77)。成绩格的报错会把**那一格的实际内容**打出来并对症给改法(见 Q75、Q76)。
|
||||
@@ -58,7 +58,7 @@
|
||||
- **个人通道**:按个人成绩排名、套个人积分模板给分,分只记在个人积分榜;
|
||||
- **团体通道**:按团体成绩排名、套团体积分模板给分,计入单位总分。
|
||||
|
||||
个人通道的「计入单位总分」关掉了才不进单位总分:按规则包里的「个人+团体」模板生成的通道,个人通道默认就是不勾的(手工新建通道时默认勾选,以页面上实际的勾选状态为准)。到「基础数据 → 计分通道」选中该小项就能看到每行通道的勾选状态,关掉的行在「大项 / 小项」的通道摘要里带「不计入单位总分」徽标。
|
||||
个人通道的「计入单位总分」关掉了才不进单位总分:按规则包里的「个人+团体」模板生成的通道,个人通道默认就是不勾的。**手工新建通道时的默认值也按小项类型给**:普通个人项目 / 团体项目默认勾选;**「个人 + 团体」项目的个人通道默认不勾**——所以**以页面上实际的勾选状态为准**。到「基础数据 → 计分通道」选中该小项就能看到每行通道的勾选状态,关掉的行在「大项 / 小项」的通道摘要里带「不计入单位总分」徽标。
|
||||
|
||||
想让个人分也折算进单位总分,把个人通道那一行勾上并「保存全部」,然后对该组成绩**撤销发布 → 重新发布**——积分流水是发布时按当时的通道配置生成的,不重新发布不会变。规则包对个别小项写了例外配置时以例外为准。
|
||||
|
||||
@@ -69,7 +69,8 @@
|
||||
- 平均值的分母有两种口径,选中该小项后在「成绩录入」页的工具栏下方用**「平均值口径」**单选切换,点选即保存(小项级设置,该小项的组别共用,不用重新点保存):
|
||||
- `只算有效成绩`(默认):分母是有有效成绩的人数;
|
||||
- `全部报名人员都计入`:分母是该单位在本组别的报名条数,没成绩的按 0 计入。
|
||||
- 改完口径、要让已发布的成绩按新口径重算,需要对该组**撤销发布 → 重新发布**(草稿不受影响,改口径本身在点选时就已保存);发布之前可以先看右侧「实时积分预览」,它已经按新口径显示各单位的分数变化。
|
||||
- **团体成绩怎么汇总**:到「基础数据 → 计分通道」选中该小项,那条团体通道的**「聚合口径」**列可选 **`平均`**(默认,团体成绩 = 该单位成员成绩的平均值)或 **`总和`**(团体成绩 = 该单位成员成绩的总和)。点一下即选中,点「保存全部」生效、该小项立即重算。**各队人数相同时两种口径排出来的名次完全相同**,人数不同时可能不同;上面那条「平均值口径」只对 `平均` 有意义——换成 `总和` 后,它只决定「一个人都没有成绩的单位算不算 0 分参与排名」。
|
||||
- 改完口径、要让已发布的成绩按新口径重算,需要对该组**撤销发布 → 重新发布**(草稿不受影响,改口径本身在点选时就已保存);发布之前可以先看右侧「实时积分预览」,它已经按新口径显示各单位的分数变化。改「聚合口径」不用这一步——它保存时就重算。
|
||||
- 报名表里 `status` 不是 `registered` 的报名项(弃赛 / 取消资格)既不算分子也不算分母。
|
||||
|
||||
**Q16:某个单位一个人都没有效成绩,团体项目怎么算?**
|
||||
@@ -410,6 +411,8 @@ Console 启动的多屏窗口默认每屏锁定一页。到「大屏控制」点
|
||||
|
||||
单位奖牌榜那一列的「明细」展开的仍是**同一个单位积分明细面板**,所以想按单位看时也可以在那上面点「导出该单位明细」;但单位奖牌榜本身另有专属的逐枚奖牌导出(卡片头「导出奖牌明细」,见 Q71),个人积分榜也有专属的逐条得分导出(卡片头「导出个人明细」,见 Q70、Q72)。另外「导出 → 结果导出」里的「单位积分明细」也能先选一个单位再导出。这些导出都是只读下载,访客也能用。
|
||||
|
||||
> 明细面板与这份导出里的列:**运动员**(团体项目、按队内平均的团体分、人工调整这几类显示单位名或 `—`)、**来源**(`成绩` / `破纪录加分` / `人工调整`),以及**被改过的成绩**:面板上带「已修订 ×N」角标(悬停看最后一次修订的时间、原因与操作人),导出的**备注列**写「已修订 ×N;最后一次 <时间> <原因>」。没改过的行没有角标、备注留空。
|
||||
|
||||
**Q70:个人积分榜能导出明细吗?**
|
||||
能。个人积分榜的**卡片头**有「导出个人明细」按钮,导出 `个人积分总明细.xlsx`:第一张总表逐条列出「单位 / 运动员 / 大项 / 小项 / 组别 / 名次 / 成绩 / 得分 / 来源」,其后每个**有得分**的单位一张分表(按单位分,不按人分;没有得分流水的人不出现在表里)。`得分` 是记到个人的原始分,与「个人积分榜」逐个数字一致,**不受榜单口径里的个人项目得分折算系数影响**(那个系数只作用于单位总分),详见 Q72。
|
||||
|
||||
@@ -635,20 +638,23 @@ Console 启动的多屏窗口默认每屏锁定一页。到「大屏控制」点
|
||||
|
||||
先看是**只错一条**还是**整组都要改**——两条路的影响面完全不同:
|
||||
|
||||
**① 只错一条(最常见)**:到「成绩录入」找到那一行,用最右端「操作」列的按钮:
|
||||
**① 只错一条(最常见)**:到「成绩录入」找到那一行,**点成绩格(或点状态格),也可以点最右端「操作」列的「修改本条」**:
|
||||
|
||||
1. 点 **「作废本条」**,填 **「作废原因」**(必填,留空点了不提交)→ 确认。这一条立刻退出名次与积分,同组其它人重新排名,**大屏立即更新**;
|
||||
2. 同一行的按钮这时变成 **「重新录入」**,点它、填 **「退回原因」**(必填)→ 这一条退回草稿,变成可以编辑的行;
|
||||
1. 点下去会弹出确认框,写明「这一条会退回草稿、榜单先把它退下来、改完需重新发布本组」,并要你填 **「修改原因」**(必填,留空点了不提交)——**点「取消」则什么都不做**(成绩、榜单、大屏都不动);
|
||||
2. 确认后这一条退回草稿,名次与积分先按「没有这条成绩」重算,**大屏立即更新**;原来填的成绩还在格里,直接改就行;
|
||||
3. 把成绩改对,再点页头的 **「发布」**(该组还有别的已发布成绩时显示为「发布本批」,见 Q77)。同组别人的成绩一直在榜上,不会被翻下来。
|
||||
|
||||
**② 整组都要改**(例如整组被判罚、名次口径整体调整):点「撤销发布」→ 修改 → 重新发布(见 Q8)。它会把该组已产生的积分流水整体作废再重发,大屏先回退一次。
|
||||
**② 这一条根本不该算**(成绩无效、重复录入等):同一行点 **「作废本条」**,填 **「作废原因」**(必填)→ 确认。这一条不再计入名次与积分,同组其它人重新排名、**大屏立即更新**;成绩文字还留在格里,录入列变成红徽标「已作废」,状态格变成「退赛」。以后要让它重新算数,用同一行的 **「重新录入」** 退回草稿改完再发布。**只是填错了要用 ① 的「修改」,不要用「作废」**——「作废」会在榜上留下一条作废痕迹。
|
||||
|
||||
两个按钮的细节:
|
||||
**③ 整组都要改**(例如整组被判罚、名次口径整体调整):点「撤销发布」→ 修改 → 重新发布(见 Q8)。它会把该组已产生的积分流水整体作废再重发,大屏先回退一次。
|
||||
|
||||
- **已发布的行是锁着的**(成绩 / 名次 / 状态 / 备注都改不了)——这是有意的:已发布就意味着已经上屏、已经计分,允许就地改会变成「榜单上是旧数、表格里是新数」;要改必须先明确地把它退回来,所以给了「作废本条 / 重新录入」这一对按钮,而不是直接解锁;
|
||||
- 作废与退回都**立即重算并推大屏**,**不受「分批发布时实时更新榜单」这个延迟结算开关影响**(它们改的是「这条成绩算不算数」,不是「录了多少」);
|
||||
- 两者都会**留痕**:审计日志(见使用手册第 13 节)里的动作分别是 `result.void` 与 `result.reopen`,含操作人、时间与填写的原因。「变更历史」记的是**发布 / 撤销发布**这类整组版本,单条作废 / 退回不会在那里新增一个节点;
|
||||
- 有个前提:点之前先把未保存的编辑「存草稿」——作废 / 退回会重算并整表刷新,页面会拦下并提示。
|
||||
三个入口的细节:
|
||||
|
||||
- **已发布的行仍然锁着**(名次、备注改不了),但**成绩格与状态格点得动**:点一下只弹出与「修改本条」同一个确认框,不确认就什么都不会发生——这是有意的,已发布就意味着已经上屏、已经计分,**绝不能「点一下成绩就悄悄从榜上退下去」**;要改必须先明确地把它退回来,所以给了「修改本条 / 作废本条」这一对按钮,而不是直接解锁;
|
||||
- **「修改」与「作废」的区别**:**修改**是「这一条填错了,退回草稿改一改再发」,不会把这一条标成「已作废」;**作废**是「这一条不算了」,成绩留在表里但不再计分。改错字用「修改」,别用「作废」;
|
||||
- 修改 / 作废 / 退回都**立即重算并推大屏**,**不受「分批发布时实时更新榜单」这个延迟结算开关影响**(它们改的是「这条成绩算不算数」,不是「录了多少」);
|
||||
- 三者都会**留痕**:审计日志(见使用手册第 13 节)里的动作分别是 `result.reopen`(修改 / 重新录入)与 `result.void`(作废),含操作人、时间与填写的原因。「变更历史」记的是**发布 / 撤销发布**这类整组版本,单条的修改 / 作废 / 退回不会在那里新增一个节点;
|
||||
- 有个前提:点之前先把未保存的编辑「存草稿」——修改 / 作废 / 退回会重算并整表刷新,页面会拦下并提示。
|
||||
|
||||
**Q99:误批准了破纪录怎么办?**
|
||||
|
||||
|
||||
Reference in new issue
Block a user