collect.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <template>
  2. <view class="collect clear">
  3. <navbar v-model="screenHeight" title-color="#ffffff" background="#1b43c4" :iSimmersive="false" :placeholder="true" title="我的收藏"></navbar>
  4. <mescroll-body
  5. ref="mescrollRef"
  6. @init="mescrollInit"
  7. @down="downCallback"
  8. @up="upCallback"
  9. :down="downOption"
  10. :up="upOption"
  11. :height="screenHeight+'px'"
  12. >
  13. <view class="list-box">
  14. <view
  15. class="list-item"
  16. v-for="item in result"
  17. :key="item.id"
  18. @click="$utils.navigateTo('goods/view',{ id: item.goods_id })"
  19. >
  20. <view class="left-pic">
  21. <view class="pic">
  22. <image :src="item.thumb"></image>
  23. </view>
  24. </view>
  25. <view class="goods">
  26. <view class="t">{{ item.title }}</view>
  27. <view class="m">{{ item.attr }}</view>
  28. <view class="b">
  29. <view>¥{{ item.price }}</view>
  30. <view class="iconfont del" @click="delCollect(item)">
  31. &#xe652;
  32. </view>
  33. </view>
  34. </view>
  35. </view>
  36. </view>
  37. </mescroll-body>
  38. <authorize v-model="isAuthShow"></authorize>
  39. </view>
  40. </template>
  41. <script>
  42. import MescrollMixin from "@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js";
  43. import navbar from "@/components/navbar/navbar";
  44. import authorize from "@/components/authorize/authorize";
  45. export default {
  46. mixins: [MescrollMixin],
  47. components: {
  48. navbar,authorize
  49. },
  50. data() {
  51. return {
  52. screenHeight: 0,
  53. isAuthShow: false,
  54. downOption: {
  55. auto: false
  56. },
  57. upOption: {
  58. use: true, // 是否启用上拉加载; 默认true
  59. auto: false, // 是否在初始化完毕之后自动执行上拉加载的回调; 默认true
  60. isLock: false, // 是否锁定上拉加载,默认false;
  61. isBoth: true, // 上拉加载时,如果滑动到列表顶部是否可以同时触发下拉刷新;默认true,两者可同时触发;
  62. page: {
  63. num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始
  64. size: 10, // 每页数据的数量
  65. time: null // 加载第一页数据服务器返回的时间; 防止用户翻页时,后台新增了数据从而导致下一页数据重复;
  66. },
  67. noMoreSize: 3, // 如果列表已无数据,可设置列表的总数量要大于等于5条才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看
  68. offset: 80, // 距底部多远时,触发upCallback(仅mescroll-uni生效, 对于mescroll-body则需在pages.json设置"onReachBottomDistance")
  69. bgColor: "transparent", // 背景颜色 (建议在pages.json中再设置一下backgroundColorTop)
  70. textColor: "gray", // 文本颜色 (当bgColor配置了颜色,而textColor未配置时,则textColor会默认为白色)
  71. textLoading: '加载中 ...', // 加载中的提示文本
  72. textNoMore: '-- END --', // 没有更多数据的提示文本
  73. },
  74. result: []
  75. };
  76. },
  77. onShow() {
  78. this.$store.dispatch("usersStatus").then(()=>{
  79. this.isAuthShow = false;
  80. this.downCallback();
  81. }).catch(()=>{
  82. this.isAuthShow = true;
  83. this.mescroll.showEmpty();
  84. });
  85. },
  86. methods: {
  87. downCallback(){
  88. this.mescroll.resetUpScroll();
  89. },
  90. triggerDownScroll(){
  91. this.mescroll.triggerDownScroll();
  92. },
  93. upCallback(page) {
  94. this.$http.getCollectList({
  95. page: page.num
  96. }).then((result)=>{
  97. this.mescroll.endByPage(result.data.list.length, result.data.total);
  98. if(result.status==1){
  99. if(page.num == 1) this.result = [];
  100. this.result = this.result.concat(result.data.list);
  101. }else if(result.status == -1){
  102. this.mescroll.endErr();
  103. }
  104. }).catch(error=>{
  105. this.mescroll.endErr();
  106. });
  107. },
  108. delCollect(data){
  109. let arr = [];
  110. this.result = this.result.filter((item)=>{
  111. if(item.id == data.id){
  112. arr.push(item);
  113. }
  114. return !(item.id == data.id);
  115. });
  116. this.$http.deleteCollect({
  117. id: data.id
  118. });
  119. if(this.result <= 0){
  120. this.mescroll.showEmpty();
  121. }
  122. }
  123. }
  124. }
  125. </script>
  126. <style lang="scss" scoped>
  127. /deep/ .mescroll-body-content { background-color: #fafafa; }
  128. .collect{
  129. width: 100%;
  130. height: 100vh;
  131. background-color: #fafafa;
  132. }
  133. .list-box{
  134. display: flex;
  135. flex-wrap: wrap;
  136. flex-direction: column;
  137. background: #fafafa;
  138. .list-item{
  139. width: 88%;
  140. height: 180rpx;
  141. margin: 0 auto;
  142. background-color: #fff;
  143. margin-bottom: 20rpx;
  144. border-radius: 10rpx;
  145. font-size: 28rpx;
  146. padding: 20rpx 20rpx;
  147. position: relative;
  148. &:first-child{
  149. margin-top: 20rpx;
  150. }
  151. .left-pic {
  152. position: absolute;
  153. left: 0; top:0; z-index: 999;
  154. width: 160rpx; height: 220rpx;
  155. .pic{
  156. float: right; margin-top: 30rpx;
  157. width: 160rpx;
  158. image {
  159. width: 160rpx;
  160. height: 160rpx;
  161. }
  162. }
  163. }
  164. .goods{
  165. padding-left: 160rpx;
  166. font-size: 28rpx;
  167. color: #333;
  168. .t{
  169. width: 100%;
  170. min-height: 50rpx;
  171. max-height: 80rpx;
  172. display: -webkit-box;
  173. overflow: hidden;
  174. -webkit-line-clamp: 2;
  175. -webkit-box-orient: vertical;
  176. }
  177. .m{
  178. color: #666;
  179. font-size: 26rpx;
  180. display: -webkit-box;
  181. overflow: hidden;
  182. -webkit-line-clamp: 1;
  183. -webkit-box-orient: vertical;
  184. }
  185. .b{
  186. height: 60rpx;
  187. padding-top: 8rpx;
  188. view:first-child{
  189. float: left;
  190. line-height: 60rpx;
  191. color: red; font-size: 34rpx;
  192. }
  193. view:last-child{
  194. float: right;
  195. }
  196. .del {
  197. margin-top: 15rpx; color: #666; text-align: center; border-radius: 50rpx;
  198. width: 50rpx; height: 50rpx; line-height: 50rpx; font-size: 28rpx;
  199. background-color: #eee; display: inline-block;
  200. }
  201. }
  202. }
  203. }
  204. }
  205. </style>