<template>
	<BasicContainer ref="basicContainer" :option="option">
		<template #head>
			<view class="hdtp">
				<view>
					<view>
						配载批次：{{details.pageInfo.carNo}}
					</view>
					<view class="butlur" @click="showsdqs">
						录入包条码
					</view>
				</view>
				<!-- 				<view>
					<view>备货是否完成：{{items.isstock}}</view>
					<view>装车是否完成：{{items.isload}}</view>
				</view> -->
			</view>
			<view class="hdtpnum">
				<view>
					<view>订单总数</view>
					<view>{{items.ordNub || 0}}</view>
				</view>
				<view>
					<view>计划件数</view>
					<view>{{details.pageInfo.planLoadingNumber || 0}}</view>
				</view>
				<view>
					<view>装车件数</view>
					<view>{{details.pageInfo.realLoadingNumber || 0}}</view>
				</view>
			</view>

			<view class="tabtip">
				<view @click="setorderStatus(1)">
					<view :class="orderStatus==1?'xz':''">定制品</view>
				</view>
				<view @click="setorderStatus(2)">
					<view :class="orderStatus==2?'xz':''">零担</view>
				</view>

			</view>
		</template>

		<template #body>
			<scroll-view class="scve" scroll-y="true" @refresherpulling="" @scrolltolower="reatchBottom">
				<view class="mabx">
					<block v-for="(item,index) in datalist" :key="item">
						<!-- 定制品 -->
						<template v-if="orderStatus== 1">
							<view class="itec" @click="checkphon(item,index)">
								<view class="contenbx1">
									<view><text style="color: #90A0AF;"
											@click.stop="goorderdetail(item)">订单编号：</text>{{item.orderCode}}
									</view>
								</view>
								<view class="contenbx1">
									<view><text style="color: #90A0AF;">配送数：</text>{{item.reservationNum}}</view>
									<view><text style="color: #90A0AF;">已扫码数：</text>{{item.loadingNub}}</view>
								</view>
								<view class="xialaxz" v-if="listcheckindex==index">
									<view v-for="ite in item.distributionAppParcelListVOS">
										<view>包条码：{{ite.orderPackageCode}}</view>
										<view>货物品类：{{ite.thirdProduct}}</view>
										<view>扫描状态：{{ite.isScan?ite.isScan:'未扫'}}</view>
									</view>
								</view>
								<view v-if="item.complete"
									:class="item.completecode==3?'tip tp1':item.completecode==1?'tip tp2':'tip tp3'">
									{{item.complete}}
								</view>
								<!-- 当有异常状态时, 显示异常状态 -->
								<template v-if="item.isHaveAbnormalPackageName">
									<view class="abnormalStyleContainer">
										<view class="abnormalStyle">
											{{item.isHaveAbnormalPackageName}}
										</view>
									</view>
								</template>
							</view>
						</template>

						<!-- 零担 -->
						<template v-else-if="orderStatus == 2">
							<view class="itec" @click="checkphon(item,index)">
								<view class="contenbx1">
									<view><text style="color: #90A0AF;"
											@click.stop="goorderdetail(item)">订单编号：</text>{{item.orderCode}}
									</view>
								</view>
								<view class="contenbx1">
									<view><text style="color: #90A0AF;"
											@click.stop="goorderdetail(item)">产品名称：</text>{{item.descriptionGoods}}
									</view>
								</view>
								<view class="contenbx1">
									<view><text style="color: #90A0AF;">计划数量：</text>{{item.reservationNum}}</view>
									<view><text style="color: #90A0AF;">装车数量：</text>{{item.loadingNub}}</view>
								</view>

								<view v-if="item.complete"
									:class="item.completecode==3?'tip tp1':item.completecode==1?'tip tp2':'tip tp3'">
									{{item.complete}}
								</view>
							</view>
						</template>
					</block>
				</view>
			</scroll-view>
		</template>
	</BasicContainer>

	<tiplist ref="tiplists"></tiplist>
	<!-- #ifdef APP -->
	<saomiao2 :ishidestop="scanState !== 0"></saomiao2>
	<!-- #endif -->
</template>

