group.tsx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. import ColResult from '@/components/col-result'
  2. import { Cell, CellGroup, List, Image, Icon } from 'vant'
  3. import { defineComponent } from 'vue'
  4. import styles from './live.module.less'
  5. import iconLive from '../images/icon-live.png'
  6. import request from '@/helpers/request'
  7. import dayjs from 'dayjs'
  8. import { state } from '@/state'
  9. import Tips from './tips'
  10. export default defineComponent({
  11. name: 'group',
  12. data() {
  13. const query = this.$route.query
  14. return {
  15. list: [],
  16. dataShow: true, // 判断是否有数据
  17. loading: false,
  18. finished: false,
  19. params: {
  20. teacherId: query.teacherId,
  21. courseType: "GROUP",
  22. groupStatus: 'APPLY',
  23. page: 1,
  24. rows: 20
  25. }
  26. }
  27. },
  28. mounted() {
  29. this.getList()
  30. },
  31. methods: {
  32. formatTime(time: string) {
  33. const timeStr = dayjs(time || new Date())
  34. const weekStr = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
  35. // console.log(timeStr.day())
  36. return timeStr.format('YYYY-MM-DD') + `(${weekStr[timeStr.day()]})`
  37. },
  38. async getList() {
  39. try {
  40. const params: any = {
  41. ...this.params
  42. }
  43. if (state.version) {
  44. params.version = state.version || '' // 处理ios审核版本
  45. params.platform = 'ios-student'
  46. }
  47. const res = await request.post(
  48. '/api-student/courseGroup/queryPageCourseGroup',
  49. {
  50. data: {
  51. ...params
  52. }
  53. }
  54. )
  55. this.loading = false
  56. const result = res.data || {}
  57. // 处理重复请求数据
  58. if (this.list.length > 0 && result.pageNo === 1) {
  59. return
  60. }
  61. this.list = this.list.concat(result.rows || [])
  62. this.finished = result.pageNo >= result.totalPage
  63. this.params.page = result.pageNo + 1
  64. this.dataShow = this.list.length > 0
  65. } catch {
  66. this.dataShow = false
  67. this.finished = true
  68. }
  69. },
  70. onDetail(item: any) {
  71. this.$router.push({
  72. path: '/groupDetail',
  73. query: {
  74. groupId: item.courseGroupId
  75. }
  76. })
  77. }
  78. },
  79. render() {
  80. return (
  81. <div>
  82. <Tips
  83. type="GROUP"
  84. class={styles.tips}
  85. title="什么是小组课?"
  86. content="小组课是老师根据教学目的编排的课程,固定时间进行1V5线上授课。您可根据老师开放的课程内容和您的时间安排,选择您感兴趣的课程组进行学习。"
  87. />
  88. {this.dataShow ? (
  89. <List
  90. class={styles.liveList}
  91. v-model:loading={this.loading}
  92. immediateCheck={false}
  93. finished={this.finished}
  94. finishedText="没有更多了"
  95. >
  96. {this.list.map((item: any) => (
  97. <CellGroup
  98. class={styles.liveGroup}
  99. border={false}
  100. onClick={() => this.onDetail(item)}
  101. >
  102. <div class={styles.liveTop}>
  103. <img src={iconLive} class={styles.iconLive} />
  104. <span>开课时间: {this.formatTime(item.salesStartDate)} </span>
  105. </div>
  106. <div class={styles.liveCenter}>
  107. <Image
  108. class={styles.liCover}
  109. src={item.backgroundPic}
  110. fit="cover"
  111. />
  112. <span class={styles.subjectName}>{item?.subjectName}</span>
  113. </div>
  114. <div class={styles.liContent}>
  115. <div class={[styles.liTitle, 'van-ellipsis']}>
  116. {item.courseGroupName}
  117. </div>
  118. <div class={styles.users}>
  119. <div class={styles.lean}>
  120. <span class={styles.num}>
  121. {item.studentCount}人学习
  122. </span>
  123. </div>
  124. <div class={styles.price}>
  125. {item.coursePrice > 0 && (
  126. <>
  127. <span class={styles.priceNum}>
  128. <i>¥</i>
  129. {(this as any).$filters.moneyFormat(
  130. item.coursePrice
  131. )}
  132. </span>
  133. </>
  134. )}
  135. <span class={styles.label}>
  136. {item.coursePrice > 0 && '/'}
  137. {item.courseNum}课时
  138. </span>
  139. </div>
  140. </div>
  141. </div>
  142. </CellGroup>
  143. ))}
  144. </List>
  145. ) : (
  146. <ColResult btnStatus={false} classImgSize="SMALL" tips="暂无小组课" />
  147. )}
  148. </div>
  149. )
  150. }
  151. })