import React, { useEffect, useState } from "react";
import { Button, Dropdown, Input, Modal, Switch, InputNumber } from "antd";
import type { DropDownProps, MenuProps } from "antd";
import { useModel } from "umi";
import { useFullscreen } from "ahooks";
export default function Menu() {
const {
project,
canRedo,
canUndo,
onRedo,
onUndo,
graph,
setProject,
onClean,
onCut,
onCopy,
onPaste,
onDelete,
enterPlayMode,
saveTime,
} = useModel("erModel");
const [modal, contextHolder] = Modal.useModal();
const [isFullscreen, { toggleFullscreen }] = useFullscreen(document.body);
const [openKey, setOpenKey] = useState("");
const [open, setOpen] = useState(false);
const [name, setName] = useState(project?.name);
useEffect(() => {
setName(project.name);
}, [project.name]);
const handleClean = () => {
modal.confirm({
title: "确认清除画布全部内容?",
content: "清空后将无法恢复",
cancelText: "取消",
okText: "确定",
onOk() {
onClean();
},
});
};
const handleChangeSetting = (key: string, value: boolean | number | null) => {
setProject({ ...project, setting: { ...project.setting, [key]: value } });
};
const handleChangeName = () => {
name.trim() && setProject({ ...project, name });
}
const handleZoom = (value: number) => {
if (value < 0.2) {
graph?.zoomTo(0.2);
return;
} else if (value > 2) {
graph?.zoomTo(2);
return;
}
graph?.zoomTo(value);
};
const menuData: {
key: string;
label: string;
type: "group";
children: MenuProps["items"];
}[] = [
{
key: "1",
label: "文件",
type: "group",
children: [
{
key: "1-1",
label: (
新建
ctrl+n
),
},
{ key: "1-2", label: "新标签页打开" },
{
key: "1-3",
label: (
保存
ctrl+s
),
},
{ key: "1-4", label: "保存为模版" },
{ key: "1-5", label: "发布模版" },
{ key: "1-6", label: "同步到数据表" },
{
key: "1-7",
label: "导出为图片",
onClick: () => graph && graph?.exportPNG(),
},
],
},
{
key: "2",
label: "编辑",
type: "group",
children: [
{
key: "1-1",
label: (
撤销
ctrl+z
),
onClick: () => canUndo && onUndo(),
},
{
key: "1-2",
label: (
恢复
ctrl+y
),
onClick: () => canRedo && onRedo(),
},
{ key: "1-3", label: "清除", onClick: handleClean },
{
key: "1-4",
label: (
剪切
ctrl+x
),
onClick: onCut,
},
{
key: "1-5",
label: (
复制
ctrl+c
),
onClick: onCopy,
},
{
key: "1-6",
label: (
粘贴
ctrl+v
),
onClick: onPaste,
},
{
key: "1-7",
label: (
删除
delete
),
onClick: onDelete,
},
],
},
{
key: "3",
label: "视图",
type: "group",
children: [
{
key: "1-1",
label: (
菜单栏隐藏