<template>
	<view class="content">
		<view class="top-title">学员信息</view>

		<u-gap height="20" bgColor="#f2f2f2" />

		<view class="content_body">
			<u--form labelPosition="left" :model="ruleFormData" :rules="rules" ref="uFormRef">
				<u-form-item labelWidth="70" label="姓名" prop="userInfo.name" borderBottom required>
					<u--input v-model="ruleFormData.userInfo.name" placeholder="请输入姓名..." border="none"></u--input>
				</u-form-item>
				<u-form-item labelWidth="80" label="联系电话" prop="userInfo.phone" borderBottom required>
					<u--input v-model="ruleFormData.userInfo.phone" type="number" placeholder="请输入联系电话..." border="none"></u--input>
				</u-form-item>
				<u-form-item labelWidth="80" label="身份证号" prop="userInfo.userIdCard" borderBottom required>
					<u--input v-model="ruleFormData.userInfo.userIdCard" placeholder="请输入身份证号..." border="none"></u--input>
				</u-form-item>
				<u-form-item labelWidth="70" label="性别" prop="userInfo.sex" borderBottom required>
					<u-radio-group v-model="ruleFormData.userInfo.sex" placement="row" class="radio-group__style">
						<u-radio v-for="(item, index) in sexsList" :key="index" :label="item.name" :name="item.name"> </u-radio>
					</u-radio-group>
				</u-form-item>
				<u-form-item labelWidth="70" label="学历" prop="userInfo.degreeOfEducation" borderBottom required @click="handleEducationClick">
					<u--input v-model="ruleFormData.userInfo.degreeOfEducation" readonly placeholder="请选择学历..." border="none"></u--input>
				</u-form-item>
				<u-form-item labelWidth="70" label="职业" prop="userInfo.job" borderBottom required>
					<u--input v-model="ruleFormData.userInfo.job" placeholder="请输入职业..." border="none"></u--input>
				</u-form-item>
				<u-form-item labelWidth="125" label="职业资格等级证书" prop="userInfo.gradeCertificate" borderBottom required>
					<u-upload :fileList="ruleFormData.userInfo.gradeCertificate" previewFullImage @afterRead="afterRead" @delete="deletePic" name="1" multiple :maxCount="1"></u-upload>
				</u-form-item>
				<u-form-item labelWidth="120" label="获得证书时间" prop="userInfo.certificateAcquisitionTime" borderBottom required @click="showCertificateGetTime">
					<u--input v-model="ruleFormData.userInfo.certificateAcquisitionTime" readonly placeholder="请选择获得证书时间..." border="none"></u--input>
				</u-form-item>
				<u-form-item label="手写签字" prop="userInfo.writeSign" borderBottom required labelPosition="top" labelWidth="auto">
					<view style="flex: 1">
						<u-button type="primary" size="mini" text="签字" :customStyle="{ position: 'absolute', top: '-46upx', right: '20upx', width: '100upx' }" @click="signVisible = true" />
						<view v-if="ruleFormData.userInfo.writeSign">
							<u-image width="400rpx" height="200rpx" :src="ruleFormData.userInfo.writeSign" />
						</view>
					</view>
				</u-form-item>
			</u--form>

			<view class="mt-10">
				<u-button type="primary" text="下一步" @click="$u.debounce(fnSubmit, 1000, true)" />
			</view>
		</view>

		<sign :signShow.sync="signVisible" @confirm="handleSign" />
		<u-datetime-picker
			:show="showCertificateGetTimePopper"
			mode="datetime"
			v-model="defaultDatetimePicker"
			:round="12"
			:custom-style="{
				borderRadius: '24rpx',
				overflow: 'hidden',
				'--picker-header-radius': '24rpx 24rpx 0 0',
				'--picker-confirm-radius': '12rpx'
			}"
			@confirm="handleCertificateGetTimeConfirm"
			@cancel="handleCertificateGetTimeCancel"
		></u-datetime-picker>

		<u-picker ref="uPicker" :show="singleChoice" :columns="singleChoiceColumns" keyName="NAME" @confirm="fnSingleChoiceConfirm" @cancel="fnSingleChoiceCancel"></u-picker>
	</view>
</template>

<script>
import { getDataDictionary, joinClass } from '@/api';
import Sign from '@/components/sign/sign.vue'
import { validateFieldPhone, validateFieldIdCard } from '@/utils/formValidateField.js'
import store from "@/store";

