| <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> |