import React from 'react'; import styles from '@/pages/flowEditor/node/style/base.module.less'; import { Handle, Position, useStore } from '@xyflow/react'; import { Divider } from '@arco-design/web-react'; interface NodeContentData { parameters?: { inputs?: any[]; outputs?: any[]; }; showFooter?: boolean; type?: string; [key: string]: any; } // 渲染特殊节点(开始/结束节点)的句柄 const renderSpecialNodeHandles = (isStartNode: boolean, isEndNode: boolean, inputs: any[], outputs: any[]) => { return ( <> {/* 为特殊节点的参数也添加句柄 */} {isStartNode && outputs.map((_, index) => ( ))} {isEndNode && inputs.map((_, index) => ( ))} ); }; // 渲染普通节点的句柄 const renderRegularNodeHandles = (inputs: any[], outputs: any[]) => { return ( <> {/* 输入参数连接端点 */} {inputs.map((_, index) => ( ))} {/* 输出参数连接端点 */} {outputs.map((_, index) => ( ))} ); }; const NodeContent = ({ data }: { data: NodeContentData }) => { const inputs = data.parameters?.inputs || []; const outputs = data.parameters?.outputs || []; const showFooter = data.showFooter || false; // 判断节点类型 const isStartNode = data.type === 'start'; const isEndNode = data.type === 'end'; const isSpecialNode = isStartNode || isEndNode; return ( <> {/*content栏*/}
{inputs.length > 0 && !isStartNode && (
{inputs.map((input, index) => (
{input.name || `输入${index + 1}`}
))}
)} {outputs.length > 0 && !isEndNode && (
{outputs.map((output, index) => (
{output.name || `输出${index + 1}`}
))}
)}
{/*footer栏*/} {showFooter && (
暂定的footer
)} {/* 根据节点类型渲染不同的句柄 */} {isSpecialNode ? renderSpecialNodeHandles(isStartNode, isEndNode, inputs, outputs) : renderRegularNodeHandles(inputs, outputs)} ); }; export default NodeContent;