5757 <el-option v-for =" m in fetchedModels" :key =" m" :label =" m" :value =" m" />
5858 </el-select >
5959 </el-form-item >
60- <el-form-item label =" 支持的能力" >
61- <div style =" width :100% " >
62- <div style =" display :flex ;gap :8px ;align-items :center ;margin-bottom :6px " >
63- <span style =" width :40px ;font-size :12px ;color :#666 " >Skills</span >
64- <el-select v-model =" capSkills" size =" small" style =" flex :1 " multiple collapse-tags collapse-tags-tooltip clearable placeholder =" 勾选该模型支持的技能" >
65- <el-option v-for =" s in skillOptions" :key =" s.id" :label =" `${s.skillName}(${s.groupName})`" :value =" s.id" />
66- </el-select >
67- </div >
68- <div style =" display :flex ;gap :8px ;align-items :center ;margin-bottom :6px " >
69- <span style =" width :40px ;font-size :12px ;color :#666 " >接口</span >
70- <el-select v-model =" capApis" size =" small" style =" flex :1 " multiple collapse-tags collapse-tags-tooltip filterable clearable placeholder =" 勾选该模型可调用的接口" >
71- <el-option v-for =" a in apiOptions" :key =" a.methodCode" :label =" `${a.methodName}(${a.methodCode})`" :value =" a.methodCode" />
72- </el-select >
73- </div >
74- <div style =" display :flex ;gap :8px ;align-items :center ;margin-bottom :6px " >
75- <span style =" width :40px ;font-size :12px ;color :#666 " >流程</span >
76- <el-select v-model =" capFlows" size =" small" style =" flex :1 " multiple collapse-tags collapse-tags-tooltip filterable clearable placeholder =" 勾选该模型可调用的流程" >
77- <el-option v-for =" f in flowOptions" :key =" f.flowKey" :label =" `${f.flowName}(${f.flowKey})`" :value =" f.flowKey" />
78- </el-select >
79- </div >
80- <div style =" display :flex ;gap :8px ;align-items :center " >
81- <span style =" width :40px ;font-size :12px ;color :#666 " >工具</span >
82- <el-input v-model =" capTools" size =" small" style =" flex :1 " placeholder =" 逗号分隔的工具名(如 web_search, calculator)" />
83- </div >
84- </div >
85- </el-form-item >
8660 <el-form-item label =" 启用" ><el-switch v-model =" form.enabled" /></el-form-item >
8761 <el-form-item label =" 备注" ><el-input v-model =" form.remark" /></el-form-item >
8862 </el-form >
@@ -109,48 +83,6 @@ const selectedModels = ref<string[]>([])
10983const testingConfig = ref (false )
11084const testMsg = ref (' ' )
11185const testOk = ref (false )
112- // 支持的能力
113- const capSkills = ref <number []>([])
114- const capApis = ref <string []>([])
115- const capFlows = ref <string []>([])
116- const capTools = ref (' ' )
117- const skillOptions = ref <any []>([])
118- const apiOptions = ref <any []>([])
119- const flowOptions = ref <any []>([])
120-
121- async function loadCapabilityOptions() {
122- try {
123- const [skillRes, suiteRes, flowRes]: any [] = await Promise .all ([
124- request .get (' /skill/list' , { params: { enabled: 1 } }),
125- request .get (' /suite/list' ),
126- request .post (' /flow/definition/page' , { pageNum: 1 , pageSize: 500 })
127- ])
128- skillOptions .value = skillRes .data || []
129- flowOptions .value = flowRes .data ?.list || []
130- const suites = suiteRes .data || []
131- apiOptions .value = []
132- for (const s of suites ) {
133- try {
134- const apisRes: any = await request .post (' /suite/api/list' , { suiteCode: s .suiteCode })
135- for (const a of (apisRes .data || [])) {
136- apiOptions .value .push ({ methodCode: a .methodCode , methodName: a .methodName })
137- }
138- } catch { /* 忽略单个套件失败 */ }
139- }
140- } catch { /* 忽略 */ }
141- }
142-
143- function parseCapabilities(json : string ) {
144- try {
145- const c = JSON .parse (json || ' {}' )
146- capSkills .value = c .skills || []
147- capApis .value = c .apis || []
148- capFlows .value = c .flows || []
149- capTools .value = (c .tools || []).join (' ,' )
150- } catch {
151- capSkills .value = []; capApis .value = []; capFlows .value = []; capTools .value = ' '
152- }
153- }
15486
15587// 预置供应商(选择后自动填默认接口地址)
15688const presetProviders = [
@@ -176,19 +108,15 @@ function openAdd() {
176108 form .value = { id: 0 , providerName: ' ' , baseUrl: ' ' , apiKey: ' ' , model: ' ' , models: ' ' , enabled: true , remark: ' ' }
177109 fetchedModels .value = []
178110 selectedModels .value = []
179- parseCapabilities (' ' )
180111 testMsg .value = ' '
181112 dialogVisible .value = true
182- loadCapabilityOptions ()
183113}
184114function openEdit(row : any ) {
185115 form .value = { ... row , enabled: row .enabled === 1 }
186116 fetchedModels .value = String (row .models || ' ' ).split (' ,' ).map ((s : string ) => s .trim ()).filter (Boolean )
187117 selectedModels .value = [... fetchedModels .value ]
188- parseCapabilities (row .capabilities || ' ' )
189118 testMsg .value = ' '
190119 dialogVisible .value = true
191- loadCapabilityOptions ()
192120}
193121
194122/** 选择预置供应商 → 自动填接口地址默认值 */
@@ -222,12 +150,6 @@ async function doFetchModels() {
222150
223151async function doSave() {
224152 form .value .models = selectedModels .value .join (' ,' )
225- form .value .capabilities = JSON .stringify ({
226- skills: capSkills .value ,
227- apis: capApis .value ,
228- flows: capFlows .value ,
229- tools: capTools .value .split (' ,' ).map ((s : string ) => s .trim ()).filter (Boolean )
230- })
231153 await request .post (' /ai/provider/save' , form .value )
232154 ElMessage .success (' 保存成功' )
233155 dialogVisible .value = false
0 commit comments