编辑 | 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. 过渡期:后端暂时兼容 productIdsellingPrice 字段,但后续会移除兼容逻辑
  4. 其他模块同步修改:销售报价单也使用 MDM 物料,字段与合同一致