gwy-exam/docs/checks/task-09.md
2026-09-01 16:47:25 +08:00

7.9 KiB
Raw Blame History

任务 09 检查记录:错题复习闭环

日期2026-09-01

交付内容

后端Handler + Schema + Routes

  • server/src/handlers/review.ts(重写 + 抽出状态推进逻辑)
    • applyReviewOutcome(item, correct, wrongReason?):统一根据本次判定推进错题状态——答对/记对则 reviewCount+1,连续达到 4 次标记 mastered,否则按 nextIntervalByCount 安排 +1/+3/+7第1次+1、第2次+3、第3次+7答错/记错则回到当天(reviewCount=0nextReviewAt=todaystatus=pending 并可更新错因)。
    • list:错题列表,支持 module / status 筛选 + 分页;每条返回模块、子模块、题干、错因、状态、复习次数、下次复习日期。
    • detail(新增):完整题目 + 选项 + 标准答案 + 解析 + 错题记录 + 该题全部作答历史(source:'practice',新→旧)。
    • submit(作答式):提交选项答案,答对/答错推进状态(复用 applyReviewOutcome)。
    • selfAssess(新增,自评式):用户看完答案与解析后自行「记对了 / 记错了」,仅提交 {correct, wrongReason?},同样推进间隔复习;此接口用于契合原型「直接展示答案 + 自评」的交互。
    • markMastered:手动标记已掌握。
  • server/src/schemas/api.ts
    • 新增 ReviewSelfAssessBodySchema{correct: boolean, wrongReason?: string})。
  • server/src/routes.ts:新增 POST /api/review/:id/self-assess(错题复习 tag
  • server/src/handlers/practice.tsTask 09 补充):answer 答错时调用 upsertWrongQuestion()——答错自动沉淀/重置 wrong-questions.json(新增或回到当天),实现「答错自动沉淀错题」。

