<template>
	<view class="page-wraper">
		<view class="">
			<com-blank-view @goScan='openScanPopup' v-if="currentPackage==null"></com-blank-view>
		</view>
		<view class="page-wraper" v-if="currentPackage!=null">
			<view class="page-main">
				<uni-collapse>
					<uni-collapse-item>
						<template v-slot:title>
							<view class="card_itemName" style="padding: 3px 5px; font-size: 28rpx;">
								变更前包装信息
							</view>
						</template>
						<PackageAndItemCard :dataContent='currentPackage'></PackageAndItemCard>
					</uni-collapse-item>
				</uni-collapse>

				<view>
					<scroll-view scroll-y="true" class="">
						<view class="" v-for="(item, index) in fgList" :key="index">
							<uni-swipe-action>
								<uni-swipe-action-item :right-options="options">
									<view class="uni-flex uni-row "
										style="margin-left: 50rpx; padding-top: 10rpx; padding-bottom: 10rpx;">
										<!-- scan_view -->
										<view class="auto-wrap"
											style="font-size: 35rpx;font-weight: bold; width: 100%;">
											<text style="font-size: 30rpx;color: #B66463;">唯一码 </text>
											{{item.remark}}
										</view>
									</view>
								</uni-swipe-action-item>
							</uni-swipe-action>
							<u-line color="#D8D8D8"></u-line>
						</view>
					</scroll-view>
				</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 class="uni-flex uni-row  u-col-center">
							<text style="font-size: 28rpx;">变更后物料</text>
							<view class="uni-flex u-col-center uni-row" @click="showSelect">
								<view class="card_itemCode" style="margin-left: 20rpx; color: blue;">
									{{toItemCode}}
								</view>
								<view class="">
									<image src="/static/icons/down.svg" mode=""
										style=" width: 40rpx;height: 40rpx;margin-left: 20rpx;" @click="showSelect">
									</image>
								</view>
								<u-select v-model="show" mode="single-column" :list="toItemList"
									@confirm="confirmSelect"></u-select>
							</view>
						</view>
					</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>

		<win-com-scan-balance ref="scanPopup" @getBalance='getPackScanResult' :bussinessCode="bussinessCode">
		</win-com-scan-balance>

		<win-scan-fg-label ref="scanPopup" @getResult='getFgScanResult' title='制品标签'></win-scan-fg-label>
		<!-- <win-scan-pack ref="scanPopup" @getResult='getScanResult' title="制品标签" headerType="HMQ"></win-scan-pack> -->
		<comMessage ref="comMessage"></comMessage>
	</view>
