index.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import OEmpty from '@/components/o-empty'
  2. import OHeader from '@/components/o-header'
  3. import request from '@/helpers/request'
  4. import { state } from '@/state'
  5. import { Cell, CellGroup, Image, Popup } from 'vant'
  6. import { defineComponent, onMounted, reactive, ref } from 'vue'
  7. import { useRoute, useRouter } from 'vue-router'
  8. import Guide from './guide'
  9. import { getImage } from './images'
  10. import styles from './index.module.less'
  11. export default defineComponent({
  12. name: 'screen-projection',
  13. setup(props, { emit }) {
  14. const icons = {
  15. music: getImage('icon-music.png'),
  16. video: getImage('icon-video.png')
  17. }
  18. const route = useRoute()
  19. const router = useRouter()
  20. const query = route.query || {}
  21. const data = reactive({
  22. loading: true,
  23. guideOpen: false,
  24. knowledgePointList: [] as any,
  25. name: '',
  26. lessonTargetDesc: ''
  27. })
  28. console.log(query)
  29. // 获取课件详情
  30. const getDetail = async () => {
  31. data.loading = true
  32. try {
  33. const res: any = await request.get(
  34. state.platformApi + `/lessonCoursewareDetail/detail/${query.lessonCoursewareDetailId}`
  35. )
  36. if (res?.data) {
  37. data.name = res.data.name
  38. data.lessonTargetDesc = res.data.lessonTargetDesc
  39. data.knowledgePointList = res.data.knowledgePointList || []
  40. }
  41. } catch (error) {}
  42. data.loading = false
  43. }
  44. onMounted(() => {
  45. getDetail()
  46. })
  47. // 去课时播放
  48. const hanldeOpenPlay = (n: any) => {
  49. router.push({
  50. path: '/coursewarePlay',
  51. query: {
  52. ...query,
  53. id: query.lessonCoursewareDetailId,
  54. kId: n.knowledgePointId,
  55. mId: n.id
  56. }
  57. })
  58. }
  59. return () => (
  60. <div>
  61. <OHeader
  62. desotry={false}
  63. rightText="投屏帮助"
  64. onClickRight={() => {
  65. console.log('打开投屏')
  66. data.guideOpen = true
  67. }}
  68. />
  69. <div>
  70. {data.name && (
  71. <div class={styles.tips}>
  72. <div class={styles.line}></div>
  73. <div>{data.name}</div>
  74. </div>
  75. )}
  76. <CellGroup inset>
  77. <Cell
  78. title="胜强测试"
  79. isLink
  80. center
  81. onClick={() => {
  82. location.href = `http://192.168.3.114:1000/#/coursewarePlay?id=${query.lessonCoursewareDetailId}&courseId=${query.courseId}`
  83. }}
  84. >
  85. {{
  86. icon: () => (
  87. <Image style={{ marginRight: '12px' }} width={36} height={36} src={icons.music} />
  88. )
  89. }}
  90. </Cell>
  91. {data.knowledgePointList.map((item: any) => {
  92. return (
  93. <>
  94. {Array.isArray(item.materialList) &&
  95. item.materialList.map((n: any) => {
  96. return (
  97. <Cell title={n.name} isLink center onClick={() => hanldeOpenPlay(n)}>
  98. {{
  99. icon: () => (
  100. <Image
  101. style={{ marginRight: '12px' }}
  102. width={36}
  103. height={36}
  104. src={['VIDEO', 'IMG'].includes(n.type) ? icons.video : icons.music}
  105. />
  106. )
  107. }}
  108. </Cell>
  109. )
  110. })}
  111. </>
  112. )
  113. })}
  114. </CellGroup>
  115. </div>
  116. {!data.loading && !data.knowledgePointList.length && <OEmpty />}
  117. <Popup
  118. v-model:show={data.guideOpen}
  119. position="right"
  120. closeable
  121. closeIconPosition="top-left"
  122. safeAreaInsetBottom
  123. safeAreaInsetTop
  124. >
  125. <div class={styles.popup}>
  126. <Guide />
  127. </div>
  128. </Popup>
  129. </div>
  130. )
  131. }
  132. })