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;