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.

135 lines
3.3 KiB

10 months ago
  1. <template>
  2. <view class="select-address">
  3. <view class="default-address">
  4. <u-cell @click="select" class="celi" :title="(defaultAddress.region || '') + ' ' + (defaultAddress.detailAddress || '')" isLink
  5. :value="$t('page.address.select_address')">
  6. <view class="address-info" slot="label">
  7. {{ (defaultAddress.name || '') + ' ' + (defaultAddress.phone || '') }}
  8. </view>
  9. </u-cell>
  10. </view>
  11. <u-popup :show="showAddressList" @close="closeAddressList" :round="10">
  12. <view class="address-list">
  13. <u-list @scrolltolower="scrolltolower" height="auto">
  14. <u-list-item v-for="(item,index) in addressList" :key="index">
  15. <view @click="selectAddress(item)" class="address-item">
  16. <view class="address-info">
  17. <view class="user-info">
  18. <text class="name">{{ item.name }}</text>
  19. <text class="phone">{{ item.phone }}</text>
  20. <u-tag v-if="item.default_flag == 1" text="默认" shape="circle" bgColor="#e68534"
  21. borderColor="#e68534" size="mini"></u-tag>
  22. </view>
  23. <view class="address-detail">
  24. <text class="body">{{ item.region }}</text>
  25. <text class="detail">{{ item.detailAddress }}</text>
  26. </view>
  27. </view>
  28. <view class="icon">
  29. <u-icon name="checkbox-mark" @click="selectAddress(item)" size="40rpx"></u-icon>
  30. </view>
  31. </view>
  32. </u-list-item>
  33. <u-list-item>
  34. <view @click="addAddress" class="address-item">
  35. <view class="add-address">
  36. {{ $t('page.address.addAddress') }}
  37. </view>
  38. <view class="icon">
  39. <!-- <u-icon name="edit-pen" size="40rpx"></u-icon> -->
  40. </view>
  41. </view>
  42. </u-list-item>
  43. </u-list>
  44. </view>
  45. </u-popup>
  46. </view>
  47. </template>
  48. <script>
  49. export default {
  50. data() {
  51. return {
  52. showAddressList: false,
  53. addressList: [],
  54. defaultAddress: {},
  55. status: 'nomore',
  56. queryParams: {
  57. pageSize: 9999,
  58. currentPage: 0
  59. }
  60. }
  61. },
  62. created() {
  63. this.getAddressList();
  64. },
  65. methods: {
  66. getAddressList() {
  67. this.request("addressPage", {}, this.queryParams).then(res => {
  68. this.addressList = res.result.records;
  69. this.selectAddress(res.result.records[0] || {})
  70. if (this.addressList.length === res.result.total) {
  71. this.nomore = true;
  72. }
  73. })
  74. },
  75. clickListStop(e){
  76. },
  77. addAddress(){
  78. this.$emit('toAdd')
  79. },
  80. scrolltolower() { //滑动到了底部
  81. // this.queryParams.pageSize += 10;
  82. // this.getAddressList();
  83. },
  84. selectAddress(addressItem) { //用户选择了地址
  85. this.defaultAddress = addressItem;
  86. this.showAddressList = false;
  87. this.$emit('selectAddress', addressItem.id);
  88. },
  89. select(){
  90. this.showAddressList = true;
  91. },
  92. closeAddressList(){
  93. this.showAddressList = false;
  94. }
  95. }
  96. }
  97. </script>
  98. <style lang="scss" scoped>
  99. .select-address {
  100. .default-address{
  101. .celi {
  102. background-color: #F8F8F8;
  103. border-radius: 10px;
  104. margin: 10px 0;
  105. }
  106. }
  107. .address-item {
  108. display: flex;
  109. justify-content: space-between;
  110. padding: 15px 10px;
  111. border-bottom: 1px solid rgba(0, 0, 0, .1);
  112. .user-info {
  113. display: flex;
  114. }
  115. .icon {
  116. // width: ;
  117. }
  118. text {
  119. margin-right: 10rpx;
  120. }
  121. }
  122. .add-address{
  123. display: flex;
  124. justify-content: center;
  125. align-items: center;
  126. }
  127. }
  128. </style>