<template>
	<view class="oderPage">
		<u-form :model="form" ref="myForm" :error-type="errorType">
			<view class="from">
				<u-form-item prop="cardState">
					<view class="from_item">
						<text><text style="color: red">*</text>需要更换的设备：</text>
						<!-- <u-radio-group v-model="form.applyTypeName">
							<u-radio :customStyle="{ marginBottom: '8px' }" activeColor="#2CE242"
								v-for="(item, index) in radiolist1" :key="index" :label="item.disabled"
								:name="item.name">
								{{ item.name }}
							</u-radio>
						</u-radio-group> -->
						<radio-group @change="radioChange" class="radios">
							<block v-for="(item, index) in radiolist1" :key="item.val">
								<view class="radio-box">
									<radio :value="item.val" :checked="form.applyType == item.val" color="#13e7c1"
										style="transform:scale(0.75)" />
									<view>{{item.name}}</view>
								</view>
							</block>
						</radio-group>
					</view>
				</u-form-item>
				<u-form-item prop="cardState">
					<view class="from_item">
						<text><text style="color: red">*</text>设备损坏类型：</text>
						<!-- <u-radio-group v-model="form.damageModeName">
							<u-radio :customStyle="{ marginBottom: '8px' }" activeColor="#2CE242"
								v-for="(item, index) in radiolist2" :key="index" :label="item.disabled"
								:name="item.name">
								{{ item.name }}
							</u-radio>
						</u-radio-group> -->
						<radio-group @change="typeChange" class="radios">
							<block v-for="(item, index) in radiolist2" :key="item.val">
								<view class="radio-box">
									<radio :value="item.val" :checked="form.damageMode == item.val" color="#13e7c1"
										style="transform:scale(0.75)" />
									<view>{{item.name}}</view>
								</view>
							</block>
						</radio-group>
					</view>
				</u-form-item>

				<!-- 	<u-form-item prop="phone">
					<view class="from_item" style="background-color: #f7f7f7">
						<text><text style="color: red"></text>手机号：</text>
						<u-input v-model="form.mobile" :disabled="true" class="input" />
					</view>
				</u-form-item>
				<u-form-item prop="code">
					<view class="from_item">
						<text><text style="color: red"></text>验证码：</text>
						<u-input v-model="form.code" placeholder="请输入验证码" class="input" />
						<view class="hint2">
							<view class="green">{{ codeDuration === 0 ? "" : codeDuration }}</view>
							<view class="grey" @click="getCode">{{
						    codeDuration === 0 ? "发送验证码" : "秒后可重发"
						  }}</view>
						</view>
					</view>
				</u-form-item> -->
			</view>
		</u-form>
		<view class="btn-wrapper">
			<button  class="default button" v-if="apply.data.status"
				@click="changeCardQueryCancleAction()" type="default">撤回申请</button>
			<button class="submit button" v-if="apply.data.status === 'APPLY'||!apply.data.status"
				@click="toPage()" type="default">下一步填写资料</button>			
		</view>

	</view>
</template>

