import React, { useEffect } from "react"; import { Input, Layout, Tabs, ConfigProvider, Spin } from "antd"; import type { TabsProps } from "antd/lib"; import Toolbar from "./components/Toolbar"; import TablePanel from "./components/TablePanel"; import RelationPanel from "./components/RelationPanel"; import ThemePanel from "./components/ThemePanel"; import RemarkPanel from "./components/RemarkPanel"; import Navigator from "./components/Navigator"; import Menu from "./components/Menu"; import { useModel, useRequest, useParams } from "umi"; import "./index.less"; import { useSessionStorageState } from "ahooks"; import { EnvironmentOutlined, FullscreenExitOutlined, UnorderedListOutlined, } from "@ant-design/icons"; import { GetDataModelDetail } from "@/api"; const { Header, Content, Sider } = Layout; const App: React.FC = () => { const containerRef = React.useRef(null); const { initGraph, project, playModeEnable, exitPlayMode, setProject } = useModel("erModel"); const [tabActiveKey, setTabActiveKey] = useSessionStorageState( "tabs-active-key", { defaultValue: "1", listenStorageChange: true, } ); // 更新画布key 用于刷新画布 const [updateKey, setUpdateKey] = useSessionStorageState("update-key", { listenStorageChange: true, defaultValue: 0, }); const [show, setShow] = useSessionStorageState("show-navigator"); const params = useParams(); const { run, loading, refresh } = useRequest(GetDataModelDetail, { manual: true, onSuccess: (res) => { console.log("模型详情:", res); const result = res?.result; if (result) { setProject(result, false, true); } }, }); useEffect(() => { exitPlayMode(); if (containerRef.current) { initGraph(containerRef.current); } if (!project.id && params?.id) { run({ id: params.id, }); } }, []); useEffect(() => { if (params?.id && updateKey) { run({ id: params.id, }); } }, [updateKey]); useEffect(() => { // 监听浏览器tab切换 刷新数据 const handleVisibilityChange = () => { if (document.visibilityState === "visible") { refresh(); } }; document.addEventListener("visibilitychange", handleVisibilityChange); return () => { document.removeEventListener("visibilitychange", handleVisibilityChange); }; }); const tabItems: TabsProps["items"] = [ { key: "1", label: "表", children: , }, { key: "2", label: "关系", children: , }, { key: "3", label: "主题区域", children: , }, { key: "4", label: "注释", children: , }, ]; useEffect(() => { document.addEventListener( "mousewheel", function (e: any) { // 判断是否按下ctrl if (e.ctrlKey) { // 阻止默认事件 e.preventDefault(); } }, { capture: false, passive: false } ); document.addEventListener( "keydown", function (event) { if ( (event.ctrlKey === true || event.metaKey === true) && event.key.toLowerCase() === "s" ) { event.preventDefault(); } }, false ); }, []); return ( {!playModeEnable && (
)} {!playModeEnable && ( )}
{playModeEnable && (
setShow(!show)} />
exitPlayMode()} >
)}
); }; export default App;