<template>
	<view class="page-container uni-column">
		<view class="carrier-info uni-column">
			<view class="carrier-code uni-row">
				<text>箱号</text>
				<text style="margin-left: 24rpx;">{{processInspecion.lot.allCarrierName}}</text>
			</view>
			<view class="info-row uni-row">
				<view class="label">图号</view>
				<view class="value">{{ processInspecion.lot.drawingNumber }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">批次号</view>
				<view class="value">{{ processInspecion.lot.lotCode }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">工艺版本</view>
				<view class="value">{{ processInspecion.lot.technologyVersion }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">产品描述</view>
				<view class="value">{{processInspecion.lot. productDescription }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">当前工序</view>
				<view class="value">{{ processInspecion.lot.processAlias }}</view>
			</view>
			<view class="info-row uni-row">
				<view class="label">投产数量</view>
				<view class="value">{{ processInspecion.lot.pudName }}</view>
			</view>
		</view>

		<!-- 废品信息 -->
		<view class="title unfit-title uni-row">
			<text>废品信息</text>
			<view class="add-btn" @click="handleAddWaste">添加</view>
		</view>
		<view class="unfit-container">
			<view class="unfit-item-container uni-column" v-for="(item, index) in unfitInfos" :key="index">
				<!-- 暂时注释，后续会使用 -->
				<!-- <view class="title uni-row">
					<text>检查项-{{ item.title }}</text>
					<uni-icons type="trash" size="24" color="#fc6565" @click="handleDelWaste(index)" />
				</view> -->
				<!-- <view class="standard">检查标准：{{ item.standard }}</view> -->
				<view class="resu uni-row">
					<view class="label">检查标准</view>
					<input v-model="item.checkStandard" placeholder="请输入检查标准" />
					<uni-icons type="trash" size="24" style="margin-left: 55rpx;" color="#fc6565"
						@click="handleDelWaste(index)" />
				</view>

				<view class="result uni-row">
					<view class="label">检查结果</view>
					<input v-model="item.checkResult" placeholder="请输入检查结果" />
					<view class="label" style="text-align: right; padding-right: 16rpx;">数量
					</view>
					<input class="number" type="number" @blur="rejectNumberChange" v-model="item.rejectNum"
						placeholder="" />
				</view>
			</view>
		</view>

		<!-- 咨询部分 -->
		<view class="title">咨询</view>
		<view class="consultation-container uni-column">
			<view class="consultation-item-container" v-for="(item, index) in consultations" :key="index">
				<view class="question uni-column">
					<view class="label uni-row">
						<text>问题描述</text>
						<text :style="selectType(item)">{{ selectText(item) }}</text>
					</view>
					<view class="content">{{ item.content }}</view>
				</view>
				<!-- 不需要暂时注释 -->
				<!-- 	<view v-if="item.answer !== ''" class="answer"
					style="margin-top: 24rpx; padding-top: 24rpx; border-top: 1px dotted #aaaaaa;">
					<view class="label">回复</view>
					<view class="content">{{ item.answer }}</view>
				</view> -->
			</view>
		</view>

		<!-- 报工部分 -->
		<view class="daywork-container">
			<!--  此处后续要加上条件限制，当状态为合格或不合格的时候不能修改状态，需要有权限的人来进行修改 -->
			<view class="result uni-row">
				<view class="label">检测量</view>
				<input type="number" v-model="processInspecion.examiningNum" placeholder="请输入检测量" />
				<view class="label" style="text-align: right; padding-right: 24rpx">废品量</view>
				<input type="number" v-model="processInspecion.rejectNum" placeholder="请输入废品量" />
			</view>
			<view class="result uni-row">
				<view class="label" style="margin-top: 20rpx; margin-right: 10rpx;">序检状态</view>
				<uni-data-checkbox style="margin-top: 20rpx;" v-model="processInspecion.status" :localdata="range"
					@change="change"></uni-data-checkbox>
			</view>
			<view class="remark uni-row">
				<view class="label">备注</view>
				<textarea v-model="processInspecion.remark" />
			</view>

			<view class="btns-container uni-row">
				<view class="finished-btn" @click="endWork">结束报工</view>
				<view class="question-btn uni-column" @click.stop="handleAddConsultation">
					<uni-icons type="headphones" size="24" />
					<text>咨询</text>
				</view>
			</view>

		</view>
	</view>
</template>

<script setup>
	import {
		ref,
		onMounted,
		getCurrentInstance

	} from 'vue'
	import {
		onLoad,
		onReady,
		onUnload,
		onShow
	} from '@dcloudio/uni-app'
	import {
		store
	} from '@/store/index.js'
	import {
		saveOutsourcedInspecion,
		selectOutsourcedInspecion
	} from '@/api/business/processInspection.js'
	const lot = ref({})
	const unfitInfos = ref([]) //废品信息
	const isEventTriggered = ref(false); // 创建一个标志位
	// 创建一个引用来存储最后一次请求的时间戳
	const lastRequestTimestamp = ref(0);
	const consultations = ref([]) //咨询信息
	const processInspecion = ref({
		remark: "",
		rejectNum: 0,
		examiningNum: 0,
		status: 0,
	})

	const consul = [{
		value: 0,
		text: "待确认",
		type: "color: #fcab53"
	}, {
		value: 2,
		text: "合格",
		type: "color: #55ff7f"
	}, {
		value: 1,
		text: "不合格",
		type: "color: #ff0c2c"
	}]

	const range = [{
		value: 0,
		text: "待确认",
		type: "color: #fcab53"
	}, {
		value: 1,
		text: "合格",
		type: "color: #55ff7f"
	}, {
		value: 2,
		text: "不合格",
		type: "color: #ff0c2c"
	}]

	/***************************** 页面生命周期函数 *****************************/

	onMounted(() => {
		const instance = getCurrentInstance().proxy
		const eventChannel = instance.getOpenerEventChannel();
		eventChannel.on('outsourcedInspectionFrom', function(data) {
			console.log('outsourcedInspectionFrom', data)
			if (data && data.data) {
				processInspecion.value.lot = data.data;

			}
		})

	})

	onShow(() => {
		if (store.processInspection != null) {
			uni.showLoading({
				title: '加载中'
			});
			processInspecion.value = store.processInspection
			selectOutsourcedInspecion(processInspecion.value).then(res => {
				console.log("res", res);
				if (res.code == 200) {
					processInspecion.value = res.data;
					unfitInfos.value = res.data.dayworkItemRejects;
					consultations.value = res.data.dayworkItemConsults;
					console.log("res", res);
					uni.hideLoading();
					// getInspecion();
				} else {
					uni.showToast({
						icon: 'none',
						title: res.msg,
						duration: 2000
					})
				}
			});
		}
	})

	/***************************** 定义了一些方法 *****************************/
	//咨询文本
	function selectText(item) {
		for (var i = 0; i < consul.length; i++) {
			if (item.status == consul[i].value) {
				return consul[i].text
			}
		}
	}

	const rejectNumberChange = () => {
		let sumReject = 0
		unfitInfos.value.forEach(v => {
			sumReject += Number(v.rejectNum)
		})
		processInspecion.value.rejectNum = sumReject
		console.log(processInspecion.value)
	}

	//查询咨询列表
	function getInspecion() {
		processInspecion.value = store.processInspection
		selectInspecion(processInspecion.value).then(res => {
			console.log("咨询", res);
			if (res.code == 200) {
				console.log("res", res);
			} else {
				uni.showToast({
					icon: 'none',
					title: res.msg,
					duration: 2000
				})
			}
		});
	}

	//结束报工按钮
	function endWork() {
		let unf = unfitInfos.value;
		for (var i = 0; i < unfitInfos.value.length; i++) {
			console.log("废品信息");
			if (!unf[i].checkStandard && !unf[i].checkResult && !unf[i].rejectNum) {
				uni.showToast({
					icon: 'none',
					title: "废品信息不能为空",
					duration: 2000
				})
				return;
			}
		}

		let sumReject = 0
		unfitInfos.value.forEach(v => {
			sumReject += Number(v.rejectNum)
		})
		if (processInspecion.value.rejectNum != sumReject) {
			uni.showToast({
				icon: 'none',
				title: "废品量与废品信息不一致",
				duration: 2000
			})
			return;
		}

		save();


	}


	function save() {
		const currentTime = Date.now();

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

		let pages = getCurrentPages();
		processInspecion.value.dayworkItemConsults = consultations.value;
		processInspecion.value.dayworkItemRejects = unfitInfos.value;
		processInspecion.value.user = store.userInfo;

		saveOutsourcedInspecion(processInspecion.value).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
				})
			}
		});
	}




	//咨询样式
	function selectType(item) {
		for (var i = 0; i < consul.length; i++) {
			if (item.status == consul[i].value) {
				return consul[i].type
			}
		}
	}

	const addWasteInfo = (data) => {
		const info = {
			title: data.title,
			checkStandard: data.standard
		}
		unfitInfos.value.push(info)
	}
	const addConsultation = (data) => {
		const info = {
			content: data.question,
			status: 0
		}
		consultations.value.push(info)
		isEventTriggered.value = true; // 更新标志位状态
	}

	/***************************** 定义了一些事件 *****************************/
	// 添加不合格信息
	const handleAddWaste = () => {
		let info = {}
		unfitInfos.value.push(info)

		// 监听事件，暂时不用，后续会使用
		// uni.$once('addWasteInfoEvent', (data) => {
		// 	addWasteInfo(data)
		// })
		// uni.navigateTo({
		// 	url: "/pages/processInspection/options"
		// })
	}
	// 删除不合格信息
	const handleDelWaste = (index) => {
		uni.showModal({
			title: '提示',
			content: '确定删除该项？',
			success: function(res) {
				if (res.confirm) {
					unfitInfos.value.splice(index, 1)
				} else if (res.cancel) {
					return
				}
			}
		})
	}

	// 咨询
	const handleAddConsultation = () => {
		isEventTriggered.value = false;
		// 监听事件
		uni.$once('wasteConsultationEvent', (data) => {
			if (!isEventTriggered.value) {
				// 如果事件尚未触发，则执行事件触发逻辑
				addConsultation(data)
			}
		})

		uni.navigateTo({
			url: "/pages/outsourcedInspection/consultation",
			success: (res) => {
				// 通过eventChannel向被打开页面传送数据
				res.eventChannel.emit("outsourcedInspectionConsultation", {
					data: processInspecion.value.lot
				})
			}
		})
	}
