feat(export/dashboard): 导出增强与大屏公开化
导出-每次考试/多考试对比: - 合格次数阈值等标记项抽为常显区块,三类成绩表共用 - 附缺考名单扩展到多考试导出(取所选考试全都没交的人) - 块表每场固定2列(成绩+合并空位),修复漏推空串导致的整行左移/串列 - 列宽按实际内容估算,合并区空位只给最小宽度 - 合格次数始终显示实际次数(含0),仅 ≥ 阈值标绿底 - 打印标题改为「成绩明细」,缺考名单分页单独成页 - 打印样式加 print-color-adjust:exact,绿底/红字可正常印出 数据大屏: - ?class= 班级大屏免登录公开访问,接口侧放行并按班级裁剪后回传 - 单班大屏移除退出按钮,仅首页保留 - 修复红绿判定真bug:membersTable 误用 window.DASH(DASH为let声明取不到) 改为 scoreGrade() 直接读自由变量,按后台合格率正确判红/黄/绿 测试/样例/文档同步更新,全量回归通过。
This commit is contained in:
+26
-2
@@ -13,7 +13,30 @@ const PUB_B64 = Buffer.from(publicKey).toString('base64');
|
||||
const PASSWORD = 'surveyking';
|
||||
let TOKEN = '';
|
||||
|
||||
const roster = JSON.parse(fs.readFileSync(require('path').join(__dirname, '..', 'data', 'roster.json'), 'utf8')).students;
|
||||
/* 名单:优先用 data/roster.json(真实名单,答卷也按它生成)。
|
||||
没有该文件时用内置样例名单兜底,免得整个 e2e 因为缺文件连不上——
|
||||
mock 只关心名单的条数与姓名,真实字段由 demoRoster() 补齐。 */
|
||||
function demoRoster() {
|
||||
const out = [];
|
||||
const classes = ['高一(1)班', '高一(2)班'];
|
||||
const groups = ['A组', 'B组'];
|
||||
for (let i = 1; i <= 40; i++) {
|
||||
// 名字必须与下方 PARTNERS 的 userName 一致,否则答卷匹配不到名单
|
||||
const id = String(90000 + i);
|
||||
out.push({ sid: id, name: id, cls: classes[i % 2], grp: groups[i % 2] });
|
||||
}
|
||||
return out;
|
||||
}
|
||||
function loadRoster() {
|
||||
const p = require('path').join(__dirname, '..', 'data', 'roster.json');
|
||||
try {
|
||||
const list = JSON.parse(fs.readFileSync(p, 'utf8')).students;
|
||||
if (Array.isArray(list) && list.length) return { list, from: 'data/roster.json' };
|
||||
} catch (e) { /* 没有名单文件,走内置兜底 */ }
|
||||
return { list: demoRoster(), from: '内置样例名单(data/roster.json 不存在)' };
|
||||
}
|
||||
const ROSTER = loadRoster();
|
||||
const roster = ROSTER.list;
|
||||
|
||||
// 构造答卷:前 30 人提交,其中 2 人姓名有空格/错别字
|
||||
const answers = roster.slice(0, 30).map((s, i) => {
|
||||
@@ -153,5 +176,6 @@ const server = http.createServer((req, res) => {
|
||||
});
|
||||
|
||||
server.listen(19911, '127.0.0.1', () => {
|
||||
console.log('mock 卷王已启动 http://127.0.0.1:19911 密码=' + PASSWORD);
|
||||
console.log('mock 卷王已启动 http://127.0.0.1:19911 密码=' + PASSWORD
|
||||
+ '\n名单来源:' + ROSTER.from + '(' + roster.length + ' 人)');
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user