Compare commits

...

2 Commits

@ -112,8 +112,6 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
}
};
console.log('InstanceCanvas - 转换后的 flowData:', newFlowData);
// 只在数据真正变化时才更新
if (!flowDataRef.current) {
flowDataRef.current = newFlowData;
@ -221,9 +219,6 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
return flowData;
}
console.log('InstanceCanvas - 注入状态前的 flowData:', flowData);
console.log('InstanceCanvas - 要注入的状态映射:', nodeStatusMap);
// 深拷贝 flowData 并注入节点状态
const componentsWithStatus = { ...flowData.components };
Object.keys(nodeStatusMap).forEach((nodeId) => {
@ -245,7 +240,6 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
}
};
console.log('InstanceCanvas - 注入状态后的 flowData:', result);
return result;
}, [flowData, nodeStatusMap]);

@ -1534,6 +1534,9 @@ export const useFlowCallbacks = (
document.dispatchEvent(new CustomEvent('refreshAppList'));
}
// 重置节点状态
dispatch(resetNodeStatus());
// 更新运行ID
dispatch(updateRuntimeId(''));

@ -6,7 +6,7 @@ import { updateCanvasDataMap } from '@/store/ideContainer';
import { Dispatch } from 'redux';
export const useFlowEditorState = (initialData?: any) => {
export const useFlowEditorState = (initialData?: any, readOnly?: boolean) => {
const [nodes, setNodes] = useState<Node[]>([]);
const [edges, setEdges] = useState<Edge[]>([]);
@ -63,22 +63,33 @@ export const useFlowEditorState = (initialData?: any) => {
setNodes(prevNodes =>{
return prevNodes.map(node => {
// 优先使用运行时状态,其次使用节点自身的状态(历史实例),最后默认为 waiting
const nodeStatus = currentNodeStatusMap[node.id] || node.data.status || 'waiting';
// 如果是只读模式(历史实例查看),优先使用节点自身的历史状态
// 如果是正常运行模式,只使用运行时状态
let nodeStatus = 'waiting';
let showStatus = false;
if (readOnly) {
// 只读模式:使用历史状态
nodeStatus = node.data.status as string || 'waiting';
showStatus = hasInitialDataStatus as boolean || node.data.isStatusVisible as boolean || false;
} else {
// 正常模式:只使用运行时状态
nodeStatus = currentNodeStatusMap[node.id] || 'waiting';
showStatus = currentAppIsRunning;
}
return {
...node,
data: {
...node.data,
status: nodeStatus,
// 在运行时或有历史状态时显示状态指示器
isStatusVisible: currentAppIsRunning || hasInitialDataStatus || node.data.isStatusVisible
isStatusVisible: showStatus
}
};
});
});
}, [appRuntimeData, currentAppKey, currentAppIsRunning, initialData?.id, initialData?.components, nodes.length]);
}, [appRuntimeData, currentAppKey, currentAppIsRunning, initialData?.id, initialData?.components, nodes.length, readOnly]);
const updateCanvasDataMapDebounced = useRef(
debounce((dispatch: Dispatch<any>, canvasDataMap: any, id: string, nodes: Node[], edges: Edge[]) => {

@ -63,7 +63,7 @@ const FlowEditor: React.FC<{ initialData?: any, useDefault?: boolean, readOnly?:
// Initial data
initialData: stateInitialData
} = useFlowEditorState(initialData);
} = useFlowEditorState(initialData, readOnly);
// 使用自定义Hook管理回调函数
const {

@ -150,11 +150,9 @@ export const convertFlowData = (flowData: any, useDefault = true) => {
// 保留节点状态信息(用于历史实例查看)
if (nodeConfig.status) {
node.data.status = nodeConfig.status;
console.log(`convertFlowData - 保留节点 ${nodeId} 的状态:`, nodeConfig.status);
}
if (nodeConfig.isStatusVisible !== undefined) {
node.data.isStatusVisible = nodeConfig.isStatusVisible;
console.log(`convertFlowData - 保留节点 ${nodeId} 的状态可见性:`, nodeConfig.isStatusVisible);
}
// 注册循环节点类型
@ -692,7 +690,7 @@ const getNodeApiIns = (nodeId: string, nodeConfig: any, currentProjectCompData:
}
else {
const comp = currentProjectCompData.filter(item => {
return (item.identifier || item?.comp?.identifier) === nodeConfig?.component?.compIdentifier;
return (item.id || item?.comp?.id) === nodeConfig?.component?.compId;
});
if (comp && comp.length > 0) {
const apiIns = comp[0]?.def?.apis || comp[0]?.comp?.def?.apis || [];
@ -787,7 +785,7 @@ const getNodeApiOuts = (nodeId: string, nodeConfig: any, currentProjectCompData:
return [{ name: 'done', desc: '', dataType: '', defaultValue: '' }];
}
else {
const comp = currentProjectCompData.filter(item => item.identifier === nodeConfig?.component?.compIdentifier);
const comp = currentProjectCompData.filter(item => item.id === nodeConfig?.component?.compId);
if (comp && comp.length > 0) {
return [{
...comp[0].def?.apiOut,

Loading…
Cancel
Save