import { Button, Icon, Popup, Swipe, SwipeItem, Tab, Tabs } from 'vant' import { defineComponent, onMounted, reactive, nextTick, onUnmounted, ref, watch, Transition } from 'vue' import iconBack from './image/back.svg' import styles from './index.module.less' import Plyr from 'plyr' 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 OHeader from '@/components/o-header' import MusicScore from './component/musicScore' import iconMenu from './image/icon-menu.svg' import Points from './component/points' export default defineComponent({ name: 'CoursewarePlay', setup() { const handleInit = () => { postMessage({ api: 'setRequestedOrientation', content: { orientation: 0 } }) postMessage({ api: 'setBarStatus', content: { status: 0 } }) postMessage({ api: 'setStatusBarVisibility', content: { isVisibility: 0 } }) // window.addEventListener('message', (res: any) => { // // console.log(res) // if (res?.data?.api) { // const { api } = res.data // if (api === 'touchstart') { // isTouch.value = true // console.log('🚀 ~ 父页面touchstart') // } // if (api === 'touchend') { // isTouch.value = false // console.log('🚀 ~ 父页面touchend') // } // } // }) } const route = useRoute() const data = reactive({ detail: null, active: '', knowledgePointList: [] as any, showHead: true, players: [] as any }) const getDetail = async () => { try { const res: any = await request.get( state.platformApi + `/lessonCoursewareDetail/detail/${route.query.id}` ) if (Array.isArray(res?.data)) { data.detail = res.data } if (Array.isArray(res?.data?.knowledgePointList)) { data.knowledgePointList = res.data.knowledgePointList.map((n: any) => { n.index = 0 return n }) } console.log('数据加载完成') } catch (error) {} nextTick(() => { console.log('开始加载视频') videoInit() }) } const videoInit = () => { // console.log(document.querySelectorAll('.player')) data.players = Plyr.setup('.player', { debug: false, ratio: '16:9', controls: ['play-large', 'play', 'progress', 'current-time', 'mute', 'volume', 'captions'] }) data.players.forEach((p: Plyr) => { console.log(p) p.on('play', () => { console.log('开始播放了') data.showHead = false }) p.on('pause', () => { console.log('暂停了') data.showHead = true }) }) console.log('🚀 ~ player', data.players) } onMounted(() => { handleInit() getDetail() }) // 返回 const goback = () => { history.go(-1) } // 所有的切换 const handleChange = () => { // console.log('切换了') const iframes = document.querySelectorAll('.musicIframe') Array.from(iframes).map((f: any) => { f.contentWindow.postMessage({ api: 'setPlayState' }, '*') }) data.players.forEach((p: any) => { p.stop() }) } onUnmounted(() => { postMessage({ api: 'setRequestedOrientation', content: { orientation: 1 } }) postMessage({ api: 'setBarStatus', content: { status: 1 } }) postMessage({ api: 'setStatusBarVisibility', content: { isVisibility: 1 } }) }) const popupData = reactive({ open: false, active: '' }) // 监听切换 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 } ) return () => (
{data.showHead && (
goback()}> 返回
{ 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 }) } // 'nav-right': () =>
}}
)}
{data.knowledgePointList.map((item: any) => { return ( { 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 ( {m.type === 'VIDEO' ? (
) : m.type === 'IMG' ? (
) : (
)}
) })}
) })}
(popupData.open = true)}> 列表
{ 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 popupData.open = false }} />
) } })