import React, { useEffect, useState } from "react"; import { Tooltip, Dropdown, DropDownProps } from "antd"; import { CheckOutlined, DownOutlined } from "@ant-design/icons"; import { useModel } from "umi"; import TodoDrawer from "./TodoDrawer"; import AICreator from "./AICreator"; import { useFullscreen, useLocalStorageState } from "ahooks"; export default function Toolbar() { const { addTable, addTopicArea, addRemark, graph, canRedo, canUndo, onRedo, onUndo, project, setProject, onSave, } = useModel("erModel"); const todoRef = React.useRef<{ open: () => void }>(); const [isFullscreen, { toggleFullscreen }] = useFullscreen(document.body); const scaleMenu = { style: { width: 200, }, items: [ { key: "1", label: "25%", onClick: () => { handleZoom(25); }, }, { key: "2", label: "50%", onClick: () => { handleZoom(50); }, }, { key: "3", label: "75%", onClick: () => { handleZoom(75); }, }, { key: "4", label: "100%", onClick: () => { handleZoom(100); }, }, { key: "5", label: "150%", onClick: () => { handleZoom(150); }, }, { key: "6", label: "200%", onClick: () => { handleZoom(200); }, }, ], }; // 隐藏默认字段 const [hideDefaultColumn, setHideDefaultColumn] = useLocalStorageState( "er-hideDefaultColumn", { defaultValue: false, listenStorageChange: true } ); const layoutMenu: DropDownProps["menu"] = { style: { width: 120, }, items: [ { key: "1", label: ( {project.setting.showMenu ? ( ) : ( "" )} 菜单栏 ), onClick: () => { setProject({ ...project, setting: { ...project.setting, showMenu: !project.setting.showMenu, }, }); }, }, { key: "2", label: ( {project.setting.showSidebar ? ( ) : ( "" )} 侧边栏 ), onClick: () => { setProject({ ...project, setting: { ...project.setting, showSidebar: !project.setting.showSidebar, }, }); }, }, { key: "3", type: "divider", }, { key: "4", label: ( {isFullscreen && } 全屏 ), onClick: () => { toggleFullscreen(); }, }, ], }; const [scale, setScale] = useState(100); useEffect(() => { graph?.on("scale", (scaleInfo) => { setScale(parseInt(scaleInfo.sx * 100 + "")); }); }, [graph]); const handleZoom = (value: number) => { if (value > 200) { graph?.zoomTo(2); return; } if (value < 20) { graph?.zoomTo(0.2); return; } graph?.zoomTo(value / 100); }; const handleChangeShowMenu = () => { setProject({ ...project, setting: { ...project.setting, showMenu: !project.setting.showMenu }, }); }; return (
{ setHideDefaultColumn(!hideDefaultColumn); }} />
canUndo && onUndo()} >
canRedo && onRedo()} >
addTable()} >
todoRef.current?.open()} >
} />
= 200 ? 0.5 : 1 }} onClick={() => handleZoom(scale + 25)} >
handleZoom(scale - 25)} >
{scale}%
); }