合同模块产品字段变更
变更说明
合同模块的产品来源从 CRM 产品 改为 MDM 物料,涉及字段名称变更。
数据库变更 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. 请求示例
旧格式(不再支持):
{
"name": "合同名称",
"customerId": 1,
"products": [
{
"productId": 4,
"sellingPrice": 1111,
"count": 10
}
]
}
新格式:
{
"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 物料选择器。
<!-- 旧:CRM 产品选择器 -->
<CrmProductSelect v-model="product.productId" />
<!-- 新:MDM 物料选择器 -->
<MdmItemSelect v-model="product.itemId" @change="handleItemChange" />
2. 物料选择回调
methods: {
handleItemChange(item) {
// 选择物料后自动填充价格信息
this.product.itemId = item.id
this.product.itemPrice = item.salesPrice // 物料原价
this.product.contractPrice = item.salesPrice // 合同价格(默认等于原价,可修改)
}
}
3. 表格列字段修改
<!-- 产品明细表格 -->
<el-table-column prop="itemCode" label="物料编码" />
<el-table-column prop="itemName" label="物料名称" />
<el-table-column prop="itemBarCode" label="物料条码" />
<el-table-column prop="itemUnitName" label="单位" />
<el-table-column prop="itemPrice" label="原价" />
<el-table-column prop="contractPrice" label="合同价" />
<el-table-column prop="count" label="数量" />
4. data 数据修改
// 产品明细数据结构
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 |
计量单位名称 |
注意事项
- 物料必须先启用:只能选择状态为"启用"的 MDM 物料
- 价格可修改:
contractPrice 默认等于物料原价,但可以手动修改
- 过渡期:后端暂时兼容
productId 和 sellingPrice 字段,但后续会移除兼容逻辑
- 其他模块同步修改:销售报价单也使用 MDM 物料,字段与合同一致