mirror of
https://github.com/CherryHQ/cherry-studio.git
synced 2026-01-01 17:59:09 +08:00
feat: add API server settings component and integrate into tool settings
- Introduced a new ApiServerSettings component for managing API server configurations. - Updated ToolSettings to include API server options and controls. - Enhanced GeneralSettings to improve proxy settings management. - Refactored UI elements for better organization and user experience.
This commit is contained in:
parent
50a9518de7
commit
c214a6e56e
@ -1,4 +1,5 @@
|
||||
import { InfoCircleOutlined } from '@ant-design/icons'
|
||||
import { HStack } from '@renderer/components/Layout'
|
||||
import Selector from '@renderer/components/Selector'
|
||||
import { useTheme } from '@renderer/context/ThemeProvider'
|
||||
import { useEnableDeveloperMode, useSettings } from '@renderer/hooks/useSettings'
|
||||
@ -199,37 +200,6 @@ const GeneralSettings: FC = () => {
|
||||
/>
|
||||
</SettingRow>
|
||||
<SettingDivider />
|
||||
<SettingRow>
|
||||
<SettingRowTitle>{t('settings.general.spell_check.label')}</SettingRowTitle>
|
||||
<Switch checked={enableSpellCheck} onChange={handleSpellCheckChange} />
|
||||
</SettingRow>
|
||||
{enableSpellCheck && (
|
||||
<>
|
||||
<SettingDivider />
|
||||
<SettingRow>
|
||||
<SettingRowTitle>{t('settings.general.spell_check.languages')}</SettingRowTitle>
|
||||
<Selector<string>
|
||||
size={14}
|
||||
multiple
|
||||
value={spellCheckLanguages}
|
||||
placeholder={t('settings.general.spell_check.languages')}
|
||||
onChange={handleSpellCheckLanguagesChange}
|
||||
options={spellCheckLanguageOptions.map((lang) => ({
|
||||
value: lang.value,
|
||||
label: (
|
||||
<Flex align="center" gap={8}>
|
||||
<span role="img" aria-label={lang.flag}>
|
||||
{lang.flag}
|
||||
</span>
|
||||
{lang.label}
|
||||
</Flex>
|
||||
)
|
||||
}))}
|
||||
/>
|
||||
</SettingRow>
|
||||
</>
|
||||
)}
|
||||
<SettingDivider />
|
||||
<SettingRow>
|
||||
<SettingRowTitle>{t('settings.proxy.mode.title')}</SettingRowTitle>
|
||||
<Selector value={storeProxyMode} onChange={onProxyModeChange} options={proxyModeOptions} />
|
||||
@ -251,6 +221,33 @@ const GeneralSettings: FC = () => {
|
||||
</>
|
||||
)}
|
||||
<SettingDivider />
|
||||
<SettingRow>
|
||||
<HStack justifyContent="space-between" alignItems="center" style={{ flex: 1, marginRight: 16 }}>
|
||||
<SettingRowTitle>{t('settings.general.spell_check.label')}</SettingRowTitle>
|
||||
{enableSpellCheck && (
|
||||
<Selector<string>
|
||||
size={14}
|
||||
multiple
|
||||
value={spellCheckLanguages}
|
||||
placeholder={t('settings.general.spell_check.languages')}
|
||||
onChange={handleSpellCheckLanguagesChange}
|
||||
options={spellCheckLanguageOptions.map((lang) => ({
|
||||
value: lang.value,
|
||||
label: (
|
||||
<Flex align="center" gap={8}>
|
||||
<span role="img" aria-label={lang.flag}>
|
||||
{lang.flag}
|
||||
</span>
|
||||
{lang.label}
|
||||
</Flex>
|
||||
)
|
||||
}))}
|
||||
/>
|
||||
)}
|
||||
</HStack>
|
||||
<Switch checked={enableSpellCheck} onChange={handleSpellCheckChange} />
|
||||
</SettingRow>
|
||||
<SettingDivider />
|
||||
<SettingRow>
|
||||
<SettingRowTitle>{t('settings.hardware_acceleration.title')}</SettingRowTitle>
|
||||
<Switch checked={disableHardwareAcceleration} onChange={handleHardwareAccelerationChange} />
|
||||
|
||||
@ -8,8 +8,8 @@ import {
|
||||
Info,
|
||||
MonitorCog,
|
||||
Package,
|
||||
PencilRuler,
|
||||
Rocket,
|
||||
Server,
|
||||
Settings2,
|
||||
SquareTerminal,
|
||||
TextCursorInput,
|
||||
@ -21,7 +21,6 @@ import { Link, Route, Routes, useLocation } from 'react-router-dom'
|
||||
import styled from 'styled-components'
|
||||
|
||||
import AboutSettings from './AboutSettings'
|
||||
import { ApiServerSettings } from './ApiServerSettings'
|
||||
import DataSettings from './DataSettings/DataSettings'
|
||||
import DisplaySettings from './DisplaySettings/DisplaySettings'
|
||||
import GeneralSettings from './GeneralSettings'
|
||||
@ -77,18 +76,18 @@ const SettingsPage: FC = () => {
|
||||
{t('settings.mcp.title')}
|
||||
</MenuItem>
|
||||
</MenuItemLink>
|
||||
<MenuItemLink to="/settings/api-server">
|
||||
<MenuItem className={isRoute('/settings/api-server')}>
|
||||
<Server size={18} />
|
||||
{t('apiServer.title')}
|
||||
</MenuItem>
|
||||
</MenuItemLink>
|
||||
<MenuItemLink to="/settings/memory">
|
||||
<MenuItem className={isRoute('/settings/memory')}>
|
||||
<Brain size={18} />
|
||||
{t('memory.title')}
|
||||
</MenuItem>
|
||||
</MenuItemLink>
|
||||
<MenuItemLink to="/settings/tool">
|
||||
<MenuItem className={isRoute('/settings/tool')}>
|
||||
<PencilRuler size={18} />
|
||||
{t('settings.tool.title')}
|
||||
</MenuItem>
|
||||
</MenuItemLink>
|
||||
<MenuItemLink to="/settings/shortcut">
|
||||
<MenuItem className={isRoute('/settings/shortcut')}>
|
||||
<Command size={18} />
|
||||
@ -133,7 +132,6 @@ const SettingsPage: FC = () => {
|
||||
<Route path="tool/*" element={<ToolSettings />} />
|
||||
<Route path="mcp/*" element={<MCPSettings />} />
|
||||
<Route path="memory" element={<MemorySettings />} />
|
||||
<Route path="api-server" element={<ApiServerSettings />} />
|
||||
<Route path="general/*" element={<GeneralSettings />} />
|
||||
<Route path="display" element={<DisplaySettings />} />
|
||||
<Route path="shortcut" element={<ShortcutSettings />} />
|
||||
|
||||
@ -11,7 +11,7 @@ import { useSelector } from 'react-redux'
|
||||
import styled from 'styled-components'
|
||||
import { v4 as uuidv4 } from 'uuid'
|
||||
|
||||
import { SettingContainer } from '..'
|
||||
import { SettingContainer } from '../..'
|
||||
|
||||
const logger = loggerService.withContext('ApiServerSettings')
|
||||
const { Text, Title } = Typography
|
||||
@ -2,23 +2,30 @@ import { GlobalOutlined } from '@ant-design/icons'
|
||||
import OcrIcon from '@renderer/components/Icons/OcrIcon'
|
||||
import { HStack } from '@renderer/components/Layout'
|
||||
import ListItem from '@renderer/components/ListItem'
|
||||
import { FileCode } from 'lucide-react'
|
||||
import { FileCode, Server } from 'lucide-react'
|
||||
import { FC, useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import styled from 'styled-components'
|
||||
|
||||
import ApiServerSettings from './ApiServerSettings/ApiServerSettings'
|
||||
import OcrSettings from './OcrSettings'
|
||||
import PreprocessSettings from './PreprocessSettings'
|
||||
import WebSearchSettings from './WebSearchSettings'
|
||||
|
||||
let _menu: string = 'web-search'
|
||||
|
||||
const ToolSettings: FC = () => {
|
||||
const { t } = useTranslation()
|
||||
const [menu, setMenu] = useState<string>('web-search')
|
||||
const [menu, setMenu] = useState<string>(_menu)
|
||||
const menuItems = [
|
||||
{ key: 'web-search', title: 'settings.tool.websearch.title', icon: <GlobalOutlined style={{ fontSize: 16 }} /> },
|
||||
{ key: 'preprocess', title: 'settings.tool.preprocess.title', icon: <FileCode size={16} /> },
|
||||
{ key: 'ocr', title: 'settings.tool.ocr.title', icon: <OcrIcon /> }
|
||||
{ key: 'ocr', title: 'settings.tool.ocr.title', icon: <OcrIcon /> },
|
||||
{ key: 'api-server', title: 'apiServer.title', icon: <Server size={16} /> }
|
||||
]
|
||||
|
||||
_menu = menu
|
||||
|
||||
return (
|
||||
<Container>
|
||||
<MenuList>
|
||||
@ -36,6 +43,7 @@ const ToolSettings: FC = () => {
|
||||
{menu == 'web-search' && <WebSearchSettings />}
|
||||
{menu == 'preprocess' && <PreprocessSettings />}
|
||||
{menu == 'ocr' && <OcrSettings />}
|
||||
{menu == 'api-server' && <ApiServerSettings />}
|
||||
</Container>
|
||||
)
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user