group-list.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. <template>
  2. <mescroll-uni ref="mescrollRef" top="80rpx" @down="downCallback" @up="upCallback" :down="downOption" :up="upOption">
  3. <view class="group-list">
  4. <navigator v-for="(item, index) in groupList" :key="index" class="item bg-white mt20" hover-class="none"
  5. :url="'/bundle/pages/order_details/order_details?id=' + item.order_id">
  6. <view class="group-header row-between">
  7. <view>
  8. <view v-if="item.team_end_time">{{item.team_end_time}}</view>
  9. <view v-else>
  10. <view class="row" v-if="getTeamCountTime(item) >= 0">
  11. <view class="sm mr10">{{item.shop_name}}</view>
  12. <!-- <u-count-down :timestamp="getTeamCountTime(item)" color="#fff" bg-color="#FF2C3C"
  13. separator-color="#FF2C3C" font-size="24" height="36" separator-size="26"
  14. @end="reflesh"></u-count-down> -->
  15. </view>
  16. </view>
  17. </view>
  18. <view :class="item.status == 2 ? 'muted' : 'primary'">{{getGroupStatus(item.status)}}
  19. </view>
  20. </view>
  21. <view class="group-con">
  22. <view v-if="item.identity_text" class="team-chief xs white">{{item.identity_text}}</view>
  23. <order-goods :team="{need: item.need}"
  24. :list="[{people_num: item.people_num,name: item.name, spec_value_str: item.spec_value_str,image: item.image,goods_num: item.count, goods_id: item.goods_id, goods_price: item.order_amount}]">
  25. </order-goods>
  26. <view class="all-price row-end">
  27. <text class="muted xs">共{{item.count}}件商品,总金额:</text>
  28. <price-format show-subscript :subscript-size="30" :first-size="30" :second-size="30"
  29. :price="item.order_amount"></price-format>
  30. </view>
  31. </view>
  32. <view class="group-footer row" v-if="item.pay_status == 0">
  33. <view style="flex: 1"></view>
  34. <view>
  35. <navigator v-if="item.pay_status == 0" hover-class="none"
  36. :url="'/pages/order_details/order_details?id=' + item.order_id">
  37. <button size="sm" class="br60 lighter btn" type="primary" hover-class="none">
  38. 去付款
  39. </button>
  40. </navigator>
  41. </view>
  42. </view>
  43. </navigator>
  44. </view>
  45. </mescroll-uni>
  46. </template>
  47. <script>
  48. import {getUserGroup} from '@/api/activity';
  49. import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
  50. import MescrollMoreItemMixin from "@/components/mescroll-uni/mixins/mescroll-more-item.js";
  51. export default {
  52. mixins: [MescrollMixin, MescrollMoreItemMixin],
  53. data() {
  54. return {
  55. groupList: [],
  56. downOption: {
  57. auto: false // 不自动加载 (mixin已处理第一个tab触发downCallback)
  58. },
  59. upOption: {
  60. auto: true, // 不自动加载
  61. noMoreSize: 1, //如果列表已无数据,可设置列表的总数量要大于半页才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看; 默认5
  62. empty: {
  63. icon: '/static/images/goods_null.png',
  64. tip: '暂无拼团~', // 提示
  65. fixed: true
  66. }
  67. },
  68. };
  69. },
  70. props: {
  71. groupType: {
  72. type: Number
  73. }
  74. },
  75. mounted() {
  76. // this.$getUserGroup();
  77. },
  78. methods: {
  79. // 触底加载
  80. upCallback(page) {
  81. this.$getUserGroup(page.num, page.size);
  82. },
  83. $getUserGroup(pageNum = 1, pageSize = 10) {
  84. let {groupType} = this;
  85. getUserGroup({
  86. 'type': groupType,
  87. 'page_no': pageNum,
  88. 'page_size': pageSize
  89. }).then(res => {
  90. if (res) {
  91. let curPageData = res.data.list;
  92. let curPageLen = curPageData.length;
  93. let hasNext = !!res.data.more;
  94. if (pageNum == 1) this.lists = [];
  95. console.log(hasNext)
  96. this.groupList = this.lists.concat(curPageData);
  97. this.mescroll.endSuccess(curPageLen, hasNext);
  98. }
  99. }).catch(() => {
  100. this.mescroll.endErr()
  101. })
  102. }
  103. },
  104. computed: {
  105. // 计算属性,如果拼团状态等于某个值就返回某个值的文字状态
  106. getGroupStatus() {
  107. return (status) => {
  108. var text = ''
  109. switch (status) {
  110. case 0:
  111. text = '拼团中';
  112. break;
  113. case 1:
  114. text = '拼团成功';
  115. break;
  116. case 2:
  117. text = '拼团失败';
  118. break;
  119. }
  120. return text
  121. }
  122. },
  123. getTeamCountTime() {
  124. return (item) => item.count_time = Math.min(item.found_end_time, item.end_time) - Date.now() / 1000
  125. }
  126. }
  127. };
  128. </script>
  129. <style lang="scss">
  130. @import '@/styles/base.scss';
  131. .group-list {
  132. min-height: calc(100vh - 80rpx);
  133. padding: 0 20rpx;
  134. overflow: hidden;
  135. .item {
  136. border-radius: 10rpx;
  137. position: relative;
  138. .group-header {
  139. height: 80rpx;
  140. padding: 0 24rpx;
  141. border-bottom: 1px dotted #E5E5E5;
  142. }
  143. .team-chief {
  144. position: absolute;
  145. z-index: 100;
  146. top: 105rpx;
  147. padding: 4rpx 20rpx;
  148. border-radius: 0 60rpx 60rpx 0;
  149. background: linear-gradient(87deg, #F95F2F 0%, #FF2C3C 100%);
  150. }
  151. .all-price {
  152. text-align: right;
  153. padding: 0 24rpx 20rpx;
  154. }
  155. .group-footer {
  156. height: 100rpx;
  157. border-top: $-solid-border;
  158. padding: 0 24rpx;
  159. .btn {
  160. width: 244rpx;
  161. }
  162. }
  163. }
  164. }
  165. </style>