<template>
	<dialog-base ref="baseDialog" title="结束报工">
		<view class="list-container">
			<view class="list-title uni-row">
				<text class="label">合格量</text>
				<input class="input" @input="handleInputQualifiedNum" style="width: 70%;"
					v-model="workInfo.qualifiedNum" placeholder="请输入合格量" />
			</view>
			<view class="list-title uni-row">
				<text class="label">废品信息</text>
				<view class="uni-row" style="justify-content: flex-end;"><text class="label" style="color: blue;"
						@click="handleAddWasteInfo">+添加</text></view>
			</view>
			<view class="list-title uni-row" v-for="(item, index) in wasteInfo">
				<input class="input" @input="handleInputRejectNum(item)" style="width: 20%;" v-model="item.rejectNum"
					placeholder="废品量" />
				<uni-data-select style="margin-left: 40rpx;width: 70%;" v-model="item.reason" :localdata="reasonList"
					@change="handleReasonChange(item)"></uni-data-select>

				<uni-icons class="icon-gear" type="close" size="40" color="red"
					@click="handleDeleteWasteInfo(index)"></uni-icons>
			</view>

			<view class="list-title uni-row">
				<text class="label">当前序是否完成</text><text>否</text>
				<switch class="switch" @change="switchChange" color="rgba(255,85,85,1)" />
				<text>是</text>
			</view>
			<view v-if="showCarrierList && !store.isPreProcess" class="confirmCarrier">
				<text class="label">确认载具</text>
				<view class="vehicleList uni-row">
					<view v-for="(item,index) in bindList" :key="index"
						:class="{ 'vehicleNo': true, 'uni-row': true, 'blueBorder': item.flag }">
						<text>{{item.carrierCode}}</text>
					</view>
				</view>
			</view>
		</view>
		<view v-if="store.isPreProcess" class="add-btn-container uni-row">
			<button type="default" class="btn" @click="handlePreFinishReporting">结束报工</button>
		</view>
		<view v-if="!store.isPreProcess" class="add-btn-container uni-row">
			<button v-if="showCarrierList" type="primary" class="btnScan" @click="handleScanCode">扫码确认载具</button>
			<button type="default" class="btn" @click="handleFinishReporting">结束报工</button>
		</view>
	</dialog-base>
</template>


