diff --git a/src/pages/flowEditor/index.tsx b/src/pages/flowEditor/index.tsx index c530d3c..41fdc8b 100644 --- a/src/pages/flowEditor/index.tsx +++ b/src/pages/flowEditor/index.tsx @@ -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 (
e.preventDefault()}> {/**/} - +
); }; -const FlowEditor: React.FC = () => { +const FlowEditor: React.FC<{ initialData?: any }> = ({ initialData }) => { const [nodes, setNodes] = useState([]); const [edges, setEdges] = useState([]); 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); // 可以添加错误提示 diff --git a/src/pages/ideContainer/index.tsx b/src/pages/ideContainer/index.tsx index 35fe670..da58a41 100644 --- a/src/pages/ideContainer/index.tsx +++ b/src/pages/ideContainer/index.tsx @@ -108,7 +108,7 @@ function IDEContainer() { const getContentByPath = (path: string) => { switch (path) { case 'compFlow': - return ; + return ; case 'appFlow': return ; case 'compList': diff --git a/src/pages/ideContainer/sideBar.tsx b/src/pages/ideContainer/sideBar.tsx index 3f4ea33..b31802f 100644 --- a/src/pages/ideContainer/sideBar.tsx +++ b/src/pages/ideContainer/sideBar.tsx @@ -5,7 +5,7 @@ import { menuData1, menuData2 } from './config/menuData'; import { ResizeBox, Tree } from '@arco-design/web-react'; import { Selected } from '@/pages/ideContainer/types'; import { useDispatch, useSelector } from 'react-redux'; -import { updateMenuData } from '@/store/ideContainer'; +import { updateMenuData, updateFlowData } from '@/store/ideContainer'; import { getProjectEnv } from '@/api/apps'; import _ from 'lodash'; @@ -138,6 +138,8 @@ const SideBar: React.FC = ({ selectedKey, identity, subMenuData, o // 更新 menuData 中的数据 dispatch(updateMenuData({ ...menuData, [identity]: currentMenu })); + // 更新 flowData 中的数据 + dispatch(updateFlowData({ [data.id]: res.data.app })); // 同时更新本地 menu 状态以触发重新渲染 setMenu(prevMenu => { @@ -217,10 +219,10 @@ const SideBar: React.FC = ({ selectedKey, identity, subMenuData, o > { + onSelect={async (_selectedKeys, info) => { const selectedNode = info.node; const originalData = selectedNode.props.dataRef; - getProjectEnvData(originalData); + await getProjectEnvData(originalData); // 保持主菜单的选中状态 const mainMenuKey = `${menu[activeKey]?.key}`; setMainMenuSelectedKey(mainMenuKey); diff --git a/src/pages/orchestration/project/index.tsx b/src/pages/orchestration/project/index.tsx index 21842d4..ef14978 100644 --- a/src/pages/orchestration/project/index.tsx +++ b/src/pages/orchestration/project/index.tsx @@ -1,9 +1,17 @@ -import React from 'react'; +import React, { useEffect, useState } from 'react'; import FlowEditor from '@/pages/flowEditor/index'; +import { useSelector } from 'react-redux'; + +const ProjectContainer = ({ selected }) => { + const { flowData } = useSelector(state => state.ideContainer); + const [selectedFlowData, setSelectedFlowData] = useState({}); + + useEffect(() => { + setSelectedFlowData(flowData[selected.id]); + }, [selected]); -const ProjectContainer = () => { return ( - + ); };