Merge branch 'player-20251117-v1' into master-20251210

# Conflicts:
#	src/api/modules/course.js
#	src/components/Course/courseForm.vue
#	src/security.js
#	src/views/portal/course/Index.vue
#	src/views/study/coursenew.vue
This commit is contained in:
joshen
2025-12-10 11:00:15 +08:00
21 changed files with 2701 additions and 599 deletions

View File

@@ -373,6 +373,30 @@
></i
>我的笔记
</div>
<!-- ai播放器相关 开发阶段先放开 v-if="courseInfo.aiDraft == 1" -->
<div
@click="heartabthree"
v-if="courseInfo.aiDraft == 1 && contentData.contentType == 10"
:class="tab == 3 ? 'control-tab-active' : ' '"
style="position: relative"
>
<i
class="el-icon-document"
style="margin-right: 9px; margin-left: 9px"
></i
>ai文稿
<img
src="@/assets/images/course/wengaoTip.png"
alt=""
style="
position: absolute;
top: -3px;
right: -14px;
width: 15px;
height: 14px;
"
/>
</div>
</div>
<!-- 课程单元 -->
<div class="course-units" v-if="tab == 1">
@@ -625,6 +649,11 @@
:score="courseInfo.score"
></my-note>
</div>
<!-- ai播放器相关 -->
<!-- ai文稿 -->
<div class="ai-script" v-if="contentData.contentType == 10 && tab == 3">
<ai-script ref="aiscript" :blobId="blobId" :isDrag="curriculumData.isDrag" @changeCurrentTime="changeCurrentTime"></ai-script>
</div>
</div>
</div>
<div class="course-infobox">
@@ -637,6 +666,16 @@
>
内容简介<span class=""></span>
</div>
<!-- ai播放器相关 -->
<div
@click="coutab(4)"
v-if="courseInfo.aiAbstract == 1"
style="position: relative;"
:class="courestab == 4 ? 'course-info-tab-active' : ''"
>
AI摘要<span class=""></span>
<img style="position: absolute;top: -18px;right: -23px;width: 36px;height: 24px;" src="@/assets/images/course/courseNew.png" alt="">
</div>
<div
@click="coutab(2)"
:class="courestab == 2 ? 'course-info-tab-active' : ''"
@@ -709,6 +748,15 @@
></note-comments>
</div>
</div>
<!-- ai播放器相关 -->
<div
v-show="courestab == 4"
style="padding-left: 17px; padding-top: 20px;background-color: #fff;"
>
<div style="padding: 30px;line-height: 24px;letter-spacing: 0.3px;color: rgba(102, 102, 102, 1);">
{{ courseInfo.summaryContent || '' }}
</div>
</div>
</div>
<div class="course-teacher">
<div class="cteacher-top">
@@ -799,7 +847,8 @@
</div>
</template>
<script>
import { mapGetters } from "vuex";
// ai播放器相关
import { mapGetters, mapMutations } from "vuex";
import followButton from "@/components/Follow/button.vue";
import portalHeader from "@/components/PortalHeader.vue";
import portalFooter from "@/components/PortalFooter.vue";
@@ -836,6 +885,8 @@ import exam from "@/components/Course/exam";
import homework from "@/components/Course/homework";
import assess from "@/components/Course/assess";
import myNote from "../../components/Course/myNote.vue";
// ai播放器相关
import aiScript from "../../components/Course/aiScript.vue";
import apiFollow from "@/api/phase2/userfollow.js";
import apiMessage from "@/api/system/message.js";
// import Vue from 'vue';
@@ -855,6 +906,7 @@ export default {
audioPlayer,
videoPlayer,
myNote,
aiScript,
noteComments,
portalFooter,
followButton,
@@ -968,7 +1020,8 @@ export default {
this.loadData();
},
computed: {
...mapGetters(["userInfo"]),
// ai播放器相关
...mapGetters(["userInfo", 'selectableLang']),
catalogTree() {
let treeList = [];
this.completed = [];
@@ -1004,6 +1057,16 @@ export default {
},
},
methods: {
// ai播放器相关
// 处理从AI文稿组件传递过来的时间跳转事件
changeCurrentTime(time) {
console.log(time,'time')
this.$refs.myVideoPlayer && this.$refs.myVideoPlayer.seekToTime(time);
},
...mapMutations({
SET_selectableLang: 'video/SET_selectableLang',
SET_courseInfo: 'video/SET_courseInfo',
}),
handleOpen(key, path) {
if (this.isFalse) {
this.defaultOpeneds = [key];
@@ -1165,6 +1228,10 @@ export default {
this.curriculumData.url = r.content;
}
this.$refs.mynote.showVideoTimeBtn(true);
// ai播放器相关 - 视频类型加载ai相关功能
if (r.contentType == 10) {
this.handleAIVideo(r.boeaiSubtitleRspList, r);
}
this.createPlayUrl(r.contentRefId, this.curriculumData.url);
} else if (r.contentType == 40) {
// if (r.content != '' && r.content.indexOf('.pdf') == -1) {
@@ -1327,6 +1394,16 @@ export default {
localStorage.setItem("videoProgressData", JSON.stringify(arr));
}
},
// ai播放器相关 - 视频处理
handleAIVideo(list = [], r) {
console.log('触发了-----------list', list);
this.SET_selectableLang(list);
this.SET_courseInfo(this.courseInfo);
if (this.courseInfo.aiSet && this.courseInfo.aiAbstract == 1 && this.courseInfo.summaryContent) {
this.coutab(4);
}
console.log("ai处理", this.selectableLang);
},
isShowTime() {
if (this.isContentTypeTwo != this.contentData.contentType) {
return;
@@ -2290,6 +2367,10 @@ export default {
heartabtwo() {
this.tab = 2;
},
// ai播放器相关
heartabthree() {
this.tab = 3;
},
handleAudioTimeUpdate(currentTime) {
// if(this.contentStudysLength.length == 0){
let params = {