<template> <view class="page-wraper"> <view class="page-header"> <view class="header-view"> <view class="header_job_top"> <job-top :dataContent="jobContent"></job-top> </view> <view class="cen_card" style="padding: 5rpx;"> <view class="cell_box uni-flex uni-row"> <view class="cell_info"> <view class="text_lightblue">发货类型</view> <view style="line-height: 34rpx;">{{jobContent.deliverType}}</view> </view> <view class="cell_info"> <view class="text_lightblue">客户代码</view> <view>{{jobContent.customerCode}}</view> </view> <view class="cell_info"> <view class="text_lightblue">目标库位</view> <view >{{toLocationCode}}</view> </view> </view> </view> </view> </view> <view class="page-main"> <scroll-view scroll-y="true" class="page-main-scroll"> <view v-for="(toLocation, index) in detailSource"> <comDeliverDetailCard ref='comIssueDetailCard' :dataContent="toLocation" :settingParam="jobContent" @updateData='updateData'> </comDeliverDetailCard> </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="submit()">提交</button> </view> </view> </view> <win-scan-button @goScan='openScanDetailPopup'></win-scan-button> <comScanDeliverPack ref="comScanIssuePack" @closeScan='closeScan' @updateData='updateData'> </comScanDeliverPack> <comMessage ref="comMessage"></comMessage> </view> </template> <script> import { getDeliverDetail, takeDeliverJob, cancleTakeDeliverJob, deliverJobSubmit } from '@/api/request2.js'; import { calc } from '@/common/calc.js'; import { goHome, navigateBack, getRemoveOption, getCurrDateTime, getPackingNumberAndBatch, } from '@/common/basic.js'; import { getDataSource } from '@/pages/issue/js/issue.js'; import { getManagementPrecisions } from '@/common/balance.js'; import jobDetailPopup from '@/mycomponents/job/jobDetailPopup.vue' import winScanButton from '@/mycomponents/scan/winScanButton.vue' import comDeliverDetailCard from '@/pages/deliver/coms/comDeliverDetailCard.vue' import comScanDeliverPack from '@/pages/deliver/coms/comScanDeliverPack.vue' import jobTop from '@/mycomponents/job/jobTop.vue' export default { name: 'issueDetail', components: { jobDetailPopup, winScanButton, comDeliverDetailCard, comScanDeliverPack, jobTop }, data() { return { id: '', jobContent: {}, //任务内容 subList: [], //接口返回的任务subList detailSource: [], //绑定在页面上的数据源 detailOptions: [], scanOptions: [], status: "", toLocationCode: "", jobStatus: "" }; }, props: { }, onLoad(option) { uni.setNavigationBarTitle({ title: option.title + '详情' }) this.id = option.id; if (this.id != undefined) { //新建的任务自动接收 if (option.status == "1") { this.receive((callback => { this.getDetail(); })); } else { this.getDetail(); } } }, onNavigationBarButtonTap(e) { if (e.index === 0) { goHome(); } }, //拦截返回按钮事件 onBackPress(e) { //已经接收但是没提交任务 if (e.from == 'backbutton') { if (this.jobStatus == "2") { //取消承接任务 cancleTakeDeliverJob(this.id).then(res => { uni.navigateBack(); }).catch(error => { uni.navigateBack(); }) } else { uni.navigateBack(); } return true; } }, methods: { //接收 receive(callback) { if (this.id != null) { takeDeliverJob(this.id).then(res => { callback(); }).catch(error => { this.showErrorMessage(error) }) } }, getDetail() { var that = this; uni.showLoading({ title: "加载中....", mask: true }); getDeliverDetail(that.id).then(res => { uni.hideLoading(); if (res.data &&res.data.subList.length > 0) { that.jobContent = res.data; that.jobStatus = res.data.status; that.subList = res.data.subList; that.detailSource = getDataSource(that.detailSource, that.subList) that.toLocationCode = that.subList[0].toLocationCode that.resizeCollapse(); } else { that.showMessage('未获取到详情'); } }).catch(error => { uni.hideLoading() this.showErrorMessage(error) }) }, closeScan() { this.resizeCollapse(); }, resizeCollapse() { this.$nextTick(r => { this.$refs.comIssueDetailCard.forEach(r => { r.resizeCollapse(); }) }); }, submit() { uni.showLoading({ title: "提交中....", mask: true }); //目前任务只到一个库位 var itemCodes = [] let locationCode = this.detailSource[0].toLocationCode this.detailSource.forEach(toLocationCode => { toLocationCode.Items.forEach(item => { itemCodes.push(item.itemCode) }) }) //使用在途库,不查询管理模式 if (locationCode == null) { this.submitJob(); } else { //获取管理模式,封装参数 getManagementPrecisions(itemCodes, locationCode, res => { if (res.success) { this.managementList = res.list; this.submitJob(); } else { uni.hideLoading(); this.showErrorMessage(res.message); } }); } }, checkCount(){ let str="" this.detailSource.forEach(detail => { detail.Items.forEach(item => { var taskQty =0; item.taskQty =calc.add(taskQty,item.qty) var totalQty =0; item.Locations.forEach(lco => { lco.Batchs.forEach(batch => { batch.Records.forEach(record => { // if (batch.qty != record.qty) { // var tempHandleQty = 0 // if (record.qty) { // tempHandleQty = record.qty // } else { // tempHandleQty = 0 // } // if (batch.qty != 0) { // str += // `包装号【${record.packingNumber}】提交数量【${tempHandleQty}】与任务物料数量【${batch.qty}】不一致\n` // } // } if(record){ var hanleQty =record.qty?record.qty:0 totalQty = calc.add(totalQty,hanleQty) } }) }) }) //实际扫描的数量 item.totalQty =totalQty }) }) //如果允许部分提交任务有扫描记录就可以直接提交;如果不允许部分执行,任务数量和提交数量不一致给出提示 this.detailSource.forEach(detail=>{ detail.Items.forEach(item=>{ if(this.jobContent.allowPartialComplete=="FALSE"){ if(item.taskQty!=item.totalQty){ str += `物料号【${item.itemCode}】任务数量【${item.taskQty}】与实际提交数量【${item.totalQty}】不一致\n` } } }) }) if(str){ str = '不允许提交\n' + str this.showErrorMessage(str) } return str?false:true }, submitJob() { var params = this.setParams() console.log("提交参数", JSON.stringify(params)); if (params.subList.length == 0) { uni.hideLoading() this.$refs.comMessage.showConfirmMessageModal('请扫描箱码') return } if(!this.checkCount()){ uni.hideLoading() return ; } deliverJobSubmit(params).then(res => { uni.hideLoading() if (res.data) { this.showCommitSuccessMessage("提交成功\n生成发货记录\n" + res.data) } else { this.showErrorMessage("提交失败[" + res.msg + "]") } }).catch(error => { uni.hideLoading() this.showErrorMessage(error) }) }, setParams() { var subList = [] var createTime = getCurrDateTime(); var creator = this.$store.state.user.id this.detailSource.forEach(toLocationCode => { toLocationCode.Items.forEach(item => { item.Locations.forEach(fromLocation => { fromLocation.Batchs.forEach(batch => { let subItem = batch.detail; subItem.recordList = []; if (batch.Records.length > 0) { batch.Records.forEach(r => { let record = {}; record.handleQty = r.qty; record.fromPackingNumber = r .packingNumber; record.toContainerNumber = r .ContainerNumber; record.toInventoryStatus = r .inventoryStatus; record.toLocationCode = subItem .toLocationCode; record.supplierCode = r.supplierCode; //使用在途库不改变管理模式 if (this.toLocationCode == null) { record.toPackingNumber = r .packingNumber; record.toBatch = r.batch; } else { var info = getPackingNumberAndBatch( this.managementList, r .itemCode, r.packingNumber, r .batch); record.toPackingNumber = info .packingNumber; record.toBatch = info.batch; } record.fromParentPackingNumber = r .parentPackingNumber; subItem.recordList.push(record); }) subList.push(subItem); } }) }) }) }) this.jobContent.subList = subList this.jobContent.createTime = createTime; this.jobContent.creator = creator; return this.jobContent; }, cancel() { let that = this; this.$refs.comMessage.showQuestionMessage('是否要清空已扫描的物料和目标库位信息?', res => { if (res) { that.clearInfo(); } }); }, clearInfo() { this.dataContent.itemCodeList.forEach(res => { if (res.recommendList != null) { res.recommendList.forEach(res1 => { if (res1.locationCodeList != null) { res1.locationCodeList.forEach(res2 => { if (res2.packingCodeList != null) { res2.packingCodeList.forEach(res3 => { res3.itemCode = ""; res3.qty = 0; }) } }) } }) } }) }, updateData(record) { let requestLocation = this.detailSource.find(r => r.toLocationCode == record.toLocationCode); let item = requestLocation.Items.find(r => r.itemCode == record.itemCode); let itemHandleQty = 0; if (item != undefined) { item.Locations.forEach(l => { let batch = l.Batchs.find(b => (b.packingNumber == record.packingNumber || b .packingNumber == null || b.packingNumber == '') && b.batch == record.batch); let handleQty = 0; if (batch != undefined) { batch.Records.forEach(res => { handleQty = calc.add(handleQty, res.qty) }) batch.handleQty = handleQty; itemHandleQty = calc.add(itemHandleQty, handleQty) } }) } // item.handleQty=itemHandleQty; }, scanPopupGetFocus() { if (this.$refs.scanPopup != undefined) { this.$refs.scanPopup.getfocus(); } }, 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); }, showCommitSuccess() { this.$refs.comMessage.showCommitSuccess(); }, showCommitSuccessMessage(hint) { this.$refs.comMessage.showSuccessMessage(hint, res => { navigateBack(1) }) }, showRescanMessage(message) { this.$refs.comMessage.showRescanMessage(message); }, afterCloseMessage() { this.scanPopupGetFocus(); }, closeScanMessage() { this.scanPopupGetFocus(); }, confirm(data) { this.dataContent = data; }, confirmResult(result) { this.dataContent = result; this.$forceUpdate(); }, openScanDetailPopup() { var datacontent = {} //克隆对象,深度克隆,防止双向绑定同一个变量 // Object.assign(datacontent, this.detailSource); this.$refs.comScanIssuePack.openScanPopup(this.detailSource, this.jobContent); }, closeScanPopup() { this.updateCommitBtn(); }, } }; </script> <style scoped lang="scss"> .uni-numbox__value { width: 40px; } button[disabled] { background-color: #3C9CFF; color: #fff; opacity: 0.7; } // /deep/ .input-value { // font-size: 16px; // } // /deep/ .uni-collapse-item__title-text { // font-size: 16px; // } // /deep/ .uni-collapse-item--border { // border-bottom-width: 0px; // border-bottom-color: #ebeef5; // } // /deep/ .uni-collapse-item--border { // border-bottom-width: 1px; // border-bottom-color: #ebeef5; // } </style>