<template>
	<view class="page-container uni-column">
		<view class="consultation-container uni-column">
			<view class="title uni-row">箱号：{{ lot.carrierCode }}</view>
			<view class="info-row uni-row">
				<view class="label">批次号</view>
				<view class="value">{{ lot.lotCode }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">产品描述</view>
				<view class="value">{{ lot.productDescription }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">外协工序</view>
				<view class="value">{{ lot.processNames }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">投产数量</view>
				<view class="value">{{ lot.pudName }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">批次箱号</view>
				<view class="value">{{ lot.allCarrierName }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">检查箱号</view>
				<view class="value">{{ lot.inspectionCarrierCode }}</view>
			</view>
			<!-- <input type="text" v-model="carrierCode" placeholder="请输入箱号或检查载具号" /> -->
			<view class="btn uni-row" style="background-color: #ff5555;" @click.stop="handleScanCode">
				<uni-icons type="scan" size="16" style="color: #ffffff; margin-right: 8rpx;" />
				<text>扫描箱码或载具二维码</text>
			</view>
			<!-- <view class="btn uni-row" style="margin-top: 48rpx;" @click.stop="handleConfirm">箱码确定</view>
			<view class="btn uni-row" style="background-color: #26d01d;" @click.stop="handleSave">保存
			</view> -->
			<view class="btn uni-row" style="margin-top: 48rpx;" @click.stop="handleSave">保存</view>
		</view>
		<dialog-processInspection ref='selectProcessInspection'
			@handleSelectProcessInspection='handleSelectProcessInspection'></dialog-processInspection>
	</view>
</template>

<script setup>
	import {
		ref
	} from 'vue'
	import {
		onLoad,
		onReady,
		onUnload,
		onShow
	} from '@dcloudio/uni-app'
	import {
		saveOutsourcedInspecion,
		getLotInfo,
		getCarrierInfo,
		getLotOutsourcedInfo
	} from '@/api/business/processInspection.js'
	import {
		store
	} from '../../store';
	import {
		debounce
	} from '../../utils/common';
	const carrierCode = ref('')
	const lot = ref({})
	const query = ref({})
	const selectProcessInspection = ref(null)
	const lastRequestTimestamp = ref(0);

	// 页面生命周期函数
	onLoad(() => {})

	const handleScanCode = () => {
		// 引入原生插件
		const mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module");
		if (mpaasScanModule) {
			// 调用插件的 mpaasScan 方法
			mpaasScanModule.mpaasScan({
					// 扫码识别类型，参数可多选，qrCode、barCode，
					// 如不设置，默认识别所有扫码类型，可能有些许影响识别效率
					scanType: ["qrCode", "barCode"],
					// 是否隐藏相册，默认false不隐藏
					hideAlbum: false,
				},
				(ret) => {
					console.log(ret)
					const result = {
						carrierCode: ret.resp_result,
						processCode: ''
					}
					if (!result.carrierCode || result.carrierCode == "") {
						uni.showToast({
							icon: "none",
							title: "请扫载具码",
							duration: 1000
						})
						return
					}
					//判断该箱是否绑定批次

					result.processCode = store.outsourcedCode;
					// console.log(result.processCode)
					/************************ 根据扫码查询到的数据和需要检查的工序查询信息 ************************/
					getCarrierInfo(result).then(response => {
						if (response.code == 200) {
							// 判断是哪种返回值 假设是想信息则给lot附检查箱信息
							// 假设是dayworkCarriers 则 判断是几个批次，假设为多批，则弹出选择框。
							if (response.data.dayworkCarriers != null) {
								if (response.data.dayworkCarriers.length > 1) {
									query.value = result;
									selectProcessInspection.value.open(response.data.dayworkCarriers)
								} else {
									// console.log(response)
									uni.showLoading({
										title: '加载中'
									});
									// 此处根据拿到的箱子id， 获取到相对应的【 lot_id】，【 lot_code】， 以及该批次关联的其它箱号
									// 需要定义一个请求方法， 从后端获取
									getLotOutsourcedInfo(result).then(res => {
										if (res.code == 200) {
											lot.value = {
												...lot.value,
												...res.data,
												processNames: res.data.processList
											};
											lot.value.carrierCode = result.carrierCode
											carrierCode.value = result.carrierCode;
											// console.log("res", res);
											uni.hideLoading();
											checkSave()
										} else {
											uni.showToast({
												icon: 'none',
												title: res.msg,
												duration: 2000
											})
										}
									}).catch(err => {
										uni.showToast({
											icon: 'none',
											title: err.message,
											duration: 2000
										})
									})

								}
							} else if (response.data.inspectionCarrier != null) {
								console.log(response)
								lot.value.inspectionCarrierCode = response.data.inspectionCarrier.code
								lot.value.inspectionCarrierId = response.data.inspectionCarrier.id
								checkSave()
							}
						} else {
							uni.showToast({
								icon: 'none',
								title: response.msg,
								duration: 2000
							})
						}
					}).catch(err => {
						uni.showToast({
							icon: 'none',
							title: err.message,
							duration: 2000
						})
					})
				}
			)
		} else {
			const result = {
				carrierCode: '000381',
				processCode: store.outsourcedCode
			}
			getCarrierInfo(result).then(response => {
				if (response.code == 200) {
					// 判断是哪种返回值 假设是想信息则给lot附检查箱信息
					// 假设是dayworkCarriers 则 判断是几个批次，假设为多批，则弹出选择框。
					if (response.data.dayworkCarriers != null) {
						if (response.data.dayworkCarriers.length > 1) {
							query.value = result;
							selectProcessInspection.value.open(response.data.dayworkCarriers)
						} else {
							// console.log(response)
							uni.showLoading({
								title: '加载中'
							});
							// 此处根据拿到的箱子id， 获取到相对应的【 lot_id】，【 lot_code】， 以及该批次关联的其它箱号
							// 需要定义一个请求方法， 从后端获取
							getLotOutsourcedInfo(result).then(res => {
								if (res.code == 200) {
									console.log(res)
									lot.value = {
										...lot.value,
										...res.data,
										processNames: res.data.processList
									};
									lot.value.carrierCode = result.carrierCode
									carrierCode.value = result.carrierCode;
									lot.value.inspectionCarrierId = '1803605009546395652'
									lot.value.inspectionCarrierCode = "300041"
									// console.log("res", res);
									uni.hideLoading();
									// 判断是否批次号和检查箱码都扫完
									checkSave()
								} else {
									uni.showToast({
										icon: 'none',
										title: res.msg,
										duration: 2000
									})
								}
							}).catch(err => {
								uni.showToast({
									icon: 'none',
									title: err.message,
									duration: 2000
								})
							})

						}
					} else if (response.data.inspectionCarrier != null) {
						console.log(response)
						lot.value.inspectionCarrierCode = response.data.inspectionCarrier.code
						lot.value.inspectionCarrierId = response.data.inspectionCarrier.id
						// 判断是否批次号和检查箱码都扫完
						checkSave()
					}
				} else {
					uni.showToast({
						icon: 'none',
						title: response.msg,
						duration: 2000
					})
				}
			}).catch(err => {
				uni.showToast({
					icon: 'none',
					title: err.message,
					duration: 2000
				})
			})
		}
	}

	//选择批号弹窗带回
	function handleSelectProcessInspection(data) {
		// console.log("带回", data)
		query.value.lotCode = data
		uni.showLoading({
			title: '加载中'
		});
		getLotOutsourcedInfo(query.value).then(res => {
			if (res.code == 200) {
				lot.value = res.data;
				console.log(res)
				lot.value.carrierCode = query.value.carrierCode
				carrierCode.value = query.value.carrierCode;
				// console.log("res", res);
				uni.hideLoading();
			} else {
				uni.showToast({
					icon: 'none',
					title: res.msg,
					duration: 2000
				})
			}
		});
	}

	function checkSave() {
		// uni.showToast({
		// 	title: 'lotCode:' + lot.value.lotCode + 'inspectionCarrierId: ' + lot.value.inspectionCarrierId,
		// 	icon: 'none'
		// })
		if (lot.value.lotCode == '' || lot.value.lotCode == null) {
			debounce(handleScanCode, 700)
		}
		if (lot.value.inspectionCarrierId == null || lot.value.inspectionCarrierId == '') {
			debounce(handleScanCode, 700)
		}
	}

	// 确定后，将批次id，批次号，传递过去
	const handleConfirm = () => {
		/** 因为调试时无法扫码所以暂时用确定方法代替扫码 **/
		/** 调用查询方法查询箱号信息 **/
		/**
		 * 如果返回的是载具信息表示这是检查载具，将载具的id和code存到lot.inspectionCarrierId和lot.inspectionCarrierCode中
		 * 如果返回的是1条dayweorCarrier的载具绑定信息则调用查询方法查询批次信息
		 * 如果返回的是多条dayweorCarrier的载具绑定信息，则表示这是一箱多批需要调用选择批号弹窗在processInspection文件scan229行有对应的方法
		 * 
		 * */
		if (lot.carrierCode || carrierCode.value !== "") {
			// lot.value.carrierCode = carrierCode.value
			const result = {
				// ...lot.value
				carrierCode: carrierCode.value
			}
			result.processCode = store.outsourcedCode;
			// console.log(result.processCode)
			getCarrierInfo(result).then(response => {
				if (response.code == 200) {
					// 判断是哪种返回值 假设是想信息则给lot附检查箱信息
					// 假设是dayworkCarriers 则 判断是几个批次，假设为多批，则弹出选择框。
					if (response.data.dayworkCarriers != null) {
						if (response.data.dayworkCarriers.length > 1) {
							query.value = result;
							selectProcessInspection.value.open(response.data.dayworkCarriers)
						} else {
							// console.log(response)
							uni.showLoading({
								title: '加载中'
							});
							// 此处根据拿到的箱子id， 获取到相对应的【 lot_id】，【 lot_code】， 以及该批次关联的其它箱号

							// 需要定义一个请求方法， 从后端获取
							getLotOutsourcedInfo(result).then(res => {
								if (res.code == 200) {
									console.log(res)
									lot.value = {
										...lot.value,
										...res.data,
										processNames: res.data.processList
									};
									lot.value.carrierCode = result.carrierCode
									carrierCode.value = result.carrierCode;
									// console.log("res", res);
									uni.hideLoading();
								} else {
									uni.showToast({
										icon: 'none',
										title: res.msg,
										duration: 2000
									})
								}
							}).catch(err => {
								uni.showToast({
									icon: 'none',
									title: err.message,
									duration: 2000
								})
							})

						}
					} else if (response.data.inspectionCarrier != null) {
						console.log(response)
						lot.value.inspectionCarrierCode = response.data.inspectionCarrier.code
						lot.value.inspectionCarrierId = response.data.inspectionCarrier.id
					}
				} else {
					uni.showToast({
						icon: 'none',
						title: response.msg,
						duration: 2000
					})
				}
			}).catch(err => {
				uni.showToast({
					icon: 'none',
					title: err.message,
					duration: 2000
				})
			})
		} else {
			uni.showToast({
				icon: 'none',
				title: "请输入箱号",
				duration: 2000
			})
			return;
		}
	}

	const handleSave = () => {
		// 判断是否已有批次和检查载具
		if (lot.value.lotCode == '' || lot.value.lotCode == null) {
			uni.showToast({
				icon: 'none',
				title: "请先扫外协箱码",
				duration: 2000
			})
			return
		}
		if (lot.value.inspectionCarrierId == null) {
			uni.showToast({
				icon: 'none',
				title: "请先扫检查载具",
				duration: 2000
			})
			return
		}
		// 保存

		const currentTime = Date.now();

		// 检查是否已经过去了 2 秒
		if (currentTime - lastRequestTimestamp.value < 2000) {
			// 如果在 2 秒 内已经点击，那么不执行
			uni.showToast({
				icon: 'none',
				title: `请勿重复点击`,
				duration: 2000
			})
			return;
		}

		let pages = getCurrentPages();

		saveOutsourcedInspecion({
			lot: lot.value,
			user: store.userInfo,
			status: 0,
			inspectionCarrierCode: lot.value.inspectionCarrierCode,
			inspectionCarrierId: lot.value.inspectionCarrierId,
			outsourceOrderDetailId: lot.value.outsourceOrderDetailId,
			processNames: lot.value.processNames
		}).then(res => {
			if (res.code == 200) {
				let index = 0;
				for (let i = 0; i < pages.length; i++) {
					if (pages[i].$page.fullPath == "/pages/outsourcedInspection/index") {
						index = pages.length - i - 1;
					}
				}
				console.log("index", index);
				uni.navigateBack({
					delta: index
				});
			} else {
				uni.showToast({
					icon: 'none',
					title: res.msg,
					duration: 2000
				})
			}
		});
	}
</script>

<style lang="scss">
	.page-container {
		height: 100%;
		background-color: #ececec;
		font-size: 28rpx;
		padding: 24rpx;
		box-sizing: border-box;
	}

	.consultation-container {
		background-color: #ffffff;
		padding: 24rpx;
		border-radius: 12rpx;

		.title {
			justify-content: center;
			font-size: 32rpx;
			font-weight: 700;
		}

		.info-row {
			margin-top: 24rpx;

			.label {
				width: 160rpx;
			}

			.value {
				flex: 1;

				textarea {
					flex: 1;
					border: 1px solid #888888;
					box-sizing: border-box;
					padding: 16rpx;
				}
			}
		}

		.btn {
			background-color: #1684fc;
			color: #ffffff;
			border-radius: 8rpx;
			margin: 4rpx 24rpx 24rpx 24rpx;
			height: 64rpx;
			justify-content: center;
			align-items: center;
		}

		input {
			margin: 48rpx 24rpx 0 24rpx;
			height: 64rpx;
			border: 1px solid #888888;
			text-align: center;
		}
	}
</style>