编辑 | blame | 历史 | 原始文档

合同模块产品字段变更

变更说明

合同模块的产品来源从 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 计量单位名称

注意事项

  1. 物料必须先启用:只能选择状态为"启用"的 MDM 物料
  2. 价格可修改:contractPrice 默认等于物料原价,但可以手动修改
  3. 过渡期:后端暂时兼容 productId 和 sellingPrice 字段,但后续会移除兼容逻辑
  4. 其他模块同步修改:销售报价单也使用 MDM 物料,字段与合同一致