/** * 统一设置页面 — Tab 切换外壳。 * * 通过 URL query param ?tab=xxx 同步 Tab 状态。 */ import { useSearchParams } from 'react-router-dom' import { motion } from 'framer-motion' import { BarChart3, Radio, SlidersHorizontal, Sparkles, Settings2, Zap } from 'lucide-react' import { SettingsAIPanel } from './settings/AI' import { SettingsMonitoringPanel } from './settings/Monitoring' import { SettingsExtPagesPanel } from './settings/ExtPages' import { SettingsMenuSettingsPanel } from './settings/MenuSettings' import { SettingsSystemPanel } from './settings/System' import { SettingsCustomSignalsPanel } from './settings/CustomSignals' import { PageHeader } from '@/components/PageHeader' import { cn } from '@/lib/cn' // ===== Tab 定义 ===== const TABS = [ // { key: 'account', label: '数据源', icon: Key, panel: SettingsKeysPanel }, { key: 'ai', label: 'AI 设置', icon: Sparkles, panel: SettingsAIPanel }, { key: 'monitoring', label: '实时监控', icon: Radio, panel: SettingsMonitoringPanel }, { key: 'ext-pages', label: '扩展页面', icon: BarChart3, panel: SettingsExtPagesPanel }, { key: 'signals', label: '信号库', icon: Zap, panel: SettingsCustomSignalsPanel }, { key: 'menus', label: '菜单设置', icon: SlidersHorizontal, panel: SettingsMenuSettingsPanel }, { key: 'system', label: '系统设置', icon: Settings2, panel: SettingsSystemPanel }, ] as const type TabKey = (typeof TABS)[number]['key'] export function Settings() { const [searchParams, setSearchParams] = useSearchParams() const tabParam = searchParams.get('tab') as TabKey | null const activeTab = TABS.find((t) => t.key === tabParam) ?? TABS[0] const highlight = searchParams.get('highlight') ?? '' return ( <>
{/* ===== 竖向 Tab 侧栏(内容垂直居中) ===== */} {/* ===== Tab 内容 ===== */} {activeTab.key === 'monitoring' ? : }
) }