<script setup>
	import {
		ref,
		getCurrentInstance
	} from 'vue'
	import {
		onLoad
	} from '@dcloudio/uni-app'
	import {
		updateDayWorkItem,
		saveDayWorkItem
	} from "@/api/business/dayWorkItem.js"
	import {
		getDayworkCarrierList
	} from '@/api/business/dayworkCarrier.js'
	import {
		store
	} from '@/store/index.js'
	import {
		timestampToTime,
		toHHmmss
	} from '@/utils/common.js'
	import {
		getDictInfoByType
	} from '@/api/dict/dict.js'
	import {
		getSpecialDeptProcessList
	} from '@/api/business/deptProcess.js'
	import {
		debounce
	} from '@/utils/common.js'
	import {
		getDayWorkItemList,
		listItem,
		getIsFirstOrder,
	} from '@/api/business/dayWorkItem.js'

	const baseDialog = ref(null)
	const workInfo = ref({})
	const wasteInfo = ref([])
	const reasonList = ref([])
	const emit = defineEmits(['resflushItem'])
	const showCarrierList = ref(false) // 工序是否完成显示载具列表
	const bindList = ref([])
	const confirmCarrierList = ref([])
	const isFirstOrder = ref(true); //是否为首序
	const endFlag = ref(0)
	const specialDeptProcessList = ref([])
	const temp = ref(0) // 保存workInfo.value.qualifiedNum的值(还原用)
	const lotPreSumReject = ref(0)
	const lotPreSumQualifiedNum = ref(0)
	const remainingQualifiedNum = ref(0) // 当前的合格量还能最大添加多少(剩余数量)

	onLoad(() => {})

	function open(data, itemListData) {
		console.log(store.isPreProcess)
		console.log("777")
		resetPage();
		workInfo.value = {
			...data,
		};
		console.log("数据data", workInfo);
		//查看是否为首序
		getIsFirst(store.dayworkInfo.id);
		workInfo.value.qualifiedNum = 0;
		Promise.all([getSpecialDeptProcessList(), listItem({
				dayworkId: store.dayworkInfo.id,
				status: 2
			}), ], )
			.then(([res, response]) => {
				if (res.code == 200 && response.code == 200) {
					for (let i = 0; i < res.data.length; i++) {
						specialDeptProcessList.value[i] = res.data[i].processId;
					}
					for (let i = 0; i < response.rows.length; i++) {
						if (response.rows[i].processId == workInfo.value.processId) {
							lotPreSumReject.value += response.rows[i].rejectSum;
							lotPreSumQualifiedNum.value += response.rows[i].qualifiedNum;
						}
					}

				}
				if (specialDeptProcessList.value.includes(workInfo.value.processId)) {
					workInfo.value.qualifiedNum = store.dayworkInfo.processQualifiedNum > 0 ?
						Math.max(0, store.dayworkInfo.processQualifiedNum - lotPreSumQualifiedNum.value -
							lotPreSumReject.value) :
						Math.max(0, store.dayworkInfo.productionQuantity - lotPreSumQualifiedNum.value - lotPreSumReject
							.value);
					// temp.value = workInfo.value.qualifiedNum;
				} else {
					workInfo.value.qualifiedNum = 0;
				}


			}).catch(err => {
				console.log('146 err')
			});
		init();
		baseDialog.value.open()
	}

	function close() {
		baseDialog.value.close()
	}

	function getIsFirst(dayworkId) {
		getIsFirstOrder(dayworkId).then(res => {
			if (res.code == 200) {
				isFirstOrder.value = res.data.isFirstOrder;
			}
		}).catch(err => {
			console.log(err)
		})
	}

	function resetPage() {
		workInfo.value.qualifiedNum = null;
		workInfo.value = {};
		wasteInfo.value = [];
		reasonList.value = [];
		showCarrierList.value = false;
		bindList.value = [];
		confirmCarrierList.value = [];
		endFlag.value = 0;
		lotPreSumReject.value = 0;
		lotPreSumQualifiedNum.value = 0;
		remainingQualifiedNum.value = 0;
	}

	function init() {
		getDictInfoByType("waste_causes").then(res => {
			for (let i = 0; i < res.data.length; i++) {
				reasonList.value[i] = {
					value: res.data[i].dictValue,
					text: res.data[i].dictLabel
				}
			}
		}).catch(err => {
			console.log('189 err')
		})
		getDayworkCarrierList({
			dayworkId: store.dayworkInfo.id,
			isChanged: 0
		}).then(res => {
			console.log(res)
			if (res.code == 200) {
				bindList.value = res.rows;
				for (let i = 0; i < bindList.value.length; i++) {
					bindList.value[i].flag = false;
				}
			}
		}).catch(err => {
			console.log('203 err')
		})
	}

	function switchChange(event) {
		if (event.detail.value) {
			workInfo.value.status = "3"
		} else {
			workInfo.value.status = "2"
		}
		showCarrierList.value = event.detail.value;
	}

	function handleInputQualifiedNum() {
		workInfo.value.qualifiedNum = workInfo.value.qualifiedNum.replace(/^-+|[^\d]/g, '');
	}

	function handleInputRejectNum(item) {
		item.rejectNum = item.rejectNum.replace(/^0+|^-|[^\d]/g, '');
		// 合格数随着投产数
		//let sumRejectNum = 0;
		// for (let i = 0; i < wasteInfo.value.length; i++) {
		// 	wasteInfo.value[i].rejectNum = wasteInfo.value[i].rejectNum.replace(/^0+|^-|[^\d]/g, '');
		// 	// sumRejectNum += Number(wasteInfo.value[i].rejectNum);
		// }
		// if (temp.value > 0) {
		// 	debounce(function() {
		// 		workInfo.value.qualifiedNum = temp.value;
		// 		workInfo.value.qualifiedNum -= sumRejectNum;
		// 	}, 500)
		// }
	}


	function handleScanCode() {
		// 引入原生插件
		const mpaasScanModule = uni.requireNativePlugin("Mpaas-Scan-Module");
		//调用插件的 mpaasScan 方法
		mpaasScanModule.mpaasScan({
				// 扫码识别类型，参数可多选，qrCode、barCode，
				// 如不设置，默认识别所有扫码类型，可能有些许影响识别效率
				scanType: ["qrCode", "barCode"],
				// 是否隐藏相册，默认false不隐藏
				hideAlbum: false,
			},
			(ret) => {
				let vehicleObj = JSON.parse(ret.resp_result);
				for (let i = 0; i < bindList.value.length; i++) {
					if (vehicleObj.carrierCode == bindList.value[i].carrierCode) {
						if (!bindList.value[i].flag) {
							endFlag.value += 1;
						}
						bindList.value[i].flag = true;
					}
				}
			}
		);
	}

	function handlePreFinishReporting() {
		console.log("44")
		//投产数
		let number = store.dayworkInfo.processQualifiedNum == 0 ? store.dayworkInfo.productionQuantity : store.dayworkInfo
			.processQualifiedNum;
		workInfo.value.prodNum = number
		console.log("合格量", (parseInt(workInfo.value.qualifiedNum) + lotPreSumQualifiedNum.value))
		let percent = (((parseInt(workInfo.value.qualifiedNum) + lotPreSumQualifiedNum.value) / number) * 100).toFixed(2);
		console.log("percent", lotPreSumQualifiedNum.value);
		let num = 103;
		// 填入数大于剩余量情况
		if (parseInt(workInfo.value.qualifiedNum) + lotPreSumQualifiedNum.value - number > 0) {
			// 判断当前是否为首序
			if (isFirstOrder.value) {
				percent = ((parseInt(workInfo.value.qualifiedNum) + lotPreSumQualifiedNum.value - number) / number) * 100;
				percent = Math.ceil(percent * 100) / 100;
				uni.showModal({
					title: '提示',

					content: `合格数总量超出投入量${percent}%，是否继续保存?`,
					success: function(res) {
						if (res.confirm) {
							handleSave();
						} else if (res.cancel) {}
					}
				})
			} else {
				if (percent > num) {
					uni.showToast({
						icon: 'none',
						title: '合格数总量为投产量的' + percent + "%,请重新输入！"
					})
					return;
				} else {
					handleSave();
				}
			}
		} else {
			handleSave();
		}
	}

	function handleFinishReporting() {
		console.log(store.isPreProcess)
		//投产数
		let number = workInfo.value.prodNum;
		let percent = (((parseInt(workInfo.value.qualifiedNum) + lotPreSumQualifiedNum.value) / number) * 100).toFixed(2);
		let num = 103;
		if (parseInt(workInfo.value.qualifiedNum) + lotPreSumQualifiedNum.value - number > 0) {
			if (isFirstOrder.value) {
				percent = ((parseInt(workInfo.value.qualifiedNum) + lotPreSumQualifiedNum.value - number) / number) * 100;
				percent = Math.ceil(percent * 100) / 100;
				uni.showModal({
					title: '提示',

					content: `合格数总量超出投入量${percent}%，是否继续保存?`,
					success: function(res) {
						if (res.confirm) {
							if (showCarrierList.value) {
								if (endFlag.value >= bindList.value.length) {
									handleSave();
								} else {
									uni.showToast({
										icon: "none",
										title: "请先扫码确认载具",
										duration: 2000
									})
									return;
								}
							} else {
								handleSave();
							}
						} else if (res.cancel) {}
					}
				})
			} else {
				if (percent > num) {
					uni.showToast({
						icon: 'none',
						title: '合格数总量为投产量的' + percent + "%,请重新输入！"
					})
					return;
				} else {
					handleSave();
				}
			}
		} else {
			if (showCarrierList.value) {
				if (endFlag.value >= bindList.value.length) {
					handleSave();
				} else {
					uni.showToast({
						icon: "none",
						title: "请先扫码确认载具",
						duration: 2000
					})
					return;
				}
			} else {
				handleSave();
			}
		}
	}

	function handleSave() {
		console.log(workInfo.value.qualifiedNum)
		if (workInfo.value.qualifiedNum === null || workInfo.value.qualifiedNum === '') {
			uni.showToast({
				icon: "none",
				title: "请输入合格数",
				duration: 2000
			})
			return;
		}
		let rejectSum = 0
		console.log(rejectSum);
		for (let i = 0; i < wasteInfo.value.length; i++) {
			if ((!wasteInfo.value[i].rejectNum && wasteInfo.value[i].reason) ||
				(wasteInfo.value[i].rejectNum && !wasteInfo.value[i].reason) ||
				(!wasteInfo.value[i].rejectNum && !wasteInfo.value[i].reason)) {
				uni.showToast({
					icon: 'none',
					title: "请输入废弃数或废弃原因",
					duration: 2000
				})
				return;
			}
			rejectSum += Number(wasteInfo.value[i].rejectNum);
		}
		if (rejectSum > workInfo.value.prodNum) {
			uni.showToast({
				icon: 'none',
				title: '废品数不能大于投产数',
				duration: 2000
			})
			return;
		}
		if (workInfo.value.status != '3') {
			workInfo.value.status = '2';
		}
		workInfo.value.endTime = timestampToTime(new Date());
		workInfo.value.rejectList = wasteInfo.value;
		workInfo.value.isPreProcess = store.isPreProcess;
		workInfo.value.processStepNumber = store.dayworkInfo.currentProcess.processStepNumber
		saveDayWorkItem(workInfo.value).then(res => {
			if (res.code === 200) {
				uni.showToast({
					icon: 'success',
					title: '操作成功',
				});
				emit('resflushItem');
				close();
			} else {
				uni.showToast({
					icon: 'none',
					title: res.msg
				});
			}
		})
	}

	function handleAddWasteInfo() {
		if (wasteInfo.value.length > 0) {
			if (wasteInfo.value.some(item => item.rejectNum == '' || item.reason == '')) {
				uni.showToast({
					icon: 'none',
					title: '请填写废品量或废品原因再点击添加'
				})
			} else {
				wasteInfo.value.push({
					rejectNum: '',
					reason: ''
				})
			}
		} else {
			wasteInfo.value.push({
				rejectNum: store.dayworkInfo.processQualifiedNum > 0 ? store.dayworkInfo
					.processQualifiedNum - lotPreSumQualifiedNum.value - lotPreSumReject.value - workInfo.value
					.qualifiedNum > 0 ? store.dayworkInfo
					.processQualifiedNum - lotPreSumQualifiedNum.value - lotPreSumReject.value - workInfo.value
					.qualifiedNum : 1 : store.dayworkInfo.isLast == 1 ?
					store.dayworkInfo.lastLotQuantity - lotPreSumQualifiedNum.value - lotPreSumReject.value -
					workInfo.value.qualifiedNum > 0 ?
					store.dayworkInfo.lastLotQuantity - lotPreSumQualifiedNum.value - lotPreSumReject.value -
					workInfo.value.qualifiedNum : 1 : store.dayworkInfo.oneLotQuantity - lotPreSumQualifiedNum
					.value - lotPreSumReject.value -
					workInfo.value.qualifiedNum > 0 ?
					store.dayworkInfo.oneLotQuantity - lotPreSumQualifiedNum.value - lotPreSumReject.value -
					workInfo.value.qualifiedNum : 1,
				reason: ''
			})
		}

	}

	function handleDeleteWasteInfo(index) {
		wasteInfo.value.splice(index, 1);
		// handleInputRejectNum();
	}

	function handleReasonChange(item) {
		if (wasteInfo.value.filter(waste => waste.reason == item.reason).length > 1) {
			wasteInfo.value.splice(wasteInfo.value.indexOf(item), 1);
			uni.showToast({
				icon: 'none',
				title: '请勿重复选择废品原因',
				duration: 2000
			})
		}
	}

	defineExpose({
		open
	})
