From cc69927f8c9e986973245f95831770cc9f7903b6 Mon Sep 17 00:00:00 2001 From: gouki Date: Sun, 2 Aug 2026 16:14:44 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=B9=B3=E5=8F=B0=E5=87=AD=E8=AF=81?= =?UTF-8?q?=E5=8A=A8=E6=80=81=E8=A1=A8=E5=8D=95=EF=BC=88=E6=8C=89SDK?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E6=B8=B2=E6=9F=93=E5=87=AD=E8=AF=81=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E6=9B=BF=E4=BB=A3=E6=89=8B=E5=86=99JSON?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/app.js | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/static/js/app.js b/static/js/app.js index 16e3d07..786749e 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -661,10 +661,14 @@ const ProviderModal = { - + - +
+
API 凭证(加密存储)
+ +
+
该 SDK 类型暂无预设凭证字段(可后续扩展)
@@ -674,7 +678,30 @@ const ProviderModal = {
`, - setup() { return { store, Fmt, f: computed(() => store.providerModal.form), save: saveProvider }; }, + setup() { + const f = computed(() => store.providerModal.form); + const adapterMeta = ref([]); + const apiFields = reactive({}); + onMounted(async () => { + try { const r = await Api.get('/providers/adapters'); adapterMeta.value = r.adapters || []; } catch (e) { /* ignore */ } + }); + const sdkOptions = computed(() => { + const opts = []; + for (const m of adapterMeta.value) for (const t of (m.sdk_types || [])) opts.push({ type: t, fields: m.required_config || [] }); + return opts; + }); + const currentFields = computed(() => { + const opt = sdkOptions.value.find(o => o.type === (f.value && f.value.sdk_type)); + return opt ? opt.fields : []; + }); + function save() { + const cfg = {}; + for (const field of currentFields.value) if (apiFields[field]) cfg[field] = apiFields[field]; + if (Object.keys(cfg).length) f.value.api_config = JSON.stringify(cfg); + saveProvider(); + } + return { store, Fmt, f, sdkOptions, currentFields, apiFields, save }; + }, }; /* ================= 根组件 ================= */