## 新增功能 ### 商机中心 (/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>
150 lines
4.8 KiB
Markdown
150 lines
4.8 KiB
Markdown
# CRM线索转经销商功能开发计划
|
||
|
||
## 功能概述
|
||
|
||
将线索转化为正式经销商,创建经销商档案、迁移跟进记录、创建初始商机。
|
||
|
||
---
|
||
|
||
## 数据表设计
|
||
|
||
### crm_dealer(经销商表)
|
||
|
||
```sql
|
||
CREATE TABLE IF NOT EXISTS crm_dealer (
|
||
dealer_id BIGINT NOT NULL COMMENT '经销商ID(主键)',
|
||
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户ID',
|
||
customer_code VARCHAR(100) DEFAULT NULL COMMENT 'ERP客户编码(关联)',
|
||
dealer_name VARCHAR(200) NOT NULL COMMENT '经销商名称',
|
||
dealer_code VARCHAR(100) NOT NULL COMMENT '经销商编码',
|
||
contact_name VARCHAR(100) DEFAULT NULL COMMENT '联系人',
|
||
mobile VARCHAR(50) DEFAULT NULL COMMENT '手机',
|
||
province VARCHAR(50) DEFAULT NULL COMMENT '省',
|
||
city VARCHAR(50) DEFAULT NULL COMMENT '市',
|
||
level VARCHAR(50) DEFAULT 'C' COMMENT '经销商等级(字典:crm_dealer_level)',
|
||
lifecycle VARCHAR(50) DEFAULT 'active' COMMENT '生命周期(字典:crm_lifecycle)',
|
||
signed_at DATETIME DEFAULT NULL COMMENT '签约时间',
|
||
store_count INT DEFAULT 0 COMMENT '门店数',
|
||
team_size INT DEFAULT 0 COMMENT '团队规模',
|
||
total_order_amount DECIMAL(18,2) DEFAULT 0 COMMENT '累计订单金额',
|
||
total_payment_amount DECIMAL(18,2) DEFAULT 0 COMMENT '累计回款金额',
|
||
activity_score DECIMAL(5,2) DEFAULT 0 COMMENT '活跃评分',
|
||
risk_score DECIMAL(5,2) DEFAULT 0 COMMENT '风险评分',
|
||
owner_user_id BIGINT DEFAULT NULL COMMENT '负责人(关联 sys_user)',
|
||
source_lead_id BIGINT DEFAULT NULL COMMENT '来源线索ID',
|
||
create_dept BIGINT DEFAULT NULL COMMENT '创建部门',
|
||
create_by BIGINT DEFAULT NULL COMMENT '创建人',
|
||
create_time DATETIME DEFAULT NULL COMMENT '创建时间',
|
||
update_by BIGINT DEFAULT NULL COMMENT '更新人',
|
||
update_time DATETIME DEFAULT NULL COMMENT '更新时间',
|
||
del_flag INT DEFAULT 0 COMMENT '删除标志',
|
||
PRIMARY KEY (dealer_id),
|
||
KEY idx_tenant_id (tenant_id),
|
||
KEY idx_customer_code (customer_code),
|
||
KEY idx_dealer_code (dealer_code),
|
||
KEY idx_owner_user_id (owner_user_id),
|
||
KEY idx_source_lead_id (source_lead_id)
|
||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='CRM经销商表';
|
||
```
|
||
|
||
---
|
||
|
||
## 后端接口设计
|
||
|
||
### 1. 线索转经销商
|
||
|
||
**API**: `POST /lead/convert`
|
||
|
||
**请求参数**:
|
||
```json
|
||
{
|
||
"leadId": 1001,
|
||
"dealerName": "XX贸易有限公司",
|
||
"dealerCode": "DL20260001",
|
||
"customerCode": "C001" // 可选,ERP客户编码
|
||
}
|
||
```
|
||
|
||
**业务逻辑**:
|
||
1. 查询线索信息
|
||
2. 创建 `crm_dealer` 记录
|
||
3. 迁移跟进记录:`crm_lead_follow` → `crm_dealer_follow`
|
||
4. 创建初始商机:`crm_opportunity`
|
||
5. 更新线索状态为"已转化"
|
||
6. 返回经销商ID
|
||
|
||
---
|
||
|
||
## 前端UI设计
|
||
|
||
### 转经销商Dialog
|
||
|
||
```vue
|
||
<el-dialog v-model="showConvertDialog" title="线索转经销商" width="600px">
|
||
<el-form :model="convertForm" label-width="120px">
|
||
<el-form-item label="经销商名称" required>
|
||
<el-input v-model="convertForm.dealerName" placeholder="默认为线索公司名称" />
|
||
</el-form-item>
|
||
<el-form-item label="经销商编码" required>
|
||
<el-input v-model="convertForm.dealerCode" placeholder="请输入经销商编码" />
|
||
</el-form-item>
|
||
<el-form-item label="ERP客户编码">
|
||
<el-input v-model="convertForm.customerCode" placeholder="可选,关联ERP客户" />
|
||
</el-form-item>
|
||
<el-form-item label="签约时间">
|
||
<el-date-picker v-model="convertForm.signedAt" type="date" value-format="YYYY-MM-DD" />
|
||
</el-form-item>
|
||
<el-form-item label="经销商等级">
|
||
<el-select v-model="convertForm.level">
|
||
<el-option label="A级经销商" value="A" />
|
||
<el-option label="B级经销商" value="B" />
|
||
<el-option label="C级经销商" value="C" />
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-form>
|
||
<template #footer>
|
||
<el-button @click="showConvertDialog = false">取消</el-button>
|
||
<el-button type="success" @click="submitConvert">确认转化</el-button>
|
||
</template>
|
||
</el-dialog>
|
||
```
|
||
|
||
---
|
||
|
||
## 开发任务清单
|
||
|
||
### 后端任务
|
||
|
||
1. ✅ 创建数据表:`crm_dealer_init.sql`
|
||
2. ✅ Entity:`CrmDealer.java`
|
||
3. ✅ Bo:`CrmDealerBo.java`
|
||
4. ✅ Vo:`CrmDealerVo.java`
|
||
5. ✅ Mapper:`CrmDealerMapper.java`
|
||
6. ✅ Service:`ICrmDealerService.java` + `Impl`
|
||
7. ✅ Controller:转化接口 `POST /lead/convert`
|
||
|
||
### 前端任务
|
||
|
||
1. ✅ API定义:`convertLeadToDealer()` 函数
|
||
2. ✅ 转经销商Dialog UI
|
||
3. ✅ 转化成功后列表刷新
|
||
|
||
---
|
||
|
||
## 开发顺序
|
||
|
||
建议按以下顺序开发:
|
||
|
||
**Day 1-2**: 后端开发
|
||
- 数据表、Entity、Service、Controller
|
||
|
||
**Day 3**: 前端开发
|
||
- Dialog UI、API调用、转化逻辑
|
||
|
||
**Day 4**: 测试验证
|
||
- 线索转化流程测试
|
||
- 经销商数据验证
|
||
|
||
---
|
||
|
||
请按照此计划开始开发。 |