From 59ad2cb6225c77e148dd2756a02f2068d57d5c1f Mon Sep 17 00:00:00 2001 From: shiyu Date: Sat, 10 Jan 2026 13:22:07 +0800 Subject: [PATCH] feat: update AIProvider structure to include has_api_key and adjust API key handling in settings --- domain/ai/service.py | 2 +- web/src/api/aiProviders.ts | 3 +- .../components/AiSettingsTab.tsx | 30 ++++++++++++++++--- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/domain/ai/service.py b/domain/ai/service.py index 0956d4e..b44d143 100644 --- a/domain/ai/service.py +++ b/domain/ai/service.py @@ -140,7 +140,7 @@ def serialize_provider(provider: AIProvider) -> Dict[str, Any]: "provider_type": provider.provider_type, "api_format": provider.api_format, "base_url": provider.base_url, - "api_key": provider.api_key, + "has_api_key": bool(provider.api_key), "logo_url": provider.logo_url, "extra_config": provider.extra_config or {}, "created_at": provider.created_at, diff --git a/web/src/api/aiProviders.ts b/web/src/api/aiProviders.ts index c7cbce8..8881e7d 100644 --- a/web/src/api/aiProviders.ts +++ b/web/src/api/aiProviders.ts @@ -13,8 +13,9 @@ export interface AIProviderPayload { extra_config?: Record | null; } -export interface AIProvider extends Omit { +export interface AIProvider extends Omit { id: number; + has_api_key: boolean; extra_config: Record; created_at: string; updated_at: string; diff --git a/web/src/pages/SystemSettingsPage/components/AiSettingsTab.tsx b/web/src/pages/SystemSettingsPage/components/AiSettingsTab.tsx index 135e97e..ebae254 100644 --- a/web/src/pages/SystemSettingsPage/components/AiSettingsTab.tsx +++ b/web/src/pages/SystemSettingsPage/components/AiSettingsTab.tsx @@ -295,7 +295,7 @@ export default function AiSettingsTab() { identifier: existing.identifier, api_format: existing.api_format, base_url: existing.base_url ?? undefined, - api_key: existing.api_key ?? undefined, + api_key: '', logo_url: existing.logo_url ?? undefined, provider_type: existing.provider_type ?? undefined, }); @@ -345,10 +345,12 @@ export default function AiSettingsTab() { identifier: (values.identifier || '').trim(), api_format: values.api_format, base_url: trimmedBaseUrl ? trimmedBaseUrl : null, - api_key: trimmedApiKey ? trimmedApiKey : null, logo_url: trimmedLogoUrl ? trimmedLogoUrl : null, provider_type: trimmedProviderType ? trimmedProviderType : null, }; + if (trimmedApiKey) { + payload.api_key = trimmedApiKey; + } try { if (providerModal.editing) { await updateProvider(providerModal.editing.id, payload); @@ -1080,8 +1082,28 @@ export default function AiSettingsTab() { - - + + {t('API Key')} + {providerModal.editing ? ( + + {providerModal.editing.has_api_key ? '已设置' : '未设置'} + + ) : null} + + )} + > +