|
@@ -62,18 +62,17 @@ import Chapter from './model/chapter';
|
|
|
import { useRouter } from 'vue-router';
|
|
|
import { useUserStore } from '@/store/modules/users';
|
|
|
|
|
|
-import iconBeatIcon from './new-image/icon-beatIcon.png';
|
|
|
-import iconChange from './new-image/icon-change.png';
|
|
|
-import iconDown from './new-image/icon-down.png';
|
|
|
-import iconMenu from './new-image/icon-menu.png';
|
|
|
+// import iconBeatIcon from './new-image/icon-beatIcon.png';
|
|
|
+// import iconChange from './new-image/icon-change.png';
|
|
|
+// import iconDown from './new-image/icon-down.png';
|
|
|
+// import iconMenu from './new-image/icon-menu.png';
|
|
|
import iconNote from './new-image/icon-note.png';
|
|
|
-import iconOverClass from './new-image/icon-overclass.png';
|
|
|
-import iconSetTime from './new-image/icon-setTime.png';
|
|
|
-import iconToneIcon from './new-image/icon-toneIcon.png';
|
|
|
-import iconUp from './new-image/icon-up.png';
|
|
|
+// import iconOverClass from './new-image/icon-overclass.png';
|
|
|
+// import iconSetTime from './new-image/icon-setTime.png';
|
|
|
+// import iconToneIcon from './new-image/icon-toneIcon.png';
|
|
|
+// import iconUp from './new-image/icon-up.png';
|
|
|
import iconWhite from './new-image/icon-white.png';
|
|
|
-import iconWork from './new-image/icon-work.png';
|
|
|
-import dayjs from 'dayjs';
|
|
|
+// import iconWork from './new-image/icon-work.png';
|
|
|
|
|
|
import rightIconEnd from './image/right_icon1.png';
|
|
|
import rightIconArrange from './image/right_icon2.png';
|
|
@@ -83,11 +82,13 @@ import rightIconMetronome from './image/right_icon5.png';
|
|
|
import rightIconTuner from './image/right_icon6.png';
|
|
|
import rightIconTimer from './image/right_icon7.png';
|
|
|
import rightIconPackUp from './image/right_icon8.png';
|
|
|
+import rightIconMusic from './image/right_icon9.png';
|
|
|
import bottomIconSwitch from './image/bottom_icon1.png';
|
|
|
import bottomIconResource from './image/bottom_icon2.png';
|
|
|
import bottomIconPre from './image/bottom_icon3.png';
|
|
|
import bottomIconNext from './image/bottom_icon4.png';
|
|
|
import rightHideIcon from './image/right_hide_icon.png';
|
|
|
+import SelectResources from '../prepare-lessons/model/select-resources';
|
|
|
|
|
|
export type ToolType = 'init' | 'pen' | 'whiteboard';
|
|
|
export type ToolItem = {
|
|
@@ -187,6 +188,7 @@ export default defineComponent({
|
|
|
removeTitle: '',
|
|
|
removeContent: '',
|
|
|
|
|
|
+ selectResourceStatus: false,
|
|
|
videoState: 'init' as 'init' | 'play',
|
|
|
videoItemRef: null as any,
|
|
|
animationState: 'start' as 'start' | 'end'
|
|
@@ -244,8 +246,8 @@ export default defineComponent({
|
|
|
};
|
|
|
});
|
|
|
setTimeout(() => {
|
|
|
- data.animationState = 'end'
|
|
|
- }, 500)
|
|
|
+ data.animationState = 'end';
|
|
|
+ }, 500);
|
|
|
} catch {
|
|
|
//
|
|
|
}
|
|
@@ -314,23 +316,23 @@ export default defineComponent({
|
|
|
getDetail();
|
|
|
getLessonCoursewareDetail();
|
|
|
if (data.type === 'preview') {
|
|
|
- rightList.splice(1,1)
|
|
|
+ rightList.splice(1, 1);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- const onFullScreen = () => {
|
|
|
- if (data.type === 'preview') {
|
|
|
- const el: any = document.querySelector('#app');
|
|
|
-
|
|
|
- if (el.mozRequestFullScreen) {
|
|
|
- el.mozRequestFullScreen();
|
|
|
- } else if (el.webkitRequestFullscreen) {
|
|
|
- el.webkitRequestFullscreen();
|
|
|
- } else if (el.requestFullScreen) {
|
|
|
- el.requestFullscreen();
|
|
|
- }
|
|
|
- }
|
|
|
- };
|
|
|
+ // const onFullScreen = () => {
|
|
|
+ // if (data.type === 'preview') {
|
|
|
+ // const el: any = document.querySelector('#app');
|
|
|
+
|
|
|
+ // if (el.mozRequestFullScreen) {
|
|
|
+ // el.mozRequestFullScreen();
|
|
|
+ // } else if (el.webkitRequestFullscreen) {
|
|
|
+ // el.webkitRequestFullscreen();
|
|
|
+ // } else if (el.requestFullScreen) {
|
|
|
+ // el.requestFullscreen();
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // };
|
|
|
|
|
|
const popupData = reactive({
|
|
|
open: false,
|
|
@@ -388,25 +390,25 @@ export default defineComponent({
|
|
|
}
|
|
|
};
|
|
|
|
|
|
- const activeName = computed(() => {
|
|
|
- let name = '';
|
|
|
- // data.knowledgePointList.forEach((item: any, index: number) => {
|
|
|
- // if (popupData.activeIndex === index) {
|
|
|
- // name = item.title;
|
|
|
- // }
|
|
|
- // });
|
|
|
- popupData.chapterDetails.forEach((chapter: any) => {
|
|
|
- if (chapter.id === data.lessonCoursewareDetailId) {
|
|
|
- name = chapter.name;
|
|
|
- chapter.knowledgeList?.forEach((know: any) => {
|
|
|
- if (know.id === data.detailId) {
|
|
|
- name += ' - ' + know.name;
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
- });
|
|
|
- return name;
|
|
|
- });
|
|
|
+ // const activeName = computed(() => {
|
|
|
+ // let name = '';
|
|
|
+ // // data.knowledgePointList.forEach((item: any, index: number) => {
|
|
|
+ // // if (popupData.activeIndex === index) {
|
|
|
+ // // name = item.title;
|
|
|
+ // // }
|
|
|
+ // // });
|
|
|
+ // popupData.chapterDetails.forEach((chapter: any) => {
|
|
|
+ // if (chapter.id === data.lessonCoursewareDetailId) {
|
|
|
+ // name = chapter.name;
|
|
|
+ // chapter.knowledgeList?.forEach((know: any) => {
|
|
|
+ // if (know.id === data.detailId) {
|
|
|
+ // name += ' - ' + know.name;
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // return name;
|
|
|
+ // });
|
|
|
|
|
|
/**停止所有的播放 */
|
|
|
const handleStop = () => {
|
|
@@ -494,16 +496,16 @@ export default defineComponent({
|
|
|
|
|
|
// ppt iframe 点击事件
|
|
|
// const iframeClick = () => {
|
|
|
- // if(document.all) {
|
|
|
- // document.getElementById("iframe-ppt")?.attachEvent("click", () => {
|
|
|
+ // if(document.all) {
|
|
|
+ // document.getElementById("iframe-ppt")?.attachEvent("click", () => {
|
|
|
// activeData.model = !activeData.model
|
|
|
// });
|
|
|
- // } else {
|
|
|
- // document.getElementById("iframe-ppt")?.contentWindow?.postMessage({
|
|
|
+ // } else {
|
|
|
+ // document.getElementById("iframe-ppt")?.contentWindow?.postMessage({
|
|
|
// api: 'onAttendToggleMenu'
|
|
|
// }, '*');
|
|
|
- // }
|
|
|
- // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
|
|
|
// 切换播放
|
|
|
// const togglePlay = (m: any, isPlay: boolean) => {
|
|
@@ -579,8 +581,8 @@ export default defineComponent({
|
|
|
const handleSwipeChange = (index: number) => {
|
|
|
// 如果是当前正在播放 或者是视频最后一个
|
|
|
if (popupData.activeIndex == index) return;
|
|
|
- data.animationState = 'start'
|
|
|
- data.videoState = 'init'
|
|
|
+ data.animationState = 'start';
|
|
|
+ data.videoState = 'init';
|
|
|
handleStop();
|
|
|
clearTimeout(acitveTimer.value);
|
|
|
activeData.model = true;
|
|
@@ -590,7 +592,7 @@ export default defineComponent({
|
|
|
acitveTimer.value = setTimeout(
|
|
|
() => {
|
|
|
const item = data.itemList[index];
|
|
|
-
|
|
|
+
|
|
|
if (item) {
|
|
|
if (item.type == 'MUSIC') {
|
|
|
activeData.model = true;
|
|
@@ -615,7 +617,7 @@ export default defineComponent({
|
|
|
item.error = false;
|
|
|
// item.videoEle?.onPlay();
|
|
|
}
|
|
|
- data.animationState = 'end'
|
|
|
+ data.animationState = 'end';
|
|
|
});
|
|
|
}
|
|
|
if (item.type === 'PPT') {
|
|
@@ -858,28 +860,28 @@ export default defineComponent({
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- const toggleListenerKeyUp = (type: string) => {
|
|
|
- if (type === 'remove') {
|
|
|
- document.body.removeEventListener('keyup', () => {
|
|
|
- listenerKeyUpState.value = false
|
|
|
- })
|
|
|
- } else {
|
|
|
- // 监听页面键盘事件 - 上下切换
|
|
|
- document.body.addEventListener('keyup', (e: KeyboardEvent) => {
|
|
|
- // console.log(e, 'e');
|
|
|
- if (e.code === 'ArrowLeft') {
|
|
|
- // if (popupData.activeIndex === 0) return;
|
|
|
- setModalOpen();
|
|
|
- handlePreAndNext('up');
|
|
|
- } else if (e.code === 'ArrowRight') {
|
|
|
- // if (popupData.activeIndex === data.itemList.length - 1) return;
|
|
|
- setModalOpen();
|
|
|
- handlePreAndNext('down');
|
|
|
- }
|
|
|
- });
|
|
|
- listenerKeyUpState.value = true
|
|
|
- }
|
|
|
- }
|
|
|
+ // const toggleListenerKeyUp = (type: string) => {
|
|
|
+ // if (type === 'remove') {
|
|
|
+ // document.body.removeEventListener('keyup', () => {
|
|
|
+ // listenerKeyUpState.value = false;
|
|
|
+ // });
|
|
|
+ // } else {
|
|
|
+ // // 监听页面键盘事件 - 上下切换
|
|
|
+ // document.body.addEventListener('keyup', (e: KeyboardEvent) => {
|
|
|
+ // // console.log(e, 'e');
|
|
|
+ // if (e.code === 'ArrowLeft') {
|
|
|
+ // // if (popupData.activeIndex === 0) return;
|
|
|
+ // setModalOpen();
|
|
|
+ // handlePreAndNext('up');
|
|
|
+ // } else if (e.code === 'ArrowRight') {
|
|
|
+ // // if (popupData.activeIndex === data.itemList.length - 1) return;
|
|
|
+ // setModalOpen();
|
|
|
+ // handlePreAndNext('down');
|
|
|
+ // }
|
|
|
+ // });
|
|
|
+ // listenerKeyUpState.value = true;
|
|
|
+ // }
|
|
|
+ // };
|
|
|
|
|
|
// 监听切换到ppt课件时,手动移除键盘监听器
|
|
|
// watch(() => popupData.activeIndex, () => {
|
|
@@ -911,20 +913,21 @@ export default defineComponent({
|
|
|
|
|
|
/** 打开教学工具 */
|
|
|
const openStudyTool = (item: ToolItem) => {
|
|
|
- const activeItem = data.itemList[popupData.activeIndex];
|
|
|
- // 暂停视频和曲谱的播放
|
|
|
- if (activeItem.type === 'VIDEO' && activeItem.videoEle) {
|
|
|
- activeItem.videoEle?.pause();
|
|
|
- }
|
|
|
- if (activeItem.type === 'SONG' && activeItem.audioEle) {
|
|
|
- activeItem.audioEle?.stop();
|
|
|
- }
|
|
|
- if (activeItem.type === 'MUSIC') {
|
|
|
- activeItem.iframeRef?.contentWindow?.postMessage(
|
|
|
- { api: 'setPlayState' },
|
|
|
- '*'
|
|
|
- );
|
|
|
- }
|
|
|
+ // const activeItem = data.itemList[popupData.activeIndex];
|
|
|
+ // // 暂停视频和曲谱的播放
|
|
|
+ // if (activeItem.type === 'VIDEO' && activeItem.videoEle) {
|
|
|
+ // activeItem.videoEle?.pause();
|
|
|
+ // }
|
|
|
+ // if (activeItem.type === 'SONG' && activeItem.audioEle) {
|
|
|
+ // activeItem.audioEle?.stop();
|
|
|
+ // }
|
|
|
+ // if (activeItem.type === 'MUSIC') {
|
|
|
+ // activeItem.iframeRef?.contentWindow?.postMessage(
|
|
|
+ // { api: 'setPlayState' },
|
|
|
+ // '*'
|
|
|
+ // );
|
|
|
+ // }
|
|
|
+ handleStop();
|
|
|
clearModel();
|
|
|
popupData.toolOpen = false;
|
|
|
studyData.type = item.type;
|
|
@@ -957,12 +960,6 @@ export default defineComponent({
|
|
|
if (val == 'toneIcon') {
|
|
|
showModalTone.value = true;
|
|
|
}
|
|
|
- // if (val == 'iconNote2') {
|
|
|
- // if (NPopoverRef.value) {
|
|
|
- // NPopoverRef.value.setShow(false);
|
|
|
- // }
|
|
|
- // eventGlobal.emit('teacher-guideInfo-attend-class', 'attend-class');
|
|
|
- // }
|
|
|
};
|
|
|
|
|
|
// 是否允许上一页
|
|
@@ -974,7 +971,6 @@ export default defineComponent({
|
|
|
* 4,判断当前章节上面还没有其它章节;
|
|
|
* 5,判断上面章节里面课程是否有资源;
|
|
|
*/
|
|
|
-
|
|
|
if (popupData.activeIndex > 0) {
|
|
|
return true;
|
|
|
}
|
|
@@ -1099,12 +1095,12 @@ export default defineComponent({
|
|
|
return false;
|
|
|
});
|
|
|
const activeVideoItem = computed(() => {
|
|
|
- const item = data.itemList[popupData.activeIndex]
|
|
|
+ const item = data.itemList[popupData.activeIndex];
|
|
|
if (item && item.type && item.type.toLocaleUpperCase() === 'VIDEO') {
|
|
|
- return item
|
|
|
+ return item;
|
|
|
}
|
|
|
- return {}
|
|
|
- })
|
|
|
+ return {};
|
|
|
+ });
|
|
|
|
|
|
// 右侧菜单栏
|
|
|
const rightList = reactive([
|
|
@@ -1112,43 +1108,48 @@ export default defineComponent({
|
|
|
name: '结束课程',
|
|
|
name2: '结束预览',
|
|
|
icon: rightIconEnd,
|
|
|
- id: 1,
|
|
|
+ id: 1
|
|
|
},
|
|
|
{
|
|
|
name: '布置作业',
|
|
|
icon: rightIconArrange,
|
|
|
- id: 2,
|
|
|
+ id: 2
|
|
|
+ },
|
|
|
+ {
|
|
|
+ name: '曲目资源',
|
|
|
+ icon: rightIconMusic,
|
|
|
+ id: 9
|
|
|
},
|
|
|
{
|
|
|
name: '批注',
|
|
|
icon: rightIconPostil,
|
|
|
- id: 3,
|
|
|
+ id: 3
|
|
|
},
|
|
|
{
|
|
|
name: '白板',
|
|
|
icon: rightIconWhiteboard,
|
|
|
- id: 4,
|
|
|
+ id: 4
|
|
|
},
|
|
|
{
|
|
|
name: '节拍器',
|
|
|
icon: rightIconMetronome,
|
|
|
- id: 5,
|
|
|
+ id: 5
|
|
|
},
|
|
|
{
|
|
|
name: '调音器',
|
|
|
icon: rightIconTuner,
|
|
|
- id: 6,
|
|
|
+ id: 6
|
|
|
},
|
|
|
{
|
|
|
name: '计时器',
|
|
|
icon: rightIconTimer,
|
|
|
- id: 7,
|
|
|
+ id: 7
|
|
|
},
|
|
|
{
|
|
|
name: '收起',
|
|
|
icon: rightIconPackUp,
|
|
|
- id: 8,
|
|
|
- },
|
|
|
+ id: 8
|
|
|
+ }
|
|
|
]);
|
|
|
|
|
|
// 底部菜单栏
|
|
@@ -1156,26 +1157,25 @@ export default defineComponent({
|
|
|
{
|
|
|
name: '切换章节',
|
|
|
icon: bottomIconSwitch,
|
|
|
- id: 1,
|
|
|
+ id: 1
|
|
|
},
|
|
|
{
|
|
|
name: '资源列表',
|
|
|
icon: bottomIconResource,
|
|
|
- id: 2,
|
|
|
+ id: 2
|
|
|
},
|
|
|
{
|
|
|
name: '上一张',
|
|
|
icon: bottomIconPre,
|
|
|
- id: 3,
|
|
|
+ id: 3
|
|
|
},
|
|
|
{
|
|
|
name: '下一张',
|
|
|
icon: bottomIconNext,
|
|
|
- id: 4,
|
|
|
+ id: 4
|
|
|
}
|
|
|
]);
|
|
|
const rightColumnShow = ref(true);
|
|
|
-
|
|
|
|
|
|
// 右边栏操作
|
|
|
const operateRightBtn = async (id: number) => {
|
|
@@ -1202,50 +1202,54 @@ export default defineComponent({
|
|
|
rows: 99
|
|
|
});
|
|
|
if (res.data.rows && res.data.rows.length) {
|
|
|
- data.modalAttendMessage =
|
|
|
- '本节课已设置课后作业,是否布置?';
|
|
|
+ data.modalAttendMessage = '本节课已设置课后作业,是否布置?';
|
|
|
}
|
|
|
- data.modelAttendStatus = true;
|
|
|
+ data.modelAttendStatus = true;
|
|
|
break;
|
|
|
case 3:
|
|
|
openStudyTool({
|
|
|
type: 'pen',
|
|
|
icon: iconNote,
|
|
|
name: '批注'
|
|
|
- })
|
|
|
+ });
|
|
|
break;
|
|
|
case 4:
|
|
|
openStudyTool({
|
|
|
type: 'whiteboard',
|
|
|
icon: iconWhite,
|
|
|
name: '白板'
|
|
|
- })
|
|
|
+ });
|
|
|
break;
|
|
|
case 5:
|
|
|
- startShowModal('beatIcon')
|
|
|
+ startShowModal('beatIcon');
|
|
|
break;
|
|
|
case 6:
|
|
|
- startShowModal('toneIcon')
|
|
|
+ startShowModal('toneIcon');
|
|
|
break;
|
|
|
case 7:
|
|
|
- startShowModal('setTimeIcon')
|
|
|
+ startShowModal('setTimeIcon');
|
|
|
break;
|
|
|
case 8:
|
|
|
- rightColumnShow.value = false
|
|
|
- break;
|
|
|
+ rightColumnShow.value = false;
|
|
|
+ break;
|
|
|
+ case 9:
|
|
|
+ // 选择曲目时需要暂停所有播放
|
|
|
+ handleStop();
|
|
|
+ data.selectResourceStatus = true;
|
|
|
+ break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- }
|
|
|
+ };
|
|
|
|
|
|
// 底部悬浮按钮操作
|
|
|
const operateBottomBtn = (id: number) => {
|
|
|
switch (id) {
|
|
|
case 1:
|
|
|
- popupData.chapterOpen = true
|
|
|
+ popupData.chapterOpen = true;
|
|
|
break;
|
|
|
case 2:
|
|
|
- popupData.open = true
|
|
|
+ popupData.open = true;
|
|
|
break;
|
|
|
case 3:
|
|
|
if (!isUpArrow.value) return;
|
|
@@ -1254,15 +1258,14 @@ export default defineComponent({
|
|
|
case 4:
|
|
|
if (!isDownArrow.value) return;
|
|
|
handlePreAndNext('down');
|
|
|
- break;
|
|
|
+ break;
|
|
|
default:
|
|
|
break;
|
|
|
}
|
|
|
- }
|
|
|
+ };
|
|
|
|
|
|
return () => (
|
|
|
<div id="playContent" class={[styles.playContent, 'wrap']}>
|
|
|
-
|
|
|
<div
|
|
|
onClick={() => {
|
|
|
clearTimeout(activeData.timer);
|
|
@@ -1290,23 +1293,21 @@ export default defineComponent({
|
|
|
}
|
|
|
: { opacity: 0, zIndex: -1 }
|
|
|
}
|
|
|
- class={styles.itemDiv}
|
|
|
- >
|
|
|
+ class={styles.itemDiv}>
|
|
|
<VideoPlay
|
|
|
- ref={(el: any) => data.videoItemRef = el}
|
|
|
+ ref={(el: any) => (data.videoItemRef = el)}
|
|
|
item={activeVideoItem.value}
|
|
|
showModel={activeData.model}
|
|
|
onClose={setModelOpen}
|
|
|
-
|
|
|
onCanplay={() => {
|
|
|
- data.videoState = 'play'
|
|
|
+ data.videoState = 'play';
|
|
|
}}
|
|
|
onPause={() => {
|
|
|
- clearTimeout(activeData.timer)
|
|
|
- activeData.model = true
|
|
|
+ clearTimeout(activeData.timer);
|
|
|
+ activeData.model = true;
|
|
|
}}
|
|
|
onEnded={() => {
|
|
|
- const _index = popupData.activeIndex + 1
|
|
|
+ const _index = popupData.activeIndex + 1;
|
|
|
if (_index < data.itemList.length) {
|
|
|
handleSwipeChange(_index);
|
|
|
}
|
|
@@ -1364,9 +1365,12 @@ export default defineComponent({
|
|
|
}}>
|
|
|
{m.type === 'VIDEO' ? (
|
|
|
<>
|
|
|
- <img src={m.coverImg} onLoad={() => {
|
|
|
- m.isprepare = true;
|
|
|
- }} />
|
|
|
+ <img
|
|
|
+ src={m.coverImg}
|
|
|
+ onLoad={() => {
|
|
|
+ m.isprepare = true;
|
|
|
+ }}
|
|
|
+ />
|
|
|
{/* <VideoPlay
|
|
|
ref={(v: any) => (data.videoRefs[mIndex] = v)}
|
|
|
item={m}
|
|
@@ -1394,12 +1398,12 @@ export default defineComponent({
|
|
|
}}
|
|
|
/> */}
|
|
|
<Transition name="van-fade">
|
|
|
- { (
|
|
|
+ {
|
|
|
<div class={styles.loadWrap}>
|
|
|
<Vue3Lottie
|
|
|
animationData={playLoadData}></Vue3Lottie>
|
|
|
</div>
|
|
|
- )}
|
|
|
+ }
|
|
|
</Transition>
|
|
|
</>
|
|
|
) : m.type === 'IMG' ? (
|
|
@@ -1432,13 +1436,19 @@ export default defineComponent({
|
|
|
}
|
|
|
}}
|
|
|
/>
|
|
|
- )
|
|
|
- // : m.type === 'PPT' ? <div class={styles.iframePpt}>
|
|
|
+ ) : // : m.type === 'PPT' ? <div class={styles.iframePpt}>
|
|
|
// <div class={styles.pptBox}></div>
|
|
|
// <iframe src={`https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(m.content)}`} width='100%' height='100%' frameborder='1'></iframe>
|
|
|
// </div>
|
|
|
- : m.type === 'PPT' ? <iframe src={`https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(m.content)}`} width='100%' height='100%' frameborder='1'></iframe>
|
|
|
- : (
|
|
|
+ m.type === 'PPT' ? (
|
|
|
+ <iframe
|
|
|
+ src={`https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(
|
|
|
+ m.content
|
|
|
+ )}`}
|
|
|
+ width="100%"
|
|
|
+ height="100%"
|
|
|
+ frameborder="1"></iframe>
|
|
|
+ ) : (
|
|
|
<MusicScore
|
|
|
activeModel={activeData.model}
|
|
|
activeStatus={popupData.activeIndex === mIndex}
|
|
@@ -1459,182 +1469,59 @@ export default defineComponent({
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
- {/* 头部样式 */}
|
|
|
- {/* <div
|
|
|
- style={{ transform: activeData.model ? '' : 'translateY(-100%)' }}
|
|
|
- class={styles.headerContainer}>
|
|
|
- <div class={styles.menu}>{activeName.value}</div>
|
|
|
- </div> */}
|
|
|
- {/* 布置作业按钮 */}
|
|
|
-
|
|
|
- {/* <div
|
|
|
- onClick={(e: any) => {
|
|
|
- e.stopPropagation();
|
|
|
- if (activeData.timer){
|
|
|
- setModelOpen();
|
|
|
- }
|
|
|
- }}
|
|
|
+ {/* 右边操作栏 */}
|
|
|
+ <div
|
|
|
class={[
|
|
|
- styles.switchDisplaySection,
|
|
|
- activeData.model ? '' : styles.sectionAnimate
|
|
|
+ styles.rightColumn,
|
|
|
+ !rightColumnShow.value ? styles.rightColumnHide : '',
|
|
|
+ studyData.type !== 'init' &&
|
|
|
+ (studyData.penShow || studyData.whiteboardShow)
|
|
|
+ ? styles.rightColumnZ
|
|
|
+ : ''
|
|
|
]}>
|
|
|
- <NSpace class={styles.switchSpace}>
|
|
|
- <div
|
|
|
- class={styles.btnItem}
|
|
|
- onClick={async () => {
|
|
|
- if (data.type === 'preview') {
|
|
|
- handleStop();
|
|
|
- data.removeVisiable = true;
|
|
|
- data.removeTitle = '结束预览';
|
|
|
- data.removeContent = '请确认是否结束预览?';
|
|
|
- } else {
|
|
|
- data.removeVisiable = true;
|
|
|
- data.removeTitle = '结束课程';
|
|
|
- data.removeContent = '请确认是否结束课程?';
|
|
|
- }
|
|
|
- }}>
|
|
|
- <img src={iconOverClass} />
|
|
|
- <p>{data.type !== 'preview' ? '结束课程' : '结束预览'}</p>
|
|
|
- </div>
|
|
|
- {data.type !== 'preview' && (
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles.btnItem,
|
|
|
- data.preStudentNum <= 0 ? styles.btnsDisabled : ''
|
|
|
- ]}
|
|
|
- onClick={async () => {
|
|
|
- // 学生人数必须大于0,才可以布置作业
|
|
|
- if (data.preStudentNum <= 0) return;
|
|
|
- const res = await lessonPreTrainingPage({
|
|
|
- coursewareKnowledgeDetailId: data.detailId,
|
|
|
- subjectId: data.subjectId,
|
|
|
- page: 1,
|
|
|
- rows: 99
|
|
|
- });
|
|
|
- if (res.data.rows && res.data.rows.length) {
|
|
|
- data.modalAttendMessage =
|
|
|
- '本节课已设置课后作业,是否布置?';
|
|
|
- }
|
|
|
- data.modelAttendStatus = true;
|
|
|
- }}>
|
|
|
- <img src={iconWork} />
|
|
|
- <p>布置作业</p>
|
|
|
- </div>
|
|
|
- )}
|
|
|
-
|
|
|
- <div
|
|
|
- class={styles.btnItem}
|
|
|
- onClick={() =>
|
|
|
- openStudyTool({
|
|
|
- type: 'pen',
|
|
|
- icon: iconNote,
|
|
|
- name: '批注'
|
|
|
- })
|
|
|
- }>
|
|
|
- <img src={iconNote} />
|
|
|
- <p>批注</p>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class={styles.btnItem}
|
|
|
- onClick={() =>
|
|
|
- openStudyTool({
|
|
|
- type: 'whiteboard',
|
|
|
- icon: iconWhite,
|
|
|
- name: '白板'
|
|
|
- })
|
|
|
- }>
|
|
|
- <img src={iconWhite} />
|
|
|
- <p>白板</p>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class={styles.btnItem}
|
|
|
- onClick={() => startShowModal('beatIcon')}>
|
|
|
- <img src={iconToneIcon} />
|
|
|
- <p>节拍器</p>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class={styles.btnItem}
|
|
|
- onClick={() => startShowModal('toneIcon')}>
|
|
|
- <img src={iconSetTime} />
|
|
|
- <p>调音器</p>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class={styles.btnItem}
|
|
|
- onClick={() => startShowModal('setTimeIcon')}>
|
|
|
- <img src={iconBeatIcon} />
|
|
|
- <p>计时器</p>
|
|
|
- </div>
|
|
|
- </NSpace>
|
|
|
- <NSpace class={styles.switchSpace}>
|
|
|
- <div
|
|
|
- class={styles.btnItem}
|
|
|
- onClick={() => (popupData.chapterOpen = true)}>
|
|
|
- <img src={iconChange} />
|
|
|
- <p>切换章节</p>
|
|
|
- </div>
|
|
|
- <div class={styles.btnItem} onClick={() => (popupData.open = true)}>
|
|
|
- <img src={iconMenu} />
|
|
|
- <p>资源列表</p>
|
|
|
- </div>
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles.btnItem,
|
|
|
- !isUpArrow.value ? styles.btnsDisabled : ''
|
|
|
- ]}
|
|
|
- onClick={() => {
|
|
|
- if (!isUpArrow.value) return;
|
|
|
- handlePreAndNext('up');
|
|
|
- }}>
|
|
|
- <img src={iconUp} />
|
|
|
- <p>上一个</p>
|
|
|
- </div>
|
|
|
+ {rightList.map((item: any, index: number) => (
|
|
|
<div
|
|
|
class={[
|
|
|
- styles.btnItem,
|
|
|
- !isDownArrow.value ? styles.btnsDisabled : ''
|
|
|
+ styles.rightItem,
|
|
|
+ item.id === 2 && data.preStudentNum <= 0
|
|
|
+ ? styles.itemDisabled
|
|
|
+ : ''
|
|
|
]}
|
|
|
- onClick={() => {
|
|
|
- if (!isDownArrow.value) return;
|
|
|
- handlePreAndNext('down');
|
|
|
- }}>
|
|
|
- <img src={iconDown} />
|
|
|
- <p>下一个</p>
|
|
|
- </div>
|
|
|
- </NSpace>
|
|
|
- </div> */}
|
|
|
-
|
|
|
- {/* 右边操作栏 */}
|
|
|
- <div class={[styles.rightColumn, !rightColumnShow.value ? styles.rightColumnHide : '', studyData.type !== 'init' && (studyData.penShow || studyData.whiteboardShow) ? styles.rightColumnZ : '' ]}>
|
|
|
- {rightList.map((item: any, index: number) => (
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles.rightItem,
|
|
|
- (item.id === 2 && data.preStudentNum <= 0) ? styles.itemDisabled : ''
|
|
|
- ]}
|
|
|
- onClick={() => operateRightBtn(item.id)}>
|
|
|
- <img src={item.icon} />
|
|
|
- <div class={styles.rightTips}>{index === 0 && data.type === 'preview' ? item.name2 : item.name}</div>
|
|
|
+ onClick={() => operateRightBtn(item.id)}>
|
|
|
+ <img src={item.icon} />
|
|
|
+ <div class={styles.rightTips}>
|
|
|
+ {index === 0 && data.type === 'preview'
|
|
|
+ ? item.name2
|
|
|
+ : item.name}
|
|
|
</div>
|
|
|
- ))}
|
|
|
- </div>
|
|
|
- {
|
|
|
- !rightColumnShow.value && <img
|
|
|
- class={[styles.rightHideIcon, !rightColumnShow.value ? styles.rightIconShow : '']}
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ {!rightColumnShow.value && (
|
|
|
+ <img
|
|
|
+ class={[
|
|
|
+ styles.rightHideIcon,
|
|
|
+ !rightColumnShow.value ? styles.rightIconShow : ''
|
|
|
+ ]}
|
|
|
src={rightHideIcon}
|
|
|
- onClick={() => rightColumnShow.value = true } />
|
|
|
- }
|
|
|
+ onClick={() => (rightColumnShow.value = true)}
|
|
|
+ />
|
|
|
+ )}
|
|
|
{/* 右下角悬浮按钮 */}
|
|
|
<div class={styles.bottomColumn}>
|
|
|
{bottomList.map((item: any, index: number) => (
|
|
|
- <div
|
|
|
- class={[
|
|
|
- styles.bottomItem,
|
|
|
- ((item.id === 3 && !isUpArrow.value) || (item.id === 4 && !isDownArrow.value)) ? styles.itemDisabled : ''
|
|
|
- ]}
|
|
|
- onClick={() => operateBottomBtn(item.id)}>
|
|
|
- <img src={item.icon} />
|
|
|
- <div class={styles.bottomTips}>{item.name}</div>
|
|
|
- </div>
|
|
|
+ <div
|
|
|
+ class={[
|
|
|
+ styles.bottomItem,
|
|
|
+ (item.id === 3 && !isUpArrow.value) ||
|
|
|
+ (item.id === 4 && !isDownArrow.value)
|
|
|
+ ? styles.itemDisabled
|
|
|
+ : ''
|
|
|
+ ]}
|
|
|
+ onClick={() => operateBottomBtn(item.id)}>
|
|
|
+ <img src={item.icon} />
|
|
|
+ <div class={styles.bottomTips}>{item.name}</div>
|
|
|
+ </div>
|
|
|
))}
|
|
|
</div>
|
|
|
|
|
@@ -1729,7 +1616,7 @@ export default defineComponent({
|
|
|
{/* <div class={styles.modelAttendContent}>
|
|
|
{data.modalAttendMessage}
|
|
|
</div> */}
|
|
|
- <NSpace class={styles.btnGroupModal}>
|
|
|
+ <NSpace class={styles.btnGroupModal} justify="center">
|
|
|
<NButton
|
|
|
type="default"
|
|
|
round
|
|
@@ -1824,6 +1711,14 @@ export default defineComponent({
|
|
|
<TimerMeter></TimerMeter>
|
|
|
</div>
|
|
|
</NModal>
|
|
|
+
|
|
|
+ <NModal
|
|
|
+ v-model:show={data.selectResourceStatus}
|
|
|
+ class={['modalTitle', styles.selectMusicModal]}
|
|
|
+ preset="card"
|
|
|
+ title={'选择资源'}>
|
|
|
+ <SelectResources from="class" />
|
|
|
+ </NModal>
|
|
|
<NModal
|
|
|
transformOrigin="center"
|
|
|
v-model:show={data.removeVisiable}
|