<script setup lang="ts">
	import navBar from "./components/nav-bar.vue";
	import {
		checkStr
	} from "@/utils/utils";
	import {
		ref,
		reactive
	} from "vue";
	import {
		navTo
	} from "@/utils/utils";
	import {
		onReady,
		onLoad,
		onShow,
	} from "@dcloudio/uni-app";
	import {
		request
	} from "@/utils/network/request.js";
	import {
		sendCode,
		checkCode,
		changeCardApply,
		changeCardQuery,
		changeCardQueryCancle
	} from "@/utils/network/api.js";
	import {
		stringToJson
	} from "@/utils/network/encryption";
	import {
		msg
	} from "@/utils/utils";

	// 表单数据
	const form = reactive({
		damageMode: "0",
		damageModeName: '人为损坏',
		applyType: 'EXCHANGE_CARD',
		applyTypeName: '卡',
		mobile: "",
		code: '',
		applyRes: ''
	});
	const apply = reactive({
		data: {
			status: undefined,
			id: ''
		}

	});

	//入参
	const params = reactive({
		cardId: '',
		obuId: '',
		orderId: ''

	});

	// 单选数据列表
	const radiolist1 = reactive([{
		name: "卡",
		val: "EXCHANGE_CARD",
	},
	{
		name: "OBU",
		val: "EXCHANGE_OBU",
	}, {
		name: "卡和OBU",
		val: "EXCHANGE_ALL",
	},
	]);

	// 单选数据列表
	const radiolist2 = reactive([{
		name: "人为损坏",
		val: "0",
	},
	{
		name: "自然损坏",
		val: "1",
	}
	]);

	// 验证规则
	const rules = {
		code: [{
			required: true,
			message: "请输入验证码",
			trigger: ["change", "blur"],
		}],
	};

	// 验证提示类型(toast要版本为1.3.5才支持)
	const errorType = ["toast"];

	// 设置验证规则
	const myForm = ref(null);
	//倒计时时常
	const codeDuration = ref(0);
	let interval = null;

	/* 验证码倒计时 */
	const codeInterval = () => {
		codeDuration.value = 60;
		interval = setInterval(() => {
			codeDuration.value--;
			if (codeDuration.value === 0) {
				if (interval) {
					clearInterval(interval);
					interval = null;
				}
			}
		}, 1000);
	};

	onReady(() => {
		myForm.value.setRules(rules);
	});

	onLoad((option) => {
		form.mobile = option.mobile
		params.cardId = option.cardId
		params.orderId = option.orderId

		// changeCardQueryAction().then(val => {
		// 	console.log(val);
		// 	apply.data = val;
		// 	apply.data.status = val.status;
		// })
	});

	onShow(() => {
		changeCardQueryAction()
	})

	// 单选
	const radioChange = (e : any) => {
		console.log(e);
		form.applyType = e.detail.value

	};
	// 单选
	const typeChange = (e : any) => {
		console.log(e);
		form.damageMode = e.detail.value

	};

	const getCode = () => {
		if (codeDuration.value !== 0) {
			return;
		}
		const options = {
			type: 2,
			data: {
				mobile: form.mobile
			},
			method: "POST",
			showLoading: true,
		};
		request(sendCode, options)
			.then((res) => {
				codeInterval();

				msg("验证码发送成功！");
			})
			.catch((err) => {
				console.log(err);
			});
	}

	//查询申请单
	const changeCardQueryAction = () => {
		var data = {
			orderId: params.orderId,
		};
		const options = {
			type: 2,
			data: data,
			method: "POST",
			showLoading: true,
		};
		request(changeCardQuery, options).then((res) => {
			const data = stringToJson(res.bizContent);
			if (data) {
				apply.data = data;
				apply.data.status = data.status;
			}

		})
		// return new Promise(async (resolve, reject) => {
		// 	const res = await request(changeCardQuery, options);
		// 	const data = stringToJson(res.bizContent);
		// 	resolve(data);
		// }).catch((error) => {
		// 	reject(error);
		// });
	}

	//撤销订单
	const changeCardQueryCancleAction = () => {
		var data = {
			id: apply.data.id,
			cancelRes: '取消申请单'
		};
		const options = {
			type: 2,
			data: data,
			method: "POST",
			showLoading: true,
		};
		return new Promise(async (resolve, reject) => {
			const res = await request(changeCardQueryCancle, options);
			const data = stringToJson(res.bizContent);
			msg('取消申请成功');
			uni.navigateBack()
		}).catch((error) => {
			reject(error);
		});
	}

	//申请
	const queryCckChangejzCardAction = () => {
		var data = {
			orderId: params.orderId,
			applyType: form.applyType,
			damageMode: form.damageMode //0 --- 人为损坏 1 --- 自然损坏 当为换卡签的时候必传
		};
		const options = {
			type: 2,
			data: data,
			method: "POST",
			showLoading: true,
		};
		return new Promise(async (resolve, reject) => {
			const res = await request(changeCardApply, options);
			const data = stringToJson(res.bizContent);
			resolve(data);
		}).catch((error) => {
			reject(error);
		});
	}

	//下一步
	const toPage = () => {
		// myForm.value.validate((valid) => {
		// 	if (valid) {
		// 		const options = {
		// 			type: 2,
		// 			data: {
		// 				mobile: form.mobile,
		// 				code: form.code
		// 			},
		// 			method: "POST",
		// 			showLoading: true,
		// 		};
		// 		request(checkCode, options)
		// 			.then(() => {
		if (apply.data.status === 'APPLY') {
			navTo(
				`/after-sale/replace-equipment/form?orderId=${params.orderId}&&id=${apply.data.id}`
			)
		} else {
			// if (form.applyTypeName === '卡') {
			// 	form.applyType = 'EXCHANGE_CARD'
			// } else if (form.applyTypeName === 'OBU') {
			// 	form.applyType = 'EXCHANGE_OBU'
			// } else if (form.applyTypeName === '卡和OBU') {
			// 	form.applyType = 'EXCHANGE_ALL'
			// }
			// if (form.damageModeName === '人为损坏') {
			// 	form.damageMode = '0'
			// } else if (form.damageModeName === '自然损坏') {
			// 	form.damageMode = '1'
			// }

			queryCckChangejzCardAction().then(val => {
				navTo(
					`/after-sale/replace-equipment/form?orderId=${params.orderId}&&id=${val.id}`
				)
			})
		}

		// 		})
		// 		.catch((err) => {
		// 			console.log(err);
		// 		});
		// } else {
		// 	console.log("验证未通过");
		// }
		// });
	};
