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

175 lines
3.9 KiB

4 years ago
  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/icon/delete.png" @click.stop="remove(item.id)"></image>
  20. <image class="optionsBtnEdit" src="@/static/icon/edit.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. if(this.is_select){
  43. uni.setNavigationBarTitle({
  44. title: '请选择一个地址'
  45. })
  46. }
  47. },
  48. onShow(){
  49. this.addressList = [];
  50. this.getUserAddress();
  51. },
  52. methods: {
  53. async getUserAddress(){
  54. let res = await address();
  55. this.addressList = res.data.datas;
  56. },
  57. // 切换默认地址
  58. radioChange(event){
  59. let id = event.detail.value;
  60. uni.showLoading({
  61. title: '切换默认地址'
  62. })
  63. setDefaultAddress(id).then(res => {
  64. uni.hideLoading();
  65. this.addressList.forEach(item => {
  66. if(item.id === id){
  67. item.default = 1;
  68. }else{
  69. item.default = 0;
  70. }
  71. });
  72. }).catch(err => uni.hideLoading());
  73. },
  74. remove(id){
  75. uni.showModal({
  76. title: '提示',
  77. content: '您确定删除该地址吗?',
  78. success: async result => {
  79. if(result.confirm){
  80. await deleteAddress(id);
  81. this.$msg('删除成功', {icon: 'success'});
  82. this.getUserAddress();
  83. }
  84. }
  85. })
  86. },
  87. selectAddress(item){
  88. if(!this.is_select) return;
  89. let pages = getCurrentPages();
  90. let page = pages[pages.length - 2]; // 访问上一个页面
  91. page.$vm.address = item; // 将选中的地址赋值回去
  92. this.$toBack();
  93. }
  94. }
  95. }
  96. </script>
  97. <style scoped class="scss">
  98. /deep/view{
  99. display: flex;
  100. background-color: #FFFFFF;
  101. }
  102. .scroll-view{
  103. height: calc(100vh - 200rpx);
  104. }
  105. .checkBtn{
  106. width: 44rpx;
  107. height: 44rpx;
  108. margin-right: 14rpx;
  109. }
  110. .addressItemTop{
  111. align-items: center;
  112. margin-top: 20rpx;
  113. margin-bottom: 20rpx;
  114. }
  115. .addressItem{
  116. flex-direction: column;
  117. }
  118. .line{
  119. height: 1rpx;
  120. background-color: #D8D8D8;
  121. margin-left: 32rpx;
  122. margin-right: 32rpx;
  123. margin-top: 20rpx;
  124. margin-bottom: 20rpx;
  125. }
  126. .addrName{
  127. margin-left: 32rpx;
  128. font-size: 36rpx;
  129. font-weight: bold;
  130. margin-right: 40rpx;
  131. }
  132. .addr{
  133. margin-left: 32rpx;
  134. }
  135. .optionsPanel{
  136. margin-left: 32rpx;
  137. margin-bottom: 40rpx;
  138. align-items: center;
  139. justify-content: space-between;
  140. }
  141. .rightPanel{
  142. align-items: center;
  143. justify-content: center;
  144. margin-right: 32rpx;
  145. }
  146. .optionsBtn{
  147. width: 44rpx;
  148. height: 44rpx;
  149. margin-right: 50rpx;
  150. }
  151. .optionsBtnEdit{
  152. width: 38rpx;
  153. height: 38rpx;
  154. }
  155. .addNewAddr{
  156. height: 96rpx;
  157. /* width: 90%; */
  158. width: 686rpx;
  159. border: #E7A23F 2rpx solid;
  160. border-radius: 8rpx;
  161. position: fixed;
  162. bottom: 100rpx;
  163. left: calc(50% - 343rpx);
  164. justify-content: center;
  165. align-items: center;
  166. align-self: center;
  167. color: #E7A23F;
  168. }
  169. </style>