export default {
	data() {
		return {
			routeQuery: {}, // 上一个页面带过来的路由参数
			sexsList: [
				{
					label: '1',
					name: '男'
				},
				{
					label: '0',
					name: '女'
				}
			],
			singleChoice: false,
			showCertificateGetTimePopper: false,
			signVisible: false,
			defaultDatetimePicker: Number(new Date()),
			singleChoiceColumns: [],
			ruleFormData: {
				userInfo: {
					name: '', // 姓名
					phone: '', // 联系电话
					userIdCard: '', // 身份证号
					sex: '男', // 性别
					degreeOfEducation: '', // 学历
					job: '', // 职业
					gradeCertificate: [], // 等级证书
					certificateAcquisitionTime: '', // 获取证书时间
					writeSign: '' // 手写签字
				}
			},
			rules: {
				'userInfo.name': {
					type: 'string',
					required: true,
					message: '请填写姓名',
					trigger: ['blur', 'change']
				},
				'userInfo.phone': [
					{
						required: true,
						message: '请输入手机号',
						trigger: ['change', 'blur']
					},
					{
						validator: validateFieldPhone,
						trigger: ['change', 'blur']
					}
				],
				'userInfo.userIdCard': [
					{
						type: 'string',
						required: true,
						message: '请填写身份证号',
						trigger: ['blur', 'change']
					},
					{
						validator: validateFieldIdCard,
						trigger: ['change', 'blur']
					}
				],
				'userInfo.sex': {
					type: 'string',
					required: true,
					message: '请选择性别',
					trigger: ['change']
				},
				'userInfo.degreeOfEducation': {
					type: 'string',
					required: true,
					message: '请选择学历',
					trigger: ['blur', 'change']
				},
				'userInfo.job': {
					type: 'string',
					required: true,
					message: '请输入职业',
					trigger: ['blur', 'change']
				},
				'userInfo.gradeCertificate': [
					{
						type: 'array',
						required: true,
						message: '请上传等级证书',
						trigger: ['blur', 'change']
					}
				],
				'userInfo.certificateAcquisitionTime': {
					type: 'string',
					required: true,
					message: '请选择获取证书时间',
					trigger: ['blur', 'change']
				},
				'userInfo.writeSign': [
					{
						type: 'string',
						required: true,
						message: '请填写手写签字',
						trigger: ['blur', 'change']
					}
				]
			}
		}
	},

	onLoad(query) {
		this.routeQuery = query // 接收上一个页面传递过来的路由参数1
  },

	methods: {
		handleEducationClick() {
			this.$refs.uPicker.setIndexs([0])
			this.fnGetDataDictionary('d7d80f08d73a4accbccf4fd3d8d1d867')
			this.singleChoice = true
		},
		fnSingleChoiceConfirm(event) {
			this.$set(this.ruleFormData.userInfo, 'degreeOfEducation', event.value[0].NAME)
			this.$set(this.ruleFormData.userInfo, 'degreeOfEducation' + '_BIANMA', event.value[0].BIANMA)
			this.fnSingleChoiceCancel()
		},
		fnSingleChoiceCancel() {
			this.singleChoice = false
		},
		async fnGetDataDictionary(DICTIONARIES_ID) {
			let resData = await getDataDictionary({
				DICTIONARIES_ID
			})
			this.singleChoiceColumns = [resData.list]
		},
		handleSelectEducation(event) {
			this.ruleFormData.userInfo.degreeOfEducation = event.name
		},
		async afterRead(event) {
			let lists = [].concat(event.file)
			lists.map((item) => {
				this.ruleFormData.userInfo.gradeCertificate.push({
					...item,
					status: 'success',
					message: ''
				})
			})
		},
		deletePic(event) {
			this.ruleFormData.userInfo.gradeCertificate.splice(event.index, 1)
		},
		showCertificateGetTime() {
			this.showCertificateGetTimePopper = true
		},
		handleCertificateGetTimeConfirm(event) {
			this.ruleFormData.userInfo.certificateAcquisitionTime = uni.$u.timeFormat(event.value, 'yyyy-mm-dd hh:MM')
			this.handleCertificateGetTimeCancel()
		},
		handleCertificateGetTimeCancel() {
			this.showCertificateGetTimePopper = false
		},
		handleSign(event) {
			this.ruleFormData.userInfo.writeSign = event.filePath
		},
		async fnSubmit() {
			const classId = this.routeQuery.classId
			await this.$refs.uFormRef
				.validate()
				.then(async () => {
					let files = []
					if (this.ruleFormData.userInfo.gradeCertificate[0]) {
						files.push({
							name: 'certificatefile',
							file: this.ruleFormData.userInfo.gradeCertificate[0],
							uri: this.ruleFormData.userInfo.gradeCertificate[0].url
						})
					}
					if (this.ruleFormData.userInfo.writeSign) {
						files.push({
							name: 'signfile',
							uri: this.ruleFormData.userInfo.writeSign
						})
					}
					// const certificatefileLists = this.ruleFormData.userInfo.gradeCertificate.map(so => so.url); // 接入组合多个证书的上传, 返回数组
					const params = { ...this.ruleFormData.userInfo }
					delete params.gradeCertificate
					delete params.writeSign
					await joinClass({
						files,
						formData: { ...params, classId,USER_ID:this.$store.getters.getUserInfo.USER_ID }
					})
						.then(() => {
							uni.$u.toast('保存成功')
							setTimeout(() => {
								uni.$u.route({
									url: '/pages/train_management/face_authentication',
									params: { ...this.routeQuery, type: 'scan_face' }
								})
							}, 1500)
						})
						.catch((err) => {
							if (err) uni.$u.toast(err.msg)
						})
				})
				.catch((e) => {
					uni.$u.toast('请补全必填项')
				})
		}
	}
}
</script>

<style scoped lang="scss">
.content {
	.top-title {
		padding: 20rpx;
		text-align: center;
		font-size: 54rpx;
		font-weight: bold;
	}

	.content_body {
		padding: 20rpx 30rpx;

		.radio-group__style {
			display: flex;
			flex-direction: row;
			gap: 60rpx;
		}
	}
}
</style>