1381 lines
28 KiB
Markdown
1381 lines
28 KiB
Markdown
# 页面数据需求说明文档(推测版 / Mock 阶段)
|
||
|
||
版本:v1.0
|
||
适用范围:球房运营助手原型页面的前后端数据契约设计
|
||
说明:本文件基于现有 H5 原型代码推断,用于 **Mock / 接口设计前置**。不是最终后端接口定义,但足够支撑前端页面开发与后续接口对齐。
|
||
|
||
---
|
||
|
||
## 1. 文档目标
|
||
|
||
本文件用于回答三个问题:
|
||
|
||
1. **哪些内容应该由后端返回?**
|
||
2. **哪些内容应该写在前端模板/枚举中?**
|
||
3. **页面要稳定开发,需要哪些接口与字段?**
|
||
|
||
本阶段使用 Mock 数据代替真实接口,因此要求:
|
||
- 字段结构先稳定;
|
||
- 列表、详情、筛选、统计、弹窗提交等数据模型先统一;
|
||
- 前端派生字段与后端源字段边界清晰。
|
||
|
||
---
|
||
|
||
## 2. 总体判断原则
|
||
|
||
## 2.1 必须由后端返回的数据
|
||
|
||
以下内容不能写死在模板中:
|
||
|
||
1. 用户身份、门店、权限、审核状态
|
||
2. 任务列表、任务详情、任务状态、备注、放弃原因
|
||
3. 客户详情、服务记录、消费记录、余额、到店时间
|
||
4. 助教详情、绩效、工资、客户数、服务记录
|
||
5. 看板统计、榜单排序、筛选结果、时间范围数据
|
||
6. AI 洞察文案、AI 话术建议、对话记录
|
||
7. 月份切换、对比数据、趋势值
|
||
8. 业务枚举背后的值(类型 code、状态 code、标签 code)
|
||
9. 数值格式化前的原始值(金额、小时、次数、时间戳)
|
||
|
||
## 2.2 可以由前端模板维护的数据
|
||
|
||
以下内容可以先前端写死,后续再看是否由平台统一下发:
|
||
|
||
1. 页面固定标题
|
||
2. 静态说明文案
|
||
3. 空状态文案
|
||
4. 权限页/审核页的帮助说明
|
||
5. 通用按钮文案(取消、确认、保存)
|
||
6. 前端 UI 状态:
|
||
- 弹窗是否打开
|
||
- 当前激活 tab
|
||
- 当前筛选器是否展开
|
||
- Toast 是否显示
|
||
7. 某些纯展示枚举的样式映射:
|
||
- 任务类型颜色
|
||
- 标签颜色
|
||
- 徽章图标
|
||
- 看板 section 图标
|
||
|
||
## 2.3 建议“后端返回 code,前端做样式映射”的数据
|
||
|
||
例如:
|
||
- `taskType = high_priority | priority | relationship | callback`
|
||
- `memberLevel = vip | gold | normal`
|
||
- `gender = male | female | unknown`
|
||
- `noteType = customer | coach`
|
||
- `status = pending | approved | rejected | abandoned | completed`
|
||
|
||
原因:
|
||
- 后端可控业务语义
|
||
- 前端可控视觉样式
|
||
- 文案和颜色不会耦死在接口层
|
||
|
||
---
|
||
|
||
## 3. 全局数据模型
|
||
|
||
## 3.1 当前登录用户 `CurrentUser`
|
||
|
||
```json
|
||
{
|
||
"userId": "u_1001",
|
||
"name": "小燕",
|
||
"nickname": "小燕",
|
||
"avatarUrl": "https://...",
|
||
"roleCode": "coach",
|
||
"roleName": "助教",
|
||
"siteId": "site_001",
|
||
"siteName": "广州朗朗桌球",
|
||
"defaultHome": "task",
|
||
"permissionStatus": "approved"
|
||
}
|
||
```
|
||
|
||
### 字段说明
|
||
|
||
| 字段 | 类型 | 来源 | 说明 |
|
||
|---|---|---|---|
|
||
| `userId` | string | 后端 | 用户唯一 ID |
|
||
| `name` | string | 后端 | 昵称/展示名 |
|
||
| `avatarUrl` | string | 后端 | 头像 |
|
||
| `roleCode` | string | 后端 | `coach / manager / admin ...` |
|
||
| `roleName` | string | 后端或前端映射 | 展示身份 |
|
||
| `siteId` | string | 后端 | 球房 ID |
|
||
| `siteName` | string | 后端 | 球房名称 |
|
||
| `defaultHome` | string | 后端 | 默认首页 |
|
||
| `permissionStatus` | string | 后端 | 权限状态 |
|
||
|
||
---
|
||
|
||
## 3.2 通用枚举建议
|
||
|
||
### 任务类型 `TaskType`
|
||
```json
|
||
[
|
||
{ "code": "high_priority", "name": "高优先召回" },
|
||
{ "code": "priority", "name": "优先召回" },
|
||
{ "code": "relationship", "name": "关系构建" },
|
||
{ "code": "callback", "name": "客户回访" }
|
||
]
|
||
```
|
||
|
||
### 任务状态 `TaskStatus`
|
||
```json
|
||
[
|
||
{ "code": "pending", "name": "待处理" },
|
||
{ "code": "completed", "name": "已完成" },
|
||
{ "code": "abandoned", "name": "已放弃" },
|
||
{ "code": "pinned", "name": "置顶" }
|
||
]
|
||
```
|
||
|
||
### 备注对象类型 `NoteEntityType`
|
||
```json
|
||
[
|
||
{ "code": "customer", "name": "客户" },
|
||
{ "code": "coach", "name": "助教" },
|
||
{ "code": "task", "name": "任务" }
|
||
]
|
||
```
|
||
|
||
### 会员等级 `MemberLevel`
|
||
```json
|
||
[
|
||
{ "code": "vip", "name": "VIP" },
|
||
{ "code": "gold", "name": "黄金会员" },
|
||
{ "code": "normal", "name": "普通会员" }
|
||
]
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 页面级数据需求
|
||
|
||
## 4.1 登录页 `login`
|
||
|
||
### 页面用途
|
||
- 微信登录入口
|
||
- 用户协议勾选
|
||
- 登录后跳转默认首页
|
||
|
||
### 后端需求
|
||
#### 接口 A:登录态获取 / 登录
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"token": "xxx",
|
||
"user": {
|
||
"userId": "u_1001",
|
||
"name": "小燕",
|
||
"roleCode": "coach",
|
||
"roleName": "助教",
|
||
"siteId": "site_001",
|
||
"siteName": "广州朗朗桌球",
|
||
"permissionStatus": "approved",
|
||
"defaultHome": "task"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 页面模板可写死
|
||
- Logo / slogan
|
||
- “任务管理 / 数据看板 / 智能助手”卖点文案
|
||
- 用户协议、隐私政策入口文案
|
||
|
||
### 提交动作
|
||
- 微信登录
|
||
- 勾选协议状态仅前端控制
|
||
|
||
---
|
||
|
||
## 4.2 申请页 `apply`
|
||
|
||
### 原型可见字段
|
||
- 球房 ID
|
||
- 申请身份
|
||
- 手机号
|
||
- 编号(选填)
|
||
- 昵称
|
||
|
||
### 后端需求
|
||
#### 接口 B:提交访问申请
|
||
**请求**
|
||
```json
|
||
{
|
||
"siteId": "site_001",
|
||
"applyRole": "coach",
|
||
"phone": "13800000000",
|
||
"staffNo": "A102",
|
||
"nickname": "小燕"
|
||
}
|
||
```
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"applicationId": "app_001",
|
||
"status": "reviewing"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 页面模板可写死
|
||
- 提交流程 1~4 步说明
|
||
- 填写提示文案
|
||
|
||
### 风险提示
|
||
- `applyRole` 不要传中文文案,传 code
|
||
- 手机号、球房 ID、员工编号的格式校验规则建议后端也做
|
||
|
||
---
|
||
|
||
## 4.3 审核中 / 无权限页 `reviewing` / `no-permission`
|
||
|
||
### 后端需求
|
||
#### 接口 C:当前账号权限状态查询
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"permissionStatus": "reviewing",
|
||
"siteId": "site_001",
|
||
"siteName": "广州朗朗桌球",
|
||
"adminName": "厉超",
|
||
"adminContact": "138****0000",
|
||
"reason": null
|
||
}
|
||
}
|
||
```
|
||
|
||
#### `permissionStatus` 建议取值
|
||
- `reviewing`
|
||
- `approved`
|
||
- `rejected`
|
||
- `revoked`
|
||
|
||
### 页面模板可写死
|
||
- 说明文案
|
||
- 联系管理员的固定描述结构
|
||
|
||
### 页面中真正来自后端的
|
||
- 管理员姓名/联系方式
|
||
- 驳回或收回原因
|
||
- 当前状态
|
||
|
||
---
|
||
|
||
## 4.4 首页设置 `home-settings`
|
||
|
||
### 需求
|
||
- 获取默认首页设置
|
||
- 修改默认首页设置
|
||
|
||
#### 接口 D1:获取用户设置
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"defaultHome": "task"
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 接口 D2:保存用户设置
|
||
**请求**
|
||
```json
|
||
{
|
||
"defaultHome": "board"
|
||
}
|
||
```
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": true
|
||
}
|
||
```
|
||
|
||
### 前端模板可维护
|
||
- “任务 / 看板”的展示文案
|
||
|
||
---
|
||
|
||
## 4.5 我的 `my-profile`
|
||
|
||
### 后端需求
|
||
#### 接口 E:我的信息
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"userId": "u_1001",
|
||
"name": "小燕",
|
||
"roleCode": "coach",
|
||
"roleName": "助教",
|
||
"siteName": "广州朗朗桌球",
|
||
"avatarUrl": "https://..."
|
||
}
|
||
}
|
||
```
|
||
|
||
### 页面按钮跳转
|
||
- 备注记录
|
||
- 助手对话记录
|
||
- 退出账号
|
||
|
||
#### 接口 F:退出登录
|
||
前端即可清空 token;后端如需审计,可补一个退出埋点接口。
|
||
|
||
---
|
||
|
||
## 4.6 任务列表 `task-list`
|
||
|
||
这是最关键页面之一。
|
||
|
||
### 页面结构拆分
|
||
|
||
#### 1)顶部个人与站点信息
|
||
- 当前用户昵称
|
||
- 角色
|
||
- 门店名
|
||
- 头像
|
||
|
||
#### 2)业绩进度卡
|
||
- 距离 100h 仅剩多少小时
|
||
- 档位进度条
|
||
- 基础课 / 激励课 / 全部小时数
|
||
- 达成奖励
|
||
- 月预计收入及同比/环比变化
|
||
|
||
#### 3)任务区
|
||
- 今日客户维护总数
|
||
- 置顶任务列表
|
||
- 其他任务列表
|
||
- 已放弃任务列表
|
||
|
||
#### 4)长按上下文菜单
|
||
- 置顶
|
||
- 放弃
|
||
- AI
|
||
- 备注
|
||
|
||
### 后端数据需求
|
||
|
||
#### 接口 G:任务列表页聚合数据
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"userSummary": {
|
||
"userId": "u_1001",
|
||
"name": "小燕",
|
||
"roleCode": "coach",
|
||
"roleName": "助教",
|
||
"avatarUrl": "https://...",
|
||
"siteName": "广州朗朗桌球"
|
||
},
|
||
"performanceSummary": {
|
||
"targetHour": 100,
|
||
"remainHour": 12.5,
|
||
"currentTierIndex": 1,
|
||
"tierBounds": [0, 100, 130, 160, 190, 220],
|
||
"baseHour": 77.5,
|
||
"incentiveHour": 12.0,
|
||
"totalHour": 87.5,
|
||
"rewardAmount": 800,
|
||
"forecastIncome": 6206,
|
||
"incomeCompareValue": -368,
|
||
"incomeCompareLabel": "比1月同期"
|
||
},
|
||
"taskSections": {
|
||
"pinnedCount": 2,
|
||
"normalCount": 3,
|
||
"abandonedCount": 2
|
||
},
|
||
"tasks": [
|
||
{
|
||
"taskId": "t_001",
|
||
"taskType": "high_priority",
|
||
"taskTypeName": "高优先召回",
|
||
"status": "pending",
|
||
"isPinned": true,
|
||
"customerId": "c_001",
|
||
"customerName": "王先生",
|
||
"genderEmoji": "💖",
|
||
"hasNote": true,
|
||
"lastVisitDays": 15,
|
||
"balanceLevel": "very_high",
|
||
"balanceLevelName": "非常多",
|
||
"descLine1": "最近到店:15天前 · 余额:非常多",
|
||
"descLine2": "偏好晚间时段,可推荐夜场套餐",
|
||
"aiHint": "偏好晚间时段,可推荐夜场套餐",
|
||
"abandonReason": null,
|
||
"priorityScore": 98
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 字段归因说明
|
||
|
||
#### 必须后端返回
|
||
- 任务列表本身
|
||
- 任务类型
|
||
- 置顶状态
|
||
- 放弃状态
|
||
- 客户姓名
|
||
- 最近到店天数
|
||
- 余额等级
|
||
- AI 提示
|
||
- 是否有备注
|
||
- 业绩进度统计
|
||
- 预计收入与比较值
|
||
|
||
#### 前端可派生
|
||
- 任务卡左侧颜色
|
||
- 任务类型 badge 样式
|
||
- `💖 💙 💛 🧡` 这类关系/情绪小符号(如果不是业务字段,可由前端映射)
|
||
- “已放弃”分组标题样式
|
||
- 进度条视觉分段
|
||
|
||
### 交互写接口需求
|
||
#### 接口 H1:置顶 / 取消置顶任务
|
||
```json
|
||
{
|
||
"taskId": "t_001",
|
||
"isPinned": true
|
||
}
|
||
```
|
||
|
||
#### 接口 H2:放弃任务
|
||
```json
|
||
{
|
||
"taskId": "t_001",
|
||
"reason": "客户已转会至其他球房"
|
||
}
|
||
```
|
||
|
||
#### 接口 H3:新增任务备注
|
||
```json
|
||
{
|
||
"taskId": "t_001",
|
||
"content": "客户本周不方便,建议下周三回访"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4.7 任务详情(四个页面共性)
|
||
|
||
页面:
|
||
- `task-detail`
|
||
- `task-detail-priority`
|
||
- `task-detail-callback`
|
||
- `task-detail-relationship`
|
||
|
||
### 共性信息块
|
||
|
||
1. 客户头部信息
|
||
- 姓名
|
||
- 手机
|
||
- 会员等级
|
||
- 任务类型
|
||
- 维客线索 / AI 洞察
|
||
|
||
2. 客户基础信息 / 消费习惯 / 服务关系
|
||
3. AI 建议话术
|
||
4. 备注区
|
||
5. 放弃客户弹窗(主版)
|
||
6. 星级评分(备注弹窗内)
|
||
|
||
### 后端建议:统一一个详情接口,通过 taskType 决定展示差异
|
||
|
||
#### 接口 I:任务详情
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"taskId": "t_001",
|
||
"taskType": "high_priority",
|
||
"taskTypeName": "高优先召回",
|
||
"status": "pending",
|
||
"customer": {
|
||
"customerId": "c_001",
|
||
"name": "王先生",
|
||
"avatarText": "王",
|
||
"phoneMasked": "138****5678",
|
||
"memberLevel": "gold",
|
||
"memberLevelName": "黄金会员",
|
||
"registerDays": 730,
|
||
"tags": ["VIP会员", "高价值"]
|
||
},
|
||
"relationship": {
|
||
"score": 0.85,
|
||
"label": "非常好",
|
||
"summary": "最近3个月每周均有1-2次课程互动,客户反馈良好。"
|
||
},
|
||
"balance": {
|
||
"amount": 8600,
|
||
"level": "very_high",
|
||
"levelName": "非常多"
|
||
},
|
||
"visit": {
|
||
"lastVisitAt": "2026-02-25T20:00:00+08:00",
|
||
"lastVisitDays": 12,
|
||
"idealIntervalDays": 7
|
||
},
|
||
"insights": [
|
||
{
|
||
"section": "客户基础",
|
||
"source": "system",
|
||
"icon": "👤",
|
||
"title": "普通会员 · 注册10个月 · 近期活跃度下降"
|
||
},
|
||
{
|
||
"section": "消费习惯",
|
||
"source": "system",
|
||
"icon": "🌙",
|
||
"title": "偏好夜场 20:00-22:00"
|
||
}
|
||
],
|
||
"aiSuggestions": [
|
||
{
|
||
"suggestionId": "s_001",
|
||
"content": "最近是否工作较忙?周末夜场新上了双人套餐,给您预留时段。"
|
||
}
|
||
],
|
||
"latestNote": {
|
||
"noteId": "n_001",
|
||
"content": "客户上次说月底来店。",
|
||
"createdAt": "2026-02-26T18:00:00+08:00",
|
||
"ratings": {
|
||
"intention": 4,
|
||
"relation": 5,
|
||
"service": 4
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 备注相关接口
|
||
|
||
#### 接口 J1:新增 / 更新备注
|
||
```json
|
||
{
|
||
"taskId": "t_001",
|
||
"content": "客户上次说月底来店。",
|
||
"ratings": {
|
||
"intention": 4,
|
||
"relation": 5,
|
||
"service": 4
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 接口 J2:删除备注
|
||
```json
|
||
{
|
||
"noteId": "n_001"
|
||
}
|
||
```
|
||
|
||
### 放弃任务接口
|
||
可复用 `H2`
|
||
|
||
### AI 话术复制
|
||
前端行为,不需要接口。
|
||
|
||
---
|
||
|
||
## 4.8 客户详情 `customer-detail`
|
||
|
||
### 页面可见数据
|
||
- 姓名、手机号、会员编号
|
||
- 储值余额
|
||
- 60天消费
|
||
- 理想到店间隔
|
||
- 距今到店天数
|
||
- AI 智能洞察
|
||
- 客户标签
|
||
- 可能还有最近服务、消费偏好等
|
||
|
||
#### 接口 K:客户详情
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"customerId": "c_001",
|
||
"name": "王先生",
|
||
"avatarText": "王",
|
||
"phoneMasked": "138****5678",
|
||
"memberNo": "VIP20231215",
|
||
"memberLevel": "vip",
|
||
"memberLevelName": "VIP",
|
||
"balanceAmount": 8600,
|
||
"consume60dAmount": 2800,
|
||
"idealVisitIntervalDays": 7,
|
||
"daysSinceLastVisit": 12,
|
||
"relationshipScore": 0.85,
|
||
"insightSummary": "高价值 VIP 客户,月均到店 4 次,夜场偏好明显。",
|
||
"tags": ["高价值", "VIP", "夜场偏好"],
|
||
"stats": {
|
||
"visitCount30d": 4,
|
||
"visitCount60d": 8,
|
||
"avgTicket30d": 350
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4.9 客户服务记录 `customer-service-records`
|
||
|
||
### 原型可见
|
||
- 客户头部摘要
|
||
- 累计服务次数
|
||
- 关系指数
|
||
- 按月份切换
|
||
- 本月服务次数
|
||
- 服务时长
|
||
- 按时间列出服务记录
|
||
|
||
#### 接口 L:客户服务记录
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"customer": {
|
||
"customerId": "c_001",
|
||
"name": "王先生",
|
||
"phoneMasked": "139****5678"
|
||
},
|
||
"summary": {
|
||
"totalServiceCount": 28,
|
||
"relationshipScore": 0.85
|
||
},
|
||
"month": "2026-02",
|
||
"monthSummary": {
|
||
"serviceCount": 6,
|
||
"serviceDurationHour": 11.5,
|
||
"relationshipScore": 0.85
|
||
},
|
||
"records": [
|
||
{
|
||
"recordId": "sr_001",
|
||
"startAt": "2026-02-07T20:00:00+08:00",
|
||
"endAt": "2026-02-07T22:30:00+08:00",
|
||
"durationHour": 2.5,
|
||
"tableNo": "A1",
|
||
"coachName": "小燕",
|
||
"projectName": "中八陪练",
|
||
"remark": null
|
||
}
|
||
],
|
||
"monthOptions": ["2026-01", "2026-02"]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 前端模板可维护
|
||
- 月份切换按钮样式
|
||
- 列表分组表现
|
||
|
||
---
|
||
|
||
## 4.10 助教详情 `coach-detail`
|
||
|
||
### 原型可见
|
||
- 姓名、星级、擅长项目
|
||
- 工龄、客户数
|
||
- 本月定档业绩
|
||
- 折算前
|
||
- 本月工资预估
|
||
- 客源储值余额
|
||
- 收入明细切换(本月 / 上月)
|
||
- 备注弹窗
|
||
- 任务展开收起
|
||
|
||
#### 接口 M:助教详情
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"coach": {
|
||
"coachId": "coach_001",
|
||
"name": "小燕",
|
||
"avatarText": "小",
|
||
"level": "star",
|
||
"levelName": "星级",
|
||
"skills": ["中八", "斯诺克"],
|
||
"workingYears": 3,
|
||
"customerCount": 68
|
||
},
|
||
"summary": {
|
||
"currentMonthPerfHour": 87.5,
|
||
"rawPerfHour": 89.0,
|
||
"forecastSalary": 6950,
|
||
"customerBalanceAmount": 86200
|
||
},
|
||
"incomeTabs": {
|
||
"thisMonth": {
|
||
"totalAmount": 6206,
|
||
"items": [
|
||
{ "label": "基础课收入", "amount": 4200 },
|
||
{ "label": "激励课收入", "amount": 1200 }
|
||
]
|
||
},
|
||
"lastMonth": {
|
||
"totalAmount": 16880,
|
||
"items": []
|
||
}
|
||
},
|
||
"tasks": [
|
||
{
|
||
"taskId": "t_001",
|
||
"taskType": "high_priority",
|
||
"customerName": "王先生",
|
||
"status": "pending"
|
||
}
|
||
],
|
||
"latestNotes": [
|
||
{
|
||
"noteId": "n_001",
|
||
"content": "本月表现优秀。",
|
||
"createdAt": "2026-02-27T12:00:00+08:00"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 备注接口
|
||
可复用通用备注接口,只是实体类型变为 `coach`。
|
||
|
||
---
|
||
|
||
## 4.11 备注页 `notes`
|
||
|
||
### 原型可见
|
||
- 客户备注
|
||
- 助教备注
|
||
- 按时间倒序
|
||
|
||
#### 接口 N:备注列表
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"tabs": [
|
||
{
|
||
"type": "customer",
|
||
"count": 12,
|
||
"notes": [
|
||
{
|
||
"noteId": "n_001",
|
||
"entityType": "customer",
|
||
"entityId": "c_001",
|
||
"entityName": "王先生",
|
||
"content": "客户今天表示下周有朋友生日聚会...",
|
||
"createdAt": "2026-02-27T15:30:00+08:00"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"type": "coach",
|
||
"count": 8,
|
||
"notes": []
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 页面模板可维护
|
||
- Tab 标题文案
|
||
- 备注卡片样式
|
||
- 标签颜色映射
|
||
|
||
---
|
||
|
||
## 4.12 助手对话 `chat` 与对话记录 `chat-history`
|
||
|
||
### 需要区分两层数据
|
||
|
||
#### A. 对话会话列表
|
||
#### B. 某个会话中的消息流
|
||
|
||
### 接口 O1:会话列表
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"sessions": [
|
||
{
|
||
"sessionId": "cs_001",
|
||
"title": "如何提升王先生的到店频率?",
|
||
"updatedAt": "2026-03-01T10:20:00+08:00",
|
||
"messageCount": 8,
|
||
"sourceType": "task",
|
||
"sourceId": "t_001",
|
||
"sourceSummary": "任务 - 高优先召回"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 接口 O2:会话详情 / 消息流
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"session": {
|
||
"sessionId": "cs_001",
|
||
"title": "如何提升王先生的到店频率?",
|
||
"sourceType": "task",
|
||
"sourceId": "t_001",
|
||
"quoteCard": {
|
||
"title": "任务 - 高优先召回",
|
||
"summary": "王先生 · 最近到店15天前 · VIP客户"
|
||
}
|
||
},
|
||
"messages": [
|
||
{
|
||
"messageId": "m_001",
|
||
"role": "user",
|
||
"content": "如何提升这位客户的到店频率?",
|
||
"createdAt": "2026-03-01T10:20:00+08:00"
|
||
},
|
||
{
|
||
"messageId": "m_002",
|
||
"role": "assistant",
|
||
"content": "根据王先生的消费数据分析,我有以下建议...",
|
||
"createdAt": "2026-03-01T10:20:03+08:00",
|
||
"actions": [
|
||
{ "type": "copy", "label": "复制" }
|
||
]
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 接口 O3:发送消息
|
||
```json
|
||
{
|
||
"sessionId": "cs_001",
|
||
"content": "输入消息..."
|
||
}
|
||
```
|
||
|
||
### 模板可维护
|
||
- 聊天气泡左右布局
|
||
- 用户/助手样式映射
|
||
- 输入栏样式
|
||
- 语音按钮是否展示(如无真实语音能力,可先前端占位)
|
||
|
||
---
|
||
|
||
## 4.13 业绩详情 `performance`
|
||
|
||
### 原型可见
|
||
- 本月预计收入
|
||
- 上月收入
|
||
- 当前档位
|
||
- 基础课到手时薪
|
||
- 激励课到手时薪
|
||
- 下一阶段
|
||
- 可能还包括新客户/老客户分段明细、本月/上月记录展开
|
||
|
||
#### 接口 P:业绩详情
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"coach": {
|
||
"coachId": "coach_001",
|
||
"name": "小燕",
|
||
"roleName": "助教",
|
||
"siteName": "广州朗朗桌球"
|
||
},
|
||
"incomeSummary": {
|
||
"forecastIncome": 6206,
|
||
"lastMonthIncome": 16880
|
||
},
|
||
"tier": {
|
||
"currentLevelLabel": "当前档位",
|
||
"baseHourRate": 80,
|
||
"incentiveHourRate": 95,
|
||
"nextLevelLabel": "下一阶段",
|
||
"nextBaseHourRate": 90,
|
||
"nextThresholdHour": 100,
|
||
"currentHour": 87.5
|
||
},
|
||
"sections": {
|
||
"newCustomer": {
|
||
"summary": {},
|
||
"items": []
|
||
},
|
||
"regularCustomer": {
|
||
"summary": {},
|
||
"items": []
|
||
},
|
||
"thisMonthRecords": {
|
||
"items": []
|
||
},
|
||
"lastMonthRecords": {
|
||
"items": []
|
||
}
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4.14 业绩明细 `performance-records`
|
||
|
||
### 原型可见
|
||
- 月份
|
||
- 总记录笔数
|
||
- 总业绩时长
|
||
- 折算前
|
||
- 预估收入
|
||
- 每笔记录:客户、时间、时长、预估收入
|
||
|
||
#### 接口 Q:业绩明细列表
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"coach": {
|
||
"coachId": "coach_001",
|
||
"name": "小燕",
|
||
"levelName": "星级",
|
||
"siteName": "球会名称店"
|
||
},
|
||
"month": "2026-02",
|
||
"summary": {
|
||
"recordCount": 32,
|
||
"perfHour": 59.0,
|
||
"rawHour": 60.5,
|
||
"forecastIncome": 4720
|
||
},
|
||
"records": [
|
||
{
|
||
"recordId": "pr_001",
|
||
"date": "2026-02-07",
|
||
"customerName": "王先生",
|
||
"timeRange": "20:00-22:30",
|
||
"durationHour": 2.5,
|
||
"forecastIncome": 210,
|
||
"projectName": "中八陪练",
|
||
"isEstimated": true
|
||
}
|
||
],
|
||
"monthOptions": ["2026-01", "2026-02"]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 4.15 财务看板 `board-finance`
|
||
|
||
这是最复杂的数据页之一。
|
||
|
||
### 原型可见
|
||
- 一级 tab:财务 / 客户 / 助教
|
||
- 二级筛选:时间、区域、是否环比
|
||
- 多个 section:
|
||
- 经营一览
|
||
- 预收资产
|
||
- 收入
|
||
- 其他财务块
|
||
- section 导航
|
||
- 粘性头部
|
||
- 比较值
|
||
- 提示弹窗
|
||
|
||
### 后端建议
|
||
|
||
#### 接口 R:财务看板聚合查询
|
||
**请求**
|
||
```json
|
||
{
|
||
"timeRange": "current_month",
|
||
"areaCode": "all",
|
||
"compareEnabled": true
|
||
}
|
||
```
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"filters": {
|
||
"timeRange": "current_month",
|
||
"areaCode": "all",
|
||
"compareEnabled": true
|
||
},
|
||
"overview": {
|
||
"revenueAmount": 128000,
|
||
"revenueCompare": 0.12,
|
||
"customerCount": 860,
|
||
"customerCompare": 0.05,
|
||
"visitCount": 1260,
|
||
"visitCompare": -0.03
|
||
},
|
||
"prepaidAssets": {
|
||
"balanceAmount": 560000,
|
||
"newRechargeAmount": 88000,
|
||
"consumeAmount": 42000,
|
||
"refundAmount": 3200
|
||
},
|
||
"incomeSections": [
|
||
{
|
||
"sectionId": "overview",
|
||
"sectionTitle": "经营一览",
|
||
"sectionDesc": "本月核心经营指标",
|
||
"sectionEmoji": "📈",
|
||
"cards": [
|
||
{
|
||
"metricCode": "revenue",
|
||
"metricName": "营业收入",
|
||
"value": 128000,
|
||
"unit": "元",
|
||
"compareValue": 0.12
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"availableTimeRanges": [
|
||
{ "code": "current_month", "name": "本月" },
|
||
{ "code": "last_month", "name": "上月" },
|
||
{ "code": "current_week", "name": "本周" }
|
||
],
|
||
"availableAreas": [
|
||
{ "code": "all", "name": "全部区域" },
|
||
{ "code": "hall", "name": "大厅" },
|
||
{ "code": "a_zone", "name": "A区" }
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 说明
|
||
- **所有统计卡和 section 数据必须后端返回。**
|
||
- 前端不应计算环比、同比,只负责展示。
|
||
- 提示弹窗内容如果是规则说明,可前端枚举;如果是后台运营配置,可后端返回。
|
||
|
||
---
|
||
|
||
## 4.16 客户看板 `board-customer`
|
||
|
||
### 原型可见
|
||
- 排序/维度筛选
|
||
- 项目筛选
|
||
- 时间筛选
|
||
- 客户 TOP100
|
||
- 多个维度榜单:最应召回、最大消费潜力、最高余额、最近充值、最近到店等
|
||
|
||
#### 接口 S:客户看板榜单
|
||
**请求**
|
||
```json
|
||
{
|
||
"dimension": "recall_priority",
|
||
"projectCode": "all",
|
||
"timeRange": "last_60_days",
|
||
"pageNo": 1,
|
||
"pageSize": 100
|
||
}
|
||
```
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"dimension": "recall_priority",
|
||
"projectCode": "all",
|
||
"timeRange": "last_60_days",
|
||
"total": 100,
|
||
"list": [
|
||
{
|
||
"customerId": "c_001",
|
||
"name": "王先生",
|
||
"memberLevel": "vip",
|
||
"balanceAmount": 8600,
|
||
"consumePotentialScore": 95,
|
||
"lastVisitDays": 15,
|
||
"recentRechargeAt": "2026-02-20T12:00:00+08:00",
|
||
"projectPreference": "中八",
|
||
"exclusiveScore60d": 0.82,
|
||
"frequentScore60d": 0.91,
|
||
"mainTags": ["夜场偏好", "高价值"]
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
### 前端模板可维护
|
||
- 榜单卡片样式
|
||
- 维度图标与说明
|
||
- 维度值的视觉突出方式
|
||
|
||
---
|
||
|
||
## 4.17 助教看板 `board-coach`
|
||
|
||
### 原型可见
|
||
- 排序维度
|
||
- 擅长项目
|
||
- 时间范围
|
||
- 助教榜单
|
||
- 每个榜单卡片显示:
|
||
- 姓名
|
||
- 星级
|
||
- 擅长项目
|
||
- 定档 / 折前
|
||
- 代表客户
|
||
- 距升档小时数
|
||
|
||
#### 接口 T:助教看板榜单
|
||
**请求**
|
||
```json
|
||
{
|
||
"sortBy": "perf_high",
|
||
"skillCode": "all",
|
||
"timeRange": "current_month",
|
||
"pageNo": 1,
|
||
"pageSize": 100
|
||
}
|
||
```
|
||
|
||
**响应**
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"data": {
|
||
"sortBy": "perf_high",
|
||
"skillCode": "all",
|
||
"timeRange": "current_month",
|
||
"list": [
|
||
{
|
||
"coachId": "coach_001",
|
||
"name": "小燕",
|
||
"level": "star",
|
||
"skills": ["中八", "斯诺克"],
|
||
"perfHour": 86.2,
|
||
"rawHour": 92.0,
|
||
"representCustomers": ["王先生", "李女士", "赵总"],
|
||
"upgradeRemainHour": 13.8,
|
||
"salaryAmount": 6950,
|
||
"customerBalanceAmount": 86200,
|
||
"finishedTaskCount": 21
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 通用备注 / 操作类接口
|
||
|
||
## 5.1 备注对象模型 `Note`
|
||
|
||
```json
|
||
{
|
||
"noteId": "n_001",
|
||
"entityType": "task",
|
||
"entityId": "t_001",
|
||
"entityName": "王先生",
|
||
"content": "客户月底来店。",
|
||
"ratings": {
|
||
"intention": 4,
|
||
"relation": 5,
|
||
"service": 4
|
||
},
|
||
"createdBy": {
|
||
"userId": "u_1001",
|
||
"name": "小燕"
|
||
},
|
||
"createdAt": "2026-02-27T18:30:00+08:00",
|
||
"updatedAt": "2026-02-27T18:30:00+08:00"
|
||
}
|
||
```
|
||
|
||
## 5.2 通用操作建议
|
||
- 置顶任务
|
||
- 放弃任务
|
||
- 新增备注
|
||
- 删除备注
|
||
- 修改默认首页
|
||
- 发送 AI 消息
|
||
|
||
都建议走单独写接口,而不是塞进一个大而全的“页面保存接口”。
|
||
|
||
---
|
||
|
||
## 6. 页面里哪些值建议写死,哪些不能写死
|
||
|
||
## 6.1 可以写死
|
||
- 页面标题
|
||
- 固定空状态文案
|
||
- AI 图标视觉资源
|
||
- badge 颜色映射
|
||
- section emoji
|
||
- “查看详情 / 取消 / 保存备注 / 复制”这类通用文案
|
||
|
||
## 6.2 不能写死
|
||
- 用户姓名、头像、身份、门店
|
||
- 客户姓名、手机号、余额、最近到店
|
||
- 助教绩效、工资、客户数
|
||
- 任务类型、任务状态、放弃原因
|
||
- 看板所有统计值、趋势值、榜单排序结果
|
||
- AI 话术正文
|
||
- 会话记录
|
||
- 备注正文
|
||
- 月份可选范围
|
||
- 管理员信息
|
||
- 权限状态
|
||
|
||
---
|
||
|
||
## 7. Mock 数据组织建议
|
||
|
||
## 7.1 建议目录
|
||
|
||
```text
|
||
mock/
|
||
auth/
|
||
login.json
|
||
permission-status.json
|
||
user/
|
||
profile.json
|
||
settings.json
|
||
task/
|
||
list.json
|
||
detail-high-priority.json
|
||
detail-priority.json
|
||
detail-callback.json
|
||
detail-relationship.json
|
||
customer/
|
||
detail.json
|
||
service-records-2026-02.json
|
||
coach/
|
||
detail.json
|
||
performance.json
|
||
performance-records-2026-02.json
|
||
note/
|
||
list.json
|
||
chat/
|
||
sessions.json
|
||
session-detail.json
|
||
board/
|
||
finance-current-month.json
|
||
customer-recall-priority.json
|
||
coach-perf-high.json
|
||
```
|
||
|
||
## 7.2 Mock 规则
|
||
- 所有金额统一返回 number,不带 `¥`
|
||
- 所有比率统一返回 number,不带 `%`
|
||
- 所有时间统一返回 ISO 8601 字符串
|
||
- 所有状态统一返回 code,不直接返回样式
|
||
- 所有列表都返回 `total/pageNo/pageSize/list`
|
||
- 所有详情都返回固定对象结构,不随页面版本频繁变化
|
||
|
||
---
|
||
|
||
## 8. 最终接口分组建议
|
||
|
||
## 8.1 认证与权限
|
||
- `POST /auth/login`
|
||
- `GET /auth/permission-status`
|
||
- `POST /auth/apply`
|
||
- `POST /auth/logout`
|
||
|
||
## 8.2 用户与设置
|
||
- `GET /user/profile`
|
||
- `GET /user/settings`
|
||
- `POST /user/settings/default-home`
|
||
|
||
## 8.3 任务
|
||
- `GET /task/list`
|
||
- `GET /task/detail`
|
||
- `POST /task/pin`
|
||
- `POST /task/abandon`
|
||
- `POST /task/note`
|
||
- `DELETE /task/note`
|
||
|
||
## 8.4 客户
|
||
- `GET /customer/detail`
|
||
- `GET /customer/service-records`
|
||
|
||
## 8.5 助教与业绩
|
||
- `GET /coach/detail`
|
||
- `GET /coach/performance`
|
||
- `GET /coach/performance-records`
|
||
|
||
## 8.6 备注
|
||
- `GET /note/list`
|
||
|
||
## 8.7 AI 会话
|
||
- `GET /chat/sessions`
|
||
- `GET /chat/session-detail`
|
||
- `POST /chat/send`
|
||
|
||
## 8.8 看板
|
||
- `GET /board/finance`
|
||
- `GET /board/customer-ranking`
|
||
- `GET /board/coach-ranking`
|
||
|
||
---
|
||
|
||
## 9. 结论
|
||
|
||
1. **原型中的绝大多数业务内容都应视为后端数据,不应写死到模板。**
|
||
2. **真正适合写死的是页面外壳、样式映射、空态文案和按钮文案。**
|
||
3. **对前端最重要的不是接口数量少,而是字段结构稳定。**
|
||
4. **建议尽早统一 code/enum 体系,否则后续页面会出现同义字段多版本并存。**
|
||
5. **Mock 阶段就应按真实接口结构组织 JSON,避免后续全量返工。**
|
||
|
||
---
|
||
|
||
## 10. 建议优先落地的接口顺序
|
||
|
||
### P0
|
||
1. 登录 / 权限状态
|
||
2. 当前用户信息
|
||
3. 任务列表
|
||
4. 任务详情
|
||
5. 备注新增/删除
|
||
6. 放弃任务
|
||
7. AI 会话列表 / 会话详情 / 发消息
|
||
|
||
### P1
|
||
1. 客户详情
|
||
2. 助教详情
|
||
3. 业绩详情
|
||
4. 业绩明细
|
||
5. 服务记录
|
||
|
||
### P2
|
||
1. 财务看板
|
||
2. 客户看板
|
||
3. 助教看板
|