|
|
|
@ -48,6 +48,7 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
|
|
|
|
const [runtimeLogs, setRuntimeLogs] = useState<LogMessage[]>([]);
|
|
|
|
const [runtimeLogs, setRuntimeLogs] = useState<LogMessage[]>([]);
|
|
|
|
const [runtimeData, setRuntimeData] = useState<RuntimeData>({});
|
|
|
|
const [runtimeData, setRuntimeData] = useState<RuntimeData>({});
|
|
|
|
const [flowData, setFlowData] = useState<any>(null); // 流程数据
|
|
|
|
const [flowData, setFlowData] = useState<any>(null); // 流程数据
|
|
|
|
|
|
|
|
const [nodeStatusMap, setNodeStatusMap] = useState<Record<string, string>>({}); // 节点状态映射
|
|
|
|
const [loading, setLoading] = useState(false); // 加载状态
|
|
|
|
const [loading, setLoading] = useState(false); // 加载状态
|
|
|
|
const resizeBoxRef = useRef<HTMLDivElement>(null);
|
|
|
|
const resizeBoxRef = useRef<HTMLDivElement>(null);
|
|
|
|
const flowDataRef = useRef<any>(null); // 使用 ref 来存储 flowData,避免重复设置
|
|
|
|
const flowDataRef = useRef<any>(null); // 使用 ref 来存储 flowData,避免重复设置
|
|
|
|
@ -111,6 +112,8 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log('InstanceCanvas - 转换后的 flowData:', newFlowData);
|
|
|
|
|
|
|
|
|
|
|
|
// 只在数据真正变化时才更新
|
|
|
|
// 只在数据真正变化时才更新
|
|
|
|
if (!flowDataRef.current) {
|
|
|
|
if (!flowDataRef.current) {
|
|
|
|
flowDataRef.current = newFlowData;
|
|
|
|
flowDataRef.current = newFlowData;
|
|
|
|
@ -118,7 +121,7 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 处理运行日志
|
|
|
|
// 处理运行日志和节点状态
|
|
|
|
if (res.data.main?.nodeLogs && Array.isArray(res.data.main.nodeLogs) && res.data.main.nodeLogs.length > 0) {
|
|
|
|
if (res.data.main?.nodeLogs && Array.isArray(res.data.main.nodeLogs) && res.data.main.nodeLogs.length > 0) {
|
|
|
|
const logs = res.data.main.nodeLogs.map((log: any, index: number) => ({
|
|
|
|
const logs = res.data.main.nodeLogs.map((log: any, index: number) => ({
|
|
|
|
id: index,
|
|
|
|
id: index,
|
|
|
|
@ -131,6 +134,20 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
|
|
|
|
state: log.state
|
|
|
|
state: log.state
|
|
|
|
}));
|
|
|
|
}));
|
|
|
|
setRuntimeLogs(logs);
|
|
|
|
setRuntimeLogs(logs);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 构建节点状态映射
|
|
|
|
|
|
|
|
const statusMap: Record<string, string> = {};
|
|
|
|
|
|
|
|
res.data.main.nodeLogs.forEach((log: any) => {
|
|
|
|
|
|
|
|
// state: 1=成功(success), 0=运行中(running), -1=失败(failed)
|
|
|
|
|
|
|
|
if (log.state === 1) {
|
|
|
|
|
|
|
|
statusMap[log.nodeId] = 'success';
|
|
|
|
|
|
|
|
} else if (log.state === -1) {
|
|
|
|
|
|
|
|
statusMap[log.nodeId] = 'failed';
|
|
|
|
|
|
|
|
} else if (log.state === 0) {
|
|
|
|
|
|
|
|
statusMap[log.nodeId] = 'running';
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
setNodeStatusMap(statusMap);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 处理运行数据(input/output)
|
|
|
|
// 处理运行数据(input/output)
|
|
|
|
@ -198,6 +215,40 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}, []);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 使用 useMemo 创建带有节点状态的 flowData
|
|
|
|
|
|
|
|
const flowDataWithStatus = useMemo(() => {
|
|
|
|
|
|
|
|
if (!flowData || Object.keys(nodeStatusMap).length === 0) {
|
|
|
|
|
|
|
|
return flowData;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log('InstanceCanvas - 注入状态前的 flowData:', flowData);
|
|
|
|
|
|
|
|
console.log('InstanceCanvas - 要注入的状态映射:', nodeStatusMap);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 深拷贝 flowData 并注入节点状态
|
|
|
|
|
|
|
|
const componentsWithStatus = { ...flowData.components };
|
|
|
|
|
|
|
|
Object.keys(nodeStatusMap).forEach((nodeId) => {
|
|
|
|
|
|
|
|
if (componentsWithStatus[nodeId]) {
|
|
|
|
|
|
|
|
componentsWithStatus[nodeId] = {
|
|
|
|
|
|
|
|
...componentsWithStatus[nodeId],
|
|
|
|
|
|
|
|
status: nodeStatusMap[nodeId],
|
|
|
|
|
|
|
|
isStatusVisible: true // 显示状态指示器
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const result = {
|
|
|
|
|
|
|
|
...flowData,
|
|
|
|
|
|
|
|
components: componentsWithStatus,
|
|
|
|
|
|
|
|
main: {
|
|
|
|
|
|
|
|
...flowData.main,
|
|
|
|
|
|
|
|
components: componentsWithStatus
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log('InstanceCanvas - 注入状态后的 flowData:', result);
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
|
|
|
}, [flowData, nodeStatusMap]);
|
|
|
|
|
|
|
|
|
|
|
|
// 渲染运行日志内容
|
|
|
|
// 渲染运行日志内容
|
|
|
|
const renderRuntimeLogs = () => {
|
|
|
|
const renderRuntimeLogs = () => {
|
|
|
|
return (
|
|
|
|
return (
|
|
|
|
@ -339,9 +390,9 @@ const InstanceCanvas: React.FC<InstanceCanvasProps> = ({ instanceData, title, on
|
|
|
|
<Spin size={40} />
|
|
|
|
<Spin size={40} />
|
|
|
|
<span style={{ marginTop: '16px', color: 'var(--color-text-3)' }}>加载中...</span>
|
|
|
|
<span style={{ marginTop: '16px', color: 'var(--color-text-3)' }}>加载中...</span>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
) : flowData ? (
|
|
|
|
) : flowDataWithStatus ? (
|
|
|
|
<MemoizedFlowEditor
|
|
|
|
<MemoizedFlowEditor
|
|
|
|
flowData={flowData}
|
|
|
|
flowData={flowDataWithStatus}
|
|
|
|
instanceId={instanceData?.id || 'instance-canvas'}
|
|
|
|
instanceId={instanceData?.id || 'instance-canvas'}
|
|
|
|
/>
|
|
|
|
/>
|
|
|
|
) : (
|
|
|
|
) : (
|
|
|
|
|