- 登录门:进入页面先输入系统网址/API路由/账号/密码,测试连接通过后才显示登录按钮,登录后才进入主界面;密码每次需输入,防止依赖一次配置直接查看数据 - 每套试卷独立满分配置(设置中按当前试卷单独设置,合格率按 ≥60% 满分计算) - 班级联动统计与面板计数(成绩明细/缺考名单标题计数随班级过滤) - 移除最高/最低分获得者显示 - 平均用时不换行(避免“秒”字换行) - 卷王地址默认 https://exam.nxxy335.top,默认勾选校验 HTTPS 证书 - 统计卡片含合格率(≥60% 满分) - .gitignore 排除 data/(账号密码/令牌/学生名单,禁止入库)
30 lines
794 B
JavaScript
30 lines
794 B
JavaScript
const fs = require('fs');
|
|
const path = require('path');
|
|
const engine = require('php-parser');
|
|
|
|
const parser = new engine({
|
|
parser: { suppressErrors: true, version: 803 },
|
|
ast: { withPositions: true },
|
|
});
|
|
|
|
const files = process.argv.slice(2);
|
|
let bad = 0;
|
|
for (const f of files) {
|
|
const code = fs.readFileSync(f, 'utf8');
|
|
try {
|
|
const ast = parser.parseCode(code, f);
|
|
const errs = (ast.errors || []).filter(e => e && e.message);
|
|
if (errs.length) {
|
|
bad++;
|
|
console.log('[SYNTAX] ' + f);
|
|
errs.slice(0, 5).forEach(e => console.log(' line ' + (e.line || '?') + ': ' + e.message));
|
|
} else {
|
|
console.log('[OK] ' + path.basename(f));
|
|
}
|
|
} catch (e) {
|
|
bad++;
|
|
console.log('[FAIL] ' + f + ' :: ' + e.message);
|
|
}
|
|
}
|
|
process.exit(bad ? 1 : 0);
|