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

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