球星卡微信小程序
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

  1. <template>
  2. <view style="flex-direction: column;">
  3. <scroll-view class="scroll-view" :scroll-y="true">
  4. <view class="addressItem" v-for="(item, index) in addressList" :key="item.id" @click="selectAddress(item)">
  5. <view class="addressItemTop">
  6. <text class="addrName">{{ item.name }}</text>
  7. <text class="addrTel">{{ item.tel }}</text>
  8. </view>
  9. <text class="addr">{{ item.desc }}</text>
  10. <view class="line"></view>
  11. <view class="optionsPanel">
  12. <radio-group @change="radioChange" @click.stop>
  13. <label>
  14. <radio :value="item.id" :checked="item.default == 1" color="#e7a23f"></radio>
  15. <text>设置为默认地址</text>
  16. </label>
  17. </radio-group>
  18. <view class="rightPanel">
  19. <image class="optionsBtn" src="../../static/删除.png" @click.stop="remove(item.id)"></image>
  20. <image class="optionsBtnEdit" src="../../static/编辑.png" @click.stop="$url('/packages/addAddress/addAddress?id='+ item.id)"></image>
  21. </view>
  22. </view>
  23. <view style="height: 30rpx;background-color: #F6F6F6;"></view>
  24. </view>
  25. </scroll-view>
  26. <view class="addNewAddr" @click="$url('/packages/addAddress/addAddress')">
  27. <text>+ 新增收获地址</text>
  28. </view>
  29. </view>
  30. </template>
  31. <script>
  32. import { address, setDefaultAddress, deleteAddress } from '@/service/address.js';
  33. export default {
  34. data() {
  35. return {
  36. addressList: [],
  37. is_select: false,
  38. }
  39. },
  40. onLoad(options){
  41. this.is_select = Boolean(Number(options.is_select || '0'));
  42. },
  43. onShow(){
  44. // todo 接口排序问题,切换默认地址时
  45. this.addressList = [];
  46. this.getUserAddress();
  47. },
  48. methods: {
  49. async getUserAddress(){
  50. let res = await address();
  51. this.addressList = res.data.datas;
  52. },
  53. // 切换默认地址
  54. radioChange(event){
  55. let id = event.detail.value;
  56. uni.showLoading({
  57. title: '切换默认地址'
  58. })
  59. setDefaultAddress(id).then(res => {
  60. uni.hideLoading();
  61. this.addressList.forEach(item => {
  62. if(item.id === id){
  63. item.default = 1;
  64. }else{
  65. item.default = 0;
  66. }
  67. });
  68. }).catch(err => uni.hideLoading());
  69. },
  70. remove(id){
  71. uni.showModal({
  72. title: '提示',
  73. content: '您确定删除该地址吗?',
  74. success: async result => {
  75. if(result.confirm){
  76. await deleteAddress(id);
  77. this.$msg('删除成功', {icon: 'success'});
  78. this.getUserAddress();
  79. }
  80. }
  81. })
  82. },
  83. selectAddress(item){
  84. if(!this.is_select) return;
  85. let pages = getCurrentPages();
  86. let page = pages[pages.length - 2]; // 访问上一个页面
  87. page.$vm.address = item; // 将选中的地址赋值回去
  88. this.$toBack();
  89. }
  90. }
  91. }
  92. </script>
  93. <style scoped class="scss">
  94. /deep/view{
  95. display: flex;
  96. background-color: #FFFFFF;
  97. }
  98. .scroll-view{
  99. height: calc(100vh - 200rpx);
  100. }
  101. .checkBtn{
  102. width: 44rpx;
  103. height: 44rpx;
  104. margin-right: 14rpx;
  105. }
  106. .addressItemTop{
  107. align-items: center;
  108. margin-top: 20rpx;
  109. margin-bottom: 20rpx;
  110. }
  111. .addressItem{
  112. flex-direction: column;
  113. }
  114. .line{
  115. height: 1rpx;
  116. background-color: #D8D8D8;
  117. margin-left: 32rpx;
  118. margin-right: 32rpx;
  119. margin-top: 20rpx;
  120. margin-bottom: 20rpx;
  121. }
  122. .addrName{
  123. margin-left: 32rpx;
  124. font-size: 36rpx;
  125. font-weight: bold;
  126. margin-right: 40rpx;
  127. }
  128. .addr{
  129. margin-left: 32rpx;
  130. }
  131. .optionsPanel{
  132. margin-left: 32rpx;
  133. margin-bottom: 40rpx;
  134. align-items: center;
  135. justify-content: space-between;
  136. }
  137. .rightPanel{
  138. align-items: center;
  139. justify-content: center;
  140. margin-right: 32rpx;
  141. }
  142. .optionsBtn{
  143. width: 44rpx;
  144. height: 44rpx;
  145. margin-right: 50rpx;
  146. }
  147. .optionsBtnEdit{
  148. width: 38rpx;
  149. height: 38rpx;
  150. }
  151. .addNewAddr{
  152. height: 96rpx;
  153. /* width: 90%; */
  154. width: 686rpx;
  155. border: #E7A23F 2rpx solid;
  156. border-radius: 8rpx;
  157. position: fixed;
  158. bottom: 100rpx;
  159. left: calc(50% - 343rpx);
  160. justify-content: center;
  161. align-items: center;
  162. align-self: center;
  163. color: #E7A23F;
  164. }
  165. </style>