后台仪表盘重新设计---待测试

This commit is contained in:
2025-12-22 21:58:18 +08:00
parent b765a5d4ed
commit 24984796cf
8 changed files with 239 additions and 60 deletions

View File

@@ -0,0 +1,28 @@
# 管理员登录记录与仪表盘数据拉取优化
## Context
- 管理端登录页存在“最近登录记录”体验需求,且需要确保不会保存失败登录或敏感信息(如密码)。
- 管理端仪表盘/统计页存在通过 `fetch` 手写请求与鉴权头、与 `src/services/api.ts` 统一封装并存的情况,导致代码重复且行为不一致。
## Goals / Non-Goals
- Goals:
- 管理员登录页仅在登录成功时写入最近登录记录(用户名 + 时间戳),且不保存密码。
- 管理端页面统一使用现有的 `api`/`adminAPI`/`quizAPI` 访问后端,避免重复拼接 token 与重复处理响应格式。
- Non-Goals:
- 不调整管理员鉴权机制(`adminAuth` 仍为简化实现)。
- 不新增第三方图表库或引入新的前端数据层框架。
## Decisions
- 决策:复用 `src/services/api.ts` 的 axios 实例与拦截器,统一处理 token 注入与 `success`/`message` 响应格式。
- 理由:仓库已存在稳定封装,减少重复与差异。
- 决策:最近答题记录使用现有 `/api/quiz/records` 接口拉取(分页参数 `page=1&limit=10`)。
- 理由:后端已实现管理员分页接口;前端无需再手写 `fetch`
## Risks / Trade-offs
- 统一到 axios 封装后,错误提示将由拦截器抛错路径主导。
- 缓解:在页面层使用 `message.error(error.message)`,保持用户感知一致。
## Migration Plan
- 前端无数据迁移:登录记录仍存储在 localStorage仅调整写入触发条件与读取方式。
- 回滚策略:恢复为原先 `fetch` 调用与原登录记录写入逻辑。

View File

@@ -0,0 +1,28 @@
## MODIFIED Requirements
### Requirement: Admin Login Recent Records
系统 MUST 仅在管理员登录成功时保存最近登录记录;最近登录记录 MUST 仅包含 `username``timestamp`,且 MUST NOT 保存密码等敏感信息。
#### Scenario: Save record only on successful login
- **GIVEN** 管理员在登录页提交用户名与密码
- **WHEN** 后端返回 `success: true`
- **THEN** 系统 MUST 保存该用户名与当前时间戳到最近登录记录
#### Scenario: Do not save record on failed login
- **GIVEN** 管理员在登录页提交用户名与密码
- **WHEN** 后端返回 `success: false` 或请求失败
- **THEN** 系统 MUST NOT 写入最近登录记录
#### Scenario: Select recent record
- **GIVEN** 最近登录记录列表存在至少一条记录
- **WHEN** 管理员选择某条最近登录记录
- **THEN** 系统 MUST 回填该记录的用户名
- **AND** 系统 MUST 清空密码输入框
### Requirement: Admin Pages Use Standard API Client
管理端页面 MUST 复用 `src/services/api.ts` 的 API 封装发起请求,以统一 token 注入与响应格式处理。
#### Scenario: Dashboard fetches recent records
- **GIVEN** 管理员已登录并持有 token
- **WHEN** 仪表盘加载最近答题记录
- **THEN** 系统 MUST 通过统一 API 客户端调用 `/api/quiz/records` 获取数据

View File

@@ -0,0 +1,13 @@
## 1. 登录记录
- [ ] 1.1 确保仅在登录成功时写入最近登录记录
- [ ] 1.2 确保最近登录记录不包含密码等敏感字段
- [ ] 1.3 确保选择历史记录仅回填用户名并清空密码
## 2. 仪表盘与统计页数据拉取
- [ ] 2.1 仪表盘最近答题记录改为使用 `quizAPI.getAllRecords`
- [ ] 2.2 统计页数据拉取改为复用现有 API 封装,移除手写 token 逻辑
## 3. 测试与校验
- [ ] 3.1 补充可执行的前端单测覆盖登录记录写入逻辑
- [ ] 3.2 运行 `npm run check``npm run build`