lex před 1 rokem
rodič
revize
a51a3f5b46
1 změnil soubory, kde provedl 45 přidání a 16 odebrání
  1. 45 16
      src/views/coursewarePlay/index.tsx

+ 45 - 16
src/views/coursewarePlay/index.tsx

@@ -26,7 +26,7 @@ import { browser } from '@/helpers/utils'
 import { Vue3Lottie } from 'vue3-lottie'
 import playLoadData from './datas/data.json'
 import { usePageVisibility } from '@vant/use'
-import { useInterval } from '@vueuse/core'
+import { useInterval, useIntervalFn } from '@vueuse/core'
 import PlayRecordTime from './playRecordTime'
 import { handleCheckVip } from '../hook/useFee'
 import OGuide from '@/components/o-guide'
@@ -236,7 +236,6 @@ export default defineComponent({
       popupData.itemActive = item.id
       popupData.itemName = item.name
       nextTick(() => {
-        console.log(list, 'list')
         data.itemList = list
         checkedAnimation(popupData.activeIndex)
         postMessage({
@@ -324,9 +323,12 @@ export default defineComponent({
     const getLookVideoData = async () => {
       try {
         const { data } = await request.get(
-          state.platformApi + `/studentCoursewareMaterialRelation/findByDetailId/${route.query.id}`,
+          state.platformApi + `/studentCoursewareMaterialRelation/findByDetailId`,
           {
-            hideLoading: true
+            hideLoading: true,
+            params: {
+              lessonCoursewareDetailId: route.query.id
+            }
           }
         )
         console.log(data)
@@ -650,6 +652,7 @@ export default defineComponent({
     /**
      * 统计视频播放时间段
      */
+    const intervalFnRef = ref() // 定时任务
     // 播放视频总时长
     const videoIntervalRef = useInterval(1000, { controls: true })
     videoIntervalRef.pause()
@@ -748,8 +751,24 @@ export default defineComponent({
       }
     }
     // 更新时间
-    const updateStat = async (pageBrowseTime = 10) => {
+    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 videoBrowseData = moreTime.value.length > 0 ? formatEffectiveTime(moreTime.value) : []
         // console.log(moreTime.value, videoBrowseData, 'video')
         // const time = videoBrowseData.length > 0 ? formatTimer(videoBrowseData) : 0
@@ -757,20 +776,24 @@ export default defineComponent({
         // 判断如何视屏播放时间大于视屏播放有效时间则说明数据有问题,进行重置数据
         // const rate = Math.floor((time / Math.floor(forms.pointVideoTime)) * 100)
         // console.log('videoIntervalRef?.counter.value', videoIntervalRef?.counter.value)
-        // await request.post('/api-student/studentCoursewareMaterialRelation/save', {
-        //   data: {
-        //     lessonCoursewareDetailId: route.query.id,
-        //     pageBrowseTime, // 固定10秒
-        //     videoBrowseData: JSON.stringify(videoBrowseData), // 视屏播放数据
-        //     videoBrowseDataTime: time || 0, // 有效的视频观看时长
-        //     // videoBrowseTime: videoIntervalRef?.counter.value, // 视频观看时长
-        //     // videoBrowsePoint: Math.floor(forms.player.currentTime || 0) // 视频最后观看点 - 向下取整
-        //   }
-        // })
+        await request.post('/api-student/studentCoursewareMaterialRelation/save', {
+          data: params
+        })
       } catch {
         //
       }
     }
+
+    onMounted(() => {
+      // 间隔多少时间同步数据
+      intervalFnRef.value = useIntervalFn(async () => {
+        // 同步数据时先进行有效时间进行保存
+        initVideoCount(false, true)
+
+        // await updateStat()
+        videoIntervalRef.counter.value = 0
+      }, 10000)
+    })
     /** 统计视频播放时间段 */
     return () => (
       <div id="playContent" class={styles.playContent}>
@@ -822,10 +845,16 @@ export default defineComponent({
                   activeData.model = true
                   videoIntervalRef.pause()
                 }}
-                onEnded={() => {
+                onEnded={async () => {
                   const _index = popupData.activeIndex + 1
                   if (_index < data.itemList.length) {
                     handleSwipeChange(_index)
+                  } else {
+                    // 说明是最后一个
+                    intervalFnRef.value.pause()
+                    // 同步数据时先进行有效时间进行保存
+                    initVideoCount(false, true)
+                    await updateStat()
                   }
                 }}
                 onSeeked={() => {