# 合同模块产品字段变更 ## 变更说明 合同模块的产品来源从 **CRM 产品** 改为 **MDM 物料**,涉及字段名称变更。 --- ## 数据库变更 SQL ```sql -- ============================================= -- 合同产品表字段变更 -- ============================================= -- 1. 删除旧字段(如果有数据请先备份) ALTER TABLE `crm_contract_product` DROP COLUMN `product_id`; ALTER TABLE `crm_contract_product` DROP COLUMN `product_price`; -- 2. 如果新字段不存在,则添加(根据实际情况判断是否需要执行) -- ALTER TABLE `crm_contract_product` ADD COLUMN `item_id` bigint DEFAULT NULL COMMENT 'MDM物料编号' AFTER `contract_id`; -- ALTER TABLE `crm_contract_product` ADD COLUMN `item_unit_id` bigint DEFAULT NULL COMMENT '计量单位编号' AFTER `item_id`; -- ALTER TABLE `crm_contract_product` ADD COLUMN `item_price` decimal(24,6) DEFAULT NULL COMMENT '物料原价' AFTER `item_unit_id`; ``` --- ## 涉及页面 - 合同表单页面(新建/编辑合同) - 合同详情页面 --- ## API 变更 ### 1. 创建/更新合同接口 | 方法 | 路径 | 说明 | |------|------|------| | POST | /crm/contract/create | 创建合同 | | PUT | /crm/contract/update | 更新合同 | ### 2. 请求参数变更(products 字段) #### 旧字段(已废弃) | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | productId | Long | 是 | CRM 产品编号 | | productPrice | BigDecimal | 否 | 产品价格 | | sellingPrice | BigDecimal | 否 | 销售价(用作合同价) | #### 新字段 | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | itemId | Long | 是 | MDM 物料编号 | | itemPrice | BigDecimal | 是 | 物料原价 | | contractPrice | BigDecimal | 是 | 合同价格 | | count | Integer | 是 | 数量 | ### 3. 请求示例 **旧格式(不再支持):** ```json { "name": "合同名称", "customerId": 1, "products": [ { "productId": 4, "sellingPrice": 1111, "count": 10 } ] } ``` **新格式:** ```json { "name": "合同名称", "customerId": 1, "products": [ { "itemId": 4, "itemPrice": 1000, "contractPrice": 1111, "count": 10 } ] } ``` --- ## 响应变更 ### 合同详情接口响应 | 方法 | 路径 | 说明 | |------|------|------| | GET | /crm/contract/get | 获取合同详情 | #### 产品明细字段变更 | 旧字段 | 新字段 | 说明 | |--------|--------|------| | productId | itemId | MDM 物料编号 | | productName | itemName | 物料名称 | | productNo | itemCode | 物料编码 | | productUnit | itemUnitName | 计量单位名称 | | productPrice | itemPrice | 物料原价 | | - | itemBarCode | 物料条码(新增) | --- ## 前端修改点 ### 1. 物料选择组件 将 **CRM 产品选择器** 改为 **MDM 物料选择器**。 ```html ``` ### 2. 物料选择回调 ```js methods: { handleItemChange(item) { // 选择物料后自动填充价格信息 this.product.itemId = item.id this.product.itemPrice = item.salesPrice // 物料原价 this.product.contractPrice = item.salesPrice // 合同价格(默认等于原价,可修改) } } ``` ### 3. 表格列字段修改 ```html ``` ### 4. data 数据修改 ```js // 产品明细数据结构 product: { itemId: null, // MDM 物料编号 itemPrice: null, // 物料原价 contractPrice: null, // 合同价格 count: null // 数量 } ``` --- ## MDM 物料选择器 API ### 获取物料列表 | 方法 | 路径 | 说明 | |------|------|------| | GET | /mdm/item/page | 分页查询物料 | **请求参数:** | 参数 | 类型 | 必填 | 说明 | |------|------|------|------| | code | String | 否 | 物料编码 | | name | String | 否 | 物料名称 | | barCode | String | 否 | 物料条码 | | status | Integer | 否 | 状态(0启用 1禁用),传 0 | **响应字段:** | 字段 | 类型 | 说明 | |------|------|------| | id | Long | 物料编号(即 itemId) | | code | String | 物料编码 | | name | String | 物料名称 | | barCode | String | 物料条码 | | salesPrice | BigDecimal | 销售价 | | unitMeasureId | Long | 计量单位编号 | | unitMeasureName | String | 计量单位名称 | --- ## 注意事项 1. **物料必须先启用**:只能选择状态为"启用"的 MDM 物料 2. **价格可修改**:`contractPrice` 默认等于物料原价,但可以手动修改 3. **过渡期**:后端暂时兼容 `productId` 和 `sellingPrice` 字段,但后续会移除兼容逻辑 4. **其他模块同步修改**:销售报价单也使用 MDM 物料,字段与合同一致