Files
hzhub/docs/crm-convert-plan.md
大壮 3f643ef31f feat: 完成CRM商机和线索管理模块开发
## 新增功能

### 商机中心 (/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>
2026-05-20 09:46:59 +00:00

4.8 KiB
Raw Blame History

CRM线索转经销商功能开发计划

功能概述

将线索转化为正式经销商,创建经销商档案、迁移跟进记录、创建初始商机。


数据表设计

crm_dealer经销商表

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

请求参数:

{
  "leadId": 1001,
  "dealerName": "XX贸易有限公司",
  "dealerCode": "DL20260001",
  "customerCode": "C001"  // 可选ERP客户编码
}

业务逻辑:

  1. 查询线索信息
  2. 创建 crm_dealer 记录
  3. 迁移跟进记录:crm_lead_followcrm_dealer_follow
  4. 创建初始商机:crm_opportunity
  5. 更新线索状态为"已转化"
  6. 返回经销商ID

前端UI设计

转经销商Dialog

<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. EntityCrmDealer.java
  3. BoCrmDealerBo.java
  4. VoCrmDealerVo.java
  5. MapperCrmDealerMapper.java
  6. ServiceICrmDealerService.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: 测试验证

  • 线索转化流程测试
  • 经销商数据验证

请按照此计划开始开发。