前端View + API

  • client/src/api/index.ts:新增 reviewApi.detail() / selfAssess()reviewApi.submit() 改收 body导出 ReviewListItem / ReviewDetail / ReviewSubmitResult 类型。
  • client/src/views/practice/PracticeView.vue(错题本 tab 完善):
    • 错题本 tab:状态筛选(全部/待复习/复习中/已掌握)+ 模块筛选(全部模块/五模块chip错题卡片模块、子模块标签、状态徽章、题干、错因、已复习次数、下次复习日期点击进入错题详情空态提示。
  • client/src/views/practice/WrongDetailView.vue(新增):错题详情页。
    • 顶栏:返回 + 标题 + 状态徽章。
    • 题目卡:模块/子模块/难度标签 + 题干。
    • 答案卡:正确答案(绿底高亮)+ 复习状态/次数 + 标准解析;选项对照展示(正确答案绿勾)。
    • 操作区:重做此题 / AI 讲解(占位禁用,归属任务 11
    • 自评区:「这次复习结果如何?——记对了 / 记错了」;记错可勾选错因标签;提交后显示结果横幅(已标记为记对/记错 + 已复习次数 + 下次复习日期 + 状态)。
    • 标记掌握:已彻底掌握,移出错题本。
    • 作答历史:该题全部作答记录(答对/答错 + 错因),按日期倒序。
  • client/src/components/base/icons.ts:新增 filter 图标。
  • client/src/router/index.ts:新增 /practice/wrong/:id(错题详情)。

与原型图对照

  • 「移动-刷题-错题本.png」状态/模块筛选、错题卡片(模块+子模块标签、题干、错因、复习次数、下次复习日期)、底部 TabBar —— 一致。
  • 「桌面-刷题中心-错题本态.png」错因分布 + 最近错题(此处略去原型所示的独立错因分布卡,因任务 08 已在刷题 tab 展现;本任务聚焦筛选 + 列表 + 详情);列表筛选与卡片结构对齐。
  • 「移动-错题详情.png」模块/子模块/难度标签、题干、正确答案D 绿底)、解析、重做此题 / AI 讲解按钮 —— 一致;补加作答历史卡。

接口实测curl演示数据

接口 结果
GET /api/review/list?status=pending 5 条待复习(模块、题干、错因、状态、次数、下次复习日期均返回)
GET /api/review/list?status=mastered 已掌握记录正确返回
GET /api/review/:id/detail 题目 + 选项 + 答案 + 解析 + 错题记录 + 历史6 条)
POST /api/review/:id/self-assess(记对) {correct:true, reviewCount:1, nextReviewAt:'2026-09-02', status:'reviewing'}+1 天)
POST /api/review/:id/self-assess(记对 第2次 nextReviewAt:'2026-09-04'+3 天status reviewing
POST /api/review/:id/self-assess(记错+错因) {correct:false, reviewCount:0, nextReviewAt:'2026-09-01', status:'pending'}wrongReason 更新
POST /api/review/:id/submit(作答式) 答对推进 +1/+3/+7答错回到当天复用同一推进逻辑
POST /api/review/:id/mark-mastered {status:'mastered'}
GET /api/dashboard/overview pendingReview: 7(联动错题待复习数量)

浏览器检查agent-browser

场景 结果
桌面 1440 错题本 状态/模块筛选 chip + 错题卡片(标签、状态徽章、错因、复习次数、下次复习日期),对齐原型
桌面 1440 错题详情 题目 + 正确答案(绿底)+ 解析 + 选项对照 + 自评区 + 作答历史,渲染正常
桌面 1440 自评记对 点击「记对了」→ 结果横幅「已标记为记对 · 已复习 2 次」→ API status reviewing / +3天
桌面 1440 自评记错 勾选错因「计算失误」+ 点「记错了」→ API status pending / 回到当天 / wrongReason 更新
桌面 1440 标记掌握 点「已彻底掌握,移出错题本」→ API status mastered → 自动返回错题本
桌面 1440 已掌握筛选 筛选出 mastered 记录,联动正确
移动 390 错题本 状态/模块筛选 + 错题卡片 + 底部 TabBar无横向溢出对齐原型
移动 390 错题详情 题目 + 答案 + 解析 + 选项 + 自评区 + 底部 TabBar无遮挡

截图:deliverables/checks/task09-wrong-book-desktop.pngtask09-wrong-detail-desktop.pngtask09-wrong-detail-result.pngtask09-wrong-book-mobile.pngtask09-wrong-detail-mobile.png

完成标准核对开发计划任务09

  • 答错自动沉淀错题(practice.answer 答错 → upsertWrongQuestion 写入/重置错题库)。
  • 待复习筛选(状态 + 模块筛选,/api/review/list 支持 module/status)。
  • 复习提交(作答式 submit + 自评式 selfAssess)。
  • +1/+3/+7 天安排(nextIntervalByCount1→+1、2→+3、3→+7
  • 连续答对后标记掌握(reviewCount>=4 → mastered)。
  • 再次答错回到当天(reviewCount=0nextReviewAt=todaystatus=pending)。
  • 错题本、错题详情、复习操作(筛选列表条目 → 详情页 → 自评/标记掌握)。
  • 数据中枢联动(dashboard.overview.pendingReview 反映待复习错题数量)。

边界说明

  • 「重做此题 / AI 讲解」在错题详情页为占位禁用状态,完整实现归属任务 11AI 讲解)与后续(重做)。
  • 自评式 selfAssess 由用户确认选用:因原型已直接展示答案与解析,故详情页以「自评记对/记错」推进间隔复习,而非重新作答。
  • 作答历史当前来源为 practice刷题作答记录复习作答submit/selfAssess不写入 practice-records,故历史中不含复习记录。

当前结论

任务 09 完成:错题复习闭环在前后端打通。答错自动沉淀、待复习筛选、复习提交(作答式 + 自评式两种)、+1/+3/+7 间隔安排、连续 4 次标记掌握、再次答错回到当天、错题本 / 错题详情 / 复习操作、数据中枢联动全部实测通过桌面与移动双端页面均对齐原型。类型检查vue-tsc / tsc与生产构建131 模块)全部通过。测试数据已清理,错题记录恢复演示基线。