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

90 lines
7.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.

# 任务 05 检查记录:数据中枢纵向闭环
日期2026-08-31含对照原型图的二次校准
## 交付内容
### 后端统计服务与接口
- `server/src/services/stats.ts`(统计唯一来源):`collectStudyDates`(当日学习行为日期集合)、`computeStreak`(连续打卡)、`dailyMinutes`(当日耗时)、`computeDaysToExam`(距离考试天数)、`computeMastery`(五大模块最近 30 天正确率)、`computeWeakPoints`(最近 7 天错题按子模块聚合 → 次数 + 错因)。
- `server/src/handlers/dashboard.ts``overview` 返回备考天数/距离考试天数/考试日期/目标分/连续打卡/今日是否打卡/今日时长/较昨日百分比/今日刷题/今日正确率/今日任务/待复习错题/今日新增错题等;`trends` 补齐每日 minutes新增 `mastery``weakPoints`。路由 31 → 33。
- `server/src/schemas/api.ts``DashboardOverviewResponseSchema` 扩展字段、`DashboardWeakPointsResponseSchema` 改为 `{ module, point, count, reasons }`
### 演示数据
- 题库 18 题覆盖五大模块(含行程问题/图形推理/增长率各多题);相对「今天」生成近 14 天作答记录、5 场模考54→67 上升趋势、7 条错题(覆盖 4 个子模块、含错因)。
### 前端数据中枢
- 侧栏(`router/nav.ts` + `DesktopLayout.vue`):「刷题中心」展开子菜单(刷题/错题本/申论),子项缩进;`router` 增加 `/practice/wrong``/practice/essay`
- `api/index.ts``dashboardApi` 增加 `mastery`/`weakPoints`
- 组件:`AppLineChart`SVG 折线 + 目标参考线)、`StatCard`(指标卡)、`MockTrendCard`(模考成绩趋势 + 稳定上升标签)、`MasteryCard`(掌握度)、`WeakPointsCard`薄弱考点compact 切换)、`TodayTasksCard`(今日任务 + 查看全部)。
- `DashboardView`:桌面「数据中枢」(页头标题+副标题+今日已打卡徽章 → 4 指标卡 → 模考趋势+今日任务 → 掌握度+薄弱考点)与移动「首页」(问候语 → hero 备考天数/距离国考 → 今日学习 → 三指标 → 开始刷题/今日计划 → 待复习错题 → 薄弱考点 → 最近模考)共用同一份后端数据,按 `isMobile` 条件渲染。
- `MobileLayout`:首页隐藏顶部栏标题(以问候语作为页头)。
## 对照原型图OCR 提取 + 结构核对)
使用 pymupdf + rapidocr 提取原型 PNG 文字与坐标,重建布局后逐项对齐:
| 原型要素 | 实现 |
|---|---|
| 桌面:页头「数据中枢」+「备考第86天距离国考还有96天已连续打卡12天」+「今日已打卡」徽章 | ✅ 副标题/徽章/连续打卡均真实计算 |
| 桌面4 指标卡(今日学习时长/今日刷题/待复习错题/今日任务,含子文案与语义色) | ✅ StatCard |
| 桌面:模考成绩趋势(折线+目标线+稳定上升标签+近N场 | ✅ MockTrendCard + AppLineChart |
| 桌面:今日任务(查看全部+列表) | ✅ TodayTasksCard |
| 桌面模块掌握度5 模块进度+百分比) | ✅ MasteryCard |
| 桌面:本周薄弱考点(子模块+次数) | ✅ WeakPointsCard(compact) |
| 桌面侧栏:刷题中心展开刷题/错题本/申论 | ✅ 子菜单 |
| 移动:问候语 + hero(备考天数/距离国考) + 今日学习 + 三指标 + 开始刷题/今日计划 + 待复习错题 + 薄弱考点(含错因) + 最近模考 | ✅ 全部落地 |
## 接口实测curl
| 接口 | 结果 |
|---|---|
| `GET /api/dashboard/overview` | `studyDays 92 / daysToExam 91 / examDate 2026-11-30 / target 72 / streak 6 / checkedInToday true / todayMinutes 25 / minutesDelta 39 / todayAnswered 8 / todayAccuracy 63 / tasks 1/3 / pendingReview 7 / todayNewWrong 2` |
| `GET /api/dashboard/mastery` | 言语 92% / 数量 36% / 判断 90% / 资料 22% / 常识 89% |
| `GET /api/dashboard/weak-points` | 行程问题(2·公式记忆不牢/审题不清)、图形推理(2)、增长率计算(2)、逻辑判断(1) |
| `GET /api/mock-exams/analysis` | records 67/64/61/58/54trend 54→67target 72 |
## 浏览器检查agent-browser
| 场景 | 结果 |
|---|---|
| 桌面 1440 | 侧栏子菜单、页头徽章、4 指标卡、模考趋势折线、今日任务、掌握度、薄弱考点均渲染 |
| 移动 390 | 问候语、hero、今日学习、三指标、CTA、待复习、薄弱考点、最近模考、TabBar`scrollWidth 380 ≤ 390` 无溢出 |
| 空状态 | 清空数据 → 「还没有学习数据」;恢复后正常 |
| 命令 | `server tsc``client vue-tsc``vite build` 均通过 |
截图:`deliverables/checks/task-05-desktop.png``task-05-mobile.png`
## 完成标准核对
- ✅ 有演示数据时指标、图表、任务、掌握度、薄弱考点全部可见。
- ✅ 清空数据显示合理空状态。
- ✅ 刷新后结果一致(数据均来自后端 JSON
- ✅ PC 数据看板与 Mobile 首页共用同一份后端数据。
- ✅ 页面布局与原型图结构对齐(含「模考成绩趋势」而非学习趋势)。
## 当前结论
任务 05 完成并按原型图二次校准:数据中枢桌面版与移动首页的结构、板块、字段均对照原型重建,统计计算真实接入后端数据。
# 任务 05 二次调整2026-08-31
## 完成了什么
依据原型图与《开发计划》完成任务 05「数据中枢纵向闭环」打通「后端统计计算 → 接口 → 前端页面」完整链路,并对照原型图二次校准了 PC 数据看板与 Mobile 首页的结构。
- **后端**:新增统计服务 `services/stats.ts`(连续打卡 / 每日时长 / 距离考试 / 模块掌握度 / 薄弱考点);扩展 `overview` 返回备考天数、距离考试、连续打卡、今日四项指标等;新增 `GET /api/dashboard/mastery``GET /api/dashboard/weak-points`(路由 31 → 33
- **演示数据**:题库 18 题覆盖五大模块,作答记录 51 条、模考 5 场(上升趋势)、错题 7 条(含错因),日期相对当天生成。
- **前端**:数据中枢页重做为五板块——页头(标题+副标题+打卡徽章、4 指标卡、模考成绩趋势、今日任务、模块掌握度、本周薄弱考点;移动首页为问候 + hero + 今日学习 + 三指标 + CTA + 待复习 + 薄弱考点 + 最近模考;侧栏加「刷题中心」子菜单。
## 关键决策
- 「趋势」按原型对应「模考成绩趋势」(来自模考数据),非学习趋势。
- 薄弱考点按原型改为「基于错题错因归因」聚合(最近 7 天,次数 + 错因),与「模块掌握度」(正确率)分离。
- 统计计算集中在后端 `services/stats.ts`,前端仅做展示型派生(如完成百分比、较上次差值)。
- 图表用自绘 SVG`AppLineChart`),不引入 ECharts延续「不引重依赖」约定。
## 验证结论
- 有数据时指标、图表、任务、掌握度、薄弱考点全部可见;清空数据显示空状态;刷新一致。
- 桌面 1440 / 移动 390 双端实测渲染正常移动无横向溢出typecheck / build 通过。
- 结构已逐项对照原型 OCR 结果对齐。