<!-- 报修 -->
<template>
	<view class="repair bx reserveSpace">
		<uv-form :model="form" :rules="rules" errorType="toast" ref="form" labelPosition="left" labelWidth="140">

			<uv-form-item label="楼栋" prop="building" borderBottom @click="floorPickerOpen">
				<uv-input placeholder="请选择楼层" v-model="form.building" border="none" readonly :fontSize="30"></uv-input>
				<template v-slot:right>
					<uv-icon name="arrow-right"></uv-icon>
				</template>
			</uv-form-item>

			<uv-form-item label="维修项目" prop="project" borderBottom @click="projectPickerOpen">
				<uv-input v-model="form.project" placeholder="请填写维修物品的名称" readonly :fontSize="30"
					border="none"></uv-input>
				<template v-slot:right>
					<uv-icon name="arrow-right"></uv-icon>
				</template>
			</uv-form-item>

			<uv-form-item label="室号" prop="room" borderBottom>
				<uv-input placeholder="请选择室号" v-model="form.room" border="none" :fontSize="30"></uv-input>
			</uv-form-item>

			<uv-form-item label="你的姓名" prop="name" borderBottom>
				<uv-input v-model="form.name" placeholder="请填写姓名" :fontSize="30" border="none"></uv-input>
			</uv-form-item>

			<uv-form-item label="你的电话" prop="phone" borderBottom>
				<uv-input v-model="form.phone" placeholder="请填写电话号" border="none" :fontSize="30"></uv-input>
			</uv-form-item>

			<uv-form-item label="描述说明" prop="context" borderBottom>
				<uv-textarea v-model="form.context" :height="140" :maxlength="200" textStyle="font-size : 30rpx" count
					placeholder="请输入描述说明"></uv-textarea>
			</uv-form-item>

			<uv-form-item label="照片" prop="image" labelPosition="top">
				<view class="image-list">
					<view @click="openImageMenu(index)" v-for="(item,index) in form.image" :key="index"
						class="image-item">
						<image :src="item" mode="widthFix"></image>
					</view>
					<view v-if="form.image.length < maxUpload" @click="uploadImage" class="upload">
						<uv-icon name="camera-fill" color="#3c9cff" size="50"></uv-icon>
					</view>
				</view>
			</uv-form-item>

			<uv-button type="primary" text="提交" shape="circle" customStyle="margin-top: 10px"
				@click="submitRepair"></uv-button>
		</uv-form>

		<!-- 报修地址选择(楼栋) -->
		<uv-picker ref="floorPicker" :columns="floorList" :round="20" :itemHeight="100" keyName="name" title="选择楼栋"
			@confirm="floorConfirm"></uv-picker>

		<!-- 报修地址选择(室号) -->
		<!-- 	<uv-picker ref="roomPicker" :columns="roomNumberList" :itemHeight="100" :round="20" keyName="name" title="选择室号"
			@confirm="roomConfirm"></uv-picker> -->

		<!-- 维修项目选择 -->
		<uv-picker ref="projectPicker" :columns="projectList" :itemHeight="100" :round="20" keyName="name"
			title="选择维修项目" @confirm="projectConfirm"></uv-picker>

		<!-- 图片操作菜单 -->
		<uv-action-sheet ref="actionSheet" :actions="list" :round="20" safeAreaInsetBottom @select="selectImageSheet">
		</uv-action-sheet>

		<!-- 隐私政策 -->
		<PrivacyAgreementPoup ref="showPrivacy"></PrivacyAgreementPoup>
	</view>
</template>

