# 到货通知单关联采购订单功能
## 概述
将到货通知单的采购订单号从手动输入改为关联 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. 表单字段修改
```html
{{ order.no }}
{{ order.orderTime }}
```
### 2. data 数据
```js
data() {
return {
// 新增:采购订单列表
purchaseOrderList: [],
formData: {
purchaseOrderId: undefined, // 新增
purchaseOrderCode: '', // 保留(显示用)
// ... 其他字段
},
}
}
```
### 3. 方法
```js
// 供应商变更时,加载对应的采购订单列表
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 方法
```js
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`
```sql
ALTER TABLE mes_wm_arrival_notice ADD COLUMN purchase_order_id BIGINT COMMENT '采购订单编号' AFTER name;
```
## 注意:mes_wm_item_receipt 表问题
`mes_wm_item_receipt` 表在数据库中是 **物料退库单**(关联生产工单),但代码中注释写的是"采购入库单"。
这是一个代码与数据库不一致的问题,需要后续单独修复。本次修改不影响该表。