Quellcode durchsuchen

fix: Profile 切换引擎时模型列表随之更新(改为下拉框,切换时换成新引擎的默认模型)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Jerry Liang vor 6 Tagen
Ursprung
Commit
a90ab10a2c
1 geänderte Dateien mit 11 neuen und 3 gelöschten Zeilen
  1. 11 3
      apps/admin/src/views/ProfilesView.vue

+ 11 - 3
apps/admin/src/views/ProfilesView.vue

@@ -72,6 +72,12 @@ watch(id, () => {
 }, { immediate: true })
 watch(profiles, resetDraft)
 
+// 手动切换引擎时,原模型(如 sonnet)不属于新引擎,换成新引擎的默认模型;否则输入框保留旧值,候选列表按旧值过滤后为空
+function onProviderChange() {
+  const d = draft.value
+  if (d && !models.value.includes(d.model)) d.model = providers.value.find(p => p.id === d.provider)?.defaultModel || models.value[0] || ''
+}
+
 // 技能列表随引擎切换
 watch(() => draft.value?.provider, async p => {
   if (p) skills.value = await admin.skills(p).catch(() => [])
@@ -191,14 +197,16 @@ onMounted(() => load().catch(err => toast(errorMessage(err), 'error')))
             <div><label class="label" for="p-desc">说明</label><input id="p-desc" v-model="draft.description" class="field"></div>
             <div>
               <label class="label" for="p-provider">引擎</label>
-              <select id="p-provider" v-model="draft.provider" class="field" :disabled="!!current?.builtin" :title="current?.builtin ? '内置 Profile 的引擎不能修改' : ''">
+              <select id="p-provider" v-model="draft.provider" class="field" @change="onProviderChange" :disabled="!!current?.builtin" :title="current?.builtin ? '内置 Profile 的引擎不能修改' : ''">
                 <option v-for="p in providers" :key="p.id" :value="p.id" :disabled="!p.enabled">{{ p.id }}{{ p.enabled ? '' : '(未启用)' }}</option>
               </select>
             </div>
             <div>
               <label class="label" for="p-model">模型</label>
-              <input id="p-model" v-model="draft.model" class="field" list="p-models">
-              <datalist id="p-models"><option v-for="m in models" :key="m" :value="m" :label="modelLabels[m]" /></datalist>
+              <select id="p-model" v-model="draft.model" class="field">
+                <option v-for="m in models" :key="m" :value="m">{{ m }}{{ modelLabels[m] ? ` · ${modelLabels[m]}` : '' }}</option>
+                <option v-if="draft.model && !models.includes(draft.model)" :value="draft.model">{{ draft.model }}(不在当前引擎的模型列表中)</option>
+              </select>
               <div v-if="modelLabels[draft.model]" class="hint mt-1">{{ modelLabels[draft.model] }}</div>
             </div>
             <div>