mirror of
https://codeup.aliyun.com/67762337eccfc218f6110e0e/vue/learning-system-portal.git
synced 2025-12-18 15:26:45 +08:00
ai视频一期功能提交
This commit is contained in:
@@ -456,11 +456,11 @@
|
||||
<!-- AI摘要状态 -->
|
||||
<div class="form-item">
|
||||
<span class="form-label">AI摘要状态:</span>
|
||||
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiAbstract === 1}">
|
||||
<span :class="aiSetting.aiAbstract === 1 ? 'custom-putaway' : 'custom-takeout'">
|
||||
{{ aiSetting.aiAbstract === 1 ? '已上架' : '已下架' }}
|
||||
</span>
|
||||
<div class="action-buttons">
|
||||
<el-button type="text" @click="aiSetting.aiAbstract = 0">
|
||||
<el-button type="text" @click="changeAIKey('aiAbstract')">
|
||||
{{ aiSetting.aiAbstract === 0 ? '上架' : '下架' }}
|
||||
</el-button>
|
||||
<el-button type="text" >编辑</el-button>
|
||||
@@ -470,11 +470,11 @@
|
||||
<!-- AI文稿状态 -->
|
||||
<div class="form-item">
|
||||
<span class="form-label">AI文稿状态:</span>
|
||||
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiDraft === 1}">
|
||||
<span :class="aiSetting.aiDraft === 1 ? 'custom-putaway' : 'custom-takeout'">
|
||||
{{ aiSetting.aiDraft === 1 ? '已上架' : '已下架' }}
|
||||
</span>
|
||||
<div class="action-buttons">
|
||||
<el-button type="text" @click="aiSetting.aiDraft = 0">
|
||||
<el-button type="text" @click="changeAIKey('aiDraft')">
|
||||
{{ aiSetting.aiDraft === 0 ? '上架' : '下架' }}
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -483,11 +483,11 @@
|
||||
<!-- AI翻译状态 -->
|
||||
<div class="form-item">
|
||||
<span class="form-label">AI翻译状态:</span>
|
||||
<span class="status-badge" :class="{'status-badge--active': aiSetting.aiTranslate === 1}">
|
||||
<span :class="aiSetting.aiTranslate === 1 ? 'custom-putaway' : 'custom-takeout'">
|
||||
{{ aiSetting.aiTranslate === 1 ? '已上架' : '已下架' }}
|
||||
</span>
|
||||
<div class="action-buttons">
|
||||
<el-button type="text" @click="aiSetting.aiTranslate = 0">
|
||||
<el-button type="text" @click="changeAIKey('aiTranslate')">
|
||||
{{ aiSetting.aiTranslate === 0 ? '上架' : '下架' }}
|
||||
</el-button>
|
||||
<el-button type="text" >编辑</el-button>
|
||||
@@ -495,22 +495,27 @@
|
||||
</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 class="form-item" style="align-items: flex-start;">
|
||||
<span class="form-label" style="white-space: nowrap;">支持语种:</span>
|
||||
<div class="languages-list" v-show="false">
|
||||
<div v-for="lang in aiSetting.languageCode" :key="lang" class="language-tag">
|
||||
{{ getLanguageName(lang) }}
|
||||
<span class="custom-takeout">已下架</span>
|
||||
</div>
|
||||
</div>
|
||||
<el-select
|
||||
v-model="aiSetting.languageCode"
|
||||
multiple
|
||||
style="width: 100%;"
|
||||
placeholder="请选择语种"
|
||||
>
|
||||
<el-option
|
||||
v-for="lang in selectAllLang"
|
||||
:key="lang.srclang"
|
||||
:label="lang.label"
|
||||
:value="lang.srclang"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -531,7 +536,7 @@ import auditCourse2 from '@/components/Course/auditCourse2.vue';
|
||||
import adminPage from '@/components/Administration/adminPage.vue';
|
||||
import apiResowner from '../../api/modules/resowner.js';
|
||||
import apiType from '../../api/modules/type.js'
|
||||
import {courseType} from '../../utils/tools.js';
|
||||
import {courseType, deepCopy} from '../../utils/tools.js';
|
||||
import apiCourse from '../../api/modules/course.js';
|
||||
// import {resOwnerIndexName,sysTypeIndexName} from '@/utils/type.js';
|
||||
import { mapGetters,mapActions } from 'vuex';
|
||||
@@ -632,7 +637,7 @@ export default {
|
||||
languageCode: ['zh-CN', 'en-US'] // 默认选中的语种
|
||||
},
|
||||
aiProcessSetting: { // 开启AI处理弹框
|
||||
dlgShow: true,
|
||||
dlgShow: false,
|
||||
aiSet: 1,
|
||||
aiAbstract: 1,
|
||||
aiDraft: 1,
|
||||
@@ -685,6 +690,7 @@ export default {
|
||||
|
||||
},
|
||||
methods: {
|
||||
|
||||
getAudiences(){
|
||||
apiUserbasic.getInAudienceIds().then(res=>{
|
||||
if (res.status == 200) {
|
||||
@@ -1148,6 +1154,9 @@ export default {
|
||||
|
||||
|
||||
// ai播放器相关
|
||||
getLanguageName(lang){
|
||||
return this.selectAllLang.find(item => item.srclang === lang).label || '';
|
||||
},
|
||||
handleSelectionChange(val){
|
||||
this.selectedCourses = val;
|
||||
console.log(val);
|
||||
@@ -1172,115 +1181,109 @@ export default {
|
||||
},
|
||||
// AI设置
|
||||
setAI(row) {
|
||||
this.aiSetting.courseId = row.id;
|
||||
// 这里可以添加获取当前课程AI设置的逻辑
|
||||
this.aiSetting.dlgShow = true;
|
||||
console.log('row', row);
|
||||
this.aiSetting = {
|
||||
dlgShow: true,
|
||||
...row
|
||||
};
|
||||
},
|
||||
changeAIKey(key) {
|
||||
this.aiSetting[key] = this.aiSetting[key] === 1 ? 0 : 1;
|
||||
},
|
||||
|
||||
// 确认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;
|
||||
// 可以选择是否刷新列表数据
|
||||
const item = deepCopy(this.aiSetting);
|
||||
item.languageStatus = item.aiSet;
|
||||
item.languageCode = item.languageCode || [];
|
||||
if (!item.languageCode.includes('zh-CN')) {
|
||||
item.languageCode.unshift('zh-CN'); // 默认添加中文 去重
|
||||
}
|
||||
this._benchAiSet([item], (res) => {
|
||||
this.$message.success('AI设置保存成功');
|
||||
this.aiSetting.dlgShow = false;
|
||||
// 可以选择是否刷新列表数据
|
||||
this.searchData();
|
||||
}, (res) => {
|
||||
this.$message.error('AI设置保存失败!');
|
||||
})
|
||||
},
|
||||
setLanguage() {
|
||||
if (this.selectedCourses.length > 0) {
|
||||
this.languageSetting = {...this.languageSetting, ...this.getAIInfoByList(this.selectedCourses)}
|
||||
this.languageSetting.dlgShow = true;
|
||||
this.languageSetting = {...{
|
||||
dlgShow: true,
|
||||
languageCode: ['zh-CN', 'en-US'] // 默认选中的语种
|
||||
}, ...this.getAIInfoByList(this.selectedCourses)}
|
||||
}
|
||||
},
|
||||
enableAI() {
|
||||
// 开启AI处理按钮点击事件
|
||||
if (this.selectedCourses.length > 0) {
|
||||
this.aiProcessSetting = {...this.aiProcessSetting, ...this.getAIInfoByList(this.selectedCourses)}
|
||||
this.aiProcessSetting.dlgShow = true;
|
||||
this.aiProcessSetting = {...{
|
||||
dlgShow: true,
|
||||
aiSet: 1,
|
||||
aiAbstract: 1,
|
||||
aiDraft: 1,
|
||||
languageCode: ['zh-CN', 'en-US'] // 默认选中的语种
|
||||
}, ...this.getAIInfoByList(this.selectedCourses)}
|
||||
}
|
||||
},
|
||||
|
||||
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
|
||||
});
|
||||
|
||||
// 关闭弹框
|
||||
// 批量设置语种 - 确认
|
||||
confirmLanguageSetting() {
|
||||
const courseList = deepCopy(this.selectedCourses);
|
||||
let languageCode = deepCopy(this.languageSetting.languageCode || []);
|
||||
if (!languageCode.includes('zh-CN')) {
|
||||
languageCode.unshift('zh-CN'); // 默认添加中文 去重
|
||||
}
|
||||
courseList.forEach(item => {
|
||||
item.languageCode = languageCode;
|
||||
item.aiTranslate = item.aiSet;
|
||||
item.languageStatus = item.aiSet;
|
||||
})
|
||||
this._benchAiSet(courseList, (res) => {
|
||||
this.$message.success('设置语种成功!');
|
||||
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
|
||||
});
|
||||
}, (res) => {
|
||||
this.$message.error('设置语种失败!');
|
||||
})
|
||||
},
|
||||
|
||||
// 批量开启AI处理 - 确认
|
||||
confirmAiProcess() {
|
||||
// 获取AI处理配置
|
||||
let { aiSet, aiAbstract, aiDraft, languageCode } = this.aiProcessSetting;
|
||||
const courseList = deepCopy(this.selectedCourses);
|
||||
languageCode = languageCode || [];
|
||||
if (!languageCode.includes('zh-CN')) {
|
||||
languageCode.unshift('zh-CN'); // 默认添加中文 去重
|
||||
}
|
||||
courseList.forEach(item => {
|
||||
item.aiSet = aiSet;
|
||||
item.aiAbstract = aiAbstract;
|
||||
item.aiDraft = aiDraft;
|
||||
item.aiTranslate = aiSet;
|
||||
item.languageStatus = aiSet;
|
||||
item.languageCode = languageCode;
|
||||
})
|
||||
this._benchAiSet(courseList, (res) => {
|
||||
this.$message.success('开启AI处理成功!');
|
||||
this.aiProcessSetting.dlgShow = false;
|
||||
// 可以选择是否刷新列表数据
|
||||
this.searchData();
|
||||
}, (res) => {
|
||||
this.$message.error('开启AI处理失败!');
|
||||
})
|
||||
},
|
||||
|
||||
_benchAiSet(courseList, successCB, failCB) {
|
||||
apiCourse.benchAiSet({courseList}).then(res => {
|
||||
if(res.status === 200){
|
||||
successCB && successCB(res);
|
||||
}else{
|
||||
failCB && failCB(res);
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
};
|
||||
@@ -1363,22 +1366,6 @@ export default {
|
||||
margin: 10px 0;
|
||||
line-height: 1.5;
|
||||
}
|
||||
.status-badge{
|
||||
display: inline-block;
|
||||
padding: 3px 13px;
|
||||
border-radius: 20px;
|
||||
font-size: 12px;
|
||||
background: rgba(254, 249, 195, 1);
|
||||
color: rgba(133, 77, 14, 1);
|
||||
font-size: 12px;
|
||||
font-weight: 500;
|
||||
line-height: 17px;
|
||||
letter-spacing: 0px;
|
||||
}
|
||||
.status-badge--active{
|
||||
background: rgba(220, 252, 231, 1);
|
||||
color: rgba(22, 101, 52, 1);
|
||||
}
|
||||
.languages-list{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
|
||||
Reference in New Issue
Block a user