<template>
	<gui-page :custom-header="true" :header-class="['gui-theme-background-color']">
		<template #gHeader>
			<view style="height:44px;" class="gui-flex gui-nowrap gui-rows gui-align-items-center">
				<!-- 使用组件实现返回按钮及返回首页按钮 -->
				<text style="font-size:44rpx;" class="gui-header-leader-btns gui-color-white font-icons"
					@tap="goBack">&#xe6c5;</text>
				<!-- 导航文本此处也可以是其他自定义内容 -->
				<text class="gui-flex1 gui-text-center gui-color-white">半成品入库【入库人：{{ scanPersonName }}】</text>
				<!-- 此处加一个右侧展位元素与左侧同宽，实现标题居中 -->
				<!-- 实际宽度请根据自己情况设置 -->
				<view style="width:40px;">
					<uni-easyinput v-model="batchNumber" type="text" class="hidden-focus" ref="scanRefs" focus @confirm="handleConfirmText" />
				</view>
				<!-- 如果右侧有其他内容可以利用条件编译和定位来实现-->
			</view>
		</template>
		<template #gBody>
			<view class="list-content">
				<div class="operation-header">
					<view class="operation-header-item">
						<text>条码号</text>
						<text>{{ formData.batchNumber }}</text>
					</view>
					<view class="operation-header-item">
						<text>产品名称</text>
						<text>{{ formData.productName }}</text>
					</view>
					<view class="operation-header-item">
						<text>条码数/已扫入总数</text>
						<text>{{ computedSumQty }}</text>
					</view>
					<view v-if="!scanPersonId" class="operation-header-item-tips">
						<text><text class="font-icons">&#xe6d6;</text>请扫描入库人员厂牌完成入库</text>
					</view>
					<view v-else class="operation-header-item-tips-success">
						<text><text class="font-icons">&#xe6d6;</text>已扫描员工码，可进行入库</text>
					</view>
				</div>
				<view class="collapsed-panel">
					<div class="collapsed-title">
						<text><text class="font-icons">&#xe6da;</text>入库列表</text>
					</div>
					<view v-if="cardList.length > 0">
						<view v-for="item in cardList" :key="item.id" @click="handleShowDetail(item)">
							<uni-swipe-action>
								<!-- 基础用法 -->
								<uni-swipe-action-item :right-options="options" @click="handleRemoveDetail(item)">
									<template #left>
										<view />
									</template>
									<div class="collapsed-item">
										<text>{{ item.batchNumber }}/ {{ item.productName }}/ {{ item.boxQty }}
											PCS</text>
										<text class="font-icons"
											:style="{ color: item.signStatus? '#479e5e': '#b7b7b7'}">&#xe844;</text>
									</div>
								</uni-swipe-action-item>
							</uni-swipe-action>
						</view>
					</view>
					<view v-else>
						<view class="bg-image">
							<image src="@/static/empty.png" mode="heightFix" />
							<text>这里什么都没有...</text>
						</view>
					</view>
				</view>
			</view>
			<uni-popup ref="errorTip" type="dialog">
				<uni-popup-dialog type="error" cancel-text="关闭" confirm-text="确认" title="提示" :content="errorTipMessage"
					@confirm="handleCloseErrorTipsModal" @close="handleCloseErrorTipsModal" />
			</uni-popup>
		</template>
	</gui-page>
</template>

