ai视频一期功能提交

This commit is contained in:
sunli_tydic
2025-11-21 17:26:34 +08:00
parent 4b4c0943d8
commit caa9b23766
4 changed files with 125 additions and 87 deletions

View File

@@ -15,7 +15,7 @@
<div class="language-selector"> <div class="language-selector">
<span class="language-label">语言</span> <span class="language-label">语言</span>
<el-select v-model="selectedLanguage" class="language-select" @change="changeLanguage" placeholder="请选择语言"> <el-select v-model="selectedLanguage" class="language-select" @change="changeLanguage" placeholder="请选择语言">
<el-option v-for="lang in selectableLang" :key="lang.srclang" :label="lang.label" :value="lang.srclang"></el-option> <el-option v-for="lang in selectableLang" :key="lang.srclang" :label="getSelectLabel(lang)" :value="lang.srclang"></el-option>
</el-select> </el-select>
</div> </div>
</div> </div>
@@ -146,6 +146,13 @@ export default {
}, },
methods: { methods: {
// 动态获取选择框的标签
getSelectLabel(lang) {
if (lang.srclang == 'zh-CN') {
return lang.label;
}
return `${lang.name} (${lang.label})`;
},
formatTime (time) { formatTime (time) {
// 格式化时间为HH:MM:SS如01:00:00 // 格式化时间为HH:MM:SS如01:00:00
const hours = Math.floor(time / 3600); const hours = Math.floor(time / 3600);

View File

@@ -159,41 +159,39 @@
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item label="AI设置"> <el-form-item label="AI设置">
<div> <div style="margin-top: 7px;">
<div style="display: flex; align-items: center;gap: 10px;"> <div style="display: flex; align-items: center;gap: 5px;">
<div style="display: flex; align-items: center;gap: 3px;"> <el-switch v-model="courseInfo.aiSet" :active-value="1" :inactive-value="0"></el-switch>
<el-tooltip class="item" effect="dark" content="是否将课程进行AI处理" placement="top"> <el-tooltip class="item" effect="dark" :content="aiSetTip" placement="top">
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
</el-tooltip>
</div>
<div v-show="courseInfo.aiSet==1" style="margin-left: -20px;">
<div style="display: flex; justify-content: space-between;;align-items: center;gap: 5px;margin: 10px 0;">
<div style="display: flex; align-items: center;gap: 5px;">
<span>AI摘要</span>
<el-switch v-model="courseInfo.aiAbstract" :active-value="1" :inactive-value="0"></el-switch>
<el-tooltip class="item" effect="dark" :content="aiAbstractTip" placement="top">
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
</el-tooltip>
</div>
<div style="display: flex; align-items: center;gap: 5px;">
<span>AI文稿</span>
<el-switch v-model="courseInfo.aiDraft" :active-value="1" :inactive-value="0"></el-switch>
<el-tooltip class="item" effect="dark" :content="aiDraftTip" placement="top">
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
</el-tooltip>
</div>
</div>
<div style="display: flex; align-items: center;gap: 5px;margin: 10px 0;margin-left: -30px;">
<span>AI翻译语种</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-tooltip class="item" effect="dark" :content="aiTranslateTip" placement="top">
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i> <i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
</el-tooltip> </el-tooltip>
<span>AI处理状态</span>
</div> </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>
</div> </div>
</el-form-item> </el-form-item>
@@ -370,41 +368,39 @@
</el-form-item> </el-form-item>
<!-- ai播放器相关 --> <!-- ai播放器相关 -->
<el-form-item label="AI设置"> <el-form-item label="AI设置">
<div> <div style="margin-top: 7px;">
<div style="display: flex; align-items: center;gap: 10px;"> <div style="display: flex; align-items: center;gap: 5px;">
<div style="display: flex; align-items: center;gap: 3px;"> <el-switch v-model="courseInfo.aiSet" :active-value="1" :inactive-value="0"></el-switch>
<el-tooltip class="item" effect="dark" content="是否将课程进行AI处理" placement="top"> <el-tooltip class="item" effect="dark" :content="aiSetTip" placement="top">
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
</el-tooltip>
</div>
<div v-show="courseInfo.aiSet==1" style="margin-left: -20px;">
<div style="display: flex;align-items: center;gap: 80px;margin: 20px 0;">
<div style="display: flex; align-items: center;gap: 5px;">
<span>AI摘要</span>
<el-switch v-model="courseInfo.aiAbstract" :active-value="1" :inactive-value="0"></el-switch>
<el-tooltip class="item" effect="dark" :content="aiAbstractTip" placement="top">
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
</el-tooltip>
</div>
<div style="display: flex; align-items: center;gap: 5px;">
<span>AI文稿</span>
<el-switch v-model="courseInfo.aiDraft" :active-value="1" :inactive-value="0"></el-switch>
<el-tooltip class="item" effect="dark" :content="aiDraftTip" placement="top">
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
</el-tooltip>
</div>
</div>
<div style="display: flex; align-items: center;gap: 5px;margin: 20px 0;margin-left: -30px;">
<span>AI翻译语种</span>
<el-select v-model="courseInfo.languageCode" placeholder="请选择" multiple filterable style="flex:1">
<el-option v-for="item in selectAllLang" :key="item.key" :label="item.label" :value="item.srclang"> </el-option>
</el-select>
<el-tooltip class="item" effect="dark" :content="aiTranslateTip" placement="top">
<i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i> <i class="el-icon-question" style="margin-left: 5px; color: #909399; cursor: pointer;"></i>
</el-tooltip> </el-tooltip>
<span>AI处理状态</span>
</div> </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="9" 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="10" 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: center;gap: 10px;">
<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>
</div> </div>
</el-form-item> </el-form-item>
@@ -614,7 +610,11 @@ export default {
selectedOrg: { selectedOrg: {
orgId: null, orgId: null,
name: '' name: ''
} },
aiSetTip: '是否将课程进行AI处理', //提示信息
aiAbstractTip: '一键提炼课程视频核心要点,助力学员课前高效掌握重点,快速筛选学习资源', // 提示信息
aiDraftTip: '分段展示视频内容并精准同步时间轴,实现视频进度与文稿双向定位,学习内容触手可及', //提示信息
aiTranslateTip: '智能转换视频字幕与语音为多语种,支持全球学员按需切换语言,打破学习边界', // 提示信息
}; };
}, },
created() { created() {

View File

@@ -332,19 +332,19 @@
<el-dialog <el-dialog
title="开启AI处理" title="开启AI处理"
:visible.sync="aiProcessSetting.dlgShow" :visible.sync="aiProcessSetting.dlgShow"
width="500px" width="400px"
> >
<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="aiSetTip" placement="top">
<i class="el-icon-question"></i> <i class="el-icon-question"></i>
</el-tooltip> </el-tooltip>
AI处理状态 AI处理
</span> </span>
<span class="status-text"> <span class="status-text">
{{ aiProcessSetting.aiSet === 1 ? '开启' : '关闭' }} {{ aiProcessSetting.aiSet === 1 ? '开启' : '关闭' }}
</span> </span>
<el-switch <el-switch
v-model="aiProcessSetting.aiSet" v-model="aiProcessSetting.aiSet"
@@ -356,29 +356,54 @@
<div v-show="aiProcessSetting.aiSet === 1"> <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">
<el-radio-group v-model="aiProcessSetting.aiAbstract" class="radio-group"> <el-tooltip class="item" effect="dark" :content="aiAbstractTip" placement="top">
<el-radio :label="1"></el-radio> <i class="el-icon-question"></i>
<el-radio :label="0"></el-radio> </el-tooltip>
</el-radio-group> AI摘要
</span>
<span class="status-text">
{{ aiProcessSetting.aiAbstract === 1 ? '开启' : '关闭' }}
</span>
<el-switch
v-model="aiProcessSetting.aiAbstract"
:active-value="1"
:inactive-value="0"
>
</el-switch>
</div> </div>
<!-- 是否生成AI文稿 --> <!-- 是否生成AI文稿 -->
<div class="form-item"> <div class="form-item">
<span class="form-label">是否需要生成AI文稿</span> <span class="form-label">
<el-radio-group v-model="aiProcessSetting.aiDraft" class="radio-group"> <el-tooltip class="item" effect="dark" :content="aiDraftTip" placement="top">
<el-radio :label="1"></el-radio> <i class="el-icon-question"></i>
<el-radio :label="0"></el-radio> </el-tooltip>
</el-radio-group> AI文稿
</span>
<span class="status-text">
{{ aiProcessSetting.aiDraft === 1 ? '开启' : '关闭' }}
</span>
<el-switch
v-model="aiProcessSetting.aiDraft"
:active-value="1"
:inactive-value="0"
>
</el-switch>
</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">
<el-tooltip class="item" effect="dark" :content="aiTranslateTip" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
AI翻译语种
</span>
<el-select <el-select
v-model="aiProcessSetting.languageCode" v-model="aiProcessSetting.languageCode"
multiple multiple
style="width: calc(100% - 135px);" style="width: 100%;"
placeholder="请选择语种" placeholder="请选择语种"
> >
<el-option <el-option
@@ -607,7 +632,7 @@ export default {
languageCode: ['zh-CN', 'en-US'] // 默认选中的语种 languageCode: ['zh-CN', 'en-US'] // 默认选中的语种
}, },
aiProcessSetting: { // 开启AI处理弹框 aiProcessSetting: { // 开启AI处理弹框
dlgShow: false, dlgShow: true,
aiSet: 1, aiSet: 1,
aiAbstract: 1, aiAbstract: 1,
aiDraft: 1, aiDraft: 1,
@@ -621,7 +646,11 @@ export default {
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'] // 支持的语种
} },
aiSetTip: '是否将课程进行AI处理', //提示信息
aiAbstractTip: '一键提炼课程视频核心要点,助力学员课前高效掌握重点,快速筛选学习资源', // 提示信息
aiDraftTip: '分段展示视频内容并精准同步时间轴,实现视频进度与文稿双向定位,学习内容触手可及', //提示信息
aiTranslateTip: '智能转换视频字幕与语音为多语种,支持全球学员按需切换语言,打破学习边界', // 提示信息
}; };
}, },
mounted() { mounted() {
@@ -1323,10 +1352,10 @@ export default {
} }
.form-item{ .form-item{
margin-bottom: 15px; margin-bottom: 20px;
display: flex; display: flex;
align-items: center; align-items: center;
gap: 5px; gap: 10px;
} }
.tips { .tips {
color: #f56c6c; color: #f56c6c;

View File

@@ -373,6 +373,7 @@
></i ></i
>我的笔记 >我的笔记
</div> </div>
<!-- 开发阶段先放开 v-if="courseInfo.aiDraft == 1" -->
<div <div
@click="heartabthree" @click="heartabthree"
:class="tab == 3 ? 'control-tab-active' : ' '" :class="tab == 3 ? 'control-tab-active' : ' '"
@@ -667,6 +668,7 @@
<!-- ai播放器相关 --> <!-- ai播放器相关 -->
<div <div
@click="coutab(4)" @click="coutab(4)"
v-if="courseInfo.aiAbstract == 1"
style="position: relative;" style="position: relative;"
:class="courestab == 4 ? 'course-info-tab-active' : ''" :class="courestab == 4 ? 'course-info-tab-active' : ''"
> >
@@ -751,7 +753,7 @@
style="padding-left: 17px; padding-top: 20px;background-color: #fff;" 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);"> <div style="padding: 30px;line-height: 24px;letter-spacing: 0.3px;color: rgba(102, 102, 102, 1);">
ai摘要 {{ courseInfo.summaryContent || '' }}
</div> </div>
</div> </div>
</div> </div>