list.vue 6.0 KB

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