</script>

<style lang="scss">
	.dialog-body {
		.list-container {
			width: 100%;
			display: flex;
			align-items: flex-start;
			padding: 0 4rpx;

			.list-title {
				width: 100%;
				margin-top: 16rpx;
				height: 64rpx;
				line-height: 64rpx;
				align-items: center;

				.label {
					flex: 1;
					font-size: 32rpx;
				}

				.input {
					width: 40%;
					height: 66rpx;
					padding-left: 10rpx;
					font-size: 22rpx;
					border: 1rpx solid #e1e1e1;
					border-radius: 8rpx;
				}

				.icon-gear {
					font-size: 56rpx;
				}
			}

			.switch {
				margin-top: -8rpx;
				align-items: center;
				transform: scale(0.7);
			}

			.confirmCarrier {
				.label {
					padding-top: 20rpx;
					font-size: 32rpx;
				}

				.vehicleList {
					justify-content: baseline;
					align-content: flex-start;
					flex-wrap: wrap;
					width: 100%;
					height: 120rpx;
					overflow: auto;

					.vehicleNo {
						padding: 0 10rpx;
						margin: 10rpx 20rpx 0 0;
						justify-content: space-between;
						align-items: center;
						width: auto;
						height: 60rpx;
						border: 2rpx solid rgba(213, 213, 213, 1);
						border-radius: 6rpx;
					}

					.blueBorder {
						background-color: #1684fc;
						color: #FFFFFF;
					}

				}
			}


		}

		.add-btn-container {
			margin-top: 32rpx;


			.btn {
				flex: 1;
				background-color: rgba(255, 85, 85, 1);
				color: #FFFFFF;
				margin-left: 5rpx;
				padding: 0;
			}

			.btnScan {
				flex: 1;
				color: #FFFFFF;
				margin-right: 5rpx;
				padding: 0;
			}
		}
	}
</style>