<template>
	<view class="container">
		<uni-notice-bar v-if="formData.status == '2'" :text="`驳回原因：${formData.remarks}`" />
		<uni-section title="基础信息" type="line">
			<uni-forms ref="infoForm" :rules="rules" :modelValue="formData" :label-width="90">
				<uni-forms-item required label="姓名" name="name">
					<uni-easyinput type="text" v-model="formData.name" placeholder="请输入姓名" />
				</uni-forms-item>
				<uni-forms-item required label="性别" name="sex">
					<uni-data-checkbox v-model="formData.sex" :localdata="sexs" />
				</uni-forms-item>
				<uni-forms-item required label="手机号" name="phone">
					<view class="phoneBox">
						<uni-easyinput disabled type="text" v-model="formData.phone" placeholder="手机号" />
						<button type="primary" :plain="true" style="border: none;"  size="mini" open-type="getPhoneNumber" @getphonenumber="decryptPhoneNumber">获取手机号</button>
					</view>
				</uni-forms-item>
				<uni-forms-item name="birthday" label="出生日期">
					<uni-datetime-picker type="date" v-model="formData.birthday" />
				</uni-forms-item>
			</uni-forms>
		</uni-section>
		<uni-section title="我的住址" type="line">
			<uni-forms ref="addrForm" :modelValue="formData" :label-width="90">
				<uni-forms-item label="小区选择">
					<uni-data-picker v-model="formData.estateId" :map="pickerMap" :localdata="items" placeholder="请选择地址" popup-title="请选择地址" @change="onchange"></uni-data-picker>
				</uni-forms-item>
				<uni-forms-item label="楼栋选择">
					<uni-data-picker v-model="formData.buildingId" :localdata="range" placeholder="请选择小区" popup-title="请选择小区" @change="villageChange"></uni-data-picker>
				</uni-forms-item>
				<uni-forms-item label="单元选择" v-if="house.unit && house.unit.length > 0">
					<uni-data-picker v-model="formData.unit" :localdata="house.unit" placeholder="请选择单元" popup-title="请选择单元" @change="unitChange"></uni-data-picker>
				</uni-forms-item>
				<uni-forms-item label="楼层选择" v-if="house.floor && house.unit.length > 0">
					<uni-data-picker v-model="formData.floor" :localdata="house.floor" placeholder="请选择楼层" popup-title="请选择楼层" @change="floorChange"></uni-data-picker>
				</uni-forms-item>
				<uni-forms-item label="门牌选择" v-if="house.number && house.number !== ''">
					<uni-data-picker v-model="formData.houseId" :localdata="house.number" placeholder="请选择门牌" popup-title="请选择门牌" @change="houseChange"></uni-data-picker>
				</uni-forms-item>
			</uni-forms>
		</uni-section>
		<button class="btn" type="primary" @click="submit()">提交</button>
	</view>
</template>

