统计面板继续迭代
This commit is contained in:
@@ -1,13 +1,33 @@
|
||||
# 管理员登录记录与仪表盘数据拉取优化
|
||||
# 管理员登录记录与仪表盘/统计页改造
|
||||
|
||||
## Context
|
||||
- 管理端登录页存在“最近登录记录”体验需求,且需要确保不会保存失败登录或敏感信息(如密码)。
|
||||
- 管理端仪表盘/统计页存在通过 `fetch` 手写请求与鉴权头、与 `src/services/api.ts` 统一封装并存的情况,导致代码重复且行为不一致。
|
||||
- 管理端仪表盘指标卡片与统计模块需要重构:新增可点击的统计卡片与饼图展示,并新增“历史考试任务统计”(含分页与后端分页查询接口)。
|
||||
|
||||
## Goals / Non-Goals
|
||||
- Goals:
|
||||
- 管理员登录页仅在登录成功时写入最近登录记录(用户名 + 时间戳),且不保存密码。
|
||||
- 管理端页面统一使用现有的 `api`/`adminAPI`/`quizAPI` 访问后端,避免重复拼接 token 与重复处理响应格式。
|
||||
- 管理员仪表盘指标卡片重构:
|
||||
- 移除现有卡片:答题记录、平均得分。
|
||||
- 新增总用户数:实时数字;点击跳转 `/admin/users`。
|
||||
- 新增题库统计:饼图展示各题目类别占比;点击跳转 `/admin/question-bank`。
|
||||
- 新增考试科目:显示当前活跃科目数量;点击跳转 `/admin/subjects`。
|
||||
- 新增考试任务:饼图展示任务状态分布(已完成/进行中/未开始);点击跳转 `/admin/exam-tasks`。
|
||||
- 统计功能调整:移除题型正确率统计模块。
|
||||
- 新增历史考试任务统计:
|
||||
- 展示所有历史考试任务统计(非仅当前有效任务)。
|
||||
- 排序:按结束时间倒序。
|
||||
- 分页:每页 5 条,支持前后翻页。
|
||||
- 字段:与“当前有效考试任务统计”字段保持一致。
|
||||
- 需新增后端分页查询接口以支撑上述分页与排序。
|
||||
- 新增未开始考试任务统计:
|
||||
- 展示未开始的考试任务(开始时间晚于当前时间)。
|
||||
- 排序:按开始时间正序。
|
||||
- 分页:每页 5 条,支持前后翻页。
|
||||
- 字段:与“当前有效考试任务统计”字段保持一致。
|
||||
- 需新增后端分页查询接口以支撑上述分页与排序。
|
||||
- Non-Goals:
|
||||
- 不调整管理员鉴权机制(`adminAuth` 仍为简化实现)。
|
||||
- 不新增第三方图表库或引入新的前端数据层框架。
|
||||
@@ -17,10 +37,25 @@
|
||||
- 理由:仓库已存在稳定封装,减少重复与差异。
|
||||
- 决策:最近答题记录使用现有 `/api/quiz/records` 接口拉取(分页参数 `page=1&limit=10`)。
|
||||
- 理由:后端已实现管理员分页接口;前端无需再手写 `fetch`。
|
||||
- 决策:新增的仪表盘跳转路由以不破坏现有路由为前提,通过新增别名路由满足新路径需求。
|
||||
- `/admin/question-bank` 作为 `/admin/questions` 的别名路由。
|
||||
- `/admin/exam-tasks` 作为 `/admin/tasks` 的别名路由。
|
||||
- 决策:仪表盘新增数据优先由后端聚合提供,减少前端全量拉取与二次计算。
|
||||
- 题库类别占比:按题目类别聚合统计数量(用于饼图)。
|
||||
- 活跃科目数量:以“当前时间存在有效考试任务”的科目去重统计。
|
||||
- 任务状态分布:以任务开始/结束时间与当前时间对比划分已完成/进行中/未开始并聚合计数。
|
||||
- 决策:新增历史考试任务统计分页接口,返回统一响应包裹并携带 `pagination`。
|
||||
- 路径建议:`GET /api/admin/tasks/history-stats?page=1&limit=5`。
|
||||
- 返回结构:`{ success: true, data: ActiveTaskStat[], pagination: { page, limit, total, pages } }`。
|
||||
- 决策:新增未开始考试任务统计分页接口,返回统一响应包裹并携带 `pagination`。
|
||||
- 路径建议:`GET /api/admin/tasks/upcoming-stats?page=1&limit=5`。
|
||||
- 返回结构:`{ success: true, data: ActiveTaskStat[], pagination: { page, limit, total, pages } }`。
|
||||
|
||||
## Risks / Trade-offs
|
||||
- 统一到 axios 封装后,错误提示将由拦截器抛错路径主导。
|
||||
- 缓解:在页面层使用 `message.error(error.message)`,保持用户感知一致。
|
||||
- 历史任务统计若逐任务计算报表可能产生额外数据库开销。
|
||||
- 缓解:按分页限制任务数;必要时在模型层优化聚合 SQL 或缓存计算结果(仅服务端内存,不落地到业务表)。
|
||||
|
||||
## Migration Plan
|
||||
- 前端无数据迁移:登录记录仍存储在 localStorage,仅调整写入触发条件与读取方式。
|
||||
|
||||
@@ -3,11 +3,29 @@
|
||||
- [ ] 1.2 确保最近登录记录不包含密码等敏感字段
|
||||
- [ ] 1.3 确保选择历史记录仅回填用户名并清空密码
|
||||
|
||||
## 2. 仪表盘与统计页数据拉取
|
||||
- [ ] 2.1 仪表盘最近答题记录改为使用 `quizAPI.getAllRecords`
|
||||
- [ ] 2.2 统计页数据拉取改为复用现有 API 封装,移除手写 token 逻辑
|
||||
## 2. 管理员仪表盘改造
|
||||
- [ ] 2.1 重构指标卡片并移除“答题记录/平均得分”
|
||||
- [ ] 2.2 总用户数卡片支持点击跳转 `/admin/users`
|
||||
- [ ] 2.3 题库统计卡片使用饼图展示题目类别占比并跳转 `/admin/question-bank`
|
||||
- [ ] 2.4 考试科目卡片展示活跃科目数量并跳转 `/admin/subjects`
|
||||
- [ ] 2.5 考试任务卡片用饼图展示任务状态分布并跳转 `/admin/exam-tasks`
|
||||
- [ ] 2.6 新增“历史考试任务统计”并移除“当前有效考试任务统计”
|
||||
- [ ] 2.7 历史考试任务统计按结束时间倒序且分页每页 5 条
|
||||
- [ ] 2.8 新增“未开始考试任务统计”并按开始时间正序分页每页 5 条
|
||||
|
||||
## 3. 测试与校验
|
||||
- [ ] 3.1 补充可执行的前端单测覆盖登录记录写入逻辑
|
||||
- [ ] 3.2 运行 `npm run check` 与 `npm run build`
|
||||
## 3. 后端接口与聚合数据
|
||||
- [ ] 3.1 为仪表盘卡片新增聚合数据接口或扩展现有统计接口
|
||||
- [ ] 3.2 新增历史考试任务统计分页查询接口(含排序与分页参数)
|
||||
- [ ] 3.3 确保新接口返回符合统一响应结构并包含 `pagination`
|
||||
- [ ] 3.4 新增未开始考试任务统计分页查询接口(含排序与分页参数)
|
||||
|
||||
## 4. 统计页调整与数据拉取统一
|
||||
- [ ] 4.1 移除题型正确率统计模块
|
||||
- [ ] 4.2 统计页数据拉取复用现有 API 封装并移除手写 token 逻辑
|
||||
- [ ] 4.3 仪表盘最近答题记录使用 `quizAPI.getAllRecords`
|
||||
|
||||
## 5. 测试与校验
|
||||
- [ ] 5.1 补充可执行的前端单测覆盖登录记录写入逻辑
|
||||
- [ ] 5.2 补充可执行的接口测试覆盖历史/未开始任务分页查询接口
|
||||
- [ ] 5.3 运行 `npm run check` 与 `npm run build`
|
||||
|
||||
|
||||
Reference in New Issue
Block a user