list.vue 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265
  1. <template>
  2. <view class="">
  3. <view class="header flex-start">
  4. <image src="/static/image/common/grade-left.png" mode="" @click="$back()"></image>
  5. {{type == 0?$t('live.title1'):type == 1?$t('live.title2'):$t('live.title3')}}
  6. </view>
  7. <view class="detail-video-list">
  8. <view class="detail-video-li" v-for="(item,index) in liveList" :key="index" @click="toMatchLive(item)">
  9. <div class="img-box">
  10. <img class="bottom" :src="item.thumb" alt="">
  11. <div class="box">
  12. <div class="detail-box">
  13. <div class="title">{{ item.title }}</div>
  14. <div class="start_time">{{ formatDate(item.created_at) }}</div>
  15. <img class="icon1" src="/static/image/live/play-icon.png" alt="" />
  16. </div>
  17. </div>
  18. </div>
  19. </view>
  20. </view>
  21. <u-loadmore
  22. :status="status"
  23. fontSize="28"
  24. :line="true"
  25. :loading-text="statusType.loadingText"
  26. :loadmore-text="statusType.loadmoreText"
  27. :nomore-text="statusType.nomoreText"
  28. />
  29. </view>
  30. </template>
  31. <script>
  32. import { numberToK, parseTime } from '@/utils/util'
  33. export default {
  34. data() {
  35. return {
  36. type:0,
  37. liveList: [],
  38. statusType:{
  39. loadingText: this.$t('common.lab'),
  40. loadmoreText: this.$t('common.lab1'),
  41. nomoreText: this.$t('common.lab2')
  42. },
  43. status:'loadmore',
  44. pageNumber: 1
  45. }
  46. },
  47. onLoad(option) {
  48. this.type = option.type;
  49. this.getList()
  50. },
  51. // 触底触发
  52. onReachBottom() {
  53. if(this.status == 'loadmore'){
  54. this.pageNumber++;
  55. this.getList();
  56. }
  57. },
  58. // 下拉刷新
  59. onPullDownRefresh(){
  60. // 正常情况下接口返回应该很会很快。故意延迟调用,让用户有在刷新的体验感
  61. this.pageNumber = 1;
  62. this.status = 'loadmore';
  63. this.getList();
  64. setTimeout(res=>{
  65. uni.stopPullDownRefresh()
  66. },1500)
  67. },
  68. methods: {
  69. getList() {
  70. this.status= 'loading';
  71. this.getHistory()
  72. },
  73. getHistory() {
  74. uni.$u.http.get('/api/game/history', {
  75. params: {
  76. page: this.pageNumber
  77. }
  78. }).then(res => {
  79. if (this.pageNumber == 1) {
  80. this.liveList = res.data || []
  81. } else {
  82. this.liveList = this.liveList.concat(res.data || [])
  83. }
  84. this.status = this.liveList.length == res.total ? 'nomore' : 'loadmore'
  85. })
  86. },
  87. toMatchLive(item) {
  88. uni.navigateTo({
  89. url:`/pages/Live/history-detail?type=game&ID=${item.live_id}&MediaUrl=${item.video}`
  90. })
  91. },
  92. formatDate(value) {
  93. var date = new Date(value.replace(new RegExp(/-/gm), "/"));
  94. var weekNum = new Date().getDay()
  95. let week = ""
  96. switch (weekNum) {
  97. case 0:
  98. week = "Sun";
  99. break;
  100. case 1:
  101. week = "Mon";
  102. break;
  103. case 2:
  104. week = "Tue";
  105. break;
  106. case 3:
  107. week = "Wed";
  108. break;
  109. case 4:
  110. week = "Thu";
  111. break;
  112. case 5:
  113. week = "Fri";
  114. break;
  115. case 6:
  116. week = "Sat";
  117. break;
  118. }
  119. var MonthNum = date.getMonth() + 1
  120. let Month = ''
  121. switch (MonthNum) {
  122. case 1:
  123. Month = "Jan";
  124. break;
  125. case 2:
  126. Month = "Feb";
  127. break;
  128. case 3:
  129. Month = "Mar";
  130. break;
  131. case 4:
  132. Month = "Apr";
  133. break;
  134. case 5:
  135. Month = "May";
  136. break;
  137. case 6:
  138. Month = "Jun";
  139. break;
  140. case 7:
  141. Month = "Jul";
  142. break;
  143. case 8:
  144. Month = "Aug";
  145. break;
  146. case 9:
  147. Month = "Sept";
  148. break;
  149. case 10:
  150. Month = "Oct";
  151. break;
  152. case 11:
  153. Month = "Nov";
  154. break;
  155. case 12:
  156. Month = "Dec";
  157. break;
  158. }
  159. let day = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate())
  160. // this.week = week
  161. // this.month = Month
  162. // this.day = day
  163. var hours = date.getHours();
  164. var minutes = date.getMinutes();
  165. var ampm = hours >= 12 ? 'PM' : 'AM';
  166. if (hours != 12) {
  167. hours = hours % 12;
  168. }
  169. if (hours == 12 && minutes) {
  170. hours = hours % 12;
  171. ampm = 'PM'
  172. }
  173. hours = hours < 10 ? "0" + hours : hours;
  174. minutes = minutes < 10 ? '0' + minutes : minutes;
  175. // var strTime = week + ',' + day + Month + '.' + 'Watch live in' + hours + ':' + minutes + ' ' + ampm;
  176. var strTime = `${hours}:${minutes} ${ampm},${day} ${Month} `;
  177. return strTime;
  178. },
  179. numberToK(v) {
  180. return numberToK(v)
  181. },
  182. parseTime(t) {
  183. return parseTime(t, '{y}-{m}-{d} {h}:{i}')
  184. }
  185. },
  186. }
  187. </script>
  188. <style lang="scss">
  189. page {
  190. background-color: #F3F3F7 !important;
  191. }
  192. .header {
  193. color: #fff;
  194. font-size: 34rpx;
  195. padding: 18rpx 24rpx;
  196. position: sticky;
  197. top: 0;
  198. z-index: 10;
  199. background-color: #1D2550;
  200. image {
  201. width: 60rpx;
  202. height: 60rpx;
  203. }
  204. }
  205. .detail-video-list {
  206. flex-wrap: wrap;
  207. padding: 0 0 24rpx;
  208. }
  209. .detail-video-li {
  210. overflow: hidden;
  211. margin-top: 20rpx;
  212. background-color: white;
  213. .img-box {
  214. position: relative;
  215. min-height: 100rpx;
  216. }
  217. .box {
  218. position: absolute;
  219. left: 0;
  220. right: 0;
  221. bottom: 0;
  222. padding: 16px;
  223. // background-color: rgba(27, 24, 67, 0.8);
  224. }
  225. .logo-box {
  226. display: flex;
  227. align-items: center;
  228. justify-content: space-around;
  229. margin-bottom: 16px;
  230. .logo {
  231. height: 70rpx;
  232. }
  233. }
  234. .detail-box {
  235. position: relative;
  236. padding-right: 30px;
  237. .title {
  238. margin-bottom: 8px;
  239. font-weight: 500;
  240. font-size: 14px;
  241. color: #fff;
  242. }
  243. .start_time {
  244. font-weight: 400;
  245. font-size: 12px;
  246. color: #ACACAC;
  247. }
  248. .icon1 {
  249. position: absolute;
  250. right: 0;
  251. top: 50%;
  252. transform: translateY(-50%);
  253. width: 28px;
  254. }
  255. }
  256. .bottom {
  257. display: block;
  258. width: 100%;
  259. }
  260. }
  261. </style>