Files
ny-exam-platform/docs/guide/dashboard.md
T
nxxy335 d05fd4a9b5 feat(export/dashboard): 导出增强与大屏公开化
导出-每次考试/多考试对比:
- 合格次数阈值等标记项抽为常显区块,三类成绩表共用
- 附缺考名单扩展到多考试导出(取所选考试全都没交的人)
- 块表每场固定2列(成绩+合并空位),修复漏推空串导致的整行左移/串列
- 列宽按实际内容估算,合并区空位只给最小宽度
- 合格次数始终显示实际次数(含0),仅 ≥ 阈值标绿底
- 打印标题改为「成绩明细」,缺考名单分页单独成页
- 打印样式加 print-color-adjust:exact,绿底/红字可正常印出

数据大屏:
- ?class= 班级大屏免登录公开访问,接口侧放行并按班级裁剪后回传
- 单班大屏移除退出按钮,仅首页保留
- 修复红绿判定真bug:membersTable 误用 window.DASH(DASH为let声明取不到)
  改为 scoreGrade() 直接读自由变量,按后台合格率正确判红/黄/绿

测试/样例/文档同步更新,全量回归通过。
2026-09-27 22:04:17 +08:00

108 lines
5.0 KiB
Markdown

# 数据大屏
数据大屏(`dashboard.php`)是**面向投屏 / 大屏**的汇总视图,适合考试进行中实时监控提交进度。
它有两种形态,由 URL 决定:
| 形态 | 打开方式 | 长什么样 |
| --- | --- | --- |
| **首页(班级入口)** | 从主页面顶部导航 **📊 数据大屏** 打开,或直接访问 `dashboard.php` | 先选试卷 / 考试,下方以卡片列出该卷的所有班级;点卡片进入该班大屏 |
| **单班大屏** | 点首页的班级卡片(等价于 `dashboard.php?pid=<问卷ID>&class=<班级名>`) | 只展示这一个班:5 张汇总卡 + 分组对比 / 成员榜 |
首页是"入口",不是概览页——它不堆指标,只做一件事:让你**一次看到有哪些班,点进去看单个班**。
## 单班大屏是公开的,可以直接发链接
`dashboard.php?pid=<问卷ID>&class=<班级名>` **不需要登录**,任何人打开都能看到这一个班的数据
(顶栏带「公开 · 无需登录」角标)。适合直接把链接发到班级群让孩子或家长自己看。
::: danger 公开的是"这一个班",不是全卷
接口在**服务端**先按 `class` 把名单和答卷裁剪掉,再回传数据:公开链接拿不到全卷汇总,
也拿不到其它班级的成绩。想看别的班,打开那个班自己的链接即可;不带 `class` 参数的
大屏首页仍然要求登录。
:::
::: warning 单班大屏没有回头路
单班大屏**不显示**班级下拉、「← 主系统」和「退出」,页面内部也不存在回到首页的链接;
浏览器**后退键同样被屏蔽**(页面加载后立刻 `pushState` 占位,任何 `popstate` 都再推回去)。
想回主系统或换班,请在地址栏改 URL,或关闭标签页重新从首页进入。
:::
## 顶部控件
| 控件 | 首页 | 单班大屏 |
| --- | :-: | :-: |
| 问卷 / 考试 | ✅ | ✅ 切换后若该班不在新卷名单里,会自动落到第一个班 |
| 班级 | ✅ | ❌ 由 URL 固定,不提供切换 |
| 自动刷新开关 + 间隔 | ✅ | ✅ |
| 刷新 | ✅ | ✅ |
| ⛶ 全屏 | ✅ | ✅ |
| ← 主系统 | ✅ | ❌ 由 CSS 隐藏 |
| 退出 | ✅ | ❌ 页面里不再渲染 |
::: tip 后台标签页会自动暂停
切换到其他标签页后看板会**停止轮询**,切回来时立即补拉一次数据并重新开始计时——
投屏时长开也不会在无人观看时反复请求卷王。自动刷新失败时,「最后更新」会显示
**刷新中断(仍显示上次数据)**,鼠标悬停可看到具体原因。
:::
## 首页:班级入口卡片
每张卡片给出该班的速览,点整张卡片(或聚焦后按回车)进入该班大屏:
`总人数 / 已提交 / 缺考 / 平均分 / 合格率` + 一条提交率进度条;没交过卷的班也能一眼看到缺考数。
::: tip 首页也在自动刷新
首页同样受自动刷新开关控制(默认 15 秒),卡片上的数字会跟着变,适合把整层楼/整个年级的
提交进度投在一块屏上。
:::
## 汇总卡片(单班大屏)
`总人数 / 已提交 / 缺考 / 平均分 / 合格率(≥X%满分)`
合格率卡片的阈值标签会随 [每卷配置](./project-config.md) 实时变化。
## 成绩的红绿怎么定的
成员榜(以及「刷 N 次」下钻弹窗)里的成绩颜色**完全按 [每卷配置](./project-config.md) 里
管理员设的满分与合格率**判定,不是写死的:
| 占满分的比例 | 颜色 |
| --- | --- |
| ≥ 90%(合格线本身高过 90% 时则以合格线为准) | 🟢 绿 |
| ≥ 合格率 × 满分(合格但未达优秀) | 🟡 黄 |
| < 合格率 × 满分(不及格) | 🔴 红 |
例如把本卷满分改成 150、合格率改成 80%,那么 100 分只占 66.7% → 判红,130 分(86.7%)判黄,
145 分(96.7%)判绿。鼠标悬停在分数上会显示「占满分 xx% 合格线 xx 分」。
## 班级 / 组别下钻
(即单班大屏的主体部分)
看板主体按**班级**分块,每块内再按**组别**对比,指标与统计口径完全相同:
总人数、已提交、缺考、提交率、平均分、合格率、最高分、最低分、平均用时。
点击考过多次的成员(带「刷 N 次」标签)可查看其**每一次提交**(时间、成绩、时长),最佳成绩有标记。
按 `Esc` 或点击弹窗外部可关闭。
> 未分班的人归入「(未分班)」,未分组的人归入「(未分组)」,不会丢失。
## 常见问题
### 全屏按钮点了没反应
- 浏览器要求全屏必须由**用户手势**触发,脚本自动调用 `requestFullscreen()` 会被拒绝;
- 退出全屏调用的是 `document.exitFullscreen()`(注意不是 `document.documentElement`),
平台已修正过这一点;
- 若页面被嵌在 `<iframe>` 中,需要给 iframe 加 `allowfullscreen` 属性。
### 数据不更新
确认自动刷新开关打开;若结果缓存时间较长,点 **刷新** 会带 `force=1` 跳过缓存。
## 相关
- [成绩明细与统计口径](./scores.md)
- [系统设置](./settings.md)