<script lang="ts" setup>
	import {
		postFindCarsLoadingDetail
	} from '@/api/user.js'
	import {
		onLoad,
		onShow,
		onHide,
		onUnload,
		onPullDownRefresh
	} from '@dcloudio/uni-app'
	import { computed, inject, nextTick, reactive, ref, toRefs, } from "vue";
	import useSystemSettingsStore from '@/store/useSystemSettingsStore';
	import { storeToRefs } from 'pinia';
	const { scanState } = storeToRefs(useSystemSettingsStore())
	const utils = inject('utils') as any

	const option = reactive({
		title: '配载按件装车',
		haveData: true,
		async pullDownRefreshInitPage() {
			details.datalist = []
			return await initpage()
		}
	})

	let details = reactive({
		schanvalue: '',
		typearr: [
			{
				value: 3,
				label: '齐套'
			},
			{
				value: 2,
				label: '部分扫'
			},
			{
				value: 1,
				label: '未扫'
			}
		],
		items: {} as any,
		datalist: [],
		scancode: '',
		orderStatus: 1,
		loadId: '',
		orderType: 0,
		inputtxt: '',
		listcheckindex: -1,
		isscan: false,
		order: [],
		zero: [],
		pageInfo: {}
	})

	// 获取组件实例
	const tiplists = ref(null)
	const basicContainer = ref(null)

	onLoad((op) => {
		details.loadId = op.id
	})
	function goorderdetail(item) {
		uni.navigateTo({
			url: '/pagesHome/pages/orderDetails/orderDetails?orderCode=' + item.orderCode
		})
	}
	onShow(async () => {
		// #ifdef APP
		uni.$off('scancodedate')
		uni.$on('scancodedate', function (code) {
			if (code) {
				console.log('code', code);
				details.scancode = code
				details.isscan = true
				scandata()
			}
		})
		// #endif

		await nextTick()
		// 请求页面
		// const timer = setTimeout(() => {
		basicContainer.value.startPullDownRefresh()
		// clearTimeout(timer)
		// }, 10)
	})

	const loadingNub = computed(() => {
		// 计算三种品类的装车件数和
		let num = 0
		if (details.order) num += details.order.reduce((curr, item) => curr + item.loadingNub, 0)
		if (details.zero) num += details.zero.reduce((curr, item) => curr + item.loadingNub, 0)
		console.log('num :>> ', num);
		return num
	})

	function showsdqs() {
		tiplists.value.setdetails({
			isshow: true,
			tipstate: 1,
			title: '请输入扫描的码',
			placeholder: '请输入扫描的码',
			inputtext: '',
			success: (detail) => {
				details.scancode = detail.inputtext
				scandata()
				tiplists.value.setdetails({ isshow: false })
			},
			cancel: () => {
				tiplists.value.setdetails({ isshow: false })
			},
			close: () => {
				tiplists.value.setdetails({ isshow: false })
			}
		})
	}

	async function initpage() {
		try {
			const response = await postFindCarsLoadingDetail({
				loadId: details.loadId
			})
			const { code, data } = response
			console.log('response :>> ', response);
			if (code === 200) {
				details.pageInfo = data
			}
			// const { data } = response
			// if (response.code !== 200) return
			// details.zero.data = []
			// details.order.data = []
			// data.forEach(val => {
			// 	// 零担订单
			// 	if (val.isZero === '1') return details.zero.data.push(val)
			// 	details.order.data.push(val)
			// })

			// // 定制品
			// if (details.orderStatus === 1) details.datalist = details.order.data
			// // 零担
			// else if (details.orderStatus === 2) details.datalist = details.zero.data

		} catch (err) {
			console.log('err :>> ', err);
			//TODO handle the exception
		} finally {
			return null
		}
	}

	function checktype(e) {
		if (e == '') {
			details.schanvalue = ''
			details.orderType = 0
		}
		details.typearr.map(item => {
			if (item.value == e) {
				details.schanvalue = item.label
				details.orderType = item.value
			}
		})
	}


	/**
	 * 切换tabBer状态
	 * @param {type} state 选中的状态 
	 */
	function setorderStatus(state : number) {
		if (details.orderStatus === state) return
		details.orderStatus = state
		// 清空数据
		details.datalist = []
		// 调用组件内下拉刷新函数
		basicContainer.value.startPullDownRefresh()
	}

	/**
	 * 触底加载
	 */
	function reatchBottom() {

	}

	/** 扫描接口
	 * */
	async function scandata() {
		try {

		} catch (err) {
			console.log('err :>> ', err);
			//TODO handle the exception
		} finally {
			// 刷新
			basicContainer.value.startPullDownRefresh()
		}
	}

	function checkphon(item : object, index : number) {
		// 零担订单
		if (item.isZero === '1') {
			const inpList = item.distributionAppParcelListVOS.map(val => {
				return {
					id: val.id,
					title: val.firsts,
					value: val.loadingNum || val.reservationNum,
					maxNum: val.reservationNum,
					minNum: 0,
					type: 'Number',
					disabled: (val.loadingNum === val.reservationNum),
					allocationId: val.allocationId,
					orderCode: val.orderCode,
					stockArticleId: val.stockArticleId
				}
			})

			// 提交模式
			tiplists.value.setdetails({
				title: '设置零担物料数量',
				isshow: true,
				tipstate: 4,
				inpList,
				inputtext: '',
				confirmTxt: '确认',
				isonecheck: true,
				success: async (deta) => {
					try {
						// 查询是否都已完全签收
						if (deta.inpList.every(val => val.disabled)) return tiplists.value.setdetails({ isshow: false })
						uni.showLoading({
							mask: true,
							title: "提交中"
						})
						if (deta.inpList.length === 0 || item.completeStact) return tiplists.value.setdetails({ isshow: false })
						let data = {
							reservationId: details.items.id,
							deliveryId: details.id,
							orderId: deta.inpList[0].stockArticleId,
							loadingId: uni.getStorageSync('checkvehicle').id,
							parcelListDTOS: []
						}
						data.parcelListDTOS = deta.inpList.map(val => {
							return {
								parcelListId: val.id,
								stockArticleId: val.stockArticleId,
								loadingNum: val.value,
							}
						})

						const res = await deliveryZeroLoading(data)
						if (res.audio) {
							// #ifdef APP
							utils.ttsspke(res.audio)
							// #endif
						}
						// 刷新
						basicContainer.value.startPullDownRefresh()
					} catch (err) {
						console.log('err :>> ', err);
						//TODO handle the exception
					} finally {
						uni.hideLoading()
						tiplists.value.setdetails({ isshow: false })

					}
				},
				cancel: (details) => {
					tiplists.value.setdetails({ isshow: false })
				},
				close: (details) => {
					tiplists.value.setdetails({ isshow: false })
				}
			})

			return
		}
		// details.listcheckindex=index
		if (details.listcheckindex == index) {
			details.listcheckindex = -1
		} else {
			details.listcheckindex = index
		}
	}
	const { listcheckindex, inputtxt, orderStatus, schanvalue, typearr, items, datalist } = toRefs(details)
