index.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import request from '@/helpers/request'
  2. import { state } from '@/state'
  3. import { Button, Empty, Grid, GridItem, Icon, showToast } from 'vant'
  4. import { defineComponent, onMounted, reactive } from 'vue'
  5. import styles from './index.module.less'
  6. import { useRoute, useRouter } from 'vue-router'
  7. import { postMessage,promisefiyPostMessage } from '@/helpers/native-message'
  8. import iconLook from './image/look.svg'
  9. import iconCourse from './image/icon-course.png'
  10. export default defineComponent({
  11. name: 'lessonCourseware',
  12. setup() {
  13. const route = useRoute()
  14. const router = useRouter()
  15. const data = reactive({
  16. loading: true,
  17. list: [] as any
  18. })
  19. const getList = async () => {
  20. data.loading = true
  21. if (route.query.courseScheduleId) {
  22. try {
  23. const res: any = await request.post(
  24. state.platformApi + '/courseSchedule/getCoursewareDetail',
  25. {
  26. params: {
  27. courseScheduleId: route.query.courseScheduleId,
  28. coursewareId: route.query.id
  29. }
  30. }
  31. )
  32. if (Array.isArray(res?.data)) {
  33. data.list = res.data
  34. }
  35. } catch (error) {}
  36. } else {
  37. try {
  38. const res: any = await request.post(
  39. state.platformApi + '/courseSchedule/myCoursewareDetail/' + route.query.id
  40. )
  41. if (Array.isArray(res?.data)) {
  42. data.list = res.data
  43. }
  44. } catch (error) {}
  45. }
  46. data.loading = false
  47. }
  48. onMounted(() => {
  49. getList()
  50. })
  51. const handleClick = async (item: any) => {
  52. const isCache = await checkCache(item)
  53. if (!isCache) return
  54. if (route.query.code === 'select') {
  55. console.log('选择课时')
  56. setCoursewareDetail(item)
  57. return
  58. }
  59. router.push({
  60. path: '/coursewarePlay',
  61. query: {
  62. id: item.lessonCoursewareDetailId
  63. }
  64. })
  65. }
  66. // 检查课时是否有缓存
  67. const checkCache = async (item: any) => {
  68. const res = await promisefiyPostMessage({
  69. api: 'checkCoursewareCache',
  70. content: {
  71. lessonCoursewareDetailId: item.lessonCoursewareDetailId,
  72. finish: true,
  73. rate: 0.2
  74. }
  75. })
  76. console.log(res)
  77. return false
  78. }
  79. // 绑定课时
  80. const setCoursewareDetail = async (item: any) => {
  81. try {
  82. const res: any = await request.post(
  83. state.platformApi + '/courseSchedule/setCoursewareDetail',
  84. {
  85. params: {
  86. courseScheduleId: route.query.courseScheduleId,
  87. coursewareDetailId: item.lessonCoursewareDetailId
  88. }
  89. }
  90. )
  91. if (res.code === 200) {
  92. showToast('保存成功')
  93. postMessage({ api: 'back' })
  94. }
  95. } catch (error) {}
  96. }
  97. return () => (
  98. <div style={{ paddingTop: '14px' }}>
  99. <Grid gutter={14} columnNum={3} class={styles.grid}>
  100. {data.list.map((item: any) => {
  101. return (
  102. <GridItem>
  103. <div class={styles.gridItem} onClick={() => handleClick(item)}>
  104. <img src={iconCourse} class={styles.cover} />
  105. <div class={styles.title}>
  106. <div>{item.coursewareDetailName}</div>
  107. {route.query.code !== 'select' && <div>已使用 {item.useNum} 次</div>}
  108. </div>
  109. {route.query.code !== 'select' ? (
  110. <div class={styles.num}>
  111. 查看
  112. <Icon name="play-circle-o" />
  113. </div>
  114. ) : (
  115. <div class={styles.num}>选择</div>
  116. )}
  117. {route.query.code == 'select' && !item.unlock && (
  118. <div class={styles.look} onClick={(e: Event) => e.stopPropagation()}>
  119. <Icon name={iconLook} /> 未解锁
  120. </div>
  121. )}
  122. </div>
  123. </GridItem>
  124. )
  125. })}
  126. </Grid>
  127. {!data.loading && !data.list.length && <Empty description="空空如也" />}
  128. <Button
  129. onClick={() => {
  130. location.href =
  131. 'http://192.168.3.114:1000/teacher.html#/coursewarePlay?id=1610595720511209474&courseId=1612270880549044226'
  132. }}
  133. >
  134. 胜强测试
  135. </Button>
  136. </div>
  137. )
  138. }
  139. })