# CRM销售自动化(渠道版)执行级详细设计说明书 V3
# 1. 文档说明
## 1.1 文档目标
本文档用于指导HZHub项目中CRM销售自动化(渠道版)系统的:
- 数据库设计(适配 MySQL 8 + MyBatis-Plus)
- 后端接口开发(适配 hzhub-system 服务)
- 前端页面开发(适配 **hzhub-portal-employee 员工门户**)
- AI能力集成(适配 LangChain4j + Weaviate)
- 企业微信集成
- 自动化流程配置(适配 warm-flow)
- 权限与组织体系建设(适配 Sa-Token)
本文档属于"开发执行版设计文档 V3",针对**员工门户(hzhub-portal-employee)**进行定制化适配。
---
## 1.2 与 V1/V2 版本的主要差异
| 方面 | V1 版本 | V2 版本 | V3 版本(员工门户适配) |
|---|---|---|---|
| 前端项目 | Vue3 + Element Plus(通用) | Vben Admin(管理后台) | **Element Plus(员工门户)** |
| 前端路径 | `/api/**` | `/crm/**`(管理后台) | **`/crm/**`(员工门户)** |
| 现有基础 | 无 | 无 | **已有CRM和经销商页面** |
| 数据来源 | 独立CRM表 | 独立CRM表 | **ERP客户数据 + CRM表** |
| 技术栈 | Python FastAPI | LangChain4j | **LangChain4j + Vue3 Composition API** |
| UI风格 | 未指定 | Vben Admin 企业级 | **Element Plus 卡片式** |
| 用户角色 | 通用销售人员 | 管理员 + 销售 | **企业员工 + 销售人员** |
---
## 1.3 员工门户现有功能
### 已实现页面
| 页面 | 路径 | 功能 | 数据来源 |
|---|---|---|---|
| 销售CRM | `/crm` | 商机管道视图 + 客户列表 | ERP Customer(动态API) |
| 经销商管理 | `/dealer` | 经销商卡片视图 + 筛选 | ERP Customer(动态API) |
### 现有API
```typescript
// ERP 客户数据(动态API)
GET /erp/dynamic/v1/customer/list // 客户列表
GET /erp/dynamic/v1/customer/detail // 客户详情
GET /erp/dynamic/v1/customer/sales-areas // 销区列表
GET /erp/dynamic/v1/customer/brands // 品牌列表
```
### 现有数据模型(CustomerVO)
```typescript
interface CustomerVO {
customerCode: string; // 客户编码
customerName: string; // 客户名称
companyCode: string; // 公司编码
companyName: string; // 公司名称
brand: string; // 品牌
brandName: string; // 品牌名称
contactName: string; // 联系人
salesAreaCode: string; // 销区编码
salesAreaName: string; // 销区名称
salesPersonCode: string; // 销售人员编码
salesPersonName: string; // 销售人员姓名
province: string; // 省
city: string; // 市
isStop: number; // 状态(0合作中,1停用)
// ... 其他字段
}
```
---
# 2. 系统总体架构
## 2.1 HZHub 集成架构(员工门户)
### 服务归属
CRM模块归属于 **hzhub-system** 服务(端口 8083),前端在 **hzhub-portal-employee** 实现。
```
┌─────────────────────────────────────────┐
│ hzhub-portal-employee (员工门户) │
│ Vue3 + Element Plus + TypeScript │
│ Port: 5137 │
│ 已有: /crm (销售CRM) + /dealer (经销商) │
└────────────┬────────────────────────────┘
│
┌────────┴────────┐
│ hzhub-gateway │ (API Gateway, port 8080)
│ Spring Cloud │ JWT auth, routing
└───┬──────┬──────┘
│ │
┌───▼──────────┐
│ hzhub-system │ CRM 模块归属服务
│ 8083 │ (Users, Roles, CRM)
└─────────────┘
```
### Gateway 路由配置
在 `hzhub-gateway/src/main/resources/application.yml` 中添加 CRM 路由:
```yaml
spring:
cloud:
gateway:
routes:
# CRM 路由(新增)
- id: hzhub-crm
uri: lb://hzhub-system
predicates:
- Path=/crm/**
filters:
- StripPrefix=1 # 去除 /crm 前缀
```
---
## 2.2 技术栈适配(员工门户)
| 层级 | HZHub 技术栈 | 说明 |
|---|---|---|
| 前端Web | Vue3 + Element Plus + TypeScript | **hzhub-portal-employee 已部署** |
| 前端路由 | Vue Router | 静态路由配置(`staticRouter.ts`) |
| 状态管理 | Pinia + persistedstate | 已集成 |
| HTTP请求 | hook-fetch + SSE | 已集成 |
| 后端 | Spring Boot 3.5.8 + MyBatis-Plus | hzhub-system 服务 |
| 数据库 | MySQL 8.0 | 已部署 |
| ERP数据 | SQL Server 2008 R2 | **hzhub-erp 服务** |
| 缓存 | Redis 7 | 已部署 |
| 向量数据库 | Weaviate 1.25.0 | 已部署 |
| AI服务 | LangChain4j + LangGraph4j | hzhub-ai 服务集成 |
| 文件存储 | MinIO | 已部署 |
| 工作流 | warm-flow 1.8.2 | 已集成在 hzhub-system |
| 权限 | Sa-Token | 已集成,JWT-based |
---
# 3. 数据库设计规范(HZHub 适配)
## 3.1 通用字段规范
所有CRM业务表继承 `TenantEntity`,包含以下字段:
| 字段 | 类型 | 注解 | 说明 |
|---|---|---|---|
| tenant_id | varchar(20) | 无注解(继承) | 租户ID(多租户) |
| create_dept | bigint | @TableField(fill = INSERT) | 创建部门 |
| create_by | bigint | @TableField(fill = INSERT) | 创建人 |
| create_time | datetime | @TableField(fill = INSERT) | 创建时间 |
| update_by | bigint | @TableField(fill = INSERT_UPDATE) | 更新人 |
| update_time | datetime | @TableField(fill = INSERT_UPDATE) | 更新时间 |
**注意:** 不需要手动添加 `id` 字段,使用 MyBatis-Plus 的 `@TableId` 注解。
---
## 3.2 Entity 实体类规范
### 基类继承
```java
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("crm_lead")
public class CrmLead extends TenantEntity {
@TableId(value = "lead_id", type = IdType.ASSIGN_ID)
private Long leadId;
// 业务字段...
/**
* 删除标志(0代表存在 1代表删除)
*/
@TableLogic
private Integer delFlag;
}
```
---
# 4. 线索中心模块设计(适配员工门户)
## 4.1 模块目标
用于管理潜在经销商,支持:
- 多渠道线索接入
- **关联ERP客户数据**(customer_code)
- AI意向识别(LangChain4j)
- AI风险分析
- 自动分配销售
- 商机转化
---
## 4.2 数据表设计
### 4.2.1 crm_lead(线索表)
| 字段 | 类型 | 注解 | 说明 |
|---|---|---|---|
| lead_id | bigint | @TableId(ASSIGN_ID) | 主键 |
| customer_code | varchar(100) | - | **ERP客户编码(关联)** |
| company_name | varchar(200) | - | 公司名称 |
| contact_name | varchar(100) | - | 联系人 |
| mobile | varchar(50) | - | 手机号 |
| wechat | varchar(100) | - | 微信号 |
| province | varchar(50) | - | 省 |
| city | varchar(50) | - | 市 |
| region_id | bigint | - | 区域ID(关联 sys_dept) |
| source_type | varchar(50) | - | 来源类型(字典:crm_lead_source) |
| activity_name | varchar(100) | - | 活动名称 |
| referrer_name | varchar(100) | - | 推荐人 |
| industry | varchar(100) | - | 行业(字典:crm_industry) |
| company_scale | varchar(100) | - | 公司规模(字典:crm_scale) |
| store_count | int | - | 门店数 |
| intent_level | varchar(20) | - | AI意向等级(字典:crm_intent_level) |
| ai_score | decimal(5,2) | - | AI评分 |
| risk_level | varchar(20) | - | 风险等级(字典:crm_risk_level) |
| owner_user_id | bigint | - | 负责人(关联 sys_user) |
| lead_status | varchar(50) | - | 状态(字典:crm_lead_status) |
| converted_dealer_id | bigint | - | 转化经销商ID |
| del_flag | int | @TableLogic | 删除标志 |
**继承字段:** tenant_id, create_dept, create_by, create_time, update_by, update_time
**关键设计:**
- `customer_code` 关联 ERP 客户数据(可选,支持同步)
- 如果 `customer_code` 存在,自动从 ERP 拉取基础信息
- 线索转化时,创建 `crm_dealer` 并关联 `customer_code`
---
### 4.2.2 crm_lead_follow(线索跟进记录)
| 字段 | 类型 | 说明 |
|---|---|---|
| follow_id | bigint | 主键 |
| lead_id | bigint | 线索ID |
| follow_type | varchar(50) | 跟进方式(字典:crm_follow_type) |
| content | text | 跟进内容 |
| ai_summary | text | AI摘要 |
| next_follow_time | datetime | 下次跟进时间 |
| follow_user_id | bigint | 跟进人(关联 sys_user) |
| del_flag | int | 删除标志 |
---
## 4.3 接口设计
### 4.3.1 创建线索
**API:** `POST /crm/lead`
**请求参数:**
```json
{
"customerCode": "C001", // ERP客户编码(可选)
"companyName": "XX贸易有限公司",
"contactName": "张三",
"mobile": "13800000000",
"wechat": "zhangsan",
"province": "广东省",
"city": "深圳市",
"industry": "食品",
"storeCount": 20
}
```
**业务逻辑:**
1. 如果提供 `customer_code`,调用 `hzhub-erp:8082/erp/dynamic/v1/customer/detail` 拉取客户信息
2. 自动填充客户基础信息(companyName, contactName, mobile 等)
3. 校验手机号是否重复(同租户内)
4. 调用 LangChain4j AI服务分析意向等级(`hzhub-ai:6039/ai/analyze/intent`)
5. 自动生成AI评分
6. 根据区域规则(sys_dept)分配销售(owner_user_id)
7. 创建自动跟进任务(warm-flow)
---
### 4.3.2 线索转经销商
**API:** `POST /crm/lead/convert`
**请求参数:**
```json
{
"leadId": 12345,
"dealerName": "XX贸易",
"dealerCode": "DL20260001",
"customerCode": "C001" // ERP客户编码(可选)
}
```
**逻辑:**
1. 创建 `crm_dealer` 数据
2. 如果 `customer_code` 存在,同步 ERP 客户数据
3. 迁移历史跟进记录到 `crm_dealer_follow`
4. 创建初始商机(`crm_opportunity`)
5. 更新线索状态为"已转化"
6. 触发 warm-flow 工作流(经销商审批)
---
## 4.4 前端页面设计(Element Plus - 员工门户)
### 4.4.1 扩展现有CRM页面
**路径:** `hzhub-portal-employee/src/pages/crm/index.vue`(**已存在,需扩展**)
**现有功能:**
- 商机管道视图(Pipeline)
- 客户列表表格(使用 ERP CustomerVO)
- 新建客户对话框(基础功能)
**新增功能:**
#### 1. 线索列表Tab页
在现有CRM页面添加Tab切换:
```vue
```
#### 2. 线索管理模块
**筛选栏:**
```vue
搜索
```
**线索列表(Element Plus Table):**
```vue
{{ row.companyName }}
{{ row.companyName }}
{{ maskPhone(row.mobile) }}
{{ getIntentLabel(row.intentLevel) }}
{{ row.ownerUserName?.charAt(0) }}
详情
跟进
转经销商
```
#### 3. 线索详情 Drawer
```vue
{{ currentLead.companyName }}
{{ currentLead.contactName }}
{{ currentLead.mobile }}
{{ currentLead.customerCode }}
{{ getRiskLabel(currentLead.riskLevel) }}
跟进记录
{{ follow.content }}
AI摘要:{{ follow.aiSummary }}
```
#### 4. 新建线索 Dialog
```vue
取消
创建线索
```
---
### 4.4.2 AI分析侧边栏(Element Plus Drawer)
右侧固定展示:
```vue
```
**AI服务调用:** 通过 Gateway 调用 `hzhub-ai:6039/ai/chat/analyze`
---
# 5. 经销商中心模块设计
## 5.1 现有页面扩展
**路径:** `hzhub-portal-employee/src/pages/dealer/index.vue`(**已存在,需扩展**)
**现有功能:**
- 经销商卡片视图(使用 ERP CustomerVO)
- 筛选(销区、品牌、状态、搜索)
- 统计数据展示
**新增功能:**
### 5.1.1 关联CRM经销商数据
```typescript
interface DealerVO extends CustomerVO {
// CRM扩展字段
dealerId?: number; // CRM经销商ID
level?: string; // 经销商等级
lifecycle?: string; // 生命周期
totalOrderAmount?: number; // 累计订单金额
totalPaymentAmount?: number; // 累计回款金额
activityScore?: number; // 活跃评分
riskScore?: number; // 风险评分
tags?: DealerTagVO[]; // AI标签
}
```
### 5.1.2 经销商详情 Dialog
```vue
{{ dealer.customerCode }}
{{ dealer.level }}
活跃度评分
风险评分
```
---
## 5.2 数据表设计
### 5.2.1 crm_dealer(经销商表)
| 字段 | 类型 | 说明 |
|---|---|---|
| dealer_id | bigint | 主键 |
| customer_code | varchar(100) | **ERP客户编码(关联)** |
| dealer_name | varchar(200) | 经销商名称 |
| dealer_code | varchar(100) | 编码 |
| contact_name | varchar(100) | 联系人 |
| mobile | varchar(50) | 手机 |
| province | varchar(50) | 省 |
| city | varchar(50) | 市 |
| level | varchar(50) | 等级(字典:crm_dealer_level) |
| lifecycle | varchar(50) | 生命周期(字典:crm_lifecycle) |
| signed_at | datetime | 签约时间 |
| store_count | int | 门店数 |
| team_size | int | 团队规模 |
| total_order_amount | decimal(18,2) | 累计订单金额 |
| total_payment_amount | decimal(18,2) | 累计回款金额 |
| activity_score | decimal(5,2) | 活跃评分 |
| risk_score | decimal(5,2) | 飆险评分 |
| owner_user_id | bigint | 负责人(关联 sys_user) |
| del_flag | int | 删除标志 |
---
# 6. API 接口设计(员工门户适配)
## 6.1 前端 API 定义
**路径:** `hzhub-portal-employee/src/api/crm/`(**新建目录**)
创建:
- `index.ts`(API调用)
- `types.ts`(类型定义)
### API示例
```typescript
import request from '@/utils/request';
// 线索列表
export function getLeadList(params: LeadQueryParams) {
return request.get>('/crm/lead/list', params).json();
}
// 创建线索
export function createLead(data: LeadForm) {
return request.post>('/crm/lead', data).json();
}
// 线索详情
export function getLeadDetail(leadId: number) {
return request.get>(`/crm/lead/${leadId}`).json();
}
// 线索跟进记录
export function getLeadFollowRecords(leadId: number) {
return request.get>(`/crm/lead/follow/${leadId}`).json();
}
// 添加跟进记录
export function addLeadFollow(data: LeadFollowForm) {
return request.post>('/crm/lead/follow', data).json();
}
// 线索转经销商
export function convertLeadToDealer(data: ConvertForm) {
return request.post>('/crm/lead/convert', data).json();
}
```
---
## 6.2 后端接口设计(hzhub-system)
### Controller规范
```java
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/crm/lead")
public class CrmLeadController extends BaseController {
private final ICrmLeadService leadService;
/**
* 获取线索列表
*/
@GetMapping("/list")
public TableDataInfo list(CrmLeadBo lead, PageQuery pageQuery) {
return leadService.selectPageLeadList(lead, pageQuery);
}
/**
* 新增线索
*/
@Log(title = "线索管理", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R add(@Validated @RequestBody CrmLeadBo lead) {
return R.ok(leadService.insertLead(lead));
}
/**
* 线索详情
*/
@GetMapping("/{leadId}")
public R detail(@PathVariable Long leadId) {
return R.ok(leadService.selectLeadById(leadId));
}
/**
* 线索跟进记录
*/
@GetMapping("/follow/{leadId}")
public R> followRecords(@PathVariable Long leadId) {
return R.ok(leadService.selectFollowRecordsByLeadId(leadId));
}
/**
* 添加跟进记录
*/
@Log(title = "线索跟进", businessType = BusinessType.INSERT)
@PostMapping("/follow")
public R addFollow(@Validated @RequestBody CrmLeadFollowBo follow) {
return R.ok(leadService.insertFollowRecord(follow));
}
/**
* 线索转经销商
*/
@Log(title = "线索转化", businessType = BusinessType.INSERT)
@PostMapping("/convert")
public R convert(@Validated @RequestBody CrmLeadConvertBo convert) {
return R.ok(leadService.convertToDealer(convert));
}
}
```
---
# 7. ERP数据集成设计
## 7.1 数据同步策略
### 同步方式
**方式1:关联查询(实时)**
线索/经销商表存储 `customer_code`,实时调用 ERP 动态API 拉取客户信息。
```java
public CrmLeadVo selectLeadById(Long leadId) {
CrmLead lead = leadMapper.selectById(leadId);
CrmLeadVo vo = BeanUtil.toBean(lead, CrmLeadVo.class);
// 如果有ERP客户编码,拉取ERP数据补充
if (StringUtils.isNotBlank(lead.getCustomerCode())) {
CustomerVO erpCustomer = erpService.getCustomerDetail(lead.getCustomerCode());
vo.setErpCustomerName(erpCustomer.getCustomerName());
vo.setErpSalesAreaName(erpCustomer.getSalesAreaName());
// ...
}
return vo;
}
```
**方式2:定时同步(批量)**
使用 XXL-Job 定时任务同步 ERP 客户数据到 CRM 表。
```java
@Scheduled(cron = "0 0 2 * * ?") // 每天凌晨2点
public void syncErpCustomers() {
// 调用 hzhub-erp:8082/erp/dynamic/v1/customer/list
// 批量更新 crm_dealer 表
}
```
---
## 7.2 ERP动态API调用
**hzhub-system 服务调用 ERP:**
```java
@Service
public class ErpIntegrationService {
@Value("${erp.base-url}")
private String erpBaseUrl; // http://localhost:8082
/**
* 获取ERP客户详情
*/
public CustomerVO getCustomerDetail(String customerCode) {
String url = erpBaseUrl + "/erp/dynamic/v1/customer/detail?customerCode=" + customerCode;
ResponseEntity> response = restTemplate.getForEntity(url, R.class);
return response.getBody().getData();
}
/**
* 获取ERP客户列表
*/
public List getCustomerList(CustomerQueryParam param) {
String url = erpBaseUrl + "/erp/dynamic/v1/customer/list";
// ...
}
}
```
---
# 8. 企业微信集成(员工门户)
## 8.1 企业微信侧边栏
**展示内容:**
- 经销商画像(从 CRM + ERP 拉取)
- 最近订单
- 最近拜访
- 商机阶段
- AI风险
**实现:**
1. 企业微信应用配置(应用ID、Secret)
2. 后端接口:`GET /crm/wecom/sidebar/{externalUserId}`
3. 前端嵌入企业微信侧边栏(H5页面)
---
## 8.2 移动端H5页面
**员工门户支持企业微信H5:**
```typescript
// 企业微信环境判断
if (window.location.href.includes('wework')) {
// 使用企业微信JS-SDK
wx.config({
beta: true,
appId: 'YOUR_APPID',
// ...
});
}
```
**移动端页面:**
- `/crm/mobile/visit` - 拜访记录(语音录入)
- `/crm/mobile/follow` - 快速跟进
---
# 9. AI能力集成设计
## 9.1 AI服务调用(LangChain4j)
**调用 hzhub-ai 服务:**
```java
@Service
public class CrmAiService {
@Autowired
private ChatClient chatClient; // LangChain4j
/**
* AI意向分析
*/
public LeadIntentAnalysis analyzeIntent(CrmLead lead) {
String prompt = String.format(
"分析以下线索的意向等级和风险:%s,联系人:%s,行业:%s",
lead.getCompanyName(), lead.getContactName(), lead.getIndustry()
);
AiMessage response = chatClient.generate(prompt);
// 解析AI响应,提取意向等级、评分、风险等级
return parseIntentAnalysis(response.text());
}
/**
* AI跟进摘要生成
*/
public String generateFollowSummary(String followContent) {
String prompt = "请为以下跟进记录生成摘要:" + followContent;
AiMessage response = chatClient.generate(prompt);
return response.text();
}
}
```
---
## 9.2 向量检索(Weaviate)
**使用 Weaviate 存储历史线索案例:**
```java
@Service
public class LeadSimilarityService {
/**
* 查找相似线索案例
*/
public List findSimilarLeads(CrmLead newLead) {
// 将新线索信息转为向量
// 在 Weaviate 中检索相似案例
// 返回历史成功案例供参考
}
}
```
---
# 10. 自动化工作流设计(warm-flow)
## 10.1 线索分配流程
```text
线索创建
-> AI意向分析
-> 自动分配规则(根据区域)
-> warm-flow审批流程
-> 销售确认接手
```
**实现:**
```java
// 触发warm-flow流程
workflowService.startProcessInstanceByKey("crm_lead_assign_flow", leadId);
```
---
## 10.2 线索转化流程
```text
线索转化申请
-> warm-flow审批流程(区域经理审批)
-> 创建经销商数据
-> 创建商机
-> 更新线索状态
```
---
# 11. 权限与组织设计(Sa-Token)
## 11.1 数据权限层级
```text
总部(sys_dept: root)
-> 大区(sys_dept: level 1)
-> 区域(sys_dept: level 2)
-> 城市(sys_dept: level 3)
-> 销售(sys_user)
```
**实现:** 使用 `sys_dept` 表的树形结构,通过 `DataPermissionHelper` 实现数据隔离。
---
## 11.2 权限控制点
| 模块 | 权限标识 | Sa-Token 注解 |
|---|---|---|
| 线索 | crm:lead:list, crm:lead:add, crm:lead:edit, crm:lead:remove | @SaCheckPermission |
| 经销商 | crm:dealer:list, crm:dealer:edit | - |
| 合同 | crm:contract:approve, crm:contract:amount-edit | - |
| 回款 | crm:payment:list, crm:payment:verify | - |
| BI | crm:bi:view(区域数据隔离) | - |
**注意:** 员工门户不需要 Sa-Token注解,权限由 Gateway 统一控制。
---
# 12. 前端开发规范(Element Plus)
## 12.1 页面结构规范
```vue
```
---
## 12.2 目录结构
```
hzhub-portal-employee/src/
├── api/
│ └── crm/
│ │ ├── index.ts # CRM API调用
│ │ └── types.ts # 类型定义
├── pages/
│ └── crm/
│ │ ├── index.vue # CRM主页(扩展)
│ │ ├── LeadDetailDrawer.vue # 线索详情组件
│ │ ├── FollowDrawer.vue # 跟进记录组件
│ │ └── ConvertDialog.vue # 转化对话框
│ └── dealer/
│ │ ├── index.vue # 经销商主页(扩展)
│ │ ├── DealerDetailDialog.vue # 经销商详情
```
---
# 13. 实施计划(员工门户)
## 第一阶段(1-2个月)
**建设内容:**
- 扩展员工门户现有CRM页面(线索管理Tab)
- 后端CRM基础接口(hzhub-system)
- ERP数据关联(customer_code)
- 线索跟进记录(Timeline展示)
- warm-flow审批流程(线索分配)
**技术栈:**
- 后端:Spring Boot + MyBatis-Plus + Sa-Token + warm-flow
- 前端:Vue3 + Element Plus + TypeScript
- ERP集成:hzhub-erp 动态API
---
## 第二阶段(2-3个月)
**建设内容:**
- AI意向分析(LangChain4j)
- AI跟进摘要生成
- AI风险分析
- 企业微信侧边栏集成
- 移动端H5拜访页面
**技术栈:**
- AI:LangChain4j + hzhub-ai 服务
- 向量:Weaviate(案例检索)
- 移动端:企业微信JS-SDK
---
## 第三阶段(3-4个月)
**建设内容:**
- AI预测模型(成交预测、流失预测)
- AI Copilot(LangGraph4j)
- BI仪表盘(扩展现有 `/bi` 页面)
- 自动化工作流(XXL-Job)
**技术栈:**
- AI:LangGraph4j + hzhub-ai 服务
- 定时任务:XXL-Job
---
# 14. 与 HZHub 项目的集成要点
## 14.1 Gateway 路由配置
**位置:** `hzhub-gateway/src/main/resources/application.yml`
```yaml
spring:
cloud:
gateway:
routes:
# CRM 路由(添加到现有路由列表)
- id: hzhub-crm
uri: lb://hzhub-system
predicates:
- Path=/crm/**
filters:
- StripPrefix=1
```
---
## 14.2 前端路由扩展
**位置:** `hzhub-portal-employee/src/routers/modules/staticRouter.ts`
**现有路由(已存在):**
```typescript
{
path: '/crm',
name: 'crm',
component: () => import('@/pages/crm/index.vue'),
meta: {
title: '销售CRM',
subtitle: '客户关系管理',
icon: 'TrendCharts',
},
},
{
path: '/dealer',
name: 'dealer',
component: () => import('@/pages/dealer/index.vue'),
meta: {
title: '经销商管理',
subtitle: '经销商信息管理',
icon: 'Shop',
},
},
```
**无需修改,直接扩展现有页面即可。**
---
## 14.3 数据库初始化
**SQL 文件:** `hzhub-system/src/main/resources/db/crm_init.sql`
包含:
- CRM 表结构(crm_lead, crm_dealer, crm_opportunity 等)
- 数据字典(crm_lead_source, crm_opportunity_stage 等)
- 菜单配置(sys_menu - 告知管理员在后台配置)
---
# 15. 核心差异总结(员工门户 vs 管理后台)
| 方面 | 管理后台(V2) | 员工门户(V3) |
|---|---|---|
| 前端项目 | hzhub-admin | **hzhub-portal-employee** |
| UI框架 | Vben Admin + Ant Design Vue | **Element Plus** |
| 现有基础 | 无,需要新建 | **已有CRM和经销商页面** |
| 开发方式 | 新建独立页面 | **扩展现有页面** |
| 数据来源 | 独立CRM表 | **ERP客户数据 + CRM表** |
| 用户角色 | 管理员 + 销售 | **企业员工 + 销售人员** |
| 权限控制 | Sa-Token注解 | **Gateway统一控制** |
| 移动端 | 企业微信H5(新建) | **企业微信H5(员工门户支持)** |
---
# 总结
本文档将 CRM 销售自动化系统完全适配到 **员工门户(hzhub-portal-employee)**,充分利用:
1. **现有页面**:`/crm`(销售CRM)和 `/dealer`(经销商)已存在,直接扩展
2. **ERP数据集成**:关联 `customer_code`,实时拉取 ERP 客户信息
3. **Element Plus UI**:使用卡片式、Timeline、Drawer等组件
4. **Vue3 Composition API**:`