|
|
|
|
@ -18,10 +18,9 @@ import {
|
|
|
|
|
ConnectionLineType
|
|
|
|
|
} from '@xyflow/react';
|
|
|
|
|
import '@xyflow/react/dist/style.css';
|
|
|
|
|
import { Button, Modal } from '@arco-design/web-react';
|
|
|
|
|
import { nodeTypeMap, nodeTypes, registerNodeType } from '@/components/FlowEditor/node';
|
|
|
|
|
import SideBar from './sideBar/sideBar';
|
|
|
|
|
import { convertFlowData } from '@/utils/convertFlowData';
|
|
|
|
|
import { convertFlowData, revertFlowData } from '@/utils/convertFlowData';
|
|
|
|
|
import { exampleFlowData } from '@/pages/flowEditor/test/exampleFlowData';
|
|
|
|
|
import LocalNode from '@/components/FlowEditor/node/localNode/LocalNode';
|
|
|
|
|
import CustomEdge from './components/customEdge';
|
|
|
|
|
@ -35,23 +34,24 @@ import ActionBar from './components/actionBar';
|
|
|
|
|
import { defaultNodeTypes } from '@/components/FlowEditor/node/types/defaultType';
|
|
|
|
|
import { localNodeData } from '@/pages/flowEditor/sideBar/config/localNodeData';
|
|
|
|
|
import { useAlignmentGuidelines } from '@/hooks/useAlignmentGuidelines';
|
|
|
|
|
import { setMainFlow } from '@/api/appRes';
|
|
|
|
|
|
|
|
|
|
const edgeTypes: EdgeTypes = {
|
|
|
|
|
custom: CustomEdge
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const FlowEditorWithProvider: React.FC = () => {
|
|
|
|
|
const FlowEditorWithProvider: React.FC<{ initialData?: any }> = ({ initialData }) => {
|
|
|
|
|
return (
|
|
|
|
|
<div style={{ width: '100%', height: '91vh', display: 'flex' }} onContextMenu={(e) => e.preventDefault()}>
|
|
|
|
|
<ReactFlowProvider>
|
|
|
|
|
{/*<SideBar />*/}
|
|
|
|
|
<FlowEditor />
|
|
|
|
|
<FlowEditor initialData={initialData} />
|
|
|
|
|
</ReactFlowProvider>
|
|
|
|
|
</div>
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const FlowEditor: React.FC = () => {
|
|
|
|
|
const FlowEditor: React.FC<{ initialData?: any }> = ({ initialData }) => {
|
|
|
|
|
const [nodes, setNodes] = useState<Node[]>([]);
|
|
|
|
|
const [edges, setEdges] = useState<Edge[]>([]);
|
|
|
|
|
const reactFlowInstance = useReactFlow();
|
|
|
|
|
@ -309,8 +309,8 @@ const FlowEditor: React.FC = () => {
|
|
|
|
|
}, [clearGuidelines]);
|
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
const { nodes: convertedNodes, edges: convertedEdges } = convertFlowData(exampleFlowData);
|
|
|
|
|
// 为所有边添加类型
|
|
|
|
|
const { nodes: convertedNodes, edges: convertedEdges } = convertFlowData(initialData);
|
|
|
|
|
// 为所有边添加类型-
|
|
|
|
|
const initialEdges: Edge[] = convertedEdges.map(edge => ({
|
|
|
|
|
...edge,
|
|
|
|
|
type: 'custom'
|
|
|
|
|
@ -318,7 +318,7 @@ const FlowEditor: React.FC = () => {
|
|
|
|
|
|
|
|
|
|
setNodes(convertedNodes);
|
|
|
|
|
setEdges(initialEdges);
|
|
|
|
|
}, []);
|
|
|
|
|
}, [initialData]);
|
|
|
|
|
|
|
|
|
|
// 监听边的变化,处理添加节点的触发
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
@ -601,26 +601,10 @@ const FlowEditor: React.FC = () => {
|
|
|
|
|
nodes: nodes,
|
|
|
|
|
edges: edges
|
|
|
|
|
};
|
|
|
|
|
// TODO 接口对接后修改后续的更新操作
|
|
|
|
|
console.log('flowData:', flowData);
|
|
|
|
|
return;
|
|
|
|
|
// 发送到服务器的示例代码(需要根据您的实际API进行调整)
|
|
|
|
|
const response = await fetch('/api/flow/save', {
|
|
|
|
|
method: 'POST',
|
|
|
|
|
headers: {
|
|
|
|
|
'Content-Type': 'application/json'
|
|
|
|
|
},
|
|
|
|
|
body: JSON.stringify(flowData)
|
|
|
|
|
});
|
|
|
|
|
// 转换会原始数据类型
|
|
|
|
|
const revertedData = revertFlowData(nodes, edges);
|
|
|
|
|
|
|
|
|
|
if (response.ok) {
|
|
|
|
|
console.log('Flow data saved successfully');
|
|
|
|
|
// 可以添加成功提示
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
console.error('Failed to save flow data');
|
|
|
|
|
// 可以添加失败提示
|
|
|
|
|
}
|
|
|
|
|
const res = await setMainFlow(revertedData, initialData.id);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('Error saving flow data:', error);
|
|
|
|
|
// 可以添加错误提示
|
|
|
|
|
|