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.
171 lines
3.9 KiB
171 lines
3.9 KiB
<template>
|
|
<view style="flex-direction: column;">
|
|
<scroll-view class="scroll-view" :scroll-y="true">
|
|
<view class="addressItem" v-for="(item, index) in addressList" :key="item.id" @click="selectAddress(item)">
|
|
<view class="addressItemTop">
|
|
<text class="addrName">{{ item.name }}</text>
|
|
<text class="addrTel">{{ item.tel }}</text>
|
|
</view>
|
|
<text class="addr">{{ item.desc }}</text>
|
|
<view class="line"></view>
|
|
<view class="optionsPanel">
|
|
<radio-group @change="radioChange" @click.stop>
|
|
<label>
|
|
<radio :value="item.id" :checked="item.default == 1" color="#e7a23f"></radio>
|
|
<text>设置为默认地址</text>
|
|
</label>
|
|
</radio-group>
|
|
<view class="rightPanel">
|
|
<image class="optionsBtn" src="../../static/删除.png" @click.stop="remove(item.id)"></image>
|
|
<image class="optionsBtnEdit" src="../../static/编辑.png" @click.stop="$url('/packages/addAddress/addAddress?id='+ item.id)"></image>
|
|
</view>
|
|
</view>
|
|
<view style="height: 30rpx;background-color: #F6F6F6;"></view>
|
|
</view>
|
|
</scroll-view>
|
|
<view class="addNewAddr" @click="$url('/packages/addAddress/addAddress')">
|
|
<text>+ 新增收获地址</text>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
|
|
<script>
|
|
import { address, setDefaultAddress, deleteAddress } from '@/service/address.js';
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
addressList: [],
|
|
is_select: false,
|
|
}
|
|
},
|
|
onLoad(options){
|
|
this.is_select = Boolean(Number(options.is_select || '0'));
|
|
},
|
|
onShow(){
|
|
// todo 接口排序问题,切换默认地址时
|
|
this.addressList = [];
|
|
this.getUserAddress();
|
|
},
|
|
methods: {
|
|
async getUserAddress(){
|
|
let res = await address();
|
|
this.addressList = res.data.datas;
|
|
},
|
|
// 切换默认地址
|
|
radioChange(event){
|
|
let id = event.detail.value;
|
|
uni.showLoading({
|
|
title: '切换默认地址'
|
|
})
|
|
setDefaultAddress(id).then(res => {
|
|
uni.hideLoading();
|
|
this.addressList.forEach(item => {
|
|
if(item.id === id){
|
|
item.default = 1;
|
|
}else{
|
|
item.default = 0;
|
|
}
|
|
});
|
|
}).catch(err => uni.hideLoading());
|
|
},
|
|
remove(id){
|
|
uni.showModal({
|
|
title: '提示',
|
|
content: '您确定删除该地址吗?',
|
|
success: async result => {
|
|
if(result.confirm){
|
|
await deleteAddress(id);
|
|
this.$msg('删除成功', {icon: 'success'});
|
|
this.getUserAddress();
|
|
}
|
|
}
|
|
})
|
|
},
|
|
selectAddress(item){
|
|
if(!this.is_select) return;
|
|
let pages = getCurrentPages();
|
|
let page = pages[pages.length - 2]; // 访问上一个页面
|
|
page.$vm.address = item; // 将选中的地址赋值回去
|
|
this.$toBack();
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped class="scss">
|
|
/deep/view{
|
|
display: flex;
|
|
background-color: #FFFFFF;
|
|
}
|
|
|
|
.scroll-view{
|
|
height: calc(100vh - 200rpx);
|
|
}
|
|
|
|
.checkBtn{
|
|
width: 44rpx;
|
|
height: 44rpx;
|
|
margin-right: 14rpx;
|
|
}
|
|
.addressItemTop{
|
|
align-items: center;
|
|
margin-top: 20rpx;
|
|
margin-bottom: 20rpx;
|
|
}
|
|
.addressItem{
|
|
flex-direction: column;
|
|
}
|
|
.line{
|
|
height: 1rpx;
|
|
background-color: #D8D8D8;
|
|
margin-left: 32rpx;
|
|
margin-right: 32rpx;
|
|
margin-top: 20rpx;
|
|
margin-bottom: 20rpx;
|
|
}
|
|
.addrName{
|
|
margin-left: 32rpx;
|
|
font-size: 36rpx;
|
|
font-weight: bold;
|
|
margin-right: 40rpx;
|
|
}
|
|
.addr{
|
|
margin-left: 32rpx;
|
|
}
|
|
.optionsPanel{
|
|
margin-left: 32rpx;
|
|
margin-bottom: 40rpx;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
.rightPanel{
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-right: 32rpx;
|
|
}
|
|
.optionsBtn{
|
|
width: 44rpx;
|
|
height: 44rpx;
|
|
margin-right: 50rpx;
|
|
}
|
|
.optionsBtnEdit{
|
|
width: 38rpx;
|
|
height: 38rpx;
|
|
}
|
|
.addNewAddr{
|
|
height: 96rpx;
|
|
/* width: 90%; */
|
|
width: 686rpx;
|
|
border: #E7A23F 2rpx solid;
|
|
border-radius: 8rpx;
|
|
position: fixed;
|
|
bottom: 100rpx;
|
|
left: calc(50% - 343rpx);
|
|
justify-content: center;
|
|
align-items: center;
|
|
align-self: center;
|
|
color: #E7A23F;
|
|
}
|
|
|
|
</style>
|