diff --git a/deploy/tksea-portal/admin-batch-import.html b/deploy/tksea-portal/admin-batch-import.html index 33e3fa07..03f542a6 100644 --- a/deploy/tksea-portal/admin-batch-import.html +++ b/deploy/tksea-portal/admin-batch-import.html @@ -1,5 +1,5 @@ - + @@ -87,7 +87,14 @@ @@ -151,9 +158,14 @@
diff --git a/deploy/tksea-portal/admin/providers.html b/deploy/tksea-portal/admin/providers.html index dcfe707a..829456c5 100644 --- a/deploy/tksea-portal/admin/providers.html +++ b/deploy/tksea-portal/admin/providers.html @@ -197,8 +197,10 @@
@@ -225,7 +227,21 @@ 根据 display name / base url / models 自动生成,并尽量避免与现有 provider_id 冲突。
@@ -234,19 +250,74 @@
@@ -557,6 +628,13 @@ if (forceProviderID || state.draftProviderIDAuto || !draftProviderIDInput.value.trim()) { draftProviderIDInput.value = suggested; } + // Auto-fill smoke_test_model with first model if user hasn't filled it yet + if (!draftSmokeModelInput.value.trim()) { + const models = parseDraftModels(); + if (models.length > 0) { + draftSmokeModelInput.value = models[0]; + } + } } function rememberLastPublishedTemplate() { @@ -1441,6 +1519,13 @@ if (forceProviderID || state.draftProviderIDAuto || !draftProviderIDInput.value.trim()) { draftProviderIDInput.value = suggested; } + // Auto-fill smoke_test_model with first model if user hasn't filled it yet + if (!draftSmokeModelInput.value.trim()) { + const models = parseDraftModels(); + if (models.length > 0) { + draftSmokeModelInput.value = models[0]; + } + } } function rememberLastPublishedTemplate() { @@ -2112,6 +2197,40 @@ syncDraftHelperState(); refreshAdminSession().catch(() => {}); renderServerDrafts(); + + // Wire up the "常用模型" preset chips — click to append to Models field. + // Placed after the main script so the input refs are available. + (function wireModelPresets() { + const wrap = document.getElementById("model-presets"); + if (!wrap) return; + wrap.addEventListener("click", (ev) => { + const btn = ev.target.closest("button[data-model]"); + if (!btn) return; + ev.preventDefault(); + const model = btn.getAttribute("data-model"); + const current = (draftModelsInput.value || "") + .split(",") + .map((s) => s.trim()) + .filter(Boolean); + if (current.includes(model)) { + setStatus(document.getElementById("draft-status"), `模型 ${model} 已在列表中`, "note"); + return; + } + current.push(model); + draftModelsInput.value = current.join(","); + syncDraftHelperState(false); + setStatus(document.getElementById("draft-status"), `已加入 ${model}(共 ${current.length} 个)`, "success"); + }); + const clearBtn = wrap.querySelector('[data-action="clear-models"]'); + if (clearBtn) { + clearBtn.addEventListener("click", (ev) => { + ev.preventDefault(); + draftModelsInput.value = ""; + syncDraftHelperState(false); + setStatus(document.getElementById("draft-status"), "已清空 Models 字段", "note"); + }); + } + })();