From 82dcfa634840c5cab8f146cdf6c32d965e1d15a8 Mon Sep 17 00:00:00 2001 From: sunli_tydic Date: Tue, 9 Dec 2025 10:26:02 +0800 Subject: [PATCH] =?UTF-8?q?ai=E8=A7=86=E9=A2=91=E4=B8=80=E6=9C=9F=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/modules/course.js | 8 +- src/assets/images/course/generationFailed.png | Bin 0 -> 8669 bytes src/assets/images/course/languageIcon.png | Bin 0 -> 478 bytes src/assets/images/course/selectLanguage.png | Bin 0 -> 8440 bytes src/assets/styles/btn.scss | 26 ++ src/components/Course/courseForm.vue | 32 +- src/components/VideoPlayer/index.vue | 8 +- src/data/pages.js | 2 + src/security.js | 13 + src/store/getters.js | 1 + src/store/modules/video.js | 11 +- src/views/course/ManageList.vue | 249 ++++++----- src/views/course/aiSet/aiAbstract.vue | 245 +++++++++++ src/views/course/aiSet/aiTranslate.vue | 388 ++++++++++++++++++ src/views/portal/course/Index.vue | 2 +- src/views/study/coursenew.vue | 8 +- 16 files changed, 838 insertions(+), 155 deletions(-) create mode 100644 src/assets/images/course/generationFailed.png create mode 100644 src/assets/images/course/languageIcon.png create mode 100644 src/assets/images/course/selectLanguage.png create mode 100644 src/views/course/aiSet/aiAbstract.vue create mode 100644 src/views/course/aiSet/aiTranslate.vue diff --git a/src/api/modules/course.js b/src/api/modules/course.js index 00db854c..f0312fd6 100644 --- a/src/api/modules/course.js +++ b/src/api/modules/course.js @@ -440,6 +440,11 @@ const queryCrowd=function(query){ const ids=function (data){ return ajax.postJson('/xboe/m/course/manage/ids',data); } + +// ai播放器相关 - 批量AI设置 +const benchAiSet=function(data){ + return ajax.postJson('/xboe/m/course/manage/benchAiSet',data); +} export default { saveBase, submitCourse, @@ -482,6 +487,7 @@ export default { exportCourseAudit, exportCourse, queryCrowd, - ids + ids, + benchAiSet } diff --git a/src/assets/images/course/generationFailed.png b/src/assets/images/course/generationFailed.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca255d5a8cd1b0d51b78d56f97dc7648b0ac1cb GIT binary patch literal 8669 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 NtlPY{?#bu({u`*20f+zq literal 0 HcmV?d00001 diff --git a/src/assets/images/course/languageIcon.png b/src/assets/images/course/languageIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..454e67cbdbcf680ba7ea772c01c56b409ce5feb2 GIT binary patch literal 478 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 E2dDknsQ>@~ literal 0 HcmV?d00001 diff --git a/src/assets/styles/btn.scss b/src/assets/styles/btn.scss index e6ba1a8e..0cb69515 100644 --- a/src/assets/styles/btn.scss +++ b/src/assets/styles/btn.scss @@ -97,3 +97,29 @@ font-size: 14px; border-radius: 4px; } +// 已下架 +.custom-takeout{ + 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; +} +// 已上架 +.custom-putaway{ + display: inline-block; + padding: 3px 13px; + border-radius: 20px; + font-size: 12px; + background: rgba(220, 252, 231, 1); + color: rgba(22, 101, 52, 1); + font-size: 12px; + font-weight: 500; + line-height: 17px; + letter-spacing: 0px; +} \ No newline at end of file diff --git a/src/components/Course/courseForm.vue b/src/components/Course/courseForm.vue index 71c1fb77..fed1ddcb 100644 --- a/src/components/Course/courseForm.vue +++ b/src/components/Course/courseForm.vue @@ -904,7 +904,7 @@ export default { } }); } - + this.initAiData(); } else { //console.log(editData,'editData'); this.weikeReset = editData.id; @@ -1005,6 +1005,23 @@ export default { console.error("获取字典信息失败:", error); } }, + // ai播放器相关 + // 初始化ai数据 + initAiData() { + // 如果ai设置为空则给默认值 - 会看成新增状态 + if(this.courseInfo.aiSet === null || this.courseInfo.aiSet === '' || this.courseInfo.aiSet === undefined){ + this.courseInfo.isAddAI = 1; //暂时是否是新增 + this.courseInfo.aiSet = 1; + this.courseInfo.aiAbstract = 1; + this.courseInfo.aiDraft = 1; + this.courseInfo.aiTranslate = 1; + this.courseInfo.languageStatus = 1; + this.courseInfo.languageCode = ['zh-CN', 'en-US']; + } else { + // 获取ai设置信息 + this.courseInfo.isAddAI = 0; + } + }, //获取课程信息 async getDetail(id) { this.curCourseId = id; @@ -1032,18 +1049,7 @@ export default { console.log("--- 编辑查看 this.isPermission = ",this.isPermission) console.log("--- 编辑查看 this.dicts = ",this.dicts) // ai播放器相关 - // 如果ai设置为空则给默认值 - 会看成新增状态 - if(this.courseInfo.aiSet === null || this.courseInfo.aiSet === '' || this.courseInfo.aiSet === undefined){ - this.courseInfo.isAddAI = 1; //暂时是否是新增 - this.courseInfo.aiSet = 1; - this.courseInfo.aiAbstract = 1; - this.courseInfo.aiDraft = 1; - this.courseInfo.aiTranslate = 1; - this.courseInfo.languageCode = ['zh-CN', 'en-US']; - } else { - // 获取ai设置信息 - this.courseInfo.isAddAI = 0; - } + this.initAiData() if(!this.courseInfo.orgId){ //根据课程创建者获取机构id apiUser.getOrgSimpleByUserId(result.course.sysCreateAid).then(ors=>{ diff --git a/src/components/VideoPlayer/index.vue b/src/components/VideoPlayer/index.vue index 33216033..f998c4a6 100644 --- a/src/components/VideoPlayer/index.vue +++ b/src/components/VideoPlayer/index.vue @@ -121,7 +121,7 @@
-
+
{{!currentLang ? 'AI翻译' : currentLangLabel}}
@@ -337,13 +337,17 @@ export default { }, // ai播放器相关 computed: { - ...mapGetters(['selectableLang','currentLang']) + ...mapGetters(['selectableLang','currentLang','courseInfo']), + isAiTranslate () { + return this.courseInfo?.aiSet == 1 && this.courseInfo?.aiTranslate == 1; + } }, created() { // ai播放器相关 this.SET_currentLang(''); }, mounted() { + console.log('---',this.isAiTranslate,this.courseInfo,'courseInfo'); this.videoDom = this.$refs.video; this.videoDom.focus({preventScroll: true}); let speedValue=localStorage.getItem('boe_video_speed'); diff --git a/src/data/pages.js b/src/data/pages.js index fa49ae36..d5d42d59 100644 --- a/src/data/pages.js +++ b/src/data/pages.js @@ -117,6 +117,8 @@ export const iframes=[ {title:'嵌入测试', path:'/iframe/index',hidden:false,component:'portal/iframe'}, {title:'课件管理', path:'/iframe/course/coursewares',hidden:false,component:'course/Courseware'}, {title:'课程管理', path:'/iframe/course/manages',hidden:false,component:'course/ManageList'}, + {title:'ai摘要', path:'/iframe/course/aiAbstract',hidden:false,component:'course/aiSet/aiAbstract'}, + {title:'ai翻译', path:'/iframe/course/aiTranslate',hidden:false,component:'course/aiSet/aiTranslate'}, {title:'考试试题管理', path:'/iframe/exam/questions',hidden:false,component:'exam/Question'}, {title:'查看答卷', path:'/iframe/exam/viewanswer',hidden:false,component:'exam/viewAnswer'}, {title:'考试试卷管理', path:'/iframe/exam/papers',hidden:false,component:'exam/TestPaper'}, diff --git a/src/security.js b/src/security.js index 9788cc03..a0fccc63 100644 --- a/src/security.js +++ b/src/security.js @@ -29,6 +29,19 @@ router.beforeEach((to, from, next) => { // 在免登录白名单,直接进入 next() }else{ + // if (!store.getters.init) { + // store.commit('app/SET_INITDATA',true); + // let myRouters=routers(); + // store.dispatch('GenerateRoutes',{routers:myRouters}).then(accessRoutes=>{ + // console.log('accessRoutes::',accessRoutes) + // router.addRoutes(accessRoutes) // 动态添加可访问路由表 + // next({ ...to, replace: true }) // hack方法 确保addRoutes已完成 + // }); + // } else { + // to.meta.keepAlive = true + // next(); + // } + // return; if(getToken()){ if(to.path === '/login'){ // 如果是外部用户,把配置的路由跳转到个人中心 diff --git a/src/store/getters.js b/src/store/getters.js index 38aac938..dd30759d 100644 --- a/src/store/getters.js +++ b/src/store/getters.js @@ -33,5 +33,6 @@ const getters = { selectableLang:state => state.video.selectableLang, currentLang:state => state.video.currentLang, currentTime:state => state.video.currentTime, + courseInfo:state => state.video.courseInfo, } export default getters diff --git a/src/store/modules/video.js b/src/store/modules/video.js index e91c2388..b1a82b3a 100644 --- a/src/store/modules/video.js +++ b/src/store/modules/video.js @@ -95,6 +95,7 @@ const state = { selectableLang: [], // 可选语言列表+字幕信息 currentLang: '', // 当前选中语言 currentTime: -1, // 当前视频时间 + courseInfo: {}, } const mutations = { @@ -117,15 +118,13 @@ const mutations = { SET_currentTime: (state, time) => { state.currentTime = time }, + SET_courseInfo: (state, info) => { + state.courseInfo = info + }, } const actions = { - unicomPraises({ commit }, data) { - commit('SET_praisesUnicom', data) - }, - unicomFavorites({ commit }, data) { - commit('SET_favoritesUnicom', data) - } + } export default { diff --git a/src/views/course/ManageList.vue b/src/views/course/ManageList.vue index f0454659..b5c771e5 100644 --- a/src/views/course/ManageList.vue +++ b/src/views/course/ManageList.vue @@ -456,11 +456,11 @@
AI摘要状态: - + {{ aiSetting.aiAbstract === 1 ? '已上架' : '已下架' }}
- + {{ aiSetting.aiAbstract === 0 ? '上架' : '下架' }} 编辑 @@ -470,11 +470,11 @@
AI文稿状态: - + {{ aiSetting.aiDraft === 1 ? '已上架' : '已下架' }}
- + {{ aiSetting.aiDraft === 0 ? '上架' : '下架' }}
@@ -483,11 +483,11 @@
AI翻译状态: - + {{ aiSetting.aiTranslate === 1 ? '已上架' : '已下架' }}
- + {{ aiSetting.aiTranslate === 0 ? '上架' : '下架' }} 编辑 @@ -495,22 +495,27 @@
-
- 支持语种: -
-
- 中文 - 已下架 -
-
- 英语 - 生成中 -
-
- 越南语 - 已上架 +
+ 支持语种: +
+
+ {{ getLanguageName(lang) }} + 已下架
+ + +
@@ -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; diff --git a/src/views/course/aiSet/aiAbstract.vue b/src/views/course/aiSet/aiAbstract.vue new file mode 100644 index 00000000..2efd2c32 --- /dev/null +++ b/src/views/course/aiSet/aiAbstract.vue @@ -0,0 +1,245 @@ + + + + + diff --git a/src/views/course/aiSet/aiTranslate.vue b/src/views/course/aiSet/aiTranslate.vue new file mode 100644 index 00000000..28f146b6 --- /dev/null +++ b/src/views/course/aiSet/aiTranslate.vue @@ -0,0 +1,388 @@ + + + + + diff --git a/src/views/portal/course/Index.vue b/src/views/portal/course/Index.vue index 552f513e..ebe06897 100644 --- a/src/views/portal/course/Index.vue +++ b/src/views/portal/course/Index.vue @@ -393,7 +393,7 @@
- 摘要 + 摘要
diff --git a/src/views/study/coursenew.vue b/src/views/study/coursenew.vue index c77365dd..1c952d3d 100644 --- a/src/views/study/coursenew.vue +++ b/src/views/study/coursenew.vue @@ -376,6 +376,7 @@
@@ -650,7 +651,7 @@
-
+
@@ -1054,6 +1055,7 @@ export default { }, ...mapMutations({ SET_selectableLang: 'video/SET_selectableLang', + SET_courseInfo: 'video/SET_courseInfo', }), handleOpen(key, path) { if (this.isFalse) { @@ -1387,6 +1389,10 @@ export default { // ai播放器相关 - 视频处理 handleAIVideo(list = [], r) { 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() {