diff --git a/src/renderer/src/i18n/en-us.json b/src/renderer/src/i18n/en-us.json index 06b366a8..b2c95a61 100644 --- a/src/renderer/src/i18n/en-us.json +++ b/src/renderer/src/i18n/en-us.json @@ -188,6 +188,7 @@ "settings": { "title": "Settings", "general": "General Settings", + "data": "Data Settings", "provider": "Model Provider", "model": "Default Model", "assistant": "Default Assistant", @@ -208,15 +209,15 @@ "general.backup.button": "Backup", "general.restore.button": "Restore", "general.view_webdav_settings": "View WebDAV settings", - "general.webdav.title": "WebDAV", - "general.webdav.host": "WebDAV Host", - "general.webdav.host.placeholder": "http://localhost:8080", - "general.webdav.user": "WebDAV User", - "general.webdav.password": "WebDAV Password", - "general.webdav.path": "WebDAV Path", - "general.webdav.path.placeholder": "/backup", - "general.webdav.backup.button": "Backup to WebDAV", - "general.webdav.restore.button": "Restore from WebDAV", + "data.webdav.title": "WebDAV", + "data.webdav.host": "WebDAV Host", + "data.webdav.host.placeholder": "http://localhost:8080", + "data.webdav.user": "WebDAV User", + "data.webdav.password": "WebDAV Password", + "data.webdav.path": "WebDAV Path", + "data.webdav.path.placeholder": "/backup", + "data.webdav.backup.button": "Backup to WebDAV", + "data.webdav.restore.button": "Restore from WebDAV", "general.reset.title": "Data Reset", "general.reset.button": "Reset", "general.check_update_setting": "Check for updates", diff --git a/src/renderer/src/i18n/zh-cn.json b/src/renderer/src/i18n/zh-cn.json index a2e6d313..d4b9523b 100644 --- a/src/renderer/src/i18n/zh-cn.json +++ b/src/renderer/src/i18n/zh-cn.json @@ -188,6 +188,7 @@ "settings": { "title": "设置", "general": "常规设置", + "data": "数据设置", "provider": "模型服务", "model": "默认模型", "assistant": "默认助手", @@ -210,15 +211,15 @@ "general.reset.title": "重置数据", "general.reset.button": "重置", "general.view_webdav_settings": "查看 WebDAV 设置", - "general.webdav.title": "WebDAV", - "general.webdav.host": "WebDAV 地址", - "general.webdav.host.placeholder": "http://localhost:8080", - "general.webdav.user": "WebDAV 用户名", - "general.webdav.password": "WebDAV 密码", - "general.webdav.path": "WebDAV 路径", - "general.webdav.path.placeholder": "/backup", - "general.webdav.backup.button": "备份到 WebDAV", - "general.webdav.restore.button": "从 WebDAV 恢复", + "data.webdav.title": "WebDAV", + "data.webdav.host": "WebDAV 地址", + "data.webdav.host.placeholder": "http://localhost:8080", + "data.webdav.user": "WebDAV 用户名", + "data.webdav.password": "WebDAV 密码", + "data.webdav.path": "WebDAV 路径", + "data.webdav.path.placeholder": "/backup", + "data.webdav.backup.button": "备份到 WebDAV", + "data.webdav.restore.button": "从 WebDAV 恢复", "general.check_update_setting": "更新设置", "general.manual_update_check": "手动检查更新", "general.auto_update_check": "自动检查更新", diff --git a/src/renderer/src/i18n/zh-tw.json b/src/renderer/src/i18n/zh-tw.json index 3fb80a85..866294e4 100644 --- a/src/renderer/src/i18n/zh-tw.json +++ b/src/renderer/src/i18n/zh-tw.json @@ -188,6 +188,7 @@ "settings": { "title": "設定", "general": "一般設定", + "data": "數據設定", "provider": "模型提供者", "model": "預設模型", "assistant": "預設助手", @@ -208,15 +209,15 @@ "general.backup.button": "備份", "general.restore.button": "復原", "general.view_webdav_settings": "查看 WebDAV 設定", - "general.webdav.title": "WebDAV", - "general.webdav.host": "WebDAV 主機位址", - "general.webdav.host.placeholder": "http://localhost:8080", - "general.webdav.user": "WebDAV 使用者名稱", - "general.webdav.password": "WebDAV 密碼", - "general.webdav.path": "WebDAV Path", - "general.webdav.path.placeholder": "/backup", - "general.webdav.backup.button": "從 WebDAV 備份", - "general.webdav.restore.button": "從 WebDAV 恢復", + "data.webdav.title": "WebDAV", + "data.webdav.host": "WebDAV 主機位址", + "data.webdav.host.placeholder": "http://localhost:8080", + "data.webdav.user": "WebDAV 使用者名稱", + "data.webdav.password": "WebDAV 密碼", + "data.webdav.path": "WebDAV Path", + "data.webdav.path.placeholder": "/backup", + "data.webdav.backup.button": "從 WebDAV 備份", + "data.webdav.restore.button": "從 WebDAV 恢復", "general.reset.title": "資料重置", "general.reset.button": "重置", "general.check_update_setting": "更新設定", diff --git a/src/renderer/src/pages/settings/DataSettings/DataSettings.tsx b/src/renderer/src/pages/settings/DataSettings/DataSettings.tsx new file mode 100644 index 00000000..2d68a9de --- /dev/null +++ b/src/renderer/src/pages/settings/DataSettings/DataSettings.tsx @@ -0,0 +1,61 @@ +import { FolderOpenOutlined, SaveOutlined } from '@ant-design/icons' +import { HStack, VStack } from '@renderer/components/Layout' +import { backup, reset, restore } from '@renderer/services/backup' +import { Button } from 'antd' +import { FC } from 'react' +import { useTranslation } from 'react-i18next' +import { Link, Route, Routes } from 'react-router-dom' + +import { SettingContainer, SettingDivider, SettingRow, SettingRowTitle, SettingTitle } from '..' +import WebDavSettings from './WebDavSettings' + +const DataSettings: FC = () => { + const { t } = useTranslation() + + return ( + + + {t('settings.data')} + + + {t('settings.data.webdav.title')} + + + {t('settings.general.view_webdav_settings')} + + + + + + {t('settings.general.backup.title')} + + + + + + + + {t('settings.general.reset.title')} + + + + + + + } + /> + } /> + + ) +} + +export default DataSettings diff --git a/src/renderer/src/pages/settings/GeneralSettings/WebDavSettings.tsx b/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx similarity index 80% rename from src/renderer/src/pages/settings/GeneralSettings/WebDavSettings.tsx rename to src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx index 9449983c..686c3bcd 100644 --- a/src/renderer/src/pages/settings/GeneralSettings/WebDavSettings.tsx +++ b/src/renderer/src/pages/settings/DataSettings/WebDavSettings.tsx @@ -62,20 +62,20 @@ const WebDavSettings: FC = () => { - {t('settings.general.webdav.title')} + {t('settings.data.webdav.title')} - {t('settings.general.webdav.host')} + {t('settings.data.webdav.host')} setWebdavHost(e.target.value)} style={{ width: 250 }} @@ -85,9 +85,9 @@ const WebDavSettings: FC = () => { - {t('settings.general.webdav.user')} + {t('settings.data.webdav.user')} setWebdavUser(e.target.value)} style={{ width: 250 }} @@ -96,9 +96,9 @@ const WebDavSettings: FC = () => { - {t('settings.general.webdav.password')} + {t('settings.data.webdav.password')} setWebdavPass(e.target.value)} style={{ width: 250 }} @@ -107,9 +107,9 @@ const WebDavSettings: FC = () => { - {t('settings.general.webdav.path')} + {t('settings.data.webdav.path')} setWebdavPath(e.target.value)} style={{ width: 250 }} @@ -122,10 +122,10 @@ const WebDavSettings: FC = () => { {/* 添加 在线备份 在线还原 按钮 */} diff --git a/src/renderer/src/pages/settings/GeneralSettings.tsx b/src/renderer/src/pages/settings/GeneralSettings.tsx new file mode 100644 index 00000000..3421d42e --- /dev/null +++ b/src/renderer/src/pages/settings/GeneralSettings.tsx @@ -0,0 +1,152 @@ +import { isMac } from '@renderer/config/constant' +import { useSettings } from '@renderer/hooks/useSettings' +import i18n from '@renderer/i18n' +import { useAppDispatch } from '@renderer/store' +import { setClickAssistantToShowTopic, setLanguage, setManualUpdateCheck } from '@renderer/store/settings' +import { setProxyUrl as _setProxyUrl } from '@renderer/store/settings' +import { ThemeMode } from '@renderer/types' +import { isValidProxyUrl } from '@renderer/utils' +import { Input, Select, Switch } from 'antd' +import { FC, useState } from 'react' +import { useTranslation } from 'react-i18next' + +import { SettingContainer, SettingDivider, SettingRow, SettingRowTitle, SettingTitle } from '.' + +const GeneralSettings: FC = () => { + const { + language, + proxyUrl: storeProxyUrl, + theme, + windowStyle, + topicPosition, + clickAssistantToShowTopic, + manualUpdateCheck, + setTheme, + setWindowStyle, + setTopicPosition + } = useSettings() + const [proxyUrl, setProxyUrl] = useState(storeProxyUrl) + + const dispatch = useAppDispatch() + const { t } = useTranslation() + + const onSelectLanguage = (value: string) => { + dispatch(setLanguage(value)) + localStorage.setItem('language', value) + i18n.changeLanguage(value) + } + + const onSetProxyUrl = () => { + if (proxyUrl && !isValidProxyUrl(proxyUrl)) { + window.message.error({ content: t('message.error.invalid.proxy.url'), key: 'proxy-error' }) + return + } + + dispatch(_setProxyUrl(proxyUrl)) + window.api.setProxy(proxyUrl) + } + + return ( + + {t('settings.general.title')} + + + {t('common.language')} + + + {isMac && ( + <> + + + {t('settings.theme.window.style.title')} + dispatch(setManualUpdateCheck(v))} + options={[ + { value: false, label: t('settings.general.auto_update_check') }, + { value: true, label: t('settings.general.manual_update_check') } + ]} + /> + + + + {t('settings.proxy.title')} + setProxyUrl(e.target.value)} + style={{ width: 180 }} + onBlur={() => onSetProxyUrl()} + type="url" + /> + + + + {t('settings.topic.position')} + - - - - {t('settings.theme.title')} - - - - )} - - - {t('settings.topic.position')} - dispatch(setManualUpdateCheck(v))} - options={[ - { value: false, label: t('settings.general.auto_update_check') }, - { value: true, label: t('settings.general.manual_update_check') } - ]} - /> - - - - {t('settings.proxy.title')} - setProxyUrl(e.target.value)} - style={{ width: 180 }} - onBlur={() => onSetProxyUrl()} - type="url" - /> - - - - {t('settings.general.webdav.title')} - - - {t('settings.general.view_webdav_settings')} - - - - - - {t('settings.general.backup.title')} - - - - - - - - {t('settings.general.reset.title')} - - - - - - - } - /> - } /> - - ) -} - -export default GeneralSettings diff --git a/src/renderer/src/pages/settings/SettingsPage.tsx b/src/renderer/src/pages/settings/SettingsPage.tsx index 25790fc0..dc399982 100644 --- a/src/renderer/src/pages/settings/SettingsPage.tsx +++ b/src/renderer/src/pages/settings/SettingsPage.tsx @@ -1,4 +1,4 @@ -import { CloudOutlined, InfoCircleOutlined, MessageOutlined, SettingOutlined } from '@ant-design/icons' +import { CloudOutlined, InfoCircleOutlined, MessageOutlined, SaveOutlined, SettingOutlined } from '@ant-design/icons' import { Navbar, NavbarCenter } from '@renderer/components/app/Navbar' import { isLocalAi } from '@renderer/config/env' import { FC } from 'react' @@ -8,7 +8,8 @@ import styled from 'styled-components' import AboutSettings from './AboutSettings' import AssistantSettings from './AssistantSettings' -import GeneralSettings from './GeneralSettings/GeneralSettings' +import DataSettings from './DataSettings/DataSettings' +import GeneralSettings from './GeneralSettings' import ModelSettings from './ModelSettings' import ProvidersList from './ProviderSettings' @@ -53,6 +54,12 @@ const SettingsPage: FC = () => { {t('settings.general')} + + + + {t('settings.data')} + + @@ -66,6 +73,7 @@ const SettingsPage: FC = () => { } /> } /> } /> + } /> } />