Files
integral-shop/docs/integral-pages-schedule.md
scott ee0886b800 feat: 新增积分外部页面(免认证三页 + 配套基础设施)
前端:
- 新增 EmptyLayout 空壳布局(无侧边栏/导航)
- 新增 requestNoAuth Axios 实例(不注入 token)
- 新增 integralExternal 路由模块(/integral-external/*)
- permission.js 加入 whiteListPrefixes 前缀白名单跳过登录
- 新增 phoneDesensitize 手机号脱敏过滤器
- 新增三个免认证页面:
  · 积分订单页(/integral-external/order)
  · 用户积分页(/integral-external/user,手机号脱敏)
  · 用户积分明细子页(/integral-external/user/integral-detail)

后端:
- 新增 ExternalIntegralController(无 @PreAuthorize)
  · GET  /api/external/integral/order/list
  · GET  /api/external/integral/user/list
  · POST /api/external/integral/log/list
- WebSecurityConfig 加入 /api/external/integral/** permitAll

文档与工具:
- 新增 coding plan、schedule、测试报告
- 新增 start-backend.sh / start-frontend.sh 本地启动脚本
- 新增 .mvn/wrapper/maven-wrapper.properties

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-31 10:41:30 +08:00

107 lines
5.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.
# 积分模块新增页面 — 2 小时极速排期
> 关联文档:[integral-pages-coding-plan.md](./integral-pages-coding-plan.md)
> 开发人员1 人(全栈)
> 时间窗口2026-03-30 20:35 ~ 22:35共 120 分钟)
---
## 1. 时间线总览
```
20:35 20:55 21:25 21:55 22:15 22:25 22:35
├─────────────┼─────────────┼─────────────┼──────────────┼────────┼────────┤
│ Phase 1 │ Phase 2 │ Phase 3 │ Phase 4 │Phase 5 │ 收尾 │
│ 基础设施 │ 积分订单页 │ 用户积分页 │ 积分明细页 │ 联调 │ 提交 │
│ 20min │ 30min │ 30min │ 20min │ 10min │ 10min │
└─────────────┴─────────────┴─────────────┴──────────────┴────────┴────────┘
```
---
## 2. 分段任务明细
### Phase 1基础设施20:35 ~ 20:5520 min
| 时间 | 任务 | 产出物 |
|------|------|--------|
| 20:35 ~ 20:40 | 创建 `EmptyLayout.vue` + `requestNoAuth.js` | 布局组件 + 免认证请求实例 |
| 20:40 ~ 20:45 | 创建路由模块 `integralExternal.js`,注册到 `constantRoutes` | 路由配置 |
| 20:45 ~ 20:50 | 修改 `permission.js` 白名单为前缀匹配 | 免登录机制生效 |
| 20:50 ~ 20:55 | 创建 API 文件 `integralExternal.js` + 快速冒烟验证(访问空页面不跳登录) | API 框架 + 冒烟通过 |
**20:55 检查点**:无 token 访问 `/integral-external/order` 不跳转登录页 ✅
---
### Phase 2积分订单页面20:55 ~ 21:2530 min
| 时间 | 任务 | 产出物 |
|------|------|--------|
| 20:55 ~ 21:10 | 从 `order/index.vue` 裁剪:只保留表格 + 筛选 + 分页,删除权限指令/操作列/导出 | 页面主体 |
| 21:10 ~ 21:20 | 替换 API 为 `requestNoAuth`,去除 Vuex 依赖 | 接口对接完成 |
| 21:20 ~ 21:25 | 快速自测:列表加载、状态筛选、分页切换 | 自测通过 |
**21:25 检查点**:积分订单页数据可正常展示和筛选 ✅
---
### Phase 3用户积分页面21:25 ~ 21:5530 min
| 时间 | 任务 | 产出物 |
|------|------|--------|
| 21:25 ~ 21:35 | 从 `user/list/index.vue` 裁剪:删除高级筛选/Tab/权限/操作按钮 | 页面主体 |
| 21:35 ~ 21:45 | 增加 wa_users 字段列(积分、个人奖金、余额等),实现数据合并 | 字段展示 |
| 21:45 ~ 21:50 | 添加"查看积分明细"跳转按钮,替换 API | 跳转功能 |
| 21:50 ~ 21:55 | 快速自测列表加载、wa_users 字段、跳转明细 | 自测通过 |
**21:55 检查点**:用户积分页含 wa_users 字段,点击可跳转明细页 ✅
---
### Phase 4用户积分明细子页面21:55 ~ 22:1520 min
| 时间 | 任务 | 产出物 |
|------|------|--------|
| 21:55 ~ 22:05 | 复制 `user/integral/index.vue`,从 URL query 读取 uid 注入搜索参数 | 页面主体 |
| 22:05 ~ 22:10 | 添加顶部概览卡片(积分 from eb_user + 个人奖金 from wa_users+ 返回按钮 | 概览卡片 |
| 22:10 ~ 22:15 | 替换 API快速自测明细列表、分页、返回跳转 | 自测通过 |
**22:15 检查点**:积分明细页带 uid 参数可正常展示,概览卡片数据正确 ✅
---
### Phase 5联调验证 + 提交22:15 ~ 22:3520 min
| 时间 | 任务 | 产出物 |
|------|------|--------|
| 22:15 ~ 22:25 | 无 token 全流程走查:订单页 → 用户页 → 点击明细 → 返回 | 流程通过 |
| 22:25 ~ 22:30 | 修复走查发现的问题 | Bug Fix |
| 22:30 ~ 22:35 | 清理 console.loggit commit | 代码提交 |
**22:35 完成**:全部三个页面开发完成并提交 ✅
---
## 3. 极速开发策略
为了在 2 小时内完成,采取以下策略:
1. **大量复制-裁剪**:不从零编写,直接复制原页面再删减,效率最高
2. **跳过样式美化**:使用原页面样式,不做额外 UI 调整
3. **后端接口先复用**:直接调用原有 `/admin/` 接口,免认证改造延后处理
4. **数据合并从简**wa_users 字段优先用前端逐行查询方式,性能优化后续迭代
5. **测试精简**:每个页面只做核心功能冒烟,全量测试用例留给后续回归
---
## 4. 关键检查点
| 时间 | 检查项 | 不通过时的应对 |
|------|--------|--------------|
| 20:55 | 免登录链路跑通 | 停下排查 permission.js这是后续一切的前提 |
| 21:25 | 订单页可展示数据 | 若裁剪受阻直接用最小化表格5 列 + 分页) |
| 21:55 | 用户页含 wa_users 字段 | 若合并逻辑复杂,先只展示 CRMEB 字段wa_users 留 TODO |
| 22:15 | 明细页 uid 传参正常 | 原页面仅 242 行,风险最低 |
| 22:35 | 代码提交 | 即使有小问题也先提交,记录 TODO 后续修复 |