From 190cb66f1245e8b47edf363af11449a6ed2d44dc Mon Sep 17 00:00:00 2001 From: lijuncheng Date: Fri, 5 Jul 2024 13:43:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=9B=B4=E6=8E=A5=E5=8F=91?= =?UTF-8?q?=E6=96=99=E5=92=8C=E5=8F=91=E6=96=99=E4=BB=BB=E5=8A=A1=E6=89=AB?= =?UTF-8?q?=E6=8F=8F=E5=B0=8F=E5=8C=85=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mycomponents/scan/winComScanBalance.vue | 6 + src/pages/issue/coms/comScanIssuePack.vue | 196 +++++++++++++- src/pages/issue/job/issueDetail.vue | 2 + src/pages/issue/record/directIssue.vue | 283 ++++++++++++++++---- 4 files changed, 434 insertions(+), 53 deletions(-) diff --git a/src/mycomponents/scan/winComScanBalance.vue b/src/mycomponents/scan/winComScanBalance.vue index 393f0cbc..200cc741 100644 --- a/src/mycomponents/scan/winComScanBalance.vue +++ b/src/mycomponents/scan/winComScanBalance.vue @@ -71,7 +71,13 @@ balanceFromInventoryStatuses: { //是否传fromInventoryStatuses type: Boolean, default: true + }, + bussinessCode:{ + type: String, + default: '' } + + }, data() { return { diff --git a/src/pages/issue/coms/comScanIssuePack.vue b/src/pages/issue/coms/comScanIssuePack.vue index f2b15e7a..493448d2 100644 --- a/src/pages/issue/coms/comScanIssuePack.vue +++ b/src/pages/issue/coms/comScanIssuePack.vue @@ -113,7 +113,8 @@ getDetailEditRemoveOption } from '@/common/array.js'; import { - getWorkShopLineStation + getWorkShopLineStation, + getBalanceByFilter } from '@/api/request2.js'; import { @@ -215,7 +216,7 @@ import { getDirectoryItemArray } from '../../../common/directory.js'; let that = this; that.fromLocationList = []; if (that.dataContent != null) { - that.fromInventoryStatuses = getDirectoryItemArray(this.jobContent.outInventoryStatuses) + that.fromInventoryStatuses = this.jobContent.outInventoryStatuses that.toLocation = that.dataContent[0]; that.toLocationCode = that.dataContent[0].toLocationCode; that.fromLocationList = that.getFromLocationList(); @@ -250,6 +251,192 @@ import { getDirectoryItemArray } from '../../../common/directory.js'; this.showErrorMessage('发料库位【' + fromlocation + '】不存在') } }, + + onScanResult(result){ + try { + let that = this; + if (that.fromLocationCode == '') { + that.showErrorMessage('请选择来源库位', res => { + that.$refs.toLocationCombox.onFocus(); + }); + return; + } + let packageInfo = result.package; + let itemCode = result.label.itemCode; + let packingCode = result.label.packingNumber; + let lot = result.label.batch; + let item = that.toLocation.Items.find(r => r.itemCode == itemCode); + if (item == undefined) { + that.showErrorMessage('未查找到物料【' + itemCode + '】的发料明细', + res => { + that.getfocus(); + } + ) + return; + } else { + //查找库存信息 + uni.showLoading({ + title: '加载中', + mask: true + }) + + this.getBalance(result.label, packageInfo, balances => { + this.packageInfo =packageInfo; + //扫描的是外包装 + let s = ''; + if (!result.package.parentNumber) { + if (balances.list.length == 0) { + this.showErrorMessage('未查找到该包装的库存信息,请重新扫描') + } else { + let newBalances = balances.list.filter(b => b.locationCode == that + .fromLocationCode); + if (newBalances.length == 0) { + this.showErrorMessage('未查找到该包装的库存信息,请重新扫描') + } else if (newBalances.length == 1) { + let balance = newBalances[0]; + this.afterGetBalance(result.label, balance, packageInfo); + } else { + this.showBalanceSelect(newBalances); + } + } + } else { + //扫描的是小包装 + if (balances.list.length == 0) { + this.showErrorMessage('未查找到该包装的库存信息,请重新扫描') + } else { + //小包装库存 + let subPackitems = balances.list.filter(r => r.packingNumber == packageInfo + .number) + //外包装库存 + let subParentPackitems = balances.list.filter(r => r.packingNumber == + packageInfo + .parentNumber&&r.locationCode==this.fromLocationCode) + + + //小包装没有库存, + if (subPackitems.length == 0) { + //外包装有库存,出库后剩余库存未转换为出库包装规格 + + if (subParentPackitems.length > 0) { + if(subParentPackitems.length==1){ + let balance = subParentPackitems[0]; + balance.qty=packageInfo.qty; + this.afterGetBalance(result.label, balance, packageInfo); + }else { + this.showBalanceSelect(subParentPackitems); + } + + } else { + this.showErrorMessage('按外包装【' + packageInfo.parentNumber + '】和子包装【' + + packageInfo.number + '】都未查找到库存余额') + } + } else { + var locationCode = this.fromLocationCode + if(balances.list==1){ + locationCode=balances.list[0].locationCode + }else { + var manyBlances = balances.list.filter(r=>r.locationCode!=this.fromLocationCode) + if(manyBlances.length>0){ + locationCode = manyBlances[0].locationCode; + } + + } + this.showErrorMessage('该包装【' + packageInfo.number + '】在库位【' + + locationCode + + '】已经有库存余额,请重新扫描') + } + + + + // //小包装没有库存,外包装有库存 + // if (subitems.length == 0 && subParentPackitems.length > 0) { + // this.afterGetBalance(result.label, null, packageInfo); + // } else if (subitems.length > 0 && subParentPackitems.length == 0) { + // //小包装没有库存,外包装没有有库存 + // this.showErrorMessage('该包装在库位【' + balances.list[0].locationCode + + // '】已经有库存余额,请重新扫描') + // } else { + + // } + + } + } + uni.hideLoading(); + }); + + + // getBalanceByManagementPrecision(result.label, that.fromLocationCode, that.fromInventoryStatuses, + // balanceRes => { + // if (balanceRes.success) { + // let s = ''; + // if (balanceRes.data.list.length == 0) { + // this.afterGetBalance(result.label, null, packageInfo); + // } else if (balanceRes.data.list.length == 1) { + // let balance = balanceRes.data.list[0]; + // this.afterGetBalance(result.label, balance, packageInfo); + // } else { + // this.showBalanceSelect(balanceRes.data.list); + // } + // } else { + // this.showErrorMessage(balanceRes.message.message); + // } + // uni.hideLoading(); + // }); + } + } catch (e) { + this.showErrorMessage(e.stack) + uni.hideLoading(); + } + }, + + getBalance(label, packageInfo, callback) { + var filters = [] + + if (packageInfo.parentNumber) { + var packingNumber = packageInfo.parentNumber + "," + label.packingNumber; + filters.push({ + column: "packingNumber", + action: "in", + value: packingNumber + }) + } else { + filters.push({ + column: "packingNumber", + action: "==", + value: label.packingNumber + }) + } + + filters.push({ + column: "itemCode", + action: "==", + value: label.itemCode + }) + filters.push({ + column: "batch", + action: "==", + value: label.batch + }) + + if (this.fromInventoryStatuses != null && this.fromInventoryStatuses != "") { + filters.push({ + column: "inventoryStatus", + action: "in", + value: this.fromInventoryStatuses + }) + } + + var params = { + filters: filters, + pageNo: 1, + pageSize: 100, + } + getBalanceByFilter(params).then(res => { + callback(res.data) + }).catch(err => { + this.showErrorMessage(err.message); + }) + }, onScan(result) { @@ -267,7 +454,7 @@ import { getDirectoryItemArray } from '../../../common/directory.js'; } } }, - onScanResult(result) { + onScanResult1(result) { try { let that = this; if (that.fromLocationCode == '') { @@ -324,7 +511,7 @@ import { getDirectoryItemArray } from '../../../common/directory.js'; }, selectBalanceItem(balance) { - this.afterGetBalance(this.label, balance, this.packageInfo); + this.afterGetBalance(this.label, balance,this.packageInfo); }, afterGetBalance(label, balance, packageInfo) { @@ -432,6 +619,7 @@ import { getDirectoryItemArray } from '../../../common/directory.js'; scaned: true, itemCode: label.itemCode, packingNumber: label.packingNumber, + parentPackingNumber: packageInfo.parentNumber, batch: label.batch, qty: Number(balance.qty), // qty: Number(label.qty) > Number(balance.qty) ? Number(balance.qty) : Number(label.qty), diff --git a/src/pages/issue/job/issueDetail.vue b/src/pages/issue/job/issueDetail.vue index 176fa4f8..e8719ce2 100644 --- a/src/pages/issue/job/issueDetail.vue +++ b/src/pages/issue/job/issueDetail.vue @@ -367,6 +367,8 @@ .packingNumber; record.toBatch = info.batch; } + record.fromParentPackingNumber = r + .parentPackingNumber; subItem.recordList.push(record); }) subList.push(deepCopyData(subItem)); diff --git a/src/pages/issue/record/directIssue.vue b/src/pages/issue/record/directIssue.vue index 1bcb962f..a63dc45a 100644 --- a/src/pages/issue/record/directIssue.vue +++ b/src/pages/issue/record/directIssue.vue @@ -16,10 +16,9 @@ + :isShowToLocation="false" @updateData="updateData" @removePack="removePack"> - + @@ -44,11 +43,13 @@ - + + @@ -56,6 +57,7 @@ import { issueRecordSubmit, getWorkShopLineStation, + getBalanceByFilter } from '@/api/request2.js'; import { @@ -95,6 +97,7 @@ import winScanPackAndLocation from "@/mycomponents/scan/winScanPackAndLocation.vue" import recordComDetailCard from '@/mycomponents/record/recordComDetailCard.vue' import recordDetailCard from '@/mycomponents/record/recordDetailCard.vue' + import balanceSelect from '@/mycomponents/balance/balanceSelect.vue' export default { components: { @@ -105,7 +108,8 @@ winScanLocation, winScanPackAndLocation, recordComDetailCard, - recordDetailCard + recordDetailCard, + balanceSelect }, data() { return { @@ -125,7 +129,8 @@ businessTypeCode: "Issue", positionList: [], show: false, - positionInfo: "请选择生产线" + positionInfo: "请选择生产线", + resultData: {} }; }, onLoad(option) { @@ -169,7 +174,139 @@ mounted() {}, methods: { + getBalance(label, packageInfo, callback) { + var filters = [] + + if (packageInfo.parentNumber) { + var packingNumber = packageInfo.parentNumber + "," + label.packingNumber; + filters.push({ + column: "packingNumber", + action: "in", + value: packingNumber + }) + } else { + filters.push({ + column: "packingNumber", + action: "==", + value: label.packingNumber + }) + } + + filters.push({ + column: "itemCode", + action: "==", + value: label.itemCode + }) + filters.push({ + column: "batch", + action: "==", + value: label.batch + }) + + if (this.fromInventoryStatuses != null && this.fromInventoryStatuses != "") { + filters.push({ + column: "inventoryStatus", + action: "in", + value: this.fromInventoryStatuses + }) + } + + var params = { + filters: filters, + pageNo: 1, + pageSize: 100, + } + getBalanceByFilter(params).then(res => { + callback(res.data) + }).catch(err => { + this.showErrorMessage(err.message); + }) + }, getScanResult(result) { + this.resultData = result; + let packageInfo = result.package; + this.getBalance(result.label, packageInfo, balances => { + + //扫描的是外包装 + let s = ''; + if (!result.package.parentNumber) { + if (balances.list.length == 0) { + this.showErrorMessage('未查找到该包装的库存信息,请重新扫描') + } else { + let newBalances = balances.list.filter(b => b.locationCode == this + .fromLocationCode); + if (newBalances.length == 0) { + this.showErrorMessage('未查找到该包装的库存信息,请重新扫描') + } else if (newBalances.length == 1) { + let balance = newBalances[0]; + result.balance = balance; + this.afterGetBalance(result); + } else { + this.showBalanceSelect(newBalances); + } + } + } else { + //扫描的是小包装 + if (balances.list.length == 0) { + this.showErrorMessage('未查找到该包装的库存信息,请重新扫描') + } else { + //小包装库存 + let subPackitems = balances.list.filter(r => r.packingNumber == packageInfo + .number) + //外包装库存 + let subParentPackitems = balances.list.filter(r => r.packingNumber == + packageInfo + .parentNumber && r.locationCode == this.fromLocationCode) + + + //小包装没有库存, + if (subPackitems.length == 0) { + //外包装有库存,出库后剩余库存未转换为出库包装规格 + + if (subParentPackitems.length > 0) { + if (subParentPackitems.length == 1) { + let balance = subParentPackitems[0]; + balance.qty = packageInfo.qty; + result.balance = balance; + this.afterGetBalance(result); + } else { + this.showBalanceSelect(subParentPackitems); + } + + } else { + this.showErrorMessage('按外包装【' + packageInfo.parentNumber + '】和子包装【' + + packageInfo.number + '】都未查找到库存余额') + } + } else { + var locationCode = this.fromLocationCode + if (balances.list == 1) { + locationCode = balances.list[0].locationCode + } else { + var manyBlances = balances.list.filter(r => r.locationCode != this + .fromLocationCode) + if (manyBlances.length > 0) { + locationCode = manyBlances[0].locationCode; + } + } + this.showErrorMessage('该包装【' + packageInfo.number + '】在库位【' + + locationCode + + '】已经有库存余额,请重新扫描') + } + } + } + }) + }, + + showBalanceSelect(items) { + this.$refs.balanceSelect.openPopup(items); + }, + + selectBalanceItem(balance) { + this.resultData.balance =balance; + this.afterGetBalance(this.resultData); + }, + + afterGetBalance(result){ let balance = result.balance; let label = result.label; let pack = result.package; @@ -187,15 +324,17 @@ var itemp = createItemInfo(balance, pack); let newDetail = createDetailInfo(balance, pack); // + newDetail.parentNumber =pack.parentNumber; + newDetail.packingNumber =pack.number newDetail.packUnit =packUnit; newDetail.packQty=packQty; itemp.subList.push(newDetail); this.detailSource.push(itemp) calcHandleQty(this.detailSource); - + } else { var detail = item.subList.find(r => { - if (r.packingNumber == balance.packingNumber && + if (r.packingNumber == pack.number && r.batch == balance.batch && r.locationCode == balance.locationCode && r.inventoryStatus == balance.inventoryStatus) { @@ -204,10 +343,60 @@ }) if (detail == undefined) { let newDetail = createDetailInfo(balance, pack); + newDetail.parentNumber =pack.parentNumber; + newDetail.packingNumber =pack.number newDetail.packUnit =packUnit; newDetail.packQty=packQty; item.subList.push(newDetail); calcHandleQty(this.detailSource); + } else { + if (detail.scaned == true) { + this.showErrorMessage("箱码[" + detail.packingNumber + "]批次[" + balance.batch + "]已经在列表中") + } + } + } + }, + + + getScanResult1(result) { + let balance = result.balance; + let label = result.label; + let pack = result.package; + let packUnit = pack.packUnit; + let packQty = pack.packQty + var item = this.detailSource.find(res => { + if (res.itemCode == balance.itemCode) { + return res + } + }) + if (this.fromWarehouseCode == '') { + this.fromWarehouseCode = balance.warehouseCode; + } + if (item == undefined) { + + var itemp = createItemInfo(balance, pack); + let newDetail = createDetailInfo(balance, pack); // + newDetail.packUnit = packUnit; + newDetail.packQty = packQty; + itemp.subList.push(newDetail); + this.detailSource.push(itemp) + calcHandleQty(this.detailSource); + + } else { + var detail = item.subList.find(r => { + if (r.packingNumber == balance.packingNumber && + r.batch == balance.batch && + r.locationCode == balance.locationCode && + r.inventoryStatus == balance.inventoryStatus) { + return r; + } + }) + if (detail == undefined) { + let newDetail = createDetailInfo(balance, pack); + newDetail.packUnit = packUnit; + newDetail.packQty = packQty; + item.subList.push(newDetail); + calcHandleQty(this.detailSource); } else { if (detail.scaned == true) { this.showErrorMessage("箱码[" + balance.packingNumber + "批次[" + balance.batch + "]已经在列表中") @@ -302,24 +491,25 @@ } else { this.showErrorMessage("车间-生产线基础信息维护错误") } - + //赋值到库位代码 let toLocationCode = '' - this.positionList.forEach(item=>{ - if(this.workshopCode == item.value){ // 车间 - item.children.find(child=>{ - if(this.productionLineCode==child.value){ - toLocationCode = child.children.find(subChild=>this.workStationCode==subChild.value).rawLocationCode; + this.positionList.forEach(item => { + if (this.workshopCode == item.value) { // 车间 + item.children.find(child => { + if (this.productionLineCode == child.value) { + toLocationCode = child.children.find(subChild => this.workStationCode == + subChild.value).rawLocationCode; } }) } }) - this.detailSource.forEach(item=>{ + this.detailSource.forEach(item => { item.subList.forEach(detail => { detail.toLocationCode = toLocationCode }) }) - + }, removeItem(index, item) { @@ -380,7 +570,9 @@ getPrecisionStrategyList(precisionStrategyParams, res => { if (res.success) { this.managementList = res.list; - var params = {...this.setRecordParams()} + var params = { + ...this.setRecordParams() + } console.log("提交参数", JSON.stringify(params)); issueRecordSubmit(params).then(res => { @@ -426,20 +618,20 @@ submitItem.qty = detail.handleQty; submitItem.package = ""; submitItem.recordList = [{ - toInventoryStatus:detail.inventoryStatus, - fromPackingNumber:info.packingNumber, - fromBatch:info.batch, - toPackingNumber:info.packingNumber, - toBatch:info.batch, - fromLocationCode:detail.locationCode, - toLocationCode:detail.toLocationCode, - handleQty:detail.handleQty, - fromPackUnit:detail.packUnit, - toPackUnit:detail.packUnit, - fromPackQty:detail.packQty, - toPackQty:detail.packQty - } - ] + toInventoryStatus: detail.inventoryStatus, + fromParentPackingNumber: detail.parentNumber, + fromPackingNumber: info.packingNumber, + fromBatch: info.batch, + toPackingNumber: info.packingNumber, + toBatch: info.batch, + fromLocationCode: detail.locationCode, + toLocationCode: detail.toLocationCode, + handleQty: detail.handleQty, + fromPackUnit: detail.packUnit, + toPackUnit: detail.packUnit, + fromPackQty: detail.packQty, + toPackQty: detail.packQty + }] subList.push(submitItem) } }) @@ -458,13 +650,6 @@ if (res) {} }); }, - showErrorMessage(message) { - this.$refs.comMessage.showErrorMessage(message, res => { - if (res) { - - } - }); - }, showScanMessage(message) { this.$refs.comMessage.showScanMessage(message); @@ -502,17 +687,17 @@ }) }, - updateData() { - calcHandleQty(this.detailSource); - for (var i = 0; i < this.detailSource.length; i++) { - let item = this.detailSource[i]; - if (item.qty == 0) { - this.detailSource.splice(i, 1) + updateData() { + calcHandleQty(this.detailSource); + for (var i = 0; i < this.detailSource.length; i++) { + let item = this.detailSource[i]; + if (item.qty == 0) { + this.detailSource.splice(i, 1) + } } - } - this.$forceUpdate(); - - }, + this.$forceUpdate(); + + }, clearData() { this.fromLocationInfo = {}; @@ -520,7 +705,7 @@ this.fromWarehouseCode = ''; this.toWarehouseCode = ''; this.detailSource = []; - this.to + this.positionInfo= "请选择生产线"; } } }