<template>
	<view class="page-wraper">
		<view class="">
			<com-blank-view @goScan='showRequestPopup' v-if="detailSource.length==0"></com-blank-view>
		</view>
		<view class="page-wraper" v-if="detailSource.length>0">
			<view class="page-main">
				<scroll-view scroll-y="true" class="page-main-scroll">
					<view class="detail-list" v-for="(toLocation, index) in detailSource" :key="index">
						<view class="">
							<view class="page-header">
								<view class="text_lightblue fontsize-16">目标库位:{{toLocation.toLocationCode}}</view>
							</view>
							<com-issue-detail-card ref='comRepleinshDetailCard' :dataContent="toLocation"
								@updateData='updateData'>
							</com-issue-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="">
					</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>
		</view>
		<com-repleinsh-request-popup ref="comRepleinshRequestPopup" :toLocationTypeList="tolocationTypeList"
			@confirm='requestConfirm'>
		</com-repleinsh-request-popup>
		<win-scan-button v-if='detailSource.length>0' @goScan='openScanDetailPopup'></win-scan-button>
		<com-scan-issue-pack ref="comScanIssuePack" @closeScan='closeScan' @updateData='updateData'>
		</com-scan-issue-pack>
		<comMessage ref="comMessage"></comMessage>
	</view>
</template>

