## 新增功能 ### 商机中心 (/opportunity) - Stats统计卡片(商机总数、金额、赢单、转化率) - Pipeline商机管道(阶段Tab:全部/线索/谈判中/方案/赢单) - 商机列表真实数据渲染(来自crm_opportunity表) - 商机卡片详情(经销商、负责人、金额、概率) - Pipeline计数实时更新 ### 线索中心 (/lead) - 线索列表完整功能(CRUD) - 线索详情Drawer(基础信息 + 跟进记录Timeline) - 新建线索(含ERP客户关联、手机号验证) - 添加跟进记录(跟进方式、内容、下次时间) - 分配负责人(用户选择器,显示真实姓名) - 线索转经销商(自动创建商机) - 删除线索(逻辑删除) ## 后端开发 ### 数据库表 - crm_lead(线索表) - crm_lead_follow(线索跟进记录表) - crm_dealer(经销商表) - crm_opportunity(商机表) - crm_opportunity_follow(商机跟进记录表) - 数据字典初始化 ### API接口 - 线索管理:CRUD、详情、跟进、分配、转化 - 商机管理:列表查询 - 用户选择器:员工门户专用API ### 核心功能 - 线索转化自动创建经销商和商机 - 负责人翻译显示真实姓名(修复) - 手机号前后端双重格式验证(修复) ## 前端开发 ### 页面架构改进 - 商机中心:保留原CRM设计风格(Stats + Pipeline) - 线索中心:独立页面(完整线索管理) - 左侧菜单:独立菜单项(商机中心、线索中心) ### API模块 - src/api/crm/:线索和商机API类型定义和调用方法 - src/api/user/:用户选择器API ### 样式设计 - 商机中心:100%保持原CRM Pipeline设计风格 - 使用CSS变量系统(var(--radius-lg), var(--shadow-sm)等) - Pipeline Tab白色圆角设计 - 商机卡片阴影和hover效果 - 头像堆叠显示 ## 配置修改 - Gateway路由:添加CRM模块路由配置 - Gateway路由:添加system模块路由配置 - Aside菜单:拆分商机中心和线索中心 ## Bug修复 - 修复负责人显示手机号问题(UserNameTranslationImpl返回昵称) - 修复手机号格式验证缺失(前后端双重验证) - 修复商机管道设计风格不一致(完整复制原CRM样式) ## 文档 - CRM销售模块详细设计说明书V3.md - CRM线索转化API契约 - CRM线索转化开发计划 - CRM线索转化测试指引 - CRM线索管理测试指引 - CRM商机管理测试指引 - CRM架构改进报告 - CRM Bug修复报告 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
103 lines
2.4 KiB
Markdown
103 lines
2.4 KiB
Markdown
# CRM 线索转经销商 API 契约
|
||
|
||
## 基础信息
|
||
|
||
- **服务**: hzhub-system (8083)
|
||
- **API**: `POST /lead/convert`
|
||
- **Gateway路由**: `/crm/**` → StripPrefix=1 → `/lead/convert`
|
||
|
||
---
|
||
|
||
## 接口定义
|
||
|
||
### 线索转经销商
|
||
|
||
**API**: `POST /lead/convert`
|
||
|
||
**请求参数** (CrmLeadConvertBo):
|
||
|
||
```json
|
||
{
|
||
"leadId": 1001, // 必填,线索ID
|
||
"dealerName": "XX贸易有限公司", // 必填,经销商名称
|
||
"dealerCode": "DL20260001", // 必填,经销商编码
|
||
"customerCode": "C001", // 可选,ERP客户编码
|
||
"signedAt": "2026-05-20", // 可选,签约时间
|
||
"level": "C" // 可选,经销商等级(默认C)
|
||
}
|
||
```
|
||
|
||
**响应**: `R<Void>`
|
||
|
||
```json
|
||
{
|
||
"code": 200,
|
||
"msg": "转化成功"
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 业务逻辑
|
||
|
||
1. 查询线索信息(`crm_lead`)
|
||
2. 校验线索状态(必须不是"已转化")
|
||
3. 创建经销商记录(`crm_dealer`):
|
||
- 从线索复制基础信息(companyName→dealerName, contactName, mobile, province, city)
|
||
- 设置 sourceLeadId = leadId
|
||
- 设置 ownerUserId = lead.ownerUserId
|
||
4. 迁移跟进记录(可选):
|
||
- 将 `crm_lead_follow` 数据复制到 `crm_dealer_follow`(如果有此表)
|
||
5. 创建初始商机(`crm_opportunity`):
|
||
- opportunityName = "初始商机"
|
||
- dealerId = 新经销商ID
|
||
- stage = "初步接触"
|
||
6. 更新线索状态:
|
||
- leadStatus = "converted"
|
||
- convertedDealerId = 新经销商ID
|
||
7. 返回成功消息
|
||
|
||
---
|
||
|
||
## 数据字典
|
||
|
||
### crm_dealer_level(经销商等级)
|
||
|
||
| 字典值 | 字典标签 |
|
||
|---|---|
|
||
| A | A级经销商 |
|
||
| B | B级经销商 |
|
||
| C | C级经销商 |
|
||
|
||
### crm_lifecycle(生命周期)
|
||
|
||
| 字典值 | 字典标签 |
|
||
|---|---|
|
||
| active | 活跃期 |
|
||
| stable | 稳定期 |
|
||
| decline | 衰退期 |
|
||
| churn | 流失期 |
|
||
|
||
---
|
||
|
||
## 前端类型定义
|
||
|
||
```typescript
|
||
export interface CrmLeadConvertBo {
|
||
leadId: number; // 必填
|
||
dealerName: string; // 必填
|
||
dealerCode: string; // 必填
|
||
customerCode?: string; // 可选
|
||
signedAt?: string; // 可选,格式 YYYY-MM-DD
|
||
level?: string; // 可选,默认 C
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
1. **数据校验**: 线索ID必须存在且状态未转化
|
||
2. **唯一性**: dealerCode在同一租户内唯一
|
||
3. **事务性**: 整个转化过程使用事务(@Transactional)
|
||
4. **ERP关联**: 如果提供customerCode,在经销商详情中可查看ERP数据 |