import { useEffect, useState } from 'react' import { Spin, Alert, Button, Typography } from 'antd' import { ReloadOutlined } from '@ant-design/icons' import { loadOntology } from '../ontology/build' import type { Ontology } from '../ontology/types' import NetworkGraph from './NetworkGraph' import ERDiagram from './ERDiagram' import ProcessDiagram from './ProcessDiagram' const { Title, Text } = Typography const META: Record = { network: { title: '本体网络图', desc: '对象 + 行为 + 规则 + 事件的关联网络(M1/M2/ME/MetaRule 动态合成)' }, er: { title: '数据结构图(ER)', desc: '聚合根/子实体的字段结构、外键引用与组合关系(M1 动态合成)' }, process: { title: '场景流程图(BPMN)', desc: '端到端场景流程(M4 flowSteps → bpmn-elk-layout 自动布局 → bpmn-js 渲染)' }, } /** 可视化画布宿主:加载一次本体 IR,全高渲染选中的视图。 */ export function OntologyCanvas({ which }: { which: 'network' | 'er' | 'process' }) { const [onto, setOnto] = useState(null) const [err, setErr] = useState('') const [key, setKey] = useState(0) useEffect(() => { setOnto(null); setErr('') loadOntology().then(setOnto).catch((e) => setErr(String(e?.message || e))) }, [key]) const m = META[which] return (
{m.title} {m.desc}
{err ? (
) : !onto ? (
) : which === 'network' ? ( ) : which === 'er' ? ( ) : ( )}
) }