|
|
@ -16,7 +16,7 @@ |
|
|
|
<view class="detail-list" v-for="(item, index) in detailSource" :key="item.id"> |
|
|
|
<view class=""> |
|
|
|
<!-- 物料按照批次的组件 批次不显示包装 --> |
|
|
|
<comJobDetailCardBatch :dataContent="item" :index="index" :settingParam="jobContent" :isShowStatus="true" |
|
|
|
<comJobDetailCardBatch ref='comJobDetailCardBatchRef' :dataContent="item" :index="index" :settingParam="jobContent" :isShowStatus="true" |
|
|
|
@remove="updateData" @updateData="updateData" :locationAreaTypeList='toLocationAreaTypeList' |
|
|
|
:isShowPackListStatus="false" v-if="managementType == 'BY_BATCH'"> |
|
|
|
</comJobDetailCardBatch> |
|
|
@ -277,7 +277,11 @@ |
|
|
|
updateData() { |
|
|
|
console.log("updateData") |
|
|
|
// this.calcHandleQty(); |
|
|
|
if (this.managementType == 'BY_BATCH' || managementPrecision == 'BY_QUANTITY') { |
|
|
|
calcHandleQty(this.detailSource); |
|
|
|
} else { |
|
|
|
calcTreeHandleQty(this.detailSource) |
|
|
|
} |
|
|
|
}, |
|
|
|
//模拟扫描功能 |
|
|
|
openScanPopupSimulate(message) { |
|
|
@ -329,8 +333,55 @@ |
|
|
|
}, |
|
|
|
|
|
|
|
getScanResult(result, managementPrecision) { |
|
|
|
try { |
|
|
|
this.managementType = managementPrecision |
|
|
|
let array1 = []//记录推荐的库位 |
|
|
|
let array2 = []//记录推荐的批次 |
|
|
|
this.detailSource.forEach(item=>{ |
|
|
|
item.subList.forEach(cur=>{ |
|
|
|
array1.push(cur.fromLocationCode) |
|
|
|
array2.push(cur.batch) |
|
|
|
}) |
|
|
|
}) |
|
|
|
// 扫描的库位是否在 |
|
|
|
const obj1 = array1.find(item=>item == result.fromLocationCode) |
|
|
|
const obj2 = array2.find(item=>item == result.label.batch) |
|
|
|
// this.jobContent.allowModifyLocation = 'FALSE' |
|
|
|
// this.jobContent.allowModifyBatch = 'FALSE' |
|
|
|
if(this.jobContent.allowModifyLocation == 'FALSE'){ |
|
|
|
if(!obj1){ |
|
|
|
this.showErrorMessage(`不可以扫描推荐库位【${array1.join(',')}】以外的库位`) |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
if(this.jobContent.allowModifyBatch == 'FALSE'){ |
|
|
|
if(!obj2){ |
|
|
|
this.showErrorMessage(`不可以扫描推荐批次【${array2.join(',')}】以外的批次`) |
|
|
|
return |
|
|
|
} |
|
|
|
} |
|
|
|
if(!obj1){ |
|
|
|
this.recommendQty = 0 |
|
|
|
}else{ |
|
|
|
this.recommendQty = result.balance.qty |
|
|
|
} |
|
|
|
// |
|
|
|
if (this.managementType == 'BY_BATCH' || managementPrecision == 'BY_QUANTITY') { |
|
|
|
this.setDataBatch(result, managementPrecision) |
|
|
|
} else { |
|
|
|
this.setData(result, managementPrecision) |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
resizeCollapse() { |
|
|
|
this.$nextTick(r => { |
|
|
|
this.$refs.comJobDetailCardBatchRef.forEach(r => { |
|
|
|
r.resizeCollapse(); |
|
|
|
}) |
|
|
|
}); |
|
|
|
}, |
|
|
|
// 按批次的时候校验 代码和按包装的代码基本一致,只不过是校验提示不一致 |
|
|
|
setDataBatch(result, managementPrecision){ |
|
|
|
try { |
|
|
|
var packingNumber = result.label.packingNumber; |
|
|
|
var batch = result.label.batch; |
|
|
|
var qty = result.label.qty; |
|
|
@ -349,56 +400,34 @@ |
|
|
|
this.showErrorMessage("物料号【" + itemCode + "】不在列表中") |
|
|
|
} else { |
|
|
|
detail.scaned = true |
|
|
|
if (this.managementType == 'BY_BATCH') { |
|
|
|
this.verificationBatch(detail, packingNumber, batch, qty, itemCode, locationCode, result) |
|
|
|
} else { |
|
|
|
|
|
|
|
var itemDetail = detail.subList.find(r => { |
|
|
|
return r.packingNumber == packingNumber && |
|
|
|
r.batch == batch && |
|
|
|
return r.batch == batch && |
|
|
|
r.fromLocationCode == result.fromLocationCode |
|
|
|
}) |
|
|
|
|
|
|
|
if (itemDetail == undefined) { |
|
|
|
var isExit; |
|
|
|
for (let subItem of detail.subList) { |
|
|
|
var item; |
|
|
|
for (let pack of subItem.packList) { |
|
|
|
if (pack.packingNumber == packingNumber && |
|
|
|
pack.batch == batch) { |
|
|
|
item = pack; |
|
|
|
isExit = pack; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
if (item != undefined) { |
|
|
|
subItem.scaned = true |
|
|
|
subItem.handleQty = 0; |
|
|
|
item = undefined |
|
|
|
} |
|
|
|
} |
|
|
|
if (isExit == undefined) { |
|
|
|
this.showErrorMessage("箱码【" + packingNumber + "】,批次【" + batch + "】库位【" + result |
|
|
|
.fromLocationCode + "】不在列表中") |
|
|
|
} else { |
|
|
|
if (!isExit.cancleScanedHiht && isExit.scaned) { |
|
|
|
this.showMessage("箱码【" + packingNumber + "】已经扫描") |
|
|
|
} else { |
|
|
|
isExit.scaned = true |
|
|
|
let qty = 0; |
|
|
|
if (result.balance != null) { |
|
|
|
qty = Number(result.balance.qty); |
|
|
|
} else { |
|
|
|
qty = Number(result.label.qty); |
|
|
|
} |
|
|
|
|
|
|
|
isExit.handleQty = Number(result.label.qty); |
|
|
|
isExit.toLocationCode = this.toLocationCode; |
|
|
|
} |
|
|
|
} |
|
|
|
calcTreeHandleQty(this.detailSource); |
|
|
|
this.continueScan() |
|
|
|
// let newItemDetail = {} |
|
|
|
detail.subList.push({ |
|
|
|
scaned:true, |
|
|
|
fromLocationCode:result.fromLocationCode, |
|
|
|
toLocationCode:this.toLocationCode, |
|
|
|
batch:result.label.batch, |
|
|
|
handleQty:result.label.qty, |
|
|
|
qty:this.recommendQty, |
|
|
|
inventoryStatus:result.balance.inventoryStatus, |
|
|
|
toLocation:result.balance.toLocation, |
|
|
|
balance:result.balance, |
|
|
|
balanceQty:result.balance.qty, |
|
|
|
packQty:result.package.packQty, |
|
|
|
packUnit:result.package.packUnit, |
|
|
|
uom:result.balance.uom, |
|
|
|
}) |
|
|
|
setTimeout(r => { |
|
|
|
this.resizeCollapse(); |
|
|
|
this.$forceUpdate() |
|
|
|
}, 100) |
|
|
|
calcHandleQty(this.detailSource); |
|
|
|
} else { |
|
|
|
var scanedLength = 0; |
|
|
|
itemDetail.packList.forEach(res => { |
|
|
@ -412,9 +441,12 @@ |
|
|
|
|
|
|
|
if (!itemDetail.cancleScanedHiht && itemDetail.scaned && scanedLength == itemDetail.packList |
|
|
|
.length) { |
|
|
|
this.showMessage("箱码【" + packingNumber + "】已经扫描") |
|
|
|
// this.showMessage("箱码【" + packingNumber + "】已经扫描") |
|
|
|
// this.showMessage("批次【" + batch + "】已经扫描") |
|
|
|
itemDetail.handleQty = calc.add(Number(result.label.qty),itemDetail.handleQty) |
|
|
|
} else { |
|
|
|
itemDetail.scaned = true; |
|
|
|
itemDetail.balanceQty = result.balance.qty; |
|
|
|
this.detailSource[0].subList.sort(compareAsc('scaned')); //按扫描信息排序 |
|
|
|
itemDetail.handleQty = result.label.qty; |
|
|
|
// itemDetail.toInventoryStatus = "OK" |
|
|
@ -424,28 +456,42 @@ |
|
|
|
pac.toLocationCode = this.toLocationCode; |
|
|
|
}) |
|
|
|
|
|
|
|
calcTreeHandleQty(this.detailSource); |
|
|
|
this.continueScan() |
|
|
|
this.$forceUpdate() |
|
|
|
} |
|
|
|
calcHandleQty(this.detailSource); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (this.managementType == 'BY_BATCH') { |
|
|
|
this.detailSource.forEach(item => { |
|
|
|
item.subList.forEach(detail => { |
|
|
|
detail.packingNumber = '' |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
this.showMessage(e.message) |
|
|
|
} |
|
|
|
}, |
|
|
|
// 按批次的时候校验 代码和按包装的代码基本一致,只不过是校验提示不一致 |
|
|
|
verificationBatch(detail,packingNumber,batch,qty,itemCode,locationCode,result){ |
|
|
|
|
|
|
|
setData(result, managementPrecision){ |
|
|
|
try { |
|
|
|
var packingNumber = result.label.packingNumber; |
|
|
|
var batch = result.label.batch; |
|
|
|
var qty = result.label.qty; |
|
|
|
var itemCode = result.label.itemCode; |
|
|
|
var locationCode = result.fromLocationCode; |
|
|
|
|
|
|
|
if (!result.balance) { |
|
|
|
this.showMessage("箱码【" + packingNumber + "】没有库存余额") |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// var inventoryStatus = "OK"; |
|
|
|
var detail = this.detailSource.find(r => r.itemCode == itemCode); |
|
|
|
|
|
|
|
if (detail == undefined) { |
|
|
|
this.showErrorMessage("物料号【" + itemCode + "】不在列表中") |
|
|
|
} else { |
|
|
|
detail.scaned = true |
|
|
|
|
|
|
|
|
|
|
|
var itemDetail = detail.subList.find(r => { |
|
|
|
return r.batch == batch && |
|
|
|
return r.packingNumber == packingNumber && |
|
|
|
r.batch == batch && |
|
|
|
r.fromLocationCode == result.fromLocationCode |
|
|
|
}) |
|
|
|
|
|
|
@ -454,7 +500,8 @@ |
|
|
|
for (let subItem of detail.subList) { |
|
|
|
var item; |
|
|
|
for (let pack of subItem.packList) { |
|
|
|
if (pack.batch == batch) { |
|
|
|
if (pack.packingNumber == packingNumber && |
|
|
|
pack.batch == batch) { |
|
|
|
item = pack; |
|
|
|
isExit = pack; |
|
|
|
break; |
|
|
@ -466,14 +513,12 @@ |
|
|
|
item = undefined |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (isExit == undefined) { |
|
|
|
this.showErrorMessage("批次【" + batch + "】库位【" + result |
|
|
|
this.showErrorMessage("箱码【" + packingNumber + "】,批次【" + batch + "】库位【" + result |
|
|
|
.fromLocationCode + "】不在列表中") |
|
|
|
} else { |
|
|
|
if (!isExit.cancleScanedHiht && isExit.scaned) { |
|
|
|
// this.showMessage("批次【" + batch + "】已经扫描") |
|
|
|
isExit.handleQty = calc.add(Number(result.label.qty),isExit.handleQty) |
|
|
|
this.showMessage("箱码【" + packingNumber + "】已经扫描") |
|
|
|
} else { |
|
|
|
isExit.scaned = true |
|
|
|
let qty = 0; |
|
|
@ -503,9 +548,7 @@ |
|
|
|
|
|
|
|
if (!itemDetail.cancleScanedHiht && itemDetail.scaned && scanedLength == itemDetail.packList |
|
|
|
.length) { |
|
|
|
// this.showMessage("箱码【" + packingNumber + "】已经扫描") |
|
|
|
// this.showMessage("批次【" + batch + "】已经扫描") |
|
|
|
itemDetail.handleQty = calc.add(Number(result.label.qty),itemDetail.handleQty) |
|
|
|
this.showMessage("箱码【" + packingNumber + "】已经扫描") |
|
|
|
} else { |
|
|
|
itemDetail.scaned = true; |
|
|
|
this.detailSource[0].subList.sort(compareAsc('scaned')); //按扫描信息排序 |
|
|
@ -517,12 +560,22 @@ |
|
|
|
pac.toLocationCode = this.toLocationCode; |
|
|
|
}) |
|
|
|
|
|
|
|
calcTreeHandleQty(this.detailSource); |
|
|
|
this.continueScan() |
|
|
|
this.$forceUpdate() |
|
|
|
} |
|
|
|
calcTreeHandleQty(this.detailSource); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
if (this.managementType == 'BY_BATCH') { |
|
|
|
this.detailSource.forEach(item => { |
|
|
|
item.subList.forEach(detail => { |
|
|
|
detail.packingNumber = '' |
|
|
|
}) |
|
|
|
}) |
|
|
|
} |
|
|
|
} catch (e) { |
|
|
|
this.showMessage(e.message) |
|
|
|
} |
|
|
|
}, |
|
|
|
scanLocationCode(location, code) { |
|
|
|
this.toLocationCode = code |
|
|
@ -556,21 +609,81 @@ |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
// 校验 |
|
|
|
check(){ |
|
|
|
//扫描数量和任务数量相等,直接提交 |
|
|
|
if (this.scanCount == this.subList.length) { |
|
|
|
this.submitJob(); |
|
|
|
} else if (this.scanCount < this.subList.length) { |
|
|
|
//扫描数量小于任务数量,判断是否允许部分提交 |
|
|
|
if (this.jobContent.allowPartialComplete == "TRUE") { |
|
|
|
//提交 |
|
|
|
this.$refs.comMessage.showQuestionMessage1("任务明细未全部完成,是否提交?", 'red', res => { |
|
|
|
if (res) { |
|
|
|
this.submitJob() |
|
|
|
} |
|
|
|
}); |
|
|
|
} else { |
|
|
|
//不允许部分提交,提示 |
|
|
|
this.$refs.comMessage.showErrorMessage("任务明细未全部完成,不允许部分提交!", res => { |
|
|
|
if (res) { |
|
|
|
this.openScanPopup(this.jobToLocationCode); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
commit() { |
|
|
|
this.scanCount = getScanCount(this.subList); |
|
|
|
if (this.scanCount == 0) { |
|
|
|
}, |
|
|
|
//按批次的校验 |
|
|
|
checkBatch(){ |
|
|
|
//扫描数量和任务数量相等,直接提交 |
|
|
|
let str = '' |
|
|
|
let str1 = '' |
|
|
|
let str2 = '' |
|
|
|
var scanCount=0; |
|
|
|
// this.jobContent.allowBiggerQty = "FALSE" |
|
|
|
// this.jobContent.allowSmallerQty = "FALSE" |
|
|
|
// this.jobContent.allowPartialComplete = "TRUE" |
|
|
|
this.detailSource.forEach((item) => { |
|
|
|
item.subList.forEach(cur=>{ |
|
|
|
if(cur.scaned){ |
|
|
|
scanCount++; |
|
|
|
if(parseFloat(cur.qty)>parseFloat(cur.handleQty)){ |
|
|
|
str += `物料号【${item.itemCode}】批次【${cur.batch}】实际提交数量【${cur.handleQty}】不可以小于任务数量【${cur.qty}】\n` |
|
|
|
} |
|
|
|
if(parseFloat(cur.qty)<parseFloat(cur.handleQty)){ |
|
|
|
str1 += `物料号【${item.itemCode}】批次【${cur.batch}】实际提交数量【${cur.handleQty}】不可以大于任务数量【${cur.qty}】\n` |
|
|
|
} |
|
|
|
if(parseFloat(cur.handleQty)>parseFloat(cur.balanceQty)){ |
|
|
|
str2 += `物料号【${item.itemCode}】批次【${cur.batch}】实际提交数量【${cur.handleQty}】不可以大于库存数量【${cur.qty}】\n` |
|
|
|
} |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
if (scanCount == 0) { |
|
|
|
this.showErrorMessage("扫描数为0,请先扫描") |
|
|
|
return; |
|
|
|
} |
|
|
|
if (!this.checkLocation()) { |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
//扫描数量和任务数量相等,直接提交 |
|
|
|
if (this.scanCount == this.subList.length) { |
|
|
|
this.submitJob(); |
|
|
|
} else if (this.scanCount < this.subList.length) { |
|
|
|
if(this.jobContent.allowBiggerQty == "FALSE"){ |
|
|
|
if(str1){ |
|
|
|
this.$refs.comMessage.showErrorMessage(str1); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if(this.jobContent.allowSmallerQty == "FALSE"){ |
|
|
|
if(str){ |
|
|
|
this.$refs.comMessage.showErrorMessage(str); |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if(str2){ |
|
|
|
this.$refs.comMessage.showErrorMessage(str2); |
|
|
|
return; |
|
|
|
} |
|
|
|
if(this.scanCount < this.subList.length){ |
|
|
|
//扫描数量小于任务数量,判断是否允许部分提交 |
|
|
|
if (this.jobContent.allowPartialComplete == "TRUE") { |
|
|
|
//提交 |
|
|
@ -583,28 +696,42 @@ |
|
|
|
//不允许部分提交,提示 |
|
|
|
this.$refs.comMessage.showErrorMessage("任务明细未全部完成,不允许部分提交!", res => { |
|
|
|
if (res) { |
|
|
|
this.openScanPopup(); |
|
|
|
this.openScanPopup(this.jobToLocationCode); |
|
|
|
} |
|
|
|
}); |
|
|
|
} |
|
|
|
}else{ |
|
|
|
this.submitJob(); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
submitJob() { |
|
|
|
uni.showLoading({ |
|
|
|
title: "提交中....", |
|
|
|
mask: true |
|
|
|
}); |
|
|
|
|
|
|
|
commit() { |
|
|
|
var itemCodes = [] |
|
|
|
this.detailSource.forEach(item => { |
|
|
|
itemCodes.push(item.itemCode) |
|
|
|
}) |
|
|
|
|
|
|
|
//获取管理模式,封装参数 |
|
|
|
getManagementPrecisions(itemCodes, this.toLocationCode, res => { |
|
|
|
if (res.success) { |
|
|
|
this.managementList = res.list; |
|
|
|
this.managementType = this.managementList&&this.managementList[0]&&this.managementList[0].ManagementPrecision ? this.managementList[0].ManagementPrecision : 'BY_PACKAGING' |
|
|
|
if(this.managementType == 'BY_BATCH' || this.managementType == 'BY_QUANTITY'){ |
|
|
|
this.checkBatch() |
|
|
|
}else{ |
|
|
|
this.check() |
|
|
|
} |
|
|
|
} else { |
|
|
|
uni.hideLoading(); |
|
|
|
this.showErrorMessage(res.message); |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
submitJob() { |
|
|
|
uni.showLoading({ |
|
|
|
title: "提交中....", |
|
|
|
mask: true |
|
|
|
}); |
|
|
|
var params = this.setParams() |
|
|
|
console.log("提交参数", JSON.stringify(params)); |
|
|
|
putawayJobSubmit(params).then(res => { |
|
|
@ -618,11 +745,6 @@ |
|
|
|
uni.hideLoading() |
|
|
|
this.showErrorMessage(error) |
|
|
|
}) |
|
|
|
} else { |
|
|
|
uni.hideLoading(); |
|
|
|
this.showErrorMessage(res.message); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
}, |
|
|
|
setParams() { |
|
|
|