</script>

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

		>.title {
			font-weight: 700;
			margin: 24rpx 16rpx;
		}
	}

	.carrier-info {
		margin: 32rpx 16rpx 0 16rpx;
		padding: 24rpx;
		background-color: #ffffff;
		border-radius: 8rpx;

		.carrier-code {
			font-size: 32rpx;
			font-weight: 700;
		}

		.info-row {
			margin-top: 16rpx;
			color: #767676;

			.label {
				width: 160rpx;
			}

			.value {
				flex: 1;

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

	.unfit-title {
		margin-bottom: 24rpx;
		justify-content: space-between;
		align-items: center;

		text {
			font-size: 28rpx;
			font-weight: 700;
		}

		.add-btn {
			padding: 12rpx 32rpx;
			background-color: #a4adb3;
			color: #ffffff;
			border-radius: 12rpx;
			font-size: 24rpx;
		}
	}

	.unfit-container {
		padding: 24rpx;
		margin: 0 16rpx;
		background-color: #ffffff;
		border-radius: 12rpx;

		.unfit-item-container {
			position: relative;

			>* {
				margin-bottom: 24rpx;
			}

			.title {
				font-weight: 700;
				justify-content: space-between;
				align-items: center;

				image {
					width: 40rpx;
					height: 40rpx;
				}
			}

			.standard {}

			.resu {
				width: 100%;
				align-items: center;

				input {
					margin-left: 20rpx;
					width: 200rpx;
					height: 56rpx;
					flex: 1;
					border: 1px solid #9f9f9f;
					font-size: 28rpx;
				}
			}

			.result {
				align-items: center;
				border-bottom: 1px solid #9f9f9f;
				padding-bottom: 32rpx;

				.label {
					flex: 1;
				}

				input {
					width: 280rpx;
					height: 56rpx;
					border: 1px solid #9f9f9f;
					font-size: 28rpx;

					&.number {
						width: 104rpx;
						text-align: center;
					}
				}
			}
		}

		.unfit-item-container:last-child {
			.result {
				border-bottom: none;
				padding-bottom: 0;
			}
		}
	}

	.consultation-container {
		margin: 0 16rpx;
		padding: 24rpx;
		background-color: #ffffff;
		border-radius: 8rpx;

		.consultation-item-container {
			margin-bottom: 24rpx;
			border-bottom: 2px solid #888888;
			padding-bottom: 24rpx;
		}

		.consultation-item-container:last-child {
			margin-bottom: 0;
			border-bottom: 0;
			padding-bottom: 0;
		}

		.question,
		.answer {
			.label {
				justify-content: space-between;
				margin-bottom: 16rpx;
				font-weight: 700;
			}

			.content {
				line-height: 40rpx;
			}
		}

		.answer {
			margin-top: 24rpx;
		}
	}

	.daywork-container {
		margin-top: 24rpx;
		padding: 24rpx;
		background-color: #ffffff;
		border: 1px solid #bcbcbc;

		.result {
			align-items: center;

			.label {
				width: 112rpx;
			}

			input {
				flex: 1;
				height: 56rpx;
				border: 1px solid #9f9f9f;
				font-size: 28rpx;
				text-align: center;
			}
		}

		.remark {
			margin-top: 24rpx;

			.label {
				width: 112rpx;
			}

			textarea {
				flex: 1;
				border: 1px solid #9f9f9f;
				height: 168rpx;
			}
		}

		.btns-container {
			margin-top: 24rpx;

			.finished-btn {
				display: flex;
				flex: 1;
				height: 80rpx;
				background-color: #fc6565;
				color: #ffffff;
				text-align: center;
				justify-content: center;
				align-items: center;
				border-radius: 8rpx;
			}

			.question-btn {
				width: 80rpx;
				align-items: flex-end;

				image {
					width: 48rpx;
					height: 48rpx;
				}

				text {
					font-size: 24rpx;
				}
			}
		}
	}
</style>