address.vue 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <template>
  2. <view class="page b-t">
  3. <!--
  4. <singleList ref="listRef" url="cang.mycollectionsecond" :sendData="reqData" @reqEnd="searchEnd">
  5. <template v-slot:items="{list}">
  6. -->
  7. <!-- -->
  8. <view class="list b-b" v-for="(item, index) in addressList" :key="index" @click="checkAddress(item)">
  9. <image :src="item.checked? '/static/check-do.png' : '/static/check-un.png' " mode="aspectFill" class="check"></image>
  10. <view class="content flex-col">
  11. <view class="u-box align-center">
  12. <text class="name">{{item.name}}</text>
  13. <text class="mobile">{{item.mobile}}</text>
  14. <text v-if="item.is_default" class="tag">默认</text>
  15. <view class="ic-wrap del align-center justify-center">
  16. <image src="/static/addr-del.png" mode="aspectFill" class="ic" @click.stop="deleteAddress(item.id,index)"></image>
  17. </view>
  18. <view class="ic-wrap edit align-center justify-center">
  19. <image src="/static/addr-edit.png" mode="aspectFill" class="ic" @click.stop="addAddress('edit', item.id)"></image>
  20. </view>
  21. </view>
  22. <view class="address-box">
  23. <text class="address">{{item.addr+' '+item.desc}}</text>
  24. </view>
  25. </view>
  26. </view>
  27. <!--
  28. <empty v-else-if="sRes && sRes==='empty'"/>
  29. </template>
  30. </singleList>
  31. -->
  32. <button class="add-btn" @click="addAddress('add')">新增地址</button>
  33. <safe-area bgColor="#f8f8f8"/>
  34. </view>
  35. </template>
  36. <script>
  37. export default {
  38. data() {
  39. return {
  40. source: 0,
  41. addressList: [
  42. {
  43. id:1,
  44. is_default:true,
  45. addr:'山东省临沂市河东区',
  46. desc:'山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区',
  47. name:'mork',
  48. mobile:'15263970923',
  49. checked:true,
  50. },
  51. {
  52. id:1,
  53. is_default:false,
  54. addr:'山东省临沂市河东区',
  55. desc:'山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区',
  56. name:'mork',
  57. mobile:'15263970923',
  58. checked:false,
  59. },
  60. {
  61. id:1,
  62. is_default:true,
  63. addr:'山东省临沂市河东区',
  64. desc:'山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区',
  65. name:'mork',
  66. mobile:'15263970923',
  67. checked:true,
  68. },
  69. {
  70. id:1,
  71. is_default:false,
  72. addr:'山东省临沂市河东区',
  73. desc:'山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区',
  74. name:'mork',
  75. mobile:'15263970923',
  76. checked:false,
  77. },
  78. {
  79. id:1,
  80. is_default:true,
  81. addr:'山东省临沂市河东区',
  82. desc:'山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区',
  83. name:'mork',
  84. mobile:'15263970923',
  85. checked:true,
  86. },
  87. {
  88. id:1,
  89. is_default:false,
  90. addr:'山东省临沂市河东区',
  91. desc:'山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区',
  92. name:'mork',
  93. mobile:'15263970923',
  94. checked:false,
  95. },
  96. {
  97. id:1,
  98. is_default:true,
  99. addr:'山东省临沂市河东区',
  100. desc:'山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区',
  101. name:'mork',
  102. mobile:'15263970923',
  103. checked:true,
  104. },
  105. {
  106. id:1,
  107. is_default:false,
  108. addr:'山东省临沂市河东区',
  109. desc:'山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区山东省临沂市河东区',
  110. name:'mork',
  111. mobile:'15263970923',
  112. checked:false,
  113. },
  114. ],
  115. reqData:{}, //请求数据
  116. sRes:'', //搜索结果 empty,noMore
  117. }
  118. },
  119. onLoad(option) {
  120. // console.log(option.source);
  121. this.source = option.source;
  122. // this.$nextTick(()=>{
  123. // this.reqData={
  124. // type: this.cats[this.curCatIdx].state,
  125. // }
  126. // })
  127. },
  128. onShow() {
  129. // this.refreshList();
  130. },
  131. methods: {
  132. //获取我的收货地址
  133. async getList() {
  134. let res = await this.$api.request('/addons/unishop/address/all', 'POST', {
  135. page: 1,
  136. pagesize: 50
  137. });
  138. let list = res.data;
  139. if (list) {
  140. this.addressList = list;
  141. }
  142. },
  143. //选择地址
  144. checkAddress(item) {
  145. if (this.source == 1) {
  146. //this.$api.prePage()获取上一页实例,在App.vue定义
  147. this.$api.prePage().addressData = item;
  148. uni.navigateBack()
  149. }
  150. },
  151. addAddress(type, id = 0) {
  152. uni.navigateTo({
  153. url: `/pages/address/addressManage?type=${type}&id=${id}`
  154. })
  155. },
  156. //添加或修改成功之后回调
  157. refreshList(data, type) {
  158. //添加或修改后事件,这里直接在最前面添加了一条数据,实际应用中直接刷新地址列表即可
  159. // this.addressList.unshift(data);
  160. this.addressList=[];
  161. this.getList();
  162. },
  163. async deleteAddress(id, index) {
  164. let [error, res] = await uni.showModal({
  165. title: '确定删除地址?',
  166. content: this.addressList[index].address
  167. })
  168. if (res.confirm) {
  169. let res = await this.$api.request('/addons/unishop/address/delete?id=' + id);
  170. let data = res.data;
  171. if (data) {
  172. if (this.$api.prePage().addressData && this.$api.prePage().addressData.id) {
  173. if (this.$api.prePage().addressData.id == this.addressList[index].id) {
  174. this.$api.prePage().addressData = {};
  175. }
  176. }
  177. this.addressList.splice(index, 1);
  178. }
  179. }
  180. }
  181. }
  182. }
  183. </script>
  184. <style lang='scss'>
  185. page {
  186. background: #f8f8f8;
  187. }
  188. .page{
  189. padding: 30rpx 20rpx;
  190. /* min-height: 100vh;
  191. padding-bottom: calc(var(--safe-area-inset-bottom) / 2); */
  192. position: relative;
  193. }
  194. .list {
  195. padding: 20upx 20upx 50rpx 73rpx;
  196. background: #fff;
  197. position: relative;
  198. border-radius: 10rpx;
  199. margin-bottom: 24rpx;
  200. .check{
  201. position: absolute;
  202. left: 17rpx;
  203. top: 60rpx;
  204. width: 34rpx;
  205. height: 34rpx;
  206. z-index: 2;
  207. }
  208. }
  209. .u-box {
  210. color: #999;
  211. height: 48rpx;
  212. .name{
  213. font-size: 30rpx;
  214. font-family: PingFang SC;
  215. font-weight: 500;
  216. color: #333333;
  217. margin-right: 20rpx;
  218. }
  219. .mobile{
  220. font-size: 30rpx;
  221. font-family: PingFang SC;
  222. font-weight: 500;
  223. color: #333333;
  224. margin-right: 12rpx;
  225. }
  226. .tag{
  227. width: 61rpx;
  228. height: 34rpx;
  229. background: #92B99C;
  230. border-radius: 4rpx;
  231. line-height: 34rpx;
  232. text-align: center;
  233. font-size: 22rpx;
  234. font-family: PingFang SC;
  235. font-weight: 500;
  236. color: #FFFFFF;
  237. }
  238. .ic-wrap{
  239. height: 48rpx;
  240. width: 64rpx;
  241. &.del{
  242. margin-left: auto;
  243. .ic{
  244. width: 28rpx;
  245. height: 28rpx;
  246. }
  247. }
  248. &.edit{
  249. margin-left: 8rpx;
  250. }
  251. .ic{
  252. width: 24rpx;
  253. height: 24rpx;
  254. }
  255. }
  256. }
  257. .address-box {
  258. margin-top: 13rpx;
  259. display: flex;
  260. align-items: flex-start;
  261. .address {
  262. font-size: 24upx;
  263. color: #999;
  264. max-width: 600rpx;
  265. line-height: 40rpx;
  266. }
  267. }
  268. .add-btn {
  269. display: flex;
  270. align-items: center;
  271. justify-content: center;
  272. width: 710upx;
  273. height: 80upx;
  274. margin: 240rpx auto 10rpx;
  275. font-size: 30upx;
  276. color: #fff;
  277. background-color: $base-color;
  278. border-radius: 38upx;
  279. }
  280. </style>