123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- <template>
- <view class="user-address">
- <view class="no-address flex-col col-center" v-if="!hasAddress">
- <image class="img-null mt20" src="/static/images/address_null.png"></image>
- <view class="sm muted">暂无添加地址,请添加~</view>
- </view>
- <view class="address-list" v-else>
- <u-radio-group v-model="currentId" class="radio-group" @change="radioChange" :active-color="colorConfig.primary">
- <view v-for="(item, index) in addressList" :key="index" class="item bg-white m-b-20" @tap="onSelect(item.id)">
- <view class="address">
- <view class="consignee md bold">
- {{item.contact}}
- <text class="phone m-l-10">{{item.telephone}}</text>
- </view>
- <view class="lighter sm m-t-10">
- {{item.province}} {{item.city}} {{item.district}} {{item.address}}
- </view>
- </view>
- <view class="operation flex row-between">
- <view @tap.stop="">
- <u-radio class="radio flex" :name="item.id">
- <text class="xs">{{currentId == item.id ? '默认' : '设为默认'}}</text>
- </u-radio>
- </view>
- <view class="flex row-center">
- <router-link :to="{path: '/bundle/pages/address_edit/address_edit', query: {id: item.id}}">
- <view class="flex m-r-20">
- <image class="icon-md m-r-10" src="/static/images/icon_edit.png"></image>
- 编辑
- </view>
- </router-link>
- <view class="flex m-l-20" @tap.stop="showSurePop(item.id)">
- <image class="icon-md m-r-10" src="/static/images/icon_del_1.png"></image>
- 删除
- </view>
- </view>
- </view>
- </view>
- </u-radio-group>
- </view>
- <u-modal
- id="delete-dialog"
- v-model="deleteSure"
- :show-cancel-button="true"
- confirm-text="狠心删除"
- :confirm-color="colorConfig.primary"
- :show-title="false"
- @confirm="delAddressFun">
- <view class="flex-col col-center tips-dialog p-t-40">
- <image class="icon-lg" src="/static/images/icon_warning.png"></image>
- <view style="margin-top:30rpx">确认删除该地址吗?</view>
- </view>
- </u-modal>
- <view class="footer flex row-between fixed bg-white">
- <!-- #ifdef H5 || MP-WEIXIN -->
- <view class="btn flex row-center bg-gray br60 m-r-20" @click="getWxAddressFun" v-if="isWeixin">
- <image class="icon-lg m-r-10" src="/static/images/icon_wechat.png"></image>
- <text class="md">微信导入</text>
- </view>
- <!-- #endif -->
- <router-link class="flex-1" :to="{path: '/bundle/pages/address_edit/address_edit'}">
- <view class="btn bg-primary white md flex row-center br60">新增收货地址</view>
- </router-link>
- </view>
- </view>
- </template>
- <script>
- import { getAddressLists, delAddress, setDefaultAddress } from '@/api/user';
- import wechath5 from '@/utils/wechath5'
- import {isWeixinClient} from '@/utils/tools'
- export default {
- data() {
- return {
- addressList: [],
- hasAddress: true,
- deleteSure: false,
- currentId: 0,
- isWeixin: true
- };
- },
- onLoad (options) {
- this.type = this.$Route.query.type;
- //#ifdef H5
- this.isWeixin = isWeixinClient()
- //#endif
- },
- onShow() {
- this.getAddressListsFun();
- },
- methods: {
- onSelect(id) {
- if (this.type) {
- uni.$emit('selectaddress', {
- id
- });
- uni.navigateBack();
- }
- },
- getAddressListsFun() {
- getAddressLists().then(res => {
- if (res.code == 1) {
- if (res.data.length) {
- this.addressList = res.data;
- const defaultA = res.data.find((item) => item.is_default)
- this.currentId = defaultA ? defaultA.id : 0
- this.hasAddress = true;
- } else {
- this.hasAddress = false;
- }
- } else {
- this.hasAddress = false
- }
- });
- },
- async radioChange(id) {
- const {code, msg} = await setDefaultAddress(id)
- if (code == 1) {
- this.$toast({
- title: msg
- })
- this.getAddressListsFun();
- }
- },
- onLoadFun() {
- this.getAddressListsFun();
- },
- delAddressFun() {
- delAddress(this.delectId).then(res => {
- if (res.code == 1) {
- this.$toast({
- title: res.msg
- });
- this.deleteSure = false
- this.getAddressListsFun();
- }
- });
- },
- getWxAddressFun() {
- // #ifdef H5
- wechath5.getWxAddress().then((res) => {
- uni.setStorageSync('wxAddress', JSON.stringify(res));
- setTimeout(() => {
- this.$Router.push({
- path: '/bundle/pages/address_edit/address_edit'
- })
- }, 200);
- })
- // #endif
- // #ifdef MP-WEIXIN
- uni.authorize({
- scope: 'scope.address',
- success: (res) => {
- uni.chooseAddress({
- success: (res) => {
- uni.setStorageSync('wxAddress', JSON.stringify(res));
- setTimeout(() => {
- this.$Router.push({
- path: '/bundle/pages/address_edit/address_edit'
- })
- }, 200);
- },
- fail: (res) => {
- if (res.errMsg == 'chooseAddress:cancel') return this.$toast({
- title: '取消选择'
- });
- }
- });
- },
- fail: (res) => {
- uni.showModal({
- title: '您已拒绝导入微信地址权限',
- content: '是否进入权限管理,调整授权?',
- success:(res) => {
- if (res.confirm) {
- uni.openSetting({
- success: (res) => {}
- });
- } else if (res.cancel) {
- return this.$toast({
- title: '已取消!'
- });
- }
- }
- });
- }
- });
- // #endif
- },
-
- showSurePop(id) {
- this.deleteSure = true;
- this.delectId = id;
- },
- }
- };
- </script>
- <style lang="scss">
- .user-address {
- padding-bottom: calc(140rpx + env(safe-area-inset-bottom));
- .no-address {
- padding-top: 300rpx;
- text-align: center;
- }
- .address-list {
- padding: 10rpx 0;
- .item {
- padding: 0 30rpx;
- .address {
- padding: 20rpx 0;
- border-bottom: $-solid-border;
- }
- .operation {
- height: 80rpx;
- }
- }
- .u-radio-group {
- display: block;
- }
- }
- .footer {
- position: fixed;
- left: 0;
- right: 0;
- bottom: 0;
- height: 118rpx;
- padding: 0 30rpx;
- box-sizing: content-box;
- padding-bottom: env(safe-area-inset-bottom);
- .btn {
- flex: 1;
- height: 80rpx;
- }
- }
- }
- .tips-dialog {
- height: 230rpx;
- width: 100%;
- }
- </style>
|