|
|
|
@ -15,7 +15,15 @@ import { localNodeData } from '@/pages/flowEditor/sideBar/config/localNodeData';
|
|
|
|
import { useAlignmentGuidelines } from '@/hooks/useAlignmentGuidelines';
|
|
|
|
import { useAlignmentGuidelines } from '@/hooks/useAlignmentGuidelines';
|
|
|
|
import LocalNode from '@/components/FlowEditor/node/localNode/LocalNode';
|
|
|
|
import LocalNode from '@/components/FlowEditor/node/localNode/LocalNode';
|
|
|
|
import LoopNode from '@/components/FlowEditor/node/loopNode/LoopNode';
|
|
|
|
import LoopNode from '@/components/FlowEditor/node/loopNode/LoopNode';
|
|
|
|
import { updateCanvasDataMap, resetNodeStatus, updateIsRunning, updateEventListOld } from '@/store/ideContainer';
|
|
|
|
import {
|
|
|
|
|
|
|
|
updateCanvasDataMap,
|
|
|
|
|
|
|
|
resetNodeStatus,
|
|
|
|
|
|
|
|
updateIsRunning,
|
|
|
|
|
|
|
|
updateEventListOld,
|
|
|
|
|
|
|
|
addRuntimeLog,
|
|
|
|
|
|
|
|
clearRuntimeLogs,
|
|
|
|
|
|
|
|
updateRuntimeId
|
|
|
|
|
|
|
|
} from '@/store/ideContainer';
|
|
|
|
import {
|
|
|
|
import {
|
|
|
|
validateAllNodes,
|
|
|
|
validateAllNodes,
|
|
|
|
showValidationErrors,
|
|
|
|
showValidationErrors,
|
|
|
|
@ -122,7 +130,6 @@ export const useFlowCallbacks = (
|
|
|
|
if (!sourceNode || !targetNode) {
|
|
|
|
if (!sourceNode || !targetNode) {
|
|
|
|
return;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 获取源节点和目标节点的参数信息
|
|
|
|
// 获取源节点和目标节点的参数信息
|
|
|
|
const sourceParams: any = sourceNode.data?.parameters || {};
|
|
|
|
const sourceParams: any = sourceNode.data?.parameters || {};
|
|
|
|
const targetParams: any = targetNode.data?.parameters || {};
|
|
|
|
const targetParams: any = targetNode.data?.parameters || {};
|
|
|
|
@ -148,19 +155,43 @@ export const useFlowCallbacks = (
|
|
|
|
// 创建带有事件信息的连接
|
|
|
|
// 创建带有事件信息的连接
|
|
|
|
const edgeParams = { ...params, type: 'custom' };
|
|
|
|
const edgeParams = { ...params, type: 'custom' };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 添加lineType字段,用于区分API连接和数据连接
|
|
|
|
|
|
|
|
edgeParams.data = {
|
|
|
|
|
|
|
|
...edgeParams.data,
|
|
|
|
|
|
|
|
lineType: sourceHandleType // 'api' 或 'data'
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 对于数据类型的边,需要额外验证dataIns和dataOuts中的数据类型是否一致
|
|
|
|
|
|
|
|
if (sourceHandleType === 'data') {
|
|
|
|
|
|
|
|
// 查找源节点的dataOuts中对应的数据
|
|
|
|
|
|
|
|
const sourceDataOut = (sourceParams.dataOuts || []).find((dataOut: any) =>
|
|
|
|
|
|
|
|
dataOut.name === params.sourceHandle || dataOut.id === params.sourceHandle);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 查找目标节点的dataIns中对应的数据
|
|
|
|
|
|
|
|
const targetDataIn = (targetParams.dataIns || []).find((dataIn: any) =>
|
|
|
|
|
|
|
|
dataIn.name === params.targetHandle || dataIn.id === params.targetHandle);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 验证数据类型是否一致
|
|
|
|
|
|
|
|
if (sourceDataOut && targetDataIn && sourceDataOut.dataType !== targetDataIn.dataType) {
|
|
|
|
|
|
|
|
console.warn('数据类型不匹配,源节点数据类型:', sourceDataOut.dataType, '目标节点数据类型:', targetDataIn.dataType);
|
|
|
|
|
|
|
|
Message.warning(`数据类型不匹配,源节点数据类型: ${sourceDataOut.dataType},目标节点数据类型: ${targetDataIn.dataType}`);
|
|
|
|
|
|
|
|
return edgesSnapshot; // 不创建连接
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 检查源节点和目标节点是否都有事件信息
|
|
|
|
// 检查源节点和目标节点是否都有事件信息
|
|
|
|
const sourceApi = (sourceParams.apiOuts || []).find((api: any) =>
|
|
|
|
const sourceApi = (sourceParams.apiOuts || []).find((api: any) => (api?.eventId || api.name || api.id) === params.sourceHandle);
|
|
|
|
api.name === params.sourceHandle || api.id === params.sourceHandle);
|
|
|
|
const targetApi = (targetParams.apiIns || []).find((api: any) => (api?.eventId || api.name || api.id) === params.targetHandle);
|
|
|
|
const targetApi = (targetParams.apiIns || []).find((api: any) =>
|
|
|
|
|
|
|
|
api.name === params.targetHandle || api.id === params.targetHandle);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果源节点有事件topic信息
|
|
|
|
// 如果源节点有事件topic信息
|
|
|
|
if (sourceApi && sourceApi.topic) {
|
|
|
|
if (sourceApi && sourceApi.topic) {
|
|
|
|
// 如果目标节点的topic是**empty**或没有topic,则使用源节点的事件信息
|
|
|
|
// 如果目标节点的topic是**empty**或没有topic,则使用源节点的事件信息
|
|
|
|
if (!targetApi || !targetApi.topic || targetApi.topic.includes('**empty**')) {
|
|
|
|
if (!targetApi || !targetApi.topic || targetApi.topic.includes('**empty**')) {
|
|
|
|
edgeParams.data = {
|
|
|
|
edgeParams.data = {
|
|
|
|
|
|
|
|
...edgeParams.data,
|
|
|
|
|
|
|
|
lineType: 'api',
|
|
|
|
displayData: {
|
|
|
|
displayData: {
|
|
|
|
name: sourceApi.name,
|
|
|
|
name: sourceApi.eventName,
|
|
|
|
eventId: sourceApi.eventId,
|
|
|
|
eventId: sourceApi.eventId,
|
|
|
|
topic: sourceApi.topic
|
|
|
|
topic: sourceApi.topic
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -171,8 +202,10 @@ export const useFlowCallbacks = (
|
|
|
|
!sourceApi.topic.includes('**empty**') &&
|
|
|
|
!sourceApi.topic.includes('**empty**') &&
|
|
|
|
!targetApi.topic.includes('**empty**')) {
|
|
|
|
!targetApi.topic.includes('**empty**')) {
|
|
|
|
edgeParams.data = {
|
|
|
|
edgeParams.data = {
|
|
|
|
|
|
|
|
...edgeParams.data,
|
|
|
|
|
|
|
|
lineType: 'api',
|
|
|
|
displayData: {
|
|
|
|
displayData: {
|
|
|
|
name: sourceApi.name,
|
|
|
|
name: sourceApi.eventName,
|
|
|
|
eventId: sourceApi.eventId,
|
|
|
|
eventId: sourceApi.eventId,
|
|
|
|
topic: sourceApi.topic
|
|
|
|
topic: sourceApi.topic
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -182,8 +215,10 @@ export const useFlowCallbacks = (
|
|
|
|
// 如果源节点没有事件信息,但目标节点有
|
|
|
|
// 如果源节点没有事件信息,但目标节点有
|
|
|
|
else if (targetApi && targetApi.topic && !targetApi.topic.includes('**empty**')) {
|
|
|
|
else if (targetApi && targetApi.topic && !targetApi.topic.includes('**empty**')) {
|
|
|
|
edgeParams.data = {
|
|
|
|
edgeParams.data = {
|
|
|
|
|
|
|
|
...edgeParams.data,
|
|
|
|
|
|
|
|
lineType: 'api',
|
|
|
|
displayData: {
|
|
|
|
displayData: {
|
|
|
|
name: targetApi.name,
|
|
|
|
name: targetApi.eventName,
|
|
|
|
eventId: targetApi.eventId,
|
|
|
|
eventId: targetApi.eventId,
|
|
|
|
topic: targetApi.topic
|
|
|
|
topic: targetApi.topic
|
|
|
|
}
|
|
|
|
}
|
|
|
|
@ -559,6 +594,12 @@ export const useFlowCallbacks = (
|
|
|
|
// region 节点/边操作
|
|
|
|
// region 节点/边操作
|
|
|
|
// 删除节点函数
|
|
|
|
// 删除节点函数
|
|
|
|
const deleteNode = useCallback((node: Node) => {
|
|
|
|
const deleteNode = useCallback((node: Node) => {
|
|
|
|
|
|
|
|
// 在应用编排模式下(useDefault为false)不允许删除节点
|
|
|
|
|
|
|
|
if (!useDefault) {
|
|
|
|
|
|
|
|
console.warn('在应用编排模式下不允许删除节点');
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 开始和结束节点不允许删除
|
|
|
|
// 开始和结束节点不允许删除
|
|
|
|
if (node.type === 'start' || node.type === 'end') {
|
|
|
|
if (node.type === 'start' || node.type === 'end') {
|
|
|
|
console.warn('开始和结束节点不允许删除');
|
|
|
|
console.warn('开始和结束节点不允许删除');
|
|
|
|
@ -646,9 +687,21 @@ export const useFlowCallbacks = (
|
|
|
|
});
|
|
|
|
});
|
|
|
|
document.dispatchEvent(event);
|
|
|
|
document.dispatchEvent(event);
|
|
|
|
}, 0);
|
|
|
|
}, 0);
|
|
|
|
}, [nodes, edges]);
|
|
|
|
}, [nodes, edges, useDefault]);
|
|
|
|
// 删除边函数
|
|
|
|
// 删除边函数
|
|
|
|
const deleteEdge = useCallback((edge: Edge) => {
|
|
|
|
const deleteEdge = useCallback((edge: Edge) => {
|
|
|
|
|
|
|
|
// 获取当前应用的运行状态
|
|
|
|
|
|
|
|
const { appRuntimeData, currentAppData } = store.getState().ideContainer;
|
|
|
|
|
|
|
|
const currentAppIsRunning = currentAppData?.id && appRuntimeData[currentAppData.id]
|
|
|
|
|
|
|
|
? appRuntimeData[currentAppData.id].isRunning
|
|
|
|
|
|
|
|
: false;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 在运行时禁止删除边
|
|
|
|
|
|
|
|
if (currentAppIsRunning) {
|
|
|
|
|
|
|
|
console.warn('在运行时不允许删除边');
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
setEdges((eds: Edge[]) => eds.filter((e) => e.id !== edge.id));
|
|
|
|
setEdges((eds: Edge[]) => eds.filter((e) => e.id !== edge.id));
|
|
|
|
|
|
|
|
|
|
|
|
// 删除边后记录历史
|
|
|
|
// 删除边后记录历史
|
|
|
|
@ -1024,7 +1077,6 @@ export const useFlowCallbacks = (
|
|
|
|
const nodeMap = Array.from(Object.values(nodeTypeMap).map(key => key));
|
|
|
|
const nodeMap = Array.from(Object.values(nodeTypeMap).map(key => key));
|
|
|
|
// 目前默认添加的都是系统组件/本地组件
|
|
|
|
// 目前默认添加的都是系统组件/本地组件
|
|
|
|
if (!nodeMap.includes(nodeType)) {
|
|
|
|
if (!nodeMap.includes(nodeType)) {
|
|
|
|
// console.log('getRegisterNodes():', getRegisterNodes(nodeType));
|
|
|
|
|
|
|
|
registerNodeType(nodeType, getNodeComponent(nodeType), nodeDefinition.nodeName);
|
|
|
|
registerNodeType(nodeType, getNodeComponent(nodeType), nodeDefinition.nodeName);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@ -1135,6 +1187,92 @@ export const useFlowCallbacks = (
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else return {};
|
|
|
|
else return {};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
const handelEventNodeList = (newRevertedData) => {
|
|
|
|
|
|
|
|
const { appRuntimeData, currentAppData } = store.getState().ideContainer;
|
|
|
|
|
|
|
|
const current = appRuntimeData[currentAppData.id];
|
|
|
|
|
|
|
|
const deleteEventSendNodeList = [];
|
|
|
|
|
|
|
|
const deleteEventlisteneList = [];
|
|
|
|
|
|
|
|
// 处理流程接口后的数据
|
|
|
|
|
|
|
|
const currentEventSendNodeList = current.eventSendNodeList;
|
|
|
|
|
|
|
|
const currentEventlisteneList = current.eventlisteneList;
|
|
|
|
|
|
|
|
// 画布数据
|
|
|
|
|
|
|
|
const nodeEntries: [string, any][] = Object.entries(newRevertedData);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 分类事件节点
|
|
|
|
|
|
|
|
const eventSendNodes = [];
|
|
|
|
|
|
|
|
const eventListenerNodes = [];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 从nodeEntries中提取事件节点
|
|
|
|
|
|
|
|
nodeEntries.forEach(([nodeId, nodeConfig]) => {
|
|
|
|
|
|
|
|
if (nodeConfig.component?.type === 'EVENTSEND') {
|
|
|
|
|
|
|
|
eventSendNodes.push({ nodeId, ...nodeConfig });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (nodeConfig.component?.type === 'EVENTLISTENE') {
|
|
|
|
|
|
|
|
eventListenerNodes.push({ nodeId, ...nodeConfig });
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理EVENTSEND节点
|
|
|
|
|
|
|
|
// 如果currentEventSendNodeList中有而nodeEntries中没有,则加入删除列表
|
|
|
|
|
|
|
|
currentEventSendNodeList.forEach((eventNode) => {
|
|
|
|
|
|
|
|
const nodeId = eventNode;
|
|
|
|
|
|
|
|
const nodeInCanvas = eventSendNodes.find(node => node.nodeId === nodeId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!nodeInCanvas) {
|
|
|
|
|
|
|
|
// 画布数据中没有该节点,加入删除列表
|
|
|
|
|
|
|
|
deleteEventSendNodeList.push(eventNode);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
// 节点存在于画布中,比较时间戳
|
|
|
|
|
|
|
|
// nodeId格式为"节点类型-时间戳"
|
|
|
|
|
|
|
|
const canvasNode = nodeInCanvas.nodeId.split('-');
|
|
|
|
|
|
|
|
const canvasTimestamp = canvasNode[canvasNode.length - 1];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const interfaceNode = nodeId.split('-');
|
|
|
|
|
|
|
|
const interfaceTimestamp = interfaceNode[interfaceNode.length - 1];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果画布数据的时间戳是最新的,那就是新增的事件节点,不需要添加到deleteList中
|
|
|
|
|
|
|
|
// 反之需要进一步判断
|
|
|
|
|
|
|
|
if (canvasTimestamp < interfaceTimestamp) {
|
|
|
|
|
|
|
|
// 画布节点时间戳较旧,需要进一步判断
|
|
|
|
|
|
|
|
// 这里留空,等待后续实现
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 处理EVENTLISTENE节点
|
|
|
|
|
|
|
|
// 如果currentEventlisteneList中有而nodeEntries中没有,则加入删除列表
|
|
|
|
|
|
|
|
currentEventlisteneList.forEach((eventNode) => {
|
|
|
|
|
|
|
|
const nodeId = eventNode;
|
|
|
|
|
|
|
|
const nodeInCanvas = eventListenerNodes.find(node => node.nodeId === nodeId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!nodeInCanvas) {
|
|
|
|
|
|
|
|
// 画布数据中没有该节点,加入删除列表
|
|
|
|
|
|
|
|
deleteEventlisteneList.push(eventNode);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
// 节点存在于画布中,比较时间戳
|
|
|
|
|
|
|
|
// nodeId格式为"节点类型-时间戳"
|
|
|
|
|
|
|
|
const canvasNode = nodeInCanvas.nodeId.split('-');
|
|
|
|
|
|
|
|
const canvasTimestamp = canvasNode[canvasNode.length - 1];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const interfaceNode = nodeId.split('-');
|
|
|
|
|
|
|
|
const interfaceTimestamp = interfaceNode[interfaceNode.length - 1];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果画布数据的时间戳是最新的,那就是新增的事件节点,不需要添加到deleteList中
|
|
|
|
|
|
|
|
// 反之需要进一步判断
|
|
|
|
|
|
|
|
if (canvasTimestamp < interfaceTimestamp) {
|
|
|
|
|
|
|
|
// 画布节点时间戳较旧,需要进一步判断
|
|
|
|
|
|
|
|
// 这里留空,等待后续实现
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
|
|
deleteEventSendNodeList,
|
|
|
|
|
|
|
|
deleteEventlisteneList
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
};
|
|
|
|
const saveFlowDataToServer = useCallback(async () => {
|
|
|
|
const saveFlowDataToServer = useCallback(async () => {
|
|
|
|
if (useDefault) {
|
|
|
|
if (useDefault) {
|
|
|
|
try {
|
|
|
|
try {
|
|
|
|
@ -1156,6 +1294,9 @@ export const useFlowCallbacks = (
|
|
|
|
const upDatePublishCB = await upDatePublish(revertedData.nodeConfigs);
|
|
|
|
const upDatePublishCB = await upDatePublish(revertedData.nodeConfigs);
|
|
|
|
const newRevertedData = reverseConvertFlowData(nodes, edges, upDatePublishCB);
|
|
|
|
const newRevertedData = reverseConvertFlowData(nodes, edges, upDatePublishCB);
|
|
|
|
const { flowData, currentAppData, info } = store.getState().ideContainer;
|
|
|
|
const { flowData, currentAppData, info } = store.getState().ideContainer;
|
|
|
|
|
|
|
|
const { deleteEventSendNodeList, deleteEventlisteneList } = handelEventNodeList(newRevertedData);
|
|
|
|
|
|
|
|
// console.log(deleteEventSendNodeList, deleteEventlisteneList);
|
|
|
|
|
|
|
|
// return;
|
|
|
|
let params = {};
|
|
|
|
let params = {};
|
|
|
|
// 更新复合组件/子流程
|
|
|
|
// 更新复合组件/子流程
|
|
|
|
if (currentAppData.key.includes('sub')) {
|
|
|
|
if (currentAppData.key.includes('sub')) {
|
|
|
|
@ -1192,6 +1333,12 @@ export const useFlowCallbacks = (
|
|
|
|
// 更新事件枚举表
|
|
|
|
// 更新事件枚举表
|
|
|
|
const res1: any = await queryEventItemBySceneIdOld(info.id);
|
|
|
|
const res1: any = await queryEventItemBySceneIdOld(info.id);
|
|
|
|
if (res1.code === 200) dispatch(updateEventListOld(res1.data));
|
|
|
|
if (res1.code === 200) dispatch(updateEventListOld(res1.data));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 更新缓存数据
|
|
|
|
|
|
|
|
dispatch(updateCanvasDataMap({
|
|
|
|
|
|
|
|
...canvasDataMap,
|
|
|
|
|
|
|
|
[currentAppData.id]: { nodes, edges }
|
|
|
|
|
|
|
|
}));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
Message.error(res.message);
|
|
|
|
Message.error(res.message);
|
|
|
|
@ -1243,48 +1390,63 @@ export const useFlowCallbacks = (
|
|
|
|
...item,
|
|
|
|
...item,
|
|
|
|
eventId: Array.from(new Set(item.eventId))
|
|
|
|
eventId: Array.from(new Set(item.eventId))
|
|
|
|
}));
|
|
|
|
}));
|
|
|
|
|
|
|
|
try {
|
|
|
|
updateAppFlowData(appFlowParams);
|
|
|
|
updateAppFlowData(appFlowParams);
|
|
|
|
if (appEventParams.length > 0) {
|
|
|
|
if (appEventParams.length > 0) {
|
|
|
|
for (const item of appEventParams) {
|
|
|
|
for (const item of appEventParams) {
|
|
|
|
await sleep(500);
|
|
|
|
await sleep(500);
|
|
|
|
updateAppEventChannel(item);
|
|
|
|
await updateAppEventChannel(item);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Message.success('保存成功');
|
|
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
|
|
console.error('保存失败:', error);
|
|
|
|
|
|
|
|
Message.error('保存失败: ' + (error.message));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, [nodes, edges, initialData?.appId]);
|
|
|
|
}, [nodes, edges, initialData?.appId]);
|
|
|
|
// 运行处理函数
|
|
|
|
// 运行处理函数
|
|
|
|
const handleRun = useCallback(async (running: boolean) => {
|
|
|
|
const handleRun = useCallback(async (running: boolean) => {
|
|
|
|
const { currentAppData, socketId } = store.getState().ideContainer;
|
|
|
|
const { currentAppData, socketId, appRuntimeData } = store.getState().ideContainer;
|
|
|
|
if (running) {
|
|
|
|
if (running) {
|
|
|
|
// 启动运行
|
|
|
|
// 启动运行
|
|
|
|
const params = {
|
|
|
|
const params = {
|
|
|
|
appId: currentAppData.id,
|
|
|
|
appId: currentAppData.id,
|
|
|
|
socketId
|
|
|
|
socketId
|
|
|
|
};
|
|
|
|
};
|
|
|
|
runMainFlow(params);
|
|
|
|
const res: any = await runMainFlow(params);
|
|
|
|
|
|
|
|
if (res.code === 200) {
|
|
|
|
// 设置运行状态为true
|
|
|
|
// 设置运行状态为true
|
|
|
|
dispatch(updateIsRunning(true));
|
|
|
|
dispatch(updateIsRunning(true));
|
|
|
|
|
|
|
|
|
|
|
|
// 重置节点状态
|
|
|
|
// 重置节点状态
|
|
|
|
dispatch(resetNodeStatus());
|
|
|
|
dispatch(resetNodeStatus());
|
|
|
|
|
|
|
|
|
|
|
|
// 开始运行时动画
|
|
|
|
// 更新运行ID
|
|
|
|
setEdges((eds) => eds.map(edge => ({
|
|
|
|
dispatch(updateRuntimeId(res.data));
|
|
|
|
...edge,
|
|
|
|
|
|
|
|
data: {
|
|
|
|
// 开始运行时动画
|
|
|
|
...edge.data,
|
|
|
|
setEdges((eds) => eds.map(edge => ({
|
|
|
|
isRunning: true,
|
|
|
|
...edge,
|
|
|
|
animationProgress: 0
|
|
|
|
data: {
|
|
|
|
}
|
|
|
|
...edge.data,
|
|
|
|
})));
|
|
|
|
isRunning: true,
|
|
|
|
|
|
|
|
animationProgress: 0
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
})));
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
Message.error(res.message);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
// 设置运行状态为false
|
|
|
|
// 设置运行状态为false
|
|
|
|
dispatch(updateIsRunning(false));
|
|
|
|
dispatch(updateIsRunning(false));
|
|
|
|
|
|
|
|
|
|
|
|
stopApp(currentAppData.id);
|
|
|
|
await stopApp(appRuntimeData[currentAppData.id].runId);
|
|
|
|
|
|
|
|
// 更新运行ID
|
|
|
|
|
|
|
|
dispatch(updateRuntimeId(''));
|
|
|
|
|
|
|
|
|
|
|
|
// 停止运行
|
|
|
|
// 停止运行
|
|
|
|
setEdges((eds) => eds.map(edge => ({
|
|
|
|
setEdges((eds) => eds.map(edge => ({
|
|
|
|
@ -1295,6 +1457,9 @@ export const useFlowCallbacks = (
|
|
|
|
animationProgress: 0
|
|
|
|
animationProgress: 0
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})));
|
|
|
|
})));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 清空当前应用的运行日志
|
|
|
|
|
|
|
|
dispatch(clearRuntimeLogs({ appId: currentAppData.id }));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, [initialData?.appId]);
|
|
|
|
}, [initialData?.appId]);
|
|
|
|
|
|
|
|
|
|
|
|
|