diff --git a/src/pages/ProcessRoadmapPage.tsx b/src/pages/ProcessRoadmapPage.tsx
new file mode 100644
index 0000000..5531b22
--- /dev/null
+++ b/src/pages/ProcessRoadmapPage.tsx
@@ -0,0 +1,361 @@
+import { useMemo, useState } from 'react'
+import { useNavigate } from 'react-router-dom'
+import { processes } from '@/data'
+
+interface Hotspot {
+ id: string
+ label: string
+ x: number
+ y: number
+ w: number
+ h: number
+ to: string
+}
+
+const svgStyles = `
+ .text { font-family: "Microsoft YaHei", "PingFang SC", sans-serif; font-size: 11px; fill: #333; text-anchor: middle; }
+ .group-title { font-size: 16px; font-weight: bold; }
+ .box { stroke-width: 1; rx: 4; ry: 4; }
+ .box-init { fill: #FFF9E6; stroke: #FAD266; }
+ .box-plan { fill: #EBF5FF; stroke: #91C7F2; }
+ .box-exec { fill: #F0F9EB; stroke: #C2E7B0; }
+ .box-moni { fill: #FFF9E6; stroke: #FAD266; }
+ .box-close { fill: #EBF5FF; stroke: #91C7F2; }
+ .box-red { fill: #FF0000; stroke: #CC0000; }
+ .text-white { fill: #FFFFFF; }
+ .arrow { stroke: #FF0000; stroke-width: 2; fill: none; }
+ .arrow-grey { stroke: #CCC; stroke-width: 1.5; fill: none; }
+ .marker { fill: #FF0000; }
+ .marker-grey { fill: #CCC; }
+`
+
+const staticSvgBody = `
+
+
+
+
启动
+
+
10.1识别干系人
+
+
1.1制定项目章程
+
+
+
+
+
规划
+
+
+
+
2.1规划范围管理
+
3.1规划进度管理
+
4.1规划成本管理
+
5.1规划质量管理
+
6.1规划资源管理
+
7.1规划沟通管理
+
8.1规划风险管理
+
9.1规划采购管理
+
10.2规划干系人
+
+
+
+
2.2收集需求
+
+
+
2.3定义范围
+
+
+
2.4创建WBS
+
+
+
+
6.2估算活动
+
资源
+
+
+
+
3.3排列活动
+
顺序
+
+
+
+
3.2定义活动
+
+
+
+
3.4估算活动
+
持续时间
+
+
+
+
3.5制定进度
+
计划
+
+
+
+
4.2估算成本
+
+
+
+
4.3制定预算
+
+
+
8.2识别风险
+
+
+
+
8.3实施定性
+
风险分析
+
+
+
+
8.4实施定量
+
风险分析
+
+
+
+
8.5规划风险
+
应对
+
+
+
1.2 制定项目管理计划
+
+
+
+
+
执行
+
+
+
6.3获取资源
+
+
+
+
6.4建设团队
+
+
+
+
6.5管理团队
+
+
+
8.6实施风险
+
应对
+
+
+
9.2实施采购
+
+
+
7.2管理沟通
+
+
+
10.3干系人
+
参与管理
+
+
+
5.2管理质量
+
+
+
1.4 管理项目
+
知识
+
+
+
1.3 指导与管理项目工作
+
+
+
+
+
监控
+
+
+
+ 2.6控制范围
+
+ 6.6控制资源
+
+ 9.3控制采购
+
+ 5.3控制质量
+
+
+ 3.6控制进度
+
+ 7.3监督沟通
+
+ 10.4监督
+ 干系人参与
+
+
+ 8.7监督风险
+
+ 4.4控制成本
+
+ 2.5确认范围
+
+
+
+
1.5监控项目
+
工作
+
+
+
1.6实施整体
+
变更控制
+
+
+
+
+
收尾
+
+
+
1.7 结束项目
+
或阶段
+
+
+
+
+
+
+`
+
+export function ProcessRoadmapPage() {
+ const navigate = useNavigate()
+ const [hoveredId, setHoveredId] = useState
(null)
+
+ const processIdByCode = useMemo(
+ () => new Map(processes.map((process) => [process.code, process.id])),
+ []
+ )
+
+ const hotspots = useMemo(() => {
+ const routeByCode = (code: string) => {
+ const processId = processIdByCode.get(code)
+ return processId ? `/process/${processId}` : '/process-matrix'
+ }
+
+ return [
+ { id: '10.1', label: '10.1 识别干系人', x: 30, y: 85, w: 80, h: 40, to: routeByCode('10.1') },
+ { id: '1.1', label: '1.1 制定项目章程', x: 30, y: 140, w: 80, h: 30, to: routeByCode('1.1') },
+
+ { id: '2.1', label: '2.1 规划范围管理', x: 142, y: 87, w: 96, h: 20, to: routeByCode('2.1') },
+ { id: '3.1', label: '3.1 规划进度管理', x: 142, y: 110, w: 96, h: 20, to: routeByCode('3.1') },
+ { id: '4.1', label: '4.1 规划成本管理', x: 142, y: 133, w: 96, h: 20, to: routeByCode('4.1') },
+ { id: '5.1', label: '5.1 规划质量管理', x: 142, y: 156, w: 96, h: 20, to: routeByCode('5.1') },
+ { id: '6.1', label: '6.1 规划资源管理', x: 142, y: 179, w: 96, h: 20, to: routeByCode('6.1') },
+ { id: '7.1', label: '7.1 规划沟通管理', x: 142, y: 202, w: 96, h: 20, to: routeByCode('7.1') },
+ { id: '8.1', label: '8.1 规划风险管理', x: 142, y: 225, w: 96, h: 20, to: routeByCode('8.1') },
+ { id: '9.1', label: '9.1 规划采购管理', x: 142, y: 248, w: 96, h: 20, to: routeByCode('9.1') },
+ { id: '10.2', label: '10.2 规划相关方参与', x: 142, y: 271, w: 96, h: 20, to: routeByCode('10.2') },
+
+ { id: '2.2', label: '2.2 收集需求', x: 250, y: 30, w: 70, h: 30, to: routeByCode('2.2') },
+ { id: '2.3', label: '2.3 定义范围', x: 350, y: 30, w: 70, h: 30, to: routeByCode('2.3') },
+ { id: '2.4', label: '2.4 创建WBS', x: 450, y: 30, w: 70, h: 30, to: routeByCode('2.4') },
+ { id: '6.2', label: '6.2 估算活动资源', x: 250, y: 90, w: 70, h: 35, to: routeByCode('6.2') },
+ { id: '3.3', label: '3.3 排列活动顺序', x: 350, y: 90, w: 70, h: 35, to: routeByCode('3.3') },
+ { id: '3.2', label: '3.2 定义活动', x: 450, y: 90, w: 70, h: 35, to: routeByCode('3.2') },
+ { id: '3.4', label: '3.4 估算活动持续时间', x: 250, y: 150, w: 70, h: 35, to: routeByCode('3.4') },
+ { id: '3.5', label: '3.5 制定进度计划', x: 350, y: 150, w: 70, h: 35, to: routeByCode('3.5') },
+ { id: '4.2', label: '4.2 估算成本', x: 450, y: 150, w: 70, h: 35, to: routeByCode('4.2') },
+ { id: '4.3', label: '4.3 制定预算', x: 450, y: 210, w: 70, h: 30, to: routeByCode('4.3') },
+ { id: '8.2', label: '8.2 识别风险', x: 250, y: 235, w: 70, h: 30, to: routeByCode('8.2') },
+ { id: '8.3', label: '8.3 实施定性风险分析', x: 350, y: 235, w: 70, h: 35, to: routeByCode('8.3') },
+ { id: '8.4', label: '8.4 实施定量风险分析', x: 450, y: 235, w: 70, h: 35, to: routeByCode('8.4') },
+ { id: '8.5', label: '8.5 规划风险应对', x: 450, y: 290, w: 70, h: 35, to: routeByCode('8.5') },
+ { id: '1.2', label: '1.2 制定项目管理计划', x: 140, y: 325, w: 430, h: 30, to: routeByCode('1.2') },
+
+ { id: '6.3', label: '6.3 获取资源', x: 600, y: 35, w: 50, h: 30, to: routeByCode('6.3') },
+ { id: '6.4', label: '6.4 建设团队', x: 600, y: 90, w: 70, h: 30, to: routeByCode('6.4') },
+ { id: '6.5', label: '6.5 管理团队', x: 700, y: 90, w: 70, h: 30, to: routeByCode('6.5') },
+ { id: '8.6', label: '8.6 实施风险应对', x: 600, y: 140, w: 70, h: 35, to: routeByCode('8.6') },
+ { id: '9.2', label: '9.2 实施采购', x: 700, y: 140, w: 70, h: 30, to: routeByCode('9.2') },
+ { id: '7.2', label: '7.2 管理沟通', x: 600, y: 190, w: 70, h: 30, to: routeByCode('7.2') },
+ { id: '10.3', label: '10.3 管理相关方参与', x: 700, y: 190, w: 70, h: 35, to: routeByCode('10.3') },
+ { id: '5.2', label: '5.2 管理质量', x: 600, y: 245, w: 200, h: 30, to: routeByCode('5.2') },
+ { id: '1.4', label: '1.4 管理项目知识', x: 600, y: 285, w: 80, h: 35, to: routeByCode('1.4') },
+ { id: '1.3', label: '1.3 指导与管理项目工作', x: 600, y: 325, w: 200, h: 30, to: routeByCode('1.3') },
+
+ { id: '2.6', label: '2.6 控制范围', x: 230, y: 390, w: 75, h: 30, to: routeByCode('2.6') },
+ { id: '6.6', label: '6.6 控制资源', x: 315, y: 390, w: 75, h: 30, to: routeByCode('6.6') },
+ { id: '9.3', label: '9.3 控制采购', x: 400, y: 390, w: 75, h: 30, to: routeByCode('9.3') },
+ { id: '5.3', label: '5.3 控制质量', x: 485, y: 390, w: 75, h: 30, to: routeByCode('5.3') },
+ { id: '3.6', label: '3.6 控制进度', x: 230, y: 435, w: 75, h: 30, to: routeByCode('3.6') },
+ { id: '7.3', label: '7.3 监督沟通', x: 315, y: 435, w: 75, h: 30, to: routeByCode('7.3') },
+ { id: '10.4', label: '10.4 监督相关方参与', x: 400, y: 435, w: 85, h: 35, to: routeByCode('10.4') },
+ { id: '8.7', label: '8.7 监督风险', x: 315, y: 485, w: 75, h: 30, to: routeByCode('8.7') },
+ { id: '4.4', label: '4.4 控制成本', x: 400, y: 485, w: 75, h: 30, to: routeByCode('4.4') },
+ { id: '2.5', label: '2.5 确认范围', x: 485, y: 485, w: 75, h: 30, to: routeByCode('2.5') },
+ { id: '1.5', label: '1.5 监控项目工作', x: 575, y: 400, w: 75, h: 35, to: routeByCode('1.5') },
+ { id: '1.6', label: '1.6 实施整体变更控制', x: 575, y: 445, w: 75, h: 35, to: routeByCode('1.6') },
+ { id: '1.7', label: '1.7 结束项目或阶段', x: 690, y: 400, w: 100, h: 35, to: routeByCode('1.7') },
+
+ ]
+ }, [processIdByCode])
+
+ const handleOpen = (to: string) => {
+ if (to.startsWith('/process/')) {
+ navigate(to, { state: { from: 'roadmap' } })
+ return
+ }
+ navigate(to)
+ }
+
+ return (
+
+
+
五组十域流程总览图
+
+
+
+
+
+
+ )
+}
diff --git a/src/pages/index.ts b/src/pages/index.ts
index 241a6ac..b46808f 100644
--- a/src/pages/index.ts
+++ b/src/pages/index.ts
@@ -3,6 +3,7 @@ export { KnowledgeAreasPage } from './KnowledgeAreasPage'
export { ProcessGroupsPage } from './ProcessGroupsPage'
export { ProcessDetailPage } from './ProcessDetailPage'
export { ProcessMatrixPage } from './ProcessMatrixPage'
+export { ProcessRoadmapPage } from './ProcessRoadmapPage'
export { ProcessGraphPage } from './ProcessGraphPage'
export { ArtifactDetailPage } from './ArtifactDetailPage'
export { ToolDetailPage } from './ToolDetailPage'