|
@@ -60,9 +60,25 @@ export default function Menu() {
|
|
|
label: "文件",
|
|
|
type: "group",
|
|
|
children: [
|
|
|
- { key: "1-1", label: "新建" },
|
|
|
+ {
|
|
|
+ key: "1-1",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>新建</span>
|
|
|
+ <span className="color-#666">ctrl+n</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
+ },
|
|
|
{ key: "1-2", label: "新标签页打开" },
|
|
|
- { key: "1-3", label: "保存" },
|
|
|
+ {
|
|
|
+ key: "1-3",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>保存</span>
|
|
|
+ <span className="color-#666">ctrl+s</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
+ },
|
|
|
{ key: "1-4", label: "保存为模版" },
|
|
|
{ key: "1-5", label: "发布模版" },
|
|
|
{ key: "1-6", label: "同步到数据表" },
|
|
@@ -78,13 +94,67 @@ export default function Menu() {
|
|
|
label: "编辑",
|
|
|
type: "group",
|
|
|
children: [
|
|
|
- { key: "1-1", label: "撤销", onClick: () => canUndo && onUndo() },
|
|
|
- { key: "1-2", label: "恢复", onClick: () => canRedo && onRedo() },
|
|
|
+ {
|
|
|
+ key: "1-1",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>撤销</span>
|
|
|
+ <span className="color-#666">ctrl+z</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
+ onClick: () => canUndo && onUndo(),
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: "1-2",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>恢复</span>
|
|
|
+ <span className="color-#666">ctrl+y</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
+ onClick: () => canRedo && onRedo(),
|
|
|
+ },
|
|
|
{ key: "1-3", label: "清除", onClick: handleClean },
|
|
|
- { key: "1-4", label: "剪切", onClick: onCut },
|
|
|
- { key: "1-5", label: "复制", onClick: onCopy },
|
|
|
- { key: "1-6", label: "粘贴", onClick: onPaste },
|
|
|
- { key: "1-7", label: "删除", onClick: onDelete },
|
|
|
+ {
|
|
|
+ key: "1-4",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>剪切</span>
|
|
|
+ <span className="color-#666">ctrl+x</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
+ onClick: onCut,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: "1-5",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>复制</span>
|
|
|
+ <span className="color-#666">ctrl+c</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
+ onClick: onCopy,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: "1-6",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>粘贴</span>
|
|
|
+ <span className="color-#666">ctrl+v</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
+ onClick: onPaste,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ key: "1-7",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>删除</span>
|
|
|
+ <span className="color-#666">delete</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
+ onClick: onDelete,
|
|
|
+ },
|
|
|
],
|
|
|
},
|
|
|
{
|
|
@@ -167,12 +237,22 @@ export default function Menu() {
|
|
|
{ key: "1-7", label: "重置视图", onClick: () => graph?.zoomTo(1) },
|
|
|
{
|
|
|
key: "1-8",
|
|
|
- label: "放大",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>放大</span>
|
|
|
+ <span className="color-#666">ctrl+up</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
onClick: () => handleZoom((graph?.zoom() || 1) + 0.2),
|
|
|
},
|
|
|
{
|
|
|
key: "1-9",
|
|
|
- label: "缩小",
|
|
|
+ label: (
|
|
|
+ <span className="flex items-center justify-between">
|
|
|
+ <span>缩小</span>
|
|
|
+ <span className="color-#666">ctrl+down</span>
|
|
|
+ </span>
|
|
|
+ ),
|
|
|
onClick: () => handleZoom((graph?.zoom() || 1) - 0.2),
|
|
|
},
|
|
|
{
|
|
@@ -215,7 +295,7 @@ export default function Menu() {
|
|
|
{
|
|
|
key: "1-4",
|
|
|
label: "表格宽度",
|
|
|
- onClick: () => setOpen(true)
|
|
|
+ onClick: () => setOpen(true),
|
|
|
},
|
|
|
],
|
|
|
},
|
|
@@ -242,66 +322,65 @@ export default function Menu() {
|
|
|
|
|
|
return (
|
|
|
<>
|
|
|
- <div className="flex-1 flex items-center">
|
|
|
- {contextHolder}
|
|
|
- <div className="logo h-48px m-l-12px">
|
|
|
- <svg className="icon h-48px w-48px" aria-hidden="true">
|
|
|
- <use xlinkHref="#icon-shujujianmo"></use>
|
|
|
- </svg>
|
|
|
- </div>
|
|
|
- <div className="h-full">
|
|
|
- <div className="leading-32px flex items-center">
|
|
|
- <Input
|
|
|
- className="text-24px max-w-200px"
|
|
|
- variant="borderless"
|
|
|
- value={"模型名称"}
|
|
|
- />
|
|
|
- <div className="bg-#eee text-12px leading-20px color-#666 rounded-4px p-x-4px p-y-2px">
|
|
|
- 上次保存时间:2024-12-13 13:21:23
|
|
|
- </div>
|
|
|
+ <div className="flex-1 flex items-center">
|
|
|
+ {contextHolder}
|
|
|
+ <div className="logo h-48px m-l-12px">
|
|
|
+ <svg className="icon h-48px w-48px" aria-hidden="true">
|
|
|
+ <use xlinkHref="#icon-shujujianmo"></use>
|
|
|
+ </svg>
|
|
|
</div>
|
|
|
- <div className="flex">
|
|
|
- {menuData.map((item) => {
|
|
|
- return (
|
|
|
- <Dropdown
|
|
|
- key={item.key}
|
|
|
- menu={{ items: item.children, style: { width: 200 } }}
|
|
|
- placement="bottomLeft"
|
|
|
- open={openKey === item.key}
|
|
|
- onOpenChange={(nextOpen, info) =>
|
|
|
- handleOpenChange(nextOpen, info, item.key)
|
|
|
- }
|
|
|
- >
|
|
|
- <Button type="text" size="small">
|
|
|
- {item.label}
|
|
|
- </Button>
|
|
|
- </Dropdown>
|
|
|
- );
|
|
|
- })}
|
|
|
+ <div className="h-full">
|
|
|
+ <div className="leading-32px flex items-center">
|
|
|
+ <Input
|
|
|
+ className="text-24px max-w-200px"
|
|
|
+ variant="borderless"
|
|
|
+ value={"模型名称"}
|
|
|
+ />
|
|
|
+ <div className="bg-#eee text-12px leading-20px color-#666 rounded-4px p-x-4px p-y-2px">
|
|
|
+ 上次保存时间:2024-12-13 13:21:23
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ <div className="flex">
|
|
|
+ {menuData.map((item) => {
|
|
|
+ return (
|
|
|
+ <Dropdown
|
|
|
+ key={item.key}
|
|
|
+ menu={{ items: item.children, style: { width: 200 } }}
|
|
|
+ placement="bottomLeft"
|
|
|
+ open={openKey === item.key}
|
|
|
+ onOpenChange={(nextOpen, info) =>
|
|
|
+ handleOpenChange(nextOpen, info, item.key)
|
|
|
+ }
|
|
|
+ >
|
|
|
+ <Button type="text" size="small">
|
|
|
+ {item.label}
|
|
|
+ </Button>
|
|
|
+ </Dropdown>
|
|
|
+ );
|
|
|
+ })}
|
|
|
+ </div>
|
|
|
</div>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- <Modal
|
|
|
- title="设置表格宽度"
|
|
|
- centered
|
|
|
- width={440}
|
|
|
- open={open}
|
|
|
- okText="确定"
|
|
|
- onOk={() => setOpen(false)}
|
|
|
- onCancel={() => setOpen(false)}
|
|
|
- footer={(_, {OkBtn}) => {
|
|
|
- return <OkBtn/>
|
|
|
- }}
|
|
|
- >
|
|
|
- <InputNumber
|
|
|
- className="w-full"
|
|
|
- min={150}
|
|
|
- max={1000}
|
|
|
- value={project.setting.tableWidth}
|
|
|
- onChange={(value) => handleChangeSetting("tableWidth", value)}
|
|
|
- />
|
|
|
- </Modal>
|
|
|
+ <Modal
|
|
|
+ title="设置表格宽度"
|
|
|
+ centered
|
|
|
+ width={440}
|
|
|
+ open={open}
|
|
|
+ okText="确定"
|
|
|
+ onOk={() => setOpen(false)}
|
|
|
+ onCancel={() => setOpen(false)}
|
|
|
+ footer={(_, { OkBtn }) => {
|
|
|
+ return <OkBtn />;
|
|
|
+ }}
|
|
|
+ >
|
|
|
+ <InputNumber
|
|
|
+ className="w-full"
|
|
|
+ min={150}
|
|
|
+ max={1000}
|
|
|
+ value={project.setting.tableWidth}
|
|
|
+ onChange={(value) => handleChangeSetting("tableWidth", value)}
|
|
|
+ />
|
|
|
+ </Modal>
|
|
|
</>
|
|
|
-
|
|
|
);
|
|
|
}
|