diff --git a/src/components/providers/forms/ProviderForm.tsx b/src/components/providers/forms/ProviderForm.tsx index d6c18855a..514367740 100644 --- a/src/components/providers/forms/ProviderForm.tsx +++ b/src/components/providers/forms/ProviderForm.tsx @@ -358,6 +358,7 @@ export function ProviderForm({ settingsConfig: form.watch("settingsConfig"), onConfigChange: (config) => form.setValue("settingsConfig", config), initialData: appId === "claude" ? initialData : undefined, + selectedPresetId: selectedPresetId ?? undefined, }); // 使用 Codex 通用配置片段 hook (仅 Codex 模式) @@ -373,6 +374,7 @@ export function ProviderForm({ codexConfig, onConfigChange: handleCodexConfigChange, initialData: appId === "codex" ? initialData : undefined, + selectedPresetId: selectedPresetId ?? undefined, }); // 使用 Gemini 配置 hook (仅 Gemini 模式) @@ -460,6 +462,7 @@ export function ProviderForm({ envStringToObj, envObjToString, initialData: appId === "gemini" ? initialData : undefined, + selectedPresetId: selectedPresetId ?? undefined, }); const [isCommonConfigModalOpen, setIsCommonConfigModalOpen] = useState(false); diff --git a/src/components/providers/forms/hooks/useCodexCommonConfig.ts b/src/components/providers/forms/hooks/useCodexCommonConfig.ts index 0c0e1811a..383536a5a 100644 --- a/src/components/providers/forms/hooks/useCodexCommonConfig.ts +++ b/src/components/providers/forms/hooks/useCodexCommonConfig.ts @@ -16,6 +16,7 @@ interface UseCodexCommonConfigProps { initialData?: { settingsConfig?: Record; }; + selectedPresetId?: string; } /** @@ -26,6 +27,7 @@ export function useCodexCommonConfig({ codexConfig, onConfigChange, initialData, + selectedPresetId, }: UseCodexCommonConfigProps) { const { t } = useTranslation(); const [useCommonConfig, setUseCommonConfig] = useState(false); @@ -41,6 +43,11 @@ export function useCodexCommonConfig({ // 用于跟踪新建模式是否已初始化默认勾选 const hasInitializedNewMode = useRef(false); + // 当预设变化时,重置初始化标记,使新预设能够重新触发初始化逻辑 + useEffect(() => { + hasInitializedNewMode.current = false; + }, [selectedPresetId]); + // 初始化:从 config.json 加载,支持从 localStorage 迁移 useEffect(() => { let mounted = true; diff --git a/src/components/providers/forms/hooks/useCommonConfigSnippet.ts b/src/components/providers/forms/hooks/useCommonConfigSnippet.ts index ddc8e4e17..d341ca64a 100644 --- a/src/components/providers/forms/hooks/useCommonConfigSnippet.ts +++ b/src/components/providers/forms/hooks/useCommonConfigSnippet.ts @@ -18,6 +18,7 @@ interface UseCommonConfigSnippetProps { initialData?: { settingsConfig?: Record; }; + selectedPresetId?: string; } /** @@ -28,6 +29,7 @@ export function useCommonConfigSnippet({ settingsConfig, onConfigChange, initialData, + selectedPresetId, }: UseCommonConfigSnippetProps) { const { t } = useTranslation(); const [useCommonConfig, setUseCommonConfig] = useState(false); @@ -43,6 +45,11 @@ export function useCommonConfigSnippet({ // 用于跟踪新建模式是否已初始化默认勾选 const hasInitializedNewMode = useRef(false); + // 当预设变化时,重置初始化标记,使新预设能够重新触发初始化逻辑 + useEffect(() => { + hasInitializedNewMode.current = false; + }, [selectedPresetId]); + // 初始化:从 config.json 加载,支持从 localStorage 迁移 useEffect(() => { let mounted = true; diff --git a/src/components/providers/forms/hooks/useGeminiCommonConfig.ts b/src/components/providers/forms/hooks/useGeminiCommonConfig.ts index 5e5011371..d1f1abb65 100644 --- a/src/components/providers/forms/hooks/useGeminiCommonConfig.ts +++ b/src/components/providers/forms/hooks/useGeminiCommonConfig.ts @@ -19,6 +19,7 @@ interface UseGeminiCommonConfigProps { initialData?: { settingsConfig?: Record; }; + selectedPresetId?: string; } function isPlainObject(value: unknown): value is Record { @@ -42,6 +43,7 @@ export function useGeminiCommonConfig({ envStringToObj, envObjToString, initialData, + selectedPresetId, }: UseGeminiCommonConfigProps) { const { t } = useTranslation(); const [useCommonConfig, setUseCommonConfig] = useState(false); @@ -57,6 +59,11 @@ export function useGeminiCommonConfig({ // 用于跟踪新建模式是否已初始化默认勾选 const hasInitializedNewMode = useRef(false); + // 当预设变化时,重置初始化标记,使新预设能够重新触发初始化逻辑 + useEffect(() => { + hasInitializedNewMode.current = false; + }, [selectedPresetId]); + const parseSnippetEnv = useCallback( ( snippetString: string,