|
|
@@ -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,
|