98 lines
4.8 KiB
Markdown
98 lines
4.8 KiB
Markdown
# 线索管理模块迁移方案 — 01 概述
|
||
|
||
> **编写日期**:2026-05-31
|
||
> **状态**:待审核(审核通过后再执行 step-02 拷贝)
|
||
|
||
---
|
||
|
||
## 迁移目标
|
||
|
||
将原 CRM(`shanxia/crm`)的 **线索管理** 能力完整移植到 shanxia2.0(`web-admin` + `backend`),行为以 Java 实现为准,UI 对齐 Fresh Mint 规范。
|
||
|
||
## 迁移范围
|
||
|
||
| 子模块 | 原 CRM 入口 | 说明 |
|
||
|--------|-------------|------|
|
||
| 线索列表 | `crm/clue/index.vue` | 多视图 Tab、筛选、批量操作、导入导出 |
|
||
| 线索详情 | `crm/clue/detail.vue` | 独立详情页(含跟进时间线、转化入口) |
|
||
| 线索表单 | `crm/clue/form.vue` | 新增/编辑弹窗 |
|
||
| 跟进表单 | `crm/clue/followForm.vue` | 新增/编辑跟进 |
|
||
| 转化确认 | `crm/clue/convertForm.vue` | 线索 → 客户 |
|
||
| 批量分配 | `crm/clue/assignForm.vue` | 批量改负责人 |
|
||
| 标记无效 | `crm/clue/invalidForm.vue` | 无效原因 |
|
||
| 线索统计 | `crm/clue/statistics/index.vue` | 5 类统计图表(可选二期,见 06-steps) |
|
||
|
||
> 原 CRM README 还提到 `detailDrawer.vue`;以 `shanxia/crm/web` 当前目录为准(无 drawer 文件时以 `detail.vue` 为准)。
|
||
|
||
## 涉及数据库表
|
||
|
||
| 表名 | DDL 脚本 | 说明 |
|
||
|------|----------|------|
|
||
| `crm_clue` | `docs/sql/incremental_crm_clue.sql` | 线索主表(已按门户公共字段适配) |
|
||
| `crm_clue_follow` | 同上 | 跟进记录 |
|
||
|
||
字典(`shanxia2.0.sql` 已含):`crm_clue_source`、`crm_clue_level`、`crm_clue_status`、`crm_title`、`crm_industry`、`crm_customer_park` 等。
|
||
|
||
## 当前 shanxia2.0 状态(2026-05-31)
|
||
|
||
| 层级 | 状态 | 处理策略 |
|
||
|------|------|----------|
|
||
| 前端页面 | **已删除** `web-admin/src/views/crm/clue/` | 按 step-02 从原 CRM 重新拷贝 |
|
||
| 前端路由 | sqxp 中线索路由已移除 | 适配完成后再注册 |
|
||
| 前端 API | 存在 `web-admin/src/api/crm/clue.ts`(门户 POST 风格) | step-01 删除后 step-02 拷贝原版,step-03 再改 URL |
|
||
| 后端 Python | `crud/clue*.py`、`schemas/crm/clue.py`、`api/crm.py` 路由 **已有** | **冻结**:以本方案 04/05 章对照 Java **重写或补齐**,不假定现实现正确 |
|
||
| 菜单 SQL | 曾提供 `sys_menu` 增量脚本(未入仓可另补) | 前端+后端验收后再插入菜单 |
|
||
|
||
## 原 CRM 源码位置
|
||
|
||
| 类型 | 路径 |
|
||
|------|------|
|
||
| 前端页面 | `shanxia/crm/web/src/views/crm/clue/` |
|
||
| 前端 API | `shanxia/crm/web/src/api/crm/clue/index.ts`、`types.ts` |
|
||
| Java Controller | `.../controller/CrmClueController.java`、`CrmClueFollowController.java` |
|
||
| Java Service | `.../service/impl/CrmClueServiceImpl.java`、`CrmClueFollowServiceImpl.java` |
|
||
|
||
## 前端文件映射
|
||
|
||
| 原 CRM 文件 | shanxia2.0 目标 | 备注 |
|
||
|-------------|-----------------|------|
|
||
| `views/crm/clue/index.vue` | 同路径 | 列表主页面 |
|
||
| `views/crm/clue/detail.vue` | 同路径 | 详情页 |
|
||
| `views/crm/clue/form.vue` | 同路径 | 表单弹窗 |
|
||
| `views/crm/clue/followForm.vue` | 同路径 | 跟进弹窗 |
|
||
| `views/crm/clue/convertForm.vue` | 同路径 | 转化弹窗 |
|
||
| `views/crm/clue/assignForm.vue` | 同路径 | 分配弹窗 |
|
||
| `views/crm/clue/invalidForm.vue` | 同路径 | 无效弹窗 |
|
||
| `views/crm/clue/statistics/index.vue` | 同路径 | 统计(可二期) |
|
||
| `api/crm/clue/index.ts` | `api/crm/clue.ts` + `api/crm/clue/types.ts` | 合并或分文件,与项目习惯一致 |
|
||
| `api/crm/clue/types.ts` | `api/crm/clue/types.ts` | 类型定义 |
|
||
|
||
## 方法论(六步对应关系)
|
||
|
||
| 用户步骤 | 仓库步骤文档 | 产出物 |
|
||
|----------|--------------|--------|
|
||
| 第一步:删旧 + 拷贝原版 | step-01 + step-02 | 干净的前端源码树 |
|
||
| 第二步:逐页 UI + 梳理 API | step-03 + `03-frontend-spec.md` | 每页改造清单、API 调用表 |
|
||
| 第三步:Java → Python + SQL | step-04 + `02-database.md` + `04-api-spec.md` | 增量 SQL、路由与 CRUD |
|
||
| (第四步略) | — | — |
|
||
| 第五步:20~30 细步 | `06-steps.md` | 可执行任务清单 |
|
||
| 第六步:先梳理业务再开发 | `05-special.md` + `04-api-spec.md` §业务 | 禁止跳过方案直接编码 |
|
||
|
||
## 不在本次范围
|
||
|
||
- MySQL **触发器**:原 `sx.sql` 无线索相关触发器
|
||
- **定时任务**:线索模块无独立 SnailJob/Quartz 任务(公海池规则定时任务属客户模块)
|
||
- 线索统计页:可列为 **Phase B**(后端 5 个 statistics 接口现未实现)
|
||
|
||
## 审核检查项
|
||
|
||
- [ ] 文件映射与原 CRM 目录一致
|
||
- [ ] 明确「现 Python 后端仅作参考、以 Java 为准」
|
||
- [ ] 统计/导入导出/查重接口缺口已在 04-api-spec 列出
|
||
|
||
## 关联文档
|
||
|
||
- 通用流程:`docs/crm-migration/step-01-prepare.md` … `step-05-verify.md`
|
||
- 公海池范例:`docs/crm-migration/plans/customer-pool/`
|
||
- UI:`docs/web-admin-ui-spec-fresh-mint.md`、模板页 `/#/demo/unit`、`/#/demo/order`
|