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

191 lines
5.3 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.
# 线索管理模块迁移方案 — 06 分步实施计划(28 步)
> **For agentic workers:** 按序执行,每步完成后勾选。必须先通过 `01~05` 方案审核。
> **关联:** `docs/crm-migration/step-02-frontend-copy.md`、`step-03-frontend-adapt.md`、`step-04-backend.md`
---
## Phase 0:准备与清理(步骤 1~3)
### 步骤 1:确认方案审核通过
- [ ] 阅读 `01-overview.md` ~ `05-special.md`
- [ ] 与产品确认:统计页是否 Phase B
- **完成标准**:评审记录或口头确认可进入编码
### 步骤 2:清理门户已有线索前端
- [ ] 确认 `web-admin/src/views/crm/clue/` 为空或不存在
- [ ] 删除 `web-admin/src/api/crm/clue.ts`(门户适配版)
- [ ] 从 `sqxp.ts` 移除线索路由(若已加回则再删)
- **文件**:`web-admin/src/router/modules/sqxp.ts`
### 步骤 3:标记后端「待对照 Java 重写」
- [ ] 在 `module-status.md` 将线索标为「前端重做 / 后端待核验」
- [ ] 不删除现有 Python(可选);开发时以 `04-api-spec` 缺口表为准
- **完成标准**:团队知晓勿直接信任现后端行为
---
## Phase 1:原版拷贝(步骤 4~6)
### 步骤 4:拷贝 Vue 页面
从 `shanxia/crm/web/src/views/crm/clue/` 拷贝至 `web-admin/src/views/crm/clue/`(含 `statistics/`)。
- [ ] 9 个 vue + README 就位
- **禁止**:改 UI、改 API
### 步骤 5:拷贝 API 与类型
- [ ] `api/crm/clue/index.ts` → `web-admin/src/api/crm/clue.ts` 或拆 `clue/index.ts`
- [ ] `api/crm/clue/types.ts` → `web-admin/src/api/crm/clue/types.ts`
### 步骤 6:本地编译冒烟
- [ ] `pnpm dev` 可启动(允许路由未注册时报错仅来自菜单点击)
- **完成标准**:无「模块找不到」类错误(拷贝完整性)
---
## Phase 2:前端 UI 适配(步骤 7~14)
> 每步:先读原 script 逻辑,再改 template/style。参照 `ref-ui-standards.md`。
### 步骤 7:适配 `index.vue` — 骨架与筛选
- [ ] `filter-block` / `list-toolbar` / `list-body` 类名
- [ ] 梳理本页 API 调用清单写入 PR 说明
- **文件**:`views/crm/clue/index.vue`
### 步骤 8:适配 `index.vue` — 表格与分页
- [ ] 状态列 `el-tag`;操作列 `fixed="right"`
- [ ] 分页入 `list-pager-bar`
### 步骤 9:适配 `index.vue` — 工具栏与 v-auth
- [ ] 按钮图标;唯一 primary
- [ ] Tab 切换调用的 list/mine/toFollow API 记下参数
### 步骤 10:适配 `form.vue`
- [ ] `dialog-form-layout`、`form-grid-2`
- [ ] 字典、`fetchUserOptions`
### 步骤 11:适配 `assignForm.vue` + `invalidForm.vue`
- [ ] 用户列表 `@/api/admin`
- [ ] 弹窗底栏 Close/Check 图标
### 步骤 12:适配 `followForm.vue` + `convertForm.vue`
- [ ] 附件上传组件门户化
- [ ] 转化原因校验与 Java 一致
### 步骤 13:适配 `detail.vue`
- [ ] 布局与 tag;跟进列表分页
- [ ] 路由 `/#/crm/clue/detail/:id`
### 步骤 14:注册路由与菜单 SQL
- [ ] `sqxp.ts` 增加 CrmClue、CrmClueDetail
- [ ] 执行/编写 `sys_menu` 线索菜单增量 SQL
- [ ] 角色授权勾选测试账号
---
## Phase 3:后端业务梳理(步骤 15~17)— **先于补全代码**
### 步骤 15:精读 Java `CrmClueServiceImpl`
- [ ] 逐方法做 checklist(转化/分配/导入/统计)
- [ ] 更新 `05-special.md` 若发现遗漏规则
### 步骤 16:精读 Java `CrmClueFollowServiceImpl`
- [ ] 确认跟进级联四字段
- [ ] 确认删除跟进是否递减 count
### 步骤 17:输出 Postman/接口用例表
- [ ] 每条 API 至少 1 正常 + 1 拒绝用例(如已转化不可删)
- **产出**:`07-verify.md` 草稿或 Apifox 集合
---
## Phase 4:后端对齐与缺口(步骤 18~25)
### 步骤 18:核验 DDL 已执行
- [ ] 执行 `incremental_crm_clue.sql`
- [ ] 字典数据齐全
### 步骤 19:对齐 CRUD `_row_to_dict` 与 Schema
- [ ] 对照 Java Vo 字段
- [ ] `check_field_consistency.py`
### 步骤 20:核验已有 15 个核心路由
- [ ] list/detail/add/update/delete/assign/convert/...
- [ ] 修正与 Java 不一致处(invalid 批量等)
### 步骤 21:实现跟进 detail + update
- [ ] `follow/detail`、`follow/update`
- [ ] CRUD + Schema + 路由
### 步骤 22:实现 export + importTemplate + import
- [ ] 参考 `crm.py` 产品/客户导出实现 openpyxl
- [ ] 移植 `importClues` 校验逻辑
### 步骤 23:实现 checkDuplicate
- [ ] 手机号+公司模糊查重
### 步骤 24:前端 API 层改 POST 路径
- [ ] `clue.ts` 全部 `/web/crm/clue/*`
- [ ] 响应解包与 `customer` 模块一致
### 步骤 25:前后端联调 MVP
- [ ] 列表五 Tab
- [ ] 新增→跟进→转化→客户详情可查
- [ ] 分配、无效、删除边界
---
## Phase 5:统计与验收(步骤 26~28)
### 步骤 26:(可选 Phase B)statistics 五接口 + 统计页
- [ ] 后端 5 路由
- [ ] `statistics/index.vue` UI 适配
### 步骤 27:整体验证
- [ ] 执行 `07-verify.md` 全清单
- [ ] `pnpm lint` / 手测核心路径
### 步骤 28:更新状态与图谱
- [ ] `module-status.md` 标为已验证
- [ ] `./scripts/update-graph.sh frontend`(若改大量文件)
---
## 预估工时(参考)
| Phase | 步数 | 人天(1 人) |
|-------|------|-------------|
| 0~1 拷贝 | 6 | 0.5 |
| 2 前端 | 8 | 2~3 |
| 3 梳理 | 3 | 1 |
| 4 后端 | 8 | 2~3 |
| 5 验收 | 3 | 1 |
| **合计** | **28** | **6~8** |