Files
Scoreboard/docs/常见问题.md
T

54 KiB
Raw Blame History

常见问题(FAQ)

更完整的操作步骤见 使用手册,部署与排障见 部署指南。


账号与权限

Q1:初始密码是多少? 首次启动时随机生成、只打印一次。用 Console 启动时,在 logs\console.log 里搜索「初始密码」即可找到,方法见 部署指南 · 首次登录。

Q2:忘记密码怎么办? 先停止服务,然后执行(配置在用户数据目录,不要用部署目录里那份模板): scoreboard.exe passwd -config "%LOCALAPPDATA%\ScoreboardConsole\config.yaml" -data "%LOCALAPPDATA%\ScoreboardConsole\data" 会打印新的随机密码,并要求下次登录强制改密。

Q3:访客和录入员有什么区别? 访客只能只读查看;录入员可以录入、存草稿、发布、撤销发布、确认破纪录、做积分调整、控制大屏;管理员在此基础上还能管理用户、备份、看审计日志、导入规则包和赛事包。

Q4:为什么登录后还是只读? 可能未登录成功、会话已过期(有效期 12 小时),或页面处于示例数据模式。看右上角是否显示账号名与角色。

Q5:可以建「访客账号」吗? 不可以。访客是未登录时的默认身份,不需要也不允许建账号;可落库的角色只有管理员和录入员。

Q6:管理员能改用户名吗? 管理界面里账号创建后不可改;命令行可用 scoreboard.exe passwd -user 旧名 -new-username 新名 修改。


成绩与积分

Q7:为什么录入后大屏没变化? 草稿不上屏。需要「发布」(或 Alt+Enter),发布后 1 秒内大屏更新。

Q8:发布错了怎么改? 撤销发布 → 修改 → 重新发布。撤销会作废该组积分流水,大屏回退到发布前状态,过程可在「变更历史」查看。

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 计入。
  • 改完口径、要让已发布的成绩按新口径重算,需要对该组撤销发布 → 重新发布(草稿不受影响,改口径本身在点选时就已保存);发布之前可以先看右侧「实时积分预览」,它已经按新口径显示各单位的分数变化。
  • 报名表里 status 不是 registered 的报名项(弃赛 / 取消资格)既不算分子也不算分母。

Q16:某个单位一个人都没有效成绩,团体项目怎么算? 看该小项的「平均值口径」:

  • 只算有效成绩(默认):这个单位不参与团体排名、不得分(不会按 0 分排到最后、占掉一个名次);
  • 全部报名人员都计入:按平均 0 参加排名,通常排最后;这个名次若不在团体积分模板的录取范围内,同样不得分,但会占掉一个名次、影响后面单位的录取。

Q17:团体项目可以只给单位报名、不填队员吗? 可以。「基础数据 → 报名导入 → 从已有名单勾选报名」分成「个人报名」「团体报名」两个页签,团体 / 对抗 / 「个人+团体」小项默认停在「团体报名」:从已配置的参赛单位里勾选参加本组别的单位(默认一个都不勾),每个勾选的单位各建一条报名,一个队员都不勾就是纯单位报名,队员名单之后还能再补。

  • 要登记队员就点该行的「登记队员」展开勾选(可按姓名 / 工号搜索),提交时队员名单按列表顺序写入;
  • 勾选已报名的单位时该行会提示「提交将清空原名单」:再次提交是用本次登记的队员覆盖原名单,一个队员都不勾就等于清空;
  • 「全选」只勾启用中且还没报名的单位,已停用的单位要单独勾;
  • 选中小项后页签会自动切到与该小项类型相符的一边,也可以手动切换,页面会提示「生成的报名行以当前部分为准」。

Q18:改了「榜单口径」的折算系数,为什么单位总分没变 / 变了? 「基础数据 → 积分模板 → 榜单口径(全局)」里的个人项目得分折算系数(键名 standings.individual_to_team_weight,默认 1)作用在汇总环节:单位总分 = Σ 只记单位的流水 + 系数 × Σ 记到个人的流水。流水里存的是原始分、折算在生成榜单时做,所以点「保存榜单口径」后单位总分与单位积分明细立刻按新系数变化,不需要重新发布,大屏也会跟着刷新。

改完看不出变化,通常是这几种情况:

  • 单位总分里本来就没有「记到个人的流水」:团体 / 对抗项目走单位通道,或者该小项的个人通道被关掉了「计入单位总分」(「个人+团体」的个人通道就是这样),这些分不受系数影响;
  • 只有部分单位有个人得分,变的只是那几家;
  • 系数没存上:系数必须大于 0(0 与负数服务端会直接拒绝),输入框允许 0–100、步进 0.1,保存成功会提示「榜单口径已保存」;
  • 当前账号不是管理员:赛事设置接口只对管理员开放,非管理员读不到当前系数,卡片上会写明是只读。

