<template>
	<uv-popup round="40rpx" ref="addressPopup" :customStyle="{ height: 'auto' , width : '100%' , padding : '20rpx'}">
		<view class="redact-address">
			<view class="redact-address-title">{{title}}</view>

			<uv-form label-width="210rpx" :model="addressDetail" ref="form">
				<uv-form-item label="联系人" prop="name">
					<uv-input v-model="addressDetail.name" placeholder="请输入联系人姓名" border="none">
					</uv-input>
				</uv-form-item>

				<uv-form-item label="手机号" prop="phone">
					<uv-input v-model="addressDetail.phone" placeholder="请输入手机号" border="none">
					</uv-input>
				</uv-form-item>

				<uv-form-item label="所在地区" prop="address">
					<uv-input v-model="addressDetail.address" placeholder="请选择所在地区" border="none">
					</uv-input>
					<template #right>
						<view style="padding-right: 40rpx;color: #FBAB32;" @click.stop="selectAddr">
							<image src="../../static/address/selectIcon.png" mode="aspectFit"></image>定位
						</view>
					</template>
				</uv-form-item>

				<uv-form-item label="详细地址" prop="addressDetail">
					<uv-input v-model="addressDetail.addressDetail" placeholder="请输入详细地址" border="none">
					</uv-input>
				</uv-form-item>
			</uv-form>

			<view @click="onSubmit" class="save">{{ addressDetail.id ? '修改地址' : '新增地址'}}</view>

		</view>
	</uv-popup>
</template>

<script>
	import Position from '@/utils/position.js'
	export default {
		data() {
			return {
				addressDetail: {}
			}
		},
		props: {
			title: {
				type: String,
				default: '新增地址'
			}
		},
		methods: {
			open(addressDetail) {
				this.addressDetail = addressDetail
				this.$refs.addressPopup.open('bottom')
			},
			close(){
				this.$refs.addressPopup.close()
			},
			//新增和修改地址
			onSubmit() {
				let isOk = this.parameterVerification(this.addressDetail)
				if (isOk && !isOk.auth) {
					return uni.showToast({
						icon: 'none',
						title: isOk.title,
						'zIndex': 10000
					})
				}
				this.$emit('saveOrUpdate', this.addressDetail)
			},
			//验证用户参数合法性
			parameterVerification(addressDetaila) {
				let {
					name,
					phone,
					address,
					addressDetail
				} = addressDetaila
				if (name.trim() == '') {
					return {
						title: '请填写联系人',
						auth: false
					}
				} else if (phone.trim() == '') {
					return {
						title: '请填写手机号',
						auth: false
					}
				} else if (address.trim() == '') {
					return {
						title: '请填写所在地区',
						auth: false
					}
				} else if (addressDetail.trim() == '') {
					return {
						title: '请填写详细地址',
						auth: false
					}
				} else if (phone.trim() != '') {
					if (!this.$utils.verificationPhone(phone)) {
						return {
							title: '手机号格式不合法',
							auth: false
						}
					}
				}
				return {
					title: '验证通过',
					auth: true
				}
			},

			//地图上选择地址
			selectAddr() {
				Position.getLocation(res => {
					Position.selectAddress(res.longitude, res.latitude, success => {
						this.setAddress(success)
					})
				})
			},

			//提取用户选择的地址信息复制给表单数据
			setAddress(res) {
				//经纬度信息
				this.addressDetail.latitude = res.latitude
				this.addressDetail.longitude = res.longitude

				if (!res.address && res.name) { //用户直接选择城市的逻辑
					return this.addressDetail.address = res.name
				}
				if (res.address || res.name) {
					return this.addressDetail.address = res.address + res.name
				}
				this.addressDetail.address = '' //用户啥都没选就点击勾选
			},
		}
	}
</script>

<style lang="scss" scoped>
	.redact-address {
		box-sizing: border-box;

		.redact-address-title {
			height: 80rpx;
			line-height: 80rpx;
			font-size: 30rpx;
			color: #333333;
			font-weight: 600;
		}

		.save {
			display: flex;
			align-items: center;
			justify-content: center;
			width: 90%;
			height: 80rpx;
			border-radius: 40rpx;
			color: white;
			font-size: 28rpx;
			margin: 0rpx auto;
			background: $uni-color;
			margin-top: 150rpx;
		}

		image {
			width: 25rpx;
			height: 25rpx;
		}


		//修改组件默认样式
		.uv-form {
			padding: 30rpx 0rpx;
		}

		&::v-deep .uv-cell {
			padding: 0rpx 0rpx;
			font-size: 26rpx;

			&::after {
				border: none !important;
			}

			.uv-field__label {
				display: flex;
				align-items: center;
				height: 80rpx;

			}

			.uv-field__control,
			.uv-field__right-icon {
				height: 80rpx;
				font-size: 26rpx;
				border-bottom: 2rpx solid #cbc8c8;
			}

			.uv-field__right-icon {
				display: flex;
				align-items: center;
				height: 78rpx;
				color: #5FCC9F;
			}

			.uv-cell__value {
				height: 120rpx;
			}

		}

		&::v-deep .uv-field__error-message {
			color: #5AC796;
			font-size: 20rpx;
			margin-top: 10rpx;
		}
	}
</style>