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.backup.button')}
+
+ }>
+ {t('settings.general.restore.button')}
+
+
+
+
+
+ {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 = () => {
{/* 添加 在线备份 在线还原 按钮 */}
} loading={backuping}>
- {t('settings.general.webdav.backup.button')}
+ {t('settings.data.webdav.backup.button')}
} loading={restoring}>
- {t('settings.general.webdav.restore.button')}
+ {t('settings.data.webdav.restore.button')}
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')}
+
+
+
+
+ {t('settings.theme.title')}
+
+
+ {isMac && (
+ <>
+
+
+ {t('settings.theme.window.style.title')}
+
+
+ >
+ )}
+
+
+ {t('settings.general.check_update_setting')}
+
+
+
+ {t('settings.proxy.title')}
+ setProxyUrl(e.target.value)}
+ style={{ width: 180 }}
+ onBlur={() => onSetProxyUrl()}
+ type="url"
+ />
+
+
+
+ {t('settings.topic.position')}
+
+
+
+ {topicPosition === 'left' && (
+ <>
+
+ {t('settings.advanced.click_assistant_switch_to_topics')}
+ dispatch(setClickAssistantToShowTopic(checked))}
+ />
+
+
+ >
+ )}
+
+ )
+}
+
+export default GeneralSettings
diff --git a/src/renderer/src/pages/settings/GeneralSettings/GeneralSettings.tsx b/src/renderer/src/pages/settings/GeneralSettings/GeneralSettings.tsx
deleted file mode 100644
index d9c82f66..00000000
--- a/src/renderer/src/pages/settings/GeneralSettings/GeneralSettings.tsx
+++ /dev/null
@@ -1,195 +0,0 @@
-import { FolderOpenOutlined, SaveOutlined } from '@ant-design/icons'
-import { HStack, VStack } from '@renderer/components/Layout'
-import { isMac } from '@renderer/config/constant'
-import { useSettings } from '@renderer/hooks/useSettings'
-import i18n from '@renderer/i18n'
-import { backup, reset, restore } from '@renderer/services/backup'
-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 { Button, Input, Select, Switch } from 'antd'
-import { FC, useState } 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 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')}
-
-
-
-
- {t('settings.theme.title')}
-
-
- {isMac && (
- <>
-
-
- {t('settings.theme.window.style.title')}
-
-
- >
- )}
-
-
- {t('settings.topic.position')}
-
-
-
- {topicPosition === 'left' && (
- <>
-
- {t('settings.advanced.click_assistant_switch_to_topics')}
- dispatch(setClickAssistantToShowTopic(checked))}
- />
-
-
- >
- )}
-
- {t('settings.general.check_update_setting')}
-
-
-
- {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.backup.button')}
-
- }>
- {t('settings.general.restore.button')}
-
-
-
-
-
- {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')}
+
+
+