<script>
	import {
		mapState
	} from 'vuex'
	import PrivacyAgreementPoup from "@/components/PrivacyAgreementPoup/PrivacyAgreementPoup.vue";
	export default {
		name: 'Repair',
		components: {
			PrivacyAgreementPoup
		},
		data() {
			return {
				form: {
					building: '', //楼栋
					room: '', //室号
					project: '', //项目
					phone: '', //手机号
					name: '', //姓名
					context: '', //简介
					image: []
				},
				rules: { //参数校验
					building: {
						type: 'string',
						required: true,
						message: '请选择楼栋',
						trigger: ['blur', 'change']
					},
					room: {
						type: 'string',
						required: true,
						message: '请选择室号',
						trigger: ['blur', 'change']
					},
					project: {
						type: 'string',
						required: true,
						message: '请填写维修物品',
						trigger: ['blur', 'change']
					},
					name: {
						type: 'string',
						required: true,
						message: '请填写姓名',
						trigger: ['blur', 'change']
					},
					phone: [{
						required: true,
						message: '请填写手机号',
						trigger: ['blur', 'change']
					}, {
						validator: (rule, value, callback) => {
							return uni.$uv.test.mobile(value);
						},
						message: '手机号格式错误',
						trigger: ['blur']
					}],
					context: {
						type: 'string',
						required: true,
						message: '请填写描述说明',
						trigger: ['blur', 'change']
					},
					image: {
						type: 'array',
						required: true,
						message: '请上传图片',
						trigger: ['blur', 'change']
					},
				},
				maxUpload: 4, //最大上传图片张数
				list: [ //图片操作菜单操作项
					{
						name: '查看图片',
						id: 0
					},
					{
						name: '删除图片',
						id: 1
					}
				],
				currentIndex: undefined, //当前操作的图片索引
				floorList: [], //楼栋列表
				// roomNumberList: [], //室号列表
				projectList: [], //项目列表
			}
		},
		onShow() {
			//用户没有登录
			if (!this.userInfo.id) {
				this.logout()
			}
			if (wx.onNeedPrivacyAuthorization) {
				wx.onNeedPrivacyAuthorization(resolve => {
					this.resolvePrivacyAuthorization = resolve
					this.$refs.showPrivacy.init(resolve)
				})
			}
			if (this.floorList.length < 1) this.getActorGoList()
			if (this.projectList.length < 1) this.getProjectList()
		},
		onReady() {
			this.$refs.form.setRules(this.rules);
		},
		methods: {
			//上传图片
			uploadImage() {
				let self = this
				this.$Oss.ossUploadImage({
					success(res) {
						self.form.image.push(res)
					}
				})
			},

			//打开图片操作菜单
			openImageMenu(index) {
				this.currentIndex = index
				this.$refs.actionSheet.open();
			},

			//用户选择了图片操作选项
			selectImageSheet(imageSheet) {
				let {
					id
				} = imageSheet
				if (id) {
					this.deleteImageAsList()
				} else {
					this.viewImageAsList()
				}
			},

			//查看图片
			viewImageAsList() {
				this.$utils.previewImage({
					current: this.currentIndex,
					urls: this.form.image
				})
			},

			//删除图片
			deleteImageAsList() {
				this.form.image = this.form.image.filter((_, index) => {
					return index != this.currentIndex
				})
			},

			//用户选择了楼栋
			floorConfirm(floor) {
				this.form.building = floor.value[0].name
				//获取楼栋对应的室号信息
				// this.getFloorList(floor.value[0].id)
			},

			//打开选择楼栋
			floorPickerOpen() {
				if (this.floorList.length == 0) {
					return uni.showToast({
						icon: 'none',
						title: '暂无楼栋供用户选择'
					})
				}
				this.$refs.floorPicker.open();
			},

			// //用户选择了室号
			// roomConfirm(floor) {
			// 	this.form.room = floor.value[0].name
			// },

			// //打开选择室号
			// roomPickerOpen() {
			// 	if (!this.form.building) {
			// 		return uni.showToast({
			// 			icon: 'none',
			// 			title: '请先选择楼栋信息'
			// 		})
			// 	}
			// 	this.$refs.roomPicker.open();
			// },

			//用户选择了项目
			projectConfirm(project) {
				this.form.project = project.value[0].name
			},

			//打开选择项目
			projectPickerOpen() {
				if (this.projectList.length == 0) {
					return uni.showToast({
						icon: 'none',
						title: '暂无项目供用户选择'
					})
				}
				this.$refs.projectPicker.open();
			},

			//提交报修
			submitRepair() {
				this.$refs.form.validate().then(res => {
					let images = this.form.image.join()
					if (this.userInfo && this.userInfo.isDai == '1') {
						this.cleanfrom() //清空表单内容
						return uni.showToast({
							icon: 'none',
							title: '维修员不能主动提交报修'
						})
					}
					this.$api('addSchoolOrder', {
						...this.form,
						image: images
					}, res => {
						if (res.code == 200) {
							uni.showToast({
								icon: 'none',
								title: '申请报修成功'
							})
							this.cleanfrom()
							this.$refs.form.clearValidate();
							this.toRepairList()
						}
					})
				}).catch(errors => {})
			},

			//跳转到报修记录
			toRepairList() {
				uni.navigateTo({
					url: '/pages/repairList/repairList'
				})
			},

			//清除表单数据
			cleanfrom() {
				this.form = {
					building: '', //楼栋
					room: '', //室号
					project: '', //项目
					phone: '', //手机号
					name: '', //姓名
					context: '', //简介
					image: []
				}
			},

			//获取楼栋列表
			getActorGoList() {
				this.$api('getFloorList', res => {
					this.floorList.push(res.result)
				})
			},

			//获取室号列表 
			// getFloorList(id) {
			// 	this.$api('getActorGoList', {
			// 		id
			// 	}, res => {
			// 		this.roomNumberList = []
			// 		if (res.result.length > 0 && this.form.room) this.form.room = res.result[0].name
			// 		this.roomNumberList.push(res.result)
			// 	})
			// }

			//获取项目列表
			getProjectList() {
				this.$api('getRepairList', res => {
					this.getRepairList = []
					this.projectList.push(res.result)
				})
			},

			//退出登录
			logout() {
				uni.reLaunch({
					url: '/pages/login/studentLogin'
				})
				uni.removeStorageSync('token');
				uni.removeStorageSync('userInfo');
				this.$store.commit('setUserInfo', {})
			},
		},
		computed: {
			...mapState(['userInfo']),
		},
	}
</script>

<style scoped>
	.bx {
		width: 96%;
		margin: 0rpx auto;
	}

	.repair-title {
		display: flex;
		align-items: center;
		justify-content: center;
		height: 100rpx;
		padding-top: 100rpx;
	}

	.repair-title text {
		font-size: 40rpx;
		font-weight: bold;
		height: 70rpx;
		border-bottom: 8rpx solid #3c9cff;
	}

	.image-list {
		width: 100%;
		display: flex;
		flex-wrap: wrap;
		padding-top: 20rpx;
	}

	.image-item,
	.upload {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 24%;
		height: 174rpx;
		background: #f8f8f8;
		margin-left: 1%;
		border-radius: 15rpx;
		overflow: hidden;
		margin-bottom: 20rpx;
	}

	.image-item image {
		width: 100%;
	}

	/deep/ .uv-safe-area-inset-bottom {
		padding-bottom: 0 !important
	}
</style>