<template> <view class="page-wraper"> <view class="page-header"> <view class="header_job_top"> <job-top :dataContent="jobContent"></job-top> </view> <view class="header_item"> 申请单号 : {{jobContent.requestNumber}} </view> <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=""> <comInventoryDetailCard :dataContent="item" :settingParam="jobContent" @remove="updateData" @updateData='updateData' @openDetail="openDetail"> </comInventoryDetailCard> </view> </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=""> </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> <detailInfoPopup ref="jobDetailPopup"></detailInfoPopup> <comMessage ref="comMessage"></comMessage> </view> </template> <script> import { getInventoryMoveJobDetail, takeInventoryMoveJob, cancleTakeInventoryMoveJob, inventoryMoveSubmit } from '@/api/request2.js'; import { getManagementPrecisions, getPrecisionStrategyList } from '@/common/balance.js'; import { getDataSource, getScanCount, calcHandleQty } from '@/common/detail.js'; import { goHome, navigateBack, getCurrDateTime, getPackingNumberAndBatchByList, getInventoryStatusName, } from '@/common/basic.js'; import winScanButton from '@/mycomponents/scan/winScanButton.vue' import winScanPack from '@/mycomponents/scan/winScanPack.vue' import comInventoryDetailCard from '@/pages/inventoryMove/coms/comInventoryDetailCard.vue' import winScanPackAndLocation from "@/mycomponents/scan/winScanPackAndLocation.vue" import detailInfoPopup from '@/pages/inventoryMove/coms/detailInfoPopup.vue' import jobTop from '@/mycomponents/job/jobTop.vue' export default { name: 'inventoryMoveDetail', components: { winScanButton, winScanPack, comInventoryDetailCard, winScanPackAndLocation, detailInfoPopup, jobTop }, data() { return { id: '', scanCount: 0, jobContent: {}, //任务内容 subList: [], //接口返回的任务subList detailSource: [], //绑定在页面上的数据源 toLocationInfo: {}, businessTypeInfo: {}, managementList: [], businessTypeCode: '', toLocationCode: '', toInventoryStatus: '', jobStatus:"", title:'' }; }, props: { }, onLoad(option) { this.title = option.title this.id = option.id; this.businessTypeCode = option.businessTypeCode; if (this.id != undefined) { // //新建的任务自动接收 if (option.status == "1") { this.receive((callback => { this.getDetail(); })); } else { this.getDetail(); } this.initData(); } }, //返回首页 onNavigationBarButtonTap(e) { if (e.index === 0) { goHome(); } }, onBackPress(e) { //已经接收但是没提交任务 if (e.from == 'backbutton') { if (this.jobStatus=="2") { //取消承接任务 cancleTakeInventoryMoveJob(this.id).then(res => { uni.navigateBack(); }).catch(error => { uni.navigateBack(); }) } else { uni.navigateBack(); } return true; } }, onPullDownRefresh() { this.getDetail(); uni.stopPullDownRefresh(); }, mounted() { }, methods: { initData() { var name = "" if (this.businessTypeCode == "Move") { name = "库存转移"; } else if (this.businessTypeCode == "HoldToOk") { name = "隔离转合格"; this.toLocationCode = ''; this.toInventoryStatus = 'OK'; } else if (this.businessTypeCode == "HoldToScrap") { name = "隔离转报废"; this.toLocationCode = 'SCRAP'; this.toInventoryStatus = 'SCRAP'; } else if (this.businessTypeCode == "OkToHold") { name = "合格转隔离"; this.toLocationCode = 'HOLD'; this.toInventoryStatus = 'HOLD'; } else if (this.businessTypeCode == "NokToHold") { name = "不合格转隔离"; this.toLocationCode = 'HOLD'; this.toInventoryStatus = 'HOLD'; } else if (this.businessTypeCode == "OktoScrap") { name = "合格转报废"; this.toLocationCode = 'SCRAP'; this.toInventoryStatus = 'SCRAP'; } else if (this.businessTypeCode == "ScrapToHold") { name = "报废转隔离"; this.toLocationCode = 'HOLD'; this.toInventoryStatus = 'HOLD'; } uni.setNavigationBarTitle({ title: this.title + '详情' }) }, //接收 receive(callback) { uni.showLoading({ title: "加载中....", mask: true }); if (this.id != null) { takeInventoryMoveJob(this.id).then(res => { uni.hideLoading(); callback(); }).catch(error => { uni.hideLoading(); this.showErrorMessage(error) }) } }, getDetail() { var that = this; uni.showLoading({ title: "加载中....", mask: true }); getInventoryMoveJobDetail(that.id).then(res => { uni.hideLoading(); if (res.data == null) { that.showMessage('未获取到详情'); } else { if (res.data.subList.length > 0) { that.jobContent = res.data; that.jobStatus = res.data.status that.subList = res.data.subList; that.detailSource = getDataSource(that.subList) } else { that.showMessage('列表数据为0'); } } }).catch(error => { uni.hideLoading() this.showErrorMessage(error) }) }, //继续扫描 continueScan() { this.scanCount = getScanCount(this.subList); if (this.scanCount == this.subList.length) { this.closeScanPopup(); } else { this.scanPopupGetFocus(); } }, openDetail(item) { this.$refs.jobDetailPopup.openPopup(item) }, updateData() { this.calcHandleQty(); }, calcHandleQty() { calcHandleQty(this.detailSource) this.continueScan() this.$forceUpdate(); }, 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.find(res => res == l.fromLocationCode) if (location == undefined) { fromlocationList.push(l.fromLocationCode); } //来源库位赋默认值 if (fromlocationCode == '') { if (!l.scaned) { fromlocationCode = l.fromLocationCode; } } }) } this.$refs.scanPopup.openScanPopupForJob(fromlocationCode, fromlocationList, this.jobContent); }, getScanResult(result) { try { var packingNumber = result.label.packingNumber; var batch = result.label.batch; var qty = result.label.qty; var itemCode = result.label.itemCode; var detail = this.detailSource.find(r => r.itemCode == itemCode); if (detail == undefined) { this.showMessage("物料号【" + itemCode + "】不在列表中") } else { var itemDetail = detail.subList.find(r => { return r.packingNumber == packingNumber && r.batch == batch }) if (itemDetail == undefined) { this.showErrorMessage("箱码[" + packingNumber + "]" + "批次[" + batch + "]不在列表中") } else { if (itemDetail.scaned) { this.showMessage("箱码【" + packingNumber + "】已经扫描") } else { let balanceStatus = getInventoryStatusName(result.balance.inventoryStatus); let itemStatus = getInventoryStatusName(itemDetail.inventoryStatus); if (itemDetail.inventoryStatus != result.balance.inventoryStatus) { if (this.jobContent.allowModifyInventoryStatus == "TRUE") { this.showQuestionMessage('任务中允许修改库存状态,实际库存状态[' + balanceStatus + ']与推荐库存状态[' + itemStatus + ']不一致,是否继续转移?', res => { if (res) { itemDetail.scaned = true; itemDetail.handleQty = Number(result.balance.qty); itemDetail.fromInventoryStatus = result.balance.inventoryStatus; itemDetail.balance = result.balance; itemDetail.balance.balanceQty = Number(result.balance.qty); itemDetail.balance.packQty = Number(result.package.packQty) itemDetail.balance.packUnit = result.package.packUnit this.calcHandleQty(); } else { this.scanPopupGetFocus(); } }); } else { this.showQuestionMessage('任务中不允许修改库存状态,实际库存状态[' + balanceStatus + ']与推荐库存状态[' + itemStatus + ']不一致,不允许转移!', res => { this.scanPopupGetFocus(); }); } } else { itemDetail.scaned = true; itemDetail.handleQty = Number(result.balance.qty); itemDetail.fromInventoryStatus = result.balance.inventoryStatus; itemDetail.balance = result.balance; itemDetail.balance.balanceQty = Number(result.balance.qty); itemDetail.balance.packQty = Number(result.package.packQty) itemDetail.balance.packUnit = result.package.packUnit this.calcHandleQty(); } } } } this.scanPopupGetFocus(); } catch (e) { this.showErrorMessage(e.message); } }, commit() { this.scanCount = getScanCount(this.subList); if (this.scanCount == 0) { this.showErrorMessage("扫描数为0,请先扫描") return; } //允许部分提交 //扫描数量和任务数量相等,直接提交 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 }); //查询管理模式 this.managementList = []; var precisionStrategParams = this.setPrecisionStrategParams() getPrecisionStrategyList(precisionStrategParams, res => { if (res.success) { this.managementList = res.list; var params = this.setParams() console.log("提交" + JSON.stringify(params)) inventoryMoveSubmit(params).then(res => { uni.hideLoading() if (res.data) { this.showCommitSuccessMessage("提交成功<br>生成库存转移记录<br>" + res.data) } else { this.showErrorMessage("提交失败[" + res.msg + "]") } }).catch(error => { uni.hideLoading() this.showErrorMessage(error) }) } else { uni.hideLoading(); this.showErrorMessage(res.message); } }) }, setPrecisionStrategParams() { var itemList = [] this.detailSource.forEach(item => { item.subList.forEach(detail => { if (detail.scaned) { var filterResult = itemList.filter(res => { if (res.itemCode == item.itemCode && res.locationCode == detail.toLocationCode) { return res } }) //去掉重复元素 if (filterResult.length == 0) { var result = { itemCode: item.itemCode, locationCode: detail.toLocationCode } itemList.push(result) } } }) }) return itemList; }, setParams() { var subList = [] var creator = this.$store.state.user.id this.detailSource.forEach(item => { item.subList.forEach(detail => { if (detail.scaned) { var info = getPackingNumberAndBatchByList(this.managementList, detail.itemCode, detail.packingNumber, detail.toLocationCode, detail.batch); detail.toPackingNumber = info.packingNumber; detail.toBatch = info.batch; detail.toContainerNumber = ''; // detail.toLocationCode = this.toLocationCode; if(this.businessTypeCode == "Move") { detail.toInventoryStatus=detail.inventoryStatus; } else { detail.toInventoryStatus=this.toInventoryStatus; } 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() } }); }, showQuestionMessage(message, callback) { setTimeout(r => { this.scanPopupLoseFocus(); this.$refs.comMessage.showQuestionMessage(message, res => { if (res) { callback(res); } }); }) }, scanPopupGetFocus() { this.$refs.scanPopup.packGetFocus(); }, scanPopupLoseFocus() { this.$refs.scanPopup.packLoseFocus(); }, closeScanPopup() { this.$refs.scanPopup.closeScanPopup(); }, afterCloseMessage() { this.scanPopupGetFocus(); }, closeScanMessage() { this.scanPopupGetFocus(); }, 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>