|
@@ -1,4 +1,4 @@
|
|
|
-import { Icon, showConfirmDialog, showToast, Swipe, SwipeItem } from 'vant';
|
|
|
+import { Button, Icon, Popup, showConfirmDialog, Swipe, SwipeItem } from 'vant';
|
|
|
import {
|
|
|
defineComponent,
|
|
|
onMounted,
|
|
@@ -12,22 +12,21 @@ import styles from './index.module.less';
|
|
|
import 'plyr/dist/plyr.css';
|
|
|
import request from '@/helpers/request';
|
|
|
import { state } from '@/state';
|
|
|
-import { useRoute, useRouter } from 'vue-router';
|
|
|
+import { useRoute } from 'vue-router';
|
|
|
import iconBack from '../coursewarePlay/image/back.svg';
|
|
|
import { postMessage } from '@/helpers/native-message';
|
|
|
-import { browser } from '@/helpers/utils';
|
|
|
-import qs from 'query-string';
|
|
|
+// import { browser } from '@/helpers/utils';
|
|
|
import { Vue3Lottie } from 'vue3-lottie';
|
|
|
import playLoadData from '../coursewarePlay/datas/data.json';
|
|
|
// import { handleCheckVip } from '../hook/useFee';
|
|
|
import VideoClass from './video-class';
|
|
|
import { usePageVisibility } from '@vant/use';
|
|
|
|
|
|
-const materialType = {
|
|
|
- 视频: 'VIDEO',
|
|
|
- 图片: 'IMG',
|
|
|
- 曲目: 'SONG'
|
|
|
-};
|
|
|
+// const materialType = {
|
|
|
+// 视频: 'VIDEO',
|
|
|
+// 图片: 'IMG',
|
|
|
+// 曲目: 'SONG'
|
|
|
+// };
|
|
|
|
|
|
export default defineComponent({
|
|
|
name: 'exercise-after-class',
|
|
@@ -72,9 +71,9 @@ export default defineComponent({
|
|
|
|
|
|
const route = useRoute();
|
|
|
const query = route.query;
|
|
|
- const browserInfo = browser();
|
|
|
const headeRef = ref();
|
|
|
const data = reactive({
|
|
|
+ visiableStatus: true,
|
|
|
isMember: false, // 是否为会员
|
|
|
videoData: null as any,
|
|
|
trainings: [] as any[],
|
|
@@ -108,33 +107,25 @@ export default defineComponent({
|
|
|
}
|
|
|
}
|
|
|
);
|
|
|
- data.expireTimeFlag = res.data?.expireTimeFlag || false;
|
|
|
- if (Array.isArray(res?.data?.trainings)) {
|
|
|
- const trainings = res?.data?.trainings || [];
|
|
|
- const tempLessonTraining: any = [];
|
|
|
- trainings.forEach((item: any) => {
|
|
|
- tempLessonTraining.push(
|
|
|
- ...(item.studentLessonTrainingDetails || [])
|
|
|
- );
|
|
|
- });
|
|
|
+ // data.expireTimeFlag = res.data?.expireTimeFlag || false;
|
|
|
+ if (Array.isArray(res?.data)) {
|
|
|
+ const trainings = res?.data || [];
|
|
|
+ // const tempLessonTraining: any = [];
|
|
|
+ // trainings.forEach((item: any) => {
|
|
|
+ // tempLessonTraining.push(
|
|
|
+ // ...(item.studentLessonTrainingDetails || [])
|
|
|
+ // );
|
|
|
+ // });
|
|
|
// 没有播放完
|
|
|
- tempLessonTraining.forEach((item: any) => {
|
|
|
- let trainingContent: any = {};
|
|
|
- try {
|
|
|
- trainingContent = JSON.parse(item.trainingContent);
|
|
|
- } catch (error) {
|
|
|
- trainingContent = '';
|
|
|
- }
|
|
|
- if (trainingContent.practiceTimes !== item.trainingTimes + '') {
|
|
|
+ trainings.forEach((item: any) => {
|
|
|
+ if (item.times > item.trainingTimes) {
|
|
|
data.isPlayAll = false;
|
|
|
}
|
|
|
-
|
|
|
- if (item.materialId == route.query.materialId) {
|
|
|
- popupData.tabName = item.knowledgePointName;
|
|
|
+ if (item.id + '' == route.query.materialId) {
|
|
|
+ popupData.tabName = item.musicScoreName;
|
|
|
}
|
|
|
});
|
|
|
-
|
|
|
- return tempLessonTraining;
|
|
|
+ return trainings;
|
|
|
}
|
|
|
} catch (error) {
|
|
|
//
|
|
@@ -144,17 +135,12 @@ export default defineComponent({
|
|
|
const setRecord = async (trainings: any[]) => {
|
|
|
if (Array.isArray(trainings)) {
|
|
|
data.trainings = trainings.map((n: any) => {
|
|
|
- const materialRefs = n.materialRefs ? n.materialRefs : [];
|
|
|
- const materialMusicId =
|
|
|
- materialRefs.length > 0 ? materialRefs[0].resourceId : null;
|
|
|
- try {
|
|
|
- n.trainingContent = JSON.parse(n.trainingContent);
|
|
|
- } catch (error) {
|
|
|
- n.trainingContent = '';
|
|
|
- }
|
|
|
+ // const materialRefs = n.materialRefs ? n.materialRefs : [];
|
|
|
+ // const materialMusicId =
|
|
|
+ // materialRefs.length > 0 ? materialRefs[0].resourceId : null;
|
|
|
return {
|
|
|
...n,
|
|
|
- materialMusicId,
|
|
|
+ // materialMusicId,
|
|
|
currentTime: 0,
|
|
|
duration: 100,
|
|
|
paused: true,
|
|
@@ -163,12 +149,13 @@ export default defineComponent({
|
|
|
timer: null,
|
|
|
// muted: state.user.data?.vipMember ? false : true, // 静音
|
|
|
muted: true,
|
|
|
- autoplay: state.user.data?.vipMember ? true : false //自动播放
|
|
|
+ autoplay: true
|
|
|
+ // autoplay: state.user.data?.vipMember ? true : false //自动播放
|
|
|
};
|
|
|
});
|
|
|
console.log(data.trainings, 'trainings');
|
|
|
data.itemList = data.trainings.filter(
|
|
|
- (n: any) => n.materialId == route.query.materialId
|
|
|
+ (n: any) => n.id == route.query.materialId
|
|
|
);
|
|
|
data.videoData = data.itemList[0];
|
|
|
handleExerciseCompleted();
|
|
@@ -179,13 +166,7 @@ export default defineComponent({
|
|
|
const trainings = await getTrainingRecord();
|
|
|
// 初始化状态
|
|
|
trainings.forEach((record: any) => {
|
|
|
- let trainingContent: any = {};
|
|
|
- try {
|
|
|
- trainingContent = JSON.parse(record.trainingContent);
|
|
|
- } catch (error) {
|
|
|
- trainingContent = '';
|
|
|
- }
|
|
|
- if (trainingContent.practiceTimes !== record.trainingTimes + '') {
|
|
|
+ if (record.times !== record.trainingTimes) {
|
|
|
data.isPlayBaseStatus = false;
|
|
|
}
|
|
|
});
|
|
@@ -211,32 +192,18 @@ export default defineComponent({
|
|
|
});
|
|
|
|
|
|
// 达到指标,记录
|
|
|
- const addTrainingRecord = async (m: any) => {
|
|
|
+ const addTrainingRecord = async () => {
|
|
|
if (data.recordLoading || data.expireTimeFlag) return;
|
|
|
console.log('记录观看次数');
|
|
|
data.recordLoading = true;
|
|
|
- const query = route.query;
|
|
|
const body = {
|
|
|
- materialType: 'VIDEO',
|
|
|
- record: {
|
|
|
- sourceTime: m.duration,
|
|
|
- clientType: state.platformType,
|
|
|
- feature: 'LESSON_TRAINING',
|
|
|
- deviceType: browserInfo.android
|
|
|
- ? 'ANDROID'
|
|
|
- : browserInfo.isApp
|
|
|
- ? 'IOS'
|
|
|
- : 'WEB'
|
|
|
- },
|
|
|
- courseScheduleId: query.courseScheduleId,
|
|
|
- lessonTrainingId: query.lessonTrainingId,
|
|
|
- materialId: data.videoData?.materialId || ''
|
|
|
+ id: data.videoData?.id || ''
|
|
|
};
|
|
|
try {
|
|
|
- await request.post(
|
|
|
+ await request.get(
|
|
|
state.platformApi + '/studentCourseHomework/addStudentHomeworkRecord',
|
|
|
{
|
|
|
- data: body,
|
|
|
+ params: body,
|
|
|
hideLoading: true
|
|
|
}
|
|
|
);
|
|
@@ -247,9 +214,8 @@ export default defineComponent({
|
|
|
try {
|
|
|
const trainings: any[] = await getTrainingRecord();
|
|
|
if (Array.isArray(trainings)) {
|
|
|
- const item = trainings.find(
|
|
|
- (n: any) => n.materialId == data.videoData?.materialId
|
|
|
- );
|
|
|
+ const item = trainings.find((n: any) => n.id == data.videoData?.id);
|
|
|
+ console.log(item, 'item');
|
|
|
if (item) {
|
|
|
data.videoData.trainingTimes = item.trainingTimes;
|
|
|
handleExerciseCompleted();
|
|
@@ -270,37 +236,29 @@ export default defineComponent({
|
|
|
const handleExerciseCompleted = () => {
|
|
|
if (
|
|
|
data?.videoData?.trainingTimes != 0 &&
|
|
|
- data?.videoData?.trainingTimes + '' ===
|
|
|
- data.videoData?.trainingContent?.practiceTimes
|
|
|
+ data?.videoData?.trainingTimes >= data.videoData?.times
|
|
|
) {
|
|
|
let isLastIndex = false;
|
|
|
let itemIndex = 0;
|
|
|
- // console.log(data.isPlayBaseStatus, data.isPlayAll, data.trainings)
|
|
|
+ console.log(data.isPlayBaseStatus, data.isPlayAll, data.trainings);
|
|
|
if (data.isPlayBaseStatus) {
|
|
|
itemIndex = data.trainings.findIndex(
|
|
|
- (n: any) => n.materialId == data.videoData?.materialId
|
|
|
+ (n: any) => n.id == data.videoData?.id
|
|
|
);
|
|
|
isLastIndex = itemIndex === data.trainings.length - 1;
|
|
|
} else {
|
|
|
let i = -1;
|
|
|
let status = true;
|
|
|
data.trainings.forEach((item: any, index: number) => {
|
|
|
- if (
|
|
|
- item.trainingContent.practiceTimes !== item.trainingTimes + '' &&
|
|
|
- i === -1
|
|
|
- ) {
|
|
|
- // console.log(i, item.trainingContent.practiceTimes, item.trainingTimes, index)
|
|
|
+ if (item.times > item.trainingTimes && i === -1) {
|
|
|
i = index;
|
|
|
}
|
|
|
- if (
|
|
|
- item.trainingContent.practiceTimes !==
|
|
|
- item.trainingTimes + ''
|
|
|
- ) {
|
|
|
+ if (item.times > item.trainingTimes) {
|
|
|
status = false;
|
|
|
}
|
|
|
});
|
|
|
itemIndex = i != -1 ? i - 1 : -1;
|
|
|
- // console.log(status)
|
|
|
+ // console.log(status, itemIndex);
|
|
|
isLastIndex = status;
|
|
|
}
|
|
|
|
|
@@ -314,25 +272,25 @@ export default defineComponent({
|
|
|
.then(() => {
|
|
|
if (!isLastIndex) {
|
|
|
const nextItem = data.trainings[itemIndex + 1];
|
|
|
- data.videoData?.expired;
|
|
|
- if (nextItem.expired) {
|
|
|
- showToast('该资源已过期');
|
|
|
- return;
|
|
|
- }
|
|
|
- if (nextItem.knowledgePointName) {
|
|
|
- popupData.tabName = nextItem.knowledgePointName;
|
|
|
- }
|
|
|
- if (nextItem?.type === materialType.视频) {
|
|
|
- data.itemList = [nextItem];
|
|
|
- data.videoData = nextItem;
|
|
|
- handleExerciseCompleted();
|
|
|
+ if (nextItem.musicScoreName) {
|
|
|
+ popupData.tabName = nextItem.musicScoreName;
|
|
|
}
|
|
|
+ data.itemList = [nextItem];
|
|
|
+ data.videoData = nextItem;
|
|
|
+ handleExerciseCompleted();
|
|
|
} else {
|
|
|
postMessage({ api: 'goBack' });
|
|
|
}
|
|
|
})
|
|
|
.catch(() => {
|
|
|
+ console.log(
|
|
|
+ data.trainings,
|
|
|
+ itemIndex,
|
|
|
+ data.trainings[itemIndex],
|
|
|
+ 'data.trainings[itemIndex]'
|
|
|
+ );
|
|
|
data.trainings[itemIndex].currentTime = 0;
|
|
|
+ data.trainings[itemIndex].videoEle.currentTime(0);
|
|
|
});
|
|
|
}
|
|
|
};
|
|
@@ -401,17 +359,30 @@ export default defineComponent({
|
|
|
返回
|
|
|
</div>
|
|
|
<div class={styles.menu}>{popupData.tabName}</div>
|
|
|
- {/* 判断作业是否过期 */}
|
|
|
- {!data.expireTimeFlag && (
|
|
|
- <div class={styles.nums}>
|
|
|
- 观看视频模仿并练习:{data.videoData?.trainingTimes || 0}/
|
|
|
- {data.videoData?.trainingContent?.practiceTimes || 0}
|
|
|
- </div>
|
|
|
- )}
|
|
|
+ <div class={styles.nums}>
|
|
|
+ 练习次数:{data.videoData?.trainingTimes || 0}/
|
|
|
+ {data.videoData?.times || 0}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
)}
|
|
|
</Transition>
|
|
|
</div>
|
|
|
+
|
|
|
+ {/* <Popup
|
|
|
+ v-model:show={data.visiableStatus}
|
|
|
+ closeable
|
|
|
+ class={styles.visiablePopup}>
|
|
|
+ <div class={styles.title}>温馨提示</div>
|
|
|
+ <p class={styles.content}>您已完成该练习~</p>
|
|
|
+ <div class={styles.btnGroup}>
|
|
|
+ <Button color="#ccc" round>
|
|
|
+ 取消
|
|
|
+ </Button>
|
|
|
+ <Button color="#FF8057" round>
|
|
|
+ 下一步
|
|
|
+ </Button>
|
|
|
+ </div>
|
|
|
+ </Popup> */}
|
|
|
</div>
|
|
|
);
|
|
|
}
|