소스 검색

添加视频

lex 8 달 전
부모
커밋
b104fde178
3개의 변경된 파일125개의 추가작업 그리고 28개의 파일을 삭제
  1. 33 27
      src/views/coursewarePlay/index.tsx
  2. 73 0
      src/views/exercise-after-class/index.tsx
  3. 19 1
      src/views/exercise-after-class/video-class.tsx

+ 33 - 27
src/views/coursewarePlay/index.tsx

@@ -871,30 +871,35 @@ export default defineComponent({
     // 更新时间
     const updateStat = async () => {
       try {
-        const itemList = data.itemList;
-        const params: any = [];
-        itemList.forEach((item: any) => {
-          if (item.moreTime.length > 0) {
-            const videoBrowseData = formatEffectiveTime(item.moreTime);
-            const time =
-              videoBrowseData.length > 0 ? formatTimer(videoBrowseData) : 0;
-            const temp = {
-              lessonCoursewareDetailId: route.query.id,
-              browseTime: time, // 播放时长
-              videoBrowseData: JSON.stringify(videoBrowseData), // 播放的数据
-              videoTime: item.videoTime, // 视频时长
-              materialId: item.materialId
-            };
-            params.push(temp);
-          }
-        });
+        // const itemList = data.itemList;
+        // const params: any = [];
+        // itemList.forEach((item: any) => {
+        //   if (item.moreTime.length > 0) {
+        //     const videoBrowseData = formatEffectiveTime(item.moreTime);
+        //     const time =
+        //       videoBrowseData.length > 0 ? formatTimer(videoBrowseData) : 0;
+        //     const temp = {
+        //       lessonCoursewareDetailId: route.query.id,
+        //       browseTime: time, // 播放时长
+        //       videoBrowseData: JSON.stringify(videoBrowseData), // 播放的数据
+        //       videoTime: item.videoTime, // 视频时长
+        //       materialId: item.materialId
+        //     };
+        //     params.push(temp);
+        //   }
+        // });
 
         // 只有学生才统计数据
-        if (params.length > 0 && state.platformType === 'STUDENT') {
+        if (state.platformType === 'STUDENT') {
+          const videoTime = videoIntervalRef.counter.value;
+          if (videoTime <= 0) return;
+          videoIntervalRef.counter.value = 0;
           await request.post(
-            `${state.platformApi}/studentCoursewareMaterialRelation/save`,
+            `${state.platformApi}/studentCoursewarePlayRecord/save`,
             {
-              data: params
+              data: {
+                playTime: videoTime
+              }
             }
           );
         }
@@ -904,14 +909,15 @@ export default defineComponent({
     };
 
     onMounted(() => {
-      // 间隔多少时间同步数据
-      intervalFnRef.value = useIntervalFn(async () => {
-        // 同步数据时先进行有效时间进行保存
-        initVideoCount(false, true);
+      if (state.platformType === 'STUDENT') {
+        // 间隔多少时间同步数据
+        intervalFnRef.value = useIntervalFn(async () => {
+          // 同步数据时先进行有效时间进行保存
+          // initVideoCount(false, true);
 
-        await updateStat();
-        videoIntervalRef.counter.value = 0;
-      }, 10000);
+          await updateStat();
+        }, 5000);
+      }
     });
     /** 统计视频播放时间段 */
     return () => (

+ 73 - 0
src/views/exercise-after-class/index.tsx

@@ -21,6 +21,8 @@ import playLoadData from '../coursewarePlay/datas/data.json';
 // import { handleCheckVip } from '../hook/useFee';
 import VideoClass from './video-class';
 import { usePageVisibility } from '@vant/use';
+import { useInterval, useIntervalFn } from '@vueuse/core';
+import deepClone from '@/helpers/deep-clone';
 
 // const materialType = {
 //   视频: 'VIDEO',
@@ -165,6 +167,33 @@ export default defineComponent({
       }
     };
 
+    const intervalFnRef = ref(); // 定时任务
+    // 播放视频总时长
+    const videoIntervalRef = useInterval(1000, { controls: true });
+    videoIntervalRef.pause();
+
+    // 更新时间
+    const updateStat = async () => {
+      try {
+        // 只有学生才统计数据
+        if (state.platformType === 'STUDENT') {
+          const videoTime = videoIntervalRef.counter.value;
+          if (videoTime <= 0) return;
+          videoIntervalRef.counter.value = 0;
+          await request.post(
+            `${state.platformApi}/studentCoursewarePlayRecord/save`,
+            {
+              data: {
+                playTime: videoTime
+              }
+            }
+          );
+        }
+      } catch {
+        //
+      }
+    };
+
     onMounted(async () => {
       const trainings = await getTrainingRecord();
       // 初始化状态
@@ -177,6 +206,16 @@ export default defineComponent({
       setRecord(trainings);
       // 是否为会员
       // data.isMember = handleCheckVip();
+
+      // 只有学生才统计数据
+      if (state.platformType === 'STUDENT') {
+        // 间隔多少时间同步数据
+        intervalFnRef.value = useIntervalFn(async () => {
+          // 同步数据时先进行有效时间进行保存
+          // initVideoCount(false, true);
+          await updateStat();
+        }, 5000);
+      }
     });
     // 返回
     const goback = () => {
@@ -333,6 +372,40 @@ export default defineComponent({
                       item={m}
                       isMember={data.isMember}
                       modal={activeData.model}
+                      onSeeked={() => {
+                        videoIntervalRef.isActive.value &&
+                          videoIntervalRef.pause();
+                      }}
+                      onSeeking={() => {
+                        videoIntervalRef.isActive.value &&
+                          videoIntervalRef.pause();
+                      }}
+                      onWaiting={() => {
+                        videoIntervalRef.isActive.value &&
+                          videoIntervalRef.pause();
+                      }}
+                      onTimeupdate={() => {
+                        const activeVideoRef = m.videoEle;
+                        console.log(
+                          videoIntervalRef.isActive.value,
+                          activeVideoRef?.currentTime(),
+                          activeVideoRef?.paused(),
+                          'activeVideoRef?.paused()'
+                        );
+                        if (
+                          !videoIntervalRef.isActive.value &&
+                          activeVideoRef?.currentTime() > 0 &&
+                          !activeVideoRef?.paused()
+                        ) {
+                          videoIntervalRef.resume();
+                        }
+                      }}
+                      onPause={() => {
+                        clearTimeout(activeData.timer);
+                        activeData.model = true;
+                        videoIntervalRef.pause();
+                        console.log('11111');
+                      }}
                       onEnded={() => addTrainingRecord()}
                       onChangeModal={(status: boolean) => {
                         activeData.model = status;

+ 19 - 1
src/views/exercise-after-class/video-class.tsx

@@ -41,7 +41,12 @@ export default defineComponent({
     'reset',
     'error',
     'close',
-    'changeModal'
+    'changeModal',
+    'pause',
+    'seeked',
+    'seeking',
+    'waiting',
+    'timeupdate'
   ],
   setup(props, { emit }) {
     const { item, modal } = toRefs(props);
@@ -97,6 +102,7 @@ export default defineComponent({
           if (!item.value.loaded) return;
           const videoEle = videoItem.value;
           item.value.currentTime = videoEle.currentTime();
+          emit('timeupdate');
         });
 
         // 视频播放结束
@@ -113,6 +119,7 @@ export default defineComponent({
           setTimeout(() => {
             videoItem.value?.pause();
           }, 100);
+          emit('pause');
         });
 
         videoItem.value.on('play', () => {
@@ -127,6 +134,17 @@ export default defineComponent({
           }
         });
 
+        videoItem.value.on('seeked', () => {
+          emit('seeked');
+        });
+
+        videoItem.value.on('seeking', () => {
+          emit('seeking');
+        });
+        videoItem.value.on('waiting', () => {
+          emit('waiting');
+        });
+
         // 视频播放异常
         videoItem.value.on('error', () => {
           emit('error');