|  | @@ -1,4 +1,4 @@
 | 
	
		
			
				|  |  | -import { Button, Icon, Popup, Swipe, SwipeItem, Tab, Tabs } from 'vant'
 | 
	
		
			
				|  |  | +import { Button, Icon, Popup, Slider, Swipe, SwipeItem, Tab, Tabs } from 'vant'
 | 
	
		
			
				|  |  |  import {
 | 
	
		
			
				|  |  |    defineComponent,
 | 
	
		
			
				|  |  |    onMounted,
 | 
	
	
		
			
				|  | @@ -7,7 +7,8 @@ import {
 | 
	
		
			
				|  |  |    onUnmounted,
 | 
	
		
			
				|  |  |    ref,
 | 
	
		
			
				|  |  |    watch,
 | 
	
		
			
				|  |  | -  Transition
 | 
	
		
			
				|  |  | +  Transition,
 | 
	
		
			
				|  |  | +  computed
 | 
	
		
			
				|  |  |  } from 'vue'
 | 
	
		
			
				|  |  |  import iconBack from './image/back.svg'
 | 
	
		
			
				|  |  |  import styles from './index.module.less'
 | 
	
	
		
			
				|  | @@ -16,7 +17,7 @@ import 'plyr/dist/plyr.css'
 | 
	
		
			
				|  |  |  import request from '@/helpers/request'
 | 
	
		
			
				|  |  |  import { state } from '@/state'
 | 
	
		
			
				|  |  |  import { useRoute } from 'vue-router'
 | 
	
		
			
				|  |  | -import { postMessage } from '@/helpers/native-message'
 | 
	
		
			
				|  |  | +import { listenerMessage, postMessage } from '@/helpers/native-message'
 | 
	
		
			
				|  |  |  import MusicScore from './component/musicScore'
 | 
	
		
			
				|  |  |  import iconMenu from './image/icon-menu.svg'
 | 
	
		
			
				|  |  |  import iconDian from './image/icon-dian.svg'
 | 
	
	
		
			
				|  | @@ -46,15 +47,41 @@ export default defineComponent({
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |        })
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    handleInit()
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      const route = useRoute()
 | 
	
		
			
				|  |  |      const data = reactive({
 | 
	
		
			
				|  |  |        detail: null,
 | 
	
		
			
				|  |  |        active: '',
 | 
	
		
			
				|  |  | +      itemActive: '',
 | 
	
		
			
				|  |  |        knowledgePointList: [] as any,
 | 
	
		
			
				|  |  |        showHead: true,
 | 
	
		
			
				|  |  |        players: [] as any
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  | +    const activeData = reactive({
 | 
	
		
			
				|  |  | +      model: true, // 遮罩
 | 
	
		
			
				|  |  | +      currentTime: 10
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +    const itemList = computed(() => {
 | 
	
		
			
				|  |  | +      const list: any = []
 | 
	
		
			
				|  |  | +      for (let i = 0; i < data.knowledgePointList.length; i++) {
 | 
	
		
			
				|  |  | +        const item = data.knowledgePointList[i]
 | 
	
		
			
				|  |  | +        for (let j = 0; j < item.materialList.length; j++) {
 | 
	
		
			
				|  |  | +          const material = item.materialList[j]
 | 
	
		
			
				|  |  | +          if (popupData.itemActive === '') {
 | 
	
		
			
				|  |  | +            popupData.tabActive = material.knowledgePointId
 | 
	
		
			
				|  |  | +            popupData.tabName = item.name
 | 
	
		
			
				|  |  | +            popupData.itemActive = material.id
 | 
	
		
			
				|  |  | +            popupData.itemName = material.name
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +          list.push({
 | 
	
		
			
				|  |  | +            ...material
 | 
	
		
			
				|  |  | +          })
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  | +      // console.log('🚀 ~ list', list)
 | 
	
		
			
				|  |  | +      return list
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  |      const getDetail = async () => {
 | 
	
		
			
				|  |  |        try {
 | 
	
		
			
				|  |  |          const res: any = await request.get(
 | 
	
	
		
			
				|  | @@ -69,12 +96,7 @@ export default defineComponent({
 | 
	
		
			
				|  |  |              return n
 | 
	
		
			
				|  |  |            })
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        console.log('数据加载完成')
 | 
	
		
			
				|  |  |        } catch (error) {}
 | 
	
		
			
				|  |  | -      nextTick(() => {
 | 
	
		
			
				|  |  | -        console.log('开始加载视频')
 | 
	
		
			
				|  |  | -        videoInit()
 | 
	
		
			
				|  |  | -      })
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      const videoInit = () => {
 | 
	
		
			
				|  |  |        console.log(document.querySelectorAll('.player'))
 | 
	
	
		
			
				|  | @@ -114,9 +136,32 @@ export default defineComponent({
 | 
	
		
			
				|  |  |        })
 | 
	
		
			
				|  |  |        console.log('🚀 ~ player', data.players)
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  | +    const testFile = ref('')
 | 
	
		
			
				|  |  |      onMounted(() => {
 | 
	
		
			
				|  |  | -      handleInit()
 | 
	
		
			
				|  |  | +      // const o = new ActiveXObject("wscript.shell")
 | 
	
		
			
				|  |  |        getDetail()
 | 
	
		
			
				|  |  | +      postMessage(
 | 
	
		
			
				|  |  | +        {
 | 
	
		
			
				|  |  | +          api: 'getCourseFilePath',
 | 
	
		
			
				|  |  | +          content: {
 | 
	
		
			
				|  |  | +            url: 'https://daya.ks3-cn-beijing.ksyuncs.com/01/1672976208474.jpg',
 | 
	
		
			
				|  |  | +            materialId: '1610610237357969409',
 | 
	
		
			
				|  |  | +            updateTime: '2023-01-04 20:12:58',
 | 
	
		
			
				|  |  | +            type: 'VIDEO' // SONG VIDEO IMAGE
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        (res) => {
 | 
	
		
			
				|  |  | +          if (res?.content) {
 | 
	
		
			
				|  |  | +            testFile.value = 'customScheme://' + res.content.localPath
 | 
	
		
			
				|  |  | +            fetch(testFile.value)
 | 
	
		
			
				|  |  | +          }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +      )
 | 
	
		
			
				|  |  | +    })
 | 
	
		
			
				|  |  | +    listenerMessage('getCourseFilePath', (res) => {
 | 
	
		
			
				|  |  | +      if (res?.content) {
 | 
	
		
			
				|  |  | +        testFile.value = res.content.localPath
 | 
	
		
			
				|  |  | +      }
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  |      // 返回
 | 
	
		
			
				|  |  |      const goback = () => {
 | 
	
	
		
			
				|  | @@ -157,27 +202,28 @@ export default defineComponent({
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      const popupData = reactive({
 | 
	
		
			
				|  |  |        open: false,
 | 
	
		
			
				|  |  | -      active: ''
 | 
	
		
			
				|  |  | +      activeIndex: 0,
 | 
	
		
			
				|  |  | +      tabActive: '',
 | 
	
		
			
				|  |  | +      tabName: '',
 | 
	
		
			
				|  |  | +      itemActive: '',
 | 
	
		
			
				|  |  | +      itemName: ''
 | 
	
		
			
				|  |  |      })
 | 
	
		
			
				|  |  | -    // 监听切换
 | 
	
		
			
				|  |  | -    watch(
 | 
	
		
			
				|  |  | -      () => popupData.active,
 | 
	
		
			
				|  |  | -      () => {
 | 
	
		
			
				|  |  | -        console.log(data.active, '监听切换')
 | 
	
		
			
				|  |  | -        handleChange()
 | 
	
		
			
				|  |  | -        const knowledge = data.knowledgePointList.find((n: any) => n.id === data.active)
 | 
	
		
			
				|  |  | -        if (knowledge && knowledge?.materialList[knowledge.index]) {
 | 
	
		
			
				|  |  | -          // 如果是曲谱,隐藏头部
 | 
	
		
			
				|  |  | -          if (knowledge.materialList[knowledge.index]?.type === 'SONG') {
 | 
	
		
			
				|  |  | -            data.showHead = false
 | 
	
		
			
				|  |  | -            return
 | 
	
		
			
				|  |  | -          }
 | 
	
		
			
				|  |  | -        }
 | 
	
		
			
				|  |  | -        data.showHead = true
 | 
	
		
			
				|  |  | -      }
 | 
	
		
			
				|  |  | -    )
 | 
	
		
			
				|  |  | +    // 切换素材
 | 
	
		
			
				|  |  | +    const toggleMaterial = () => {
 | 
	
		
			
				|  |  | +      const index = itemList.value.findIndex((n: any) => n.id == popupData.itemActive)
 | 
	
		
			
				|  |  | +      popupData.activeIndex = index
 | 
	
		
			
				|  |  | +      console.log('🚀 ~ popupData', popupData.activeIndex)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +    // 上一个知识点, 下一个知识点
 | 
	
		
			
				|  |  | +    const handlePreAndNext = (type: string) => {
 | 
	
		
			
				|  |  | +      console.log(popupData.tabActive)
 | 
	
		
			
				|  |  | +      const tabIndex = data.knowledgePointList.findIndex((n: any) => n.id == popupData.tabActive)
 | 
	
		
			
				|  |  | +      const itemIndex = itemList.value.findIndex((n: any) => n.id == popupData.itemActive)
 | 
	
		
			
				|  |  | +      
 | 
	
		
			
				|  |  | +      console.log("🚀 ~ tab", tabIndex, itemIndex)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    // 去点名
 | 
	
		
			
				|  |  | +    // 去点名,签退
 | 
	
		
			
				|  |  |      const gotoRollCall = (pageTag: string) => {
 | 
	
		
			
				|  |  |        postMessage({
 | 
	
		
			
				|  |  |          api: 'open_app_page',
 | 
	
	
		
			
				|  | @@ -191,130 +237,146 @@ export default defineComponent({
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      return () => (
 | 
	
		
			
				|  |  |        <div class={styles.coursewarePlay}>
 | 
	
		
			
				|  |  | +        <Swipe
 | 
	
		
			
				|  |  | +          style={{ height: '100vh' }}
 | 
	
		
			
				|  |  | +          showIndicators={false}
 | 
	
		
			
				|  |  | +          loop={false}
 | 
	
		
			
				|  |  | +          initialSwipe={popupData.activeIndex}
 | 
	
		
			
				|  |  | +          vertical
 | 
	
		
			
				|  |  | +          lazyRender={true}
 | 
	
		
			
				|  |  | +          onChange={(val: any) => {
 | 
	
		
			
				|  |  | +            // item.index = val
 | 
	
		
			
				|  |  | +            // popupData.itemActive = `${item.id}-${item?.materialList?.[item.index]?.id}`
 | 
	
		
			
				|  |  | +          }}
 | 
	
		
			
				|  |  | +        >
 | 
	
		
			
				|  |  | +          {itemList.value.map((m: any) => {
 | 
	
		
			
				|  |  | +            return (
 | 
	
		
			
				|  |  | +              <SwipeItem>
 | 
	
		
			
				|  |  | +                {m.type === 'VIDEO' ? (
 | 
	
		
			
				|  |  | +                  <div class={styles.videoItem}>
 | 
	
		
			
				|  |  | +                    <video class="player">
 | 
	
		
			
				|  |  | +                      <source src={m.content} type="video/mp4" />
 | 
	
		
			
				|  |  | +                    </video>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                ) : m.type === 'IMG' ? (
 | 
	
		
			
				|  |  | +                  <div class={styles.imgItem}>
 | 
	
		
			
				|  |  | +                    <img src={m.content} />
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                ) : (
 | 
	
		
			
				|  |  | +                  <div class={styles.songItem}>
 | 
	
		
			
				|  |  | +                    <MusicScore music={m} />
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                )}
 | 
	
		
			
				|  |  | +              </SwipeItem>
 | 
	
		
			
				|  |  | +            )
 | 
	
		
			
				|  |  | +          })}
 | 
	
		
			
				|  |  | +        </Swipe>
 | 
	
		
			
				|  |  | +        <div
 | 
	
		
			
				|  |  | +          class={styles.playModel}
 | 
	
		
			
				|  |  | +          onClick={() => {
 | 
	
		
			
				|  |  | +            activeData.model = !activeData.model
 | 
	
		
			
				|  |  | +          }}
 | 
	
		
			
				|  |  | +        ></div>
 | 
	
		
			
				|  |  |          <Transition name="top">
 | 
	
		
			
				|  |  | -          {data.showHead && (
 | 
	
		
			
				|  |  | +          {activeData.model && (
 | 
	
		
			
				|  |  |              <div class={styles.headerContainer}>
 | 
	
		
			
				|  |  |                <div class={styles.backBtn} onClick={() => goback()}>
 | 
	
		
			
				|  |  |                  <Icon name={iconBack} />
 | 
	
		
			
				|  |  |                  返回
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  | -              <div class={styles.menu}>
 | 
	
		
			
				|  |  | -                <Tabs
 | 
	
		
			
				|  |  | -                  v-model:active={data.active}
 | 
	
		
			
				|  |  | -                  ellipsis={false}
 | 
	
		
			
				|  |  | -                  onChange={() => {
 | 
	
		
			
				|  |  | -                    const knowledge = data.knowledgePointList.find((_: any) => _.id === data.active)
 | 
	
		
			
				|  |  | -                    popupData.active = `${data.active}-${
 | 
	
		
			
				|  |  | -                      knowledge?.materialList?.[knowledge.index]?.id
 | 
	
		
			
				|  |  | -                    }`
 | 
	
		
			
				|  |  | -                  }}
 | 
	
		
			
				|  |  | -                >
 | 
	
		
			
				|  |  | -                  {{
 | 
	
		
			
				|  |  | -                    default: () => {
 | 
	
		
			
				|  |  | -                      return data.knowledgePointList.map((n: any) => {
 | 
	
		
			
				|  |  | -                        return <Tab title={n.name} name={n.id}></Tab>
 | 
	
		
			
				|  |  | -                      })
 | 
	
		
			
				|  |  | -                    }
 | 
	
		
			
				|  |  | -                    // 'nav-right': () => <div style={{width: '40%'}} class={styles.menuLine}></div>
 | 
	
		
			
				|  |  | -                  }}
 | 
	
		
			
				|  |  | -                </Tabs>
 | 
	
		
			
				|  |  | +              <div class={styles.menu}>{popupData.tabName}</div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          )}
 | 
	
		
			
				|  |  | +        </Transition>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <Transition name="right">
 | 
	
		
			
				|  |  | +          {activeData.model && (
 | 
	
		
			
				|  |  | +            <div class={styles.rightFixedBtns}>
 | 
	
		
			
				|  |  | +              <div class={styles.fullBtn} onClick={() => (popupData.open = true)}>
 | 
	
		
			
				|  |  | +                <img src={iconMenu} />
 | 
	
		
			
				|  |  | +                <span>知识点</span>
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  | +              {route.query.courseId && (
 | 
	
		
			
				|  |  | +                <>
 | 
	
		
			
				|  |  | +                  <div
 | 
	
		
			
				|  |  | +                    class={[styles.fullBtn, styles.point]}
 | 
	
		
			
				|  |  | +                    onClick={() => gotoRollCall('student_roll_call')}
 | 
	
		
			
				|  |  | +                  >
 | 
	
		
			
				|  |  | +                    <img src={iconDian} />
 | 
	
		
			
				|  |  | +                    <span>点名</span>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                  <div class={styles.fullBtn} onClick={() => gotoRollCall('sign_out')}>
 | 
	
		
			
				|  |  | +                    <img src={iconPoint} />
 | 
	
		
			
				|  |  | +                    <span>签退</span>
 | 
	
		
			
				|  |  | +                  </div>
 | 
	
		
			
				|  |  | +                </>
 | 
	
		
			
				|  |  | +              )}
 | 
	
		
			
				|  |  |              </div>
 | 
	
		
			
				|  |  |            )}
 | 
	
		
			
				|  |  |          </Transition>
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        <Tabs class={styles.tabsContent} animated lazyRender={false} v-model:active={data.active}>
 | 
	
		
			
				|  |  | -          {data.knowledgePointList.map((item: any) => {
 | 
	
		
			
				|  |  | -            return (
 | 
	
		
			
				|  |  | -              <Tab name={item.id}>
 | 
	
		
			
				|  |  | -                <Swipe
 | 
	
		
			
				|  |  | -                  style={{ height: '100vh' }}
 | 
	
		
			
				|  |  | -                  showIndicators={false}
 | 
	
		
			
				|  |  | -                  loop={false}
 | 
	
		
			
				|  |  | -                  initialSwipe={item.index}
 | 
	
		
			
				|  |  | -                  vertical
 | 
	
		
			
				|  |  | -                  lazyRender={false}
 | 
	
		
			
				|  |  | -                  onChange={(val: any) => {
 | 
	
		
			
				|  |  | -                    item.index = val
 | 
	
		
			
				|  |  | -                    popupData.active = `${item.id}-${item?.materialList?.[item.index]?.id}`
 | 
	
		
			
				|  |  | -                  }}
 | 
	
		
			
				|  |  | -                >
 | 
	
		
			
				|  |  | -                  {Array.isArray(item?.materialList) &&
 | 
	
		
			
				|  |  | -                    item.materialList.map((m: any) => {
 | 
	
		
			
				|  |  | -                      if (popupData.active === '') {
 | 
	
		
			
				|  |  | -                        popupData.active = `${item.id}-${m.id}`
 | 
	
		
			
				|  |  | -                        console.log('🚀 ~ popupData', popupData)
 | 
	
		
			
				|  |  | -                      }
 | 
	
		
			
				|  |  | -                      return (
 | 
	
		
			
				|  |  | -                        <SwipeItem>
 | 
	
		
			
				|  |  | -                          {m.type === 'VIDEO' ? (
 | 
	
		
			
				|  |  | -                            <div class={styles.videoItem}>
 | 
	
		
			
				|  |  | -                              <video class="player" controls>
 | 
	
		
			
				|  |  | -                                <source src={m.content} type="video/mp4" />
 | 
	
		
			
				|  |  | -                              </video>
 | 
	
		
			
				|  |  | -                            </div>
 | 
	
		
			
				|  |  | -                          ) : m.type === 'IMG' ? (
 | 
	
		
			
				|  |  | -                            <div class={styles.imgItem}>
 | 
	
		
			
				|  |  | -                              <img src={m.content} />
 | 
	
		
			
				|  |  | -                            </div>
 | 
	
		
			
				|  |  | -                          ) : (
 | 
	
		
			
				|  |  | -                            <div class={styles.songItem}>
 | 
	
		
			
				|  |  | -                              <MusicScore music={m} />
 | 
	
		
			
				|  |  | -                            </div>
 | 
	
		
			
				|  |  | -                          )}
 | 
	
		
			
				|  |  | -                        </SwipeItem>
 | 
	
		
			
				|  |  | -                      )
 | 
	
		
			
				|  |  | -                    })}
 | 
	
		
			
				|  |  | -                </Swipe>
 | 
	
		
			
				|  |  | -              </Tab>
 | 
	
		
			
				|  |  | -            )
 | 
	
		
			
				|  |  | -          })}
 | 
	
		
			
				|  |  | -        </Tabs>
 | 
	
		
			
				|  |  | -        <div class={styles.rightFixedBtns}>
 | 
	
		
			
				|  |  | -          <div class={styles.fullBtn} onClick={() => (popupData.open = true)}>
 | 
	
		
			
				|  |  | -            <img src={iconMenu} />
 | 
	
		
			
				|  |  | -            <span>知识点</span>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -          {route.query.courseId && (
 | 
	
		
			
				|  |  | -            <>
 | 
	
		
			
				|  |  | -              <div
 | 
	
		
			
				|  |  | -                class={[styles.fullBtn, styles.point]}
 | 
	
		
			
				|  |  | -                onClick={() => gotoRollCall('student_roll_call')}
 | 
	
		
			
				|  |  | -              >
 | 
	
		
			
				|  |  | -                <img src={iconDian} />
 | 
	
		
			
				|  |  | -                <span>点名</span>
 | 
	
		
			
				|  |  | +        <Transition name="left">
 | 
	
		
			
				|  |  | +          {activeData.model && (
 | 
	
		
			
				|  |  | +            <div class={styles.leftFixedBtns}>
 | 
	
		
			
				|  |  | +              <div class={[styles.fullBtn, styles.prePoint]} onClick={() => handlePreAndNext('up')}>
 | 
	
		
			
				|  |  | +                <span style={{ textAlign: 'center' }}>
 | 
	
		
			
				|  |  | +                  上一
 | 
	
		
			
				|  |  | +                  <br />
 | 
	
		
			
				|  |  | +                  知识点
 | 
	
		
			
				|  |  | +                </span>
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  | -              <div class={styles.fullBtn} onClick={() => gotoRollCall('sign_out')}>
 | 
	
		
			
				|  |  | -                <img src={iconPoint} />
 | 
	
		
			
				|  |  | -                <span>签退</span>
 | 
	
		
			
				|  |  | +              <div class={styles.fullBtn} onClick={() => handlePreAndNext('down')}>
 | 
	
		
			
				|  |  | +                <span style={{ textAlign: 'center' }}>
 | 
	
		
			
				|  |  | +                  下一
 | 
	
		
			
				|  |  | +                  <br />
 | 
	
		
			
				|  |  | +                  知识点
 | 
	
		
			
				|  |  | +                </span>
 | 
	
		
			
				|  |  |                </div>
 | 
	
		
			
				|  |  | -            </>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  |            )}
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | -        <div class={styles.leftFixedBtns}>
 | 
	
		
			
				|  |  | -          <div class={[styles.fullBtn , styles.prePoint]} >
 | 
	
		
			
				|  |  | -            <span style={{textAlign: 'center'}}>上一<br />知识点</span>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -          <div class={styles.fullBtn} >
 | 
	
		
			
				|  |  | -            <span style={{textAlign: 'center'}}>下一<br />知识点</span>
 | 
	
		
			
				|  |  | -          </div>
 | 
	
		
			
				|  |  | -        </div>
 | 
	
		
			
				|  |  | +        </Transition>
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        <Transition name="bottom">
 | 
	
		
			
				|  |  | +          {activeData.model && (
 | 
	
		
			
				|  |  | +            <div class={styles.bottomFixedContainer}>
 | 
	
		
			
				|  |  | +              <div class={styles.time}>
 | 
	
		
			
				|  |  | +                <span>03:12</span>
 | 
	
		
			
				|  |  | +                <span>10:12</span>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +              <Slider
 | 
	
		
			
				|  |  | +                buttonSize={16}
 | 
	
		
			
				|  |  | +                style={{ margin: '8px 0' }}
 | 
	
		
			
				|  |  | +                v-model:modelValue={activeData.currentTime}
 | 
	
		
			
				|  |  | +                min={0}
 | 
	
		
			
				|  |  | +                max={100}
 | 
	
		
			
				|  |  | +              />
 | 
	
		
			
				|  |  | +              <div class={styles.actions}>
 | 
	
		
			
				|  |  | +                <div>
 | 
	
		
			
				|  |  | +                  <Icon name="play-circle" />
 | 
	
		
			
				|  |  | +                  <Icon name="pause-circle" />
 | 
	
		
			
				|  |  | +                </div>
 | 
	
		
			
				|  |  | +                <div>长笛的呼吸练习</div>
 | 
	
		
			
				|  |  | +              </div>
 | 
	
		
			
				|  |  | +            </div>
 | 
	
		
			
				|  |  | +          )}
 | 
	
		
			
				|  |  | +        </Transition>
 | 
	
		
			
				|  |  |          <Popup
 | 
	
		
			
				|  |  |            class={styles.popup}
 | 
	
		
			
				|  |  |            overlayClass={styles.overlayClass}
 | 
	
		
			
				|  |  | -          position="left"
 | 
	
		
			
				|  |  | +          position="right"
 | 
	
		
			
				|  |  | +          round
 | 
	
		
			
				|  |  |            v-model:show={popupData.open}
 | 
	
		
			
				|  |  |          >
 | 
	
		
			
				|  |  |            <Points
 | 
	
		
			
				|  |  |              data={data.knowledgePointList}
 | 
	
		
			
				|  |  | -            active={popupData.active}
 | 
	
		
			
				|  |  | +            tabActive={popupData.tabActive}
 | 
	
		
			
				|  |  | +            itemActive={popupData.itemActive}
 | 
	
		
			
				|  |  |              onHandleSelect={(res: any) => {
 | 
	
		
			
				|  |  | -              data.active = res.id
 | 
	
		
			
				|  |  | -              const knowledge = data.knowledgePointList.find((n: any) => n.id === res.id)
 | 
	
		
			
				|  |  | -              // console.log(res,knowledge)
 | 
	
		
			
				|  |  | -              knowledge && (knowledge.index = res.index)
 | 
	
		
			
				|  |  | -              popupData.active = res.active
 | 
	
		
			
				|  |  | +              // console.log(res)
 | 
	
		
			
				|  |  | +              popupData.tabActive = res.tabActive
 | 
	
		
			
				|  |  | +              popupData.itemActive = res.itemActive
 | 
	
		
			
				|  |  |                popupData.open = false
 | 
	
		
			
				|  |  | +              toggleMaterial()
 | 
	
		
			
				|  |  |              }}
 | 
	
		
			
				|  |  |            />
 | 
	
		
			
				|  |  |          </Popup>
 |