mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/learning-system-portal.git
synced 2025-12-07 18:06:44 +08:00
添加改动标识 ai播放器相关
This commit is contained in:
@@ -158,6 +158,45 @@
|
|||||||
placeholder="请尽量填写课程简介,用于列表中显示,可以让用户更容易了解课程信息">
|
placeholder="请尽量填写课程简介,用于列表中显示,可以让用户更容易了解课程信息">
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<el-form-item label="AI设置">
|
||||||
|
<div>
|
||||||
|
<div style="display: flex; align-items: center;gap: 10px;">
|
||||||
|
<div style="display: flex; align-items: center;gap: 3px;">
|
||||||
|
<el-tooltip class="item" effect="dark" content="是否将课程进行AI处理" placement="top">
|
||||||
|
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
|
||||||
|
</el-tooltip>
|
||||||
|
<span>AI处理状态:</span>
|
||||||
|
</div>
|
||||||
|
<el-switch v-model="courseInfo.aiSet" :active-value="1" :inactive-value="0"></el-switch>
|
||||||
|
</div>
|
||||||
|
<div v-show="courseInfo.aiSet==1">
|
||||||
|
<el-row :gutter="20" style="margin: 10px 0;">
|
||||||
|
<el-col :span="24" style="display: flex; align-items: center;gap: 10px;">
|
||||||
|
<span>是否需要生成AI摘要:</span>
|
||||||
|
<el-radio-group v-model="courseInfo.aiAbstract">
|
||||||
|
<el-radio :label="1">是</el-radio>
|
||||||
|
<el-radio :label="0">否</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="24" style="display: flex; align-items: center;gap: 10px;">
|
||||||
|
<span>是否需要生成AI文稿:</span>
|
||||||
|
<el-radio-group v-model="courseInfo.aiDraft">
|
||||||
|
<el-radio :label="1">是</el-radio>
|
||||||
|
<el-radio :label="0">否</el-radio>
|
||||||
|
</el-radio-group>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20" style="margin: 10px 0;">
|
||||||
|
<el-col :span="20" style="display: flex; align-items: start;gap: 10px;flex-direction: column;">
|
||||||
|
<span>请选择该课程所支持的语种:</span>
|
||||||
|
<el-select v-model="courseInfo.languageCode" placeholder="请选择" multiple filterable style="width: 240px;">
|
||||||
|
<el-option v-for="item in selectAllLang" :key="item.key" :label="item.label" :value="item.srclang"> </el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
<el-col :span="14">
|
<el-col :span="14">
|
||||||
<div @click="checkCourse"><weikeContent ref="weikeContent" :reset="weikeReset" :contents="contentInfo.list" :course="courseInfo" min-height="644px"></weikeContent></div>
|
<div @click="checkCourse"><weikeContent ref="weikeContent" :reset="weikeReset" :contents="contentInfo.list" :course="courseInfo" min-height="644px"></weikeContent></div>
|
||||||
@@ -329,6 +368,7 @@
|
|||||||
placeholder="请尽量填写课程简介,用于列表中显示,可以让用户更容易了解课程信息">
|
placeholder="请尽量填写课程简介,用于列表中显示,可以让用户更容易了解课程信息">
|
||||||
</el-input>
|
</el-input>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<el-form-item label="AI设置">
|
<el-form-item label="AI设置">
|
||||||
<div>
|
<div>
|
||||||
<div style="display: flex; align-items: center;gap: 10px;">
|
<div style="display: flex; align-items: center;gap: 10px;">
|
||||||
@@ -338,7 +378,7 @@
|
|||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
<span>AI处理状态:</span>
|
<span>AI处理状态:</span>
|
||||||
</div>
|
</div>
|
||||||
<el-switch v-model="courseInfo.aiSet" :active-value="1" :inactive-value="0"></el-switch>
|
<el-switch v-model="courseInfo.aiSet" :active-value="1" :inactive-value="0"></el-switch>
|
||||||
</div>
|
</div>
|
||||||
<div v-show="courseInfo.aiSet==1">
|
<div v-show="courseInfo.aiSet==1">
|
||||||
<el-row :gutter="20" style="margin: 10px 0;">
|
<el-row :gutter="20" style="margin: 10px 0;">
|
||||||
@@ -581,6 +621,7 @@ export default {
|
|||||||
this.getSceneData();
|
this.getSceneData();
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
// ai播放器相关
|
||||||
...mapGetters(['resOwnerMap', 'sysTypeMap','userInfo','identity', 'selectAllLang']),
|
...mapGetters(['resOwnerMap', 'sysTypeMap','userInfo','identity', 'selectAllLang']),
|
||||||
catalogTree() {
|
catalogTree() {
|
||||||
let treeList = [];
|
let treeList = [];
|
||||||
@@ -990,6 +1031,7 @@ export default {
|
|||||||
this.dicts = result.dicts; //课程的老师信息
|
this.dicts = result.dicts; //课程的老师信息
|
||||||
console.log("--- 编辑查看 this.isPermission = ",this.isPermission)
|
console.log("--- 编辑查看 this.isPermission = ",this.isPermission)
|
||||||
console.log("--- 编辑查看 this.dicts = ",this.dicts)
|
console.log("--- 编辑查看 this.dicts = ",this.dicts)
|
||||||
|
// ai播放器相关
|
||||||
// 如果ai设置为空则给默认值 - 会看成新增状态
|
// 如果ai设置为空则给默认值 - 会看成新增状态
|
||||||
if(this.courseInfo.aiSet === null || this.courseInfo.aiSet === '' || this.courseInfo.aiSet === undefined){
|
if(this.courseInfo.aiSet === null || this.courseInfo.aiSet === '' || this.courseInfo.aiSet === undefined){
|
||||||
this.courseInfo.isAddAI = 1; //暂时是否是新增
|
this.courseInfo.isAddAI = 1; //暂时是否是新增
|
||||||
|
|||||||
@@ -119,6 +119,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="player-time">{{ currentTimeFormat }} / {{ fullTimeFormat }}</div>
|
<div class="player-time">{{ currentTimeFormat }} / {{ fullTimeFormat }}</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<div class="player-controls-bottom-right">
|
<div class="player-controls-bottom-right">
|
||||||
<div class="player-controls-btn box-aiTranslate">
|
<div class="player-controls-btn box-aiTranslate">
|
||||||
<div v-show="isSubtitle" class="player-controls-btn cursor-pointer btn-speed">
|
<div v-show="isSubtitle" class="player-controls-btn cursor-pointer btn-speed">
|
||||||
@@ -329,14 +330,17 @@ export default {
|
|||||||
fullTimeFormat: "00:00:00", // 视频总长度的文字
|
fullTimeFormat: "00:00:00", // 视频总长度的文字
|
||||||
barrageTimelineStart: 0, // 弹幕时间轴的起始时间点(手动调整进度条触发更新)
|
barrageTimelineStart: 0, // 弹幕时间轴的起始时间点(手动调整进度条触发更新)
|
||||||
isInit:false, // 是否初始化过
|
isInit:false, // 是否初始化过
|
||||||
|
// ai播放器相关
|
||||||
isSubtitle: true, // 是否开启字幕
|
isSubtitle: true, // 是否开启字幕
|
||||||
currentLangLabel:'', // 当前字幕语言
|
currentLangLabel:'', // 当前字幕语言
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
|
// ai播放器相关
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters(['selectableLang','currentLang'])
|
...mapGetters(['selectableLang','currentLang'])
|
||||||
},
|
},
|
||||||
created() {
|
created() {
|
||||||
|
// ai播放器相关
|
||||||
this.SET_currentLang('');
|
this.SET_currentLang('');
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -350,7 +354,7 @@ export default {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setInterval(() => {
|
setInterval(() => {
|
||||||
// console.log('当前状态:',this.currentProgress,this.isDrag,this.videoDom.currentTime , this.videoDom.duration)
|
console.log('当前状态:',this.currentProgress,this.isDrag,this.videoDom.currentTime , this.videoDom.duration)
|
||||||
// 视频播放时本地记录视频实时播放时长,视频设置了禁止拖动时执行
|
// 视频播放时本地记录视频实时播放时长,视频设置了禁止拖动时执行
|
||||||
if(!this.isDrag){
|
if(!this.isDrag){
|
||||||
var time = localStorage.getItem('videoProgressData')
|
var time = localStorage.getItem('videoProgressData')
|
||||||
@@ -397,7 +401,7 @@ export default {
|
|||||||
}
|
}
|
||||||
// 根据视频的readyState判断下一帧是否已加载,并控制loading的显示
|
// 根据视频的readyState判断下一帧是否已加载,并控制loading的显示
|
||||||
this.isShowLoading = this.videoDom.readyState < 3;
|
this.isShowLoading = this.videoDom.readyState < 3;
|
||||||
// console.log("当前缓存:"+this.videoDom.readyState)
|
console.log("当前缓存:"+this.videoDom.readyState)
|
||||||
if (this.videoDom.readyState < 3){
|
if (this.videoDom.readyState < 3){
|
||||||
console.log("详细信息",this.videoDom)
|
console.log("详细信息",this.videoDom)
|
||||||
console.log("卡了",this.videoDom.readyState)
|
console.log("卡了",this.videoDom.readyState)
|
||||||
@@ -444,6 +448,7 @@ export default {
|
|||||||
// });
|
// });
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// ai播放器相关
|
||||||
...mapMutations({
|
...mapMutations({
|
||||||
SET_currentLang: 'video/SET_currentLang',
|
SET_currentLang: 'video/SET_currentLang',
|
||||||
SET_currentTime: 'video/SET_currentTime',
|
SET_currentTime: 'video/SET_currentTime',
|
||||||
@@ -661,6 +666,7 @@ export default {
|
|||||||
},
|
},
|
||||||
onAudioTimeUpdate() {
|
onAudioTimeUpdate() {
|
||||||
const currentTime = this.$refs.video.currentTime;
|
const currentTime = this.$refs.video.currentTime;
|
||||||
|
// ai播放器相关
|
||||||
this.SET_currentTime(currentTime)
|
this.SET_currentTime(currentTime)
|
||||||
this.$emit('onTimeUpdate', currentTime);
|
this.$emit('onTimeUpdate', currentTime);
|
||||||
},
|
},
|
||||||
@@ -680,7 +686,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/** ai播放器相关
|
||||||
* 切换字幕
|
* 切换字幕
|
||||||
*/
|
*/
|
||||||
toggleSubtitle(value) {
|
toggleSubtitle(value) {
|
||||||
@@ -688,13 +694,13 @@ export default {
|
|||||||
if (!value) {
|
if (!value) {
|
||||||
// 关闭字幕
|
// 关闭字幕
|
||||||
this.videoDom.textTracks[this.videoDom.textTracks.length - 1].mode = 'hidden';
|
this.videoDom.textTracks[this.videoDom.textTracks.length - 1].mode = 'hidden';
|
||||||
} else {
|
} else {
|
||||||
// 打开字幕
|
// 打开字幕
|
||||||
this.videoDom.textTracks[this.videoDom.textTracks.length - 1].mode = 'showing';
|
this.videoDom.textTracks[this.videoDom.textTracks.length - 1].mode = 'showing';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/** ai播放器相关
|
||||||
* 切换字幕语言
|
* 切换字幕语言
|
||||||
*/
|
*/
|
||||||
changeLang(item) {
|
changeLang(item) {
|
||||||
@@ -721,17 +727,17 @@ export default {
|
|||||||
trackEl.label = item.label;
|
trackEl.label = item.label;
|
||||||
trackEl.src = item.srcUrl;
|
trackEl.src = item.srcUrl;
|
||||||
trackEl.default = true; // 确保字幕默认启用
|
trackEl.default = true; // 确保字幕默认启用
|
||||||
|
|
||||||
// 使用箭头函数保持this上下文
|
// 使用箭头函数保持this上下文
|
||||||
trackEl.addEventListener('load', () => {
|
trackEl.addEventListener('load', () => {
|
||||||
console.log('字幕加载成功!');
|
console.log('字幕加载成功!');
|
||||||
// console.log('#########Track cues:', trackEl.track.cues);
|
// console.log('#########Track cues:', trackEl.track.cues);
|
||||||
});
|
});
|
||||||
|
|
||||||
trackEl.addEventListener('error', () => {
|
trackEl.addEventListener('error', () => {
|
||||||
console.error('字幕加载失败!');
|
console.error('字幕加载失败!');
|
||||||
});
|
});
|
||||||
|
|
||||||
// 确保视频已加载到可添加轨道的状态
|
// 确保视频已加载到可添加轨道的状态
|
||||||
if (this.videoDom.readyState >= 1) {
|
if (this.videoDom.readyState >= 1) {
|
||||||
this.videoDom.appendChild(trackEl);
|
this.videoDom.appendChild(trackEl);
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ const getters = {
|
|||||||
studyTaskCount:state => state.user.studyTaskCount,
|
studyTaskCount:state => state.user.studyTaskCount,
|
||||||
praisesUnicom:state =>state.pdf.praisesUnicom,
|
praisesUnicom:state =>state.pdf.praisesUnicom,
|
||||||
favoritesUnicom:state =>state.pdf.favoritesUnicom,
|
favoritesUnicom:state =>state.pdf.favoritesUnicom,
|
||||||
|
// ai播放器相关
|
||||||
selectAllLang:state => state.video.selectAllLang,
|
selectAllLang:state => state.video.selectAllLang,
|
||||||
selectableLang:state => state.video.selectableLang,
|
selectableLang:state => state.video.selectableLang,
|
||||||
currentLang:state => state.video.currentLang,
|
currentLang:state => state.video.currentLang,
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import resOwner from './modules/resOwner'
|
|||||||
import majorType from './modules/majorType'
|
import majorType from './modules/majorType'
|
||||||
import orgDomain from './modules/orgDomain'
|
import orgDomain from './modules/orgDomain'
|
||||||
import pdf from './modules/pdf'
|
import pdf from './modules/pdf'
|
||||||
import video from './modules/video'
|
import video from './modules/video' // ai播放器相关
|
||||||
|
|
||||||
Vue.use(Vuex)
|
Vue.use(Vuex)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
|
// ai播放器相关
|
||||||
const state = {
|
const state = {
|
||||||
selectAllLang: [
|
selectAllLang: [
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -60,19 +60,21 @@
|
|||||||
</div>
|
</div>
|
||||||
<div style="width:390px">
|
<div style="width:390px">
|
||||||
<el-button type="primary" @click="searchData(true)" icon="el-icon-search" >搜索</el-button>
|
<el-button type="primary" @click="searchData(true)" icon="el-icon-search" >搜索</el-button>
|
||||||
<el-button icon="el-icon-refresh-right" type="primary" style="margin-left:5px" @click="reset">重置</el-button>
|
<el-button icon="el-icon-refresh-right" type="primary" style="margin-left:5px" @click="reset">重置</el-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<el-row :gutter="20" style="margin-top:10px">
|
<el-row :gutter="20" style="margin-top:10px">
|
||||||
<el-col :span="24">
|
<!-- ai播放器相关 -->
|
||||||
<!-- <el-button icon="el-icon-folder" type="primary" size="small">导出</el-button> -->
|
<el-col :span="24">
|
||||||
<el-button class="Create-coures" type="primary" @click="addNewCourse()" icon="el-icon-plus">新建课程</el-button>
|
<!-- <el-button icon="el-icon-folder" type="primary" size="small">导出</el-button> -->
|
||||||
<el-button type="primary" @click="setLanguage()" icon="el-icon-connection" :disabled="selectedCourses.length === 0">设置语种</el-button>
|
<el-button class="Create-coures" type="primary" @click="addNewCourse()" icon="el-icon-plus">新建课程</el-button>
|
||||||
<el-button type="primary" @click="enableAI()" icon="el-icon-switch-button" :disabled="selectedCourses.length === 0">开启AI处理</el-button>
|
<el-button type="primary" @click="setLanguage()" icon="el-icon-connection" :disabled="selectedCourses.length === 0">设置语种</el-button>
|
||||||
</el-col >
|
<el-button type="primary" @click="enableAI()" icon="el-icon-switch-button" :disabled="selectedCourses.length === 0">开启AI处理</el-button>
|
||||||
|
</el-col >
|
||||||
</el-row>
|
</el-row>
|
||||||
</div>
|
</div>
|
||||||
<div style="margin-right:30px;">
|
<div style="margin-right:30px;">
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<el-table style="margin:10px 32px 10px 22px;" :data="pageData" border stripe @selection-change="handleSelectionChange">
|
<el-table style="margin:10px 32px 10px 22px;" :data="pageData" border stripe @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55"></el-table-column>
|
<el-table-column type="selection" width="55"></el-table-column>
|
||||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||||
@@ -139,6 +141,7 @@
|
|||||||
<el-table-column label="操作" width="180px" fixed="right">
|
<el-table-column label="操作" width="180px" fixed="right">
|
||||||
<template slot-scope="scope" class="btn-gl">
|
<template slot-scope="scope" class="btn-gl">
|
||||||
<!-- 20240621 修改scope.row.isPermission = fasle 时不展示操作按钮-->
|
<!-- 20240621 修改scope.row.isPermission = fasle 时不展示操作按钮-->
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<el-button v-if="scope.row.isPermission && scope.row.status != 2" type="text" size="mini" @click="setAI(scope.row)">AI设置</el-button>
|
<el-button v-if="scope.row.isPermission && scope.row.status != 2" type="text" size="mini" @click="setAI(scope.row)">AI设置</el-button>
|
||||||
<el-button type="text" size="mini" v-if="scope.row.isPermission && scope.row.status == 5 && !scope.row.published" @click="releaseData(scope.row)">发布</el-button>
|
<el-button type="text" size="mini" v-if="scope.row.isPermission && scope.row.status == 5 && !scope.row.published" @click="releaseData(scope.row)">发布</el-button>
|
||||||
<el-button v-if="scope.row.isPermission && pageManage && scope.row.published" @click="showStudent(scope.row)" type="text" size="mini">学员</el-button>
|
<el-button v-if="scope.row.isPermission && pageManage && scope.row.published" @click="showStudent(scope.row)" type="text" size="mini">学员</el-button>
|
||||||
@@ -291,7 +294,8 @@
|
|||||||
<div>
|
<div>
|
||||||
<course-form ref="courseForm" @submitSuccess="searchData" @close="searchData"></course-form>
|
<course-form ref="courseForm" @submitSuccess="searchData" @close="searchData"></course-form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<!-- 设置语种弹框 -->
|
<!-- 设置语种弹框 -->
|
||||||
<el-dialog
|
<el-dialog
|
||||||
title="AI翻译"
|
title="AI翻译"
|
||||||
@@ -316,14 +320,14 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
<div style="color: #ff4d4f; font-size: 12px;">
|
<div style="color: #ff4d4f; font-size: 12px;">
|
||||||
注:仅支持对已开启AI处理的课程进行批量语种设置;所选的课程中已超过X个未开启AI处理的课程,以上配置仅对X个已开启AI处理的课程生效。
|
注:仅支持对已开启AI处理的课程进行批量语种设置;所选的课程中有{{languageSetting.aiSetNoNum}}个未开启AI处理的课程,以上配置仅对{{languageSetting.aiSetNum}}个已开启AI处理的课程生效。
|
||||||
</div>
|
</div>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<el-button @click="languageSetting.dlgShow = false">取消</el-button>
|
<el-button @click="languageSetting.dlgShow = false">取消</el-button>
|
||||||
<el-button type="primary" @click="confirmLanguageSetting">确认</el-button>
|
<el-button type="primary" @click="confirmLanguageSetting">确认</el-button>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- 开启AI处理弹框 -->
|
<!-- 开启AI处理弹框 -->
|
||||||
<el-dialog
|
<el-dialog
|
||||||
title="开启AI处理"
|
title="开启AI处理"
|
||||||
@@ -333,11 +337,12 @@
|
|||||||
<div class="ai-process-dialog">
|
<div class="ai-process-dialog">
|
||||||
<!-- AI处理状态 -->
|
<!-- AI处理状态 -->
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<span class="form-label">
|
<span class="form-label">
|
||||||
<el-tooltip class="item" effect="dark" content="是否将课程进行AI处理" placement="top">
|
<el-tooltip class="item" effect="dark" content="是否将课程进行AI处理" placement="top">
|
||||||
<i class="el-icon-question"></i>
|
<i class="el-icon-question"></i>
|
||||||
</el-tooltip>
|
</el-tooltip>
|
||||||
AI处理状态:</span>
|
AI处理状态:
|
||||||
|
</span>
|
||||||
<span class="status-text">
|
<span class="status-text">
|
||||||
{{ aiProcessSetting.aiSet === 1 ? '已开启' : '已关闭' }}
|
{{ aiProcessSetting.aiSet === 1 ? '已开启' : '已关闭' }}
|
||||||
</span>
|
</span>
|
||||||
@@ -347,8 +352,8 @@
|
|||||||
:inactive-value="0"
|
:inactive-value="0"
|
||||||
></el-switch>
|
></el-switch>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div>
|
<div v-show="aiProcessSetting.aiSet === 1">
|
||||||
<!-- 是否生成AI摘要 -->
|
<!-- 是否生成AI摘要 -->
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<span class="form-label">是否需要生成AI摘要:</span>
|
<span class="form-label">是否需要生成AI摘要:</span>
|
||||||
@@ -357,7 +362,7 @@
|
|||||||
<el-radio :label="0">否</el-radio>
|
<el-radio :label="0">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 是否生成AI文稿 -->
|
<!-- 是否生成AI文稿 -->
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<span class="form-label">是否需要生成AI文稿:</span>
|
<span class="form-label">是否需要生成AI文稿:</span>
|
||||||
@@ -366,7 +371,7 @@
|
|||||||
<el-radio :label="0">否</el-radio>
|
<el-radio :label="0">否</el-radio>
|
||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 课程支持语种选择 -->
|
<!-- 课程支持语种选择 -->
|
||||||
<div class="form-item" style="flex-flow: column;align-items: baseline;">
|
<div class="form-item" style="flex-flow: column;align-items: baseline;">
|
||||||
<span class="form-label">请选择该课程所支持语种:</span>
|
<span class="form-label">请选择该课程所支持语种:</span>
|
||||||
@@ -385,10 +390,10 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 提示信息 -->
|
<!-- 提示信息 -->
|
||||||
<div class="tips">
|
<div class="tips">
|
||||||
<span>注:已跳过x个已开启AI处理的课程,仅更新剩余x个</span>
|
<span>注:已跳过{{aiProcessSetting.aiSetNum}}个已开启AI处理的课程,仅更新剩余{{aiProcessSetting.aiSetNoNum}}个</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
@@ -396,7 +401,7 @@
|
|||||||
<el-button type="primary" @click="confirmAiProcess">确认</el-button>
|
<el-button type="primary" @click="confirmAiProcess">确认</el-button>
|
||||||
</span>
|
</span>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
<!-- AI设置弹框 -->
|
<!-- AI设置弹框 -->
|
||||||
<el-dialog
|
<el-dialog
|
||||||
title="AI设置"
|
title="AI设置"
|
||||||
@@ -404,7 +409,7 @@
|
|||||||
width="500px"
|
width="500px"
|
||||||
>
|
>
|
||||||
<div class="ai-setting-dialog">
|
<div class="ai-setting-dialog">
|
||||||
|
|
||||||
<!-- AI功能状态 -->
|
<!-- AI功能状态 -->
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<span class="form-label">
|
<span class="form-label">
|
||||||
@@ -422,67 +427,67 @@
|
|||||||
:inactive-value="0"
|
:inactive-value="0"
|
||||||
></el-switch>
|
></el-switch>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-show="aiSetting.aiSet === 1">
|
||||||
<!-- AI摘要状态 -->
|
<!-- AI摘要状态 -->
|
||||||
<div class="form-item">
|
<div class="form-item">
|
||||||
<span class="form-label">AI摘要状态:</span>
|
<span class="form-label">AI摘要状态:</span>
|
||||||
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiAbstract === 1}">
|
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiAbstract === 1}">
|
||||||
{{ aiSetting.aiAbstract === 1 ? '已上架' : '已下架' }}
|
{{ aiSetting.aiAbstract === 1 ? '已上架' : '已下架' }}
|
||||||
</span>
|
</span>
|
||||||
<div class="action-buttons">
|
<div class="action-buttons">
|
||||||
<el-button type="text" @click="aiSetting.aiAbstract = 0">
|
<el-button type="text" @click="aiSetting.aiAbstract = 0">
|
||||||
{{ aiSetting.aiAbstract === 0 ? '上架' : '下架' }}
|
{{ aiSetting.aiAbstract === 0 ? '上架' : '下架' }}
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button type="text" >编辑</el-button>
|
<el-button type="text" >编辑</el-button>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- AI文稿状态 -->
|
|
||||||
<div class="form-item">
|
|
||||||
<span class="form-label">AI文稿状态:</span>
|
|
||||||
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiDraft === 1}">
|
|
||||||
{{ aiSetting.aiDraft === 1 ? '已上架' : '已下架' }}
|
|
||||||
</span>
|
|
||||||
<div class="action-buttons">
|
|
||||||
<el-button type="text" @click="aiSetting.aiDraft = 0">
|
|
||||||
{{ aiSetting.aiDraft === 0 ? '上架' : '下架' }}
|
|
||||||
</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- AI翻译状态 -->
|
|
||||||
<div class="form-item">
|
|
||||||
<span class="form-label">AI翻译状态:</span>
|
|
||||||
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiTranslate === 1}">
|
|
||||||
{{ aiSetting.aiTranslate === 1 ? '已上架' : '已下架' }}
|
|
||||||
</span>
|
|
||||||
<div class="action-buttons">
|
|
||||||
<el-button type="text" @click="aiSetting.aiTranslate = 0">
|
|
||||||
{{ aiSetting.aiTranslate === 0 ? '上架' : '下架' }}
|
|
||||||
</el-button>
|
|
||||||
<el-button type="text" >编辑</el-button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<!-- 支持语种 -->
|
|
||||||
<div class="form-item">
|
|
||||||
<span class="form-label">支持语种:</span>
|
|
||||||
<div class="languages-list">
|
|
||||||
<div class="language-tag">
|
|
||||||
中文
|
|
||||||
<span class="status-badge">已下架</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="language-tag">
|
</div>
|
||||||
英语
|
|
||||||
<span class="status-badge">生成中</span>
|
<!-- AI文稿状态 -->
|
||||||
|
<div class="form-item">
|
||||||
|
<span class="form-label">AI文稿状态:</span>
|
||||||
|
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiDraft === 1}">
|
||||||
|
{{ aiSetting.aiDraft === 1 ? '已上架' : '已下架' }}
|
||||||
|
</span>
|
||||||
|
<div class="action-buttons">
|
||||||
|
<el-button type="text" @click="aiSetting.aiDraft = 0">
|
||||||
|
{{ aiSetting.aiDraft === 0 ? '上架' : '下架' }}
|
||||||
|
</el-button>
|
||||||
</div>
|
</div>
|
||||||
<div class="language-tag">
|
</div>
|
||||||
越南语
|
|
||||||
<span class="status-badge status-badge--active">已上架</span>
|
<!-- AI翻译状态 -->
|
||||||
|
<div class="form-item">
|
||||||
|
<span class="form-label">AI翻译状态:</span>
|
||||||
|
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiTranslate === 1}">
|
||||||
|
{{ aiSetting.aiTranslate === 1 ? '已上架' : '已下架' }}
|
||||||
|
</span>
|
||||||
|
<div class="action-buttons">
|
||||||
|
<el-button type="text" @click="aiSetting.aiTranslate = 0">
|
||||||
|
{{ aiSetting.aiTranslate === 0 ? '上架' : '下架' }}
|
||||||
|
</el-button>
|
||||||
|
<el-button type="text" >编辑</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<!-- 支持语种 -->
|
||||||
|
<div class="form-item">
|
||||||
|
<span class="form-label">支持语种:</span>
|
||||||
|
<div class="languages-list">
|
||||||
|
<div class="language-tag">
|
||||||
|
中文
|
||||||
|
<span class="status-badge">已下架</span>
|
||||||
|
</div>
|
||||||
|
<div class="language-tag">
|
||||||
|
英语
|
||||||
|
<span class="status-badge">生成中</span>
|
||||||
|
</div>
|
||||||
|
<div class="language-tag">
|
||||||
|
越南语
|
||||||
|
<span class="status-badge status-badge--active">已上架</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<span slot="footer" class="dialog-footer">
|
<span slot="footer" class="dialog-footer">
|
||||||
<el-button @click="aiSetting.dlgShow = false">取消</el-button>
|
<el-button @click="aiSetting.dlgShow = false">取消</el-button>
|
||||||
@@ -509,6 +514,7 @@ import apiUserbasic from "@/api/boe/userbasic.js"
|
|||||||
export default {
|
export default {
|
||||||
name: 'manageCourse',
|
name: 'manageCourse',
|
||||||
components: {courseForm, manager, auditCourse1, auditCourse2,adminPage},
|
components: {courseForm, manager, auditCourse1, auditCourse2,adminPage},
|
||||||
|
// ai播放器相关
|
||||||
computed: {
|
computed: {
|
||||||
...mapGetters(['resOwnerMap','sysTypeMap','userInfo', 'selectAllLang']),
|
...mapGetters(['resOwnerMap','sysTypeMap','userInfo', 'selectAllLang']),
|
||||||
},
|
},
|
||||||
@@ -594,27 +600,28 @@ export default {
|
|||||||
},
|
},
|
||||||
extendRefId:'',
|
extendRefId:'',
|
||||||
extendRefType:'',
|
extendRefType:'',
|
||||||
|
// ai播放器相关
|
||||||
selectedCourses: [], //已选课程
|
selectedCourses: [], //已选课程
|
||||||
languageSetting: {
|
languageSetting: { // 设置语种弹框
|
||||||
dlgShow: false,
|
dlgShow: false,
|
||||||
languageCode: ['zh-CN', 'en-US'] // 默认选中的语种
|
languageCode: ['zh-CN', 'en-US'] // 默认选中的语种
|
||||||
},
|
},
|
||||||
aiProcessSetting: {
|
aiProcessSetting: { // 开启AI处理弹框
|
||||||
dlgShow: false,
|
dlgShow: false,
|
||||||
aiSet: 1,
|
aiSet: 1,
|
||||||
aiAbstract: 1,
|
aiAbstract: 1,
|
||||||
aiDraft: 1,
|
aiDraft: 1,
|
||||||
languageCode: ['zh-CN', 'en-US'] // 默认选中的语种
|
languageCode: ['zh-CN', 'en-US'] // 默认选中的语种
|
||||||
},
|
},
|
||||||
aiSetting: {
|
aiSetting: { // AI设置弹框
|
||||||
dlgShow: false,
|
dlgShow: false,
|
||||||
courseId: '',
|
courseId: '',
|
||||||
aiSet: 1,
|
aiSet: 1,
|
||||||
aiAbstract: 1, // 1:上架 0:下架
|
aiAbstract: 1, // 1:上架 0:下架
|
||||||
aiDraft: 1, // 1:上架 0:下架
|
aiDraft: 1, // 1:上架 0:下架
|
||||||
aiTranslate: 1, // 1:上架 0:下架
|
aiTranslate: 1, // 1:上架 0:下架
|
||||||
languageCode: ['zh-CN', 'en-US', 'vi-VN'] // 支持的语种
|
languageCode: ['zh-CN', 'en-US', 'vi-VN'] // 支持的语种
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
mounted() {
|
mounted() {
|
||||||
@@ -661,9 +668,6 @@ export default {
|
|||||||
//出现学员管理
|
//出现学员管理
|
||||||
window.parent.openSelectStu(row);
|
window.parent.openSelectStu(row);
|
||||||
},
|
},
|
||||||
handleSelectionChange(val){
|
|
||||||
this.selectedCourses = val;
|
|
||||||
},
|
|
||||||
handleChoose(row){ //选择课程
|
handleChoose(row){ //选择课程
|
||||||
window.parent.selectCourse(row);
|
window.parent.selectCourse(row);
|
||||||
},
|
},
|
||||||
@@ -675,32 +679,7 @@ export default {
|
|||||||
inputOn() {
|
inputOn() {
|
||||||
this.$forceUpdate();
|
this.$forceUpdate();
|
||||||
},
|
},
|
||||||
// AI设置
|
|
||||||
setAI(row) {
|
|
||||||
this.aiSetting.courseId = row.id;
|
|
||||||
// 这里可以添加获取当前课程AI设置的逻辑
|
|
||||||
this.aiSetting.dlgShow = true;
|
|
||||||
},
|
|
||||||
|
|
||||||
// 确认AI设置
|
|
||||||
confirmAISetting() {
|
|
||||||
const { courseId, aiSet, aiAbstract, aiDraft, aiTranslate } = this.aiSetting;
|
|
||||||
|
|
||||||
// 这里可以添加保存AI设置的API调用
|
|
||||||
console.log('保存AI设置', {
|
|
||||||
courseId,
|
|
||||||
aiSet,
|
|
||||||
aiAbstract,
|
|
||||||
aiDraft,
|
|
||||||
aiTranslate
|
|
||||||
});
|
|
||||||
|
|
||||||
// 模拟成功保存
|
|
||||||
this.$message.success('AI设置保存成功');
|
|
||||||
this.aiSetting.dlgShow = false;
|
|
||||||
// 可以选择是否刷新列表数据
|
|
||||||
},
|
|
||||||
|
|
||||||
// 置顶
|
// 置顶
|
||||||
setTop(row) {
|
setTop(row) {
|
||||||
let params = {
|
let params = {
|
||||||
@@ -1089,92 +1068,6 @@ export default {
|
|||||||
// }
|
// }
|
||||||
// this.$message({ message: msg, type: 'success', offset: 50 });
|
// this.$message({ message: msg, type: 'success', offset: 50 });
|
||||||
// },
|
// },
|
||||||
setLanguage() {
|
|
||||||
if (this.selectedCourses.length > 0) {
|
|
||||||
this.languageSetting.dlgShow = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
enableAI() {
|
|
||||||
// 开启AI处理按钮点击事件
|
|
||||||
if (this.selectedCourses.length > 0) {
|
|
||||||
this.aiProcessSetting.dlgShow = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
async confirmLanguageSetting() {
|
|
||||||
try {
|
|
||||||
// 收集选中的课程ID
|
|
||||||
const courseIds = this.selectedCourses.map(course => course.id).join(',');
|
|
||||||
// 获取选择的语种
|
|
||||||
const languages = this.languageSetting.selectedLanguages.join(',');
|
|
||||||
|
|
||||||
// 这里可以根据实际需求调用API进行语种设置
|
|
||||||
console.log('批量设置课程语种', { courseIds, languages });
|
|
||||||
|
|
||||||
// 显示成功提示
|
|
||||||
this.$message({
|
|
||||||
type: 'success',
|
|
||||||
message: `已成功为${this.selectedCourses.length}个课程设置语种`,
|
|
||||||
offset: 50
|
|
||||||
});
|
|
||||||
|
|
||||||
// 关闭弹框
|
|
||||||
this.languageSetting.dlgShow = false;
|
|
||||||
|
|
||||||
// 刷新数据(如果需要)
|
|
||||||
// this.searchData();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('设置语种失败', error);
|
|
||||||
this.$message({
|
|
||||||
type: 'error',
|
|
||||||
message: '设置语种失败,请稍后重试',
|
|
||||||
offset: 50
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
async confirmAiProcess() {
|
|
||||||
try {
|
|
||||||
// 收集选中的课程ID
|
|
||||||
const courseIds = this.selectedCourses.map(course => course.id).join(',');
|
|
||||||
// 获取AI处理配置
|
|
||||||
const { aiSet, aiAbstract, aiDraft, selectedLanguages } = this.aiProcessSetting;
|
|
||||||
|
|
||||||
// 这里可以根据实际需求调用API进行AI处理设置
|
|
||||||
console.log('批量开启AI处理', {
|
|
||||||
courseIds,
|
|
||||||
aiSet,
|
|
||||||
aiAbstract,
|
|
||||||
aiDraft,
|
|
||||||
languages: selectedLanguages.join(',')
|
|
||||||
});
|
|
||||||
|
|
||||||
// 模拟计算跳过和更新的课程数量
|
|
||||||
const totalCourses = this.selectedCourses.length;
|
|
||||||
const skippedCount = Math.floor(totalCourses * 0.2); // 假设20%的课程已开启AI处理
|
|
||||||
const updatedCount = totalCourses - skippedCount;
|
|
||||||
|
|
||||||
// 显示成功提示
|
|
||||||
this.$message({
|
|
||||||
type: 'success',
|
|
||||||
message: `已跳过${skippedCount}个已开启AI处理的课程,成功为${updatedCount}个课程更新AI处理设置`,
|
|
||||||
offset: 50
|
|
||||||
});
|
|
||||||
|
|
||||||
// 关闭弹框
|
|
||||||
this.aiProcessSetting.dlgShow = false;
|
|
||||||
|
|
||||||
// 刷新数据
|
|
||||||
this.searchData();
|
|
||||||
} catch (error) {
|
|
||||||
console.error('开启AI处理失败', error);
|
|
||||||
this.$message({
|
|
||||||
type: 'error',
|
|
||||||
message: '开启AI处理失败,请稍后重试',
|
|
||||||
offset: 50
|
|
||||||
});
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
delItem(row) {
|
delItem(row) {
|
||||||
this.$confirm('您确定要删除所选课程吗?', '删除提示', {
|
this.$confirm('您确定要删除所选课程吗?', '删除提示', {
|
||||||
confirmButtonText: '确定',
|
confirmButtonText: '确定',
|
||||||
@@ -1223,6 +1116,143 @@ export default {
|
|||||||
saveNewCatalogZhang() {
|
saveNewCatalogZhang() {
|
||||||
this.catalogs.addNewZhang = false;
|
this.catalogs.addNewZhang = false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
// ai播放器相关
|
||||||
|
handleSelectionChange(val){
|
||||||
|
this.selectedCourses = val;
|
||||||
|
console.log(val);
|
||||||
|
},
|
||||||
|
// 获取选中课程的AI信息
|
||||||
|
getAIInfoByList(list = []) {
|
||||||
|
let selectNum = 0; // 选中的课程数量
|
||||||
|
let aiSetNum = 0; // 已设置AI的课程数量
|
||||||
|
let aiSetNoNum = 0; // 未设置AI的课程数量
|
||||||
|
list.forEach(item => {
|
||||||
|
if(item.aiSet === 1){
|
||||||
|
aiSetNum++;
|
||||||
|
}else{
|
||||||
|
aiSetNoNum++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return {
|
||||||
|
selectNum,
|
||||||
|
aiSetNum,
|
||||||
|
aiSetNoNum
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// AI设置
|
||||||
|
setAI(row) {
|
||||||
|
this.aiSetting.courseId = row.id;
|
||||||
|
// 这里可以添加获取当前课程AI设置的逻辑
|
||||||
|
this.aiSetting.dlgShow = true;
|
||||||
|
},
|
||||||
|
|
||||||
|
// 确认AI设置
|
||||||
|
confirmAISetting() {
|
||||||
|
const { courseId, aiSet, aiAbstract, aiDraft, aiTranslate } = this.aiSetting;
|
||||||
|
|
||||||
|
// 这里可以添加保存AI设置的API调用
|
||||||
|
console.log('保存AI设置', {
|
||||||
|
courseId,
|
||||||
|
aiSet,
|
||||||
|
aiAbstract,
|
||||||
|
aiDraft,
|
||||||
|
aiTranslate
|
||||||
|
});
|
||||||
|
|
||||||
|
// 模拟成功保存
|
||||||
|
this.$message.success('AI设置保存成功');
|
||||||
|
this.aiSetting.dlgShow = false;
|
||||||
|
// 可以选择是否刷新列表数据
|
||||||
|
},
|
||||||
|
setLanguage() {
|
||||||
|
if (this.selectedCourses.length > 0) {
|
||||||
|
this.languageSetting = {...this.languageSetting, ...this.getAIInfoByList(this.selectedCourses)}
|
||||||
|
this.languageSetting.dlgShow = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
enableAI() {
|
||||||
|
// 开启AI处理按钮点击事件
|
||||||
|
if (this.selectedCourses.length > 0) {
|
||||||
|
this.aiProcessSetting = {...this.aiProcessSetting, ...this.getAIInfoByList(this.selectedCourses)}
|
||||||
|
this.aiProcessSetting.dlgShow = true;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async confirmLanguageSetting() {
|
||||||
|
try {
|
||||||
|
// 收集选中的课程ID
|
||||||
|
const courseIds = this.selectedCourses.map(course => course.id).join(',');
|
||||||
|
// 获取选择的语种
|
||||||
|
const languages = this.languageSetting.selectedLanguages.join(',');
|
||||||
|
|
||||||
|
// 这里可以根据实际需求调用API进行语种设置
|
||||||
|
console.log('批量设置课程语种', { courseIds, languages });
|
||||||
|
|
||||||
|
// 显示成功提示
|
||||||
|
this.$message({
|
||||||
|
type: 'success',
|
||||||
|
message: `已成功为${this.selectedCourses.length}个课程设置语种`,
|
||||||
|
offset: 50
|
||||||
|
});
|
||||||
|
|
||||||
|
// 关闭弹框
|
||||||
|
this.languageSetting.dlgShow = false;
|
||||||
|
|
||||||
|
// 刷新数据(如果需要)
|
||||||
|
// this.searchData();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('设置语种失败', error);
|
||||||
|
this.$message({
|
||||||
|
type: 'error',
|
||||||
|
message: '设置语种失败,请稍后重试',
|
||||||
|
offset: 50
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
async confirmAiProcess() {
|
||||||
|
try {
|
||||||
|
// 收集选中的课程ID
|
||||||
|
const courseIds = this.selectedCourses.map(course => course.id).join(',');
|
||||||
|
// 获取AI处理配置
|
||||||
|
const { aiSet, aiAbstract, aiDraft, selectedLanguages } = this.aiProcessSetting;
|
||||||
|
|
||||||
|
// 这里可以根据实际需求调用API进行AI处理设置
|
||||||
|
console.log('批量开启AI处理', {
|
||||||
|
courseIds,
|
||||||
|
aiSet,
|
||||||
|
aiAbstract,
|
||||||
|
aiDraft,
|
||||||
|
languages: selectedLanguages.join(',')
|
||||||
|
});
|
||||||
|
|
||||||
|
// 模拟计算跳过和更新的课程数量
|
||||||
|
const totalCourses = this.selectedCourses.length;
|
||||||
|
const skippedCount = Math.floor(totalCourses * 0.2); // 假设20%的课程已开启AI处理
|
||||||
|
const updatedCount = totalCourses - skippedCount;
|
||||||
|
|
||||||
|
// 显示成功提示
|
||||||
|
this.$message({
|
||||||
|
type: 'success',
|
||||||
|
message: `已跳过${skippedCount}个已开启AI处理的课程,成功为${updatedCount}个课程更新AI处理设置`,
|
||||||
|
offset: 50
|
||||||
|
});
|
||||||
|
|
||||||
|
// 关闭弹框
|
||||||
|
this.aiProcessSetting.dlgShow = false;
|
||||||
|
|
||||||
|
// 刷新数据
|
||||||
|
this.searchData();
|
||||||
|
} catch (error) {
|
||||||
|
console.error('开启AI处理失败', error);
|
||||||
|
this.$message({
|
||||||
|
type: 'error',
|
||||||
|
message: '开启AI处理失败,请稍后重试',
|
||||||
|
offset: 50
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -376,7 +376,7 @@
|
|||||||
<div class="couresstartTime">
|
<div class="couresstartTime">
|
||||||
<span v-if="cinfo.type == 30 && cinfo.startTime">开课时间:{{ cinfo.startTime }}</span>
|
<span v-if="cinfo.type == 30 && cinfo.startTime">开课时间:{{ cinfo.startTime }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<div class="course-info" style="align-items: center;">
|
<div class="course-info" style="align-items: center;">
|
||||||
<el-popover
|
<el-popover
|
||||||
placement="top-start"
|
placement="top-start"
|
||||||
@@ -2439,7 +2439,8 @@ console.log(res.result.list,'data')
|
|||||||
.option-active {
|
.option-active {
|
||||||
color: #387DF7;
|
color: #387DF7;
|
||||||
}</style>
|
}</style>
|
||||||
<style lang="scss">
|
<!-- ai播放器相关 -->
|
||||||
|
<style lang="scss">
|
||||||
.course-popover{
|
.course-popover{
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
box-shadow: 0px 0px 16px 0px rgba(0, 0, 0, 0.12);
|
box-shadow: 0px 0px 16px 0px rgba(0, 0, 0, 0.12);
|
||||||
|
|||||||
@@ -647,6 +647,7 @@
|
|||||||
:score="courseInfo.score"
|
:score="courseInfo.score"
|
||||||
></my-note>
|
></my-note>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<!-- ai文稿 -->
|
<!-- ai文稿 -->
|
||||||
<div class="ai-script" v-if="tab == 3">
|
<div class="ai-script" v-if="tab == 3">
|
||||||
<ai-script ref="aiscript" @changeCurrentTime="changeCurrentTime"></ai-script>
|
<ai-script ref="aiscript" @changeCurrentTime="changeCurrentTime"></ai-script>
|
||||||
@@ -663,6 +664,7 @@
|
|||||||
>
|
>
|
||||||
内容简介<span class=""></span>
|
内容简介<span class=""></span>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<div
|
<div
|
||||||
@click="coutab(4)"
|
@click="coutab(4)"
|
||||||
style="position: relative;"
|
style="position: relative;"
|
||||||
@@ -743,6 +745,7 @@
|
|||||||
></note-comments>
|
></note-comments>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<!-- ai播放器相关 -->
|
||||||
<div
|
<div
|
||||||
v-show="courestab == 4"
|
v-show="courestab == 4"
|
||||||
style="padding-left: 17px; padding-top: 20px;background-color: #fff;"
|
style="padding-left: 17px; padding-top: 20px;background-color: #fff;"
|
||||||
@@ -1004,6 +1007,7 @@ export default {
|
|||||||
this.loadData();
|
this.loadData();
|
||||||
},
|
},
|
||||||
computed: {
|
computed: {
|
||||||
|
// ai播放器相关
|
||||||
...mapGetters(["userInfo", 'selectableLang']),
|
...mapGetters(["userInfo", 'selectableLang']),
|
||||||
catalogTree() {
|
catalogTree() {
|
||||||
let treeList = [];
|
let treeList = [];
|
||||||
@@ -1040,6 +1044,7 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
// ai播放器相关
|
||||||
// 处理从AI文稿组件传递过来的时间跳转事件
|
// 处理从AI文稿组件传递过来的时间跳转事件
|
||||||
changeCurrentTime(time) {
|
changeCurrentTime(time) {
|
||||||
console.log(time,'time')
|
console.log(time,'time')
|
||||||
@@ -1211,7 +1216,7 @@ export default {
|
|||||||
this.curriculumData.url = r.content;
|
this.curriculumData.url = r.content;
|
||||||
}
|
}
|
||||||
this.$refs.mynote.showVideoTimeBtn(true);
|
this.$refs.mynote.showVideoTimeBtn(true);
|
||||||
// 视频类型加载ai相关功能
|
// ai播放器相关 - 视频类型加载ai相关功能
|
||||||
if (r.contentType == 10) {
|
if (r.contentType == 10) {
|
||||||
this.handleAIVideo(r.boeaiSubtitleRspList, r);
|
this.handleAIVideo(r.boeaiSubtitleRspList, r);
|
||||||
}
|
}
|
||||||
@@ -1377,7 +1382,7 @@ export default {
|
|||||||
localStorage.setItem("videoProgressData", JSON.stringify(arr));
|
localStorage.setItem("videoProgressData", JSON.stringify(arr));
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
// 视频处理 - 处理ai相关功能
|
// ai播放器相关 - 视频处理
|
||||||
handleAIVideo(list = [], r) {
|
handleAIVideo(list = [], r) {
|
||||||
this.SET_selectableLang(list);
|
this.SET_selectableLang(list);
|
||||||
console.log("ai处理", this.selectableLang);
|
console.log("ai处理", this.selectableLang);
|
||||||
@@ -1768,7 +1773,7 @@ export default {
|
|||||||
courseId: this.contentData.courseId,
|
courseId: this.contentData.courseId,
|
||||||
contentId: this.contentData.id,
|
contentId: this.contentData.id,
|
||||||
studyInfo:
|
studyInfo:
|
||||||
this.courseInfo.name + "-" + this.contentData.contentName,
|
this.courseInfo.name + "-" + this.contentData.contentName,
|
||||||
duration: 10,
|
duration: 10,
|
||||||
};
|
};
|
||||||
//console.log('this.courseInfo:',this.contentData)
|
//console.log('this.courseInfo:',this.contentData)
|
||||||
@@ -2338,6 +2343,7 @@ export default {
|
|||||||
heartabtwo() {
|
heartabtwo() {
|
||||||
this.tab = 2;
|
this.tab = 2;
|
||||||
},
|
},
|
||||||
|
// ai播放器相关
|
||||||
heartabthree() {
|
heartabthree() {
|
||||||
this.tab = 3;
|
this.tab = 3;
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user