index.tsx 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import OHeader from '@/components/o-header'
  2. import request from '@/helpers/request'
  3. import { state } from '@/state'
  4. import { Cell, CellGroup, Image, Popup } from 'vant'
  5. import { defineComponent, onMounted, reactive, ref } from 'vue'
  6. import { useRoute } from 'vue-router'
  7. import Guide from './guide'
  8. import { getImage } from './images'
  9. import styles from './index.module.less'
  10. export default defineComponent({
  11. name: 'screen-projection',
  12. setup(props, { emit }) {
  13. const icons = {
  14. music: getImage('icon-music.png'),
  15. video: getImage('icon-video.png')
  16. }
  17. const route = useRoute()
  18. const query = route.query || {}
  19. const data = reactive({
  20. guideOpen: false,
  21. knowledgePointList: [] as any,
  22. name: '',
  23. lessonTargetDesc: ''
  24. })
  25. console.log(query)
  26. // 获取课件详情
  27. const getDetail = async () => {
  28. try {
  29. const res: any = await request.get(
  30. state.platformApi + `/lessonCoursewareDetail/detail/${query.id}`
  31. )
  32. if (res?.data) {
  33. data.name = res.data.name
  34. data.lessonTargetDesc = res.data.lessonTargetDesc
  35. data.knowledgePointList = res.data.knowledgePointList || []
  36. }
  37. } catch (error) {}
  38. }
  39. onMounted(() => {
  40. getDetail()
  41. })
  42. return () => (
  43. <div>
  44. <OHeader
  45. isBack
  46. rightText="投屏帮助"
  47. onClickRight={() => {
  48. console.log('打开投屏')
  49. data.guideOpen = true
  50. }}
  51. />
  52. <div>
  53. <div class={styles.tips}>
  54. <div class={styles.line}></div>
  55. <div>{data.name}</div>
  56. </div>
  57. <CellGroup inset>
  58. {data.knowledgePointList.map((item: any) => {
  59. return (
  60. <>
  61. {Array.isArray(item.materialList) &&
  62. item.materialList.map((n: any) => {
  63. return (
  64. <Cell title={n.name} isLink center>
  65. {{
  66. icon: () => (
  67. <Image
  68. style={{ marginRight: '12px' }}
  69. width={36}
  70. height={36}
  71. src={['VIDEO', 'IMG'].includes(n.type) ? icons.video : icons.music}
  72. />
  73. )
  74. }}
  75. </Cell>
  76. )
  77. })}
  78. </>
  79. )
  80. })}
  81. </CellGroup>
  82. </div>
  83. <Popup
  84. v-model:show={data.guideOpen}
  85. position="right"
  86. closeable
  87. closeIconPosition="top-left"
  88. safeAreaInsetBottom
  89. safeAreaInsetTop
  90. >
  91. <div class={styles.popup}>
  92. <Guide />
  93. </div>
  94. </Popup>
  95. </div>
  96. )
  97. }
  98. })