import { useState } from 'react'; import { useSecurityStore } from '../../store/securityStore'; import { Settings as SettingsIcon, BarChart3, Puzzle, MessageSquare, FolderOpen, Shield, Info, ArrowLeft, Coins, Cpu, Zap, HelpCircle, ClipboardList, Clock, Heart, Key, Database, Cloud, } from 'lucide-react'; import { silentErrorHandler } from '../../lib/error-utils'; import { General } from './General'; import { UsageStats } from './UsageStats'; import { ModelsAPI } from './ModelsAPI'; import { MCPServices } from './MCPServices'; import { Skills } from './Skills'; import { IMChannels } from './IMChannels'; import { Workspace } from './Workspace'; import { Privacy } from './Privacy'; import { About } from './About'; import { Credits } from './Credits'; import { AuditLogsPanel } from '../AuditLogsPanel'; import { SecurityStatus } from '../SecurityStatus'; import { SecurityLayersPanel } from '../SecurityLayersPanel'; import { TaskList } from '../TaskList'; import { HeartbeatConfig } from '../HeartbeatConfig'; import { SecureStorage } from './SecureStorage'; import { VikingPanel } from '../VikingPanel'; import { SaaSSettings } from '../SaaS/SaaSSettings'; interface SettingsLayoutProps { onBack: () => void; } type SettingsPage = | 'general' | 'usage' | 'credits' | 'models' | 'mcp' | 'skills' | 'im' | 'workspace' | 'privacy' | 'security' | 'storage' | 'saas' | 'viking' | 'audit' | 'tasks' | 'heartbeat' | 'feedback' | 'about'; const menuItems: { id: SettingsPage; label: string; icon: React.ReactNode }[] = [ { id: 'general', label: '通用', icon: }, { id: 'usage', label: '用量统计', icon: }, { id: 'credits', label: '积分详情', icon: }, { id: 'models', label: '模型与 API', icon: }, { id: 'mcp', label: 'MCP 服务', icon: }, { id: 'skills', label: '技能', icon: }, { id: 'im', label: 'IM 频道', icon: }, { id: 'workspace', label: '工作区', icon: }, { id: 'privacy', label: '数据与隐私', icon: }, { id: 'storage', label: '安全存储', icon: }, { id: 'saas', label: 'SaaS 平台', icon: }, { id: 'viking', label: '语义记忆', icon: }, { id: 'security', label: '安全状态', icon: }, { id: 'audit', label: '审计日志', icon: }, { id: 'tasks', label: '定时任务', icon: }, { id: 'heartbeat', label: '心跳配置', icon: }, { id: 'feedback', label: '提交反馈', icon: }, { id: 'about', label: '关于', icon: }, ]; export function SettingsLayout({ onBack }: SettingsLayoutProps) { const [activePage, setActivePage] = useState('general'); const securityStatus = useSecurityStore((s) => s.securityStatus); const renderPage = () => { switch (activePage) { case 'general': return ; case 'usage': return ; case 'credits': return ; case 'models': return ; case 'mcp': return ; case 'skills': return ; case 'im': return ; case 'workspace': return ; case 'privacy': return ; case 'storage': return ; case 'saas': return ; case 'security': return (

安全状态

安全架构详情

); case 'audit': return ; case 'tasks': return (

定时任务

); case 'heartbeat': return (
); case 'viking': return ; case 'feedback': return ; case 'about': return ; default: return ; } }; return (
{/* Left navigation */} {/* Main content */}
{renderPage()}
); } // Simple feedback page (inline) function Feedback() { const [text, setText] = useState(''); const [copied, setCopied] = useState(false); const handleCopy = async () => { await navigator.clipboard.writeText(text.trim()); setCopied(true); }; return (

提交反馈

当前版本尚未接入在线反馈通道。你可以先复制下面的反馈内容,再连同截图和日志一起发给开发者。