Files
Neo-ZQYY/docs/prd/后端接口需求说明_数据需求PRD.md
2026-03-15 10:15:02 +08:00

1381 lines
28 KiB
Markdown
Raw Permalink 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.
# 页面数据需求说明文档(推测版 / 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. 助教看板