家长概览「待掌握错题」卡片当前不可点击,设计为新建 /parent/wrongbook?kid=xx 页面(仅展示未掌握错题、家长可标记已掌握), 复用孩子端 WrongRow 组件,家庭归属防越权。 Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
家长中心「待掌握错题」查看 - 设计文档
日期:2026-08-18 状态:已批准
背景
家长中心「学习概览」tab 有一张「待掌握错题」计数卡片(显示某个孩子未掌握错题数 wrongOpen),
目前不可点击。家长希望点击后能查看该孩子的错题信息。
相关现状:
- 孩子端已有完整错题本页
/wrongbook(仅 child 角色可进),展示组件WrongRow含 题干/标准答案/用户作答/解答题作答照片,并可「标记已掌握」。 - 标记动作
toggleMastered(src/app/wrongbook/actions.ts)是 child 角色限定、按会话孩子 id 锁定。 - 提交
ab84bec移除了课程管理里的「孩子错题本」快照卡片,但概览 tab 的计数卡片仍在且不可点。
需求(已与用户确认)
- 点击概览页「待掌握错题」卡片 → 进入该孩子(当前选中孩子)的错题查看页。
- 页面只展示待掌握(未掌握)的错题,不含已掌握。
- 家长可以「标记已掌握」,返回概览后计数同步下降。
- 页面内不需要孩子切换(看别的孩子需返回概览重新点)。
方案选择
- 方案 A(采用):新建家长版错题页
/parent/wrongbook?kid=<id>- 权限模型清晰(家长页 = 家庭归属校验),遵循现有
/parent/grammar、/parent/words目录模式; 孩子端逻辑零改动。
- 权限模型清晰(家长页 = 家庭归属校验),遵循现有
- 方案 B(弃):放开孩子端
/wrongbook允许家长进入 → 孩子页面被家长/孩子两套模式搅乱。 - 方案 C(弃):概览页内点击后同页展开列表 → 破坏日历布局,无法分享/刷新。
设计
1. 入口:src/app/parent/overview-tab.tsx
「待掌握错题」卡片包 <Link href={/parent/wrongbook?kid=${kid.id}}>,样式保留,加 hover 微动效。
2. 新页面:src/app/parent/wrongbook/page.tsx(server component)
- 鉴权:未登录
redirect("/login");非 parentredirect("/kid")(与其它家长页一致)。 - 从
searchParams.kid取孩子 id,校验familyId === 家长.familyId且role === child, 不合法一律redirect("/parent")—— 防越权查看别的家庭孩子。 - 数据:
listWrong(kidId)过滤mastered === false(复用现有 lib,不加新查询层)。 - 渲染:header「← 返回家长中心」+「待掌握错题」+ 孩子名 + 数量;无错题显示空态
(🎉 没有待掌握错题);每题复用
WrongRow,解答题作答照片(OSS 签名 URL)逻辑同孩子端。
3. 新 action:src/app/parent/wrongbook/actions.ts
markMastered(id: number, mastered: boolean):- 取会话家长,非家长直接 return;
- 按错题 id 查记录拿
childUserId; - 校验该孩子属于本家庭,否则 return;
- 调现有
setMastered(id, childUserId, mastered); revalidatePath("/parent")+revalidatePath("/parent/wrongbook")。
4. 组件复用:src/app/wrongbook/wrong-row.tsx
WrongRow增加可选 propmarkAction?: (id: number, mastered: boolean) => Promise<void>, 缺省走现有孩子端toggleMastered;家长页传入markMastered。- 孩子端行为零变化;家长版因只过滤未掌握,revalidate 后已标记行自然消失, 组件内不加任何分支逻辑。
5. 不改动
- DB schema(wrongBook 表已含 mastered 字段)
- src/lib/wrongbook.ts(listWrong / setMastered 已够用)
测试清单(手工,项目无自动化测试框架)
- 家长登录 → 点卡片 → 看到该孩子待掌握错题(含解答题照片)。
- 标记已掌握 → 行消失;返回概览计数 -1。
- 多孩子:选中 A 孩子进入 A 的错题;篡改
?kid=为别的家庭孩子 → 被重定向回/parent。 - 全部掌握后 → 🎉 空态。
- 孩子账号 / 未登录访问
/parent/wrongbook→ 正确重定向。 - 部署 jump.hn12301.net 后线上复验。