diff --git a/main/manager-web/src/apis/module/model.js b/main/manager-web/src/apis/module/model.js
index 2534bb5a..2bf7dc00 100644
--- a/main/manager-web/src/apis/module/model.js
+++ b/main/manager-web/src/apis/module/model.js
@@ -26,5 +26,71 @@ 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()
+ },
+
+ // 新增模型配置
+ addModel(params, callback) {
+ const { modelType, provideCode, formData } = params;
+ const postData = {
+ modelCode: formData.modelCode,
+ modelName: formData.modelName,
+ isDefault: formData.isDefault ? 1 : 0,
+ isEnabled: formData.isEnabled ? 1 : 0,
+ configJson: JSON.stringify(formData.configJson),
+ docLink: formData.docLink,
+ remark: formData.remark,
+ sort: formData.sort || 0
+ };
+
+ RequestService.sendRequest()
+ .url(`${getServiceUrl()}/api/v1/models/models/${modelType}/${provideCode}`)
+ .method('POST')
+ .data(postData)
+ .success((res) => {
+ RequestService.clearRequestTime()
+ callback(res)
+ })
+ .fail((err) => {
+ console.error('新增模型失败:', err)
+ this.$message.error(err.msg || '新增模型失败')
+ RequestService.reAjaxFun(() => {
+ this.addModel(params, callback)
+ })
+ }).send()
+ },
+ // 删除模型配置
+ deleteModel(modelType, provideCode, id, callback) {
+ RequestService.sendRequest()
+ .url(`${getServiceUrl()}/api/v1/models/models/${modelType}/${provideCode}/${id}`)
+ .method('DELETE')
+ .success((res) => {
+ RequestService.clearRequestTime()
+ callback(res)
+ })
+ .fail((err) => {
+ console.error('删除模型失败:', err)
+ this.$message.error(err.msg || '删除模型失败')
+ RequestService.reAjaxFun(() => {
+ this.deleteModel(modelType, provideCode, id, callback)
+ })
+ }).send()
+ },
+
}
diff --git a/main/manager-web/src/components/AddModelDialog.vue b/main/manager-web/src/components/AddModelDialog.vue
index 074be175..4b5ca445 100644
--- a/main/manager-web/src/components/AddModelDialog.vue
+++ b/main/manager-web/src/components/AddModelDialog.vue
@@ -1,13 +1,5 @@
-
+
添加模型
@@ -34,51 +26,28 @@
-
-
-
+
-
+
-
-
-
-
-
-
+
+
-
+
-
+
-
-
调用信息
-
-
+
-
+
-
-
+
-
-
+
保存
@@ -148,6 +95,7 @@
diff --git a/main/manager-web/src/views/ModelConfig.vue b/main/manager-web/src/views/ModelConfig.vue
index 3345fb2c..cdb9e3ef 100644
--- a/main/manager-web/src/views/ModelConfig.vue
+++ b/main/manager-web/src/views/ModelConfig.vue
@@ -46,7 +46,7 @@
-
大语言模型(LLM)
+ {{ modelTypeText }}
添加
@@ -63,12 +63,18 @@
-
-
-
+
+
+
+
+ {{ scope.row.configJson?.provider || '未知' }}
+
+
-
+
@@ -112,7 +118,7 @@
-
+
@@ -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,20 +146,34 @@ 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: {
+
+ 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);
},
@@ -182,51 +203,77 @@ export default {
},
handleMenuSelect(index) {
this.activeTab = index;
+ this.currentPage = 1;
+ this.loadData();
},
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;
@@ -256,8 +303,27 @@ export default {
this.isAllSelected = false;
}
},
+
+ // 新增模型配置
handleAddConfirm(newModel) {
- console.log('新增模型数据:', newModel);
+ const params = {
+ modelType: this.activeTab,
+ provideCode: newModel.supplier,
+ formData: {
+ ...newModel,
+ isDefault: newModel.isDefault ? 1 : 0,
+ isEnabled: newModel.isEnabled ? 1 : 0
+ }
+ };
+
+ ModelApi.addModel(params, ({data}) => {
+ if (data.code === 0) {
+ this.$message.success('新增成功');
+ this.loadData();
+ } else {
+ this.$message.error(data.msg || '新增失败');
+ }
+ });
},
// 分页器
@@ -281,8 +347,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 || '获取模型列表失败');
+ }
+ });
}
},
};
@@ -637,7 +719,6 @@ export default {
margin-top: 15px;
/* 导航按钮样式 (首页、上一页、下一页) */
-
.pagination-btn:first-child,
.pagination-btn:nth-child(2),
.pagination-btn:nth-last-child(2) {
@@ -663,7 +744,6 @@ export default {
}
/* 数字按钮样式 */
-
.pagination-btn:not(:first-child):not(:nth-child(2)):not(:nth-last-child(2)) {
min-width: 28px;
height: 32px;
diff --git a/main/manager-web/src/views/roleConfig.vue b/main/manager-web/src/views/roleConfig.vue
index d4b2451e..57648c14 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