index.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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 { Button, 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. SONG: getImage('icon-music.png'),
  16. VIDEO: getImage('icon-video.png'),
  17. IMG: getImage('icon-img.png')
  18. }
  19. const route = useRoute()
  20. const router = useRouter()
  21. const query = route.query || {}
  22. const data = reactive({
  23. loading: true,
  24. guideOpen: false,
  25. knowledgePointList: [] as any,
  26. name: '',
  27. lessonTargetDesc: ''
  28. })
  29. console.log(query)
  30. // 获取课件详情
  31. const getDetail = async () => {
  32. data.loading = true
  33. try {
  34. const res: any = await request.get(
  35. state.platformApi + `/lessonCoursewareDetail/detail/${query.lessonCoursewareDetailId}`
  36. )
  37. if (res?.data) {
  38. data.name = res.data.name
  39. data.lessonTargetDesc = res.data.lessonTargetDesc
  40. data.knowledgePointList = res.data.knowledgePointList || []
  41. }
  42. } catch (error) {}
  43. data.loading = false
  44. }
  45. onMounted(() => {
  46. getDetail()
  47. })
  48. // 去课时播放
  49. const hanldeOpenPlay = (n?: any) => {
  50. router.push({
  51. path: '/coursewarePlay',
  52. query: {
  53. ...query,
  54. id: query.lessonCoursewareDetailId,
  55. kId: n?.id
  56. }
  57. })
  58. }
  59. return () => (
  60. <div class={styles.screenProjection}>
  61. <OHeader
  62. desotry={false}
  63. rightText="投屏帮助"
  64. onClickRight={() => {
  65. console.log('打开投屏')
  66. data.guideOpen = true
  67. }}
  68. />
  69. <div class={styles.container}>
  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. {data.knowledgePointList.map((item: any) => {
  78. return (
  79. <>
  80. {Array.isArray(item.materialList) &&
  81. item.materialList.map((n: any) => {
  82. return (
  83. <Cell title={n.name} isLink center onClick={() => hanldeOpenPlay(n)}>
  84. {{
  85. icon: () => (
  86. <Image
  87. style={{ marginRight: '12px' }}
  88. width={36}
  89. height={36}
  90. src={icons[n.type]}
  91. />
  92. )
  93. }}
  94. </Cell>
  95. )
  96. })}
  97. </>
  98. )
  99. })}
  100. </CellGroup>
  101. </div>
  102. {!data.loading && !data.knowledgePointList.length && <OEmpty />}
  103. <Button class={styles.playBtn} block type="primary" round onClick={() => hanldeOpenPlay()}>
  104. 播放课件
  105. </Button>
  106. <Popup
  107. v-model:show={data.guideOpen}
  108. position="right"
  109. closeable
  110. closeIconPosition="top-left"
  111. safeAreaInsetBottom
  112. safeAreaInsetTop
  113. >
  114. <div class={styles.popup}>
  115. <Guide />
  116. </div>
  117. </Popup>
  118. </div>
  119. )
  120. }
  121. })