buyList.vue 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <template>
  2. <view class="content">
  3. <empty v-if="loaded === true && list.length === 0"></empty>
  4. <view class="order" v-for="item in list">
  5. <view class="base-info flex">
  6. <image :src="item.image" mode=""></image>
  7. <view class="goods">
  8. <view class="goods-name clamp">
  9. {{item.name}}
  10. </view>
  11. <view class="goods-num">
  12. X 1
  13. </view>
  14. </view>
  15. </view>
  16. <view class="">
  17. 有效期:{{formatTimestamp(item.valid_time*1000)}}
  18. </view>
  19. <view class="">
  20. 购买时间:{{formatTimestamp(item.add_time*1000)}}
  21. </view>
  22. <view class="status " v-if="ntime > item.valid_time*1000">
  23. 已过期
  24. </view>
  25. <view class="status on" v-else>
  26. 生效中
  27. </view>
  28. <!-- <view class="hj">
  29. 合计:¥1000
  30. </view> -->
  31. </view>
  32. <uni-load-more :status="loadingType"></uni-load-more>
  33. </view>
  34. </template>
  35. <script>
  36. import uniLoadMore from '@/components/uni-load-more/uni-load-more.vue';
  37. import empty from '@/components/empty';
  38. import { getBuyList } from '@/api/user.js'
  39. export default {
  40. components: {
  41. uniLoadMore,
  42. empty
  43. },
  44. data() {
  45. return {
  46. page: 1,
  47. limit: 10,
  48. loadingType: 'more',
  49. loaded: false,
  50. list: [],
  51. ntime: new Date().getTime()
  52. }
  53. },
  54. methods:{
  55. getBuyList() {
  56. if(this.loadingType == 'noMore' || this.loadingType == 'loading') {
  57. return
  58. }
  59. this.loadingType = 'loading'
  60. getBuyList({
  61. page: this.page,
  62. limit: this.limit
  63. }).then(res => {
  64. this.list = this.list.concat(res.data.list)
  65. this.page++
  66. if(res.data.list.length == this.limit) {
  67. this.loadingType = 'more'
  68. }else {
  69. this.loadingType = 'noMore'
  70. }
  71. this.loaded = true
  72. })
  73. },
  74. formatTimestamp(timestamp) {
  75. var date = new Date(timestamp);
  76. var year = date.getFullYear();
  77. var month = ("0" + (date.getMonth() + 1)).slice(-2);
  78. var day = ("0" + date.getDate()).slice(-2);
  79. var hours = ("0" + date.getHours()).slice(-2);
  80. var minutes = ("0" + date.getMinutes()).slice(-2);
  81. var seconds = ("0" + date.getSeconds()).slice(-2);
  82. return year + "-" + month + "-" + day + " " + hours + ":" + minutes + ":" + seconds;
  83. }
  84. },
  85. onLoad() {
  86. },
  87. onShow() {
  88. this.getBuyList()
  89. },
  90. onReachBottom() {
  91. this.getBuyList()
  92. }
  93. }
  94. </script>
  95. <style lang="scss" scoped>
  96. .content {
  97. padding:1rpx;
  98. }
  99. .order {
  100. width: 700rpx;
  101. height: 252rpx;
  102. background: #FFFFFF;
  103. border-radius: 20rpx;
  104. margin:20rpx auto;
  105. padding: 37rpx 18rpx 0;
  106. // justify-content: ;
  107. position: relative;
  108. image {
  109. width: 178rpx;
  110. height: 107rpx;
  111. border-radius: 8rpx;
  112. }
  113. .base-info {
  114. justify-content: flex-start;
  115. padding-bottom: 20rpx;
  116. // align-items: ;
  117. .goods {
  118. display: flex;
  119. flex-direction: column;
  120. justify-content: space-between;
  121. align-items: flex-start;
  122. padding-left: 15rpx;
  123. .goods-name {
  124. font-weight: bold;
  125. font-size: 28rpx;
  126. color: #363636;
  127. padding-bottom: 40rpx;
  128. width: 400rpx;
  129. }
  130. .goods-num {
  131. }
  132. }
  133. }
  134. font-size: 22rpx;
  135. color: #999999;
  136. .hj {
  137. font-weight: 500;
  138. font-size: 30rpx;
  139. color: #000000;
  140. position: absolute;
  141. right: 30rpx;
  142. bottom: 35rpx;
  143. text-align: right;
  144. }
  145. .status {
  146. font-weight: 500;
  147. font-size: 26rpx;
  148. color: #999999;
  149. position: absolute;
  150. right: 30rpx;
  151. top: 35rpx;
  152. }
  153. .on {
  154. color: #FF6F0F;
  155. }
  156. }
  157. </style>