From a2c1011c55ad492a23bc723c59789db6d89ca766 Mon Sep 17 00:00:00 2001 From: GeorgeDong32 Date: Thu, 25 Sep 2025 12:51:01 +0800 Subject: [PATCH] style(backup): fix style --- .../DataSettings/LocalBackupSettings.tsx | 50 ++++++++++++++++++- .../settings/DataSettings/WebDavSettings.tsx | 48 +++++++++++++++++- 2 files changed, 95 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/pages/settings/DataSettings/LocalBackupSettings.tsx b/src/renderer/src/pages/settings/DataSettings/LocalBackupSettings.tsx index f967e381b8..6a0e54d316 100644 --- a/src/renderer/src/pages/settings/DataSettings/LocalBackupSettings.tsx +++ b/src/renderer/src/pages/settings/DataSettings/LocalBackupSettings.tsx @@ -13,7 +13,9 @@ import { setLocalBackupDir as _setLocalBackupDir, setLocalBackupMaxBackups as _setLocalBackupMaxBackups, setLocalBackupSkipBackupFile as _setLocalBackupSkipBackupFile, - setLocalBackupSyncInterval as _setLocalBackupSyncInterval + setLocalBackupSyncInterval as _setLocalBackupSyncInterval, + setLocalSingleFileName as _setLocalSingleFileName, + setLocalSingleFileOverwrite as _setLocalSingleFileOverwrite } from '@renderer/store/settings' import { AppInfo } from '@renderer/types' import { Button, Input, Switch, Tooltip } from 'antd' @@ -32,12 +34,16 @@ const LocalBackupSettings: React.FC = () => { localBackupDir: localBackupDirSetting, localBackupSyncInterval: localBackupSyncIntervalSetting, localBackupMaxBackups: localBackupMaxBackupsSetting, - localBackupSkipBackupFile: localBackupSkipBackupFileSetting + localBackupSkipBackupFile: localBackupSkipBackupFileSetting, + localSingleFileOverwrite: localSingleFileOverwriteSetting, + localSingleFileName: localSingleFileNameSetting } = useSettings() const [localBackupDir, setLocalBackupDir] = useState(localBackupDirSetting) const [resolvedLocalBackupDir, setResolvedLocalBackupDir] = useState(undefined) const [localBackupSkipBackupFile, setLocalBackupSkipBackupFile] = useState(localBackupSkipBackupFileSetting) + const [localSingleFileOverwrite, setLocalSingleFileOverwrite] = useState(!!localSingleFileOverwriteSetting) + const [localSingleFileName, setLocalSingleFileName] = useState(localSingleFileNameSetting) const [backupManagerVisible, setBackupManagerVisible] = useState(false) const [syncInterval, setSyncInterval] = useState(localBackupSyncIntervalSetting) @@ -140,6 +146,15 @@ const LocalBackupSettings: React.FC = () => { dispatch(_setLocalBackupSkipBackupFile(value)) } + const onSingleFileOverwriteChange = (value: boolean) => { + setLocalSingleFileOverwrite(value) + dispatch(_setLocalSingleFileOverwrite(value)) + } + + const onSingleFileNameBlur = () => { + dispatch(_setLocalSingleFileName(localSingleFileName || '')) + } + const handleBrowseDirectory = async () => { try { const newLocalBackupDir = await window.api.select({ @@ -203,6 +218,37 @@ const LocalBackupSettings: React.FC = () => { {t('settings.data.local.title')} + {/* 覆盖式单文件备份,仅在自动备份开启且保留份数=1时推荐启用 */} + + + {t('settings.data.backup.singleFileOverwrite.title') || '覆盖式单文件备份(同名覆盖)'} + + 0 && maxBackups === 1)} + /> + + + + {t('settings.data.backup.singleFileOverwrite.help') || + '当自动备份开启且保留份数为1时,使用固定文件名每次覆盖。'} + + + + {t('settings.data.backup.singleFileName.title') || '自定义文件名(可选)'} + ..zip' + } + value={localSingleFileName} + onChange={(e) => setLocalSingleFileName(e.target.value)} + onBlur={onSingleFileNameBlur} + style={{ width: 300 }} + disabled={!localSingleFileOverwrite || !(syncInterval > 0 && maxBackups === 1)} + /> + + {t('settings.data.local.directory.label')} diff --git a/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx b/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx index 729cdafe4c..d045236e1a 100644 --- a/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx +++ b/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx @@ -14,6 +14,8 @@ import { setWebdavMaxBackups as _setWebdavMaxBackups, setWebdavPass as _setWebdavPass, setWebdavPath as _setWebdavPath, + setWebdavSingleFileName as _setWebdavSingleFileName, + setWebdavSingleFileOverwrite as _setWebdavSingleFileOverwrite, setWebdavSkipBackupFile as _setWebdavSkipBackupFile, setWebdavSyncInterval as _setWebdavSyncInterval, setWebdavUser as _setWebdavUser @@ -34,7 +36,9 @@ const WebDavSettings: FC = () => { webdavSyncInterval: webDAVSyncInterval, webdavMaxBackups: webDAVMaxBackups, webdavSkipBackupFile: webdDAVSkipBackupFile, - webdavDisableStream: webDAVDisableStream + webdavDisableStream: webDAVDisableStream, + webdavSingleFileOverwrite: webDAVSingleFileOverwrite, + webdavSingleFileName: webDAVSingleFileName } = useSettings() const [webdavHost, setWebdavHost] = useState(webDAVHost) @@ -43,6 +47,8 @@ const WebDavSettings: FC = () => { const [webdavPath, setWebdavPath] = useState(webDAVPath) const [webdavSkipBackupFile, setWebdavSkipBackupFile] = useState(webdDAVSkipBackupFile) const [webdavDisableStream, setWebdavDisableStream] = useState(webDAVDisableStream) + const [webdavSingleFileOverwrite, setWebdavSingleFileOverwrite] = useState(!!webDAVSingleFileOverwrite) + const [webdavSingleFileName, setWebdavSingleFileName] = useState(webDAVSingleFileName) const [backupManagerVisible, setBackupManagerVisible] = useState(false) const [syncInterval, setSyncInterval] = useState(webDAVSyncInterval) @@ -84,6 +90,15 @@ const WebDavSettings: FC = () => { dispatch(_setWebdavDisableStream(value)) } + const onSingleFileOverwriteChange = (value: boolean) => { + setWebdavSingleFileOverwrite(value) + dispatch(_setWebdavSingleFileOverwrite(value)) + } + + const onSingleFileNameBlur = () => { + dispatch(_setWebdavSingleFileName(webdavSingleFileName || '')) + } + const renderSyncStatus = () => { if (!webdavHost) return null @@ -123,6 +138,37 @@ const WebDavSettings: FC = () => { {t('settings.data.webdav.title')} + {/* 覆盖式单文件备份,仅在自动备份开启且保留份数=1时推荐启用 */} + + + {t('settings.data.backup.singleFileOverwrite.title') || '覆盖式单文件备份(同名覆盖)'} + + 0 && maxBackups === 1)} + /> + + + + {t('settings.data.backup.singleFileOverwrite.help') || + '当自动备份开启且保留份数为1时,使用固定文件名每次覆盖。'} + + + + {t('settings.data.backup.singleFileName.title') || '自定义文件名(可选)'} + ..zip' + } + value={webdavSingleFileName} + onChange={(e) => setWebdavSingleFileName(e.target.value)} + onBlur={onSingleFileNameBlur} + style={{ width: 300 }} + disabled={!webdavSingleFileOverwrite || !(syncInterval > 0 && maxBackups === 1)} + /> + + {t('settings.data.webdav.host.label')}