Files
shanxia2.0/docs/crm-migration/plans/clue/01-overview.md
T
2026-06-01 08:21:21 +08:00

98 lines
4.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 线索管理模块迁移方案 — 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`