<script>
	import request from '../../api/resident.js';
	export default {
		data() {
			return {
				role: '',
				residentId: null,
				formData: {},
				items: [],
				pickerMap: {
					text: 'label',
					value: 'interId'
				},
				range: [],
				house: {},
				building: [],
				unit: '',
				sexs: [
					{ text: '男', value: 1 },
					{ text: '女', value: 0 },
				],
				// 校验规则
				rules: {
					name: {
						rules: [{
							required: true,
							errorMessage: '姓名不能为空'
						}]
					},
					sex: {
						rules: [{
							required: true,
							errorMessage: '性别不能为空'
						}]
					},
					phone: {
						rules: [{
							required: true,
							errorMessage: '电话不能为空'
						}]
					},
				},
			}
		},
		async mounted() {
			const res = await request.addrTreeSelect();
			this.items = res.data;
			if (this.residentId !== null && this.residentId) this.queryInfo();
		},
		methods: {
			async queryInfo() {
				const userinfo = await request.getUser();
				this.formData = userinfo.data;
				this.setAddr(userinfo.data);
			},
			// 设置地址
			async setAddr(data) {
				// 小区存在
				if (data.estateId && data.estateId !== null) {
					const res = await request.buildingList({ estateId: data.estateId });
					this.range = res.rows.map(e => ({ ...e, text: `${e.number}栋`, value: e.buildingId }));
				}
				// 楼栋存在
				if(data.buildingId && data.buildingId !== null) {
				 	await this.villageChange(data.buildingId);
				}
				// 单元存在
				if(data.unit && data.unit !== null) {
					await this.unitChange(data.unit);
				}
				// 楼层存在
				if(data.floor && data.floor !== null) {
					await this.floorChange(data.floor);
				}
				// 门牌存在
				if(data.houseId && data.houseId !== null) {
					await this.houseChange(data.houseId);
				}
			},
			// 小区选择
			async onchange(e) {
				if (!e || e == '' || e.detail.value.length <= 0) return;
				const val = e.detail.value[e.detail.value.length - 1].value;
				const res = await request.buildingList({ estateId: val });
				this.range = res.rows.map(e => ({ ...e, text: `${e.number}栋`, value: e.buildingId }));
			},
			// 楼栋选择
			async villageChange(e) {
				if (!e || e == '' || e.detail.value.length <= 0) return;
				const res = await request.houseList({ buildingId: e.detail.value[0].value });
				this.building = res.rows;
				const list = [];
				const numList = [];
				const unit = res.rows.filter(j => j.unit !== null).map(j => ({ ...j, text: `${j.unit}单元`, value: j.unit }));
				const number = res.rows.filter(j => j.number !== null).map(j => ({ ...j, text: `${j.number}号`, value: j.houseId }));
				unit.forEach(k => {
					const isunit = list.find(j => j.unit == k.unit);
					if (!isunit) list.push(k);
				});
				this.$set(this.house, 'unit', list);
				number.forEach(k => {
					const isunit = numList.find(j => j.number == k.number);
					if (!isunit) numList.push(k);
				});
				this.$set(this.house, 'number', numList);
			},
			// 单元选择
			unitChange(e) {
				if (!e || e == '' || e.detail.value.length <= 0) return;
				this.unit = e.detail.value[0].value;
				const list = [];
				const floor = this.building.filter(j => j.unit == this.unit).map(j => ({ ...j, text: `${j.floor}层`, value: j.floor }));
				floor.forEach(k => {
					const isunit = list.find(j => j.floor == k.floor);
					if (!isunit) list.push(k);
				});
				this.$set(this.house, 'floor', list);
			},
			// 楼层选择
			floorChange(e) {
				if (!e || e == '' || e.detail.value.length <= 0) return;
				const list = [];
				const number = this.building.filter(j => j.floor == e.detail.value[0].value && j.unit == this.unit).map(j => ({ ...j, text: `${j.number}号`, value: j.houseId }));
				number.forEach(k => {
					const isunit = list.find(j => j.number == k.number);
					if (!isunit) list.push(k);
				});
				this.$set(this.house, 'number', list);
			},
			// 门牌选择
			houseChange(e) {
				if (!e || e == '' || e.detail.value.length <= 0) return;
				const dept = this.house.number.find(j => j.houseId == e.detail.value[0].value);
				if (dept) this.formData.deptId = dept.deptId;
			},
			// 提交
			async submit() {
				if (!this.formData.deptId || !this.formData.houseId || this.formData.houseId == '') {
					uni.showToast({
						title: '请选择完整信息',
						icon: 'error',
						duration: 2000,
					});
					return;
				}
				await request.registerUser(this.formData);
				const msg = this.residentId && this.residentId !== null ? '修改成功' : '添加成功';
				uni.showToast({
					title: msg,
					duration: 2000,
				});
				uni.navigateBack()
			},
		},
		onLoad(option) {
			this.residentId == option.residentId;
		}
	}
</script>

<style>
	.uni-section {
		padding-bottom: 10px;
		margin-bottom: 10px;
	}
	.uni-select__selector {
		z-index: 999 !important;
	}
	.uni-forms, .btn {
		width: 90%;
		margin: 10px auto;
	}
	.phoneBox {
		display: flex;
	}
</style>
