|
|
|
@ -122,6 +122,7 @@ const renderSpecialNodeHandles = (isStartNode: boolean, isEndNode: boolean, data
|
|
|
|
|
|
|
|
|
|
|
|
// 获取连接到特定 API 句柄的 edges
|
|
|
|
// 获取连接到特定 API 句柄的 edges
|
|
|
|
const getConnectedEdgesForHandle = (edges: any[], nodeId: string, handleId: string, handleType: 'source' | 'target') => {
|
|
|
|
const getConnectedEdgesForHandle = (edges: any[], nodeId: string, handleId: string, handleType: 'source' | 'target') => {
|
|
|
|
|
|
|
|
if (nodeId === 'start' || nodeId === 'end') return false;
|
|
|
|
return edges.filter(edge => {
|
|
|
|
return edges.filter(edge => {
|
|
|
|
if (handleType === 'target') {
|
|
|
|
if (handleType === 'target') {
|
|
|
|
// 检查目标节点ID和目标句柄ID都匹配
|
|
|
|
// 检查目标节点ID和目标句柄ID都匹配
|
|
|
|
@ -137,7 +138,6 @@ const getConnectedEdgesForHandle = (edges: any[], nodeId: string, handleId: stri
|
|
|
|
// 根据 apiIns 中的 fieldIns/fieldOuts 获取对应的 dataIns/dataOuts
|
|
|
|
// 根据 apiIns 中的 fieldIns/fieldOuts 获取对应的 dataIns/dataOuts
|
|
|
|
const getDataFieldsForApi = (apiItem: any, dataFields: any[], type: string) => {
|
|
|
|
const getDataFieldsForApi = (apiItem: any, dataFields: any[], type: string) => {
|
|
|
|
if (!apiItem.fieldIns && !apiItem.fieldOuts) return [];
|
|
|
|
if (!apiItem.fieldIns && !apiItem.fieldOuts) return [];
|
|
|
|
|
|
|
|
|
|
|
|
const fieldNames = type === 'in' ? apiItem.fieldIns : apiItem.fieldOuts;
|
|
|
|
const fieldNames = type === 'in' ? apiItem.fieldIns : apiItem.fieldOuts;
|
|
|
|
return fieldNames
|
|
|
|
return fieldNames
|
|
|
|
.map((fieldName: string) => dataFields.find(df => df.name === fieldName || df.id === fieldName))
|
|
|
|
.map((fieldName: string) => dataFields.find(df => df.name === fieldName || df.id === fieldName))
|
|
|
|
@ -268,7 +268,7 @@ const NodeContent = ({ data }: { data: NodeContentData }) => {
|
|
|
|
const dataOuts = data.parameters?.dataOuts || [];
|
|
|
|
const dataOuts = data.parameters?.dataOuts || [];
|
|
|
|
const showFooter = formatFooter(data.component) || false;
|
|
|
|
const showFooter = formatFooter(data.component) || false;
|
|
|
|
const footerData = (showFooter && data.component) || {};
|
|
|
|
const footerData = (showFooter && data.component) || {};
|
|
|
|
const nodeId = data.id;
|
|
|
|
const nodeId = data.id || data.type; // 开始和结束节点没有id
|
|
|
|
|
|
|
|
|
|
|
|
// 判断节点类型
|
|
|
|
// 判断节点类型
|
|
|
|
const isStartNode = data.type === 'start';
|
|
|
|
const isStartNode = data.type === 'start';
|
|
|
|
@ -292,8 +292,14 @@ const NodeContent = ({ data }: { data: NodeContentData }) => {
|
|
|
|
const relatedDataOut = getDataFieldsForApi(apiIn, dataOuts, 'out');
|
|
|
|
const relatedDataOut = getDataFieldsForApi(apiIn, dataOuts, 'out');
|
|
|
|
connectedOuts.push(...relatedDataOut);
|
|
|
|
connectedOuts.push(...relatedDataOut);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
|
|
|
connectedIns.push(...dataIns);
|
|
|
|
|
|
|
|
connectedOuts.push(...dataOuts);
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
console.log('connectedIns, connectedOuts:', connectedIns, connectedOuts);
|
|
|
|
|
|
|
|
|
|
|
|
return { connectedIns, connectedOuts };
|
|
|
|
return { connectedIns, connectedOuts };
|
|
|
|
}, [edges, nodeId, apiIns, apiOuts, dataIns, dataOuts]);
|
|
|
|
}, [edges, nodeId, apiIns, apiOuts, dataIns, dataOuts]);
|
|
|
|
|
|
|
|
|
|
|
|
@ -356,7 +362,7 @@ const NodeContent = ({ data }: { data: NodeContentData }) => {
|
|
|
|
)}
|
|
|
|
)}
|
|
|
|
|
|
|
|
|
|
|
|
{/* Data 输出 */}
|
|
|
|
{/* Data 输出 */}
|
|
|
|
{connectedDataFields.connectedOuts.length > 0 && !isEndNode && (
|
|
|
|
{connectedDataFields.connectedOuts.length > 0 && (
|
|
|
|
<div className={styles['node-outputs']}>
|
|
|
|
<div className={styles['node-outputs']}>
|
|
|
|
{connectedDataFields.connectedOuts.map((output, index) => (
|
|
|
|
{connectedDataFields.connectedOuts.map((output, index) => (
|
|
|
|
<div key={output.id || `output-${index}`} className={styles['node-output-label']}>
|
|
|
|
<div key={output.id || `output-${index}`} className={styles['node-output-label']}>
|
|
|
|
|