index.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <script setup>
  2. import { getTimestamp } from '~/utils/day';
  3. import { paddingLeft } from '~/utils/string';
  4. function handleNavLeftClick() {
  5. router.back()
  6. }
  7. function handleNavRightClick() {
  8. router.push('/stxk/jz/wd')
  9. }
  10. let list = $ref(Array.from({ length: 8 }).map((_, i) => ({ id: i, title: '15天学习英语基础词汇基础词汇基础词汇', desc: '讲师:张春丽', price: '18.00', thumb: 'https://fastly.jsdelivr.net/npm/@vant/assets/ipad.jpeg', num: 10, enddate: '2022-8-23' })))
  11. let loading = $ref(false)
  12. let finished = $ref(false)
  13. function onLoad() {
  14. loading = true
  15. // finished = false
  16. setTimeout(() => {
  17. for (let i = 0; i < 4; i++) {
  18. list.push({ title: '15天学习英语基础词汇基础词汇基础词汇', desc: '讲师:张春丽', price: '18.00', thumb: 'https://fastly.jsdelivr.net/npm/@vant/assets/ipad.jpeg', num: 10, enddate: '2022-8-23 01:00:00' });
  19. }
  20. // 加载状态结束
  21. loading = false;
  22. // 数据全部加载完成
  23. if (list.length >= 20) {
  24. finished = true;
  25. }
  26. }, 1000);
  27. }
  28. function getCountDownTime(target) {
  29. return getTimestamp(target) - getTimestamp()
  30. }
  31. const router = useRouter()
  32. function handleClickCard(item) {
  33. console.log(item)
  34. router.push(`/stxk/jz/kcxq/${item.id}`)
  35. }
  36. </script>
  37. <template>
  38. <van-sticky>
  39. <van-nav-bar title="社团选课" right-text="我的社团课程" @click-right="handleNavRightClick" left-arrow
  40. @click-left="handleNavLeftClick">
  41. </van-nav-bar>
  42. </van-sticky>
  43. <van-list v-model:loading="loading" :finished="finished" finished-text="没有更多了" @load="onLoad" @click.stop>
  44. <template v-for="item in list">
  45. <van-card :price="item.price" :desc="item.desc" :title="item.title" :thumb="item.thumb"
  46. @click="handleClickCard(item)">
  47. <template #tag>
  48. <van-count-down :time="getCountDownTime(item.enddate)">
  49. <template #default="timeData">
  50. <span class="bg-opacity-50 text-light-900 bg-dark-900 px-1">
  51. {{ paddingLeft(timeData.days * 24 + timeData.hours) }}:{{ paddingLeft(timeData.minutes)
  52. }}:{{ paddingLeft(timeData.seconds) }}
  53. </span>
  54. </template>
  55. </van-count-down>
  56. </template>
  57. <template #num>
  58. <span>{{ item.num }}人报名</span>
  59. </template>
  60. </van-card>
  61. </template>
  62. </van-list>
  63. </template>