|
|
# 新增 Flow 节点模板(基于当前重构版本)
|
|
|
|
|
|
这份模板按你现在的代码结构整理,目标是:**新增节点只改最少文件**。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 1. 最小接入步骤
|
|
|
|
|
|
新增一个普通节点(非 LOOP)通常只要 3 步:
|
|
|
|
|
|
1. 新建节点组件(可先复用 `LocalNode` 风格)
|
|
|
2. 在 `nodeRegistry` 注册类型映射
|
|
|
3. 在节点配置源(`localNodeData`)增加定义
|
|
|
|
|
|
> `useFlowCallbacks` 已统一走 `resolveNodeDefinition + buildRuntimeNode + ensureNodeTypeRegistered`,不需要再在多个入口手写创建逻辑。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 2. 模板代码
|
|
|
|
|
|
### 2.1 新建节点组件
|
|
|
|
|
|
**路径示例**:`src/components/FlowEditor/node/httpNode/HttpNode.tsx`
|
|
|
|
|
|
```tsx
|
|
|
import React from 'react';
|
|
|
import LocalNode from '@/components/FlowEditor/node/localNode/LocalNode';
|
|
|
|
|
|
const HttpNode = (props: any) => {
|
|
|
// 第一版可以直接复用 LocalNode 渲染行为
|
|
|
return <LocalNode {...props} />;
|
|
|
};
|
|
|
|
|
|
export default HttpNode;
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
### 2.2 注册节点类型映射(关键)
|
|
|
|
|
|
**文件**:`src/utils/flow/nodeRegistry.ts`
|
|
|
|
|
|
```ts
|
|
|
import HttpNode from '@/components/FlowEditor/node/httpNode/HttpNode';
|
|
|
|
|
|
export const resolveNodeComponent = (nodeType: string) => {
|
|
|
switch (nodeType) {
|
|
|
// ...已有 case
|
|
|
case 'HTTP':
|
|
|
return HttpNode;
|
|
|
default:
|
|
|
return LocalNode;
|
|
|
}
|
|
|
};
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
### 2.3 增加节点定义(用于菜单与创建)
|
|
|
|
|
|
**文件**:`src/pages/flowEditor/sideBar/config/localNodeData.ts`
|
|
|
|
|
|
```ts
|
|
|
export const localNodeData = [
|
|
|
// ...已有节点
|
|
|
{
|
|
|
nodeType: 'HTTP',
|
|
|
nodeName: 'HTTP请求',
|
|
|
data: {
|
|
|
title: 'HTTP请求',
|
|
|
type: 'HTTP',
|
|
|
parameters: {
|
|
|
apiIns: [{ name: 'start', desc: '', dataType: '', defaultValue: '' }],
|
|
|
apiOuts: [{ name: 'done', desc: '', dataType: '', defaultValue: '' }],
|
|
|
dataIns: [],
|
|
|
dataOuts: [],
|
|
|
},
|
|
|
component: {
|
|
|
type: 'HTTP',
|
|
|
customDef: '{}',
|
|
|
},
|
|
|
},
|
|
|
},
|
|
|
];
|
|
|
```
|
|
|
|
|
|
---
|
|
|
|
|
|
## 3. 可选:节点专用编辑器
|
|
|
|
|
|
如果你希望配置面板是独立 UI,再补:
|
|
|
|
|
|
1. 新建编辑器组件(`src/components/FlowEditor/nodeEditors/...`)
|
|
|
2. 在编辑器路由/映射处按 `nodeType` 挂载
|
|
|
|
|
|
不做这一步也能先跑通新增节点。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 4. 当前推荐的接入方式
|
|
|
|
|
|
新增节点时不要再手写分散逻辑,优先复用:
|
|
|
|
|
|
- `resolveNodeDefinition(...)`
|
|
|
- `buildRuntimeNode(...)`
|
|
|
- `ensureNodeTypeRegistered(...)`
|
|
|
|
|
|
这些已覆盖:
|
|
|
|
|
|
- 侧栏拖拽到画布(onDrop)
|
|
|
- 画布空白处添加(addNodeOnPane)
|
|
|
- 在边上插入节点(addNodeOnEdge)
|
|
|
|