list.tsx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. import ColEmpty from '@/components/col-empty'
  2. import Pagination from '@/components/pagination'
  3. import request from '@/helpers/request'
  4. import { state } from '@/state'
  5. import { ElSkeleton, ElSkeletonItem } from 'element-plus'
  6. import { defineComponent } from 'vue'
  7. import Item from '../components/item'
  8. export default defineComponent({
  9. name: 'list',
  10. props: {
  11. groupStatus: {
  12. type: String,
  13. default: ''
  14. }
  15. },
  16. data() {
  17. return {
  18. pageInfo: {
  19. // 分页规则
  20. limit: 9, // 限制显示条数
  21. page: 1, // 当前页
  22. total: 0, // 总条数
  23. page_size: [9, 18, 36, 45] // 选择限制显示条数
  24. },
  25. list: [] as any[],
  26. loading: false,
  27. dataShow: false // 是否有数据
  28. }
  29. },
  30. mounted() {
  31. this.getList()
  32. },
  33. methods: {
  34. async getList() {
  35. this.loading = true
  36. try {
  37. const { data } = await request.post(
  38. '/api-website/courseGroup/queryPageCourseGroup',
  39. {
  40. data: {
  41. groupStatus: this.groupStatus,
  42. page: this.pageInfo.page,
  43. rows: this.pageInfo.limit,
  44. teacherId: state.user.data?.userId
  45. }
  46. }
  47. )
  48. this.list = data.rows || []
  49. this.pageInfo.total = data.total
  50. if (data.total <= 0) {
  51. this.dataShow = true
  52. }
  53. } catch {}
  54. if (this.dataShow) {
  55. this.loading = false
  56. } else {
  57. setTimeout(() => {
  58. this.loading = false
  59. }, 200)
  60. }
  61. }
  62. },
  63. render() {
  64. return (
  65. <>
  66. {state.user.data?.entryFlag && state.user.data?.liveFlag ? (
  67. <>
  68. <div class="flex flex-wrap px-10">
  69. <ElSkeleton
  70. loading={this.loading}
  71. animated
  72. class="flex"
  73. count={3}
  74. v-slots={{
  75. template: () => (
  76. <div class="w-1/3">
  77. <div class="flex flex-col pt-8 w-[262px] m-auto">
  78. <ElSkeletonItem
  79. variant="image"
  80. style={{ width: '100%', height: '175px' }}
  81. ></ElSkeletonItem>
  82. <div class="mx-2.5 py-3.5 border-b border-b-[#F2F2F2]">
  83. <div class="text-lg leading-none font-medium whitespace-nowrap overflow-hidden text-ellipsis">
  84. <ElSkeletonItem variant="h3"></ElSkeletonItem>
  85. </div>
  86. <div class="text-sm text-[#999] pt-2.5">
  87. <ElSkeletonItem
  88. variant="p"
  89. style={{ width: '50%' }}
  90. ></ElSkeletonItem>
  91. </div>
  92. </div>
  93. <div class="mx-2.5 py-4 flex items-center">
  94. <ElSkeletonItem
  95. variant="circle"
  96. style={{
  97. width: '22px',
  98. height: '22px',
  99. marginRight: '5px'
  100. }}
  101. ></ElSkeletonItem>
  102. <ElSkeletonItem
  103. variant="p"
  104. style={{ width: '20%' }}
  105. ></ElSkeletonItem>
  106. <p style={{ width: '45%' }}></p>
  107. <ElSkeletonItem
  108. variant="p"
  109. style={{ width: '20%' }}
  110. ></ElSkeletonItem>
  111. </div>
  112. </div>
  113. </div>
  114. )
  115. }}
  116. >
  117. {this.list.map((item: any) => (
  118. <div class="w-1/3 pt-8">
  119. <Item item={item} />
  120. </div>
  121. ))}
  122. </ElSkeleton>
  123. </div>
  124. <Pagination
  125. total={this.pageInfo.total}
  126. v-model:page={this.pageInfo.page}
  127. v-model:limit={this.pageInfo.limit}
  128. pageSizes={this.pageInfo.page_size}
  129. pagination={this.getList}
  130. />
  131. {this.dataShow && <ColEmpty />}
  132. </>
  133. ) : state.user.data?.entryFlag ? (
  134. !state.user.data?.liveFlag && (
  135. <ColEmpty
  136. type="live"
  137. message="您尚未开通直播服务,开通后即可创建直播课程~"
  138. buttonVisibility={false}
  139. buttonText="立即开通"
  140. onDetail={() => {
  141. this.$router.push('/teacherAuth')
  142. }}
  143. />
  144. )
  145. ) : (
  146. <ColEmpty
  147. type="teacherCert"
  148. message="您还未完成老师认证,认证后才可创建视频课哦~"
  149. buttonVisibility
  150. buttonText="去认证"
  151. onDetail={() => {
  152. this.$router.push('/teacherAuth')
  153. }}
  154. />
  155. )}
  156. </>
  157. )
  158. }
  159. })