</template>

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

	import {
		getPrecisionStrategyList
	} from '@/common/balance.js';
	import {
		goHome,
		getPackingNumberAndBatchByList,
		deepCopyData,
		getRemoveOption
	} from '@/common/basic.js';

	import {
		calc
	} from '@/common/calc.js';

	import {
		Decimal
	} from 'decimal.js'; //引入

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

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

	import winScanButton from '@/mycomponents/scan/winScanButton.vue'
	import winScanPack from '@/mycomponents/scan/winScanPack.vue'
	import comProductRecord from '@/pages/productReceipt/coms/comProductRecord.vue'
	import comBlankView from '@/mycomponents/common/comBlankView.vue'
	import PackageAndItemCard from '@/mycomponents/package/PackageAndItemCard.vue'
	import winComScanBalance from '@/mycomponents/scan/winComScanBalance.vue'
	import winScanFgLabel from "@/mycomponents/scan/winScanFgLabel.vue"

	export default {
		components: {
			winScanButton,
			winScanPack,
			comProductRecord,
			comBlankView,
			PackageAndItemCard,
			winComScanBalance,
			winScanFgLabel
		},
		data() {
			return {
				detailSource: [], //绑定在页面上的数据源
				toLocationCode: "",
				fromLocationTypeList: [],
				fromLocationCode: "",
				businessType: {},
				dataContent: {},
				managementList: [],
				show: false,
				toItemCode: "请选择变更后物料",
				toItemList: [],
				fgList: [],
				options: [],
				currentPackage: null,
				bussinessCode: "Relegate"
			};
		},
		mounted() {

		},
		onLoad(option) {
			uni.setNavigationBarTitle({
				title: option.title
			});
			this.getBusinessType();
			this.options = getRemoveOption()
		},
		//返回首页
		onNavigationBarButtonTap(e) {
			if (e.index === 0) {
				goHome();
			}
		},
		//拦截返回按钮事件
		onBackPress(e) {},

		onPullDownRefresh() {},

		mounted() {},
		methods: {
			getBusinessType() {
				getBusinessType(this.bussinessCode, res => {
					if (res.success) {
						this.businessType = res.businessType;
						this.fromInventoryStatuses = getDirectoryItemArray(res.fromInventoryStatuses);
						this.fromLocationAreaTypeList = res.fromLocationAreaTypeList
						this.openScanPopup();
					} else {
						this.showErrorMessage(res.message)
					}
				});
			},


			getPackScanResult(result) {
				let label = result.label;
				let pack = result.package;
				uni.showLoading({
					title: '加载中...',
					mask: true
				})
				let params = {
					available: "TRUE",
					changeBeforeCode: pack.itemCode,
					pageSize: 20,
					pageNo: 1
				};

				getSpareitemcode(params).then(res => {
					uni.hideLoading();
					if (res.data.list.length == 0) {
						this.showErrorMessage('未查找到变更后的物料,请在《量产件备件关系中进行配置》')
						return;
					} else {
						this.closeScanPopup();

						res.data.list.forEach(r => {
							r.value = r.code;
							r.label = r.code + "(" + r.name + ")";
						})

						this.toItemList = res.data.list;
						if (res.data.list.length == 1) {
							this.toItemCode = res.data.list[0].code;
						} else {
							this.show = true;
						}

						//查询唯一码
						getProductreceiptDetailbByPackingNumber(pack.number).then(res => {
							if (res.data.length > 0) {
								this.fgList = res.data;
								let pack = result.package;
								let balance = result.balance;
								this.currentPackage = result.package;
								this.currentPackage.packingNumber = pack.number;
								this.currentPackage.locationCode = balance.locationCode;
								this.currentPackage.inventoryStatus = balance.inventoryStatus;
								//this.getDataSource(result);
							} else {
								this.showErrorMessage('箱码【' + pack.number + '】未查找到绑定的灯码信息')
							}
						}).catch(res => {
							this.showErrorMessage(res.message);
						})



					}
				}).catch(res => {
					this.showErrorMessage(res.message);
				})
			},

			getFgScanResult(result) {
				let that = this;
				var itemIndex = this.allList.findIndex(r =>
					r.content == result.content);
				//不存在
				if (itemIndex == -1) {
					// if (this.allList.length > this.dataContent.packQty) {
					// 	this.showErrorMessage("唯一码数量不能大于计划数量")
					// 	return;
					// }
					result.countTime = new Date();
					this.allList.push(result);
					this.allList.sort(compare('countTime')); //按扫描信息排序
					this.initList()
					this.scanPopupGetFocus();
					this.calcFgQty();
				} else {
					this.$refs.comMessage.showQuestionMessage("唯一码【" + result.content +
						'】已经扫描，是否移除',
						res => {
							if (res) {
								this.allList.splice(itemIndex, 1)
								this.allList.sort(compare('countTime')); //按扫描信息排序
								this.initList()
								that.calcFgQty();
							}
						})
				}

			},


			openScanPopup() {
				setTimeout(r => {
					this.$refs.scanPopup.openScanPopup(this.businessType);
					this.scanPopupGetFocus();
				})
			},

			commit() {
				if (this.positionInfo == "请选择位置") {
					this.showMessage("请先选择位置")
					return;
				}

				if (this.detailSource.length > 0 && this.detailSource[0].subList.length > 0) {
					//查询管理模式
					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))
							productionReceiptRecordSubmit(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);
						}
					})
				} else {
					this.showErrorMessage("没有要提交的数据,请先扫描")
				}

			},
			setPrecisionStrategParams() {
				var itemList = []
				this.detailSource.forEach(item => {
					item.subList.forEach(detail => {
						if (detail.scaned) {
							detail.toLocationCode = this.fgLocationCode;
							var filterResult = itemList.filter(res => {
								if (res.itemCode == item.itemCode &&
									detail.toLocationCode == res.locationCode) {
									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 submitItem = deepCopyData(detail)
							var info = getPackingNumberAndBatchByList(this.managementList, detail.itemCode,
								detail.packingNumber, detail.toLocationCode, detail.batch);
							submitItem.itemCode = detail.itemCode;
							submitItem.itemName = detail.package.itemName;
							submitItem.itemDesc1 = detail.package.itemDesc1;
							submitItem.itemDesc2 = detail.package.itemDesc2;

							submitItem.inventoryStatus = detail.inventoryStatus;

							submitItem.fromPackingNumber = info.packingNumber;
							submitItem.toPackingNumber = info.packingNumber;

							submitItem.fromContainerNumber = detail.containerNumber;
							submitItem.toContainerNumber = detail.containerNumber

							submitItem.fromBatch = info.batch;
							submitItem.toBatch = info.batch;

							submitItem.fromLocationCode = detail.locationCode;
							submitItem.toLocationCode = detail.toLocationCode;

							submitItem.productionlineCode = this.productionLineCode;
							submitItem.workStationCode = this.workStationCode;

							submitItem.qty = detail.handleQty;
							submitItem.package = "";

							subList.push(submitItem)
						}
					})
				})
				this.dataContent.subList = subList;
				this.dataContent.creator = creator;
				this.dataContent.workshopCode = this.workshopCode;
				return this.dataContent;
			},


			showMessage(message) {
				setTimeout(r => {
					this.scanPopupLoseFocus();
					this.$refs.comMessage.showMessage(message, res => {
						if (res) {
							this.scanPopupGetFocus();
						}
					});
				})
			},

			showErrorMessage(message) {
				setTimeout(r => {
					this.scanPopupLoseFocus();
					this.$refs.comMessage.showErrorMessage(message, res => {
						if (res) {
							this.scanPopupGetFocus();
						}
					});
				})
			},

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

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

			scanPopupLoseFocus() {
				if (this.$refs.scanPopup != undefined) {
					this.$refs.scanPopup.losefocus();
				}
			},

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

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

			showCommitSuccessMessage(hint) {
				this.$refs.comMessage.showSuccessMessage(hint, res => {
					this.clearData();
				})
			},
			clearData() {
				this.subList = [];
				this.detailSource = [];
				this.toLocationCode = '';
				this.dataContent = {};
				this.positionInfo = "请选择位置";
				this.fgLocationCode = ""
			},
			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();
			},

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

			showSelect() {
				this.show = !this.show

			},
			confirmSelect(e) {
				this.toItemCode = e[0].value;
			},
		}
	}
</script>

<style scoped lang="scss">
</style>