<template> <view class="page-wraper"> <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-count-detail-card :ref="'countDetail_'+index" :dataContent="item" :index="index" @editItem="editItem" :settingParam="jobContent" @remove="updateData" @updateData="updateData"> </com-count-detail-card> </view> <u-line /> </view> </scroll-view> </view> <view class="page-footer"> <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> </view> </view> </view> <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> <com-message ref="comMessage"></com-message> </view> </template> <script> import { getCountJobDetail, takeCountJob, cancleTakeCountJob, countJobSubmit } from '@/api/request2.js'; import { goHome, navigateBack, getPackingNumberAndBatch } from '@/common/basic.js'; import winScanButton from '@/mycomponents/scan/winScanButton.vue' import winScanPack from '@/mycomponents/scan/winScanPack.vue' import requiredLocation from '@/mycomponents/location/requiredLocation.vue' 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' export default { name: 'receipt_detail', components: { winScanButton, winScanPack, comCountDetailCard, requiredLocation, comMessage, winScanPackAndLocation, CountQtyEdit, }, data() { return { id: '', receiptJob: {}, received: false, fromLocationCode: '', isShowPackingCode: true, scanCount: 0, jobContent: {}, //任务内容 subList: [], //接口返回的任务subList detailSource: [], //绑定在页面上的数据源 locationTypeList: [], toLocationInfo: {}, businessTypeInfo: {}, itemEditInfo: {} }; }, onLoad(option) { 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(); } }, //返回首页 onNavigationBarButtonTap(e) { if (e.index === 0) { goHome(); } }, //拦截返回按钮事件 onBackPress(e) { //已经接收但是没提交任务 if (e.from === 'backbutton') { if (this.received) { //取消承接任务 cancleTakeCountJob(this.id).then(res => { uni.navigateBack(); }).catch(error => { uni.navigateBack(); }) } else { uni.navigateBack(); } return true; } }, onPullDownRefresh() { this.getDetail(); uni.stopPullDownRefresh(); }, mounted() { }, methods: { //接收 receive(callback) { if (this.id != null) { takeCountJob(this.id).then(res => { callback(); }).catch(error => { this.showErrorMessage(error) }) } }, getDetail() { var that = this; uni.showLoading({ title: "加载中....", mask: true }); getCountJobDetail(that.id).then(res => { uni.hideLoading(); 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'); } } }).catch(error => { uni.hideLoading() this.showErrorMessage(error) }) }, getDataSource(subList) { let items = []; subList.forEach(detail => { var item = items.find(r => r.itemCode == detail.itemCode) if (item == undefined) { item = this.createItemInfo(detail); let newDetail = this.createDetailInfo(detail); // item.subList.push(newDetail); items.push(item) } else { item.qty += detail.qty let newDetail = this.createDetailInfo(detail); // item.subList.push(newDetail); } }) return items; }, createItemInfo(res) { let item = { itemCode: res.itemCode, itemName: res.itemName, stdPackQty: res.stdPackQty, stdPackUnit: res.stdPackUnit, qty: Number(res.qty), handleQty: 0, uom: res.uom, subList: [] } return item; }, createDetailInfo(data) { data.scaned = false; // data.record = {}; let detail = data; detail.balanceQty = detail.qty detail.inventoryStatus = detail.inventoryStatus detail.fromLocationCode = this.fromLocationCode return detail; }, calcScanCount(closeScan) { let items = this.subList.filter(r => { if (r.scaned) { return r; } }) this.scanCount = items != null ? items.length : 0; if (this.scanCount == this.subList.length) { this.closeScanPopup(); } }, calcHandleQty() { 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) } } } } this.$forceUpdate(); }, updateData() { this.calcHandleQty(); }, editConfirm() { this.calcHandleQty(); this.scanPopupGetFocus(); }, openScanPopup() { let fromlocationCode = ''; let fromlocationList = []; for (var i = 0; i < this.detailSource.length; i++) { let item = this.detailSource[i]; item.subList.forEach(l => { //重复的库位不往里面插入 var location = fromlocationList.filter(res => res.fromLocationCode != l.fromLocationCode) if (location.length == 0) { fromlocationList.push(l.fromLocationCode); } //来源库位赋默认值 if (fromlocationCode == '') { if (!l.scaned) { fromlocationCode = l.fromLocationCode; } } }) } this.$refs.scanPopup.openScanPopupForJob(fromlocationCode, fromlocationList, this.jobContent); }, closeScanPopup() { this.$refs.scanPopup.closeScanPopup(); }, scanPopupGetFocus() { this.$refs.scanPopup.packGetFocus(); }, getScanResult(result) { try { var packingNumber = result.balance.packingNumber; var batch = result.balance.batch; var qty = result.balance.qty; var itemCode = result.balance.itemCode; var inventoryStatus = result.balance.inventoryStatus; var detail = this.detailSource.find(r => r.itemCode == itemCode); //检查零件号是否存在 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 => { if (item.packingNumber == packingNumber && item.batch == batch && item.inventoryStatus == inventoryStatus) { return item; } }) if (this.itemEditInfo == undefined) { //不在任务列表中,提示是否添加到列表 this.addExistItemCodeToList(detail, result); } else { //在列表中,更新已扫描状态, if (this.itemEditInfo.scaned) { this.$refs.comMessage.showSelectMessageModal("箱码【" + packingNumber + "】已经完成盘点,是否要编辑数量", res => { // this.$.refs["countDetail_" + index][0].edit(itemDetail) if (res) { this.$refs.CountQtyEdit.openEditPopup(this.itemEditInfo.record, detail.subList); } else { this.scanPopupGetFocus(); } }) } 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 .subList); this.updateData() } } } } catch (e) { this.showErrorMessage(e.message) } }, addNewItemCodeToList(result) { this.$refs.comMessage.showSelectMessageModal("物料[" + result.balance.itemCode + "]不在列表中,是否添加到列表?", res => { 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() } }) }, addExistItemCodeToList(detail, result) { this.$refs.comMessage.showSelectMessageModal("箱码[" + result.balance.packingNumber + "]不在列表中,是否添加到列表?", res => { 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() } }) }, createAddItemInfo(balance, pack) { let item = { itemCode: balance.itemCode, itemName: pack.itemName, stdPackQty: pack.stdPackQty, stdPackUnit: pack.stdPackUnit, qty: Number(balance.qty), handleQty: 0, uom: pack.uom, subList: [] } return item; }, createAddDetailInfo(balance, pack) { var detail = { scaned: true, balanceQty: balance.qty, toInventoryStatus: balance.inventoryStatus, fromLocationCode: balance.locationCode, id: "", countDetailNumber: "", ownerCode: balance.OwnerCode, packingNumber: balance.packingNumber, containerNumber: pack.ContainerNumber, batch: balance.batch, inventoryStatus: balance.inventoryStatus, itemCode: balance.itemCode, itemName: pack.itemName, itemDesc1: pack.itemDesc1, itemDesc2: pack.itemDesc2, stdPackQty: pack.stdPackQty, stdPackUnit: pack.stdPackUnit, projectCode: "", qty: balance.qty, uom: balance.uom, masterID: "", number: "", remark: "", creationTime: "", creatorId: "", creatorName: "", siteId: "" } 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 this.detailSource.forEach(item => { item.subList.forEach(detail => { detail.toLocationCode = code }) }) }) }, commit() { if (this.scanCount == this.subList.length) { this.submitJob(); } else if (this.scanCount < this.subList.length) { //扫描数量小于任务数量,判断是否允许部分提交 if (this.jobContent.allowPartialComplete == "TRUE") { //提交 this.submitJob(); } else { //不允许部分提交,提示 this.$refs.comMessage.showErrorMessage('请完成扫描后,再进行提交<br>' + "已经扫描[" + this.scanCount + "]箱总共[" + this .subList.length + "]箱", res => { if (res) { this.openScanPopup(); } }); } } }, submitJob() { uni.showLoading({ title: "提交中....", mask: true }); var itemCodes = [] this.detailSource.forEach(item => { itemCodes.push(item.itemCode) }) //获取管理模式,封装参数 // 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) } }) }) this.jobContent.subList = subList this.jobContent.creator = creator; return this.jobContent; }, showMessage(message) { this.$refs.comMessage.showMessage(message, res => { if (res) { this.afterCloseMessage() } }); }, showErrorMessage(message) { this.$refs.comMessage.showErrorMessage(message, res => { if (res) { this.afterCloseMessage() } }); }, showScanMessage(message) { this.$refs.comMessage.showScanMessage(message); }, afterCloseMessage() { this.scanPopupGetFocus(); }, closeScanMessage() { this.scanPopupGetFocus(); }, editItem(item) { var detail = this.detailSource.find(r => r.itemCode == item.record.itemCode); this.$refs.CountQtyEdit.openEditPopup(item.record, detail.subList); }, showCommitSuccessMessage(hint) { this.$refs.comMessage.showSuccessMessage(hint, res => { navigateBack(1); }) } } } </script> <style scoped lang="scss"> page { width: 100%; height: 100%; background-color: #fff; } .page-wraper { display: flex; flex-direction: column; width: 100%; height: 100%; } .page-main { flex: 1; position: relative; } .page-main-scroll { position: absolute; left: 0; right: 0; top: 0; bottom: 0; } .page-main-list { /* height: 80rpx; line-height: 80rpx; */ text-align: center; background: #e0e0e0; } </style>