导入规则包时,规则包里的同名配置会覆盖这里的取值。

Q19:破纪录加分为什么点不了? 规则包里破纪录加分默认关闭(recordBonus.enabled = false)时按钮不可用;若当前角色读不到规则包,页面显示「未知」,可提交,由服务端校验决定是否加分。

Q20:人工调整为什么点不了? 规则包里人工调整默认关闭(manualAdjustment.enabled = false)时不可用;以页面顶部显示的开关状态为准。


大屏

Q21:大屏不亮 / 只有桌面怎么办? 检查 HDMI、扩展显示模式、Console「大屏窗口」状态,点「重新排布」;服务端未就绪时最多等 20 秒才开屏;单屏窗口化时按 F11 切全屏。详见 部署指南 · 故障排查。

Q22:单屏和多屏的显示方式有什么不同? 单屏时大屏以窗口化方式打开,按 F11 切全屏;多屏时除内置屏外每块屏一个 kiosk 全屏窗口,各锁一页,不响应 F11,也不接收鼠标。

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\ 一起拷(见 Q54)。


数据与备份

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\),需要另外归档。

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 库与赛事库各自计算。

Q40:怎么恢复备份? 没有一键恢复接口,需停机手工替换数据库文件:在 Console 里停止服务,到 <数据目录>\event_projs\<项目名>\ 把目标备份复制为 event.db(覆盖原文件),删掉同目录的 event.db-wal 与 event.db-shm,再启动服务,详见 部署指南 · 备份与恢复。

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)、团体奖牌榜卡片头的导出奖牌明细(团体奖牌明细.xlsx)、个人积分榜卡片头的导出个人明细(个人积分总明细.xlsx),以及展开单位后明细卡头的导出该单位明细(单位积分明细.xlsx)。另外可导出赛事项目包(zip)与规则包(YAML)。

Q44:导出文件保存在哪? 浏览器默认下载目录。服务端生成的临时包位于 data\exports\,下载完成后自动删除。

Q45:谁能导入规则包 / 赛事项目包? 只有管理员。两者都会整体替换数据:规则包导入后全量重算积分且不能一键撤销;赛事包覆盖同名项目前会二次确认。

Q46:导入赛事包后为什么看不到数据? 因为导入只把包解到数据目录,不会自动切换当前赛事。服务端启动时只打开一个赛事项目(启动参数 -project 指定的那个;没带参数时用上次切换记下的,从未切换过则是 default),页面上看到的是它的数据——通常是导入前那个空赛事,所以看着像「没导进去」。

处理办法:在「导出 → 赛事项目包」的赛事项目列表里找到刚导入的项目(导入完成的结果框里也直接给了「立即切换并重启服务端」按钮),点「切换为当前赛事」。服务端会退出并由服务管理窗口自动拉起,页面显示「正在重启服务端…」,恢复后自动刷新,数据就出来了。超过 60 秒仍未恢复时,请打开服务管理窗口确认服务端状态,待其显示「运行中」后手动刷新本页。

切换会让服务端重启,比赛进行中请避开操作。账号与会话不在赛事库里(见 Q42),一般不用重新登录;万一回到只读访客视图,登录一次即可,若原密码登不上就用 scoreboard.exe passwd 重置。导入的赛事包里如果带了自定义字体,切换过去后大屏直接可用,不用重新上传(见 Q36)。

Q47:导入规则包后积分变了,能撤销吗? 不能一键撤销。纠错需要重新导入旧规则包,或逐项修正后重新发布。导入前请务必先「预览差异」。

Q48:导入时提示证件号重复怎么办? 证件号与号码布是人员的两项唯一标识,系统不允许两个人员共用同一个证件号,用来区分重名。

  • 在「运动员」里新增 / 编辑时提示重复:说明该证件号已属于另一个人员。请先核对是不是同一个人:是,就直接用已有记录;不是,请检查证件号是否填错。已有历史数据可以没有证件号。
  • 表格导入时出现重复:分两种情况。同一份文件里同一个证件号重复出现,重复的行会报错并跳过,改好后重新上传;证件号在系统中已存在、但姓名、性别或单位不一致的,会列为「冲突」,本次不写入(报名也不会创建),需要在导入结果里勾选后逐条或多选决定「保留已有数据」还是「使用新数据」,没有做决定的人不会被写入。详细步骤见 使用手册 · 报名导入。

