<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>{{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>
					<comDeliverDetailCardBatch ref='comIssueDetailCard' :dataContent="detailSource" :settingParam="jobContent"
						@updateData='updateData' :allowBiggerQty='allowBiggerQty'>
					</comDeliverDetailCardBatch>
				</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>
		<comScanDeliverPackBatch ref="comScanIssuePack" @closeScan='closeScan' @updateData='updateData'>
		</comScanDeliverPackBatch>
		<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,
		deepCopyData
	} 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 comDeliverDetailCardBatch from '@/pages/deliver/coms/comDeliverDetailCardBatch.vue'
	import comScanDeliverPackBatch from '@/pages/deliver/coms/comScanDeliverPackBatch.vue'
	import jobTop from '@/mycomponents/job/jobTop.vue'

	export default {
		name: 'issueDetail',
		components: {
			jobDetailPopup,
			winScanButton,
			comDeliverDetailCardBatch,
			comScanDeliverPackBatch,
			jobTop
		},
		data() {
			return {
				id: '',
				jobContent: {}, //任务内容
				subList: [], //接口返回的任务subList
				detailSource: [], //绑定在页面上的数据源
				detailOptions: [],
				scanOptions: [],
				status: "",
				toLocationCode: "",
				jobStatus: "",
				allowBiggerQty:"TRUE",//开启数量校验提示
			};
		},

		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 = res.data;
						that.toLocationCode = that.subList[0].toLocationCode
						that.allowBiggerQty = res.data.allowBiggerQty;
						that.resizeCollapse();
					} else {
						that.showMessage('未获取到详情');
					}
				}).catch(error => {
					uni.hideLoading()
					this.showErrorMessage(error)
				})
			},

			closeScan() {
				this.resizeCollapse();
			},

			resizeCollapse() {

			},



			submit() {
				uni.showLoading({
					title: "提交中....",
					mask: true
				});

				//目前任务只到一个库位
				var itemCodes = []
				let locationCode = this.detailSource.subList[0].toLocationCode
				this.detailSource.subList.forEach(item => {
					itemCodes.push(item.itemCode)
				})
				//获取管理模式，封装参数
				getManagementPrecisions(itemCodes, locationCode, res => {
					if (res.success) {
						this.managementList = res.list;
						this.managementType = this.managementList &&  this.managementList[0] ? this.managementList[0].ManagementPrecision : 'BY_PACKAGING'
					
						this.submitJob();
					} else {
						uni.hideLoading();
						this.showErrorMessage(res.message);
					}
				});
				// //使用在途库，不查询管理模式
				// 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(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
			},
			checkCountBatch() {
				let str = ""
				let str1 = ""
				this.detailSource.subList.forEach(item => {
					var taskQty = 0;
					var totalQty = 0;
					item.taskQty = calc.add(taskQty, item.qty)
					totalQty = calc.add(totalQty, item.handleQty)
					//实际扫描的数量
					item.totalQty = totalQty
				})
				//如果允许部分提交任务有扫描记录就可以直接提交；如果不允许部分执行，任务数量和提交数量不一致给出提示
				this.detailSource.subList.forEach(detail => {
					if (this.jobContent.allowPartialComplete == "FALSE") {
						if (detail.taskQty != 	detail.totalQty) {
							str += `物料号【${detail.itemCode}】任务数量【${detail.taskQty}】与实际提交数量【${detail.totalQty}】不一致\n`
						}
					}
					if (this.allowBiggerQty == 'FALSE') {
						if (	detail.taskQty < 	detail.totalQty) {
							str1 += '数量[' + detail.totalQty + ']不允许大于任务数量[' + detail.taskQty + ']'
						}
					}
				})

				if (str) {
					str = '不允许提交\n' + str
					this.showErrorMessage(str)
				}
				if (str1) {
					str1 = '不允许提交\n' + str1
					this.showErrorMessage(str1)
				}

				return str || str1 ? false : true

			},

			submitJob() {
				var params = this.setParams()
				console.log("提交参数", params);
				if (params.subList.length == 0) {
					uni.hideLoading()
					this.$refs.comMessage.showConfirmMessageModal('请扫描箱码')
					return
				}
				if(this.managementType == "BY_BATCH" ||this.managementType == "BY_QUANTITY" ){
					if (!this.checkCountBatch()) {
						uni.hideLoading()
						return;
					}
				}else{
					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.subList.forEach(r => {
					if (r.scaned) {
						let subItem = {
							...r
						}
						subItem.recordList = []
						let record = {};
						record.handleQty = r.handleQty;
						record.toContainerNumber = r.ContainerNumber;
						record.toInventoryStatus = r.inventoryStatus;
						record.toLocationCode = subItem.toLocationCode;
						record.supplierCode = r.supplierCode;
						var info = getPackingNumberAndBatch(this.managementList, r.itemCode, r.packingNumber, r.batch);
						record.toPackingNumber = info.packingNumber;
						record.packingNumber = info.packingNumber;
						record.fromPackingNumber = info.packingNumber;
						record.toBatch = info.batch;
						subItem.toPackingNumber = info.packingNumber;
						subItem.packingNumber = info.packingNumber;
						subItem.fromPackingNumber = info.packingNumber;
						// //使用在途库不改变管理模式
						// 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;
						// }
						subItem.recordList.push(record);
						subList.push(deepCopyData(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) {

			},

			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>