You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
536 lines
11 KiB
536 lines
11 KiB
<template>
|
|
<view class="view-main">
|
|
<map :latitude="latitude" :longitude="longitude" scale="16" show-location style="width: 100%; height: 38vh;">
|
|
<image class="map-marker" :src="markerIcon"></image>
|
|
</map>
|
|
<view class="page-con">
|
|
<view class="con-hd">
|
|
<view class="choose-address" v-if="!addressInfo || !addressInfo.address" @click="chooseAddressView">
|
|
选择收货地址 >
|
|
</view>
|
|
<view class="choose-address2" v-else>
|
|
<view class="address2-l">
|
|
<!-- <view class="address2-lhd">{{addressInfo.title}}</view> -->
|
|
<view class="address2-lhd">{{addressInfo.address}}</view>
|
|
</view>
|
|
<view class="address2-r" @click="chooseAddressView">修改地址</view>
|
|
</view>
|
|
</view>
|
|
<view class="con-bd">
|
|
<view class="con-bd-item">
|
|
<view class="con-bd-item-name">门牌号</view>
|
|
<view class="con-bd-item-con">
|
|
<input type="text" v-model="formData.detailAddress" placeholder="详细地址,例如1层101室"
|
|
placeholder-class="input-placeholder" />
|
|
</view>
|
|
</view>
|
|
<!-- <view class="con-bd-item">
|
|
<view class="con-bd-item-name">标签</view>
|
|
<view class="con-bd-item-con">
|
|
<view :class="formData.lableName == item ? 'lable-item lable-item-on':'lable-item'"
|
|
v-for="(item,index) in labelData" :key="index" @click="chooseLable(item)">{{item}}</view>
|
|
</view>
|
|
</view> -->
|
|
<view class="con-bd-item">
|
|
<view class="con-bd-item-name">联系人</view>
|
|
<view class="con-bd-item-con">
|
|
<input type="text" v-model="formData.userName" placeholder="请填写收货人姓名"
|
|
placeholder-class="input-placeholder" />
|
|
<!-- <view class="con-bd-sex-box" @click="chooseSex(1)">
|
|
<image class="choose-sex-icon" :src="formData.sexType == 1 ? sele2Icon : noseleIcon"
|
|
mode=""></image>
|
|
先生
|
|
</view>
|
|
<view class="con-bd-sex-box" @click="chooseSex(2)">
|
|
<image class="choose-sex-icon" :src="formData.sexType == 2 ? sele2Icon : noseleIcon"
|
|
mode=""></image>
|
|
女士
|
|
</view> -->
|
|
</view>
|
|
</view>
|
|
<view class="con-bd-item">
|
|
<view class="con-bd-item-name">手机号</view>
|
|
<view class="con-bd-item-con">
|
|
<input type="number" maxlength="11" v-model="formData.userPhone" placeholder="请填写收货人手机号码"
|
|
placeholder-class="input-placeholder" />
|
|
</view>
|
|
</view>
|
|
<view class="con-bd-agree" @click="changeAgree">
|
|
<image class="agreeicon" :src="agreeState ? seleIcon : noseleIcon" mode=""></image>
|
|
<view class="agreetext">设为默认地址</view>
|
|
</view>
|
|
<view class="con-ft-btn"
|
|
:class="{'con-ft-btn1':addressInfo && addressInfo.address,'con-ft-btn3':!addressInfo || !addressInfo.address}"
|
|
@click="submitAddress">
|
|
保存地址</view>
|
|
<!-- <view class="con-ft-btn con-ft-btn2" @click="deleteAddress">删除地址</view> -->
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
formData: {
|
|
detailAddress: '',
|
|
userName: '',
|
|
userPhone: '',
|
|
lableName: '家',
|
|
sexType: 1, //1 先生 2 女士
|
|
},
|
|
labelData: ['家', '公司', '学校', '父母家'],
|
|
addressInfo: {}, //选中的地址信息
|
|
agreeState: false, //是否是默认地址
|
|
longitude: null,
|
|
latitude: null,
|
|
markerIcon: require('../../static/marker.png'),
|
|
seleIcon: require('../../static/sele.png'),
|
|
sele2Icon: require('../../static/sele2.png'),
|
|
noseleIcon: require('../../static/no-sele.png'),
|
|
oldObj: ''
|
|
}
|
|
},
|
|
mounted() {
|
|
this.getLocation()
|
|
},
|
|
methods: {
|
|
//数据回显时使用此方法
|
|
setData(obj) {
|
|
this.oldObj = obj
|
|
this.formData.detailAddress = obj.detailAddress
|
|
this.formData.userName = obj.userName
|
|
this.formData.userPhone = obj.userPhone
|
|
this.formData.lableName = obj.lableName
|
|
this.formData.sexType = obj.sexType
|
|
this.addressInfo.title = obj.title
|
|
this.addressInfo.address = obj.address
|
|
this.addressInfo.latitude = obj.latitude
|
|
this.addressInfo.longitude = obj.longitude
|
|
this.agreeState = obj.agreeState
|
|
},
|
|
//获取当前的地理位置
|
|
getLocation() {
|
|
uni.showLoading({
|
|
title: '正在获取定位中...',
|
|
})
|
|
uni.getLocation({
|
|
type: 'gcj02',
|
|
isHighAccuracy: true,
|
|
geocode: 'true',
|
|
highAccuracyExpireTime: 3500,
|
|
success: (res) => {
|
|
uni.hideLoading();
|
|
this.longitude = res.longitude;
|
|
this.latitude = res.latitude;
|
|
},
|
|
fail: (res) => {
|
|
if (res.errMsg == "getLocation:fail auth deny") {
|
|
uni.showModal({
|
|
content: '检测到您没打开获取信息功能权限,是否去设置打开?',
|
|
confirmText: "确认",
|
|
cancelText: '取消',
|
|
success: (res) => {
|
|
if (res.confirm) {
|
|
uni.openSetting({
|
|
success: (res) => {}
|
|
})
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
})
|
|
},
|
|
//保存地址
|
|
submitAddress() {
|
|
if (!this.addressInfo.latitude) {
|
|
uni.showToast({
|
|
title: '请选择收货地址',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
if (!this.formData.detailAddress) {
|
|
uni.showToast({
|
|
title: '请输入门牌号',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
if (!this.formData.userName) {
|
|
uni.showToast({
|
|
title: '请输入联系人',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
if (!this.formData.userPhone) {
|
|
uni.showToast({
|
|
title: '请输入手机号',
|
|
icon: 'none'
|
|
})
|
|
return
|
|
}
|
|
let obj = {
|
|
...this.formData,
|
|
...this.addressInfo
|
|
}
|
|
obj.agreeState = this.agreeState
|
|
this.$emit('submit', obj)
|
|
},
|
|
//删除地址
|
|
deleteAddress() {
|
|
this.$emit('detele', this.oldObj)
|
|
},
|
|
//选择地址、修改编辑地址
|
|
chooseAddressView() {
|
|
uni.chooseLocation({
|
|
success: res => {
|
|
console.log(res)
|
|
if (!res.name || !res.address || !res.latitude || !res.longitude) return
|
|
let addressObj = {
|
|
title: res.name,
|
|
address: res.address,
|
|
latitude: res.latitude,
|
|
longitude: res.longitude
|
|
}
|
|
this.latitude = res.latitude
|
|
this.longitude = res.longitude
|
|
this.addressInfo = addressObj
|
|
},
|
|
fail: res => {
|
|
console.log(res)
|
|
}
|
|
});
|
|
},
|
|
//联系人性别选择
|
|
chooseSex(type) {
|
|
this.formData.sexType = type
|
|
},
|
|
//标签选择
|
|
chooseLable(item) {
|
|
this.formData.lableName = item
|
|
},
|
|
//点击隐私协议
|
|
changeAgree() {
|
|
this.agreeState = !this.agreeState
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.view-main {
|
|
width: 100%;
|
|
height: 100%;
|
|
background: #f3f3f3;
|
|
}
|
|
|
|
.map-marker {
|
|
width: 44rpx;
|
|
height: 62rpx;
|
|
position: absolute;
|
|
top: 15vh;
|
|
left: 50%;
|
|
transform: translate(-50%, -50%);
|
|
}
|
|
|
|
.map-tip {
|
|
font-size: 20rpx;
|
|
color: #b6b6b6;
|
|
line-height: 42rpx;
|
|
padding: 0 20rpx;
|
|
position: absolute;
|
|
left: 50%;
|
|
top: 30rpx;
|
|
box-shadow: 0px 1px 10px 1px rgba(153, 153, 153, 0.34);
|
|
background-color: #fff;
|
|
border-radius: 4px;
|
|
transform: translateX(-50%);
|
|
}
|
|
|
|
.poiss-box {
|
|
width: 100%;
|
|
padding: 20rpx 0;
|
|
background-color: #FFFFFF;
|
|
font-size: 26rpx;
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 0;
|
|
}
|
|
|
|
.poiss-item {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
width: calc(100% - 48rpx);
|
|
height: 100rpx;
|
|
padding: 0 24rpx;
|
|
border-bottom: 1px solid #f9f9f9;
|
|
}
|
|
|
|
.poiss-item-l {
|
|
width: calc(100% - 184rpx);
|
|
}
|
|
|
|
.poiss-item-lhd {
|
|
font-size: 32rpx;
|
|
color: #333333;
|
|
line-height: 48rpx;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.poiss-item-lbd {
|
|
font-size: 28rpx;
|
|
color: #b6b6b6;
|
|
line-height: 42rpx;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.poiss-item-r {
|
|
width: 36rpx;
|
|
height: 36rpx;
|
|
margin: 0 30rpx;
|
|
}
|
|
|
|
.primary-btn {
|
|
width: 688rpx;
|
|
height: 88rpx;
|
|
margin: 0 auto;
|
|
margin-top: 28rpx;
|
|
background: #6A8A2D
|
|
;
|
|
border-radius: 44rpx;
|
|
font-size: 32rpx;
|
|
color: #FFFFFF;
|
|
line-height: 88rpx;
|
|
text-align: center;
|
|
}
|
|
|
|
.page-con {
|
|
width: 702rpx;
|
|
height: 60vh;
|
|
position: fixed;
|
|
bottom: 0;
|
|
left: 24rpx;
|
|
}
|
|
|
|
.con-hd {
|
|
display: flex;
|
|
align-items: center;
|
|
width: 702rpx;
|
|
height: 128rpx;
|
|
margin: 0 auto;
|
|
background: #FFFFFF;
|
|
box-shadow: 0rpx 4rpx 8rpx 0rpx rgba(88, 102, 123, 0.2);
|
|
border-radius: 24rpx;
|
|
}
|
|
|
|
.choose-address {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 92%;
|
|
height: 64rpx;
|
|
margin: 0 auto;
|
|
border-radius: 12rpx;
|
|
border: 2rpx solid #6A8A2D
|
|
;
|
|
font-size: 32rpx;
|
|
color: #6A8A2D
|
|
;
|
|
}
|
|
|
|
.choose-address2 {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
width: calc(100% - 48rpx);
|
|
padding: 0 24rpx;
|
|
}
|
|
|
|
.address2-l {
|
|
width: calc(100% - 184rpx);
|
|
}
|
|
|
|
.address2-lhd {
|
|
font-size: 32rpx;
|
|
font-weight: bold;
|
|
color: #333333;
|
|
line-height: 48rpx;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.address2-lbd {
|
|
font-size: 28rpx;
|
|
color: #999999;
|
|
line-height: 42rpx;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.address2-r {
|
|
width: 144rpx;
|
|
height: 60rpx;
|
|
background: #FFFFFF;
|
|
border-radius: 12rpx;
|
|
border: 2rpx solid #6A8A2D
|
|
;
|
|
font-size: 28rpx;
|
|
color: #6A8A2D
|
|
;
|
|
line-height: 60rpx;
|
|
text-align: center;
|
|
}
|
|
|
|
.con-bd {
|
|
width: 100%;
|
|
height: calc(90vh - 160rpx);
|
|
padding: 8rpx 24rpx 0;
|
|
margin-top: 24rpx;
|
|
background: #FFFFFF;
|
|
border-radius: 24rpx 24rpx 0rpx 0rpx;
|
|
}
|
|
|
|
.con-bd-item {
|
|
display: flex;
|
|
align-items: center;
|
|
width: 100%;
|
|
height: 110rpx;
|
|
}
|
|
|
|
.con-bd-item-name {
|
|
width: 120rpx;
|
|
height: 110rpx;
|
|
text-align: left;
|
|
font-size: 28rpx;
|
|
font-weight: bold;
|
|
color: #333333;
|
|
line-height: 110rpx;
|
|
}
|
|
|
|
.con-bd-item-con {
|
|
display: flex;
|
|
align-items: center;
|
|
width: calc(100% - 120rpx);
|
|
height: 108rpx;
|
|
border-bottom: 2rpx solid #F7F7F7;
|
|
}
|
|
|
|
.con-bd-item-con input {
|
|
width: 100%;
|
|
height: 60rpx;
|
|
}
|
|
|
|
.lable-item {
|
|
width: 88rpx;
|
|
height: 48rpx;
|
|
margin-right: 18rpx;
|
|
background: #FFFFFF;
|
|
border-radius: 6rpx;
|
|
border: 2rpx solid #E3E3E3;
|
|
font-size: 24rpx;
|
|
color: #333333;
|
|
line-height: 48rpx;
|
|
text-align: center;
|
|
}
|
|
|
|
.lable-item-on {
|
|
background: #6A8A2D
|
|
!important;
|
|
border: 2rpx solid #6A8A2D
|
|
;
|
|
color: #FFFFFF !important;
|
|
}
|
|
|
|
.con-bd-item-con2 input {
|
|
width: 50%;
|
|
height: 60rpx;
|
|
}
|
|
|
|
.con-bd-sex-box {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-left: 16rpx;
|
|
font-size: 28rpx;
|
|
}
|
|
|
|
.choose-sex-icon {
|
|
width: 36rpx;
|
|
height: 36rpx;
|
|
margin-right: 12rpx;
|
|
}
|
|
|
|
.con-bd-agree {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: flex-start;
|
|
margin-top: 40rpx;
|
|
width: 100%;
|
|
}
|
|
|
|
.agreeicon {
|
|
width: 36rpx;
|
|
height: 36rpx;
|
|
margin-right: 20rpx;
|
|
margin-top: 2rpx;
|
|
}
|
|
|
|
.agreetext {
|
|
display: flex;
|
|
align-items: center;
|
|
font-size: 28rpx;
|
|
line-height: 28rpx;
|
|
color: #999999;
|
|
}
|
|
|
|
.con-ft-btn {
|
|
width: 644rpx;
|
|
height: 88rpx;
|
|
margin-top: 94rpx;
|
|
border-radius: 44rpx;
|
|
font-size: 32rpx;
|
|
line-height: 88rpx;
|
|
text-align: center;
|
|
}
|
|
|
|
.con-ft-btn:last-child {
|
|
margin-top: 32rpx;
|
|
}
|
|
|
|
.con-ft-btn1 {
|
|
background: #6A8A2D
|
|
;
|
|
color: #FFFFFF;
|
|
}
|
|
|
|
.con-ft-btn2 {
|
|
background: #FFFFFF;
|
|
border: 2rpx solid #DEDEDE;
|
|
color: #666666;
|
|
}
|
|
|
|
.con-ft-btn3 {
|
|
background: #DEDEDE;
|
|
border: 2rpx solid #DEDEDE;
|
|
font-size: 32rpx;
|
|
color: #FFFFFF;
|
|
}
|
|
|
|
.input-placeholder {
|
|
font-size: 28rpx;
|
|
color: #999999;
|
|
}
|
|
</style>
|