7.9 KiB
7.9 KiB
任务 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=0、nextReviewAt=today、status=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.ts(Task 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.png、task09-wrong-detail-desktop.png、task09-wrong-detail-result.png、task09-wrong-book-mobile.png、task09-wrong-detail-mobile.png。
完成标准核对(开发计划任务09)
- ✅ 答错自动沉淀错题(
practice.answer答错 →upsertWrongQuestion写入/重置错题库)。 - ✅ 待复习筛选(状态 + 模块筛选,
/api/review/list支持module/status)。 - ✅ 复习提交(作答式
submit+ 自评式selfAssess)。 - ✅ +1/+3/+7 天安排(
nextIntervalByCount:1→+1、2→+3、3→+7)。 - ✅ 连续答对后标记掌握(
reviewCount>=4 → mastered)。 - ✅ 再次答错回到当天(
reviewCount=0、nextReviewAt=today、status=pending)。 - ✅ 错题本、错题详情、复习操作(筛选列表条目 → 详情页 → 自评/标记掌握)。
- ✅ 数据中枢联动(
dashboard.overview.pendingReview反映待复习错题数量)。
边界说明
- 「重做此题 / AI 讲解」在错题详情页为占位禁用状态,完整实现归属任务 11(AI 讲解)与后续(重做)。
- 自评式
selfAssess由用户确认选用:因原型已直接展示答案与解析,故详情页以「自评记对/记错」推进间隔复习,而非重新作答。 - 作答历史当前来源为
practice(刷题作答记录);复习作答(submit/selfAssess)不写入practice-records,故历史中不含复习记录。
当前结论
任务 09 完成:错题复习闭环在前后端打通。答错自动沉淀、待复习筛选、复习提交(作答式 + 自评式两种)、+1/+3/+7 间隔安排、连续 4 次标记掌握、再次答错回到当天、错题本 / 错题详情 / 复习操作、数据中枢联动全部实测通过;桌面与移动双端页面均对齐原型。类型检查(vue-tsc / tsc)与生产构建(131 模块)全部通过。测试数据已清理,错题记录恢复演示基线。