</script>

<style>
	page {
		width: 100%;
		height: 100%;
		display: flex;
		flex-direction: column;
		background-color: ##eef7f7;
	}
</style>
<style lang="scss" scoped>
	.radios {
		display: flex;
	}

	.radio-box {
		display: flex;
		align-items: center;
		padding-left: 20rpx;
	}

	.hint2 {
		display: flex;

		.green {
			font-size: 28rpx;
			color: #00b38b;
		}

		.grey {
			font-size: 24rpx;
			color: #000000;
			margin-left: 16rpx;
		}
	}

	.oderPage {
		flex: 1;
		width: 100%;

		.from1 {
			background-color: #fff;
			margin-top: 30rpx;
			padding: 0 30rpx;

			::v-deep .uni-forms-item {
				border-bottom: 1rpx solid #ccc;
				padding: 15rpx 0;
				margin-bottom: 0;

				.uni-forms-item__label {
					font-size: 28rpx;
					height: 50rpx;
				}

				.uni-forms-item__content {
					display: flex;
				}

				.uni-easyinput__content-input {
					font-size: 28rpx;
					height: 50rpx;
				}
			}

			.btn {
				line-height: 38rpx;
				font-size: 24rpx;
				font-family: Microsoft YaHei;
				font-weight: 400;
				color: #ffffff;
				background: #00b38b;
				border-radius: 10rpx;
				padding: 10rpx 15rpx;
			}
		}

		.from {
			background-color: #fff;
			margin-top: 30rpx;
			padding: 0 30rpx;

			::v-deep .u-form-item {
				padding: 0;
				line-height: normal;

				.u-form-item__message {
					margin-bottom: 12rpx;
				}
			}

			.from_item {
				display: flex;
				flex-wrap: nowrap;
				justify-content: space-between;
				align-items: center;
				height: 80rpx;
				border-bottom: 1rpx solid #dcdcdc;

				.btn {
					font-size: 24rpx;
					font-family: Microsoft YaHei;
					font-weight: 400;
					color: #ffffff;
					background: #00b38b;
					border-radius: 10rpx;
					padding: 10rpx 15rpx;
				}

				::v-deep .input {
					text-align: left;
					flex: 1;

					input {
						text-align: left;
					}
				}
			}

			.from_item1 {
				display: flex;
				flex-wrap: nowrap;
				flex-direction: column;
				justify-content: space-between;
				padding: 30rpx;
				border-bottom: #dcdcdc 1px solid;

				input {
					text-align: right;
				}

				.textarea {
					background-color: #f1f1f1;
					width: 100%;
					border-radius: 20rpx;
					margin-top: 10rpx;
					text-indent: 1rem;
					height: 180rpx;
					padding: 20rpx;
					box-sizing: border-box;
				}
			}
		}
	}
	.btn-wrapper{
		display: flex;
		padding-top: 60rpx;
	}
	.button::after{
		border:none;
	}
	.default{
		height: 80rpx;
		background: rgba(0, 179, 139, .1);
		border-radius: 40rpx;
		font-size: 32rpx;
		font-weight: 400;
		color: #00B38B;
		line-height: 80rpx;
		width: 45%;
		border:1px solid #00B38B;
	}
	.submit {
		background: linear-gradient(to left, #43a1e0 0%, #13e7c1 100%);
		height: 80rpx;
		line-height: 80rpx;
		color: #fff;
		border-radius: 100rpx;
		font-size: 32rpx;
		width: 45%;
	}
</style>