<template>
|
|
<view class="wrap flex-1">
|
|
<view class="top">
|
|
<u-form :model="form" ref="uForm">
|
|
<u-form-item prop="name" :border-bottom="false">
|
|
<view class="item">
|
|
<view class="left">收货人</view>
|
|
<input type="text" placeholder-class="line" placeholder="请填写收货人姓名" v-model="form.name" />
|
|
</view>
|
|
</u-form-item>
|
|
<u-form-item prop="phone" :border-bottom="false">
|
|
<view class="item">
|
|
<view class="left">手机号码</view>
|
|
<input type="text" placeholder-class="line" maxlength="11" placeholder="请填写收货人手机号" v-model="form.phone" />
|
|
</view>
|
|
</u-form-item>
|
|
<u-form-item prop="shippingAddress" :border-bottom="false">
|
|
<view class="item" @tap="showRegionPicker">
|
|
<view class="left">所在地区</view>
|
|
<input disabled type="text" placeholder-class="line" placeholder="省市区县、乡镇等" v-model="form.shippingAddress" />
|
|
</view>
|
|
</u-form-item>
|
|
<u-form-item prop="addressDetail" :border-bottom="false">
|
|
<view class="item address">
|
|
<view class="left">详细地址</view>
|
|
<textarea type="text" placeholder-class="line" placeholder="街道、楼牌等" v-model="form.addressDetail" />
|
|
</view>
|
|
</u-form-item>
|
|
</u-form>
|
|
</view>
|
|
<view class="bottom">
|
|
<view class="default">
|
|
<view class="left">
|
|
<view class="set">设置默认地址</view>
|
|
<view class="tips">提醒:每次下单会默认推荐该地址</view>
|
|
</view>
|
|
<view class="right"><u-switch active-color="#01AEEA" v-model="form.defaultFlag" /></view>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="p-l-20 p-r-20">
|
|
<view class="m-b-20">
|
|
<u-button type="primary" shape="circle" @click="save">保存</u-button>
|
|
</view>
|
|
<u-button type="error" shape="circle" @click="delShow = true" v-if="options.type == 'edit'">删除</u-button>
|
|
</view>
|
|
|
|
<u-picker mode="region" ref="uPicker" v-model="show" @confirm="getSelectAddress"/>
|
|
|
|
<u-modal v-model="delShow" show-cancel-button confirm-color="#fa3534" @confirm="delAddress" content="您确定要删除该地址吗?" />
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
export default {
|
|
data() {
|
|
return {
|
|
form: {
|
|
id: '',
|
|
addressDetail: '',
|
|
defaultFlag: false,
|
|
name: '',
|
|
phone: '',
|
|
shippingAddress: '',
|
|
},
|
|
rules: {
|
|
name: [
|
|
{
|
|
message: '请输入收货人',
|
|
},
|
|
{
|
|
validator: (rule, value, callback) => {
|
|
let username = /^[\u4E00-\u9FA5\uf900-\ufa2d·s]{2,99}$/;
|
|
return username.test(value);
|
|
},
|
|
message: '请输入正确格式的收货人',
|
|
trigger: ['blur','change']
|
|
}
|
|
],
|
|
phone: [
|
|
{
|
|
required: true,
|
|
message: '请输入手机号码',
|
|
trigger: ['change', 'blur']
|
|
},
|
|
{
|
|
message: '请输入正确格式的手机号码',
|
|
validator: (rule, value, callback) => {
|
|
return this.$u.test.mobile(value);
|
|
}
|
|
}
|
|
],
|
|
shippingAddress: [
|
|
{
|
|
required: true,
|
|
message: '请选择所在地区',
|
|
trigger: ['change', 'blur']
|
|
}
|
|
],
|
|
addressDetail: [
|
|
{
|
|
required: true,
|
|
message: '请输入详细地址',
|
|
trigger: ['change', 'blur']
|
|
}
|
|
],
|
|
},
|
|
show: false,
|
|
delShow: false,
|
|
options: {},
|
|
checked: false,
|
|
id:null,
|
|
uid: null
|
|
};
|
|
},
|
|
onReady() {
|
|
this.$refs.uForm.setRules(this.rules);
|
|
},
|
|
onLoad(options) {
|
|
// 判断是从那来的 默认首页
|
|
|
|
if(Object.keys(options).length>0){
|
|
uni.setNavigationBarTitle({
|
|
title: options.title
|
|
})
|
|
let info = options.info && JSON.parse(decodeURIComponent(options.info))
|
|
this.options = { ...options, info}
|
|
for (let key in this.form) {
|
|
this.form[key] = info[key]
|
|
}
|
|
}
|
|
// if(Object.keys(options).length>0){
|
|
// const info = JSON.parse(options.info)
|
|
// console.log(info);
|
|
// this.name= info.name;
|
|
// this.phone= info.phone;
|
|
// this.address= info.shippingAddress;
|
|
// this.address_detele= info.addressDetail;
|
|
// this.checked= info.defaultFlag == 0? false: true;
|
|
// this.id = info.id;
|
|
// }
|
|
|
|
},
|
|
methods: {
|
|
save() {
|
|
const that = this
|
|
this.$refs.uForm.validate(valid => {
|
|
if (valid) {
|
|
console.log(that.options)
|
|
if(that.options.type === 'add' || that.options.type === 'setting') {
|
|
that.add();
|
|
}else {
|
|
that.edit();
|
|
}
|
|
} else {
|
|
console.log(that.options)
|
|
console.log('验证失败');
|
|
}
|
|
});
|
|
|
|
},
|
|
edit() {
|
|
uni.showLoading({
|
|
title: '保存中...'
|
|
})
|
|
let params = { ...this.form, defaultFlag: this.form.defaultFlag ? 1 : 0, id: this.options.info.id}
|
|
this.$api('editAddress',params).then(res => {
|
|
let { code, result, message } = res
|
|
uni.hideLoading()
|
|
if(code == 200) {
|
|
uni.$emit('editAddress', params)
|
|
this.$Toast(message);
|
|
setTimeout(() => {
|
|
uni.navigateBack({
|
|
delta: 1
|
|
});
|
|
},1500)
|
|
}else{
|
|
this.$Toast(message);
|
|
}
|
|
}).catch(err => {
|
|
uni.hideLoading()
|
|
this.$Toast(err.message);
|
|
})
|
|
},
|
|
add () {
|
|
uni.showLoading({
|
|
title: '保存中...'
|
|
})
|
|
let params = { ...this.form, defaultFlag: this.form.defaultFlag ? 1 : 0}
|
|
delete params.id;
|
|
this.$api('addAddress', params).then(res => {
|
|
let { code, result, message } = res
|
|
uni.hideLoading()
|
|
if(code == 200) {
|
|
if (this.options.type === 'add') {
|
|
uni.$emit('addAddress')
|
|
} else if (this.options.type === 'setting') {
|
|
uni.$emit('uploadAddress')
|
|
}
|
|
this.$Toast(message);
|
|
const pageList = getCurrentPages();
|
|
if(pageList.length == 1 && pageList.length == 2) {
|
|
setTimeout(()=> {
|
|
uni.switchTab({
|
|
url: '/pages/home/home'
|
|
})
|
|
},1000)
|
|
}else{
|
|
setTimeout(() => {
|
|
uni.navigateBack({
|
|
delta: 1
|
|
});
|
|
},1000)
|
|
}
|
|
|
|
}else{
|
|
this.$Toast(message);
|
|
}
|
|
}).catch(err => {
|
|
uni.hideLoading()
|
|
this.$Toast(err.message);
|
|
})
|
|
},
|
|
getSelectAddress(res) {
|
|
console.log(res)
|
|
this.form.shippingAddress = res.province.label+'-'+res.city.label+'-'+res.area.label;
|
|
},
|
|
delAddress () {
|
|
let params = { ...this.form, isDel: 1, id: this.options.id}
|
|
this.$api('deleteAddress', params).then(res => {
|
|
let { code, result, message } = res
|
|
if(code == 200) {
|
|
uni.$emit('delAddress', params)
|
|
this.$Toast(message);
|
|
setTimeout(() => {
|
|
uni.navigateBack({
|
|
delta: 1
|
|
});
|
|
},1500)
|
|
}else{
|
|
this.$Toast(message);
|
|
}
|
|
}).catch(err => {
|
|
console.log(err);
|
|
this.$Toast(err.message);
|
|
})
|
|
},
|
|
showRegionPicker() {
|
|
this.show = true;
|
|
}
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style lang="scss" scoped>
|
|
/deep/ .u-form-item{
|
|
padding: 0 !important;
|
|
margin: 0 !important;
|
|
}
|
|
/deep/ .line {
|
|
color: $u-light-color;
|
|
font-size: 28rpx;
|
|
}
|
|
.wrap {
|
|
background-color: #f2f2f2;
|
|
.top {
|
|
padding: 0 20rpx;
|
|
box-sizing: border-box;
|
|
background-color: #ffffff;
|
|
border-top: solid 2rpx $u-border-color;
|
|
padding: 22rpx;
|
|
.item {
|
|
display: flex;
|
|
font-size: 32rpx;
|
|
line-height: 100rpx;
|
|
align-items: center;
|
|
border-bottom: solid 2rpx $u-border-color;
|
|
.left {
|
|
width: 180rpx;
|
|
}
|
|
input {
|
|
text-align: left;
|
|
}
|
|
}
|
|
|
|
.address {
|
|
padding: 20rpx 0;
|
|
textarea {
|
|
// width: 100%;
|
|
height: 150rpx;
|
|
background-color: #f7f7f7;
|
|
line-height: 60rpx;
|
|
margin: 40rpx auto;
|
|
padding: 20rpx;
|
|
}
|
|
}
|
|
.site-clipboard {
|
|
padding-right: 40rpx;
|
|
textarea {
|
|
// width: 100%;
|
|
height: 150rpx;
|
|
background-color: #f7f7f7;
|
|
line-height: 60rpx;
|
|
margin: 40rpx auto;
|
|
padding: 20rpx;
|
|
}
|
|
.clipboard {
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
font-size: 26rpx;
|
|
color: $u-tips-color;
|
|
height: 80rpx;
|
|
.icon {
|
|
margin-top: 6rpx;
|
|
margin-left: 10rpx;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.bottom {
|
|
padding: 0 20rpx;
|
|
box-sizing: border-box;
|
|
margin-top: 20rpx;
|
|
padding: 40rpx;
|
|
background-color: #ffffff;
|
|
font-size: 28rpx;
|
|
.tag {
|
|
display: flex;
|
|
.left {
|
|
width: 160rpx;
|
|
}
|
|
.right {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
.tags {
|
|
width: 140rpx;
|
|
padding: 16rpx 8rpx;
|
|
border: solid 2rpx $u-border-color;
|
|
text-align: center;
|
|
border-radius: 50rpx;
|
|
margin: 0 10rpx 20rpx;
|
|
display: flex;
|
|
font-size: 28rpx;
|
|
align-items: center;
|
|
justify-content: center;
|
|
color: $u-content-color;
|
|
line-height: 1;
|
|
}
|
|
.plus {
|
|
//padding: 10rpx 0;
|
|
}
|
|
}
|
|
}
|
|
.default {
|
|
margin-top: 50rpx;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
border-bottom: solid 2rpx $u-border-color;
|
|
line-height: 64rpx;
|
|
.tips {
|
|
font-size: 24rpx;
|
|
}
|
|
.right {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
</style>
|