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

到货通知单关联采购订单功能

概述

将到货通知单的采购订单号从手动输入改为关联 ERP 采购订单,实现数据联动和校验。

涉及页面

页面 路径 说明
到货通知单列表页 wls/arrivalnotice/index.vue 到货通知单管理
到货通知单详情/编辑页 wls/arrivalnotice/form.vue 新增/编辑到货通知单

API

方法 路径 说明
GET /rpc-api/erp/purchase-order/get 根据 ID 获取采购订单
GET /rpc-api/erp/purchase-order/list-by-supplier 根据供应商获取采购订单列表(已审核)
POST /mes/wm-arrival-notice/create 创建到货通知单
PUT /mes/wm-arrival-notice/update 更新到货通知单

请求参数变更(create/update):

参数 类型 必填 说明
purchaseOrderId Long 采购订单编号(新增)
purchaseOrderCode String 采购订单号(冗余,后端自动填充)
vendorId Long 供应商编号(原有)
... ... ... 其他原有字段不变

响应变更:

参数 类型 说明
purchaseOrderId Long 采购订单编号(新增)
purchaseOrderCode String 采购订单号(原有)

前端修改点

1. 表单字段修改

<!-- 原来的输入框 -->
<el-form-item label="采购订单号" prop="purchaseOrderCode">
  <el-input v-model="formData.purchaseOrderCode" placeholder="请输入采购订单号" />
</el-form-item>

<!-- 改为下拉选择框 -->
<el-form-item label="采购订单" prop="purchaseOrderId">
  <el-select
    v-model="formData.purchaseOrderId"
    placeholder="请选择采购订单"
    clearable
    filterable
    @change="handlePurchaseOrderChange"
  >
    <el-option
      v-for="order in purchaseOrderList"
      :key="order.id"
      :label="order.no"
      :value="order.id"
    >
      <span>{{ order.no }}</span>
      <span style="color: #999; margin-left: 10px;">{{ order.orderTime }}</span>
    </el-option>
  </el-select>
</el-form-item>

2. data 数据

data() {
  return {
    // 新增:采购订单列表
    purchaseOrderList: [],
    formData: {
      purchaseOrderId: undefined, // 新增
      purchaseOrderCode: '',      // 保留(显示用)
      // ... 其他字段
    },
  }
}

3. 方法

// 供应商变更时,加载对应的采购订单列表
handleVendorChange(vendorId) {
  if (!vendorId) {
    this.purchaseOrderList = [];
    this.formData.purchaseOrderId = undefined;
    this.formData.purchaseOrderCode = '';
    return;
  }
  getPurchaseOrderListBySupplier(vendorId).then(res => {
    this.purchaseOrderList = res.data || [];
  });
}

// 采购订单变更时,自动填充采购订单号
handlePurchaseOrderChange(orderId) {
  if (!orderId) {
    this.formData.purchaseOrderCode = '';
    return;
  }
  const order = this.purchaseOrderList.find(o => o.id === orderId);
  if (order) {
    this.formData.purchaseOrderCode = order.no;
  }
}

4. API 方法

import request from '@/utils/request';

// 根据供应商获取采购订单列表(已审核状态)
export function getPurchaseOrderListBySupplier(supplierId) {
  return request({
    url: `/rpc-api/erp/purchase-order/list-by-supplier?supplierId=${supplierId}`,
    method: 'get'
  });
}

注意事项

  • 采购订单下拉框只在选择供应商后才加载
  • 只加载已审核状态的采购订单
  • 后端会自动根据 purchaseOrderId 填充 purchaseOrderCode,前端无需手动传递
  • 原有的 purchaseOrderCode 字段保留用于显示,但不建议手动输入

数据库变更

需要执行 SQL 脚本:sql/mysql/mes_wm_arrival_notice_purchase_order.sql

ALTER TABLE mes_wm_arrival_notice ADD COLUMN purchase_order_id BIGINT COMMENT '采购订单编号' AFTER name;

注意:mes_wm_item_receipt 表问题

mes_wm_item_receipt 表在数据库中是 物料退库单(关联生产工单),但代码中注释写的是"采购入库单"。
这是一个代码与数据库不一致的问题,需要后续单独修复。本次修改不影响该表。