Kaynağa Gözat

修改视频章节要点

丸子 10 ay önce
ebeveyn
işleme
140ae35208
2 değiştirilmiş dosya ile 35 ekleme ve 14 silme
  1. 18 12
      src/components/videopage/VideoPlayer.vue
  2. 17 2
      src/views/AIDevelop.vue

+ 18 - 12
src/components/videopage/VideoPlayer.vue

@@ -122,14 +122,19 @@ const saveProgress = throttle(async (progress, currentTime) => {
 
 // 处理视频元数据加载完成
 const handleLoadedMetadata = () => {
-  if (!videoRef.value || !props.courseConfigList.length) return
+  if (!videoRef.value) return
   const duration = videoRef.value.duration
-  if (duration) {
-    // 根据courseConfigList生成章节标记
-    chapterMarkers.value = props.courseConfigList.map(config => ({
-      time: config.ccTime,
-      position: (config.ccTime / duration) * 100
-    }))
+  if (duration && props.courseConfigList && props.courseConfigList.length) {
+    // 根据courseConfigList生成章节标记,过滤掉ccTime不存在或无效的配置项
+    chapterMarkers.value = props.courseConfigList
+      .filter(config => config.ccTime !== undefined && config.ccTime !== null && config.ccTime !== '')
+      .map(config => ({
+        time: config.ccTime,
+        position: (config.ccTime / duration) * 100
+      }))
+  } else {
+    // 确保在courseConfigList为空时清空标记
+    chapterMarkers.value = []
   }
 }
 
@@ -146,7 +151,7 @@ const handleTimeUpdate = ev => {
   if (!videoRef.value) return
   const currentTime = parseInt(ev.target.currentTime)
   const duration = videoRef.value.duration || 0
-  // 如果章节标记为空且有课程配置,尝试生成标记
+  // 如果章节标记为空且有课程配置,生成标记
   if (chapterMarkers.value.length === 0 && props.courseConfigList.length && duration > 0) {
     handleLoadedMetadata()
   }
@@ -174,18 +179,19 @@ const handleTimeUpdate = ev => {
 
   // 触发父组件的时间更新事件
   emits('timeUpdate', { currentTime, progressPercentage })
-
-  if (!props.courseConfigList.length) return
+    if (!props.courseConfigList.length) return
   props.courseConfigList.forEach(courseCofig => {
     // 暂停时间
     let time = courseCofig.ccTime
     // 检查是否到达时间点且还未暂停过
     if (currentTime === time && !pausedIndices.value.includes(time)) {
+      // 无论 ccQuestSource 是什么值,都暂停视频
       videoRef.value.pause()
       // 记录暂停时间
       pausedIndices.value.push(currentTime)
-      // 只有当存在问题内容时才触发弹窗
-      if (courseCofig.ccQuestContent) {
+      // 根据 ccQuestSource 的值决定是否显示问题弹框
+      // 当 ccQuestSource 为 1 时,显示问题弹框
+      if (courseCofig.ccQuestSource === '1' && courseCofig.ccQuestContent) {
         // 触发父组件显示试题
         emits('timeUpdate', {
           currentTime,

+ 17 - 2
src/views/AIDevelop.vue

@@ -444,7 +444,23 @@ onMounted(async () => {
     try {
       // 取接口课程数据
       const res = await ClassType(typeIdParam)
-      courseList.value = res.data
+      console.log(res);
+      // 对返回的课程数据进行处理,确保ccTime为有效秒数
+      const processedData = res.data.map(course => {
+        // 检查并处理courseConfigList
+        if (course.courseConfigList && Array.isArray(course.courseConfigList)) {
+          // 过滤掉ccTime为0的配置项
+          const validConfigList = course.courseConfigList.filter(config => 
+            config.ccTime !== undefined && config.ccTime !== null && config.ccTime > 0
+          )
+          return {
+            ...course,
+            courseConfigList: validConfigList
+          }
+        }
+        return course
+      })
+      courseList.value = processedData
       // 初始化已观看课程ID
       const savedWatchedIds = localStorage.getItem('watchedCourseIds')
       if (savedWatchedIds) {
@@ -508,7 +524,6 @@ onMounted(async () => {
           course.value = courseTemp
           courseId.value = courseTemp.id
         }
-
       })
     } catch (error) {
       console.error('获取课程数据失败:', error)