|
@@ -5,7 +5,8 @@ import {
|
|
|
onUnmounted,
|
|
|
ref,
|
|
|
Transition,
|
|
|
- computed
|
|
|
+ computed,
|
|
|
+ nextTick
|
|
|
} from 'vue';
|
|
|
import styles from './index.module.less';
|
|
|
import 'plyr/dist/plyr.css';
|
|
@@ -48,7 +49,6 @@ import beatIcon from '/src/components/layout/images/beatIcon.png';
|
|
|
import toneIcon from '/src/components/layout/images/toneIcon.png';
|
|
|
import { px2vw } from '/src/utils';
|
|
|
import PlaceholderTone from '/src/components/layout/modals/placeholderTone';
|
|
|
-import { state } from '/src/state';
|
|
|
export type ToolType = 'init' | 'pen' | 'whiteboard';
|
|
|
export type ToolItem = {
|
|
|
type: ToolType;
|
|
@@ -58,26 +58,7 @@ export type ToolItem = {
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'CoursewarePlay',
|
|
|
- props: {
|
|
|
- type: {
|
|
|
- type: String,
|
|
|
- default: ''
|
|
|
- },
|
|
|
- subjectId: {
|
|
|
- type: [String, Number],
|
|
|
- default: ''
|
|
|
- },
|
|
|
- detailId: {
|
|
|
- type: String,
|
|
|
- default: ''
|
|
|
- },
|
|
|
- classGroupId: {
|
|
|
- type: String,
|
|
|
- default: ''
|
|
|
- }
|
|
|
- },
|
|
|
- emits: ['close'],
|
|
|
- setup(props, { emit }) {
|
|
|
+ setup() {
|
|
|
const message = useMessage();
|
|
|
const route = useRoute();
|
|
|
/** 设置播放容器 16:9 */
|
|
@@ -120,7 +101,10 @@ export default defineComponent({
|
|
|
modelAttendStatus: false, // 布置作业提示弹窗
|
|
|
modalAttendMessage: '本节课未设置课后训练,是否继续?',
|
|
|
modelTrainStatus: false, // 训练设置
|
|
|
- homeworkStatus: true // 布置作业完成时
|
|
|
+ homeworkStatus: true, // 布置作业完成时
|
|
|
+ removeVisiable: false,
|
|
|
+ removeTitle: '',
|
|
|
+ removeContent: ''
|
|
|
});
|
|
|
const activeData = reactive({
|
|
|
// isAutoPlay: false, // 是否自动播放
|
|
@@ -308,11 +292,10 @@ export default defineComponent({
|
|
|
|
|
|
onMounted(() => {
|
|
|
const query = route.query;
|
|
|
- // 先取参数,
|
|
|
- data.type = props.type || (query.type as any);
|
|
|
- data.subjectId = props.subjectId || query.subjectId;
|
|
|
- data.detailId = props.detailId || query.detailId;
|
|
|
- data.classGroupId = props.classGroupId || query.classGroupId;
|
|
|
+ data.type = query.type as any;
|
|
|
+ data.subjectId = query.subjectId;
|
|
|
+ data.detailId = query.detailId;
|
|
|
+ data.classGroupId = query.classGroupId;
|
|
|
initMoveable();
|
|
|
window.addEventListener('message', iframeHandle);
|
|
|
getDetail();
|
|
@@ -353,12 +336,12 @@ export default defineComponent({
|
|
|
for (let i = 0; i < data.itemList.length; i++) {
|
|
|
const activeItem = data.itemList[i];
|
|
|
if (activeItem.type === 'VIDEO' && activeItem.videoEle) {
|
|
|
- activeItem.videoEle.currentTime(0);
|
|
|
- activeItem.videoEle.pause();
|
|
|
+ console.log(activeItem.videoEle, 'activeItem.videoEle');
|
|
|
+ activeItem.videoEle?.pause();
|
|
|
}
|
|
|
|
|
|
if (activeItem.type === 'SONG' && activeItem.audioEle) {
|
|
|
- activeItem.audioEle.stop();
|
|
|
+ activeItem.audioEle?.stop();
|
|
|
}
|
|
|
// console.log('🚀 ~ activeItem:', activeItem)
|
|
|
// 停止曲谱的播放
|
|
@@ -527,9 +510,12 @@ export default defineComponent({
|
|
|
clearTimeout(activeData.timer);
|
|
|
message.destroyAll();
|
|
|
// item.autoPlay = false;
|
|
|
- // nextTick(() => {
|
|
|
- // item.videoEle?.play();
|
|
|
- // });
|
|
|
+ nextTick(() => {
|
|
|
+ if (item.error) {
|
|
|
+ item.videoEle?.src(item.content);
|
|
|
+ // item.videoEle?.onPlay();
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
}
|
|
|
// requestAnimationFrame(() => {
|
|
@@ -613,10 +599,10 @@ export default defineComponent({
|
|
|
const activeItem = data.itemList[popupData.activeIndex];
|
|
|
// 暂停视频和曲谱的播放
|
|
|
if (activeItem.type === 'VIDEO' && activeItem.videoEle) {
|
|
|
- activeItem.videoEle.pause();
|
|
|
+ activeItem.videoEle?.stop();
|
|
|
}
|
|
|
if (activeItem.type === 'SONG' && activeItem.audioEle) {
|
|
|
- activeItem.audioEle.stop();
|
|
|
+ activeItem.audioEle?.stop();
|
|
|
}
|
|
|
if (activeItem.type === 'MUSIC') {
|
|
|
activeItem.iframeRef?.contentWindow?.postMessage(
|
|
@@ -745,6 +731,9 @@ export default defineComponent({
|
|
|
setModelOpen();
|
|
|
}
|
|
|
}}
|
|
|
+ onError={() => {
|
|
|
+ m.error = true;
|
|
|
+ }}
|
|
|
/>
|
|
|
<Transition name="van-fade">
|
|
|
{!m.isprepare && (
|
|
@@ -866,13 +855,7 @@ export default defineComponent({
|
|
|
]}
|
|
|
onClick={async () => {
|
|
|
if (data.type === 'preview') {
|
|
|
- handleStop();
|
|
|
- if (state.application) {
|
|
|
- emit('close');
|
|
|
- } else {
|
|
|
- window.close();
|
|
|
- }
|
|
|
-
|
|
|
+ window.close();
|
|
|
// onFullScreen();
|
|
|
} else {
|
|
|
const res = await lessonPreTrainingPage({
|
|
@@ -991,12 +974,7 @@ export default defineComponent({
|
|
|
round
|
|
|
onClick={() => {
|
|
|
data.modelAttendStatus = false;
|
|
|
- handleStop();
|
|
|
- if (state.application) {
|
|
|
- emit('close');
|
|
|
- } else {
|
|
|
- window.close();
|
|
|
- }
|
|
|
+ window.close();
|
|
|
}}>
|
|
|
暂不布置
|
|
|
</NButton>
|
|
@@ -1026,12 +1004,7 @@ export default defineComponent({
|
|
|
onConfirm={() => {
|
|
|
// 布置完作业之后直接关闭
|
|
|
setTimeout(() => {
|
|
|
- handleStop();
|
|
|
- if (state.application) {
|
|
|
- emit('close');
|
|
|
- } else {
|
|
|
- window.close();
|
|
|
- }
|
|
|
+ window.close();
|
|
|
}, 1000);
|
|
|
}}
|
|
|
/>
|
|
@@ -1134,6 +1107,54 @@ export default defineComponent({
|
|
|
<TimerMeter></TimerMeter>
|
|
|
</div>
|
|
|
</NModal>
|
|
|
+
|
|
|
+ <NModal
|
|
|
+ v-model:show={data.removeVisiable}
|
|
|
+ preset="card"
|
|
|
+ class={['modalTitle', styles.removeVisiable]}
|
|
|
+ title={data.removeTitle}>
|
|
|
+ <div class={styles.studentRemove}>
|
|
|
+ <p>{data.removeContent}</p>
|
|
|
+
|
|
|
+ <NSpace class={styles.btnGroupModal} justify="center">
|
|
|
+ <NButton
|
|
|
+ round
|
|
|
+ type="primary"
|
|
|
+ onClick={() => {
|
|
|
+ //
|
|
|
+ }}>
|
|
|
+ 确定
|
|
|
+ </NButton>
|
|
|
+ <NButton round onClick={() => (data.removeVisiable = false)}>
|
|
|
+ 取消
|
|
|
+ </NButton>
|
|
|
+ </NSpace>
|
|
|
+ </div>
|
|
|
+ </NModal>
|
|
|
+
|
|
|
+ <NModal
|
|
|
+ v-model:show={data.removeVisiable}
|
|
|
+ preset="card"
|
|
|
+ class={['modalTitle', styles.removeVisiable]}
|
|
|
+ title={data.removeTitle}>
|
|
|
+ <div class={styles.studentRemove}>
|
|
|
+ <p>{data.removeContent}</p>
|
|
|
+
|
|
|
+ <NSpace class={styles.btnGroupModal} justify="center">
|
|
|
+ <NButton
|
|
|
+ round
|
|
|
+ type="primary"
|
|
|
+ onClick={() => {
|
|
|
+ //
|
|
|
+ }}>
|
|
|
+ 确定
|
|
|
+ </NButton>
|
|
|
+ <NButton round onClick={() => (data.removeVisiable = false)}>
|
|
|
+ 取消
|
|
|
+ </NButton>
|
|
|
+ </NSpace>
|
|
|
+ </div>
|
|
|
+ </NModal>
|
|
|
</div>
|
|
|
);
|
|
|
}
|