|
|
@ -1,6 +1,27 @@ |
|
|
|
<template> |
|
|
|
<view class="page-wraper"> |
|
|
|
|
|
|
|
<view class="page-header"> |
|
|
|
<view class="header_job_top"> |
|
|
|
<job-top :dataContent="jobContent"></job-top> |
|
|
|
</view> |
|
|
|
<view class="cen_card" style="padding-top: 10rpx;padding-bottom: 10rpx;"> |
|
|
|
<view class="cell_box uni-flex uni-row"> |
|
|
|
<view class="cell_info"> |
|
|
|
<view class="text_lightblue">阶段</view> |
|
|
|
<view>{{getCountStageName(jobContent.stage)}}</view> |
|
|
|
</view> |
|
|
|
<view class="cell_info"> |
|
|
|
<view class="text_lightblue">策略</view> |
|
|
|
<view>{{ isOpenCount(jobContent.isOpenCount) }}</view> |
|
|
|
</view> |
|
|
|
<view class="cell_info"> |
|
|
|
<view class="text_lightblue">库位</view> |
|
|
|
<view>{{fromLocationCode}}</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<u-line color="#D8D8D8" style="margin-bottom: 15rpx;"></u-line> |
|
|
|
<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"> |
|
|
@ -19,9 +40,6 @@ |
|
|
|
<view class="uni-flex u-col-center space-between padding_10" |
|
|
|
style="background-color:ghostwhite; width: 100%; "> |
|
|
|
<view class=""> |
|
|
|
<requiredLocation title="盘点库位" :locationCode="fromLocationCode" :isShowEdit="jobContent.allowModifyLocation==1" |
|
|
|
@getLocation='scanLocationCode' :locationTypeList="locationTypeList"></requiredLocation> |
|
|
|
<u-line></u-line> |
|
|
|
</view> |
|
|
|
<view class=" uni-flex uni-row"> |
|
|
|
<button class="btn_single_commit" hover-class="btn_commit_after" @click="commit">提交</button> |
|
|
@ -31,7 +49,8 @@ |
|
|
|
|
|
|
|
<win-scan-button @goScan='openScanPopup'></win-scan-button> |
|
|
|
<win-scan-pack-and-location ref="scanPopup" @getResult='getScanResult'></win-scan-pack-and-location> |
|
|
|
<count-qty-edit ref="CountQtyEdit" @confirm="editConfirm" :isShowStatus="false" :allowEditStatus="true"> |
|
|
|
<count-qty-edit ref="countQtyEdit" @confirm="editConfirm" :isShowStatus="true" :allowEditStatus="false" |
|
|
|
:isShowBalance="jobContent.isOpenCount=='TRUE'"> |
|
|
|
</count-qty-edit> |
|
|
|
<com-message ref="comMessage"></com-message> |
|
|
|
</view> |
|
|
@ -50,6 +69,9 @@ |
|
|
|
navigateBack, |
|
|
|
getPackingNumberAndBatch |
|
|
|
} from '@/common/basic.js'; |
|
|
|
import { |
|
|
|
getCountStageName |
|
|
|
} from '@/common/directory.js'; |
|
|
|
|
|
|
|
import winScanButton from '@/mycomponents/scan/winScanButton.vue' |
|
|
|
import winScanPack from '@/mycomponents/scan/winScanPack.vue' |
|
|
@ -57,7 +79,8 @@ |
|
|
|
import comCountDetailCard from '@/pages/count/coms/comCountDetailCard.vue' |
|
|
|
import comMessage from '@/mycomponents/common/comMessage.vue' |
|
|
|
import winScanPackAndLocation from "@/mycomponents/scan/winScanPackAndLocation.vue" |
|
|
|
import CountQtyEdit from '@/mycomponents/qty/CountQtyEdit.vue' |
|
|
|
import countQtyEdit from '@/mycomponents/qty/countQtyEdit.vue' |
|
|
|
import jobTop from '@/mycomponents/job/jobTop.vue' |
|
|
|
|
|
|
|
export default { |
|
|
|
name: 'receipt_detail', |
|
|
@ -68,7 +91,8 @@ |
|
|
|
requiredLocation, |
|
|
|
comMessage, |
|
|
|
winScanPackAndLocation, |
|
|
|
CountQtyEdit, |
|
|
|
countQtyEdit, |
|
|
|
jobTop |
|
|
|
}, |
|
|
|
data() { |
|
|
|
return { |
|
|
@ -81,9 +105,6 @@ |
|
|
|
jobContent: {}, //任务内容 |
|
|
|
subList: [], //接口返回的任务subList |
|
|
|
detailSource: [], //绑定在页面上的数据源 |
|
|
|
locationTypeList: [], |
|
|
|
toLocationInfo: {}, |
|
|
|
businessTypeInfo: {}, |
|
|
|
itemEditInfo: {} |
|
|
|
}; |
|
|
|
}, |
|
|
@ -91,15 +112,14 @@ |
|
|
|
this.id = option.id; |
|
|
|
if (this.id != undefined) { |
|
|
|
//新建的任务自动接收 |
|
|
|
// if (option.status == "JOB_PENDING") { |
|
|
|
// this.receive((callback => { |
|
|
|
// this.received = true; |
|
|
|
// this.getDetail(); |
|
|
|
// })); |
|
|
|
// } else { |
|
|
|
// this.getDetail(); |
|
|
|
// } |
|
|
|
this.getDetail(); |
|
|
|
if (option.status == "1") { |
|
|
|
this.receive((callback => { |
|
|
|
this.received = true; |
|
|
|
this.getDetail(); |
|
|
|
})); |
|
|
|
} else { |
|
|
|
this.getDetail(); |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
//返回首页 |
|
|
@ -158,14 +178,11 @@ |
|
|
|
if (res.data == null) { |
|
|
|
that.showMessage('未获取到详情'); |
|
|
|
} else { |
|
|
|
if (res.data.subList.length > 0) { |
|
|
|
that.jobContent = res.data; |
|
|
|
that.fromLocationCode = that.jobContent.locationCode; |
|
|
|
that.subList = res.data.subList; |
|
|
|
that.detailSource = that.getDataSource(that.subList) |
|
|
|
} else { |
|
|
|
that.showErrorMessage('列表数据为0'); |
|
|
|
} |
|
|
|
that.jobContent = res.data; |
|
|
|
that.fromLocationCode = that.jobContent.locationCode; |
|
|
|
that.subList = res.data.subList; |
|
|
|
that.detailSource = that.getDataSource(that.subList) |
|
|
|
this.calcHandleQty(); |
|
|
|
} |
|
|
|
|
|
|
|
}).catch(error => { |
|
|
@ -209,9 +226,8 @@ |
|
|
|
|
|
|
|
createDetailInfo(data) { |
|
|
|
data.scaned = false; |
|
|
|
// data.record = {}; |
|
|
|
let detail = data; |
|
|
|
detail.balanceQty = detail.qty |
|
|
|
detail.balanceQty = 0 |
|
|
|
detail.inventoryStatus = detail.inventoryStatus |
|
|
|
detail.fromLocationCode = this.fromLocationCode |
|
|
|
return detail; |
|
|
@ -233,12 +249,8 @@ |
|
|
|
for (let item of this.detailSource) { |
|
|
|
item.handleQty = 0; |
|
|
|
for (let detail of item.subList) { |
|
|
|
if (detail.scaned) { |
|
|
|
if (detail.record != undefined) { |
|
|
|
item.handleQty += Number(detail.record.qty) |
|
|
|
} else { |
|
|
|
item.handleQty += Number(detail.qty) |
|
|
|
} |
|
|
|
if (detail != undefined && detail.scaned) { |
|
|
|
item.handleQty += Number(detail.qty) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -287,30 +299,19 @@ |
|
|
|
try { |
|
|
|
var packingNumber = result.balance.packingNumber; |
|
|
|
var batch = result.balance.batch; |
|
|
|
var qty = result.balance.qty; |
|
|
|
var balanceQty = result.balance.qty; |
|
|
|
var itemCode = result.balance.itemCode; |
|
|
|
var inventoryStatus = result.balance.inventoryStatus; |
|
|
|
var detail = this.detailSource.find(r => r.itemCode == itemCode); |
|
|
|
var itemEditInfo; |
|
|
|
//检查零件号是否存在 |
|
|
|
if (detail == undefined) { |
|
|
|
//零件号不存在,创建零件号数据添加到列表。设置为已经扫描 |
|
|
|
this.addNewItemCodeToList(result) |
|
|
|
} else { |
|
|
|
//零件号存在,查询是否在任务列表中 |
|
|
|
// var itemDetail; |
|
|
|
// var index; |
|
|
|
|
|
|
|
// for (var i = 0; i < detail.subList.length; i++) { |
|
|
|
// if (detail.subList[i].packingNumber == packingNumber && |
|
|
|
// detail.subList[i].batch == batch && |
|
|
|
// detail.subList[i].inventoryStatus == inventoryStatus) { |
|
|
|
// index = i; |
|
|
|
// itemDetail = detail.subList[i] |
|
|
|
// break |
|
|
|
// } |
|
|
|
// } |
|
|
|
|
|
|
|
this.itemEditInfo = detail.subList.find(item => { |
|
|
|
|
|
|
|
itemEditInfo = detail.subList.find(item => { |
|
|
|
if (item.packingNumber == packingNumber && |
|
|
|
item.batch == batch && |
|
|
|
item.inventoryStatus == inventoryStatus) { |
|
|
@ -318,19 +319,18 @@ |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
if (this.itemEditInfo == undefined) { |
|
|
|
if (itemEditInfo == undefined) { |
|
|
|
//不在任务列表中,提示是否添加到列表 |
|
|
|
this.addExistItemCodeToList(detail, result); |
|
|
|
|
|
|
|
} else { |
|
|
|
//在列表中,更新已扫描状态, |
|
|
|
if (this.itemEditInfo.scaned) { |
|
|
|
if (itemEditInfo.scaned) { |
|
|
|
this.$refs.comMessage.showSelectMessageModal("箱码【" + packingNumber + |
|
|
|
"】已经完成盘点,是否要编辑数量", |
|
|
|
res => { |
|
|
|
// this.$.refs["countDetail_" + index][0].edit(itemDetail) |
|
|
|
if (res) { |
|
|
|
this.$refs.CountQtyEdit.openEditPopup(this.itemEditInfo.record, |
|
|
|
this.$refs.countQtyEdit.openEditPopup(itemEditInfo, |
|
|
|
detail.subList); |
|
|
|
} else { |
|
|
|
this.scanPopupGetFocus(); |
|
|
@ -338,12 +338,12 @@ |
|
|
|
}) |
|
|
|
|
|
|
|
} else { |
|
|
|
// this.$.refs["countDetail_" + index][0].editSeconds(itemDetail) |
|
|
|
this.itemEditInfo.scaned = true; |
|
|
|
this.itemEditInfo.record = this.createRecordInfo(this.itemEditInfo); |
|
|
|
this.itemEditInfo.record.stdPackQty = result.package.stdPackQty; |
|
|
|
this.itemEditInfo.record.stdPackUnit = result.package.stdPackUnit; |
|
|
|
this.$refs.CountQtyEdit.openEditPopupShowSeconds(this.itemEditInfo.record, detail |
|
|
|
itemEditInfo.scaned = true; |
|
|
|
itemEditInfo.handleQty = balanceQty; |
|
|
|
itemEditInfo.balanceQty = balanceQty; |
|
|
|
itemEditInfo.stdPackQty = result.package.stdPackQty; |
|
|
|
itemEditInfo.stdPackUnit = result.package.stdPackUnit; |
|
|
|
this.$refs.countQtyEdit.openEditPopupShowSeconds(itemEditInfo, detail |
|
|
|
.subList); |
|
|
|
this.updateData() |
|
|
|
} |
|
|
@ -361,7 +361,6 @@ |
|
|
|
if (res) { |
|
|
|
var item = this.createAddItemInfo(result.balance, result.package); |
|
|
|
let newDetail = this.createAddDetailInfo(result.balance, result.package); // |
|
|
|
newDetail.record = this.createRecordInfo(newDetail); |
|
|
|
item.subList.push(newDetail); |
|
|
|
this.detailSource.push(item) |
|
|
|
this.updateData() |
|
|
@ -377,9 +376,7 @@ |
|
|
|
if (res) { |
|
|
|
detail.qty += Number(detail.qty) |
|
|
|
let newDetail = this.createAddDetailInfo(result.balance, result.package); // |
|
|
|
newDetail.record = this.createRecordInfo(newDetail); |
|
|
|
detail.subList.push(newDetail); |
|
|
|
var test = this.detailSource; |
|
|
|
this.updateData() |
|
|
|
|
|
|
|
} |
|
|
@ -395,55 +392,42 @@ |
|
|
|
qty: Number(balance.qty), |
|
|
|
handleQty: 0, |
|
|
|
uom: pack.uom, |
|
|
|
subList: [] |
|
|
|
subList: [], |
|
|
|
|
|
|
|
} |
|
|
|
return item; |
|
|
|
}, |
|
|
|
|
|
|
|
createAddDetailInfo(balance, pack) { |
|
|
|
var detail = { |
|
|
|
scaned: true, |
|
|
|
balanceQty: balance.qty, |
|
|
|
toInventoryStatus: balance.inventoryStatus, |
|
|
|
fromLocationCode: balance.locationCode, |
|
|
|
id: "", |
|
|
|
scaned: true, |
|
|
|
countDetailNumber: "", |
|
|
|
ownerCode: balance.OwnerCode, |
|
|
|
ownerCode: balance.ownerCode, |
|
|
|
packingNumber: balance.packingNumber, |
|
|
|
containerNumber: pack.ContainerNumber, |
|
|
|
containerNumber: pack.containerNumber, |
|
|
|
batch: balance.batch, |
|
|
|
inventoryStatus: balance.inventoryStatus, |
|
|
|
itemCode: balance.itemCode, |
|
|
|
itemCode: pack.itemCode, |
|
|
|
itemName: pack.itemName, |
|
|
|
itemDesc1: pack.itemDesc1, |
|
|
|
itemDesc2: pack.itemDesc2, |
|
|
|
stdPackQty: pack.stdPackQty, |
|
|
|
stdPackUnit: pack.stdPackUnit, |
|
|
|
projectCode: "", |
|
|
|
qty: balance.qty, |
|
|
|
handleQty: balance.qty, |
|
|
|
uom: balance.uom, |
|
|
|
masterID: "", |
|
|
|
number: "", |
|
|
|
remark: "", |
|
|
|
creationTime: "", |
|
|
|
creatorId: "", |
|
|
|
creatorName: "", |
|
|
|
siteId: "" |
|
|
|
countQty: balance.qty, |
|
|
|
balanceQty: balance.qty, |
|
|
|
fromLocationCode: balance.locationCode, |
|
|
|
stdPackQty: pack.stdPackQty, |
|
|
|
stdPackUnit: pack.stdPackUnit, |
|
|
|
} |
|
|
|
|
|
|
|
return detail; |
|
|
|
}, |
|
|
|
|
|
|
|
createRecordInfo(detail) { |
|
|
|
var record = {} |
|
|
|
detail.scaned = true; |
|
|
|
// let record = JSON.parse(JSON.stringify(detail)); |
|
|
|
//克隆对象,深度克隆,防止双向绑定同一个变量 |
|
|
|
Object.assign(record, detail) |
|
|
|
record.fromLocationCode = this.fromLocationCode; |
|
|
|
return record; |
|
|
|
}, |
|
|
|
|
|
|
|
scanLocationCode(location, code) { |
|
|
|
this.$refs.comMessage.showQuestionMessage("是否把所有的目标库位都变成默认库位[" + code + "]", res => { |
|
|
|
this.toLocationCode = code |
|
|
@ -456,19 +440,59 @@ |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
getScanCount() { |
|
|
|
var scanCount = 0; |
|
|
|
this.detailSource.forEach(item => { |
|
|
|
item.subList.forEach(detail => { |
|
|
|
if (detail.scaned) { |
|
|
|
scanCount = scanCount + 1; |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
return scanCount; |
|
|
|
}, |
|
|
|
|
|
|
|
getTotalCount() { |
|
|
|
var totalCount = 0; |
|
|
|
this.detailSource.forEach(item => { |
|
|
|
item.subList.forEach(detail => { |
|
|
|
totalCount = totalCount + 1; |
|
|
|
}) |
|
|
|
}) |
|
|
|
return totalCount; |
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
commit() { |
|
|
|
if (this.scanCount == this.subList.length) { |
|
|
|
this.scanCount = this.getScanCount(); |
|
|
|
|
|
|
|
if (this.scanCount == this.getTotalCount()) { |
|
|
|
this.submitJob(); |
|
|
|
} else if (this.scanCount < this.subList.length) { |
|
|
|
} else if (this.scanCount < this.getTotalCount()) { |
|
|
|
//扫描数量小于任务数量,判断是否允许部分提交 |
|
|
|
if (this.jobContent.allowPartialComplete == "TRUE") { |
|
|
|
//提交 |
|
|
|
this.submitJob(); |
|
|
|
this.$refs.comMessage.showQuestionMessage("已经扫描[" + this.scanCount + |
|
|
|
"]总共[" + this |
|
|
|
.getTotalCount() + "],是否把未扫描的盘点数量设置为0?", |
|
|
|
res => { |
|
|
|
if (res) { |
|
|
|
this.detailSource.forEach(item => { |
|
|
|
item.subList.forEach(detail => { |
|
|
|
if (!detail.scaned) { |
|
|
|
detail.countQty = 0; |
|
|
|
} |
|
|
|
}) |
|
|
|
}) |
|
|
|
this.submitJob(); |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
} else { |
|
|
|
//不允许部分提交,提示 |
|
|
|
this.$refs.comMessage.showErrorMessage('请完成扫描后,再进行提交<br>' + "已经扫描[" + this.scanCount + |
|
|
|
"]箱总共[" + this |
|
|
|
.subList.length + "]箱", res => { |
|
|
|
"]总共[" + this |
|
|
|
.getTotalCount() + "]", res => { |
|
|
|
if (res) { |
|
|
|
this.openScanPopup(); |
|
|
|
} |
|
|
@ -477,59 +501,41 @@ |
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
submitJob() { |
|
|
|
|
|
|
|
submitJob() { |
|
|
|
uni.showLoading({ |
|
|
|
title: "提交中....", |
|
|
|
mask: true |
|
|
|
}); |
|
|
|
var itemCodes = [] |
|
|
|
this.detailSource.forEach(item => { |
|
|
|
itemCodes.push(item.itemCode) |
|
|
|
var params = this.setParams() |
|
|
|
console.log("提交参数", JSON.stringify(params)); |
|
|
|
countJobSubmit(this.id, params).then(res => { |
|
|
|
uni.hideLoading() |
|
|
|
if (res.data) { |
|
|
|
this.showCommitSuccessMessage("提交成功<br>生成盘点记录" + res.data) |
|
|
|
} else { |
|
|
|
this.showErrorMessage("提交失败[" + res.msg + "]") |
|
|
|
} |
|
|
|
}).catch(error => { |
|
|
|
uni.hideLoading() |
|
|
|
this.showErrorMessage(error) |
|
|
|
}) |
|
|
|
|
|
|
|
//获取管理模式,封装参数 |
|
|
|
// getManagementPrecisions(itemCodes, this.toLocationCode, res => { |
|
|
|
// if (res.success) { |
|
|
|
// this.managementList = res.list; |
|
|
|
// var params = this.setParams() |
|
|
|
// console.log("提交参数", JSON.stringify(params)); |
|
|
|
// // var params = this.getParams(); |
|
|
|
|
|
|
|
// // countJobSubmit(this.id, params).then(res => { |
|
|
|
// // if (res.data) { |
|
|
|
// // this.showCommitSuccessMessage("提交成功<br>生成采购收货记录" + res.data.Number, ) |
|
|
|
// // } else { |
|
|
|
// // this.showErrorMessage("提交失败[" + res.msg + "]") |
|
|
|
// // } |
|
|
|
// // uni.hideLoading() |
|
|
|
// // }).catch(error => { |
|
|
|
// // uni.hideLoading() |
|
|
|
// // this.showErrorMessage(error) |
|
|
|
// // }) |
|
|
|
// } else { |
|
|
|
// uni.hideLoading(); |
|
|
|
// this.showErrorMessage(res.message); |
|
|
|
// } |
|
|
|
// }); |
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
|
|
setParams() { |
|
|
|
var subList = [] |
|
|
|
var creator = this.$store.state.user.id |
|
|
|
|
|
|
|
|
|
|
|
this.detailSource.forEach(item => { |
|
|
|
item.subList.forEach(detail => { |
|
|
|
if (detail.scaned) { |
|
|
|
var info = getPackingNumberAndBatch(this.managementList, detail.itemCode, |
|
|
|
detail.packingNumber, detail.batch); |
|
|
|
detail.toPackingNumber = info.packingNumber; |
|
|
|
detail.toBatch = info.batch; |
|
|
|
subList.push(detail) |
|
|
|
detail.countQty = detail.handleQty; |
|
|
|
} |
|
|
|
subList.push(detail) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
this.jobContent.subList = subList |
|
|
|
this.jobContent.creator = creator; |
|
|
|
return this.jobContent; |
|
|
@ -564,8 +570,8 @@ |
|
|
|
}, |
|
|
|
|
|
|
|
editItem(item) { |
|
|
|
var detail = this.detailSource.find(r => r.itemCode == item.record.itemCode); |
|
|
|
this.$refs.CountQtyEdit.openEditPopup(item.record, |
|
|
|
var detail = this.detailSource.find(r => r.itemCode == item.itemCode); |
|
|
|
this.$refs.countQtyEdit.openEditPopup(item, |
|
|
|
detail.subList); |
|
|
|
}, |
|
|
|
|
|
|
@ -573,7 +579,14 @@ |
|
|
|
this.$refs.comMessage.showSuccessMessage(hint, res => { |
|
|
|
navigateBack(1); |
|
|
|
}) |
|
|
|
}, |
|
|
|
getCountStageName(value) { |
|
|
|
return getCountStageName(value) |
|
|
|
}, |
|
|
|
isOpenCount(value) { |
|
|
|
return value == "TRUE" ? "明盘" : "盲盘" |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|