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");
+ });
+ }
+ })();