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.

212 lines
5.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<view class="content">
<view class="row b-b">
<text class="tit">姓名</text>
<input class="input" type="text" v-model="addressData.name" placeholder="收货人姓名" placeholder-class="placeholder" />
</view>
<view class="row b-b">
<text class="tit">手机号码</text>
<input class="input" type="number" v-model="addressData.phoneNumber" placeholder="收货人手机号码" placeholder-class="placeholder" />
</view>
<view class="row b-b">
<text class="tit">邮政编码</text>
<input class="input" type="number" v-model="addressData.postCode" placeholder="收货人邮政编码" placeholder-class="placeholder" />
</view>
<!-- <view class="row b-b">
<text class="tit">所在区域</text>
<text @click="chooseLocation" class="input">
{{addressData.province}} {{addressData.city}} {{addressData.region}}
</text>
<text class="yticon icon-shouhuodizhi" @click="chooseLocation"></text>
</view> -->
<view class="row b-b">
<text class="tit">所在区域</text>
<input class="input" type="text" v-model="addressData.prefixAddress" placeholder="所在区域" placeholder-class="placeholder" />
</view>
<view class="row b-b">
<text class="tit">详细地址</text>
<input class="input" type="text" v-model="addressData.detailAddress" placeholder="详细地址" placeholder-class="placeholder" />
</view>
<view class="row default-row">
<text class="tit">设为默认</text>
<switch :checked="addressData.defaultStatus==1" color="#fa436a" @change="switchChange" />
</view>
<button class="add-btn" @click="confirm">提交</button>
</view>
</template>
<script>
import {
addAddress,
updateAddress,
fetchAddressDetail
} from '@/api/address.js';
import rule from '@/utils/rule.js'
export default {
data() {
return {
addressData: {
name: '',
phoneNumber: '',
postCode: '',
detailAddress: '',
default: false,
province: '',
city: '',
region: '',
prefixAddress: ''
}
}
},
onLoad(option) {
let title = '新增收货地址';
if (option.type === 'edit') {
title = '编辑收货地址'
fetchAddressDetail(option.id).then(response=>{
this.addressData = response.data;
this.addressData.prefixAddress = this.addressData.province+this.addressData.city+this.addressData.region;
});
}
this.manageType = option.type;
uni.setNavigationBarTitle({
title
})
},
methods: {
switchChange(e) {
this.addressData.defaultStatus = e.detail.value ? 1 : 0;
},
//地图选择地址
chooseLocation() {
uni.chooseLocation({
success: (data) => {
this.covertAdderss(data.address);
this.addressData.detailAddress = data.name;
}
})
},
//将地址转化为省市区
covertAdderss(address) {
console.log("covertAdderss", address);
if (address.indexOf("省") != -1) {
this.addressData.province = address.substr(0, address.indexOf("省") + 1);
address = address.replace(this.addressData.province, "");
this.addressData.city = address.substr(0, address.indexOf("市") + 1);
address = address.replace(this.addressData.city, "");
this.addressData.region = address.substr(0, address.indexOf("区") + 1);
} else {
this.addressData.province = address.substr(0, address.indexOf("市") + 1);
address = address.replace(this.addressData.province, "");
this.addressData.city = "";
this.addressData.region = address.substr(0, address.indexOf("区") + 1);
}
},
//提交
confirm() {
let data = this.addressData;
if (!data.name) {
this.$api.msg('请填写收货人姓名');
return;
}
if (!rule.mobile(data.phoneNumber)) {
this.$api.msg('请输入正确的手机号码');
return;
}
if (!data.prefixAddress) {
this.$api.msg('请输入区域');
return;
}
this.covertAdderss(data.prefixAddress);
if (!data.province) {
this.$api.msg('请输入正确的省份');
return;
}
if (!data.detailAddress) {
this.$api.msg('请填写详细地址信息');
return;
}
if(this.manageType=='edit'){
updateAddress(this.addressData).then(response=>{
//this.$api.prePage()获取上一页实例可直接调用上页所有数据和方法在App.vue定义
this.$api.prePage().refreshList(data, this.manageType);
this.$api.msg("地址修改成功!");
setTimeout(() => {
uni.navigateBack()
}, 800)
});
}else{
addAddress(this.addressData).then(response=>{
//this.$api.prePage()获取上一页实例可直接调用上页所有数据和方法在App.vue定义
this.$api.prePage().refreshList(data, this.manageType);
this.$api.msg("地址添加成功!");
setTimeout(() => {
uni.navigateBack()
}, 800)
});
}
},
}
}
</script>
<style lang="scss">
page {
background: $page-color-base;
padding-top: 16upx;
}
.row {
display: flex;
align-items: center;
position: relative;
padding: 0 30upx;
height: 110upx;
background: #fff;
.tit {
flex-shrink: 0;
width: 150upx;
font-size: 30upx;
color: $font-color-dark;
}
.input {
flex: 1;
font-size: 30upx;
color: $font-color-dark;
}
.icon-shouhuodizhi {
font-size: 36upx;
color: $font-color-light;
}
}
.default-row {
margin-top: 16upx;
.tit {
flex: 1;
}
switch {
transform: translateX(16upx) scale(.9);
}
}
.add-btn {
display: flex;
align-items: center;
justify-content: center;
width: 690upx;
height: 80upx;
margin: 60upx auto;
font-size: $font-lg;
color: #fff;
background-color: $base-color;
border-radius: 10upx;
box-shadow: 1px 2px 5px rgba(219, 63, 96, 0.4);
}
</style>