/** * @fileoverview 主应用组件 * @description 负责应用的路由配置、布局和设计模式集成 */ import React, { Suspense } from 'react'; import { Routes, Route, Navigate } from 'react-router-dom'; import { motion, AnimatePresence } from 'framer-motion'; import { useDesignModeStore } from './main'; // 页面组件(懒加载) const Dashboard = React.lazy(() => import('./pages/Dashboard')); const ComponentEditor = React.lazy(() => import('./pages/ComponentEditor')); const DesignSystem = React.lazy(() => import('./pages/DesignSystem')); const LivePreview = React.lazy(() => import('./pages/LivePreview')); // 布局组件 import AppLayout from './components/layout/AppLayout'; import LoadingSpinner from './components/ui/LoadingSpinner'; // 页面过渡动画配置 const pageVariants = { initial: { opacity: 0, y: 20, }, in: { opacity: 1, y: 0, }, out: { opacity: 0, y: -20, }, }; const pageTransition = { type: 'tween', ease: 'anticipate', duration: 0.3, }; /** * 页面容器组件 - 提供统一的页面布局和动画 */ const PageContainer: React.FC<{ children: React.ReactNode; title: string; description?: string; className?: string; }> = ({ children, title, description, className = '' }) => (

{title}

{description && (

{description}

)}
{children}
); /** * 页面路由配置组件 */ const AppRoutes: React.FC = () => { return ( }> {/* 默认重定向到仪表盘 */} } /> {/* 仪表盘页面 */} } /> {/* 组件编辑器页面 */} } /> {/* 设计系统页面 */} } /> {/* 实时预览页面 */} } /> {/* 404 页面 */}

Page Not Found

The page you're looking for doesn't exist.

Go to Dashboard
} />
); }; /** * 设计模式集成组件 */ const DesignModeIntegration: React.FC = () => { const { isDesignModeEnabled, selectedComponent, hoveredComponent } = useDesignModeStore(); // 为组件添加设计模式属性 React.useEffect(() => { if (!isDesignModeEnabled) return; const addDesignModeAttributes = () => { const components = document.querySelectorAll('[data-component]'); components.forEach((element, index) => { const componentName = element.getAttribute('data-component'); const elementName = element.getAttribute('data-element'); const action = element.getAttribute('data-action'); // 添加设计模式属性 element.setAttribute('data-design-mode', 'true'); element.setAttribute('data-design-mode-component', componentName || 'Unknown'); if (elementName) { element.setAttribute('data-design-mode-element', elementName); } if (action) { element.setAttribute('data-design-mode-action', action); } }); }; // 监听 DOM 变化 const observer = new MutationObserver(addDesignModeAttributes); observer.observe(document.body, { childList: true, subtree: true, attributes: true, }); // 初始调用 addDesignModeAttributes(); return () => { observer.disconnect(); }; }, [isDesignModeEnabled]); // 添加全局样式 React.useEffect(() => { if (isDesignModeEnabled) { const style = document.createElement('style'); style.id = 'design-mode-styles'; style.textContent = ` [data-design-mode="true"] { cursor: crosshair; } [data-design-mode="true"]:hover { outline: 2px solid #3b82f6 !important; outline-offset: 2px !important; background-color: rgba(59, 130, 246, 0.05) !important; } [data-design-mode-active="true"] { outline: 3px solid #ef4444 !important; outline-offset: 2px !important; background-color: rgba(239, 68, 68, 0.1) !important; } [data-design-mode-hover="true"] { outline: 2px solid #f59e0b !important; outline-offset: 2px !important; background-color: rgba(245, 158, 11, 0.1) !important; } `; document.head.appendChild(style); return () => { document.getElementById('design-mode-styles')?.remove(); }; } }, [isDesignModeEnabled]); return null; }; /** * 主应用组件 */ const App: React.FC = () => { const { isDesignModeEnabled } = useDesignModeStore(); return (
{/* 设计模式集成 */} {/* 主要内容 */} {/* 开发模式信息 */} {import.meta.env.DEV && (
Design Mode: {isDesignModeEnabled ? 'Enabled' : 'Disabled'}
React: {React.version}
Vite: {import.meta.env.MODE}
)}
); }; export default App;