feat: batch update - gift card breakdown spec, backend APIs, miniprogram pages, ETL finance recharge, docs & migrations

This commit is contained in:
Neo
2026-03-20 01:43:48 +08:00
parent 075caf067f
commit 79f9a0e1da
437 changed files with 118603 additions and 976 deletions

View File

@@ -0,0 +1,94 @@
# my-profile 页面数据来源排查
> 排查日期2026-03-18
> 页面路径pages/my-profile/my-profile
## 概览
| 分类 | 数量 | 说明 |
|------|------|------|
| Mock 数据 | 1 | `mockUserProfile` — 用户信息全量 mock |
| 硬编码数据 | 5 | 路由映射、弹窗文案、菜单 key 等 |
| 已对接 API | 0 | ⚠️ 无任何 API 调用 |
| 前端计算/派生 | 1 | TabBar 选中态同步 |
| 路由参数 | 0 | 无 |
| WXML 硬编码文案 | 5 | 菜单文字、弹窗文案 |
## 一、Mock 数据
### 1.1 `mockUserProfile`(🔴 高风险 — 页面核心数据全量 mock
| 属性 | 值 |
|------|-----|
| 来源文件 | `utils/mock-data.ts` |
| 导入方式 | `import { mockUserProfile } from '../../utils/mock-data'` |
| 赋值位置 | `data.userInfo = mockUserProfile`(页面初始化) |
| 类型定义 | `UserProfile { name, avatar, role, storeName }` |
**Mock 值:**
| 字段 | Mock 值 | 联调后应来自 |
|------|---------|-------------|
| `name` | `'小燕'` | API — 用户昵称 |
| `avatar` | `'/assets/images/avatar-coach.png'` | API — 用户头像 URL |
| `role` | `'助教'` | API — 用户角色 |
| `storeName` | `'朗朗桌球'` | API — 所属门店名称 |
**影响范围:** 用户信息卡片区域(头像、姓名、角色标签、门店名)全部依赖此 mock。
## 二、硬编码数据
| # | 文件 | 位置 | 内容 | 风险等级 | 说明 |
|---|------|------|------|----------|------|
| 1 | `router.ts` | MENU_ROUTE_MAP | `'chat-history'``'/pages/chat-history/chat-history'` | 🟢 低 | 菜单路由映射 |
| 2 | `router.ts` | MENU_ROUTE_MAP | `'notes'``'/pages/notes/notes'` | 🟢 低 | 菜单路由映射 |
| 3 | `router.ts` | MENU_ROUTE_MAP | `'settings'``''`(空字符串) | 🟡 中 | 设置页未实现,点击无响应 |
| 4 | `.ts` | `onLogout()` | `title: '确认退出'`, `content: '确认退出当前账号吗?'` | 🟢 低 | 弹窗文案 |
| 5 | `.ts` | `onLogout()` | `confirmColor: '#e34d59'` | 🟢 低 | 确认按钮颜色 |
| 6 | `.ts` | `onLogout()` | `url: '/pages/login/login'` | 🟢 低 | 退出后跳转路径 |
## 三、已对接 API
⚠️ **无。** 本页面当前未调用任何 API。
代码中有两处 TODO 注释明确标注:
- `.ts` L4: `// TODO: 联调时替换为真实 API 获取用户信息`
- `.ts` L11: `// TODO: 联调时在此刷新用户信息`
**预期对接 API**
| 端点(推测) | 用途 | 替换目标 |
|--------------|------|----------|
| `GET /api/xcx/me` 或专用 profile 接口 | 获取当前用户信息 | `mockUserProfile` |
## 四、前端计算/派生数据
| # | 数据 | 来源 | 说明 |
|---|------|------|------|
| 1 | TabBar `active: 'my'` | `this.getTabBar().setData()` | `onShow` 时同步 custom-tab-bar 选中态 |
| 2 | `route` | `getMenuRoute(key)` 纯函数 | 从 `MENU_ROUTE_MAP` 查找菜单 key 对应的页面路径 |
## 五、路由参数
无。本页面为 TabBar 页面,不接收路由参数。
## 六、WXML 硬编码文案
| # | 内容 | 位置 | 建议 |
|---|------|------|------|
| 1 | `"备注记录"` | menu-text | 可保留 |
| 2 | `"助手对话记录"` | menu-text | 可保留 |
| 3 | `"退出账号"` | menu-text | 可保留 |
| 4 | 菜单图标路径 `/assets/icons/menu-notes.svg` 等 | menu-icon image src | 🟢 低,静态资源 |
| 5 | `visible="{{true}}"` | ai-float-button | 🟢 低,控制 AI 按钮显示 |
## 七、联调 TODO
| # | 优先级 | 事项 | 当前状态 | 说明 |
|---|--------|------|----------|------|
| 1 | 🔴 P0 | 替换 `mockUserProfile` 为真实 API 数据 | 未开始 | 页面核心数据全量 mock需对接用户信息接口 |
| 2 | 🟡 P1 | `onShow` 中添加 API 刷新逻辑 | 未开始 | 确保每次进入页面获取最新用户信息 |
| 3 | 🟡 P1 | 确认用户信息接口字段映射 | 未开始 | `name`/`avatar`/`role`/`storeName` 需与后端字段对齐 |
| 4 | 🟢 P2 | 移除 `mock-data.ts``mockUserProfile` 的导入 | 未开始 | API 对接完成后清理 |
**结论:** my-profile 页面当前处于纯 mock 状态,用户信息卡片(姓名、头像、角色、门店)全部来自硬编码 mock 数据,是联调优先级最高的待办项。菜单跳转和退出登录逻辑已实现,无需额外对接。