From 0a508c881eff17d8ca6ffff38e2ab31060dff34f Mon Sep 17 00:00:00 2001 From: YunaiV Date: Sun, 8 Mar 2026 20:39:21 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20feat(mes):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=BD=AC=E7=A7=BB=E5=8D=95=E5=8F=8A=E8=BD=AC=E7=A7=BB=E5=8D=95?= =?UTF-8?q?=E8=A1=8C=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD=E5=92=8C=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增转移单及转移单行的相关数据对象、服务接口和控制器,支持转移单的创建、修改、删除和查询功能。同时,添加了转移单状态和类型的枚举,完善了相关的 API 接口。 - 添加 MesWmTransferDO、MesWmTransferLineDO、MesWmTransferDetailDO 数据对象 - 实现 MesWmTransferService 和 MesWmTransferLineService 接口 - 新增 MesWmTransferController 和 MesWmTransferLineController 控制器 - 更新相关的 API 接口文档 --- src/api/mes/wm/transfer/detail/index.ts | 54 +++ src/api/mes/wm/transfer/index.ts | 73 ++++ src/api/mes/wm/transfer/line/index.ts | 54 +++ src/utils/dict.ts | 2 + src/views/mes/utils/constants.ts | 10 + .../components/WmMaterialStockSelect.vue | 1 + src/views/mes/wm/packages/PackageLineList.vue | 2 + src/views/mes/wm/transfer/TransferForm.vue | 295 ++++++++++++++++ src/views/mes/wm/transfer/index.vue | 332 ++++++++++++++++++ 9 files changed, 823 insertions(+) create mode 100644 src/api/mes/wm/transfer/detail/index.ts create mode 100644 src/api/mes/wm/transfer/index.ts create mode 100644 src/api/mes/wm/transfer/line/index.ts create mode 100644 src/views/mes/wm/transfer/TransferForm.vue create mode 100644 src/views/mes/wm/transfer/index.vue diff --git a/src/api/mes/wm/transfer/detail/index.ts b/src/api/mes/wm/transfer/detail/index.ts new file mode 100644 index 000000000..caa23ff83 --- /dev/null +++ b/src/api/mes/wm/transfer/detail/index.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +// MES 调拨明细 VO +export interface WmTransferDetailVO { + id: number + lineId: number + transferId: number + itemId: number + itemCode?: string + itemName?: string + specification?: string + unitName?: string + unitMeasureName?: string + quantity: number + batchId: number + batchCode?: string + toWarehouseId: number + toWarehouseName?: string + toLocationId: number + toLocationName?: string + toAreaId: number + toAreaName?: string + remark: string + createTime?: string +} + +// MES 调拨明细 API +export const WmTransferDetailApi = { + // 查询调拨明细列表(按行编号) + getTransferDetailListByLineId: async (lineId: number) => { + return await request.get({ url: '/mes/wm/transfer-detail/list-by-line', params: { lineId } }) + }, + + // 查询调拨明细详情 + getTransferDetail: async (id: number) => { + return await request.get({ url: '/mes/wm/transfer-detail/get?id=' + id }) + }, + + // 新增调拨明细 + createTransferDetail: async (data: WmTransferDetailVO) => { + return await request.post({ url: '/mes/wm/transfer-detail/create', data }) + }, + + // 修改调拨明细 + updateTransferDetail: async (data: WmTransferDetailVO) => { + return await request.put({ url: '/mes/wm/transfer-detail/update', data }) + }, + + // 删除调拨明细 + deleteTransferDetail: async (id: number) => { + return await request.delete({ url: '/mes/wm/transfer-detail/delete?id=' + id }) + }, + +} diff --git a/src/api/mes/wm/transfer/index.ts b/src/api/mes/wm/transfer/index.ts new file mode 100644 index 000000000..4e595fbb8 --- /dev/null +++ b/src/api/mes/wm/transfer/index.ts @@ -0,0 +1,73 @@ +import request from '@/config/axios' + +// MES 转移单 VO +export interface WmTransferVO { + id: number + code: string + name: string + type: number + deliveryFlag: boolean + recipientName: string + recipientTelephone: string + destinationAddress: string + carrier: string + shippingNumber: string + confirmFlag: boolean + transferDate: string + status: number + remark: string + createTime?: string +} + +// MES 转移单 API +export const WmTransferApi = { + // 查询转移单分页 + getTransferPage: async (params: any) => { + return await request.get({ url: '/mes/wm/transfer/page', params }) + }, + + // 查询转移单详情 + getTransfer: async (id: number) => { + return await request.get({ url: '/mes/wm/transfer/get?id=' + id }) + }, + + // 新增转移单 + createTransfer: async (data: WmTransferVO) => { + return await request.post({ url: '/mes/wm/transfer/create', data }) + }, + + // 修改转移单 + updateTransfer: async (data: WmTransferVO) => { + return await request.put({ url: '/mes/wm/transfer/update', data }) + }, + + // 删除转移单 + deleteTransfer: async (id: number) => { + return await request.delete({ url: '/mes/wm/transfer/delete?id=' + id }) + }, + + // 提交转移单 + submitTransfer: async (id: number) => { + return await request.put({ url: '/mes/wm/transfer/submit?id=' + id }) + }, + + // 到货确认 + confirmTransfer: async (id: number) => { + return await request.put({ url: '/mes/wm/transfer/confirm?id=' + id }) + }, + + // 完成转移 + finishTransfer: async (id: number) => { + return await request.put({ url: '/mes/wm/transfer/finish?id=' + id }) + }, + + // 取消转移单 + cancelTransfer: async (id: number) => { + return await request.put({ url: '/mes/wm/transfer/cancel?id=' + id }) + }, + + // 导出转移单 Excel + exportTransfer: async (params: any) => { + return await request.download({ url: '/mes/wm/transfer/export-excel', params }) + } +} \ No newline at end of file diff --git a/src/api/mes/wm/transfer/line/index.ts b/src/api/mes/wm/transfer/line/index.ts new file mode 100644 index 000000000..fc1796119 --- /dev/null +++ b/src/api/mes/wm/transfer/line/index.ts @@ -0,0 +1,54 @@ +import request from '@/config/axios' + +// MES 转移单行 VO +export interface WmTransferLineVO { + id: number + transferId: number + materialStockId: number + itemId: number + itemCode?: string + itemName?: string + specification?: string + unitName?: string + unitMeasureName?: string + quantity: number + batchId: number + batchCode?: string + fromWarehouseId: number + fromWarehouseName?: string + fromLocationId: number + fromLocationName?: string + fromAreaId: number + fromAreaName?: string + remark: string + createTime?: string +} + +// MES 转移单行 API +export const WmTransferLineApi = { + // 查询转移单行列表 + getTransferLineList: async (transferId: number) => { + return await request.get({ url: '/mes/wm/transfer-line/list', params: { transferId } }) + }, + + // 查询转移单行详情 + getTransferLine: async (id: number) => { + return await request.get({ url: '/mes/wm/transfer-line/get?id=' + id }) + }, + + // 新增转移单行 + createTransferLine: async (data: WmTransferLineVO) => { + return await request.post({ url: '/mes/wm/transfer-line/create', data }) + }, + + // 修改转移单行 + updateTransferLine: async (data: WmTransferLineVO) => { + return await request.put({ url: '/mes/wm/transfer-line/update', data }) + }, + + // 删除转移单行 + deleteTransferLine: async (id: number) => { + return await request.delete({ url: '/mes/wm/transfer-line/delete?id=' + id }) + }, + +} diff --git a/src/utils/dict.ts b/src/utils/dict.ts index eeb9769ff..bed41059e 100644 --- a/src/utils/dict.ts +++ b/src/utils/dict.ts @@ -294,6 +294,8 @@ export enum DICT_TYPE { MES_RQC_TYPE = 'mes_rqc_type', // MES 退货检验类型 MES_WM_ARRIVAL_NOTICE_STATUS = 'mes_wm_arrival_notice_status', // MES 到货通知单状态 MES_WM_ITEM_RECEIPT_STATUS = 'mes_wm_item_receipt_status', // MES 物料接收单状态 + MES_WM_TRANSFER_STATUS = 'mes_wm_transfer_status', // MES 转移单状态 + MES_WM_TRANSFER_TYPE = 'mes_wm_transfer_type', // MES 转移单类型 MES_WM_OUTSOURCE_RECPT_STATUS = 'mes_wm_outsource_recpt_status', // MES 外协入库单状态 MES_WM_PRODUCTION_ISSUE_STATUS = 'mes_wm_production_issue_status', // MES 领料出库单状态 MES_PRODUCT_PRODUCE_STATUS = 'mes_product_produce_status', // MES 生产入库单状态 diff --git a/src/views/mes/utils/constants.ts b/src/views/mes/utils/constants.ts index 21e8157cb..569f66330 100644 --- a/src/views/mes/utils/constants.ts +++ b/src/views/mes/utils/constants.ts @@ -209,6 +209,16 @@ export const MesWmItemReceiptStatusEnum = { CANCELED: MesOrderStatusConstants.CANCELLED } +/** MES 转移单状态枚举 */ +export const MesWmTransferStatusEnum = { + PREPARE: MesOrderStatusConstants.DRAFT, + UNCONFIRMED: MesOrderStatusConstants.CONFIRMED, + UNSTOCK: MesOrderStatusConstants.APPROVING, + UNEXECUTE: MesOrderStatusConstants.APPROVED, + FINISHED: MesOrderStatusConstants.FINISHED, + CANCELED: MesOrderStatusConstants.CANCELLED +} + /** MES 委外收货单状态枚举 */ export const MesWmOutsourceReceiptStatusEnum = { PREPARE: MesOrderStatusConstants.DRAFT, diff --git a/src/views/mes/wm/materialStock/components/WmMaterialStockSelect.vue b/src/views/mes/wm/materialStock/components/WmMaterialStockSelect.vue index 20924b659..b3a2f93b2 100644 --- a/src/views/mes/wm/materialStock/components/WmMaterialStockSelect.vue +++ b/src/views/mes/wm/materialStock/components/WmMaterialStockSelect.vue @@ -123,6 +123,7 @@ const handleConfirm = () => { if (!selectedRow.value) { return } + // TODO @芋艿:暂时不用提供 warehouseName、locationName、areaName 这种; emit('select', { materialStockId: selectedRow.value.id, batchId: selectedRow.value.batchId, diff --git a/src/views/mes/wm/packages/PackageLineList.vue b/src/views/mes/wm/packages/PackageLineList.vue index c7e77ce85..422c9df78 100644 --- a/src/views/mes/wm/packages/PackageLineList.vue +++ b/src/views/mes/wm/packages/PackageLineList.vue @@ -128,6 +128,8 @@ const queryParams = reactive({ const getList = async () => { loading.value = true try { + // TODO @芋艿:需确认“父箱详情 -> 装箱清单”是否要和 ktg-mes 一样,自动汇总当前箱及其子孙箱明细; + // 目前前端仅传当前 packageId,最终查询范围取决于后端 package-line/page 的实现。 queryParams.packageId = props.packageId const data = await WmPackageLineApi.getPackageLinePage(queryParams) list.value = data.list diff --git a/src/views/mes/wm/transfer/TransferForm.vue b/src/views/mes/wm/transfer/TransferForm.vue new file mode 100644 index 000000000..d1fc36ce3 --- /dev/null +++ b/src/views/mes/wm/transfer/TransferForm.vue @@ -0,0 +1,295 @@ + + + diff --git a/src/views/mes/wm/transfer/index.vue b/src/views/mes/wm/transfer/index.vue new file mode 100644 index 000000000..06aa9c746 --- /dev/null +++ b/src/views/mes/wm/transfer/index.vue @@ -0,0 +1,332 @@ + + +