list.vue 3.01 KB
<template>
  <view class="container">
    <view class="address-list" v-for="(item, index) in addressList" :key="item.id">
      <view class="address-item" @click="handleClick" @longpress="handleLongPress(item)">
        <view class="left">
          <u-avatar :text="item.name ? item.name.slice(0, 1) : 'U'" fontSize="18" randomBgColor></u-avatar>
        </view>
        <view class="middle">
          <view class="info">
            <view class="name">{{ item.name }}</view>
            <view class="mobile">{{ item.mobile }}</view>
            <u-tag class="type" v-if="item.type === 1" text="默认" plain size="mini" type="success"></u-tag>
          </view>
          <view class="detail">
            <u--text :lines="2" size="14" color="#939393" :text="item.detailAddress"></u--text>
          </view>
        </view>
        <navigator class="right" :url="`/pages/address/update?addressId=${item.id}`" open-type="navigate" hover-class="none">
          <u-icon name="edit-pen" size="28"></u-icon>
        </navigator>
      </view>
    </view>

    <navigator class="fixed-btn-box" url="/pages/address/create" open-type="navigate" hover-class="none">
      <u-button type="primary" size="large" text="新增地址"></u-button>
    </navigator>
    <u-safe-bottom customStyle="background: #ffffff"></u-safe-bottom>
  </view>
</template>

<script>
import { getAddressList, deleteAddress } from '../../api/address'

export default {
  data() {
    return {
      addressList: []
    }
  },
  onLoad() {},
  onShow() {
    this.loadAddressListData()
  },
  methods: {
    loadAddressListData() {
      getAddressList().then(res => {
        this.addressList = res.data
      })
    },
    handleLongPress(item) {
      uni.showModal({
        title: '提示',
        content: `删除收件人[${item.name}${item.mobile}]\n地址:${item.detailAddress.slice(0, 5)}......${item.detailAddress.slice(-6)}?`,
        success: res => {
          if (res.confirm) {
            deleteAddress({ id: item.id }).then(res => {
              uni.$u.toast('地址已删除')
              this.loadAddressListData();
            })
          } else if (res.cancel) {
            //console.log('用户点击取消')
          }
        }
      })
    },
    handleClick(){
      // TODO 提交订单时选择地址逻辑
    }
  }
}
</script>

<style lang="scss" scoped>
.address-list {
  .address-item {
    padding: 10rpx 0;
    border-bottom: $custom-border-style;
    @include flex-space-between;
    .left {
      margin: 20rpx;
    }
    .middle {
      flex: 1;
      margin: 20rpx;
      @include flex(column);
      .info {
        @include flex-left;
        .name {
          font-size: 30rpx;
          font-weight: 700;
        }
        .mobile {
          font-size: 28rpx;
          margin-left: 15rpx;
        }
        .type {
          margin-left: 15rpx;
        }
      }
      .detail {
        margin-top: 10rpx;
      }
    }
    .right {
      margin: 20rpx;
    }
  }
}

.fixed-btn-box {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 750rpx;
}
</style>