From 499654907b7367a63854583927f24eec54a1948d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=82=E7=B3=96?= Date: Sat, 28 Mar 2026 14:08:27 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=B0=83=E6=8B=A8=E5=8D=95):=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E8=B0=83=E6=8B=A8=E5=8D=95=E7=AE=A1=E7=90=86=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增调拨单主表和明细表相关API接口 - 新增调拨单主表和明细表前端页面 - 新增钢卷选择器组件和调拨明细表格组件 - 修改产品信息和原料信息渲染组件支持更多字段 - 修改产品选择和原料选择组件支持数值类型值 - 修改钢卷号渲染组件支持更多字段和外部数据 - 新增调拨单匹配物料接口 --- klp-ui/src/api/wms/transferOrder.js | 44 + klp-ui/src/api/wms/transferOrderItem.js | 116 ++ .../KLPService/ProductSelect/index.vue | 13 +- .../KLPService/RawMaterialSelect/index.vue | 13 +- .../components/KLPService/Renderer/CoilNo.vue | 30 +- .../KLPService/Renderer/ProductInfo.vue | 4 +- .../KLPService/Renderer/RawMaterialInfo.vue | 4 +- klp-ui/src/components/MemoInput/index.vue | 7 +- klp-ui/src/views/wms/move/batch.vue | 371 +++++ .../wms/move/components/tranferItemTable.vue | 227 +++ klp-ui/src/views/wms/move/correct.vue | 1359 +++++++++++++++++ klp-ui/src/views/wms/move/record.vue | 359 +++++ .../WmsTransferOrderItemController.java | 6 +- 13 files changed, 2520 insertions(+), 33 deletions(-) create mode 100644 klp-ui/src/api/wms/transferOrder.js create mode 100644 klp-ui/src/api/wms/transferOrderItem.js create mode 100644 klp-ui/src/views/wms/move/batch.vue create mode 100644 klp-ui/src/views/wms/move/components/tranferItemTable.vue create mode 100644 klp-ui/src/views/wms/move/correct.vue create mode 100644 klp-ui/src/views/wms/move/record.vue diff --git a/klp-ui/src/api/wms/transferOrder.js b/klp-ui/src/api/wms/transferOrder.js new file mode 100644 index 00000000..14078578 --- /dev/null +++ b/klp-ui/src/api/wms/transferOrder.js @@ -0,0 +1,44 @@ +import request from '@/utils/request' + +// 查询调拨单主列表 +export function listTransferOrder(query) { + return request({ + url: '/wms/transferOrder/list', + method: 'get', + params: query + }) +} + +// 查询调拨单主详细 +export function getTransferOrder(orderId) { + return request({ + url: '/wms/transferOrder/' + orderId, + method: 'get' + }) +} + +// 新增调拨单主 +export function addTransferOrder(data) { + return request({ + url: '/wms/transferOrder', + method: 'post', + data: data + }) +} + +// 修改调拨单主 +export function updateTransferOrder(data) { + return request({ + url: '/wms/transferOrder', + method: 'put', + data: data + }) +} + +// 删除调拨单主 +export function delTransferOrder(orderId) { + return request({ + url: '/wms/transferOrder/' + orderId, + method: 'delete' + }) +} diff --git a/klp-ui/src/api/wms/transferOrderItem.js b/klp-ui/src/api/wms/transferOrderItem.js new file mode 100644 index 00000000..52fb78a1 --- /dev/null +++ b/klp-ui/src/api/wms/transferOrderItem.js @@ -0,0 +1,116 @@ +import request from '@/utils/request' + +// 查询调拨单明细列表 +export function listTransferOrderItem(query) { + return request({ + url: '/wms/transferOrderItem/list', + method: 'get', + params: query + }) +} + +// 查询调拨单明细详细 +export function getTransferOrderItem(orderItemId) { + return request({ + url: '/wms/transferOrderItem/' + orderItemId, + method: 'get' + }) +} + +// 新增调拨单明细 +export function addTransferOrderItem(data) { + return request({ + url: '/wms/transferOrderItem', + method: 'post', + data: data + }) +} + +// 修改调拨单明细 +export function updateTransferOrderItem(data) { + return request({ + url: '/wms/transferOrderItem', + method: 'put', + data: data + }) +} + +// 删除调拨单明细 +export function delTransferOrderItem(orderItemId) { + return request({ + url: '/wms/transferOrderItem/' + orderItemId, + method: 'delete' + }) +} + +/** + * 同步物料信息 + */ +export function matchOrCreateMaterial({ itemId, itemType }) { + if (!itemId || !itemType) { + return Promise.reject('参数错误') + } + + const data = { + itemId, + itemType + } + + return request({ + url: '/wms/transferOrderItem/itemType/matchOrCreate', + method: 'get', + params: data + }) +} + +/** + * 批量新增调拨信息 + */ +export function batchAddTransferOrderItem({ transferId, coilIds }) { + if (!transferId || !coilIds || coilIds.length === 0) { + return Promise.reject('参数错误') + } + + const data = { + transferId, + coilIds + } + + return request({ + url: '/wms/transferOrderItem/batch', + method: 'post', + data: data + }) +} + +/** + * 确认调拨 + */ +export function confirmTransferOrderItem(item) { + if (!item.orderItemId) { + return Promise.reject('参数错误') + } + + return request({ + url: '/wms/transferOrderItem/confirm', + method: 'post', + data: item + }) +} + +/** + * 取消调拨 + */ +export function cancelTransferOrderItem(orderItemId) { + if (!orderItemId) { + return Promise.reject('参数错误') + } + + return request({ + url: '/wms/transferOrderItem/cancel', + method: 'post', + params: { + orderItemId + } + }) +} \ No newline at end of file diff --git a/klp-ui/src/components/KLPService/ProductSelect/index.vue b/klp-ui/src/components/KLPService/ProductSelect/index.vue index 20191806..3b31a0de 100644 --- a/klp-ui/src/components/KLPService/ProductSelect/index.vue +++ b/klp-ui/src/components/KLPService/ProductSelect/index.vue @@ -153,7 +153,7 @@ export default { }, props: { value: { - type: String, + type: [String, Number], default: '' }, readonly: { @@ -224,7 +224,7 @@ export default { this.selectedId = val || ''; if (this.selectedId) { const res = await getProduct(this.selectedId); - if (res.code === 200) this.selectedRow = res.data; + if (res.code === 200 && res.data != null) this.selectedRow = res.data || {}; } else { this.selectedRow = {}; } @@ -233,6 +233,7 @@ export default { dialogVisible(val) { if (val) { this.getList(); + this.listRecentlySelected(); } } }, @@ -408,10 +409,10 @@ export default { this.resetForm("form"); }, }, - mounted() { - this.listRecentlySelected(); - this.getList(); - }, + // mounted() { + + // this.getList(); + // }, }; diff --git a/klp-ui/src/components/KLPService/RawMaterialSelect/index.vue b/klp-ui/src/components/KLPService/RawMaterialSelect/index.vue index 0275d466..c6926c7b 100644 --- a/klp-ui/src/components/KLPService/RawMaterialSelect/index.vue +++ b/klp-ui/src/components/KLPService/RawMaterialSelect/index.vue @@ -139,7 +139,7 @@ export default { props: { // 绑定值:原材料ID 单选字符串格式 value: { - type: String, + type: [String, Number], default: '' }, // 是否只读 @@ -222,7 +222,7 @@ export default { // 有选中ID则获取详情赋值 if (this.selectedId) { const res = await getRawMaterial(this.selectedId); - if (res.code === 200) this.selectedRow = res.data; + if (res.code === 200) this.selectedRow = res.data || {}; } else { this.selectedRow = {}; } @@ -231,6 +231,7 @@ export default { // 弹窗打开时加载数据 dialogVisible(val) { if (val) { + this.listRecentlySelected(); this.getList(); } } @@ -417,10 +418,10 @@ export default { this.dialogVisible = false; } }, - mounted() { - this.listRecentlySelected(); - this.getList(); - } + // mounted() { + // this.listRecentlySelected(); + // this.getList(); + // } }; diff --git a/klp-ui/src/components/KLPService/Renderer/CoilNo.vue b/klp-ui/src/components/KLPService/Renderer/CoilNo.vue index bac99353..537c3314 100644 --- a/klp-ui/src/components/KLPService/Renderer/CoilNo.vue +++ b/klp-ui/src/components/KLPService/Renderer/CoilNo.vue @@ -2,7 +2,7 @@
{} + } }, data() { // 修正:data应该是函数 return { @@ -84,37 +88,37 @@ export default { return this.coilNo && this.coilNo.startsWith('G'); }, specification() { - return this.coilInfo.specification || '-' + return this.coilInfo.specification || this.coil?.specification || '-' }, itemName() { - return this.coilInfo.itemName || '-' + return this.coilInfo.itemName || this.coil?.itemName || '-' }, material() { - return this.coilInfo.material || '-' + return this.coilInfo.material || this.coil?.material || '-' }, manufacturer() { - return this.coilInfo.manufacturer || '-' + return this.coilInfo.manufacturer || this.coil?.manufacturer || '-' }, currentCoilNo() { - return this.coilNo || this.coilInfo?.currentCoilNo || '-' + return this.coilNo || this.coil?.currentCoilNo || '-' }, netWeight() { - return this.coilInfo.netWeight || '-' + return this.coilInfo.netWeight || this.coil?.netWeight || '-' }, supplierCoilNo() { - return this.coilInfo.supplierCoilNo || '-' + return this.coilInfo.supplierCoilNo || this.coil?.supplierCoilNo || '-' }, length() { - return this.coilInfo.length || '-' + return this.coilInfo.length || this.coil?.length || '-' }, actualLength() { - return this.coilInfo.actualLength || '-' + return this.coilInfo.actualLength || this.coil?.actualLength || '-' }, actualWidth() { - return this.coilInfo.actualWidth || '-' + return this.coilInfo.actualWidth || this.coil?.actualWidth || '-' }, actualThickness() { - return this.coilInfo.actualThickness || '-' + return this.coilInfo.actualThickness || this.coil?.actualThickness || '-' }, }, methods: { @@ -140,7 +144,7 @@ export default { if (newVal) { this.getCoilInfo(); } else { - this.coilInfo = {}; + this.coilInfo = this.coil || {}; } } } diff --git a/klp-ui/src/components/KLPService/Renderer/ProductInfo.vue b/klp-ui/src/components/KLPService/Renderer/ProductInfo.vue index 5e91d2bf..25c1a965 100644 --- a/klp-ui/src/components/KLPService/Renderer/ProductInfo.vue +++ b/klp-ui/src/components/KLPService/Renderer/ProductInfo.vue @@ -64,8 +64,8 @@ export default { return {}; } return { - productId: this.product.itemId || '', - productName: this.product.itemName || '', + productId: this.product.itemId || this.product.productId || '', + productName: this.product.itemName || this.product.productName || '', // productCode: this.product.productCode || '', specification: this.product.specification || '', material: this.product.material || '', diff --git a/klp-ui/src/components/KLPService/Renderer/RawMaterialInfo.vue b/klp-ui/src/components/KLPService/Renderer/RawMaterialInfo.vue index fb60d211..e7c819ca 100644 --- a/klp-ui/src/components/KLPService/Renderer/RawMaterialInfo.vue +++ b/klp-ui/src/components/KLPService/Renderer/RawMaterialInfo.vue @@ -51,8 +51,8 @@ export default { return {}; } return { - rawMaterialId: this.material.itemId || '', - rawMaterialName: this.material.itemName || '', + rawMaterialId: this.material.itemId || this.material.rawMaterialId || '', + rawMaterialName: this.material.itemName || this.material.rawMaterialName || '', // rawMaterialCode: this.material.rawMaterialCode || '', specification: this.material.specification || '', material: this.material.material || '', diff --git a/klp-ui/src/components/MemoInput/index.vue b/klp-ui/src/components/MemoInput/index.vue index 7cd958b1..89b24fbe 100644 --- a/klp-ui/src/components/MemoInput/index.vue +++ b/klp-ui/src/components/MemoInput/index.vue @@ -1,7 +1,7 @@ diff --git a/klp-ui/src/views/wms/move/components/tranferItemTable.vue b/klp-ui/src/views/wms/move/components/tranferItemTable.vue new file mode 100644 index 00000000..3eaf805a --- /dev/null +++ b/klp-ui/src/views/wms/move/components/tranferItemTable.vue @@ -0,0 +1,227 @@ + + + diff --git a/klp-ui/src/views/wms/move/correct.vue b/klp-ui/src/views/wms/move/correct.vue new file mode 100644 index 00000000..1a8ea5a7 --- /dev/null +++ b/klp-ui/src/views/wms/move/correct.vue @@ -0,0 +1,1359 @@ + + + + + \ No newline at end of file diff --git a/klp-ui/src/views/wms/move/record.vue b/klp-ui/src/views/wms/move/record.vue new file mode 100644 index 00000000..f3c314d9 --- /dev/null +++ b/klp-ui/src/views/wms/move/record.vue @@ -0,0 +1,359 @@ + + + diff --git a/klp-wms/src/main/java/com/klp/controller/WmsTransferOrderItemController.java b/klp-wms/src/main/java/com/klp/controller/WmsTransferOrderItemController.java index a4c84c6d..5b023ac3 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsTransferOrderItemController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsTransferOrderItemController.java @@ -101,9 +101,9 @@ public class WmsTransferOrderItemController extends BaseController { * 根据itemId和itemType匹配或新增物料 * itemType: raw_material-原料, product-成品 */ - @GetMapping("/matchOrCreate") - public R matchOrCreateMaterial(@NotNull(message = "itemId不能为空") Long itemId, - @NotNull(message = "itemType不能为空") String itemType) { + @GetMapping("/itemType/matchOrCreate") + public R matchOrCreateMaterial(@RequestParam @NotNull(message = "itemId不能为空") Long itemId, + @RequestParam @NotNull(message = "itemType不能为空") String itemType) { return R.ok(iWmsTransferOrderItemService.matchOrCreateMaterial(itemId, itemType)); }