Files
ny-exam-platform/docs/guide/faq.md
T
nxxy335 25a2e8a42c 文档部署到 /ny-exam-platform 子路径 + 移除快照/趋势/异常 + 打印与 UI 全面完善
文档站(#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;
  看板顶栏窄屏下拉与按钮换行,消除横向滚动
2026-09-11 16:23:08 +08:00

112 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 常见问题
## 连接与登录
**Q:提示"无法连接卷王系统"**
依次检查:
1. 卷王地址与端口是否正确、是否带多余的路径或结尾 `/`;
2. 服务器防火墙 / 安全组是否放行;
3. 接口前缀是否为 `/api`(企业版可能是 `/admin-api`);
4. 账号密码是否正确;
5. 在**平台所在服务器本机**执行 `curl http://127.0.0.1:19911/api/system` 验证卷王本身是否可达。
**Q:自己写的客户端登录成功却返回 401 "Full authentication is required to access this resource"**
卷王社区版 v1.13 的 `JwtTokenFilter` **只从 Cookie `sk-token` 读取令牌,不读 `Authorization` 头**。
务必从登录响应的 `Set-Cookie` 中取出 `sk-token`,并在后续每个请求带上
`Cookie: sk-token=<token>`。本平台已处理此细节。
**Q:登录一直失败并被锁住**
连续 5 次失败会锁定 10 分钟。等待即可;如需立即解锁,删除 `data/login_fail.json`。
**Q:卷王改了密码后平台一直提示未登录**
到 **设置** 里重新填写密码并保存(连接信息变化会自动清除本地令牌并重新登录)。
## 匹配与数据
**Q:读到了答卷但学号为空**
说明答卷里的姓名与名单不一致:
- 到 **姓名字段** 下拉里手动指定正确的题目;
- 或到 **设置 → 姓名题关键词** 里补充关键词;
- **未匹配答卷** 面板会列出这些人,可据此核对(常见原因是姓名前后有空格、用了别名)。
**Q:成绩列全是 `-`**
该问卷不是考试模式,或没有开启自动评分,卷王未返回 `examScore`。
**Q:考试时长全是 `-`**
答卷的 `metaInfo.answerInfo` 中没有开始 / 结束时间(例如后台手动录入的答卷)。
**Q:同一个人交了多次,看板里的成绩取哪次?**
由 **设置 → 同一学号去重** 决定代表成绩取「最新」还是「最高」。
但**考试次数始终是全部提交次数**,点击成员可查看每一次提交。
**Q:我想让某个学生不计入某张试卷的缺考**
用 [试卷设置 → 免考名单](./project-config.md#免考名单),只对该试卷生效,
不要从名单里删除(否则其它试卷也会少人)。
**Q:合格率是按 60 分算吗?**
不是写死的 60 分,而是「成绩 ≥ 满分 × 合格率阈值」。阈值全局默认 60%,
可在 [试卷设置](./project-config.md) 里为单张试卷覆盖。卡片标题会显示当前阈值。
**Q:切换班级后数字变了,是不是重新请求了服务器?**
没有。切班级是本地即时重算,不额外打卷王。
## 性能
**Q:人多的时候页面卡 / 后台刷新失败**
已内置以下优化:结果缓存(默认 15 秒)、虚拟滚动、搜索防抖、页面切到后台自动暂停刷新、
分页大小夹在 20–200。仍有问题时可适当调大「结果缓存(秒)」并调小刷新频率。
**Q:后台刷新报错 "Allowed memory size exhausted"**
拉取大量答卷时 PHP 内存不足。程序已把单页条数夹在 20–200,并在入口尝试把
`memory_limit` 提到 512M。若主机用 `php_admin_value memory_limit` 硬锁,
`ini_set` 会静默失效,需要改 `php.ini` 或 FPM 池配置。
## 存储与迁移
**Q:数据存在哪?**
启用 `pdo_sqlite` 时存在 `data/ny.db`(表 `ny_settings` / `ny_roster` / `ny_project_config`);
未启用时回落到 `data/config.json`、`data/roster.json`、`data/project_config.json`。
两者始终双写,切换不会丢数据。
**Q:可以把平台搬到另一台服务器吗?**
可以。整个目录复制过去,并把 `data/` 一起带上(里面有配置、名单、每卷配置),确保 `data/` 可写。
## 安全
**Q:上传的名单文件会被别人访问到吗?**
不会。上传文件落在 `data/uploads/`,扩展名白名单(`.xlsx` / `.xlsm` / `.csv` / `.txt`)、
随机文件名,且**解析完成后立刻删除**。另外请确保按
[部署加固清单](../security/hardening.md) 在 Web 服务器上屏蔽 `/data/` 目录。
**Q:为什么配置文件能被直接下载?**
说明 `/data/` 没有被屏蔽。Apache 下仓库会自动生成 `.htaccess`;
**nginx 不读 `.htaccess`**,必须显式加:
```nginx
location ^~ /data/ {
deny all;
return 404;
}
```
详见 [部署加固清单](../security/hardening.md)。