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:
kangfenmao 2025-07-31 19:00:42 +08:00
parent 50a9518de7
commit c214a6e56e
5 changed files with 47 additions and 44 deletions

View File

@ -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} />

View File

@ -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 />} />

View File

@ -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

View File

@ -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>
)
}