# 报价单管理模块迁移方案 — 01 概述 > **编写日期**:2026-05-31 > **状态**:方案已审核(三项决策已确认,待实施) --- ## 已确认决策 | # | 决策 | 影响 | |---|------|------| | 1 | **同步移植 `crm_supplier_info`** | 实施顺序 P0;报价编号/主题依赖供方编码与简称 | | 2 | **先补合同 create** | 实施顺序 P1;`toContract` 调用完整 `insertByBo`,不做 stub | | 3 | **报价单全量功能** | PDF、分享、审批、版本、统计、导出、转合同等 **全部实现**,无 MVP 裁剪 | | 4 | **Java 快照按需拷贝** | 写某步后台接口**前**快照该步 Java;方案阶段不全量拷贝(见 `reference/java/README.md`) | ## 迁移目标 将原 CRM **报价单管理**完整移植到 shanxia2.0:功能不缩减,字典语义不变,UI 对齐 Fresh Mint。 ## 方法论(后端) 1. **方案**:`plans/quote/` + 前置 `supplier-info`、`contract` 子方案 2. **快照**:每步实施前运行 `scripts/snapshot-java.sh`(只拷本步文件) 3. **翻译**:对照快照 + `05-special.md`,写 Python;`04-api-spec.md` 打 ✅ 4. **禁止**:`.java` 进 `backend/`;未对照 Java 改业务规则 ## 实施总顺序 ``` P0 供方 crm_supplier_info(全 API) → P1 合同 create + crm_contract_product(最小闭环) → P2 报价单 4 表 + 全量 API(C1–C16) → P3 前端拷贝 + Fresh Mint 适配 → P4 验证 ``` ## 迁移范围(全量) | 子模块 | 原 CRM 入口 | |--------|-------------| | 报价列表 / 表单 / 详情 / 统计 | `crm/quote/*.vue` + `components/*` | | 审批 / 分享 / PDF / 版本 / 转合同 | 同上子组件 | ## 涉及数据库表 | 表 | 阶段 | |----|------| | `crm_supplier_info` | P0 | | `crm_contract_product` + 补全 `crm_contract` | P1 | | `crm_quote` / `_product` / `_approval` / `_share_log` | P2 | 字典 `crm_quote_status` 已在 `shanxia2.0.sql`。 ## 依赖模块 | 模块 | 状态 | |------|------| | 客户 / 联系人 / 产品 / 商机 | ✅ 已移植 | | 供方 `crm_supplier_info` | ❌ **P0 同步移植** | | 合同 create | ❌ **P1 先补**(完整模块后续迭代) | ## 源码位置 | 类型 | 路径 | |------|------| | Java 权威源 | `../shanxia/crm/backend/ruoyi-modules/ruoyi-crm/` | | Java 工作快照 | `docs/crm-migration/reference/java/{module}/`(按步追加) | | 前端 | `shanxia/crm/web/src/views/crm/quote/` | ## 方案文档索引 | 文档 | 内容 | |------|------| | `01-overview.md` | 本文 | | `04-api-spec.md` | 接口 ↔ Java ↔ Python ↔ 状态 | | `05-special.md` | 状态机、编号/金额(门禁) | | `06-steps.md` | **P0→P4 分步 + 每步快照清单** | | `../supplier-info/01-overview.md` | 供方 P0 | | `../contract/01-prerequisite-create-for-quote.md` | 合同 create P1 | | `02-database.md` / `03-frontend-spec.md` / `07-verify.md` | 实施时补充 |