diff --git a/src/renderer/src/components/sider/sysproxy-switcher.tsx b/src/renderer/src/components/sider/sysproxy-switcher.tsx index 2318cdd..e312cac 100644 --- a/src/renderer/src/components/sider/sysproxy-switcher.tsx +++ b/src/renderer/src/components/sider/sysproxy-switcher.tsx @@ -34,12 +34,17 @@ const SysproxySwitcher: React.FC = (props) => { }) const transform = tf ? { x: tf.x, y: tf.y, scaleX: 1, scaleY: 1 } : null const onChange = async (enable: boolean): Promise => { + const previousState = !enable + + // 立即更新UI try { - await triggerSysProxy(enable) await patchAppConfig({ sysProxy: { enable } }) + await triggerSysProxy(enable) + window.electron.ipcRenderer.send('updateFloatingWindow') window.electron.ipcRenderer.send('updateTrayMenu') } catch (e) { + await patchAppConfig({ sysProxy: { enable: previousState } }) alert(e) } } diff --git a/src/renderer/src/pages/syspeoxy.tsx b/src/renderer/src/pages/sysproxy.tsx similarity index 96% rename from src/renderer/src/pages/syspeoxy.tsx rename to src/renderer/src/pages/sysproxy.tsx index d2bdedb..f9a8aaa 100644 --- a/src/renderer/src/pages/syspeoxy.tsx +++ b/src/renderer/src/pages/sysproxy.tsx @@ -92,14 +92,21 @@ const Sysproxy: React.FC = () => { } const onSave = async (): Promise => { - // check valid TODO - await patchAppConfig({ sysProxy: values }) + setChanged(false) + + // 保存当前的开关状态,以便在失败时恢复 + const previousState = values.enable + try { + await patchAppConfig({ sysProxy: values }) await triggerSysProxy(true) + await patchAppConfig({ sysProxy: { enable: true } }) - setChanged(false) } catch (e) { + setValues({ ...values, enable: previousState }) + setChanged(true) alert(e) + await patchAppConfig({ sysProxy: { enable: false } }) } } diff --git a/src/renderer/src/routes/index.tsx b/src/renderer/src/routes/index.tsx index 232ff79..540b5da 100644 --- a/src/renderer/src/routes/index.tsx +++ b/src/renderer/src/routes/index.tsx @@ -7,7 +7,7 @@ import Profiles from '@renderer/pages/profiles' import Logs from '@renderer/pages/logs' import Connections from '@renderer/pages/connections' import Mihomo from '@renderer/pages/mihomo' -import Sysproxy from '@renderer/pages/syspeoxy' +import Sysproxy from '@renderer/pages/sysproxy' import Tun from '@renderer/pages/tun' import Resources from '@renderer/pages/resources' import DNS from '@renderer/pages/dns'