</script>

<style lang="scss">
	.xialaxz {
		display: flex;
		flex-direction: column;

		>view {
			display: flex;
			align-items: flex-start;
			justify-content: space-between;
			border-top: 1upx solid #00000010;
			padding: 20upx 0;
			box-sizing: border-box;
			font-size: 28upx;
			color: #092C4D;

			>view {
				word-wrap: break-word;
				word-break: break-all;
				margin-right: 10upx;

				&:nth-last-child(1) {
					margin-right: 0upx;
				}
			}
		}
	}

	.butlur {
		width: 200upx !important;
		height: 64upx !important;
		background: #D3832A;
		border-radius: 8upx;
		display: flex;
		align-items: center;
		justify-content: center;
		font-size: 32upx;
		font-weight: 400;
		color: #FFFFFF;
	}

	.tabtip {
		display: flex;
		align-items: center;
		justify-content: space-between;

		>view {
			width: 50%;
			display: flex;
			align-items: center;
			justify-content: center;
			background-color: #ffffff;
			font-size: 32upx;
			font-weight: 400;
			color: #90A0AF;

			>view {
				height: 80upx;
				border-bottom: 8upx solid #ffffff;
				display: flex;
				align-items: center;
				justify-content: center;
			}
		}

		.xz {
			color: #D3832A;
			border-bottom: 8upx solid #D3832A;
			// border-radius: 5upx;
		}
	}

	.hdtp {
		padding: 34upx 32upx;
		box-sizing: border-box;
		background-color: #ffffff;
		display: flex;
		flex-direction: column;
		align-items: center;

		>view {
			width: 100%;
			display: flex;
			align-items: center;
			justify-content: space-between;
			font-size: 28upx;
			font-weight: 400;
			color: #092C4D;
			margin-bottom: 24upx;

			&:nth-last-child(1) {
				margin-bottom: 0;
			}

			>view {
				width: 50%;
				// flex: 1;
			}
		}
	}

	.scve {
		width: 100%;
		height: 50vh;
		margin-top: 20upx;

		.mabx {
			display: flex;
			flex-direction: column;
			align-items: center;

			>.itec {
				width: 686upx;
				// height: 176upx;
				background: #FFFFFF;
				border-radius: 8upx;
				padding: 36upx 24upx;
				box-sizing: border-box;
				position: relative;
				margin-bottom: 20upx;
				overflow: hidden;

				&:nth-last-child(1) {
					margin-bottom: 0;
				}

				>.contenbx1 {
					display: flex;
					align-items: center;
					justify-content: space-between;
					font-size: 28upx;
					color: #092C4D;
					margin-bottom: 20upx;

					&:nth-last-child(1) {
						margin-bottom: 0;
					}

					>view {
						flex: 1;
					}
				}

				.tip {
					position: absolute;
					right: 0;
					top: 0;
					width: 96upx;
					height: 48upx;
					border-radius: 0 8upx 0 8upx;
					display: flex;
					align-items: center;
					justify-content: center;
					font-size: 24upx;
				}

				.tp1 {
					background-color: #0086F120;
					color: #0086F1;
				}

				.tp2 {
					background-color: #F8544B20;
					color: #F8544B;
				}

				.tp3 {
					background-color: #FA8C1620;
					color: #FA8C16;
				}
			}
		}
	}

	.scinp {
		display: flex;
		align-items: center;
		justify-content: space-between;
		padding: 12upx 32upx;
		box-sizing: border-box;
		background-color: #ffffff;

		>view:nth-of-type(1) {
			font-size: 28upx;
			font-weight: 400;
			color: #092C4D;
		}

		.inputs {
			width: 276upx;
			height: 64upx;
			background: #F5F5F6;
			border-radius: 8upx;
			opacity: 1;
			border: 2upx solid #EEEEEE;
			padding: 10upx;
			box-sizing: border-box;
			font-size: 24upx;
			font-weight: 400;
			color: #AFB4BA;

			>input {
				flex: 1;
				font-size: 24upx;
				color: #092C4D;
			}
		}

		.btscan {
			width: 128upx;
			height: 64upx;
			background: #D3832A;
			border-radius: 8upx;
			display: flex;
			align-items: center;
			justify-content: center;
			font-size: 32upx;
			font-weight: 400;
			color: #FFFFFF;
		}
	}

	.hdtpnum {
		display: flex;
		align-items: center;
		justify-content: space-around;
		background-color: #ffffff;
		padding: 28upx 0;
		border-bottom: 3upx solid #EEEEEE;

		>view {
			display: flex;
			align-items: center;
			flex-direction: column;
			font-size: 28upx;
			font-weight: 400;
			color: #092C4D;

			&:nth-of-type(1) {
				>view:nth-of-type(2) {
					color: #092C4D;
				}
			}

			&:nth-of-type(2) {
				>view:nth-of-type(2) {
					color: #0086F1;
				}
			}

			&:nth-of-type(3) {
				>view:nth-of-type(2) {
					color: #3AD8BC;
				}
			}

			&:nth-of-type(4) {
				>view:nth-of-type(2) {
					color: #FA8C16;
				}
			}

			>view:nth-of-type(2) {
				font-size: 36upx;
				font-weight: 400;
				color: #092C4D;
				margin-top: 20upx;
			}
		}
	}

	.abnormalStyleContainer {
		top: -20upx;
		left: -20upx;
		position: absolute;
		padding: 10upx;
		border: 1upx solid #f8544b;
		border-radius: 50%;
	}

	// 异常标签
	.abnormalStyle {
		font-size: 28upx;
		height: 80upx;
		width: 80upx;
		display: flex;
		align-items: center;
		text-align: center;

		color: #f8544b;
		padding: 10upx;
		border-radius: 50%;
		border: 1upx solid #f8544b;
		opacity: 0.6;
	}
</style>