From a0204bdc2ea21da87b675f391cb07d03cc9c0fbf Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Fri, 19 Sep 2025 17:13:08 +0800 Subject: [PATCH] =?UTF-8?q?PDA=E9=80=80=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/outsourcing/outsourcing.js | 4 + src/api/production/production-return.js | 5 +- src/router/index.js | 8 +- src/views/modules/outsourcing-issue/index.vue | 2 +- .../outsourcingDirectIssue.vue | 481 ++++++++++ .../outsourcingDirectIssueDetail.vue | 478 ++++++++++ .../modules/production-issue/directIssue.vue | 6 +- .../production-issue/directIssueDetail.vue | 45 +- .../modules/production-return/production.vue | 2 +- .../productionReturnIssueList.vue | 144 +++ .../production-return/productionReturnPDA.vue | 139 ++- .../productionReturnPicking.vue | 40 +- .../productionReturnPickingDetail.vue | 882 ++++++++++++++---- 13 files changed, 1947 insertions(+), 289 deletions(-) create mode 100644 src/api/outsourcing/outsourcing.js create mode 100644 src/views/modules/outsourcing-issue/outsourcingDirectIssue.vue create mode 100644 src/views/modules/outsourcing-issue/outsourcingDirectIssueDetail.vue create mode 100644 src/views/modules/production-return/productionReturnIssueList.vue diff --git a/src/api/outsourcing/outsourcing.js b/src/api/outsourcing/outsourcing.js new file mode 100644 index 0000000..7619873 --- /dev/null +++ b/src/api/outsourcing/outsourcing.js @@ -0,0 +1,4 @@ +import { createAPI } from "@/utils/httpRequest.js"; + +// 获取委外订单信息 +export const getOutsourceOrderInfo = data => createAPI(`/pda/outsourcing/issue/getOutsourceOrderInfo`,'post',data) \ No newline at end of file diff --git a/src/api/production/production-return.js b/src/api/production/production-return.js index c9e1051..4110243 100644 --- a/src/api/production/production-return.js +++ b/src/api/production/production-return.js @@ -1,8 +1,11 @@ import { createAPI } from "@/utils/httpRequest.js"; +// 获取工单信息 +export const getReturnWorkOrderInfo = data => createAPI(`/pda/production/return/getReturnWorkOrderInfo`,'post',data) -export const getWorkOrderMaterials = data => createAPI(`/pda/production/issue/getWorkOrderMaterials`,'post',data) +export const getIssueForShopOrder = data => createAPI(`/pda/production/return/getIssueForShopOrder`,'post',data) +export const getInventoryPart = data => createAPI(`/pda/production/return/getInventoryPart`,'post',data) export const parseMaterialLabel = data => createAPI(`/pda/production/issue/parseMaterialLabel`,'post',data) export const directReturn = data => createAPI(`/pda/production/issue/directReturn`,'post',data) diff --git a/src/router/index.js b/src/router/index.js index ea48de5..5f585ee 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -51,7 +51,9 @@ const globalRoutes = [ //生产退料 {path: "/productionreturn",name: "productionreturn", component: resolve => require(["@/views/modules/production-return/production.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, {path: "/productionReturnPicking", name: "productionReturnPicking", component: resolve => require(["@/views/modules/production-return/productionReturnPicking.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } }, - {path: "/productionReturnPickingDetail/:orderNo/:orderType", name: "productionReturnPickingDetail", component: resolve => require(["@/views/modules/production-return/productionReturnPickingDetail.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } }, + {path: "/productionReturnIssueList", name: "productionReturnIssueList", component: resolve => require(["@/views/modules/production-return/productionReturnIssueList.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } }, + {path: "/productionReturnPickingDetail/:orderNo/:orderType/:partNo/:transactionId/:quantity/:batchNo", name: "productionReturnPickingDetail", component: resolve => require(["@/views/modules/production-return/productionReturnPickingDetail.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } }, + {path: "/productionReturnPDA", name: "productionReturnPDA", component: resolve => require(["@/views/modules/production-return/productionReturnPDA.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } }, {path: '/production-return/pick/:orderNo', name: 'ProductionIssuePick',component: resolve => require(["@/views/modules/production-return/pick.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, @@ -62,7 +64,9 @@ const globalRoutes = [ {path: "/inboundRegister",name: "inboundRegister", component: resolve => require(["@/views/modules/production-inbound/inboundRegister.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, {path: "/inboundRegisterDetail/:inboundNo",name: "inboundRegisterDetail", component: resolve => require(["@/views/modules/production-inbound/inboundRegisterDetail.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, - // 委外 + // 委外发料 + { path: "/outsource",name: "outsource", component: resolve => require(["@/views/modules/outsourcing-issue/index.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, + { path:"/outsourcingDirectIssue",name:"outsourcingDirectIssue",component: resolve => require(["@/views/modules/outsourcing-issue/outsourcingDirectIssue.vue"], resolve), meta: { transition: 'instant' ,preload: true,keepAlive: true}}, { path: "/outsourcingPicking", name: "outsourcingPicking", component: resolve => require(["@/views/modules/outsourcing-issue/outsourcingPicking.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } }, { path: "/outsourcingPickingDetail/:outsourcingNo", name: "outsourcingPickingDetail", component: resolve => require(["@/views/modules/outsourcing-issue/outsourcingPickingDetail.vue"], resolve), meta: { transition: 'instant', preload: true, keepAlive: true } }, diff --git a/src/views/modules/outsourcing-issue/index.vue b/src/views/modules/outsourcing-issue/index.vue index 2a22000..1433f6c 100644 --- a/src/views/modules/outsourcing-issue/index.vue +++ b/src/views/modules/outsourcing-issue/index.vue @@ -35,7 +35,7 @@ export default { icon: "scan", label: "直接发料", iconClass: "direct", - to: "outsourcingPicking", + to: "outsourcingDirectIssue", disabled: false, }, { diff --git a/src/views/modules/outsourcing-issue/outsourcingDirectIssue.vue b/src/views/modules/outsourcing-issue/outsourcingDirectIssue.vue new file mode 100644 index 0000000..9fbbdd6 --- /dev/null +++ b/src/views/modules/outsourcing-issue/outsourcingDirectIssue.vue @@ -0,0 +1,481 @@ + + + + + + + diff --git a/src/views/modules/outsourcing-issue/outsourcingDirectIssueDetail.vue b/src/views/modules/outsourcing-issue/outsourcingDirectIssueDetail.vue new file mode 100644 index 0000000..8f56a22 --- /dev/null +++ b/src/views/modules/outsourcing-issue/outsourcingDirectIssueDetail.vue @@ -0,0 +1,478 @@ + + + + + + + diff --git a/src/views/modules/production-issue/directIssue.vue b/src/views/modules/production-issue/directIssue.vue index ac41184..c50939d 100644 --- a/src/views/modules/production-issue/directIssue.vue +++ b/src/views/modules/production-issue/directIssue.vue @@ -30,7 +30,7 @@ @click="selectWorkOrder(workOrder)" >
- 工单号:{{ workOrder.orderNo }} + 工单号:{{ workOrder.orderNo }}-{{workOrder.releaseNo}}-{{workOrder.sequenceNo}} {{ workOrder.partNo }}
@@ -70,7 +70,7 @@
物料编码:{{ material.componentPartNo }}    行号:{{ - material.lineNo || index + 1 + material.lineItemNo }} @@ -226,7 +226,7 @@ export default { this.$router.push({ name: "directIssueDetail", params: { - workOrderNo: this.selectedWorkOrder.orderNo, + workOrderNo: this.selectedWorkOrder.orderNo+'-'+this.selectedWorkOrder.releaseNo+'-'+this.selectedWorkOrder.sequenceNo, partNo: material.componentPartNo, partDesc: material.componentPartDesc, requiredQty: material.qtyRequired, diff --git a/src/views/modules/production-issue/directIssueDetail.vue b/src/views/modules/production-issue/directIssueDetail.vue index 76996e1..f90434a 100644 --- a/src/views/modules/production-issue/directIssueDetail.vue +++ b/src/views/modules/production-issue/directIssueDetail.vue @@ -23,7 +23,7 @@
- +
@@ -88,11 +88,11 @@ -
@@ -139,7 +139,7 @@ export default { }, validateAndAddLabel(labelCode) { const params = { - labelCode, + scannedLabel: labelCode, workOrderNo: this.workOrderNo, componentPartNo: this.componentPartNo, site: this.$store.state.user.site, @@ -187,31 +187,40 @@ export default { } }, clearScannedLabels() { - if (this.scannedLabels.length === 0) return - this.$confirm('确定清空所有已扫描的标签吗?', '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }) - .then(() => { - this.scannedLabels = [] - this.$message.success('已清空') + if (this.scannedLabels.length > 0) { + this.$confirm('确定清空所有已扫描的标签吗?', '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', }) - .catch(() => {}) + .then(() => { + this.scannedLabels = [] + this.$router.back() + this.$message.success('已清空') + }) + .catch(() => {}) + } else { + this.$router.back() + } }, confirmIssue() { if (this.scannedLabels.length === 0) { this.$message.warning('请先扫描材料标签') return } + console.log('1231', localStorage.getItem('userName')) + const params = { site: this.$store.state.user.site, workOrderNo: this.workOrderNo, componentPartNo: this.componentPartNo, - labels: this.scannedLabels.map((l) => ({ + operatorName: localStorage.getItem('userName'), + selectedMaterials: this.scannedLabels.map((l, i) => ({ + itemNo: i + 1, labelCode: l.labelCode, - quantity: l.quantity, + issueQty: l.quantity, batchNo: l.batchNo, + warehouseId: l.warehouseId, materialCode: l.materialCode, })), } @@ -421,7 +430,7 @@ export default { margin: 0 16px; margin-top: 4px; border-radius: 8px 8px 0 0; - border-bottom: 2px solid #17B3A3; + border-bottom: 2px solid #17b3a3; } /* 物料描述行 */ diff --git a/src/views/modules/production-return/production.vue b/src/views/modules/production-return/production.vue index 7ce0168..2c61b67 100644 --- a/src/views/modules/production-return/production.vue +++ b/src/views/modules/production-return/production.vue @@ -32,7 +32,7 @@ export default { return { buttons: [ { icon: 'scan', label: '直接退料', iconClass: 'direct', to: 'productionReturnPicking', disabled: false }, - { icon: 'records', label: '申请单退料', iconClass: 'request', to: 'productionReturnPicking', disabled: false }, + { icon: 'records', label: '申请单退料', iconClass: 'request', to: 'productionReturnPDA', disabled: false }, { icon: 'logistics', label: '移库退料', iconClass: 'move', to: 'productionReturnPicking', disabled: true }, { icon: 'revoke', label: '退料撤销', iconClass: 'cancel', to: 'productionReturnPicking', disabled: true }, ] diff --git a/src/views/modules/production-return/productionReturnIssueList.vue b/src/views/modules/production-return/productionReturnIssueList.vue new file mode 100644 index 0000000..36efc95 --- /dev/null +++ b/src/views/modules/production-return/productionReturnIssueList.vue @@ -0,0 +1,144 @@ + + + + + + + diff --git a/src/views/modules/production-return/productionReturnPDA.vue b/src/views/modules/production-return/productionReturnPDA.vue index 1ca8476..22088fe 100644 --- a/src/views/modules/production-return/productionReturnPDA.vue +++ b/src/views/modules/production-return/productionReturnPDA.vue @@ -1,29 +1,17 @@ @@ -372,7 +375,6 @@ export default { name: 'productionReturnPDA', data() { return { - selectedFunction: null, loading: false, loadingText: '', message: '', @@ -415,29 +417,21 @@ export default { scannedLabel: '', labelInfo: null, returnQty: null + , + // 装托盘 + palletForm: { + palletId: '' + } } }, computed: { functionTitle() { - if (!this.selectedFunction) return '生产订单退料'; - if (this.selectedFunction === 'direct') return '直接退料'; - if (this.selectedFunction === 'request') return '基于申请单退料'; - return '生产订单退料'; + return '申请单退料'; } }, methods: { - selectFunction(func) { - this.selectedFunction = func - this.resetAll() - }, - goBack() { - if (!this.selectedFunction) { - this.$router.push('/') - } else { - this.selectedFunction = null - this.resetAll() - } + this.$router.back() }, resetAll() { @@ -782,6 +776,16 @@ export default { } }, + // 装托盘占位,后续接入装托盘功能 + handlePalletize() { + if (!this.palletForm.palletId) { + this.showMessage('请输入托盘号', 'error') + return + } + this.showMessage('装托盘成功(示例)', 'success') + this.palletForm.palletId = '' + }, + showMessage(text, type = 'info') { this.message = text this.messageType = type @@ -794,11 +798,49 @@ export default { \ No newline at end of file