diff --git a/src/components/providers/forms/ProviderForm.tsx b/src/components/providers/forms/ProviderForm.tsx index ab3594b..6171bd0 100644 --- a/src/components/providers/forms/ProviderForm.tsx +++ b/src/components/providers/forms/ProviderForm.tsx @@ -24,7 +24,9 @@ import { } from "@/config/codexProviderPresets"; import { applyTemplateValues } from "@/utils/providerConfigUtils"; import ApiKeyInput from "@/components/ProviderForm/ApiKeyInput"; -import { useProviderCategory, useApiKeyState } from "./hooks"; +import EndpointSpeedTest from "@/components/ProviderForm/EndpointSpeedTest"; +import { Zap } from "lucide-react"; +import { useProviderCategory, useApiKeyState, useBaseUrlState } from "./hooks"; const CLAUDE_DEFAULT_CONFIG = JSON.stringify({ env: {}, config: {} }, null, 2); const CODEX_DEFAULT_CONFIG = JSON.stringify({ auth: {}, config: "" }, null, 2); @@ -64,6 +66,7 @@ export function ProviderForm({ id: string; category?: ProviderCategory; } | null>(null); + const [isEndpointModalOpen, setIsEndpointModalOpen] = useState(false); // 使用 category hook const { category } = useProviderCategory({ @@ -103,6 +106,23 @@ export function ProviderForm({ selectedPresetId, }); + // 使用 Base URL hook + const { + baseUrl, + // codexBaseUrl, // TODO: 等 Codex 支持时使用 + handleClaudeBaseUrlChange, + // handleCodexBaseUrlChange, // TODO: 等 Codex 支持时使用 + } = useBaseUrlState({ + appType, + category, + settingsConfig: form.watch("settingsConfig"), + codexConfig: "", // TODO: 从 settingsConfig 中提取 codex config + onSettingsConfigChange: (config) => form.setValue("settingsConfig", config), + onCodexConfigChange: () => { + // TODO: 更新 codex config + }, + }); + useEffect(() => { form.reset(defaultValues); }, [defaultValues, form]); @@ -181,6 +201,10 @@ export function ProviderForm({ ); }, [groupedPresets]); + // 判断是否显示端点测速(仅第三方和自定义类别) + const shouldShowSpeedTest = + category === "third_party" || category === "custom"; + const handlePresetChange = (value: string) => { setSelectedPresetId(value); if (value === "custom") { @@ -338,6 +362,50 @@ export function ProviderForm({ )} + {/* Base URL 输入框(仅 Claude 第三方/自定义显示) */} + {appType === "claude" && shouldShowSpeedTest && ( +
+ {t("providerForm.apiHint", { defaultValue: "API 端点地址用于连接服务器" })} +
+