<script>
	import {
		onMounted,
		computed,
		reactive,
		defineComponent,
		onBeforeMount,
		toRefs,
		ref
	} from 'vue'
	import tsc from '@/unit/CHITEN_SDK_APP/tsc.js'
	export default defineComponent({
		setup(options) {
			const errorState = ref(0)
			const errorTip = ref('')
			const errorTipMessage = ref('')
			const formData = ref({
				batchNumber: null,
				productName: null,
				boxQty: 0,
				sumQty: 0
			})
			const cardList = ref([])
			// 隐藏输入框
			const scanRefs = ref()
			const queryParams = reactive({
				batchNumber: '',
				scanPersonId: null,
				scanPersonName: '未绑定',
			})

			// 条码数/总数
			const computedSumQty = computed(() => {
				return formData.value.boxQty + '/' + formData.value.sumQty + ' PCS'
			})

			onMounted(() => {
				// 每3s自动定位到扫码框
				setInterval(() => {
					if (scanRefs.value.focusShow) {
						// #ifdef APP-PLUS
						setTimeout(() => {
							uni.hideKeyboard()
						}, 100)
						// #endif
					} else {
						scanRefs.value.onBlur()
						scanRefs.value.onFocus()
					}
				}, 1000)
			})

			// 获取入库列表
			const search = function() {
				uni.$reqGet('getProductMiddleDetailPage', {
						scanPersonId: queryParams.scanPersonId,
					})
					.then(async ({
						code,
						data,
						msg
					}) => {
						if (code === 0) {
							cardList.value = data?.list ?? [];
						} else {
							// #ifdef APP-PLUS
							plus.device.beep(2)
							// #endif
							errorTipMessage.value = msg
							errorTip.value.open()
							errorState.value = 0
						}
					})
			}

			// 详情
			const handleShowDetail = function(ret) {
				Object.assign(formData.value, ret)
			}

			const handleRemoveDetail = function(ret) {
				uni.$reqDelete("deleteProductMiddleDetail", {
						id: ret?.id
					})
					.then(async ({
						code,
						data,
						msg
					}) => {
						if (code === 0) {
							// 重新获取列表数据
							search()
						} else {
							// #ifdef APP-PLUS
							plus.device.beep(2)
							// #endif
							errorTipMessage.value = msg
							errorTip.value.open()
							errorState.value = -1
						}
					})
			}

			const goBack = function() {
				uni.$goBack('/pages/workbranch/warehouse/SemiFinishedProducts/indexPage')
			}

			// 扫码入库
			const handleScanProductMiddle = function() {
				uni.$reqPost("scanProductMiddleDetailEntry", {
						batchNumber: queryParams.batchNumber,
						scanPersonId: queryParams.scanPersonId,
						scanPersonName: queryParams.scanPersonName
					})
					.then(async ({
						code,
						data,
						msg
					}) => {
						if (code === 0) {
							search()
							setInputFocus()
						} else {
							// #ifdef APP-PLUS
							plus.device.beep(2)
							// #endif
							errorTipMessage.value = msg
							errorTip.value.open()
							errorState.value = -1
						}
					})
			}

			const handleConfirmText = function(e) {
				// 扫码入库
				if (queryParams.scanPersonId && queryParams.scanPersonName) {
					// 存在员工码，扫码入库
					handleScanProductMiddle(e)
				} else {
					uni.$reqGet("getEmployeeMaster", {
							id: e
						})
						.then(async ({
							code,
							data,
							msg
						}) => {
							if (code === 0) {
								// 绑定员工
								if (!!data) {
									queryParams.scanPersonId = data.id
									queryParams.scanPersonName = data.employeeName
									search()
									setInputFocus()
								}
							} else {
								// #ifdef APP-PLUS
								plus.device.beep(2)
								// #endif
								errorTipMessage.value = '员工码不正确，请检查！'
								errorTip.value.open()
								errorState.value = -1
							}
						})
				}
			}

			// 禁用软键盘
			// const handleInputFocus = function() {
			// 	// #ifdef APP-PLUS
			// 	setTimeout(() => {
			// 		uni.hideKeyboard()
			// 	}, 100)
			// 	// #endif
			// }

			const setInputFocus = function() {
				queryParams.batchNumber = ''
				scanRefs.value.onBlur()
				scanRefs.value.onFocus()
			}

			// 关闭错误信息弹窗
			const handleCloseErrorTipsModal = async function() {
				errorTip.value.close()
				if (errorState.value === 0) {
					await setInputFocus()
				}
			}

			return {
				options: [{
					text: '删除',
					style: {
						backgroundColor: '#dd524d'
					}
				}],
				scanRefs,
				...toRefs(queryParams),
				formData,
				cardList,
				goBack,
				errorTip,
				errorTipMessage,
				computedSumQty,
				handleShowDetail,
				handleConfirmText,
				handleRemoveDetail,
				handleCloseErrorTipsModal,
			}
		}
	})
</script>

<style lang="scss" scoped>
	.gui-header-leader-btns {
		color: black;
		margin-left: 24rpx;
		font-size: 24px !important;
	}

	.list-content {
		margin-top: 68px;
		min-height: calc(100vh - 68px);
		position: relative;
		background-color: #edeeee;
	}

	.input-200 {
		width: 200px;
		padding-left: 10px;
	}

	.icon-scan {
		font-size: 20px;
		text-align: right;
	}

	.scan {
		height: 45px;
		width: calc(100% - 48px);
		margin: 12px;
		padding: 0 12px;
		display: flex;
		justify-content: space-between;
		align-items: center;
		border-radius: 6px;
		background-color: white;

		.scan-card {
			width: 100%;
			display: grid;
			grid-template-rows: 1fr;
			grid-template-columns: 7fr 2fr;
			align-items: center;

			input {
				height: 35px;
				line-height: 35px;
			}

			text {
				width: 100%;
				text-align: right;
			}
		}
	}

	span,
	text {
		font-size: 12px;
	}

	.collapsed-panel {
		// height: calc(100vh - 190px);
		width: calc(100vw - 24px);
		min-height: 230px;
		position: absolute;
		top: 105px;
		// bottom: 70px;
		bottom: 0px;
		padding: 0 12px;
		border-radius: 15px 15px 0 0;
		background-color: white;
		overflow-y: scroll;

		.collapsed-title {
			font-size: 14px;
			font-weight: bold;
			padding: 8px;
			position: sticky;
			top: 0;
			left: 0;
			width: calc(100% - 12px);
			z-index: 1;
			background-color: white;
		}

		.collapsed-item {
			display: flex;
			justify-content: space-between;
			align-items: center;
			padding: 8px;
			margin: 4px 0;
			border-radius: 4px;
			background-color: #f3f3f3;

			.font-icons {
				font-size: 14px;
			}
		}

		.collapsed-title+uni-view:nth-of-type(1) {
			margin-top: 8px;
		}
	}

	.operation-panel {
		padding: 12px 0;
		position: fixed;
		bottom: 0;
		width: 100%;
		display: grid;
		grid-template-columns: 1fr;
		grid-template-rows: 1fr;
		background-color: white;

		.operation-title {
			height: 40px;
			line-height: 40px;
			padding: 0 14px;
			font-size: 16px;
			font-weight: bold;
		}
	}

	.hidden-focus {
		position: fixed;
		top: 0;
		left: 0;
		z-index: -1;
		opacity: 0;
	}

	.operation-header {
		height: 130px;
		background-color: #4badf4;

		.operation-header-item {
			display: flex;
			flex-direction: row;
			justify-content: space-between;
			align-items: center;
			padding: 4px 12px;
			font-size: 12px;
			color: white;
		}

		.operation-header-item-tips {
			display: flex;
			flex-direction: row;
			justify-content: center;
			align-items: center;
			padding: 2px 12px;
			font-size: 14px;
			font-weight: bold;
			color: gold;
		}

		.operation-header-item-tips-success {
			display: flex;
			flex-direction: row;
			justify-content: center;
			align-items: center;
			padding: 2px 12px;
			font-size: 14px;
			font-weight: bold;
			color: lightgreen;
		}
	}
</style>