/** * 49过程矩阵页面 */ import { useEffect, useState } from 'react' import { ProcessMatrix } from '@/components/visualize' import { Maximize2, Minimize2, Eye } from 'lucide-react' import { useAppStore } from '@/stores/useAppStore' import { clsx } from 'clsx' import { knowledgeAreas, processGroups } from '@/data' const STORAGE_KEY = 'ittoview:process-matrix:hidden-items' interface HiddenIds { knowledgeAreas: Set processGroups: Set } // 从 localStorage 加载并清洗无效 ID function loadHiddenIds(): HiddenIds { try { const raw = localStorage.getItem(STORAGE_KEY) if (!raw) return { knowledgeAreas: new Set(), processGroups: new Set() } const parsed = JSON.parse(raw) if (typeof parsed !== 'object' || !parsed) { return { knowledgeAreas: new Set(), processGroups: new Set() } } // 清洗无效 ID const validKaIds = new Set(knowledgeAreas.map(ka => ka.id)) const validPgIds = new Set(processGroups.map(pg => pg.id)) const kaIds = Array.isArray(parsed.knowledgeAreas) ? parsed.knowledgeAreas.filter((id: string) => validKaIds.has(id)) : [] const pgIds = Array.isArray(parsed.processGroups) ? parsed.processGroups.filter((id: string) => validPgIds.has(id)) : [] return { knowledgeAreas: new Set(kaIds), processGroups: new Set(pgIds), } } catch { return { knowledgeAreas: new Set(), processGroups: new Set() } } } export function ProcessMatrixPage() { const isFullScreen = useAppStore((s) => s.matrixFullScreen) const setMatrixFullScreen = useAppStore((s) => s.setMatrixFullScreen) const setSidebarOpen = useAppStore((s) => s.setSidebarOpen) // 显示/隐藏状态管理 const [hiddenIds, setHiddenIds] = useState(() => loadHiddenIds()) const hiddenKnowledgeAreaIds = hiddenIds.knowledgeAreas const hiddenProcessGroupIds = hiddenIds.processGroups // 持久化状态 useEffect(() => { try { localStorage.setItem(STORAGE_KEY, JSON.stringify({ knowledgeAreas: Array.from(hiddenKnowledgeAreaIds), processGroups: Array.from(hiddenProcessGroupIds), })) } catch (error) { console.warn('无法保存矩阵显示状态:', error) } }, [hiddenKnowledgeAreaIds, hiddenProcessGroupIds]) const toggleKnowledgeArea = (id: string) => { setHiddenIds(prev => { const next = new Set(prev.knowledgeAreas) if (next.has(id)) { next.delete(id) } else { next.add(id) } return { ...prev, knowledgeAreas: next } }) } const toggleProcessGroup = (id: string) => { setHiddenIds(prev => { const next = new Set(prev.processGroups) if (next.has(id)) { next.delete(id) } else { next.add(id) } return { ...prev, processGroups: next } }) } const showAll = () => { setHiddenIds({ knowledgeAreas: new Set(), processGroups: new Set() }) } const hasHidden = hiddenKnowledgeAreaIds.size > 0 || hiddenProcessGroupIds.size > 0 const toggleFullScreen = () => { if (!isFullScreen) { setSidebarOpen(false) } setMatrixFullScreen(!isFullScreen) } // Handle Escape key to exit full screen useEffect(() => { const handleEsc = (e: KeyboardEvent) => { if (e.key === 'Escape' && isFullScreen) { setMatrixFullScreen(false) } } window.addEventListener('keydown', handleEsc) return () => window.removeEventListener('keydown', handleEsc) }, [isFullScreen, setMatrixFullScreen]) return (
{/* 隐藏滚动条的样式 */} {isFullScreen && ( )} {!isFullScreen && (

49过程矩阵

知识领域 × 过程组 的全景矩阵视图,点击过程可查看详情

{hasHidden && ( )}
)}
{isFullScreen && (
49过程矩阵全景图
{hasHidden && ( )}
)}
) }