diff --git a/src/App.tsx b/src/App.tsx index c90b774..1642a7b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -6,6 +6,7 @@ import { ProcessGroupsPage } from './pages/ProcessGroupsPage' import { ProcessDetailPage } from './pages/ProcessDetailPage' import { ProcessMatrixPage } from './pages/ProcessMatrixPage' import { ProcessGraphPage } from './pages/ProcessGraphPage' +import { ProcessRoadmapPage } from './pages/ProcessRoadmapPage' import { ArtifactDetailPage } from './pages/ArtifactDetailPage' import { ToolDetailPage } from './pages/ToolDetailPage' import { SettingsPage } from './pages/SettingsPage' @@ -21,6 +22,7 @@ function App() { } /> } /> } /> + } /> } /> } /> } /> diff --git a/src/components/layout/Layout.tsx b/src/components/layout/Layout.tsx index b957aa1..0dc9c36 100644 --- a/src/components/layout/Layout.tsx +++ b/src/components/layout/Layout.tsx @@ -30,9 +30,7 @@ export function Layout({ children }: LayoutProps) { sidebarOpen ? 'lg:ml-64' : 'lg:ml-20' )} > -
- {children} -
+ {children} diff --git a/src/components/layout/Sidebar.tsx b/src/components/layout/Sidebar.tsx index 3a24895..1878470 100644 --- a/src/components/layout/Sidebar.tsx +++ b/src/components/layout/Sidebar.tsx @@ -6,6 +6,7 @@ import { BookOpen, Layers, LayoutGrid, + Workflow, Share2, Settings, ChevronLeft, @@ -15,6 +16,7 @@ import { const navItems = [ { path: '/', label: '首页', icon: Home }, { path: '/process-matrix', label: '49过程矩阵', icon: LayoutGrid }, + { path: '/process-roadmap', label: '流程总览图', icon: Workflow }, { path: '/knowledge-areas', label: '知识领域', icon: BookOpen }, { path: '/process-groups', label: '过程组', icon: Layers }, { path: '/process-graph', label: '过程关系图', icon: Share2 }, diff --git a/src/components/visualize/ProcessMatrix.tsx b/src/components/visualize/ProcessMatrix.tsx index c3c0262..5f9d06a 100644 --- a/src/components/visualize/ProcessMatrix.tsx +++ b/src/components/visualize/ProcessMatrix.tsx @@ -110,18 +110,26 @@ export function ProcessMatrix({ className, isFullScreen = false }: ProcessMatrix state={{ from: 'matrix' }} className={clsx( "block px-2 py-1.5 rounded text-xs hover:bg-gray-100 dark:hover:bg-gray-700 transition-colors", - isFullScreen && "flex items-center h-full" + isFullScreen && "h-full" )} + title={p.name} > - - {p.code} - - - {p.name} - +
+ + {p.code} + + + {p.name} + +
))} {cellProcesses.length === 0 && ( diff --git a/src/pages/HomePage.tsx b/src/pages/HomePage.tsx index eb92f5d..dbba6cc 100644 --- a/src/pages/HomePage.tsx +++ b/src/pages/HomePage.tsx @@ -1,6 +1,6 @@ import { Link } from 'react-router-dom' import { motion } from 'framer-motion' -import { BookOpen, Layers, LayoutGrid, ArrowRight } from 'lucide-react' +import { BookOpen, Layers, LayoutGrid, Workflow, ArrowRight } from 'lucide-react' import { stats } from '@/data' const features = [ @@ -12,6 +12,14 @@ const features = [ color: 'from-emerald-500 to-teal-500', count: stats.processCount, }, + { + icon: Workflow, + title: '流程总览图', + description: '五组十域可交互SVG流程图,支持模块点击跳转', + link: '/process-roadmap', + color: 'from-orange-500 to-amber-500', + count: null, + }, { icon: BookOpen, title: '知识领域', @@ -116,7 +124,7 @@ export function HomePage() { variants={containerVariants} initial="hidden" animate="visible" - className="grid md:grid-cols-3 gap-6" + className="grid md:grid-cols-2 xl:grid-cols-4 gap-6" > {features.map((feature) => { const Icon = feature.icon diff --git a/src/pages/ProcessDetailPage.tsx b/src/pages/ProcessDetailPage.tsx index 84bcd85..5ad2d56 100644 --- a/src/pages/ProcessDetailPage.tsx +++ b/src/pages/ProcessDetailPage.tsx @@ -1,6 +1,6 @@ import { useParams, Link, useLocation, useNavigate } from 'react-router-dom' import { motion } from 'framer-motion' -import { ArrowLeft, ArrowRight, FileText, Wrench, FileOutput, LayoutGrid, User, Target, Clock, MapPin, HelpCircle, Cog } from 'lucide-react' +import { ArrowLeft, ArrowRight, FileText, Wrench, FileOutput, LayoutGrid, Workflow, User, Target, Clock, MapPin, HelpCircle, Cog } from 'lucide-react' import { getProcessDetail, processes, artifactMap, toolMap } from '@/data' // 5W1H图标和标签配置 @@ -20,6 +20,7 @@ export function ProcessDetailPage() { const processDetail = id ? getProcessDetail(id) : null const fromMatrix = location.state?.from === 'matrix' + const fromRoadmap = location.state?.from === 'roadmap' if (!processDetail) { return ( @@ -53,6 +54,15 @@ export function ProcessDetailPage() { 返回矩阵 )} + {fromRoadmap && ( + + )}