mirror of
https://github.com/whyour/qinglong.git
synced 2025-12-14 07:58:12 +08:00
Fix: Add toolbar and fix minimap positioning in workflow editor
- Added toolbar with node creation buttons (HTTP, Script, Condition, Delay, Loop) - Added zoom controls (Zoom In, Zoom Out, Fit to Canvas) - Fixed minimap positioning to stay within modal bounds - Updated CSS to ensure proper containment - Added 9 new translation keys for toolbar (zh-CN and en-US) Co-authored-by: whyour <22700758+whyour@users.noreply.github.com>
This commit is contained in:
parent
81f6f84891
commit
47e887cf83
|
|
@ -577,7 +577,6 @@
|
||||||
"延迟": "Delay",
|
"延迟": "Delay",
|
||||||
"循环": "Loop",
|
"循环": "Loop",
|
||||||
"请求URL": "Request URL",
|
"请求URL": "Request URL",
|
||||||
"请求方法": "Request Method",
|
|
||||||
"请求头": "Request Headers",
|
"请求头": "Request Headers",
|
||||||
"请求体": "Request Body",
|
"请求体": "Request Body",
|
||||||
"脚本ID": "Script ID",
|
"脚本ID": "Script ID",
|
||||||
|
|
@ -612,5 +611,11 @@
|
||||||
"节点": "Nodes",
|
"节点": "Nodes",
|
||||||
"确认删除节点吗": "Are you sure you want to delete this node?",
|
"确认删除节点吗": "Are you sure you want to delete this node?",
|
||||||
"开始": "Start",
|
"开始": "Start",
|
||||||
"结束": "End"
|
"结束": "End",
|
||||||
|
"新建节点": "Add Node",
|
||||||
|
"视图": "View",
|
||||||
|
"放大": "Zoom In",
|
||||||
|
"缩小": "Zoom Out",
|
||||||
|
"适应画布": "Fit to Canvas",
|
||||||
|
"条件": "Condition"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -577,7 +577,6 @@
|
||||||
"延迟": "延迟",
|
"延迟": "延迟",
|
||||||
"循环": "循环",
|
"循环": "循环",
|
||||||
"请求URL": "请求URL",
|
"请求URL": "请求URL",
|
||||||
"请求方法": "请求方法",
|
|
||||||
"请求头": "请求头",
|
"请求头": "请求头",
|
||||||
"请求体": "请求体",
|
"请求体": "请求体",
|
||||||
"脚本ID": "脚本ID",
|
"脚本ID": "脚本ID",
|
||||||
|
|
@ -612,5 +611,11 @@
|
||||||
"节点": "节点",
|
"节点": "节点",
|
||||||
"确认删除节点吗": "确认删除节点吗?",
|
"确认删除节点吗": "确认删除节点吗?",
|
||||||
"开始": "开始",
|
"开始": "开始",
|
||||||
"结束": "结束"
|
"结束": "结束",
|
||||||
|
"新建节点": "新建节点",
|
||||||
|
"视图": "视图",
|
||||||
|
"放大": "放大",
|
||||||
|
"缩小": "缩小",
|
||||||
|
"适应画布": "适应画布",
|
||||||
|
"条件": "条件"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,19 @@
|
||||||
import React, { useEffect, useImperativeHandle, forwardRef } from 'react';
|
import React, { useEffect, useImperativeHandle, forwardRef } from 'react';
|
||||||
|
import { Button, Tooltip } from 'antd';
|
||||||
|
import {
|
||||||
|
PlusOutlined,
|
||||||
|
ZoomInOutlined,
|
||||||
|
ZoomOutOutlined,
|
||||||
|
FullscreenOutlined,
|
||||||
|
ApiOutlined,
|
||||||
|
CodeOutlined,
|
||||||
|
BranchesOutlined,
|
||||||
|
ClockCircleOutlined,
|
||||||
|
SyncOutlined,
|
||||||
|
} from '@ant-design/icons';
|
||||||
import { EditorRenderer, FreeLayoutEditorProvider } from '@flowgram.ai/free-layout-editor';
|
import { EditorRenderer, FreeLayoutEditorProvider } from '@flowgram.ai/free-layout-editor';
|
||||||
import '@flowgram.ai/free-layout-editor/index.css';
|
import '@flowgram.ai/free-layout-editor/index.css';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
import { nodeRegistries } from './nodes';
|
import { nodeRegistries } from './nodes';
|
||||||
import { useEditorProps } from './hooks/use-editor-props';
|
import { useEditorProps } from './hooks/use-editor-props';
|
||||||
import './editor.less';
|
import './editor.less';
|
||||||
|
|
@ -39,9 +52,93 @@ const FlowgramEditor = forwardRef<FlowgramEditorRef, FlowgramEditorProps>(
|
||||||
}
|
}
|
||||||
}, [onChange]);
|
}, [onChange]);
|
||||||
|
|
||||||
|
const handleAddNode = (nodeType: string) => {
|
||||||
|
// This will be implemented to add nodes via Flowgram API
|
||||||
|
console.log('Add node:', nodeType);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleZoom = (direction: 'in' | 'out' | 'fit') => {
|
||||||
|
// This will be implemented to control zoom via Flowgram API
|
||||||
|
console.log('Zoom:', direction);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flowgram-editor-container">
|
<div className="flowgram-editor-container">
|
||||||
<FreeLayoutEditorProvider {...editorProps}>
|
<FreeLayoutEditorProvider {...editorProps}>
|
||||||
|
<div className="flowgram-editor-toolbar">
|
||||||
|
<div className="toolbar-group">
|
||||||
|
<span className="toolbar-label">{intl.get('新建节点')}:</span>
|
||||||
|
<Tooltip title={intl.get('HTTP请求')}>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
icon={<ApiOutlined />}
|
||||||
|
onClick={() => handleAddNode('http')}
|
||||||
|
>
|
||||||
|
HTTP
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip title={intl.get('脚本执行')}>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
icon={<CodeOutlined />}
|
||||||
|
onClick={() => handleAddNode('script')}
|
||||||
|
>
|
||||||
|
{intl.get('脚本')}
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip title={intl.get('条件判断')}>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
icon={<BranchesOutlined />}
|
||||||
|
onClick={() => handleAddNode('condition')}
|
||||||
|
>
|
||||||
|
{intl.get('条件')}
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip title={intl.get('延迟')}>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
icon={<ClockCircleOutlined />}
|
||||||
|
onClick={() => handleAddNode('delay')}
|
||||||
|
>
|
||||||
|
{intl.get('延迟')}
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip title={intl.get('循环')}>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
icon={<SyncOutlined />}
|
||||||
|
onClick={() => handleAddNode('loop')}
|
||||||
|
>
|
||||||
|
{intl.get('循环')}
|
||||||
|
</Button>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
<div className="toolbar-group">
|
||||||
|
<span className="toolbar-label">{intl.get('视图')}:</span>
|
||||||
|
<Tooltip title={intl.get('放大')}>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
icon={<ZoomInOutlined />}
|
||||||
|
onClick={() => handleZoom('in')}
|
||||||
|
/>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip title={intl.get('缩小')}>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
icon={<ZoomOutOutlined />}
|
||||||
|
onClick={() => handleZoom('out')}
|
||||||
|
/>
|
||||||
|
</Tooltip>
|
||||||
|
<Tooltip title={intl.get('适应画布')}>
|
||||||
|
<Button
|
||||||
|
size="small"
|
||||||
|
icon={<FullscreenOutlined />}
|
||||||
|
onClick={() => handleZoom('fit')}
|
||||||
|
/>
|
||||||
|
</Tooltip>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div className="flowgram-editor-wrapper">
|
<div className="flowgram-editor-wrapper">
|
||||||
<EditorRenderer className="flowgram-editor" />
|
<EditorRenderer className="flowgram-editor" />
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,34 @@
|
||||||
height: 100%;
|
height: 100%;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flowgram-editor-toolbar {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
padding: 12px 16px;
|
||||||
|
border-bottom: 1px solid #d9d9d9;
|
||||||
|
background: #fff;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-items: center;
|
||||||
|
|
||||||
|
.toolbar-group {
|
||||||
|
display: flex;
|
||||||
|
gap: 8px;
|
||||||
|
padding-right: 12px;
|
||||||
|
border-right: 1px solid #d9d9d9;
|
||||||
|
|
||||||
|
&:last-child {
|
||||||
|
border-right: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar-label {
|
||||||
|
font-size: 12px;
|
||||||
|
color: #666;
|
||||||
|
align-self: center;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.flowgram-editor-wrapper {
|
.flowgram-editor-wrapper {
|
||||||
|
|
@ -14,6 +42,15 @@
|
||||||
.flowgram-editor {
|
.flowgram-editor {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
/* Ensure minimap stays within editor bounds */
|
||||||
|
:global {
|
||||||
|
.flowgram-minimap {
|
||||||
|
position: absolute !important;
|
||||||
|
z-index: 100;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dark theme support */
|
/* Dark theme support */
|
||||||
|
|
@ -21,4 +58,17 @@
|
||||||
.flowgram-editor-container {
|
.flowgram-editor-container {
|
||||||
background: #141414;
|
background: #141414;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.flowgram-editor-toolbar {
|
||||||
|
background: #1f1f1f;
|
||||||
|
border-bottom-color: #434343;
|
||||||
|
|
||||||
|
.toolbar-group {
|
||||||
|
border-right-color: #434343;
|
||||||
|
}
|
||||||
|
|
||||||
|
.toolbar-label {
|
||||||
|
color: #999;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user