86 lines
8.0 KiB
Markdown
86 lines
8.0 KiB
Markdown
# 任务 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)、wrongReasons(4 条)、suggestions(3 条) |
|
||
| `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、导入占位)在前后端打通并持久化,双端渲染与原型结构对齐,接口实测、类型检查、生产构建全部通过。
|