feat(export/dashboard): 导出增强与大屏公开化
导出-每次考试/多考试对比: - 合格次数阈值等标记项抽为常显区块,三类成绩表共用 - 附缺考名单扩展到多考试导出(取所选考试全都没交的人) - 块表每场固定2列(成绩+合并空位),修复漏推空串导致的整行左移/串列 - 列宽按实际内容估算,合并区空位只给最小宽度 - 合格次数始终显示实际次数(含0),仅 ≥ 阈值标绿底 - 打印标题改为「成绩明细」,缺考名单分页单独成页 - 打印样式加 print-color-adjust:exact,绿底/红字可正常印出 数据大屏: - ?class= 班级大屏免登录公开访问,接口侧放行并按班级裁剪后回传 - 单班大屏移除退出按钮,仅首页保留 - 修复红绿判定真bug:membersTable 误用 window.DASH(DASH为let声明取不到) 改为 scoreGrade() 直接读自由变量,按后台合格率正确判红/黄/绿 测试/样例/文档同步更新,全量回归通过。
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="utf-8">
|
||||
<title>数据大屏首页(预览)</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<link rel="stylesheet" href="../../assets/style.css">
|
||||
<style>
|
||||
/* 预览页专属:补上 hero 里样式类所需的小件(原页面由 dashboard.php 内联给出) */
|
||||
.brand-text{display:flex;flex-direction:column;gap:2px}
|
||||
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--border-2);vertical-align:1px}
|
||||
.dot.on{background:var(--ok)}
|
||||
.dot.stale{background:var(--danger)}
|
||||
.spacer{flex:1}
|
||||
.preview-tip{margin:12px 0 0;padding:8px 12px;border:1px dashed var(--border);border-radius:var(--radius);
|
||||
font-size:12px;color:var(--text-3);background:var(--panel-weak,#f7f8fc)}
|
||||
</style></head>
|
||||
<body class="dash dash-home">
|
||||
<div class="wrap">
|
||||
<div class="dash-hero">
|
||||
<div class="brand"><h1 class="brand-title">NY问卷考试系统数据平台</h1></div>
|
||||
<div class="dash-controls">
|
||||
<select id="projectSel"><option value="p1">高一数学月考(31 份)</option></select>
|
||||
<span id="classSelWrap"><select id="classSel" disabled><option value="">请先选问卷</option></select></span>
|
||||
<label class="switch"><input type="checkbox" id="autoRefresh" checked><span></span></label>
|
||||
<select id="intervalSel"><option value="15" selected>15 秒</option></select>
|
||||
<button class="btn" id="btnRefresh">刷新</button>
|
||||
<button class="btn" id="btnFullscreen">⛶ 全屏</button>
|
||||
<a class="btn back" id="linkIndex" href="index.php">← 主系统</a>
|
||||
<a class="btn back" id="linkLogout" href="logout.php">退出</a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top:14px;font-size:12px;color:var(--text-3);display:flex;align-items:center;gap:6px;flex-wrap:wrap;">
|
||||
<span id="heroSub">共 4 个班级 · 点击卡片进入该班大屏</span>
|
||||
<span class="spacer"></span>
|
||||
最后更新:<span id="lastUpdate">2026-09-27 20:57:25</span><i id="liveDot" class="dot on"></i>
|
||||
</div>
|
||||
<div class="preview-tip">静态预览:这张页面由生产环境 dashboard.php 的 <code>clsCardHtml()</code> 渲染,
|
||||
数据取自 mock 卷王。真实站点上点卡片会整页跳转到 <code>dashboard.php?pid=…&class=…</code>,
|
||||
进入该班独立大屏(那里不再有班级选择、返回主系统与退出,浏览器后退键也被锁住)。</div>
|
||||
<div id="board">
|
||||
<section class="cards" id="boardSummary">
|
||||
<div class="card accent-blue"><span>总人数</span><b>0</b></div>
|
||||
<div class="card ok accent-green"><span>已提交</span><b>0</b></div>
|
||||
<div class="card warn accent-orange"><span>缺考</span><b>0</b></div>
|
||||
<div class="card accent-teal"><span>平均分</span><b>-</b></div>
|
||||
<div class="card accent-indigo"><span>合格率</span><b>-</b></div>
|
||||
</section>
|
||||
<div class="sec-title" id="boardTitle">班级入口 <span class="tag-gray">点击卡片进入该班独立大屏</span></div>
|
||||
<div id="boardBody"><div class="cls-grid"><div class="cls-card" data-cls="高一(1)班" role="button" tabindex="0" title="点击进入「高一(1)班」的独立大屏"><div class="cls-head"><span class="cls-name">高一(1)班</span><span class="cls-go">进入 ›</span></div><div class="cls-kpis"><div class="cls-kpi "><span>总人数</span><b>2</b></div><div class="cls-kpi k-ok"><span>已提交</span><b>2</b></div><div class="cls-kpi "><span>缺考</span><b>0</b></div><div class="cls-kpi "><span>平均分</span><b>81</b></div><div class="cls-kpi k-ok"><span>合格率</span><b>100%</b></div></div><div class="cls-bar"><i style="width:100%;background:var(--ok)"></i></div><div class="cls-sub"><span>提交率 100%</span></div></div><div class="cls-card" data-cls="高一(2)班" role="button" tabindex="0" title="点击进入「高一(2)班」的独立大屏"><div class="cls-head"><span class="cls-name">高一(2)班</span><span class="cls-go">进入 ›</span></div><div class="cls-kpis"><div class="cls-kpi "><span>总人数</span><b>1</b></div><div class="cls-kpi k-ok"><span>已提交</span><b>1</b></div><div class="cls-kpi "><span>缺考</span><b>0</b></div><div class="cls-kpi "><span>平均分</span><b>93</b></div><div class="cls-kpi k-ok"><span>合格率</span><b>100%</b></div></div><div class="cls-bar"><i style="width:100%;background:var(--ok)"></i></div><div class="cls-sub"><span>提交率 100%</span></div></div><div class="cls-card" data-cls="高一(3)班" role="button" tabindex="0" title="点击进入「高一(3)班」的独立大屏"><div class="cls-head"><span class="cls-name">高一(3)班</span><span class="cls-go">进入 ›</span></div><div class="cls-kpis"><div class="cls-kpi "><span>总人数</span><b>1</b></div><div class="cls-kpi k-ok"><span>已提交</span><b>1</b></div><div class="cls-kpi "><span>缺考</span><b>0</b></div><div class="cls-kpi "><span>平均分</span><b>90</b></div><div class="cls-kpi k-ok"><span>合格率</span><b>100%</b></div></div><div class="cls-bar"><i style="width:100%;background:var(--ok)"></i></div><div class="cls-sub"><span>提交率 100%</span></div></div><div class="cls-card" data-cls="高一(4)班" role="button" tabindex="0" title="点击进入「高一(4)班」的独立大屏"><div class="cls-head"><span class="cls-name">高一(4)班</span><span class="cls-go">进入 ›</span></div><div class="cls-kpis"><div class="cls-kpi "><span>总人数</span><b>1</b></div><div class="cls-kpi k-ok"><span>已提交</span><b>1</b></div><div class="cls-kpi "><span>缺考</span><b>0</b></div><div class="cls-kpi "><span>平均分</span><b>76</b></div><div class="cls-kpi k-ok"><span>合格率</span><b>100%</b></div></div><div class="cls-bar"><i style="width:100%;background:var(--ok)"></i></div><div class="cls-sub"><span>提交率 100%</span></div></div></div></div>
|
||||
</div>
|
||||
</div>
|
||||
<script>/* 预览页:把"全屏/刷新"按钮做成 plainly 不可点,仅示意版式 */
|
||||
document.addEventListener('DOMContentLoaded', function () {
|
||||
["#btnFullscreen", "#btnRefresh", "#projectSel", "#classSelWrap"].forEach(function (s) {
|
||||
var el = document.querySelector(s); if (el) el.setAttribute("disabled", "disabled");
|
||||
});
|
||||
});</script>
|
||||
</body></html>
|
||||
Reference in New Issue
Block a user