|
@@ -48,21 +48,21 @@ export function useBlueprint(workflowName = null) {
|
|
|
*/
|
|
*/
|
|
|
const loadWorkflow = useCallback(async (folderName) => {
|
|
const loadWorkflow = useCallback(async (folderName) => {
|
|
|
try {
|
|
try {
|
|
|
- console.log('loadWorkflow 被调用,folderName:', folderName);
|
|
|
|
|
|
|
+ // console.log('loadWorkflow 被调用,folderName:', folderName);
|
|
|
if (!folderName) {
|
|
if (!folderName) {
|
|
|
- console.log('folderName 为空,返回');
|
|
|
|
|
|
|
+ // console.log('folderName 为空,返回');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (!window.electronAPI || !window.electronAPI.readProcessingJson) {
|
|
if (!window.electronAPI || !window.electronAPI.readProcessingJson) {
|
|
|
- console.log('electronAPI 不可用,返回');
|
|
|
|
|
|
|
+ // console.log('electronAPI 不可用,返回');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const processingData = await window.electronAPI.readProcessingJson(folderName);
|
|
const processingData = await window.electronAPI.readProcessingJson(folderName);
|
|
|
- console.log('读取到的 processingData:', processingData);
|
|
|
|
|
|
|
+ // console.log('读取到的 processingData:', processingData);
|
|
|
if (!processingData) {
|
|
if (!processingData) {
|
|
|
- console.log('processingData 为空,返回');
|
|
|
|
|
|
|
+ // console.log('processingData 为空,返回');
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -77,7 +77,7 @@ export function useBlueprint(workflowName = null) {
|
|
|
|
|
|
|
|
// 转换为蓝图节点图
|
|
// 转换为蓝图节点图
|
|
|
const blueprint = workflowToBlueprint(processingData);
|
|
const blueprint = workflowToBlueprint(processingData);
|
|
|
- console.log('转换后的 blueprint:', blueprint);
|
|
|
|
|
|
|
+ // console.log('转换后的 blueprint:', blueprint);
|
|
|
|
|
|
|
|
// 分析需要创建哪些变量节点(Get/Set)
|
|
// 分析需要创建哪些变量节点(Get/Set)
|
|
|
const variables = processingData.variables || {};
|
|
const variables = processingData.variables || {};
|
|
@@ -89,6 +89,7 @@ export function useBlueprint(workflowName = null) {
|
|
|
// 创建变量节点(根据引用类型创建 Get 或 Set 节点)
|
|
// 创建变量节点(根据引用类型创建 Get 或 Set 节点)
|
|
|
// 使用固定的 ID 格式,确保每次加载时 ID 一致
|
|
// 使用固定的 ID 格式,确保每次加载时 ID 一致
|
|
|
const variableNodes = [];
|
|
const variableNodes = [];
|
|
|
|
|
+ let varNodeX = 150; // 变量节点的初始 X 坐标,确保在可见区域
|
|
|
let yOffset = 200;
|
|
let yOffset = 200;
|
|
|
varNames.forEach((varName) => {
|
|
varNames.forEach((varName) => {
|
|
|
const varValue = variables[varName];
|
|
const varValue = variables[varName];
|
|
@@ -98,7 +99,7 @@ export function useBlueprint(workflowName = null) {
|
|
|
if (refs.asInput) {
|
|
if (refs.asInput) {
|
|
|
// 使用固定的 ID 格式:var_get_变量名
|
|
// 使用固定的 ID 格式:var_get_变量名
|
|
|
const fixedId = `var_get_${varName}`;
|
|
const fixedId = `var_get_${varName}`;
|
|
|
- const getNode = createVariableNode(varName, varValue, 50, yOffset, 'get', fixedId);
|
|
|
|
|
|
|
+ const getNode = createVariableNode(varName, varValue, varNodeX, yOffset, 'get', fixedId);
|
|
|
variableNodes.push(getNode);
|
|
variableNodes.push(getNode);
|
|
|
yOffset += 80;
|
|
yOffset += 80;
|
|
|
}
|
|
}
|
|
@@ -107,7 +108,7 @@ export function useBlueprint(workflowName = null) {
|
|
|
if (refs.asOutput) {
|
|
if (refs.asOutput) {
|
|
|
// 使用固定的 ID 格式:var_set_变量名
|
|
// 使用固定的 ID 格式:var_set_变量名
|
|
|
const fixedId = `var_set_${varName}`;
|
|
const fixedId = `var_set_${varName}`;
|
|
|
- const setNode = createVariableNode(varName, varValue, 50, yOffset, 'set', fixedId);
|
|
|
|
|
|
|
+ const setNode = createVariableNode(varName, varValue, varNodeX, yOffset, 'set', fixedId);
|
|
|
variableNodes.push(setNode);
|
|
variableNodes.push(setNode);
|
|
|
yOffset += 80;
|
|
yOffset += 80;
|
|
|
}
|
|
}
|
|
@@ -115,12 +116,11 @@ export function useBlueprint(workflowName = null) {
|
|
|
// 如果变量没有被引用,默认创建一个 Get 节点
|
|
// 如果变量没有被引用,默认创建一个 Get 节点
|
|
|
if (!refs.asInput && !refs.asOutput) {
|
|
if (!refs.asInput && !refs.asOutput) {
|
|
|
const fixedId = `var_get_${varName}`;
|
|
const fixedId = `var_get_${varName}`;
|
|
|
- const getNode = createVariableNode(varName, varValue, 50, yOffset, 'get', fixedId);
|
|
|
|
|
|
|
+ const getNode = createVariableNode(varName, varValue, varNodeX, yOffset, 'get', fixedId);
|
|
|
variableNodes.push(getNode);
|
|
variableNodes.push(getNode);
|
|
|
yOffset += 80;
|
|
yOffset += 80;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
|
- console.log('创建的变量节点数量:', variableNodes.length);
|
|
|
|
|
|
|
|
|
|
// 根据 inVars 中的变量引用创建从变量节点到流程节点的连接
|
|
// 根据 inVars 中的变量引用创建从变量节点到流程节点的连接
|
|
|
const variableConnResult = createVariableConnections(blueprint.nodes, variableNodes, processingData, blueprint.connections || []);
|
|
const variableConnResult = createVariableConnections(blueprint.nodes, variableNodes, processingData, blueprint.connections || []);
|
|
@@ -140,9 +140,9 @@ export function useBlueprint(workflowName = null) {
|
|
|
modifiedConnectionIds = variableConnResult.modifiedConnections || [];
|
|
modifiedConnectionIds = variableConnResult.modifiedConnections || [];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- console.log('创建的变量数据连接数量:', variableDataConnections.length);
|
|
|
|
|
- console.log('创建的变量执行连接数量:', variableExecConnections.length);
|
|
|
|
|
- console.log('需要修改的执行连接数量:', modifiedConnectionIds.length);
|
|
|
|
|
|
|
+ // console.log('创建的变量数据连接数量:', variableDataConnections.length);
|
|
|
|
|
+ // console.log('创建的变量执行连接数量:', variableExecConnections.length);
|
|
|
|
|
+ // console.log('需要修改的执行连接数量:', modifiedConnectionIds.length);
|
|
|
|
|
|
|
|
// 删除需要修改的旧连接(这些连接将被新的连接替代)
|
|
// 删除需要修改的旧连接(这些连接将被新的连接替代)
|
|
|
let finalConnections = (blueprint.connections || []).filter(conn => !modifiedConnectionIds.includes(conn.id));
|
|
let finalConnections = (blueprint.connections || []).filter(conn => !modifiedConnectionIds.includes(conn.id));
|
|
@@ -150,8 +150,8 @@ export function useBlueprint(workflowName = null) {
|
|
|
// 合并所有新的变量连接(数据连接 + 执行连接)
|
|
// 合并所有新的变量连接(数据连接 + 执行连接)
|
|
|
blueprint.connections = [...finalConnections, ...variableDataConnections, ...variableExecConnections];
|
|
blueprint.connections = [...finalConnections, ...variableDataConnections, ...variableExecConnections];
|
|
|
|
|
|
|
|
- console.log('blueprint.nodes 是否存在:', !!blueprint.nodes);
|
|
|
|
|
- console.log('blueprint.nodes 长度:', blueprint.nodes?.length);
|
|
|
|
|
|
|
+ // console.log('blueprint.nodes 是否存在:', !!blueprint.nodes);
|
|
|
|
|
+ // console.log('blueprint.nodes 长度:', blueprint.nodes?.length);
|
|
|
|
|
|
|
|
// 加载位置信息和连线信息
|
|
// 加载位置信息和连线信息
|
|
|
let nodePositions = null;
|
|
let nodePositions = null;
|
|
@@ -159,40 +159,49 @@ export function useBlueprint(workflowName = null) {
|
|
|
if (window.electronAPI && window.electronAPI.readBlueprintJson) {
|
|
if (window.electronAPI && window.electronAPI.readBlueprintJson) {
|
|
|
try {
|
|
try {
|
|
|
const bpData = await window.electronAPI.readBlueprintJson(folderName);
|
|
const bpData = await window.electronAPI.readBlueprintJson(folderName);
|
|
|
- console.log('读取到的 bpData:', bpData);
|
|
|
|
|
|
|
+ // console.log('读取到的 bpData:', bpData);
|
|
|
if (bpData && bpData.nodePositions) {
|
|
if (bpData && bpData.nodePositions) {
|
|
|
nodePositions = bpData.nodePositions;
|
|
nodePositions = bpData.nodePositions;
|
|
|
- console.log('nodePositions:', nodePositions);
|
|
|
|
|
|
|
+ // console.log('nodePositions:', nodePositions);
|
|
|
}
|
|
}
|
|
|
if (bpData && bpData.connections) {
|
|
if (bpData && bpData.connections) {
|
|
|
savedConnections = bpData.connections;
|
|
savedConnections = bpData.connections;
|
|
|
- console.log('savedConnections:', savedConnections);
|
|
|
|
|
|
|
+ // console.log('savedConnections:', savedConnections);
|
|
|
}
|
|
}
|
|
|
} catch (error) {
|
|
} catch (error) {
|
|
|
- console.log('读取位置信息失败:', error);
|
|
|
|
|
|
|
+ // console.log('读取位置信息失败:', error);
|
|
|
// 读取位置信息失败,忽略错误
|
|
// 读取位置信息失败,忽略错误
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- console.log('检查 blueprint.nodes:', blueprint.nodes && blueprint.nodes.length > 0);
|
|
|
|
|
|
|
+ // console.log('检查 blueprint.nodes:', blueprint.nodes && blueprint.nodes.length > 0);
|
|
|
if (blueprint.nodes && blueprint.nodes.length > 0) {
|
|
if (blueprint.nodes && blueprint.nodes.length > 0) {
|
|
|
- console.log('进入节点设置分支');
|
|
|
|
|
|
|
+ // console.log('进入节点设置分支');
|
|
|
// 合并流程节点和变量节点
|
|
// 合并流程节点和变量节点
|
|
|
let finalNodes = [...blueprint.nodes, ...variableNodes];
|
|
let finalNodes = [...blueprint.nodes, ...variableNodes];
|
|
|
let needsLayout = false;
|
|
let needsLayout = false;
|
|
|
|
|
|
|
|
if (nodePositions) {
|
|
if (nodePositions) {
|
|
|
- console.log('nodePositions 中的节点ID:', Object.keys(nodePositions));
|
|
|
|
|
- console.log('finalNodes 中的节点ID:', finalNodes.map(n => n.id));
|
|
|
|
|
|
|
+ // console.log('nodePositions 中的节点ID:', Object.keys(nodePositions));
|
|
|
|
|
+ // console.log('finalNodes 中的节点ID:', finalNodes.map(n => n.id));
|
|
|
// 应用保存的位置信息(包括变量节点)
|
|
// 应用保存的位置信息(包括变量节点)
|
|
|
finalNodes = finalNodes.map(node => {
|
|
finalNodes = finalNodes.map(node => {
|
|
|
const savedPos = nodePositions[node.id];
|
|
const savedPos = nodePositions[node.id];
|
|
|
if (savedPos && typeof savedPos.x === 'number' && typeof savedPos.y === 'number') {
|
|
if (savedPos && typeof savedPos.x === 'number' && typeof savedPos.y === 'number') {
|
|
|
- return {
|
|
|
|
|
- ...node,
|
|
|
|
|
- x: savedPos.x,
|
|
|
|
|
- y: savedPos.y
|
|
|
|
|
- };
|
|
|
|
|
|
|
+ // 检查保存的坐标是否合理(X 坐标至少为 100,避免节点在屏幕外)
|
|
|
|
|
+ const isValidPosition = savedPos.x >= 100;
|
|
|
|
|
+
|
|
|
|
|
+ if (isValidPosition) {
|
|
|
|
|
+ // 使用保存的坐标
|
|
|
|
|
+ return {
|
|
|
|
|
+ ...node,
|
|
|
|
|
+ x: savedPos.x,
|
|
|
|
|
+ y: savedPos.y
|
|
|
|
|
+ };
|
|
|
|
|
+ } else {
|
|
|
|
|
+ // 保存的坐标不合理,保持节点创建时的默认坐标
|
|
|
|
|
+ return node;
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
return node;
|
|
return node;
|
|
|
});
|
|
});
|
|
@@ -203,7 +212,7 @@ export function useBlueprint(workflowName = null) {
|
|
|
return savedPos && typeof savedPos.x === 'number' && typeof savedPos.y === 'number';
|
|
return savedPos && typeof savedPos.x === 'number' && typeof savedPos.y === 'number';
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- console.log('有位置信息的节点数量:', nodesWithPosition.length, '/', finalNodes.length);
|
|
|
|
|
|
|
+ // console.log('有位置信息的节点数量:', nodesWithPosition.length, '/', finalNodes.length);
|
|
|
|
|
|
|
|
// 如果有节点没有位置信息,需要自动布局
|
|
// 如果有节点没有位置信息,需要自动布局
|
|
|
if (nodesWithPosition.length < finalNodes.length) {
|
|
if (nodesWithPosition.length < finalNodes.length) {
|
|
@@ -235,15 +244,15 @@ export function useBlueprint(workflowName = null) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 调试:检查节点数据
|
|
// 调试:检查节点数据
|
|
|
- console.log('加载的节点数量:', finalNodes.length);
|
|
|
|
|
|
|
+ // console.log('加载的节点数量:', finalNodes.length);
|
|
|
if (finalNodes.length > 0) {
|
|
if (finalNodes.length > 0) {
|
|
|
- console.log('第一个节点:', finalNodes[0]);
|
|
|
|
|
- console.log('节点坐标范围:', {
|
|
|
|
|
- minX: Math.min(...finalNodes.map(n => n.x || 0)),
|
|
|
|
|
- maxX: Math.max(...finalNodes.map(n => n.x || 0)),
|
|
|
|
|
- minY: Math.min(...finalNodes.map(n => n.y || 0)),
|
|
|
|
|
- maxY: Math.max(...finalNodes.map(n => n.y || 0))
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ // console.log('第一个节点:', finalNodes[0]);
|
|
|
|
|
+ // console.log('节点坐标范围:', {
|
|
|
|
|
+ // minX: Math.min(...finalNodes.map(n => n.x || 0)),
|
|
|
|
|
+ // maxX: Math.max(...finalNodes.map(n => n.x || 0)),
|
|
|
|
|
+ // minY: Math.min(...finalNodes.map(n => n.y || 0)),
|
|
|
|
|
+ // maxY: Math.max(...finalNodes.map(n => n.y || 0))
|
|
|
|
|
+ // });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
setNodes(finalNodes);
|
|
setNodes(finalNodes);
|
|
@@ -251,10 +260,10 @@ export function useBlueprint(workflowName = null) {
|
|
|
// 优先使用保存的连线信息,否则使用从工作流解析的连线
|
|
// 优先使用保存的连线信息,否则使用从工作流解析的连线
|
|
|
let connectionsToUse = [];
|
|
let connectionsToUse = [];
|
|
|
if (savedConnections && savedConnections.length > 0) {
|
|
if (savedConnections && savedConnections.length > 0) {
|
|
|
- console.log('使用保存的连线信息,数量:', savedConnections.length);
|
|
|
|
|
|
|
+ // console.log('使用保存的连线信息,数量:', savedConnections.length);
|
|
|
connectionsToUse = savedConnections;
|
|
connectionsToUse = savedConnections;
|
|
|
} else {
|
|
} else {
|
|
|
- console.log('使用解析的连线信息,数量:', blueprint.connections?.length || 0);
|
|
|
|
|
|
|
+ // console.log('使用解析的连线信息,数量:', blueprint.connections?.length || 0);
|
|
|
connectionsToUse = blueprint.connections || [];
|
|
connectionsToUse = blueprint.connections || [];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -264,7 +273,7 @@ export function useBlueprint(workflowName = null) {
|
|
|
if (targetNode && targetNode.type === 'variable' && targetNode.varMode === 'set') {
|
|
if (targetNode && targetNode.type === 'variable' && targetNode.varMode === 'set') {
|
|
|
// 如果目标是 SET 节点,并且使用的是旧端口 ID
|
|
// 如果目标是 SET 节点,并且使用的是旧端口 ID
|
|
|
if (conn.targetPort === 'input_0') {
|
|
if (conn.targetPort === 'input_0') {
|
|
|
- console.log('迁移 SET 节点连接端口 ID:', conn.id, 'input_0 -> input_value');
|
|
|
|
|
|
|
+ // console.log('迁移 SET 节点连接端口 ID:', conn.id, 'input_0 -> input_value');
|
|
|
return {
|
|
return {
|
|
|
...conn,
|
|
...conn,
|
|
|
targetPort: 'input_value'
|
|
targetPort: 'input_value'
|
|
@@ -277,8 +286,8 @@ export function useBlueprint(workflowName = null) {
|
|
|
setConnections(connectionsToUse);
|
|
setConnections(connectionsToUse);
|
|
|
setIsDirty(false); // 加载完成后,标记为未修改
|
|
setIsDirty(false); // 加载完成后,标记为未修改
|
|
|
} else {
|
|
} else {
|
|
|
- console.log('blueprint.nodes 为空或长度为 0,设置空数组');
|
|
|
|
|
- console.log('blueprint:', blueprint);
|
|
|
|
|
|
|
+ // console.log('blueprint.nodes 为空或长度为 0,设置空数组');
|
|
|
|
|
+ // console.log('blueprint:', blueprint);
|
|
|
setNodes([]);
|
|
setNodes([]);
|
|
|
setConnections([]);
|
|
setConnections([]);
|
|
|
}
|
|
}
|
|
@@ -304,30 +313,30 @@ export function useBlueprint(workflowName = null) {
|
|
|
* 保存工作流
|
|
* 保存工作流
|
|
|
*/
|
|
*/
|
|
|
const saveWorkflow = useCallback(async (folderName) => {
|
|
const saveWorkflow = useCallback(async (folderName) => {
|
|
|
- console.log('saveWorkflow 被调用,folderName:', folderName);
|
|
|
|
|
|
|
+ // console.log('saveWorkflow 被调用,folderName:', folderName);
|
|
|
if (!folderName) {
|
|
if (!folderName) {
|
|
|
console.error('saveWorkflow: folderName 为空');
|
|
console.error('saveWorkflow: folderName 为空');
|
|
|
return { success: false, error: '工作流名称为空' };
|
|
return { success: false, error: '工作流名称为空' };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
try {
|
|
try {
|
|
|
- console.log('saveWorkflow: 开始转换蓝图到工作流,nodes:', nodes.length, 'connections:', connections.length);
|
|
|
|
|
|
|
+ // console.log('saveWorkflow: 开始转换蓝图到工作流,nodes:', nodes.length, 'connections:', connections.length);
|
|
|
const workflow = blueprintToWorkflow({ nodes, connections });
|
|
const workflow = blueprintToWorkflow({ nodes, connections });
|
|
|
- console.log('saveWorkflow: 转换完成,workflow:', workflow);
|
|
|
|
|
|
|
+ // console.log('saveWorkflow: 转换完成,workflow:', workflow);
|
|
|
const fullWorkflow = {
|
|
const fullWorkflow = {
|
|
|
...workflow,
|
|
...workflow,
|
|
|
variables: variables || {}
|
|
variables: variables || {}
|
|
|
};
|
|
};
|
|
|
- console.log('saveWorkflow: fullWorkflow:', fullWorkflow);
|
|
|
|
|
|
|
+ // console.log('saveWorkflow: fullWorkflow:', fullWorkflow);
|
|
|
|
|
|
|
|
if (!window.electronAPI || !window.electronAPI.saveProcessingJson) {
|
|
if (!window.electronAPI || !window.electronAPI.saveProcessingJson) {
|
|
|
console.error('saveWorkflow: electronAPI 或 saveProcessingJson 不可用');
|
|
console.error('saveWorkflow: electronAPI 或 saveProcessingJson 不可用');
|
|
|
return { success: false, error: '保存 API 不可用' };
|
|
return { success: false, error: '保存 API 不可用' };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- console.log('saveWorkflow: 调用 electronAPI.saveProcessingJson');
|
|
|
|
|
|
|
+ // console.log('saveWorkflow: 调用 electronAPI.saveProcessingJson');
|
|
|
const result = await window.electronAPI.saveProcessingJson(folderName, fullWorkflow);
|
|
const result = await window.electronAPI.saveProcessingJson(folderName, fullWorkflow);
|
|
|
- console.log('saveWorkflow: 保存结果:', result);
|
|
|
|
|
|
|
+ // console.log('saveWorkflow: 保存结果:', result);
|
|
|
|
|
|
|
|
// 同时保存节点位置和连线信息到 bp.json
|
|
// 同时保存节点位置和连线信息到 bp.json
|
|
|
// 注意:连线坐标需要从 DOM 获取,这里只保存连线的基本信息
|
|
// 注意:连线坐标需要从 DOM 获取,这里只保存连线的基本信息
|
|
@@ -357,12 +366,12 @@ export function useBlueprint(workflowName = null) {
|
|
|
targetY: conn.targetY
|
|
targetY: conn.targetY
|
|
|
}));
|
|
}));
|
|
|
|
|
|
|
|
- console.log('saveWorkflow: 保存节点位置和连线到 bp.json,节点数量:', nodes.length, '连线数量:', connections.length);
|
|
|
|
|
|
|
+ // console.log('saveWorkflow: 保存节点位置和连线到 bp.json,节点数量:', nodes.length, '连线数量:', connections.length);
|
|
|
await window.electronAPI.saveBlueprintJson(folderName, {
|
|
await window.electronAPI.saveBlueprintJson(folderName, {
|
|
|
nodePositions,
|
|
nodePositions,
|
|
|
connections: connectionData
|
|
connections: connectionData
|
|
|
});
|
|
});
|
|
|
- console.log('saveWorkflow: 节点位置和连线保存成功');
|
|
|
|
|
|
|
+ // console.log('saveWorkflow: 节点位置和连线保存成功');
|
|
|
} catch (bpError) {
|
|
} catch (bpError) {
|
|
|
console.error('saveWorkflow: 保存节点位置失败:', bpError);
|
|
console.error('saveWorkflow: 保存节点位置失败:', bpError);
|
|
|
// 节点位置保存失败不影响主流程
|
|
// 节点位置保存失败不影响主流程
|
|
@@ -372,7 +381,7 @@ export function useBlueprint(workflowName = null) {
|
|
|
// 保存成功后,标记为未修改
|
|
// 保存成功后,标记为未修改
|
|
|
if (result && result.success !== false) {
|
|
if (result && result.success !== false) {
|
|
|
setIsDirty(false);
|
|
setIsDirty(false);
|
|
|
- console.log('saveWorkflow: 保存成功,isDirty 设为 false');
|
|
|
|
|
|
|
+ // console.log('saveWorkflow: 保存成功,isDirty 设为 false');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
return result;
|
|
@@ -780,14 +789,14 @@ export function useBlueprint(workflowName = null) {
|
|
|
const processNodes = nodes.filter(n => n.type !== 'variable');
|
|
const processNodes = nodes.filter(n => n.type !== 'variable');
|
|
|
const varNodes = nodes.filter(n => n.type === 'variable');
|
|
const varNodes = nodes.filter(n => n.type === 'variable');
|
|
|
|
|
|
|
|
- console.log('开始手动整理布局,流程节点数量:', processNodes.length, '变量节点数量:', varNodes.length);
|
|
|
|
|
|
|
+ // console.log('开始手动整理布局,流程节点数量:', processNodes.length, '变量节点数量:', varNodes.length);
|
|
|
|
|
|
|
|
// 使用进度回调
|
|
// 使用进度回调
|
|
|
const layoutedProcessNodes = autoLayoutBlueprint(
|
|
const layoutedProcessNodes = autoLayoutBlueprint(
|
|
|
processNodes,
|
|
processNodes,
|
|
|
connections,
|
|
connections,
|
|
|
(progress, message) => {
|
|
(progress, message) => {
|
|
|
- console.log(`布局进度: ${progress}% - ${message}`);
|
|
|
|
|
|
|
+ // console.log(`布局进度: ${progress}% - ${message}`);
|
|
|
setLayoutProgress(progress * 0.8); // 0-80% 用于布局
|
|
setLayoutProgress(progress * 0.8); // 0-80% 用于布局
|
|
|
setLayoutMessage(message);
|
|
setLayoutMessage(message);
|
|
|
}
|
|
}
|
|
@@ -805,8 +814,8 @@ export function useBlueprint(workflowName = null) {
|
|
|
if (node.x < minX) minX = node.x;
|
|
if (node.x < minX) minX = node.x;
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- // Get 变量节点放在左下方
|
|
|
|
|
- let varX = minX;
|
|
|
|
|
|
|
+ // Get 变量节点放在左下方(确保 X 坐标至少为 100)
|
|
|
|
|
+ let varX = Math.max(minX, 100);
|
|
|
let varY = maxY + 200;
|
|
let varY = maxY + 200;
|
|
|
const layoutedGetVarNodes = getVarNodes.map((node, index) => {
|
|
const layoutedGetVarNodes = getVarNodes.map((node, index) => {
|
|
|
const newNode = { ...node, x: varX, y: varY };
|
|
const newNode = { ...node, x: varX, y: varY };
|
|
@@ -833,7 +842,7 @@ export function useBlueprint(workflowName = null) {
|
|
|
|
|
|
|
|
const finalNodes = [...layoutedProcessNodes, ...layoutedGetVarNodes, ...layoutedSetVarNodes];
|
|
const finalNodes = [...layoutedProcessNodes, ...layoutedGetVarNodes, ...layoutedSetVarNodes];
|
|
|
|
|
|
|
|
- console.log('整理布局完成,节点数量:', finalNodes.length);
|
|
|
|
|
|
|
+ // console.log('整理布局完成,节点数量:', finalNodes.length);
|
|
|
|
|
|
|
|
setLayoutProgress(90);
|
|
setLayoutProgress(90);
|
|
|
setLayoutMessage('正在保存位置信息...');
|
|
setLayoutMessage('正在保存位置信息...');
|