From 0fa6b33b5ec47cd5b00fa043886019988bf47dbe Mon Sep 17 00:00:00 2001 From: Jason Date: Thu, 19 Feb 2026 23:06:22 +0800 Subject: [PATCH] feat(settings): add enableLocalProxy toggle to gate main page proxy UI New users often accidentally trigger ProxyToggle/FailoverToggle on the main page. Add a settings toggle (default off) so the proxy controls only appear when explicitly enabled. The proxy service start/stop in settings remains independent of this visibility flag. --- src-tauri/src/settings.rs | 4 +++ src/App.tsx | 32 +++++++++++++----------- src/components/proxy/ProxyPanel.tsx | 3 --- src/components/settings/SettingsPage.tsx | 18 +++++++++++-- src/i18n/locales/en.json | 2 ++ src/i18n/locales/ja.json | 2 ++ src/i18n/locales/zh.json | 2 ++ src/lib/schemas/settings.ts | 1 + src/types.ts | 2 ++ 9 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src-tauri/src/settings.rs b/src-tauri/src/settings.rs index 7fafe209..55962ff7 100644 --- a/src-tauri/src/settings.rs +++ b/src-tauri/src/settings.rs @@ -187,6 +187,9 @@ pub struct AppSettings { /// 静默启动(程序启动时不显示主窗口,仅托盘运行) #[serde(default)] pub silent_startup: bool, + /// 是否在主页面启用本地代理功能(默认关闭) + #[serde(default)] + pub enable_local_proxy: bool, #[serde(default, skip_serializing_if = "Option::is_none")] pub language: Option, @@ -262,6 +265,7 @@ impl Default for AppSettings { skip_claude_onboarding: false, launch_on_startup: false, silent_startup: false, + enable_local_proxy: false, language: None, visible_apps: None, claude_config_dir: None, diff --git a/src/App.tsx b/src/App.tsx index 74e5ec26..7fcb9cf5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1046,21 +1046,23 @@ function App() { )} {currentView === "providers" && ( <> - {activeApp !== "opencode" && activeApp !== "openclaw" && ( - <> - -
- -
- - )} + {activeApp !== "opencode" && + activeApp !== "openclaw" && + settingsData?.enableLocalProxy && ( + <> + +
+ +
+ + )} ) : (
- {/* 空白区域避免冲突 */} -
- {/* 基础设置 - 监听地址/端口 */}
diff --git a/src/components/settings/SettingsPage.tsx b/src/components/settings/SettingsPage.tsx index 2e1067d6..2095f358 100644 --- a/src/components/settings/SettingsPage.tsx +++ b/src/components/settings/SettingsPage.tsx @@ -55,6 +55,7 @@ import { useImportExport } from "@/hooks/useImportExport"; import { useTranslation } from "react-i18next"; import type { SettingsFormState } from "@/hooks/useSettings"; import { Switch } from "@/components/ui/switch"; +import { ToggleRow } from "@/components/ui/toggle-row"; import { Badge } from "@/components/ui/badge"; import { useProxyStatus } from "@/hooks/useProxyStatus"; @@ -356,8 +357,21 @@ export function SettingsPage({ />
- - + + } + title={t("settings.advanced.proxy.enableFeature")} + description={t( + "settings.advanced.proxy.enableFeatureDescription", + )} + checked={settings?.enableLocalProxy ?? false} + onCheckedChange={(checked) => + handleAutoSave({ enableLocalProxy: checked }) + } + /> +
+ +
diff --git a/src/i18n/locales/en.json b/src/i18n/locales/en.json index 9f728289..dff7b48d 100644 --- a/src/i18n/locales/en.json +++ b/src/i18n/locales/en.json @@ -192,6 +192,8 @@ "proxy": { "title": "Local Proxy", "description": "Control proxy service toggle, view status and port info", + "enableFeature": "Show Proxy Toggle on Main Page", + "enableFeatureDescription": "When enabled, the proxy and failover toggles will appear at the top of the main page", "running": "Running", "stopped": "Stopped" }, diff --git a/src/i18n/locales/ja.json b/src/i18n/locales/ja.json index 12992030..e02a5ea1 100644 --- a/src/i18n/locales/ja.json +++ b/src/i18n/locales/ja.json @@ -192,6 +192,8 @@ "proxy": { "title": "ローカルプロキシ", "description": "プロキシサービスの切り替え、ステータスとポート情報を表示", + "enableFeature": "メインページにプロキシ切り替えを表示", + "enableFeatureDescription": "有効にすると、メインページ上部にプロキシとフェイルオーバーの切り替えが表示されます", "running": "実行中", "stopped": "停止中" }, diff --git a/src/i18n/locales/zh.json b/src/i18n/locales/zh.json index e90df20a..1bedd8b4 100644 --- a/src/i18n/locales/zh.json +++ b/src/i18n/locales/zh.json @@ -192,6 +192,8 @@ "proxy": { "title": "本地代理", "description": "控制代理服务开关、查看状态与端口信息", + "enableFeature": "在主页面显示本地代理开关", + "enableFeatureDescription": "开启后,主页面顶部将显示代理和故障转移开关", "running": "运行中", "stopped": "已停止" }, diff --git a/src/lib/schemas/settings.ts b/src/lib/schemas/settings.ts index 87436c0d..c73781ce 100644 --- a/src/lib/schemas/settings.ts +++ b/src/lib/schemas/settings.ts @@ -14,6 +14,7 @@ export const settingsSchema = z.object({ enableClaudePluginIntegration: z.boolean().optional(), skipClaudeOnboarding: z.boolean().optional(), launchOnStartup: z.boolean().optional(), + enableLocalProxy: z.boolean().optional(), language: z.enum(["en", "zh", "ja"]).optional(), // 设备级目录覆盖 diff --git a/src/types.ts b/src/types.ts index 4fc52c49..da3a00d3 100644 --- a/src/types.ts +++ b/src/types.ts @@ -212,6 +212,8 @@ export interface Settings { launchOnStartup?: boolean; // 静默启动(程序启动时不显示主窗口) silentStartup?: boolean; + // 是否启用主页面本地代理功能(默认关闭) + enableLocalProxy?: boolean; // 首选语言(可选,默认中文) language?: "en" | "zh" | "ja";