<script>
	import {
		repleinshRecordSubmit,
		getBalanceByBatchOffShelf
	} from '@/api/request2.js';

	import {
		goHome,
		updateTitle,
		getCurrDateTime
	} from '@/common/basic.js';

	import {
		getInventoryStatusDesc,
		getDirectoryItemArray
	} from '@/common/directory.js';

	import {
		getDetailOption,
		getDetailRemoveOption,
		getDetailEditRemoveOption
	} from '@/common/array.js';

	import {
		getBusinessType,
		createItemInfo,
		createDetailInfo,
		calcHandleQty
	} from '@/common/record.js';

	import {
		getDataSource
	} from '@/pages/issue/js/issue.js';

	import {
		getManagementPrecisions
	} from '@/common/balance.js';

	import winScanButton from '@/mycomponents/scan/winScanButton.vue'
	import winScanPack from '@/mycomponents/scan/winScanPack.vue'
	import requiredLocation from '@/mycomponents/location/requiredLocation.vue'
	import comBlankView from '@/mycomponents/common/comBlankView.vue'
	import winScanLocation from "@/mycomponents/scan/winScanLocation.vue"
	import comMessage from '@/mycomponents/common/comMessage.vue'
	import winScanPackAndLocation from "@/mycomponents/scan/winScanPackAndLocation.vue"
	import recordComDetailCard from '@/mycomponents/record/recordComDetailCard.vue'
	import comRepleinshRequestPopup from '@/pages/repleinsh/coms/comRepleinshRequestPopup.vue'
	import comIssueDetailCard from '@/pages/issue/coms/comIssueDetailCard.vue'
	import comScanIssuePack from '@/pages/issue/coms/comScanIssuePack.vue'

	export default {
		components: {
			winScanButton,
			winScanPack,
			requiredLocation,
			comBlankView,
			winScanLocation,
			comMessage,
			winScanPackAndLocation,
			recordComDetailCard,
			comRepleinshRequestPopup,
			comIssueDetailCard,
			comScanIssuePack
		},
		data() {
			return {
				id: '',
				receiptJob: {},
				subList: [], //接口返回的任务subList
				detailSource: [], //绑定在页面上的数据源
				locationTypeList: [],
				businessTypeInfo: {},
				fromLocationCode: "",
				toLocationCode: "",
				fromlocationTypeList: [],
				tolocationTypeList: [],
				allowModifyLocation: false,
				businessType: {},
				requestList: [],
				managementList: [],
				dataContent: {}
			};
		},
		onLoad(option) {
			var typeCode = "Repleinment"
			getBusinessType(typeCode, res => {
				if (res.success) {
					this.businessType = res.businessType;
					this.fromlocationTypeList = res.fromlocationTypeList;
					this.tolocationTypeList = res.tolocationTypeList;
					this.showRequestPopup();
				} else {
					this.showErrorMessage(res.message)
				}
			});
		},
		//返回首页
		onNavigationBarButtonTap(e) {
			if (e.index === 0) {
				goHome();
			}
		},
		//拦截返回按钮事件
		onBackPress(e) {},

		onPullDownRefresh() {},

		mounted() {},
		methods: {
			closeScan() {
				this.resizeCollapse();
			},
			resizeCollapse() {
				this.$nextTick(r => {
					this.$refs.comRepleinshDetailCard.forEach(r => {
						r.resizeCollapse();
					})
				});
			},
			showRequestPopup() {
				this.$refs.comRepleinshRequestPopup.openRequestPopup();
			},

			//确定需求信息
			requestConfirm(action, item) {
				if (item.itemCode == '' || item.itemCode == null) return;
				let that = this;
				let request = that.requestList.find(r => r.itemCode == item.itemCode);
				if (request == undefined) {
					that.requestList.push(item);
					this.getRecommendInfo(item);

				} else {
					this.$refs.comMessage.showQuestionMessage('已经存在零件[' + item.itemCode + ']的需求信息,是否要修改?', res => {
						if (res) {
							request.qty = item.qty;
							that.detailSource.forEach(detail => {
								let index = detail.Items.findIndex(r => {
									r.itemCode == item.itemCode
								})
								detail.Items.splice(index, 1);
							})
							this.getRecommendInfo(item);
						}
					});
				}
			},

			getRecommendInfo(item) {
				let that = this;
				uni.showLoading({
					title: '加载中...',
					mask: true
				})
				getBalanceByBatchOffShelf(item.itemCode, item.qty).then(res => {
					if (res.data == null) {
						that.showMessage('未获取到推荐信息');
					} else {
						if (res.data.length > 0) {
							res.data.forEach(r => {
								r.toLocationCode = item.toLocation.code;
								that.subList.push(r);
							})

							that.detailSource = getDataSource(that.detailSource, that.subList)
							//要修改一下数量
							that.detailSource.forEach(detail => {
								detail.Items.forEach(i => {
									let request = that.requestList.find(r => r
										.itemCode == i
										.itemCode);
									i.qty = request.qty;
								})
							})
							// that.resizeCollapse();
						} else {
							that.showMessage('列表数据为0');
						}
						uni.hideLoading();
					}
				}).catch(error => {
					uni.hideLoading()
					that.showErrorMessage(error)
				})
			},


			caclcQty() {
				var totalQty = 0;
				this.detailSource.subList.forEach(res => {
					totalQty += res.qty
				})
				this.detailSource.totalQty = totalQty;
			},

			openScanDetailPopup() {
				var datacontent = {}
				//克隆对象，深度克隆，防止双向绑定同一个变量
				// Object.assign(datacontent, this.detailSource);
				var dataContent = {
					allowModifyPackingNumber: "FALSE",
					outInventoryStatuses: this.fromInventoryStatuses
				}
				this.$refs.comScanIssuePack.openScanPopup(this.detailSource, dataContent);
			},

			closeScanPopup() {
				this.updateCommitBtn();
			},

			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 += Number(res.qty)
							})
							batch.handleQty = handleQty;
							itemHandleQty += handleQty;
						}
					})
				}
				this.resizeCollapse();
				// item.handleQty=itemHandleQty;
				// this.closeScan();
			},

			showErrorMessage(message) {
				this.$refs.comMessage.showErrorMessage(message, res => {
					if (res) {

					}
				});
			},

			calcHandleQty() {
				for (let item of this.detailSource) {
					item.qty = 0;
					for (let detail of item.subList) {
						if (detail != undefined) {
							item.qty += Number(detail.qty)
						}
					}
				}
				this.$forceUpdate();
			},

			removeItem(index, item) {
				this.detailSource.splice(index, 1)
			},

			removePack() {
				for (var i = 0; i < this.detailSource.length; i++) {
					var item = this.detailSource[i];
					if (item.subList.length == 0) {
						this.detailSource.splice(i, 1)
					}
				}
				this.updateData();
			},

			openScanPopup() {
				this.$refs.scanPopup.openScanPopupForType(this.fromLocationCode, this.businessType);
			},

			showFromLocationPopup() {
				this.$nextTick(() => {
					this.$refs.scanLocationCode.openScanPopup();
				})

			},

			closeScanPopup() {
				this.$refs.scanPopup.closeScanPopup();
			},

			scanPopupGetFocus() {
				if (this.$refs.scanPopup != undefined) {
					this.$refs.scanPopup.getfocus();
				}
			},

			scanLocationCode(location, code) {
				this.toLocationCode = code
				this.toLocationCode = location;

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

				//目前任务只到一个库位
				var itemCodes = []
				let locationCode = this.detailSource[0].toLocationCode
				this.detailSource.forEach(toLocation => {
					toLocation.Items.forEach(item => {
						itemCodes.push(item.itemCode)
					})
				})

				//获取管理模式，封装参数
				getManagementPrecisions(itemCodes, locationCode, res => {
					if (res.success) {
						this.managementList = res.list;
						this.submitJob();
					} else {
						uni.hideLoading();
						this.showErrorMessage(res.message);
					}
				});

			},

			submitJob() {
				var params = this.setParams()
				console.log("提交参数", JSON.stringify(params));

				repleinshRecordSubmit(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)
				})
			},
			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.fromBatch = r.batch;
										record.fromContainerNumber = r
											.ContainerNumber;

										record.toContainerNumber = r
											.ContainerNumber;
										record.toInventoryStatus = r
											.inventoryStatus;
										record.toLocationCode = subItem
											.toLocationCode;
										record.fromLocationCode = fromLocation.fromLocationCode
										record.supplierCode = r.supplierCode;

										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(subItem);
								}
							})
						})
					})
				})

				this.dataContent.subList = subList
				this.dataContent.createTime = createTime;
				this.dataContent.creator = creator;
				return this.dataContent;
			},


			showMessage(message) {
				this.$refs.comMessage.showMessage(message, res => {
					if (res) {}
				});
			},
			showErrorMessage(message) {
				this.$refs.comMessage.showErrorMessage(message, res => {
					if (res) {

					}
				});
			},

			showScanMessage(message) {
				this.$refs.comMessage.showScanMessage(message);
			},

			afterCloseMessage() {
				this.scanPopupGetFocus();
			},

			closeScanMessage() {
				this.scanPopupGetFocus();
			},
			getLocation(location, code) {
				this.getToLocationCode(location, code)
			},
			getFromLocationCode(location, code) {
				this.fromLocationCode = code;
				this.openScanPopup();
			},
			getToLocationCode(location, code) {
				// if (this.fromLocationCode == code) {
				// 	uni.showToast({
				// 		title: "来源库位[" + this.fromLocationCode + "]不能与目标库位[" + code + "]一致",
				// 		duration: 2000
				// 	})
				// 	return
				// }
				this.ToLocationCodeInfo = location;
				this.toLocationCode = code;
			},

			showCommitSuccessMessage(hint) {
				this.$refs.comMessage.showSuccessMessage(hint, res => {
					this.clearData();
				})
			},
			clearData() {
				this.fromLocationCode = '';
				this.detailSource = [];
				this.requestList = [];
				this.dataContent = {}
				this.managementList = []
			},

		}
	}
</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>
