Browse Source

采购收货和上架修改成按批次2024/9/13 12:06:51

syhx
zhang_li 2 months ago
parent
commit
eaf3a23a17
  1. 2
      src/mycomponents/package/packageCard.vue
  2. 32
      src/mycomponents/scan/winScanPackAndLocation.vue
  3. 55
      src/pages/purchaseReceipt/job/receiptDetail.vue
  4. 272
      src/pages/putaway/job/putawayDetail.vue

2
src/mycomponents/package/packageCard.vue

@ -6,7 +6,7 @@
<view style="word-break: break-all;">
<!-- <container v-if="isShowContainer&&dataContent.containerNumber!=null" :container="dataContent.containerNumber">
</container> -->
<pack v-if="isShowPack && dataContent.packingNumber!=null" :packingCode="dataContent.packingNumber"></pack>
<pack v-if="isShowPack && dataContent.packingNumber" :packingCode="dataContent.packingNumber"></pack>
<batch v-if="isShowBatch && dataContent.batch!=null" :batch="dataContent.batch"></batch>
<location v-if="isShowFromLocation" title="来源库位" :locationCode="dataContent.fromLocationCode">
</location>

32
src/mycomponents/scan/winScanPackAndLocation.vue

@ -120,7 +120,11 @@
balanceFromInventoryStatuses: { //fromInventoryStatuses
type: Boolean,
default: true
}
},
toLocationCode: {
type: String,
default: ""
},
},
data() {
return {
@ -209,8 +213,8 @@
this.inventoryStatus = getDirectoryItemArray(jobContent.outInventoryStatuses); //; //
this.fromLocationAreaTypeList = getDirectoryItemArray(jobContent.fromAreaTypes); //
uni.showLoading({
title:"获取标签信息",
mask:true
title: "获取标签信息",
mask: true
})
getLabelInfo(scanMessage, this.headerType, callback => {
uni.hideLoading()
@ -308,7 +312,7 @@
// }
},
checkPackage(result) {
async checkPackage(result) {
if (result.label != null) {
this.scanResult = result;
if (this.queryBalance == true) {
@ -317,7 +321,8 @@
// mask: true
// })
// -- fromInventoryStatuses
getBalanceByManagementPrecisionByPacking(result.label, result.package, this.fromLocationCode, this
//
await getBalanceByManagementPrecisionByPacking(result.label, result.package, this.fromLocationCode, this
.balanceFromInventoryStatuses ? this.fromInventoryStatuses : undefined,
res => {
uni.hideLoading();
@ -365,9 +370,9 @@
},
//
allowNoneBalance(datas) {
async allowNoneBalance(datas) {
if (datas.length == 0) {
this.packCallBack(null);
await this.packCallBack(null);
} else {
this.showErrorMessage('在来源库位[' + this.fromLocationCode + '],已经查找到该包装的库存记录,请重新扫描', res => {
this.packGetFocus();
@ -440,7 +445,7 @@
this.$emit("getCountScanResult", data);
},
packCallBack(item) {
async packCallBack(item) {
if (this.$refs.comscan) {
this.$refs.comscan.clear();
}
@ -452,7 +457,12 @@
fromLocationCode: this.fromLocationCode,
}
this.packGetFocus();
this.$emit("getResult", data);
//
if (this.managementPrecision == 'BY_BATCH') {
this.$emit("getResult", data, this.managementPrecision);
} else {
this.$emit("getResult", data);
}
},
packGetFocus() {
@ -476,9 +486,9 @@
let condition = '按照以下条件:\n';
let label = this.scanResult.label;
var isShowStatus = this.balanceFromInventoryStatuses ? this.fromInventoryStatuses : undefined
let status=""
let status = ""
if (isShowStatus) {
status = getInventoryStatusDesc(isShowStatus);
status = getInventoryStatusDesc(isShowStatus);
}
switch (this.managementPrecision) {

55
src/pages/purchaseReceipt/job/receiptDetail.vue

@ -26,14 +26,18 @@
:isShowEdit="false"></required-location>
<view class='split_line'></view> -->
</view>
<view class="page-main">
<scroll-view scroll-y="true" class="page-main-scroll">
<view class="detail-list" v-for="(item, index) in detailSource" :key="item.id">
<view class="">
<com-receipt-detail-card :dataContent="item" :index="index" :settingParam="jobContent"
@remove="updateData" @updateData="updateData"
:locationAreaTypeList='toLocationAreaTypeList'>
<!-- 管理精度是批次 -->
<comReceiptDetailCardBacth :dataContent="item" :index="index" :settingParam="jobContent"
@remove="updateData" @updateData="updateData" :locationAreaTypeList='toLocationAreaTypeList'
v-if="managementType == 'BY_BATCH'">
</comReceiptDetailCardBacth>
<com-receipt-detail-card :dataContent="item" :index="index" :settingParam="jobContent" @remove="updateData"
@updateData="updateData" :locationAreaTypeList='toLocationAreaTypeList' v-else>
</com-receipt-detail-card>
</view>
</view>
@ -119,6 +123,7 @@
import winScanPack from '@/mycomponents/scan/winScanPack.vue'
import locationCompare from '@/mycomponents/location/locationCompare.vue'
import comReceiptDetailCard from '@/pages/purchaseReceipt/coms/comReceiptDetailCard.vue'
import comReceiptDetailCardBacth from '@/pages/purchaseReceipt/coms/comReceiptDetailCardBacth.vue'
import jobTopAsn from '@/mycomponents/job/jobTopAsn.vue'
// import print from '@/mycomponents/print/print.vue'
import {
@ -136,7 +141,8 @@
winScanPack,
comReceiptDetailCard,
locationCompare,
jobTopAsn,
jobTopAsn,
comReceiptDetailCardBacth
// print
},
data() {
@ -152,7 +158,8 @@
jobToLocationCode: "",
toLocationInfo: {},
businessTypeInfo: {},
managementList: [],
managementList: [],
managementType: '', //
jobStatus: "",
isAllReceived: false,
operation: '',
@ -267,6 +274,19 @@
that.toLocationCode = that.jobToLocationCode;
}
that.isAllReceived = false;
//
var itemCodes = []
this.detailSource.forEach(item => {
itemCodes.push(item.itemCode)
})
getManagementPrecisions(itemCodes, that.jobToLocationCode, res => {
if (res.success) {
this.managementList = res.list;
this.managementType = this.managementList.some(item => item.ManagementPrecision ==
'BY_BATCH') ? 'BY_BATCH' : ''
}
})
// if (uni.getStorageSync('purchaseReceiptDetailPointParams')) {
// const purchaseReceiptDetailPointParams = uni.getStorageSync(
// 'purchaseReceiptDetailPointParams')
@ -462,10 +482,10 @@
} else {
//
this.$refs.comMessage.showErrorMessage("任务明细未全部完成,不允许部分提交!", res => {
if (res) {
this.openScanPopup();
}
});
if (res) {
this.openScanPopup();
}
});
}
}
@ -515,7 +535,7 @@
if (res.success) {
this.managementList = res.list;
var params = this.setParams();
let that =this
let that = this
purchaseReceiptJobSubmit(params).then(res => {
if (res.data) {
let isCheckPrint = getSwitchInfoByCode(this.switchCode)
@ -524,7 +544,7 @@
// this.showCommitSuccessMessage("\n\n" + res.data.number)
uni.redirectTo({
url: '/pages/pointPutawayJob/index?number='+that.jobContent.number
url: '/pages/pointPutawayJob/index?number=' + that.jobContent.number
})
} else {
// if (res.data == '') {
@ -582,7 +602,8 @@
}
uni.hideLoading()
uni.redirectTo({
url: '/pages/pointPutawayJob/index?number='+that.jobContent.number+'&data=' +
url: '/pages/pointPutawayJob/index?number=' + that.jobContent.number +
'&data=' +
encodeURIComponent(JSON.stringify(dataParams))
})
}
@ -627,7 +648,9 @@
})
var info = getPackingNumberAndBatch(this.managementList, detail.itemCode,
detail.packingNumber, detail.batch);
detail.toPackingNumber = info.packingNumber;
detail.toPackingNumber = info.packingNumber;
detail.packingNumber = info.packingNumber;
detail.formPackingNumber = info.packingNumber;
detail.toBatch = info.batch;
subList.push(detail)
})
@ -711,7 +734,7 @@
showMessage(message) {
if(this.$refs.scanPopup){
if (this.$refs.scanPopup) {
this.$refs.scanPopup.losefocus();
}
setTimeout(r => {
@ -724,7 +747,7 @@
},
showErrorMessage(message) {
if(this.$refs.scanPopup){
if (this.$refs.scanPopup) {
this.$refs.scanPopup.losefocus();
}
setTimeout(r => {

272
src/pages/putaway/job/putawayDetail.vue

@ -15,11 +15,15 @@
<scroll-view scroll-y="true" class="page-main-scroll">
<view class="detail-list" v-for="(item, index) in detailSource" :key="item.id">
<view class="">
<comJobDetailCard :dataContent="item" :index="index" :settingParam="jobContent"
:isShowStatus="true" @remove="updateData" @updateData="updateData"
:locationAreaTypeList='toLocationAreaTypeList'
:isShowPackListStatus="false"
>
<!-- 物料按照批次的组件 批次不显示包装 -->
<comJobDetailCardBatch :dataContent="item" :index="index" :settingParam="jobContent" :isShowStatus="true"
@remove="updateData" @updateData="updateData" :locationAreaTypeList='toLocationAreaTypeList'
:isShowPackListStatus="false" v-if="managementType == 'BY_BATCH'">
</comJobDetailCardBatch>
<!-- 物料按照包装的组件 -->
<comJobDetailCard :dataContent="item" :index="index" :settingParam="jobContent" :isShowStatus="true"
@remove="updateData" @updateData="updateData" :locationAreaTypeList='toLocationAreaTypeList'
:isShowPackListStatus="false" v-else>
</comJobDetailCard>
</view>
</view>
@ -27,8 +31,7 @@
</view>
<view class="page-footer">
<view class="uni-flex u-col-center space-between padding_10"
style="background-color:ghostwhite; width: 100%; ">
<view class="uni-flex u-col-center space-between padding_10" style="background-color:ghostwhite; width: 100%; ">
<view class="">
<locationCompare ref='comScanLocation' title="目标库位" :recommendLocationCode="jobToLocationCode"
:locationCode="toLocationCode" @getLocation='scanLocationCode' :isShowEdit="isCheckLocation"
@ -44,8 +47,8 @@
<!-- <winScanPackAndLocationNoBalance ref="scanPopup" @getResult='getScanResult' :allowNullBalance="true">
</winScanPackAndLocationNoBalance> -->
<winScanPackAndLocation :balanceFromInventoryStatuses="false" ref="scanPopup" @getResult='getScanResult'
:noShowBalanceMessage="false">
<winScanPackAndLocation :balanceFromInventoryStatuses="false" :toLocationCode="jobToLocationCode" ref="scanPopup"
@getResult='getScanResult' :noShowBalanceMessage="false">
</winScanPackAndLocation>
<comMessage ref="comMessage"></comMessage>
@ -88,6 +91,7 @@
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPackAndLocation from "@/mycomponents/scan/winScanPackAndLocation.vue"
import comJobDetailCard from "@/mycomponents/detail/comJobDetailCard.vue"
import comJobDetailCardBatch from "@/mycomponents/detail/comJobDetailCardBatch.vue"
import locationCompare from '@/mycomponents/location/locationCompare.vue'
import jobTop from '@/mycomponents/job/jobTop.vue'
@ -98,7 +102,8 @@
winScanPackAndLocation,
locationCompare,
comJobDetailCard,
jobTop
jobTop,
comJobDetailCardBatch
},
data() {
return {
@ -114,7 +119,8 @@
jobStatus: "",
jobToLocationCode: "",
isCheckLocation: false,
scanMessage: ""
scanMessage: "",
managementType: '' //
};
},
onLoad(option) {
@ -210,6 +216,19 @@
} else {
that.toLocationCode = that.jobToLocationCode;
}
//
var itemCodes = []
this.detailSource.forEach(item => {
itemCodes.push(item.itemCode)
item.scaned = false
})
getManagementPrecisions(itemCodes, that.jobToLocationCode, res => {
if (res.success) {
this.managementList = res.list;
this.managementType = this.managementList.some(item => item.ManagementPrecision ==
'BY_BATCH') ? 'BY_BATCH' : ''
}
})
//
if (this.scanMessage) {
this.openScanPopupSimulate(this.scanMessage)
@ -256,7 +275,7 @@
updateData() {
console.log("updateData")
// this.calcHandleQty();
calcTreeHandleQty(this.detailSource)
// calcTreeHandleQty(this.detailSource)
},
//
openScanPopupSimulate(message) {
@ -307,8 +326,9 @@
this.$refs.scanPopup.closeScanPopup();
},
getScanResult(result) {
getScanResult(result, managementPrecision) {
try {
this.managementType = managementPrecision
var packingNumber = result.label.packingNumber;
var batch = result.label.batch;
var qty = result.label.qty;
@ -326,88 +346,180 @@
if (detail == undefined) {
this.showErrorMessage("物料号【" + itemCode + "】不在列表中")
} else {
var itemDetail = detail.subList.find(r => {
return r.packingNumber == packingNumber &&
r.batch == batch &&
r.fromLocationCode == result.fromLocationCode
})
detail.scaned = true
if (this.managementType == 'BY_BATCH') {
this.verificationBatch(detail, packingNumber, batch, qty, itemCode, locationCode, result)
} else {
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;
var itemDetail = detail.subList.find(r => {
return r.packingNumber == packingNumber &&
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 (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 + "】已经扫描")
if (isExit == undefined) {
this.showErrorMessage("箱码【" + packingNumber + "】,批次【" + batch + "】库位【" + result
.fromLocationCode + "】不在列表中")
} else {
isExit.scaned = true
let qty = 0;
if (result.balance != null) {
qty = Number(result.balance.qty);
if (!isExit.cancleScanedHiht && isExit.scaned) {
this.showMessage("箱码【" + packingNumber + "】已经扫描")
} else {
qty = Number(result.label.qty);
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;
}
isExit.handleQty = Number(result.label.qty);
isExit.toLocationCode = this.toLocationCode;
}
}
calcTreeHandleQty(this.detailSource);
this.continueScan()
this.$forceUpdate()
} else {
var scanedLength = 0;
itemDetail.packList.forEach(res => {
if (res.scaned) {
scanedLength++;
}
})
//
itemDetail.fromInventoryStatus = result.balance.inventoryStatus;
if (!itemDetail.cancleScanedHiht && itemDetail.scaned && scanedLength == itemDetail.packList
.length) {
this.showMessage("箱码【" + packingNumber + "】已经扫描")
} else {
itemDetail.scaned = true;
this.detailSource[0].subList.sort(compareAsc('scaned')); //
itemDetail.handleQty = result.label.qty;
// itemDetail.toInventoryStatus = "OK"
itemDetail.packList.forEach(pac => {
pac.scaned = true
pac.handleQty = Number(pac.qty);
pac.toLocationCode = this.toLocationCode;
})
calcTreeHandleQty(this.detailSource);
this.continueScan()
this.$forceUpdate()
} else {
var scanedLength = 0;
itemDetail.packList.forEach(res => {
if (res.scaned) {
scanedLength++;
}
})
//
itemDetail.fromInventoryStatus = result.balance.inventoryStatus;
if (!itemDetail.cancleScanedHiht && itemDetail.scaned && scanedLength == itemDetail.packList
.length) {
this.showMessage("箱码【" + packingNumber + "】已经扫描")
} else {
itemDetail.scaned = true;
this.detailSource[0].subList.sort(compareAsc('scaned')); //
itemDetail.handleQty = result.label.qty;
// itemDetail.toInventoryStatus = "OK"
itemDetail.packList.forEach(pac => {
pac.scaned = true
pac.handleQty = Number(pac.qty);
pac.toLocationCode = this.toLocationCode;
})
calcTreeHandleQty(this.detailSource);
this.continueScan()
this.$forceUpdate()
}
}
}
}
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){
var itemDetail = detail.subList.find(r => {
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.batch == batch) {
item = pack;
isExit = pack;
break;
}
}
if (item != undefined) {
subItem.scaned = true
subItem.handleQty = 0;
item = undefined
}
}
if (isExit == undefined) {
this.showErrorMessage("批次【" + batch + "】库位【" + result
.fromLocationCode + "】不在列表中")
} else {
if (!isExit.cancleScanedHiht && isExit.scaned) {
this.showMessage("批次【" + batch + "】已经扫描")
} 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()
this.$forceUpdate()
} else {
var scanedLength = 0;
itemDetail.packList.forEach(res => {
if (res.scaned) {
scanedLength++;
}
})
//
itemDetail.fromInventoryStatus = result.balance.inventoryStatus;
if (!itemDetail.cancleScanedHiht && itemDetail.scaned && scanedLength == itemDetail.packList
.length) {
// this.showMessage("" + packingNumber + "")
this.showMessage("批次【" + batch + "】已经扫描")
} else {
itemDetail.scaned = true;
this.detailSource[0].subList.sort(compareAsc('scaned')); //
itemDetail.handleQty = result.label.qty;
// itemDetail.toInventoryStatus = "OK"
itemDetail.packList.forEach(pac => {
pac.scaned = true
pac.handleQty = Number(pac.qty);
pac.toLocationCode = this.toLocationCode;
})
calcTreeHandleQty(this.detailSource);
this.continueScan()
this.$forceUpdate()
}
}
},
scanLocationCode(location, code) {
this.toLocationCode = code
this.detailSource.forEach(item => {
@ -516,8 +628,10 @@
item.subList.forEach(detail => {
if (detail.scaned) {
var info = getPackingNumberAndBatch(this.managementList, detail.itemCode,
detail.packingNumber, detail.batch);
detail.packingNumber, detail.batch);
detail.toPackingNumber = info.packingNumber;
detail.packingNumber = info.packingNumber;
detail.fromPackingNumber = info.packingNumber;
detail.toBatch = info.batch;
detail.toContainerNumber = '';

Loading…
Cancel
Save