From fbdfd8df693070cb20673a93f3df0ab607ac15bf Mon Sep 17 00:00:00 2001 From: CGD <3030332422@qq.com> Date: Wed, 2 Apr 2025 23:52:13 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E5=AE=8C=E6=88=90"=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B=E9=85=8D=E7=BD=AE=E5=88=97=E8=A1=A8"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/manager-web/src/views/ModelConfig.vue | 47 ++++++++++++++++------ 1 file changed, 35 insertions(+), 12 deletions(-) diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index 3345fb2c..29d0251a 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -63,12 +63,18 @@ - - - + + + + + @@ -128,6 +134,7 @@ import HeaderBar from "@/components/HeaderBar.vue"; import ModelEditDialog from "@/components/ModelEditDialog.vue"; import TtsModel from "@/components/TtsModel.vue"; import AddModelDialog from "@/components/AddModelDialog.vue"; +import ModelApi from "@/apis/module/model"; export default { components: { HeaderBar, ModelEditDialog, TtsModel, AddModelDialog }, @@ -139,19 +146,19 @@ export default { editDialogVisible: false, editModelData: {}, ttsDialogVisible: false, - modelList: [ - { code: 'DeepSeek', candidateName: '深度求索', isApplied: true, supplier: '硅基流动' }, - { code: 'SmartAssist', candidateName: '智能助手', isApplied: false, supplier: '智脑科技' }, - { code: 'CogEngine', candidateName: '认知引擎', isApplied: true, supplier: '云智科技' }, - ], + modelList: [], currentPage: 1, - pageSize: 4, - total: 20, + pageSize: 5, + total: 0, selectedModels: [], isAllSelected: false }; }, + created() { + this.loadData(); + }, + computed: { pageCount() { return Math.ceil(this.total / this.pageSize); @@ -281,8 +288,24 @@ export default { this.currentPage = page; this.loadData(); }, + + // 获取模型配置列表 loadData() { - console.log('加载数据,当前页:', this.currentPage); + const params = { + modelType: this.activeTab, + modelName: this.search, + page: this.currentPage, + limit: this.pageSize + }; + + ModelApi.getModelList(params, ({data}) => { + if (data.code === 0) { + this.modelList = data.data.list; + this.total = data.data.total; + } else { + this.$message.error(data.msg || '获取模型列表失败'); + } + }); } }, }; From 14be24a5154411dad7d58f5e9e7e379d9a101b00 Mon Sep 17 00:00:00 2001 From: CGD <3030332422@qq.com> Date: Thu, 3 Apr 2025 08:24:47 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E5=AE=8C=E6=88=90=E2=80=9C=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=A8=A1=E5=9E=8B=E9=85=8D=E7=BD=AE=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E2=80=9D=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/manager-web/src/views/ModelConfig.vue | 18 +++++++++++++++++- main/manager-web/src/views/roleConfig.vue | 8 ++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index 29d0251a..e92df918 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -46,7 +46,7 @@
-

大语言模型(LLM)

+

{{ modelTypeText }}

添加 @@ -160,6 +160,20 @@ export default { }, computed: { + + modelTypeText() { + const map = { + vad: '语言活动检测模型(VAD)', + asr: '语音识别模型(ASR)', + llm: '大语言模型(LLM)', + intent: '意图识别模型(Intent)', + tts: '语音合成模型(TTS)', + memory: '记忆模型(Memory)' + } + return map[this.activeTab] || '模型配置' + }, + + pageCount() { return Math.ceil(this.total / this.pageSize); }, @@ -189,6 +203,8 @@ export default { }, handleMenuSelect(index) { this.activeTab = index; + this.currentPage = 1; + this.loadData(); }, handleSearch() { console.log('查询:', this.search); diff --git a/main/manager-web/src/views/roleConfig.vue b/main/manager-web/src/views/roleConfig.vue index cc01e046..d8e3c56a 100644 --- a/main/manager-web/src/views/roleConfig.vue +++ b/main/manager-web/src/views/roleConfig.vue @@ -127,10 +127,10 @@ export default { models: [ {label: '大语言模型(LLM)', key: 'llmModelId'}, {label: '语音识别(ASR)', key: 'asrModelId'}, - {label: '语音活动检测模型(VAD)', key: 'vadModelId'}, - {label: '语音合成模型(TTS)', key: 'ttsModelId'}, - {label: '意图识别模型(Intent)', key: 'intentModelId'}, - {label: '记忆模型(Memory)', key: 'memModelId'} + {label: '语音活动检测(VAD)', key: 'vadModelId'}, + {label: '语音合成(TTS)', key: 'ttsModelId'}, + {label: '意图识别(Intent)', key: 'intentModelId'}, + {label: '记忆(Memory)', key: 'memModelId'} ], templates: ['湾湾小何', '星际游子', '英语老师', '好奇男孩', '汪汪队长'], loadingTemplate: false From 4ea27cbdc2519018fa251ab22569be4affb06dfe Mon Sep 17 00:00:00 2001 From: CGD <3030332422@qq.com> Date: Thu, 3 Apr 2025 10:47:31 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E2=80=9C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A8=A1=E5=9E=8B=E2=80=9D=E5=BC=B9=E6=A1=86?= =?UTF-8?q?=E7=9A=84=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/ModelEditDialog.vue | 308 +++++++++++++----- main/manager-web/src/views/ModelConfig.vue | 2 - 2 files changed, 219 insertions(+), 91 deletions(-) diff --git a/main/manager-web/src/components/ModelEditDialog.vue b/main/manager-web/src/components/ModelEditDialog.vue index 09e5570c..4aea1027 100644 --- a/main/manager-web/src/components/ModelEditDialog.vue +++ b/main/manager-web/src/components/ModelEditDialog.vue @@ -1,78 +1,84 @@ @@ -121,39 +127,163 @@ export default { diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index e92df918..751cc0fe 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -676,7 +676,6 @@ export default { margin-top: 15px; /* 导航按钮样式 (首页、上一页、下一页) */ - .pagination-btn:first-child, .pagination-btn:nth-child(2), .pagination-btn:nth-last-child(2) { @@ -702,7 +701,6 @@ export default { } /* 数字按钮样式 */ - .pagination-btn:not(:first-child):not(:nth-child(2)):not(:nth-last-child(2)) { min-width: 28px; height: 32px; From 5b28cf6c663258d6314461d1e524e959b3c0cad4 Mon Sep 17 00:00:00 2001 From: CGD <3030332422@qq.com> Date: Thu, 3 Apr 2025 14:31:57 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E5=AE=8C=E6=88=90=E2=80=9C=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E6=A8=A1=E5=9E=8B=E4=BE=9B=E5=BA=94=E5=99=A8=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E2=80=9D=E7=9A=84API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/manager-web/src/apis/module/model.js | 17 +++ .../src/components/AddModelDialog.vue | 111 ++++++------------ 2 files changed, 54 insertions(+), 74 deletions(-) diff --git a/main/manager-web/src/apis/module/model.js b/main/manager-web/src/apis/module/model.js index 2534bb5a..28df13de 100644 --- a/main/manager-web/src/apis/module/model.js +++ b/main/manager-web/src/apis/module/model.js @@ -26,5 +26,22 @@ export default { }) }).send() }, + // 获取模型供应器列表 + getModelProviders(modelType, callback) { + RequestService.sendRequest() + .url(`${getServiceUrl()}/api/v1/models/${modelType}/provideTypes`) + .method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res.data?.data || []) + }) + .fail((err) => { + console.error('获取供应器列表失败:', err) + this.$message.error('获取供应器列表失败') + RequestService.reAjaxFun(() => { + this.getModelProviders(modelType, callback) + }) + }).send() + } } diff --git a/main/manager-web/src/components/AddModelDialog.vue b/main/manager-web/src/components/AddModelDialog.vue index 074be175..ed59057e 100644 --- a/main/manager-web/src/components/AddModelDialog.vue +++ b/main/manager-web/src/components/AddModelDialog.vue @@ -1,13 +1,5 @@ diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue index e6703776..cdb9e3ef 100644 --- a/main/manager-web/src/views/ModelConfig.vue +++ b/main/manager-web/src/views/ModelConfig.vue @@ -118,7 +118,7 @@
- +
@@ -209,48 +209,71 @@ export default { handleSearch() { console.log('查询:', this.search); }, + // 批量删除 batchDelete() { if (this.selectedModels.length === 0) { - this.$message.warning('请先选择要删除的模型'); - return; + this.$message.warning('请先选择要删除的模型') + return } + this.$confirm('确定要删除选中的模型吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - const selectedIds = this.selectedModels.map(model => model.code); - this.modelList = this.modelList.filter(model => !selectedIds.includes(model.code)); - this.$message.success('删除成功'); - this.selectedModels = []; - this.isAllSelected = false; + const deletePromises = this.selectedModels.map(model => + new Promise(resolve => { + ModelApi.deleteModel( + this.activeTab, + model.configJson?.provider || '', + model.id, + ({data}) => resolve(data.code === 0) + ) + }) + ) + + Promise.all(deletePromises).then(results => { + if (results.every(Boolean)) { + this.$message.success('批量删除成功') + this.loadData() + } else { + this.$message.error('部分删除失败') + } + }) }).catch(() => { - this.$message.info('已取消删除'); - }); - }, + this.$message.info('已取消删除') + }) + }, addModel() { this.addDialogVisible = true; }, editModel(model) { - this.editModelData = { - code: model.code, - name: model.candidateName, - supplier: model.supplier, - }; + this.editModelData = JSON.parse(JSON.stringify(model)); this.editDialogVisible = true; }, - // 删除模型配置 + // 删除单个模型 deleteModel(model) { - this.$confirm(`确定要删除模型 ${model.candidateName} 吗?`, '提示', { + this.$confirm('确定要删除该模型吗?', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { - this.modelList = this.modelList.filter(item => item.code !== model.code); - this.$message.success('删除成功'); + ModelApi.deleteModel( + this.activeTab, + model.configJson?.provider || '', // 从configJson获取provider + model.id, + ({data}) => { + if (data.code === 0) { + this.$message.success('删除成功') + this.loadData() + } else { + this.$message.error(data.msg || '删除失败') + } + } + ) }).catch(() => { - this.$message.info('已取消删除'); - }); + this.$message.info('已取消删除') + }) }, handleCurrentChange(page) { this.currentPage = page;