11 KiB
11 KiB
performance 页面数据来源排查
排查日期:2026-03-18 页面路径:pages/performance/performance
概览
| 分类 | 数量 | 说明 |
|---|---|---|
| A. Mock 数据(页面内联) | 4 组 | incomeItems / thisMonthRecords / newCustomers / regularCustomers,全部在 loadData() 的 setTimeout 中硬构造 |
| B. 硬编码数据 | 11 个字段 | Banner 个人信息、收入档位、月度合计等,写死在 data 初始值中 |
| C. 已对接 API | 0 | 页面无任何 wx.request 调用,无 API 对接 |
| D. 前端计算/派生数据 | 3 个 | 展开/收起状态、AI 配色、pageState |
| E. 路由参数 | 0 | onLoad() 未读取任何路由参数 |
| F. WXML 硬编码文案 | 28+ 处 | 标题、标签、提示文字等 |
一、Mock 数据(页面内联 mock,loadData() 内 setTimeout 构造)
页面未 import
utils/mock-data.ts,所有 mock 数据均为loadData()方法内局部变量。
| # | 字段/变量 | 类型 | 位置 | 说明 |
|---|---|---|---|---|
| A1 | incomeItems |
IncomeItem[] |
loadData() 局部变量 |
4 条业绩明细:基础课 / 激励课 / 充值激励 / TOP3 销冠奖,icon + label + desc + value 全部硬写 |
| A2 | thisMonthRecords |
DateGroup[] |
loadData() 局部变量 |
4 个日期组、共 7 条服务记录,含客户名 / 头像 / 时间 / 课时 / 课程类型 / 台位 / 收入 |
| A3 | newCustomers |
Array<{...}> |
loadData() 局部变量 |
8 条新客数据:姓名 / 头像 / 最近服务日期 / 服务次数 |
| A4 | regularCustomers |
Array<{...}> |
loadData() 局部变量 |
8 条常客数据:姓名 / 头像 / 累计课时 / 累计收入 / 服务次数 |
| A5 | gradients |
string[] |
loadData() 局部变量 |
头像配色数组 ['blue','pink','teal',...],用于给 mock 数据分配 avatarColor |
Mock 数据内部字段明细
incomeItems 每条字段:
| 字段 | 示例值 | 联调时对应 API 字段(待定) |
|---|---|---|
icon |
'🎱' |
— |
label |
'基础课' |
收入类型名称 |
desc |
'80元/h × 75h' |
单价 × 课时的计算描述 |
value |
'¥6,000' |
该类型收入金额 |
thisMonthRecords → DateGroup 字段:
| 字段 | 示例值 | 联调时对应 API 字段(待定) |
|---|---|---|
date |
'2月7日' |
服务日期 |
totalHours |
'4.0h' |
当日总课时 |
totalIncome |
'¥350' |
当日总收入 |
thisMonthRecords → ServiceRecord 字段:
| 字段 | 示例值 | 联调时对应 API 字段(待定) |
|---|---|---|
customerName |
'王先生' |
客户姓名 |
avatarChar |
'王' |
姓氏首字(前端可派生) |
avatarColor |
'blue' |
头像配色(前端可派生) |
timeRange |
'20:00-22:00' |
服务时间段 |
hours |
'2.0h' |
服务时长 |
courseType |
'基础课' |
课程类型 |
courseTypeClass |
'tag-basic' |
CSS 类名(前端派生) |
location |
'3号台' |
台位/包厢 |
income |
'¥160' |
该次服务预估收入 |
newCustomers 每条字段:
| 字段 | 示例值 | 联调时对应 API 字段(待定) |
|---|---|---|
name |
'王先生' |
客户姓名 |
avatarChar |
'王' |
姓氏首字(前端可派生) |
avatarColor |
'blue' |
头像配色(前端可派生) |
lastService |
'2月7日' |
最近服务日期 |
count |
2 |
服务次数 |
regularCustomers 每条字段:
| 字段 | 示例值 | 联调时对应 API 字段(待定) |
|---|---|---|
name |
'张先生' |
客户姓名 |
avatarChar |
'张' |
姓氏首字(前端可派生) |
avatarColor |
'teal' |
头像配色(前端可派生) |
hours |
12 |
累计课时(number) |
income |
'¥960' |
累计收入 |
count |
6 |
服务次数 |
二、硬编码数据(Page.data 初始值)
| # | 字段 | 硬编码值 | 说明 |
|---|---|---|---|
| B1 | coachName |
'小燕' |
助教姓名,应从登录态/API 获取 |
| B2 | coachRole |
'助教' |
角色标签,应从用户信息获取 |
| B3 | storeName |
'广州朗朗桌球' |
门店名称,应从用户绑定门店获取 |
| B4 | monthlyIncome |
'¥6,206' |
本月预计收入,应从 API 获取 |
| B5 | lastMonthIncome |
'¥16,880' |
上月收入,应从 API 获取 |
| B6 | currentTier.basicRate |
80 |
当前档位基础课单价(元/h) |
| B7 | currentTier.incentiveRate |
95 |
当前档位激励课单价(元/h) |
| B8 | nextTier.basicRate |
90 |
下一档位基础课单价(元/h) |
| B9 | nextTier.incentiveRate |
114 |
下一档位激励课单价(元/h) |
| B10 | upgradeHoursNeeded |
15 |
距下一阶段所需课时 |
| B11 | upgradeBonus |
800 |
到达下一阶段奖金(元) |
| B12 | monthlyTotal |
'¥6,950.5' |
本月合计预估收入 |
| B13 | visibleRecordGroups |
2 |
默认显示前 N 条日期组(UI 配置,可保留硬编码) |
三、已对接 API
无。 页面中不存在任何 wx.request、API 服务调用、或从 getApp() 获取全局数据的逻辑。
loadData() 使用 setTimeout(500ms) 模拟异步加载,内部全部为内联 mock 数据。
文件头部注释明确标注:// TODO: 联调时替换为真实 API 调用
四、前端计算/派生数据
| # | 字段 | 来源 | 说明 |
|---|---|---|---|
| D1 | pageState |
前端状态机 | 'loading' → 'normal' / 'error' / 'empty',由 loadData() 控制 |
| D2 | aiColor |
initPageAiColor('performance') |
从 utils/ai-color-manager.ts 获取,固定返回 'blue' |
| D3 | thisMonthRecordsExpanded |
前端 toggle | 服务记录展开/收起状态,默认 false |
| D4 | newCustomerExpanded |
前端 toggle | 新客列表展开/收起状态,默认 false |
| D5 | regularCustomerExpanded |
前端 toggle | 常客列表展开/收起状态,默认 false |
五、路由参数
无。 onLoad() 未接收任何路由参数(options 未使用)。
页面作为业绩总览入口,当前设计不依赖路由传参。联调后可能需要接收 coachId / month 等参数。
六、WXML 硬编码文案
| # | 文案内容 | 位置 | 说明 |
|---|---|---|---|
| F1 | 加载中... |
加载态 toast | 可保留 |
| F2 | 暂无业绩数据 |
空数据态 | 可保留 |
| F3 | 加载失败,请点击重试 |
错误态 | 可保留 |
| F4 | 重试 |
错误态按钮 | 可保留 |
| F5 | 本月预计收入 |
Banner 收入卡片标签 | 可保留 |
| F6 | 上月收入 |
Banner 收入卡片标签 | 可保留 |
| F7 | 收入情况 |
section 标题 | 可保留 |
| F8 | 当前档位(×2) |
档位卡片 badge + label | 可保留 |
| F9 | 元/h(×4) |
费率单位 | 可保留 |
| F10 | 基础课到手(×2) |
费率描述 | 可保留 |
| F11 | 激励课到手(×2) |
费率描述 | 可保留 |
| F12 | 下一阶段(×2) |
档位卡片 badge + label | 可保留 |
| F13 | 距离下一阶段 |
升级提示标签 | 可保留 |
| F14 | 需完成 ... 小时 |
升级提示(含动态插值) | 可保留 |
| F15 | 到达即得 |
升级奖金标签 | 可保留 |
| F16 | 元(奖金后缀) |
升级奖金值 | 可保留 |
| F17 | 本月业绩 预估 |
section 标题 | 可保留 |
| F18 | 本月合计 预估 |
合计行标签 | 可保留 |
| F19 | 📋 我的服务记录明细 |
服务记录 header | 可保留 |
| F20 | 展开更多 / 收起 |
服务记录 toggle | 可保留 |
| F21 | 查看全部 |
跳转业绩记录按钮 | 可保留 |
| F22 | 我的预估收入 |
服务记录行内文案 | 可保留 |
| F23 | 我的新客 |
section 标题 | 可保留 |
| F24 | 最近服务: |
新客详情前缀 | 可保留 |
| F25 | 次 |
新客服务次数后缀 | 可保留 |
| F26 | 查看更多 ↓ / 收起 ↑ |
新客/常客 toggle | 可保留 |
| F27 | 我的常客 |
section 标题 | 可保留 |
| F28 | 📊 / 🎯 / ⏱️ |
档位/升级提示 emoji | 可保留 |
| F29 | 业绩详情 |
performance.json → navigationBarTitleText |
可保留 |
七、联调 TODO
7.1 需要对接的 API(按优先级排序)
| 优先级 | API 用途 | 涉及字段 | 备注 |
|---|---|---|---|
| P0 | 助教个人信息 | B1 coachName, B2 coachRole, B3 storeName |
可从登录态/全局 store 获取 |
| P0 | 本月/上月收入概览 | B4 monthlyIncome, B5 lastMonthIncome |
Banner 核心数据 |
| P0 | 收入档位信息 | B6-B9 currentTier.*, nextTier.*, B10 upgradeHoursNeeded, B11 upgradeBonus |
档位规则可能来自配置表 |
| P0 | 本月业绩明细 | A1 incomeItems, B12 monthlyTotal |
基础课/激励课/充值激励/奖金 |
| P1 | 服务记录列表(按日期分组) | A2 thisMonthRecords |
需支持分页或按月查询 |
| P1 | 新客列表 | A3 newCustomers |
本月新服务的客户 |
| P1 | 常客列表 | A4 regularCustomers |
累计服务数据 |
7.2 联调时需要处理的事项
- 移除
loadData()中的setTimeout模拟延迟 - 移除所有内联 mock 数据(incomeItems / thisMonthRecords / newCustomers / regularCustomers)
- 替换 Banner 区域硬编码字段(coachName / coachRole / storeName / monthlyIncome / lastMonthIncome)
- 替换收入档位硬编码(currentTier / nextTier / upgradeHoursNeeded / upgradeBonus / monthlyTotal)
- 添加
wx.request或封装的 API 调用 - 处理 API 错误 → 设置
pageState: 'error' - 处理空数据 → 设置
pageState: 'empty' avatarChar/avatarColor/courseTypeClass等前端派生字段需确认是后端返回还是前端计算onLoad()可能需要接收路由参数(如coachId、month)- 金额格式化(
¥前缀、千分位)确认由后端返回还是前端处理 - 服务记录的
taskId字段当前 mock 中未提供,但onRecordTap已预留读取逻辑
7.3 页面引用的外部依赖
| 依赖 | 类型 | 来源 | 数据影响 |
|---|---|---|---|
ai-color-manager.ts |
工具函数 | utils/ |
仅提供 AI 图标配色,无业务数据 |
ai-float-button |
自定义组件 | components/ |
AI 悬浮按钮,无业务数据 |
dev-fab |
自定义组件 | components/ |
开发调试按钮,无业务数据 |
metric-card |
自定义组件 | components/ |
已注册但 WXML 中未使用 |
t-icon / t-loading |
TDesign 组件 | tdesign-miniprogram |
UI 组件,无业务数据 |
mock-data.ts |
Mock 数据文件 | utils/ |
未被本页面引用(页面使用内联 mock) |
7.4 注意事项
- 页面文件头部已有
// TODO: 联调时替换为真实 API 调用注释 loadData()内部也有// TODO: 替换为真实 API注释performance.json中注册了metric-card组件但 WXML 中未使用,联调时可清理或启用- 金额字段涉及助教收入计算,联调时需参考 DWD-DOC 标杆文档中的助教费用拆分规则(
assistant_pd_money陪打 /assistant_cx_money超休)