Commit Graph

4 Commits

Author SHA1 Message Date
cddf91d13a fix(admin): 中职/高职管理后台「Word」口径改为「大题分」并清理死列
问题(用户 2026-09-22 报障):
  管理后台 试卷管理 → 考生答题记录 中,
  ①「答题情况」显示的是「Word分」,与现行综合大题口径不符;
  ② 多出一列「Word 答案」(针对已废弃的 Word 上传通道,中职/高职恒为空)。

改动(5 处):
  ①「答题情况」列标签:Word分 → 大题分
  ② 删除整列「Word 答案」(含 hasWordFile 判断与下载按钮)
  ③ 评分弹窗 label:Word 答案分 → 大题分
  ④ 删除孤儿方法 downloadExamWord()(删除后已无调用者)
  ⑤ 成绩管理区中职/高职分支:删「Word文件」列,Word分 → 大题分
     (v-else 本科/教师分支的「文档分(Word)」保持不变)

影响面:仅中职/高职分支显示口径;本科/教师组 Word 通道不受影响。
   数据列仍为 contestants.word_score(历史列名沿用),仅文案口径调整。

验证:vite build EXIT=0(9.88s);产物指纹「大题分」1 次 /「Word分」0 /「Word 答案」0;
     GET /api/admin/submissions/zhongzhi 返回 6 行字段齐全,零回归。
2026-09-22 13:05:30 +08:00
c2551b64e8 feat(auth/exam): 登录重试同源 + 静默刷新透传 + 交卷链路加固(R5/R8)
前端重试与后端闸门同源(须成对上线)
- src/api/request.js: 新增 parseRetryAfterMs / computeLoginRetryDelayMs,
  退避取 max(指数退避, Retry-After) + ±20% 抖动 + 服务端值封顶;
  silent 透传(doSilentRefresh 不再吞掉 silent 标记)。
- src/api/auth.js / src/stores/auth.js: 登录 429 走同源重试;错误分类区分
  "TCP 未握手(可重试)"与"业务码失败(不可重试)"。
- src/stores/exam.js: 交卷链路顺序红线(取卷 -> 作答 -> submit-all 严格顺序),
  答案不丢 / 重复不脏 / 窗口不锁死。
- src/views/Competition.vue: 中职/高职综合大题区块(3 x textarea,2000 字上限
  与右下角计数);本科/教师组保留 Word 上传入口。

验证:源码抽取测试 8/8(含判别力自证:不读 header 的对照实现必 FAIL);
npm run build BUILD_RC=0(12.82s / 1711 modules);真实交卷端到端 code=0。
2026-09-22 09:17:06 +08:00
1bfe007149 feat: 综合大题改造(替代 Word 上传)+ MockExam 按组分支
中职/高职组以「综合大题」替代原 Word 文件上传:管理员在后台录入题干
(wangEditor 富文本,含表格),系统按组随机抽题,考生在 3 个小问内作答,
每小题 10 分、大题合计 30 分。

- api/admin.js / api/exam.js / stores/exam.js:大题题库 CRUD、抽题、作答与评分链路
- Competition.vue:Word 上传区块替换为大题作答区(3 小问 + 字数上限 + 富文本题干渲染)
- Admin.vue:大题题库管理、考生作答查看与人工评分
- MockExam.vue:按组分支——中职/高职显示综合大题,其余组保持 Word 答题;侧栏与提交提示同步
- RichEditor.vue + utils/richtext.js:题干富文本渲染前做白名单消毒(零依赖,纵深防御)

说明:big_questions / big_question_answers 建表迁移 023/024 随后端仓库提交。
2026-09-21 11:17:59 +08:00
WorkBuddy
e8f0195b61 chore: 前端首次基线提交
运行必须源码:src/、public/、index.html、package.json 及构建配置。
已忽略运行非必须:node_modules/、dist/、.env*。
2026-08-17 12:25:42 +08:00