From b32d6c5ec5cfa27b9a2d49898b90de4869aedc9a Mon Sep 17 00:00:00 2001 From: shenzhouyu Date: Fri, 4 Sep 2026 14:20:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B5=B7=E5=AE=89=E5=A7=94=E5=A4=96=EF=BC=8C?= =?UTF-8?q?=E6=88=90=E5=93=81=EF=BC=8Cmr=E5=8F=91=E6=96=99=E9=80=80?= =?UTF-8?q?=E6=96=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../customerIssue/customerIssuePDA.vue | 36 +++- .../customerIssuePDAIssueList.vue | 160 ++++++++++++++++-- src/views/modules/mr-issue/mrPicking.vue | 23 ++- .../modules/mr-issue/mrPickingDetail.vue | 8 +- .../outsourcingDirectIssue.vue | 19 ++- .../outsourcingDirectIssueDetail.vue | 10 +- .../outsourcingDirectIssueList.vue | 9 +- .../outsourcing-return/outsourcingReturn.vue | 15 +- .../outsourcingReturnPDAIssueList.vue | 14 +- .../outsourcingReturnPDAList.vue | 9 +- 10 files changed, 252 insertions(+), 51 deletions(-) diff --git a/src/views/modules/customerIssue/customerIssuePDA.vue b/src/views/modules/customerIssue/customerIssuePDA.vue index 2875ac0..00d3829 100644 --- a/src/views/modules/customerIssue/customerIssuePDA.vue +++ b/src/views/modules/customerIssue/customerIssuePDA.vue @@ -108,6 +108,7 @@ import { getCustomerIssueNotifyHeaderOrderMaterialList, } from '@/api/customerIssue/customer-issue' import { getWorkOrderMaterials } from '@/api/production/production-issue' +import { filterRowsByAuthorizedSubSite, getAuthorizedSubSiteCodeList } from '@/utils/subSiteAuth.js' export default { name: 'customerIssuePDA', @@ -120,7 +121,7 @@ export default { // 基于申请单发料 requestIssueForm: { - site: localStorage.getItem('site'), + site: '', requestNo: '', operatorName: 'PDA_USER', issueReason: '', @@ -162,6 +163,12 @@ export default { this.message = '' }, + // 取接口返回的 CONTRACT 作为后续业务 site + getMaterialSite(material) { + if (!material) return '' + return material.CONTRACT || material.contract || '' + }, + // 基于申请单发料相关方法 async loadIssueRequestMaterials() { if (this.loading) { @@ -185,13 +192,21 @@ export default { this.materialList = [] this.selectedRequestMaterial = null this.showOnlySelected = false + this.requestIssueForm.site = '' getCustomerIssueNotifyHeaderInfo({ - site: localStorage.getItem('site'), + site: localStorage.getItem('site')+'%', workOrderNo: this.requestIssueForm.requestNo, }).then(({ data }) => { if (data.code === 0) { - this.issueRequestMaterials = data.data || [] + const sourceRows = data.data || [] + const authorizedSubSiteCodeList = getAuthorizedSubSiteCodeList(this.$store.state.user.subSiteCodeList) + // 接口按site前缀查询会返回同前缀下的所有子site,这里按当前用户授权子site做二次过滤 + this.issueRequestMaterials = filterRowsByAuthorizedSubSite( + sourceRows, + authorizedSubSiteCodeList, + ['CONTRACT', 'contract'] + ) if (this.issueRequestMaterials.length === 0) { this.$message.warning('查询申请单不存在') } @@ -222,18 +237,25 @@ export default { this.selectedWorkOrder = '' this.materialList = [] this.showOnlySelected = false + this.requestIssueForm.site = '' return } // 选择并仅显示当前申请单物料 this.selectedRequestMaterial = material this.selectedWorkOrder = material.SHIPMENT_ID + this.requestIssueForm.site = this.getMaterialSite(material) this.showOnlySelected = true this.getCustomerIssueNotifyHeaderOrderMaterialList(material) }, getCustomerIssueNotifyHeaderOrderMaterialList(material){ + const site = this.getMaterialSite(material) + if (!site) { + this.$message.warning('未获取到申请单站点信息') + return + } let params = { - site: localStorage.getItem('site'), + site, workOrderNo: material.SHIPMENT_ID, }; getCustomerIssueNotifyHeaderOrderMaterialList(params).then(({ data }) => { @@ -255,12 +277,18 @@ export default { // 打开材料列表页面(仿照 productionReturnPicking.vue 的 openIssueList) openIssueDetail(material) { + const site = this.getMaterialSite(material) || this.requestIssueForm.site + if (!site) { + this.$message.warning('未获取到申请单站点信息') + return + } this.$router.push({ name: 'customerIssuePDAIssueList', query: { state: material.STATE, // 申请单行号 shipmentId: material.SHIPMENT_ID, // 客户订单号 orderType: material.SHIPMENT_TYPE, // 订单类型 + site, } }) }, diff --git a/src/views/modules/customerIssue/customerIssuePDAIssueList.vue b/src/views/modules/customerIssue/customerIssuePDAIssueList.vue index 3f3559d..954f823 100644 --- a/src/views/modules/customerIssue/customerIssuePDAIssueList.vue +++ b/src/views/modules/customerIssue/customerIssuePDAIssueList.vue @@ -26,9 +26,12 @@
-
- 申请单号:{{ orderInfo.orderNo }}      - 本次: {{ totalScannedQty }} +
+
+ 申请单号:{{ orderInfo.orderNo }} + 本次: {{ totalScannedQty }} +
+ 物料清单
@@ -193,6 +196,58 @@
+ +
+
+ + + +
+
+
@@ -364,6 +419,7 @@ export default { labelList: [], orderNo: '', orderType: '', + site: '', isRemoveMode: false, // 默认为添加模式 partNo: '', // 物料编码 transactionId: '', // 关联单号 @@ -410,6 +466,10 @@ export default { }, pendingIssueParams: null, shipmentLine: [], + // shipmentline 物料清单弹窗 + showShipmentLineDialogVisible: false, + shipmentLineLoading: false, + shipmentLineList: [], } }, computed: { @@ -494,7 +554,7 @@ export default { const params = { scannedLabel: labelCode, workOrderNo: this.orderNo, - site: localStorage.getItem('site'), + site: this.site, batchNo: this.batchNo, } // 检查是否已经扫描过 @@ -522,7 +582,7 @@ export default { engChgLevel: labelInfo.engChgLevel || '1', detailId: labelInfo.detailId || '', unitId: labelInfo.unitId || '', - site: labelInfo.site || localStorage.getItem('site'), + site: labelInfo.site || this.site, height: labelInfo.height || null, }) @@ -544,7 +604,7 @@ export default { return } let params = { - site: localStorage.getItem('site'), + site: this.site, unitId: labelCode, detailId: exists.detailId, } @@ -622,7 +682,7 @@ export default { const updateParams = { detailId: this.editForm.detailId, site: - this.labelList[this.editIndex].site || localStorage.getItem('site'), + this.labelList[this.editIndex].site || this.site, unitId: this.labelList[this.editIndex].unitId, locationId: this.editForm.locationId, qtyToIssue: Number(this.editForm.quantity), @@ -687,7 +747,7 @@ export default { }, buildIssueParams() { return { - site: localStorage.getItem('site'), + site: this.site, workOrderNo: this.orderNo, batchNo: this.batchNo, componentPartNo: this.partNo, @@ -712,7 +772,7 @@ export default { async prepareComparisonData() { this.shipmentLine = [] const params = { - site: localStorage.getItem('site'), + site: this.site, workOrderNo: this.orderNo, } await getCustomerIssueNotifyHeaderOrderMaterialList(params).then( @@ -796,6 +856,53 @@ export default { this.showSummaryDialog = false this.pendingIssueParams = null }, + // 查看 shipment 下 shipmentline 物料数量 + showShipmentLineDialog() { + this.showShipmentLineDialogVisible = true + this.loadShipmentLineList() + }, + closeShipmentLineDialog() { + this.showShipmentLineDialogVisible = false + }, + async loadShipmentLineList() { + if (!this.site || !this.orderNo) { + this.$message.error('缺少必要参数,无法获取物料清单') + this.shipmentLineList = [] + return + } + this.shipmentLineLoading = true + try { + const { data } = await getCustomerIssueNotifyHeaderOrderMaterialList({ + site: this.site, + workOrderNo: this.orderNo, + }) + if (!data || data.code !== 0) { + this.$message.error((data && data.msg) || '获取物料清单失败') + this.shipmentLineList = [] + return + } + const materials = data.data || [] + this.shipmentLineList = materials.map((item) => { + const inventoryQty = + Number(this.pickFieldValue(item, ['INVENTORY_QTY'], 0)) || 0 + const qtyAssigned = + Number(this.pickFieldValue(item, ['QTY_ASSIGNED'], 0)) || 0 + return { + lineNo: this.pickFieldValue(item, ['SHIPMENT_LINE_NO'], ''), + partNo: this.pickFieldValue(item, ['INVENTORY_PART_NO'], ''), + inventoryQty, + qtyAssigned, + remainQty: this.safeAdd(inventoryQty, -qtyAssigned), + uom: this.pickFieldValue(item, ['INVENTORY_UOM'], ''), + } + }) + } catch (error) { + this.$message.error('获取物料清单失败') + this.shipmentLineList = [] + } finally { + this.shipmentLineLoading = false + } + }, proceedIssueConfirm() { if (!this.pendingIssueParams) { this.pendingIssueParams = this.buildIssueParams() @@ -864,7 +971,7 @@ export default { const printRequest = { userId: localStorage.getItem('userName'), username: localStorage.getItem('userName'), - site: localStorage.getItem('site'), + site: this.site, unitIds: unitIds, labelType: printLabelType, } @@ -916,7 +1023,7 @@ export default { let params = { shipmentId: this.orderNo, partNo: this.partNo, - site: localStorage.getItem('site'), + site: this.site, } this.labelList = [] getShipmentHuDetail(params) @@ -1081,6 +1188,7 @@ export default { this.orderNo = this.$route.query.shipmentId this.state = this.$route.query.state this.orderType = this.$route.query.orderType + this.site = this.$route.query.site || '' if (!this.orderNo) { this.$message.error('参数错误') @@ -1246,6 +1354,36 @@ export default { margin-bottom: 16px; } +.order-card-header { + display: flex; + justify-content: space-between; + align-items: flex-start; + margin-bottom: 0; + gap: 8px; +} + +.order-card-left { + flex: 1; + min-width: 0; +} + +.order-card-left .title-label { + margin-bottom: 4px; +} + +.order-card-left .title-label:last-child { + margin-bottom: 0; +} + +.shipment-line-table .summary-table-row { + grid-template-columns: 0.6fr 1.4fr 0.8fr 0.8fr 0.8fr; +} + +.shipment-line-table .highlight-qty { + color: #17b3a3; + font-weight: 600; +} + .title-label { font-size: 11px; color: #999; diff --git a/src/views/modules/mr-issue/mrPicking.vue b/src/views/modules/mr-issue/mrPicking.vue index 94e7e53..733323f 100644 --- a/src/views/modules/mr-issue/mrPicking.vue +++ b/src/views/modules/mr-issue/mrPicking.vue @@ -104,6 +104,7 @@