diff --git a/src/app/settings/page.tsx b/src/app/settings/page.tsx index 064480c..a9d5a1d 100644 --- a/src/app/settings/page.tsx +++ b/src/app/settings/page.tsx @@ -2,11 +2,11 @@ import { useState, useEffect } from 'react'; import Link from 'next/link'; -import { ArrowLeft, Download, Check, Loader2, Eye, EyeOff, RotateCcw } from 'lucide-react'; -import { Sidebar, SidebarToggle } from '@/components/layout/Sidebar'; +import { ArrowLeft, Download, Check, Loader2, Eye, EyeOff, RotateCcw, Moon, Sun, Sparkles, Trash2 } from 'lucide-react'; import { Toggle } from '@/components/ui/Toggle'; +import { ModelCardSelector } from '@/components/ui/ModelCardSelector'; +import { FontSizePicker } from '@/components/ui/FontSizePicker'; import { cn } from '@/lib/utils'; -import { currentUser, chatHistories } from '@/data/mock'; import { useSettings, useModels, useTools } from '@/hooks/useSettings'; // 默认系统提示词 @@ -44,7 +44,6 @@ const DEFAULT_SYSTEM_PROMPT = `你是一个专业、友好的 AI 助手。请遵 - 承认不确定的地方,不要编造信息`; export default function SettingsPage() { - const [sidebarOpen, setSidebarOpen] = useState(true); const { settings, loading, saving, updateSettings } = useSettings(); const { models, loading: modelsLoading } = useModels(); const { tools, loading: toolsLoading } = useTools(); @@ -105,6 +104,17 @@ export default function SettingsPage() { } }; + // 更新字体大小 + const handleFontSizeChange = async (fontSize: number) => { + try { + await updateSettings({ fontSize }); + // 实时应用到页面 + document.documentElement.style.setProperty('--font-size-base', `${fontSize}px`); + } catch (error) { + console.error('Failed to update font size:', error); + } + }; + // 切换工具 const handleToolToggle = async (toolId: string) => { const currentTools = settings?.defaultTools || []; @@ -177,6 +187,17 @@ export default function SettingsPage() { setTemperature(value); }; + // 切换主题 + const handleToggleTheme = async () => { + const newTheme = settings?.theme === 'dark' ? 'light' : 'dark'; + try { + await updateSettings({ theme: newTheme }); + document.documentElement.setAttribute('data-theme', newTheme); + } catch (error) { + console.error('Failed to update theme:', error); + } + }; + if (loading) { return (
@@ -185,55 +206,46 @@ export default function SettingsPage() { ); } + const isDarkMode = settings?.theme === 'dark'; + return ( -
- {/* 侧边栏 */} - setSidebarOpen(!sidebarOpen)} - /> - - {/* 主内容区 */} -
- {/* Header */} -
- setSidebarOpen(!sidebarOpen)} /> -
- - {/* Body */} -
-
- {/* 返回链接 */} +
+ {/* 顶部导航栏 */} +
+
+ {/* 左侧:返回按钮和标题 */} +
- - 返回聊天 + - - {/* 页面标题 */} -
-

- 设置 -

-

- 管理您的账户设置和偏好 -

+
+ +

Settings

+
- {/* CCH 配置 */} - + {/* 右侧:主题切换 */} + +
+
+ + {/* 主内容区 */} +
+ {/* CCH 配置 */} + - - - + models={models} + /> +
+ + {/* 字体大小设置 */} +
+
+ 字体大小 +
+
+ 调整全局字体大小,实时预览效果 +
+ +
handleToolToggle(tool.toolId)} disabled={saving} className={cn( - 'inline-flex items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium transition-all', + 'inline-flex items-center gap-2 px-3 py-2 rounded-md text-sm font-medium transition-all', settings?.defaultTools?.includes(tool.toolId) ? 'bg-[var(--color-primary)] text-white' : 'bg-[var(--color-bg-tertiary)] text-[var(--color-text-secondary)] hover:bg-[var(--color-bg-secondary)]' @@ -465,45 +490,6 @@ export default function SettingsPage() {
- {/* 偏好设置 */} - - - - - - - - - - {/* 数据与隐私 */} - - - {/* 危险区域 */} - - - - - -
-
); @@ -572,7 +543,7 @@ function SettingsSection({ title, description, children, variant = 'default' }: return (