gwy-exam/docs/checks/task-06.md

86 lines
8.0 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.

# 任务 06 检查记录:计划、个人中心、设置与要闻
日期2026-09-01含演示数据初始化后的二次校准
## 交付内容
### 后端Handlers + Service + Schema + Routes
- `server/src/handlers/plans.ts`
- `createTask`:从纯返回对象改为 `updateData` 持久化写入 `study-plans.json`
- `toggleTask`:写入新状态后返回。
- 新增 `review()`(周报复盘):返回 `weekStart/weekEnd/studyMinutes/answered/correct/accuracy/taskDone/taskTotal/weekNumber/streakDays/checkedInToday/weakPoints/wrongReasons/suggestions`
- 内部辅助:`buildSuggestions()`(自动生成下周建议)、`computeReasons()`(错因聚合)。
- `server/src/handlers/profile.ts``patchProfile`/`patchSettings` 从返回合并对象改为 `updateData` 持久化;`DEFAULT_SETTINGS` 增加 `preferredDifficulty`/`learningReminder`/`mockPush`
- `server/src/handlers/news.ts``importJson` 实现指纹去重(标题+分类+发布时间)+ 写库;`importRss/importApi/importUrl` 保留占位(`failed: 1` + 明确 message
- `server/src/services/stats.ts`:新增 `currentWeekRange()`(自然周周一为起点)和 `computeWeeklyOverview(records, plans)`(本周作答数/正确数/正确率/分钟数/任务完成数)。
- `server/src/schemas/api.ts`:新增 `PlanReviewResponseSchema`(含 `streakDays`/`checkedInToday` 等字段)。
- `server/src/schemas/entities.ts``StudyPlanSchema` 增加 `note?: string``SettingsSchema` 增加 `preferredDifficulty`/`learningReminder`/`mockPush`(均可选)。
- `server/src/routes.ts`:新增路由 `GET /api/plans/review`tags: 备考计划),路由数 31 → 34。
- `server/src/data/seed.ts`:扩充演示要闻至 5 条(覆盖 公告/联考/政策/时政/政治 分类),更新 settings 默认值(含新字段)。
- `server/src/types/index.ts``StudyPlan` 类型增加 `note?: string`
### 前端Views + Router + Utils + API
- `client/src/utils/markdown.ts`(新建):自包含轻量渲染器,先 `escapeHtml` 转义再渲染,支持标题/段落/加粗/斜体/行内代码/有序无序列表/引用块/链接/分割线(不引入第三方依赖)。
- `client/src/utils/format.ts`:新增 `weekOfYear`/`weekdayName`/`formatDateWeekday`/`timeAgo`/`daysSince`
- `client/src/api/index.ts`:新增类型 `PlansToday`/`PlansWeek`/`PlanReview`/`StudyPlanItem`/`NewsItem`/`ImportResult``plansApi` 新增 `review()`
- `client/src/views/plan/PlanView.vue`(重写):桌面(页头+4 指标卡+今日任务+本周安排+周报复盘/新建任务按钮)、移动(今日计划列表+本周计划进度+周报复盘入口+明日预告新建任务弹层Teleport 模态);模块字段改为五大模块下拉(解决类型枚举问题)。
- `client/src/views/plan/PlanReviewView.vue`(新建):页头返回按钮、周区间、本周刷题/正确率汇总、本周薄弱考点 Top 3、错因分布语义色进度条、下周建议。
- `client/src/views/profile/ProfileView.vue`(重写):桌面(头像卡+设置+备考概览+备考里程碑+本周学习建议)、移动(头像卡+概览+设置入口+学习建议onMounted 时 `profile.fetch()` 加载真实昵称/目标/备考天数。
- `client/src/views/settings/SettingsView.vue`(重写):刷题设置(每日提醒时间/题库难度偏好/默认答题时长)、偏好设置(目标分数/考试日期)、通知(学习提醒/模考成绩推送开关、AI 配置状态、关于与版本;`watch` 从接口初始化表单,`save()` 同时 PATCH settings 和 profile。
- `client/src/views/news/NewsView.vue`(重写):分类 Tab全部/公告/联考/政策/时政/申论)、置顶深蓝卡、列表卡(分类徽章+来源+相对时间、导入弹层JSON/RSS/API/URL 四 Tab
- `client/src/views/news/NewsDetailView.vue`新建返回按钮、hero 卡(分类徽章+标题+来源日期)、`v-html="renderMarkdown(content)"` 渲染正文。
- `client/src/router/index.ts`:新增路由 `/plan/review`PlanReviewView`/news/:id`NewsDetailView
## 对照原型图(结构核对)
| 原型要素 | 实现 |
|---|---|
| 桌面-备考计划:页头标题+「备考第 93 天」+ 周报复盘/新建任务按钮 | ✅ |
| 桌面-备考计划:本周任务 / 学习时长 / 完成率 / 连续打卡 4 指标卡 | ✅ |
| 桌面-备考计划:今日任务(完成态+待完成态,含「待完成」标签与分类徽章) | ✅ |
| 桌面-备考计划:本周安排(周一至周日,含暂无安排) | ✅ |
| 移动-备考计划:今日计划列表 + 本周计划进度条(60%) + 周报复盘入口 | ✅ |
| 桌面-我的:头像卡(昵称/目标/备考天数)+ 设置 + 备考概览 + 备考里程碑 + 本周学习建议 | ✅ |
| 移动-我的:头像卡 + 概览四指标 + 目标分数设置 + 本周复盘/时政要闻入口 + 学习建议 | ✅ |
| 桌面-设置:刷题设置 / 偏好设置 / 通知 / AI 配置状态 / 关于与版本 | ✅ |
| 移动-设置:保存设置 + 刷题设置 + 偏好设置 + 通知 | ✅ |
| 桌面-要闻:分类 Tab + 置顶深蓝卡 + 列表卡(徽章+来源+相对时间) | ✅ |
| 移动-要闻:分类 Tab + 置顶卡 + 列表卡 + TabBar | ✅ |
| 要闻详情hero 卡 + Markdown 渲染正文 | ✅ |
## 接口实测curl数据重置后
| 接口 | 结果 |
|---|---|
| `GET /api/plans/today` | 今日任务 3 个(言语理解 done / 资料分析 pending / 错题复盘 pending |
| `GET /api/plans/review` | `weekStart 2026-08-31 / weekEnd 09-06 / studyMinutes 43 / answered 14 / correct 8 / accuracy 57 / taskDone 3 / taskTotal 5 / weekNumber 35 / streakDays 6 / checkedInToday true`、weakPoints行程问题×2、wrongReasons4 条、suggestions3 条) |
| `POST /api/plans/tasks` | 创建任务(含 note 持久化,写入 study-plans.json |
| `PATCH /api/plans/tasks/:id/toggle` | 切换任务状态并写库 |
| `GET/PATCH /api/profile` | 返回/更新 nickname/examDate/targetScore/startedAt |
| `GET/PATCH /api/settings` | 返回/更新含 `aiConfigured` 等字段 |
| `GET /api/news/list` | `total 5`,覆盖 公告/联考/政策/时政/政治 |
| `GET /api/news/:id` | 返回标题/分类/来源/`content`Markdown 原文) |
| `POST /api/news/import/json` | `success 1`,指纹去重(标题+分类+时间)写库 |
| `POST /api/news/import/rss` | 占位反馈:`failed 1` + message「RSS 解析器尚未配置…」 |
| `GET /api/dashboard/overview` | 正确反映任务状态(今日 tasks 2/4、targetScore 72 |
## 浏览器检查agent-browser数据重置后
| 场景 | 结果 |
|---|---|
| 桌面 1440计划/我的/设置/要闻/要闻详情/周报复盘 | 均渲染干净演示数据(昵称「备考人」、目标 72 分、要闻 5 条无测试新增) |
| 移动 390计划/我的/设置/要闻/要闻详情/周报复盘 | 均渲染正确;`scrollWidth 380 ≤ 390` 无横向溢出 |
| 要闻详情 | Markdown# / 加粗 / 引用 / 列表)正确渲染 |
| 数据持久化 | 删除 data/*.json 重启后 seed 重新写入演示数据,昵称/目标/要闻恢复初始状态 |
截图:`deliverables/checks/task-06-{plan,profile,settings,news,newsdetail,review}-{desktop,mobile}.png`
## 完成标准核对
- ✅ 任务状态变更能影响首页统计dashboard overview 的 todayTasks 随 toggle 更新)。
- ✅ 设置刷新后保留PATCH settings 持久化到 JSON重启后读回
- ✅ 要闻详情支持 Markdown自写渲染器无第三方依赖
- ✅ RSS/API/URL 入口返回明确占位反馈(`failed 1` + 明确 message
- ✅ 计划任务创建/切换持久化study-plans.json
- ✅ 页面布局与原型图结构、内容、样式对照一致PC 与 Mobile 双端)。
## 当前结论
任务 06 完成并按原型图校准:计划、个人中心、设置与要闻四个页面(含周报复盘、要闻详情 Markdown、导入占位在前后端打通并持久化双端渲染与原型结构对齐接口实测、类型检查、生产构建全部通过。