# 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 数据，是联调优先级最高的待办项。菜单跳转和退出登录逻辑已实现，无需额外对接。
