From 216581d444da1db470f59b6d1e354cc9d791d9b5 Mon Sep 17 00:00:00 2001 From: lzt404 <2596933790@qq.com> Date: Mon, 3 Aug 2026 17:15:42 +0800 Subject: [PATCH] fix(settings): show saved status only after explicit save --- package.json | 2 +- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 2 +- src-tauri/tauri.conf.json | 2 +- src/i18n/ja.ts | 1 - src/i18n/resources.ts | 2 -- src/pages/ConfigPanel.tsx | 64 ++++++++++++++++++++++++--------------- 7 files changed, 43 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index ad70648..3d8b597 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "cpa-gui", "private": true, - "version": "0.2.11", + "version": "0.2.12", "type": "module", "packageManager": "bun@1.3.14", "scripts": { diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index 9001530..0f21b2c 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -582,7 +582,7 @@ checksum = "7704b5fdd17b18ae31c4c1da5a2e0305a2bf17b5249300a9ee9ed7b72114c636" [[package]] name = "cpa-gui" -version = "0.2.11" +version = "0.2.12" dependencies = [ "base64 0.22.1", "chrono", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 4c04ec8..e911110 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cpa-gui" -version = "0.2.11" +version = "0.2.12" description = "CPA desktop management shell" authors = ["lzt404"] edition = "2021" diff --git a/src-tauri/tauri.conf.json b/src-tauri/tauri.conf.json index 29d92f4..81b557f 100644 --- a/src-tauri/tauri.conf.json +++ b/src-tauri/tauri.conf.json @@ -1,7 +1,7 @@ { "$schema": "https://schema.tauri.app/config/2", "productName": "EasyCLIProxyAPI", - "version": "0.2.11", + "version": "0.2.12", "identifier": "com.cpa.gui", "build": { "beforeDevCommand": "bun run dev", diff --git a/src/i18n/ja.ts b/src/i18n/ja.ts index e02fc0a..2690ceb 100644 --- a/src/i18n/ja.ts +++ b/src/i18n/ja.ts @@ -343,7 +343,6 @@ export const jaOverrides = { 'config.software.title': 'ソフトウェア設定', 'config.software.description': 'ウィンドウの閉じるボタンをクリックしたときのデフォルト動作を設定します。「毎回確認」を選ぶと確認ダイアログに戻ります。', 'config.software.closeBehavior': '終了動作', - 'config.software.closeBehaviorHint': '選択を記憶すると、ウィンドウを閉じたときに選択した動作をすぐに実行します。', 'config.software.behavior.ask': '毎回確認', 'config.software.behavior.minimize': 'トレイに最小化', 'config.software.behavior.exit': 'アプリを終了', diff --git a/src/i18n/resources.ts b/src/i18n/resources.ts index 9cacc78..c9bbc33 100644 --- a/src/i18n/resources.ts +++ b/src/i18n/resources.ts @@ -290,7 +290,6 @@ export const zhCN = { 'config.software.title': '软件设置', 'config.software.description': '设置点击窗口关闭按钮时的默认行为。选择“每次询问”即可恢复关闭确认弹窗。', 'config.software.closeBehavior': '关闭行为', - 'config.software.closeBehaviorHint': '记住选项后,关闭窗口将直接执行所选操作。', 'config.software.behavior.ask': '每次询问', 'config.software.behavior.minimize': '最小化到托盘', 'config.software.behavior.exit': '退出程序', @@ -1243,7 +1242,6 @@ export const en: Record = { 'config.software.title': 'Software Settings', 'config.software.description': 'Choose what happens by default when you click the window close button. Select “Ask every time” to restore the confirmation dialog.', 'config.software.closeBehavior': 'Close behavior', - 'config.software.closeBehaviorHint': 'When a choice is remembered, closing the window performs the selected action immediately.', 'config.software.behavior.ask': 'Ask every time', 'config.software.behavior.minimize': 'Minimize to Tray', 'config.software.behavior.exit': 'Exit App', diff --git a/src/pages/ConfigPanel.tsx b/src/pages/ConfigPanel.tsx index 91e1b09..425c77f 100644 --- a/src/pages/ConfigPanel.tsx +++ b/src/pages/ConfigPanel.tsx @@ -83,6 +83,7 @@ export function ConfigPanelPage() { const [softwareSettings, setSoftwareSettings] = useState(null); const [softwareSettingsLoading, setSoftwareSettingsLoading] = useState(true); const [softwareCloseBehaviorDraft, setSoftwareCloseBehaviorDraft] = useState('ask'); + const [softwareSavedStatusVisible, setSoftwareSavedStatusVisible] = useState(false); const [loading, setLoading] = useState(true); const [loadError, setLoadError] = useState(''); const [busyAction, setBusyAction] = useState(null); @@ -193,6 +194,7 @@ export function ConfigPanelPage() { async function loadSoftwareSettings() { setSoftwareSettingsLoading(true); + setSoftwareSavedStatusVisible(false); try { const result = await invoke('get_gui_settings'); setSoftwareSettings(result); @@ -470,9 +472,11 @@ export function ConfigPanelPage() { }); setSoftwareSettings(result); setSoftwareCloseBehaviorDraft(result.closeBehavior); + setSoftwareSavedStatusVisible(true); showNotice(t('config.notice.softwareCloseBehaviorUpdated'), 'success'); } catch (error) { setSoftwareCloseBehaviorDraft(softwareSettings.closeBehavior); + setSoftwareSavedStatusVisible(false); showNotice(t('config.error.saveFailed', { error: String(error) }), 'error'); } finally { setBusyAction(null); @@ -500,6 +504,19 @@ export function ConfigPanelPage() { : ''; const softwareCloseBehaviorDirty = softwareSettings !== null && softwareCloseBehaviorDraft !== softwareSettings.closeBehavior; + const softwareStatusLabel = softwareSettingsLoading + ? t('common.loading') + : softwareSettings === null + ? t('common.unavailable') + : softwareCloseBehaviorDirty + ? t('config.network.unsaved') + : softwareSavedStatusVisible + ? t('config.network.saved') + : ''; + const softwareStatusIsSaved = !softwareSettingsLoading + && softwareSettings !== null + && !softwareCloseBehaviorDirty + && softwareSavedStatusVisible; const networkStatusIsSaved = !loading && settings !== null && busyAction === null @@ -538,18 +555,6 @@ export function ConfigPanelPage() { > {t('config.tabs.network')} - + {activeSubpage === 'general' ? ( @@ -1008,15 +1025,11 @@ export function ConfigPanelPage() {

{t('config.software.title')}

- - {softwareSettingsLoading - ? t('common.loading') - : softwareSettings === null - ? t('common.unavailable') - : softwareCloseBehaviorDirty - ? t('config.network.unsaved') - : t('config.network.saved')} - + {softwareStatusLabel ? ( + + {softwareStatusLabel} + + ) : null}
-
- {t('config.software.closeBehavior')} +

{t('config.software.description')}

- {t('config.software.closeBehaviorHint')}