Q49:人员没有身份证,只有号码布,能报名吗? 可以。证件号与号码布二者取其一即可作为人员唯一标识:在「运动员」里只填号码布也能保存;报名表里有姓名的行,id_card 与 bib 至少填一个就能导入;从已有名单勾选报名时,两项里有一项就能勾选。号码布会同时写入人员档案与报名记录。

Q50:号码布重复了怎么办? 号码布和证件号一样是人员唯一标识,系统不允许两个人员共用同一个号码布。

  • 在「运动员」里新增 / 编辑时提示重复:说明该号码布已属于另一个人员。请先核对是不是同一个人:是,就直接用已有记录;不是,请检查号码布是否填错。
  • 表格导入时出现重复:同一份文件里同一个号码布重复出现,重复的行会报错并跳过,改好后重新上传;号码布在系统中已存在、但姓名、性别或单位不一致的,会列为「冲突」,本次不写入(报名也不会创建),需要在导入结果里勾选后决定「保留已有数据」还是「使用新数据」。详细步骤见 使用手册 · 报名导入。

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 模板」照着填,格式细节见 报名名单导入规范。
  • xlsx 不受影响,它自带编码信息。

其他

Q52:系统需要联网吗? 不需要。完全离线运行,不依赖外网,也不需要在现场安装任何运行时。

Q53:页面提示「示例数据」是什么意思? 表示后端未就绪,此时所有改动只停留在界面,不会写入真实赛事。恢复连接后刷新即可。

注意区分:顶部若只是显示「连接中断」,说明实时推送断了(数据可能不是最新),但写操作仍会照常提交给服务端并做校验。

Q54:为什么登录 / 写操作偶尔被拒绝? 系统有频率限制:登录每 IP 每分钟 5 次,写操作每用户每分钟 30 次。稍等一分钟再试。

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)是两回事。逐列说明见 报名名单导入规范。

Q60:为什么导入报 status「xxx」无法识别?

说明那一行的 status 填了系统不认的词(例如「已报到」「未参赛」)。这一行会被跳过并给出中文提示,其余行照常导入:

第 12 行:status「已报到」无法识别,只能填 registered / scratched / dq / dns(或留空)

改法:换成四个标准词之一(registered / scratched / dq / dns,大小写都行)或 Q59 里的中文别名,也可以直接留空(= 正常参赛),改完重新上传即可。对照表见 报名名单导入规范 · 常见报错怎么办。

Q61:参赛单位怎么彻底删除?和删运动员一样吗?

不一样,两个按钮同名、行为完全不同,现场别按错。「基础数据 → 参赛单位」每行有三个动作:编辑、停用(已停用的单位显示为「启用」)、彻底删除。点该行右侧红色的「彻底删除」,在确认框里核对提示后再点一次「彻底删除」即可,完成后该单位从列表里消失,页面提示「已彻底删除「XX」」。

一句话概括:删运动员是真删,删单位是假删。

运动员的「彻底删除」(见 Q57) 参赛单位的「彻底删除」
数据 人员档案连同报名、成绩、积分流水、破纪录记录一并从库里删掉 一条都不删,报名 / 成绩 / 积分 / 人工调整 / 纪录 / 名下运动员全部保留
榜单 重算受影响小项的排名与积分,删完榜单会变 积分榜不变,不触发任何重算
列表 从运动员名册里消失 从参赛单位列表里消失
恢复 恢复不了 界面上没有恢复入口;再次导入用到它的编码会自动回来(见 Q62)

想让某个单位暂时不参赛,用「停用」就够了:单位还在列表里,历史数据保留,随时能再启用。详细说明见使用手册 · 10.1 参赛单位。

Q62:删掉的单位怎么又出现在列表里了?

多半是导入带回来的:报名表里再次用到这个单位的编码(team_code),系统会把它原样复活——清掉删除标记、恢复成启用,重新出现在参赛单位列表里。因为单位编码是唯一的,系统按编码找到的就是原来那一行,所以不会新建第二个同名单位,原有的报名、成绩与积分也都还在。

这和人员的规则看着像、结果不同:删掉的人再次导入是以全新档案建档,旧数据不会回来(见 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)。另外「导出 → 结果导出」里的「单位积分明细」也能先选一个单位再导出。这些导出都是只读下载,访客也能用。

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 留空会把这一行原来的批次清掉,手工调整过批次的话重传前要在表里写清楚;
  • 完整说明见报名名单导入规范。

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 宽的窄屏,桌面端布局不受影响。