From fb7e2eb3da4f0126b10924643d1d0a9a2833ce18 Mon Sep 17 00:00:00 2001 From: "xiaohan.yuan" Date: Sun, 18 Oct 2026 19:11:50 +0800 Subject: [PATCH] refactor(settings): migrate controls to shared primitives --- .../src/components/GeneralSettingsPanel.tsx | 90 +++++++------------ .../src/components/SettingsDialog.tsx | 8 +- 2 files changed, 38 insertions(+), 60 deletions(-) diff --git a/src/renderer/src/components/GeneralSettingsPanel.tsx b/src/renderer/src/components/GeneralSettingsPanel.tsx index a6fcd71..c11dde6 100644 --- a/src/renderer/src/components/GeneralSettingsPanel.tsx +++ b/src/renderer/src/components/GeneralSettingsPanel.tsx @@ -21,6 +21,9 @@ import { useCallback, useEffect, useState } from 'react' import type { ReactNode } from 'react' import type { GeneralSettingsView } from '@shared/types' +import { Button } from '../ui/Button' +import { Input } from '../ui/Input' +import { Switch } from '../ui/Switch' import { IconTaskOpenFolder } from './task-menu-icons' import { IconNotificationAuthorize, IconSelectCaret } from './general-settings-icons' import './source-general-settings.css' @@ -110,40 +113,6 @@ function Section({ title, desc, action, body, stacked, className }: SectionProps ) } -function Switch({ checked, ariaLabel, disabled, onChange }: { - checked: boolean - ariaLabel: string - disabled?: boolean - onChange(checked: boolean): void -}): React.JSX.Element { - return ( -
- -
- ) -} - -/** 未接入的开关:保持原版开/关外观与尺寸,但不可交互。 */ -function UnavailableSwitch({ checked, ariaLabel }: { checked: boolean; ariaLabel: string }): React.JSX.Element { - return ( -
- -
- ) -} - /** 未接入的下拉:原版 120×32 闭合态(value + caret),不可展开。 */ function UnavailableSelect({ value, className, ariaLabel }: { value: string; className?: string; ariaLabel: string }): React.JSX.Element { return ( @@ -239,21 +208,27 @@ export default function GeneralSettingsPanel(): React.JSX.Element {
} />
update({ preventSleep: checked })} />} /> + action={ update({ preventSleep: checked })} />} />
update({ autoLaunch: checked })} />} /> + action={ update({ autoLaunch: checked })} />} />
} body={
} />
} /> + action={
+ +
} />
} /> + action={
+ +
} />
} /> + action={
+ +
} />
@@ -263,11 +238,10 @@ export default function GeneralSettingsPanel(): React.JSX.Element {
系统缓存目录
- +
{view?.dataDir ?? '—'} · 存放对话记录、运行缓存与临时文件。 @@ -310,12 +284,9 @@ export default function GeneralSettingsPanel(): React.JSX.Element {

新建任务、工作空间时将自动存放在该路径下;修改后不影响已有数据。

- - + +
@@ -325,15 +296,14 @@ export default function GeneralSettingsPanel(): React.JSX.Element {

通知

- 前往系统设置 - - } /> + action={} />
} />
} /> + action={
+ +
} />
@@ -346,7 +316,9 @@ export default function GeneralSettingsPanel(): React.JSX.Element { {' '} event.preventDefault()}>了解更多 } - action={} /> + action={
+ +
} /> diff --git a/src/renderer/src/components/SettingsDialog.tsx b/src/renderer/src/components/SettingsDialog.tsx index d31d521..1568329 100644 --- a/src/renderer/src/components/SettingsDialog.tsx +++ b/src/renderer/src/components/SettingsDialog.tsx @@ -3,6 +3,12 @@ import { useSettingsStore } from '../stores/settings' import SourceSettingsNavigation from './SourceSettingsNavigation' import { useSharedTheme } from '../useSharedTheme' import { SOURCE_WINDOWS_SETTINGS_TABS } from './SourceSettingsNavigation' +import { Button } from '../ui/Button' +// 统一组件样式必须在恢复样式之前加载:恢复样式是页面作用域的覆盖层, +// 同权重时后写者胜,顺序反转会让 `.yc-*` 默认值盖掉 `.general-settings-panel__*` 的页面覆盖。 +// `../ui/Button` 已把 button.css 提前带入,这里补上其余两张组件表。 +import '../ui/input.css' +import '../ui/switch.css' // Shared UI-kit controls are also used by direct links to Memory/Agents/About. import './source-select/source-select-recovered.css' import './source-select/source-select.css' @@ -77,7 +83,7 @@ export default function SettingsDialog({ theme, onThemeChange, onClose, nativeWi {error &&

{error}

} {section === 'settings' && } {section === 'model' && setCreateRequest(0)} onSave={settings.saveModel} onDelete={settings.deleteModel} onTest={(input) => window.ycode.models.test(input)} />} - {section === 'workspace' &&

工作空间

{settings.workspaces.map((space) => )}
} + {section === 'workspace' &&

工作空间

{settings.workspaces.map((space) => )}
} {section === 'appearance' && } {section === 'keyboardShortcuts' && } {section === 'personalization' && }