文档站(#88) - base 默认改为 /ny-exam-platform/,可用 DOCS_BASE=/ 覆盖本地预览 - 新增 DOCS_OUT 环境变量,避免构建时清空输出目录失败导致产物半截 - 新增 tools/docs-preview.js:按子路径重写路由的本地预览服务 - 删除 docs/guide/snapshot.md,同步清理全部相关文档 移除存快照 / 趋势 / 异常(#89) - 后端:删除 api.php 的 snapshot_save/list/delete/trend 四个 action 与 $WRITE_ACTIONS 中的同名条目;删除 lib/Snapshot.php 与自动加载注册; DataService 移除 detectAnomalies() 及其调用 - 前端:移除三个按钮与三个弹窗、相关 JS 处理与 state 字段 - 测试:移除对应用例,补充 5 条名单导入列识别断言(17+9+18+32+29+11 全过) 打印完善(#90) - 改用隐藏 iframe 输出,规避弹窗拦截;@page A4 支持纵向/横向 - 表头每页重复、行内不跨页断开、全表连续名次、可选「是否合格」列 - 分组小计(人数/平均/最高/最低/合格人数与合格率)、可附缺考名单另起一页 - 末尾签字栏;缺考名单打印改为同一套输出 UI / 交互 / Bug 修复(#91) - dashboard.php:补「← 主系统 / 退出」入口(此前全屏后无法离开); 修复成员下钻 onclick 里 JSON.stringify 双引号提前闭合属性导致点击报错, 改为 data-sid 事件委托;补 Esc 关弹窗;后台标签页暂停轮询、切回自动补拉; 刷新中断原因写入 title;数值字段统一兜底,避免 NaN / undefined% - draw.php / draw.js:结果表新增「登陆账号」列(导出前可核对,缺失显示 学号 ⚠); 弹窗只关最上层且支持 Esc;「全部」改为跟随候选池,手工改人数即解除; 候选池不足时给出明确提示;自定义比例框隐藏时清空,避免旧权重被误读 - app.js / dashboard.php:成绩着色改为按「占本卷满分的百分比」判断, 修复满分不是 100 时整列误标红 - style.css:数值列右对齐;新增 subbar、draw-stage-sub; 看板顶栏窄屏下拉与按钮换行,消除横向滚动
3.1 KiB
3.1 KiB
平台简介
NY 问卷考试系统数据平台是一个零第三方运行依赖的 PHP 8 应用,直接对接 卷王问卷系统(SurveyKing)社区版 v1.13 的开放 API。
它不改变卷王本身的任何数据,只读拉取答卷,然后在本地做「姓名 → 学号」关联、 统计聚合、导出与展示。
它能解决什么问题
卷王自带的考试统计偏"问卷视角",而实际教学/培训场景通常需要的是"名单视角":
- 谁没考(而不是谁考了)—— 需要拿完整名单去比对;
- 某个班 / 某个组的成绩分布如何 —— 需要按班级、组别切片;
- 同一个人考了多次,该看哪一次 —— 需要去重策略 + 完整的考试次数;
- 不同试卷满分不同 —— 需要每卷独立的满分与合格率;
- 成绩要交给教务系统 —— 需要干净的
.xlsx导出; - 要抽查 / 抽考 —— 需要可去重、可留痕的随机抽取。
功能总览
主系统 index.php
| 模块 | 说明 |
|---|---|
| 试卷切换 | 下拉选择卷王中的问卷 / 考试,自动拉取该卷全部答卷 |
| 姓名关联 | 自动识别答卷中的「姓名」题,也可手动指定字段;未匹配答卷单独面板 + 一键补入名单 |
| 统计卡片 | 名单总人数、已提交、缺考、平均分、最高分、最低分、合格率、平均用时;选择班级后全部联动 |
| 成绩明细 | 虚拟滚动(无分页)、点击表头排序、搜索(提示同步显示命中数)、考试次数、新提交绿色高亮(30 秒自动清除) |
| 缺考名单 | 名单中有但未提交的人,支持复制学号 / 姓名、打印(按班级分组) |
| 试卷设置 | 为当前选中的试卷单独设置满分 / 合格率 / 免考名单,试卷间互相隔离 |
| 导出 / 打印 | 成绩明细、缺考名单 .xlsx;成绩明细按成绩降序打印,支持分组小计、合格标记、附缺考名单、签字栏 |
数据看板 dashboard.php
大屏看板,适合投屏。支持全屏切换与自动刷新。
随机抽取 draw.php
从「学号名单」或「某试卷已提交人员」中随机抽取,支持:
- 按班级 / 组别筛选;
- 名额分配四种模式:按人数加权(默认)、各组均分、自定义比例、不分组;
- 排除已抽中(本次会话内去重)、排除管理(手动指定不参与的人);
- 历史批次留痕、白名单导入模板 / 白名单列表导出。
设计约束
- 零 Composer 依赖:不使用任何 PHP 第三方库,XLSX 读写、ZIP 打包均由仓库内代码完成;
- 不修改卷王数据:全程只读(登录 + 项目列表 + 答卷列表 + 答卷详情);
- 可降级:没有
zip扩展时用内置解析器读 xlsx;没有pdo_sqlite时自动回落到 JSON 文件存储; - 单目录部署:整个目录复制到站点目录即可,只需保证
data/可写。
