本文档说明工作流编辑器导出的 JSON 数据结构,供后端开发人员解析、存储和执行工作流数据时参考。
| 值 | 说明 |
|---|---|
| basic | 基础节点 |
| logic | 逻辑节点 |
| database | 数据库节点 |
| transform | 转换节点 |
| tool | 工具节点 |
节点菜单用于定义前端可添加的节点列表,供前端渲染节点选择面板使用。
[
{ "label": "基础节点", "value": "basic" },
{ "label": "逻辑节点", "value": "logic" },
{ "label": "数据库节点", "value": "database" },
{ "label": "转换节点", "value": "transform" },
{ "label": "工具节点", "value": "tool" }
]
每个节点菜单项包含三部分:node(节点基础信息)、handle(连接点)、form(表单配置)。
{
"node": {
"type": "节点类型",
"data": {
"nodeMeta": {
"category": "节点分类",
"label": "节点显示名称",
"icon": "图标URL",
"iconColor": "图标背景色",
"showEditBtn": true,
"showRunBtn": true
}
}
},
"handle": [
{ "type": "source", "position": "right" },
{ "type": "target", "position": "left" }
],
"form": {
"fieldName": {
"label": "字段标签",
"type": "表单类型",
"showNodeLabel": true
}
}
}
| 字段 | 类型 | 说明 |
|---|---|---|
| type | string | 节点类型标识 |
| data.nodeMeta.category | string | 节点分类 |
| data.nodeMeta.label | string | 节点显示名称 |
| data.nodeMeta.icon | string | 图标 URL(建议使用 iconify 格式) |
| data.nodeMeta.iconColor | string | 图标背景色(十六进制) |
| data.nodeMeta.showEditBtn | boolean | 是否显示编辑按钮 |
| data.nodeMeta.showRunBtn | boolean | 是否显示运行按钮 |
| 字段 | 类型 | 说明 |
|---|---|---|
| type | string | 连接点类型:source(输出)/ target(输入) |
| position | string | 连接点位置:left / right / top / bottom |
| 字段 | 类型 | 说明 |
|---|---|---|
| label | string | 表单字段标签 |
| type | string | 表单类型,见「表单类型列表」 |
| showNodeLabel | boolean | 是否在节点上显示该字段标签 |
{
"node": {
"type": "http-request",
"data": {
"nodeMeta": {
"category": "tool",
"label": "HTTP请求",
"icon": "https://api.iconify.design/tabler/world-www.svg?color=white",
"iconColor": "#722ED1",
"showEditBtn": true,
"showRunBtn": true
}
}
},
"handle": [
{ "type": "target", "position": "left" },
{ "type": "source", "position": "right" }
],
"form": {
"api": {
"label": "请求配置",
"type": "api",
"showNodeLabel": false
},
"token": {
"label": "认证",
"type": "token",
"showNodeLabel": false
},
"body": {
"label": "请求体",
"type": "requestBody",
"showNodeLabel": false
},
"output": {
"label": "输出变量",
"type": "outputVar",
"showNodeLabel": true
}
}
}
{
"nodes": [], // 节点数组
"edges": [], // 边(连线)数组
"position": [0, 0], // 视口位置 [x, y]
"zoom": 1, // 缩放级别
"viewport": {
// 视口信息
"x": 0,
"y": 0,
"zoom": 1
}
}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | ✅ | 节点唯一标识 |
| type | string | ✅ | 节点类型,见「节点类型列表」 |
| position | object | ✅ | 节点位置 { x: number, y: number } |
| data | object | ✅ | 节点数据,包含 nodeMeta 和 formData |
| parentNode | string | ❌ | 父节点ID,用于嵌套节点(循环/迭代内的子节点) |
| deletable | boolean | ❌ | 是否可删除,默认 true |
| draggable | boolean | ❌ | 是否可拖动,默认 true |
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| label | string | ✅ | 节点显示名称 |
| icon | string | ✅ | 图标 URL |
| iconColor | string | ✅ | 图标背景色(十六进制) |
| category | string | ✅ | 节点分类:basic/logic/database/transform/tool |
| showEditBtn | boolean | ❌ | 是否显示编辑按钮 |
| showRunBtn | boolean | ❌ | 是否显示运行按钮 |
表单数据是一个对象,键的字段名是创建节点时传入的form中的字段名,值为字段配置:
{
"fieldName": {
"value": "实际的表单值",
"type": "表单类型",
"label": "字段标签(可选)"
}
}
{
"id": "start",
"type": "start",
"position": { "x": 250, "y": 50 },
"deletable": false,
"data": {
"nodeMeta": {
"label": "开始节点",
"icon": "https://api.iconify.design/tabler/circle-check.svg?color=white",
"iconColor": "#52C41A",
"category": "basic",
"showEditBtn": false,
"showRunBtn": false
},
"formData": {
"input": {
"type": "defineVar",
"label": "输入变量",
"value": [
{
"label": "userName",
"type": ["string"],
"required": true,
"desc": "用户名",
"defaultVal": ""
}
]
}
}
}
}
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| id | string | ✅ | 边唯一标识 |
| source | string | ✅ | 源节点 ID |
| target | string | ✅ | 目标节点 ID |
| type | string | ❌ | 边类型,默认 "base-edge" |
| sourceHandle | string | ❌ | 源节点连接点 ID |
| targetHandle | string | ❌ | 目标节点连接点 ID |
{
"id": "e-start-end",
"source": "start", // 源节点ID
"target": "end", // 目标节点ID
"type": "base-edge"
}
| 类型值 | 说明 |
|---|---|
| start | 开始节点 |
| end | 结束节点 |
| break | 跳出循环 |
| comment | 注释节点 |
| child_start | 子流程开始节点 |
| child_end | 子流程结束节点 |
| 类型值 | 说明 |
|---|---|
| ifelse | 条件分支 |
| iteration | 迭代 |
| loop | 循环 |
| code-execute | 代码执行 |
| 类型值 | 说明 |
|---|---|
| sql-execute | SQL 执行 |
| insert-data | 插入数据 |
| update-data | 更新数据 |
| query-data | 查询数据 |
| delete-data | 删除数据 |
| 类型值 | 说明 |
|---|---|
| template-transform | 模板转换 |
| document-extractor | 文档提取 |
| 类型值 | 说明 |
|---|---|
| http-request | HTTP 请求 |
| list-operation | 列表操作 |
| 类型值 | 说明 |
|---|---|
| defineVar | 定义变量 |
| declareVar | 声明变量 |
| selectVar | 选择变量 |
| selectOutput | 选择变量后输出 |
| outputVar | 输出变量 |
| inputTagVar | 输入标签变量 |
| selectType | 选择类型 |
| ifelse | 条件分支 |
| code | 代码 |
| token | 认证令牌 |
| requestBody | 请求体 |
| database | 数据库 |
| sort | 排序 |
每个表单组件除了基础的 label、type、showNodeLabel 外,还可以通过 disposition 字段传入特定的 props 参数。
无额外 props。
| Props 参数 | 类型 | 说明 |
|---|---|---|
| selectVarOptions | object | 变量选择器的配置,见 selectVar 的 Props |
示例:
{
"type": "declareVar",
"label": "变量声明",
"disposition": {
"selectVarOptions": {
"allowChildNodeVar": true
}
}
}
| Props 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| varTypes | VariableType[][] | 过滤的变量类型,过滤下拉框的选项 | - |
| allowChildNodeVar | boolean | 是否可以获取子节点导出的变量 | false |
示例:
{
"type": "selectVar",
"label": "选择变量",
"disposition": {
"varTypes": ["array", "object"], // 数组 对象类型
"allowChildNodeVar": true
}
}
| Props 参数 | 类型 | 说明 |
|---|---|---|
| selectVarOptions | object | 变量选择器的配置,见 selectVar 的 Props |
示例:
{
"type": "selectOutput",
"label": "输出变量",
"disposition": {
"selectVarOptions": {
"allowChildNodeVar": true
}
}
}
| Props 参数 | 类型 | 说明 |
|---|---|---|
| outputData | VariableModel[] | 输出数据数组 |
| Props 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| inputType | 'input'| 'textarea' | 模式:input 单行,textarea 多行 | 'input' |
| disabled | boolean | 是否禁用 | false |
| placeholder | string | 占位符 | - |
| varTypes | VariableType[][] | 过滤的变量类型(继承自 selectVar) | - |
| selectVarOptions | object | 变量选择器的配置,见 selectVar 的 Props |
示例:
{
"type": "inputTagVar",
"label": "变量标签输入",
"disposition": {
"inputType": "textarea",
"placeholder": "请输入内容,使用 {{变量}} 引用变量",
"allowChildNodeVar": true
}
}
无额外 props(用于选择变量类型的下拉框)。
| Props 参数 | 类型 | 说明 |
|---|---|---|
| selectVarOptions | object | 变量选择器的配置,见 selectVar 的 Props |
示例:
{
"type": "ifelse",
"label": "条件分支",
"disposition": {
"selectVarOptions": {
"allowChildNodeVar": true
}
}
}
| Props 参数 | 类型 | 说明 |
|---|---|---|
| monacoOptions | editor.IStandaloneEditorConstructionOptions | Monaco 编辑器配置选项 |
| languageOptions | Array<'javascript'| 'python' | 'jinja2' | 'sql'> | 可选择的编程语言列表 |
示例:
{
"type": "code",
"label": "代码",
"disposition": {
"languageOptions": ["javascript", "python"],
"monacoOptions": {
"theme": "vs-dark",
"minimap": { "enabled": false }
}
}
}
无额外 props。
无额外 props。
无额外 props。
无额外 props。
表单值的类型是固定为, 其中的label是可选的,label是根据创建节点时的form中的label来的:
{
"label": "输入变量",
"type": "defineVar",
"value": xxx
}
表单值的结构:
{
"type": "defineVar", // 表单的类型
"label": "输入变量",
"value": [
{
"label": "userName", // 变量名
"type": ["string"], // 变量类型
"required": true, // 是否必填
"desc": "用户名", // 描述
"defaultVal": "张三", // 默认值
"value": "", // 表单值
"isRef": false, // 当前值是否是引用的其他节点的变量
"children": [] // 子变量
}
]
}
表单值的结构:
{
"type": "selectVar",
"label": "选择变量",
"value": "start::input.userName"
}
值为变量路径字符串,格式:节点ID::字段名.变量名.子变量名
表单值的结构:
{
"type": "ifelse",
"label": "条件",
"value": {...}
}
值为条件组:
[
{
"logic": "and", // 且(and))/或(or))
"conditions": [
{
"variable": "start::input.age", // 引用的变量
"operator": "greater", //比较符
"value": "18", // 比较的值
"isRef": false // 比较的值是否是引用的变量
},
{
"variable": "start::input.status",
"operator": "equal",
"value": "active",
"isRef": false
}
]
}
]
条件操作符 (operator) 可选值:
| 操作符 | 说明 | 适用类型 |
|---|---|---|
| equal | 等于 | 所有类型 |
| not_equal | 不等于 | 所有类型 |
| greater | 大于 | number |
| greater_equal | 大于等于 | number |
| less | 小于 | number |
| less_equal | 小于等于 | number |
| between | 介于两值之间 | number |
| not_between | 不在两值之间 | number |
| contains | 包含 | string |
| not_contains | 不包含 | string |
| starts_with | 以...开头 | string |
| ends_with | 以...结尾 | string |
| matches_regex | 正则匹配 | string |
| not_matches_regex | 正则不匹配 | string |
| is_empty | 为空 | string, array, object |
| is_not_empty | 不为空 | string, array, object |
| is_null | 为 null | 所有类型 |
| is_not_null | 不为 null | 所有类型 |
| in | 在列表中 | string, number |
| not_in | 不在列表中 | string, number |
| array_contains | 数组包含某元素 | array |
| array_not_contains | 数组不包含某元素 | array |
| array_length_equal | 数组长度等于 | array |
| array_length_greater | 数组长度大于 | array |
| array_length_less | 数组长度小于 | array |
| is_true | 为真 | boolean |
| is_false | 为假 | boolean |
| date_equal | 日期相等 | time |
| date_before | 日期早于 | time |
| date_after | 日期晚于 | time |
| date_between | 日期介于 | time |
逻辑运算符 (logic) 可选值:
and - 并且or - 或者表单值的结构:
{
"type": "code",
"label": "代码",
"value": {...}
}
值包含输入变量和代码内容:
{
// 变量类型
"inputVar": [
{
"label": "userName",
"type": ["string"],
"required": true,
"desc": "用户名",
"defaultVal": "张三",
"value": "",
"isRef": false,
"children": []
}
],
"code": {
"language": "javascript", // 代码语言
"content": "return data.name.toUpperCase();" // 代码
}
}
支持的语言: javascript, python, jinja2, sql
表单值的结构:
{
"type": "token",
"label": "认证",
"value": {...}
}
值包含认证类型和认证数据:
{
"authType": "bearer_token", // 鉴权的类型
"authOpen": true, // 是否开启鉴权
"authData": {
"apiKey": "your-api-key",
"header": "Authorization" // 仅自定义类型时可见
}
}
authType 可选值:
bearer_token - Bearer Tokencustom - 自定义表单值的结构:
{
"type": "requestBody",
"label": "请求体",
"value": {...}
}
值包含请求体类型和数据:
{
"bodyType": "json",
"bodyData": {
"json": "{\"name\": \"张三\", \"age\": 25}"
}
}
bodyType 可选值:
none - 无json - JSONraw - 原始文本formData - Form DataxWwwFormUrlencoded - x-www-form-urlencodedbinary - 二进制表单值的结构:
{
"type": "database",
"label": "数据库",
"value": {...}
}
值包含数据库和数据表 ID:
{
"dbId": 1, // 数据库ID
"dbTableId": 10 // 数据表ID
}
表单值的结构:{
{
"type": "sort",
"label": "排序",
"value": [
{
"variable": "start::input.list",
"sort": "asc"
}
]
}
sort 可选值:
asc - 升序desc - 降序| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| label | string | ✅ | 变量名 |
| type | string[] | ✅ | 变量类型数组,支持嵌套如 ["array", "string"] |
| required | boolean | ✅ | 是否必填 |
| value | string | ❌ | 变量值 |
| isRef | boolean | ❌ | 是否引用的其他变量,如果为是则value的值就是这种格式的:“节点ID::字段名.变量名.子变量名“ |
| defaultVal | any | ❌ | 默认值 |
| desc | string | ❌ | 变量描述 |
| children | array | ❌ | 子变量(type 为 object或者array 时使用) |
| 类型值 | 说明 |
|---|---|
| string | 字符串 |
| number | 数字 |
| boolean | 布尔值 |
| time | 时间 |
| object | 对象 |
| array | 数组 |
| file | 文件 |
{
"label": "userList",
"type": ["array", "object"], // 数组对象类型
"required": true,
"desc": "用户列表",
"children": [
{
"label": "name",
"type": ["string"],
"required": true
},
{
"label": "age",
"type": ["number"],
"required": false
}
]
}
{
"nodes": [
{
"id": "start",
"type": "start",
"position": { "x": 250, "y": 50 },
"deletable": false,
"data": {
"nodeMeta": {
"label": "开始节点",
"icon": "https://api.iconify.design/tabler/circle-check.svg?color=white",
"iconColor": "#52C41A",
"category": "basic"
},
"formData": {
"input": {
"type": "defineVar",
"label": "输入变量",
"value": [
{
"label": "userId",
"type": ["number"],
"required": true,
"desc": "用户ID"
}
]
}
}
}
},
{
"id": "end",
"type": "end",
"position": { "x": 700, "y": 50 },
"deletable": false,
"data": {
"nodeMeta": {
"label": "结束节点",
"icon": "https://api.iconify.design/tabler/square-rounded-arrow-down.svg?color=white",
"iconColor": "#FA8C16",
"category": "basic"
},
"formData": {
"output": {
"type": "declareVar",
"label": "输出",
"value": [
{
"label": "result",
"type": ["string"],
"required": true,
"value": "start::input.userId",
"isRef": true
}
]
}
}
}
}
],
"edges": [
{
"id": "e-start-end",
"source": "start",
"target": "end",
"type": "base-edge"
}
],
"position": [0, 0],
"zoom": 1,
"viewport": { "x": 0, "y": 0, "zoom": 1 }
}
{
"nodes": [
{
"id": "start",
"type": "start",
"position": { "x": 100, "y": 150 },
"data": {
"nodeMeta": {
"label": "开始",
"icon": "https://api.iconify.design/tabler/circle-check.svg?color=white",
"iconColor": "#52C41A",
"category": "basic"
},
"formData": {
"input": {
"type": "defineVar",
"value": [
{
"label": "age",
"type": ["number"],
"required": true,
"desc": "年龄"
}
]
}
}
}
},
{
"id": "ifelse_1",
"type": "ifelse",
"position": { "x": 350, "y": 150 },
"data": {
"nodeMeta": {
"label": "条件分支",
"icon": "https://api.iconify.design/tabler/git-branch.svg?color=white",
"iconColor": "#1890FF",
"category": "logic"
},
"formData": {
"condition": {
"type": "ifelse",
"value": [
{
"logic": "and",
"conditions": [
{
"variable": "start::input.age",
"operator": "greater_equal",
"value": "18",
"isRef": false
}
]
}
]
}
}
}
},
{
"id": "end_adult",
"type": "end",
"position": { "x": 600, "y": 50 },
"data": {
"nodeMeta": {
"label": "成年人出口",
"iconColor": "#FA8C16",
"category": "basic"
},
"formData": {
"output": {
"type": "declareVar",
"value": [
{ "label": "message", "type": ["string"], "value": "成年人" }
]
}
}
}
},
{
"id": "end_minor",
"type": "end",
"position": { "x": 600, "y": 250 },
"data": {
"nodeMeta": {
"label": "未成年出口",
"iconColor": "#FA8C16",
"category": "basic"
},
"formData": {
"output": {
"type": "declareVar",
"value": [
{ "label": "message", "type": ["string"], "value": "未成年" }
]
}
}
}
}
],
"edges": [
{ "id": "e1", "source": "start", "target": "ifelse_1" },
{
"id": "e2",
"source": "ifelse_1",
"target": "end_adult",
"sourceHandle": "if"
},
{
"id": "e3",
"source": "ifelse_1",
"target": "end_minor",
"sourceHandle": "else"
}
]
}
{
"nodes": [
{
"id": "start",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": {
"nodeMeta": {
"label": "开始",
"iconColor": "#52C41A",
"category": "basic"
},
"formData": {
"input": {
"type": "defineVar",
"value": [
{ "label": "apiUrl", "type": ["string"], "required": true },
{ "label": "requestData", "type": ["object"], "required": true }
]
}
}
}
},
{
"id": "http_1",
"type": "http-request",
"position": { "x": 350, "y": 100 },
"data": {
"nodeMeta": {
"label": "发送请求",
"iconColor": "#722ED1",
"category": "tool"
},
"formData": {
"api": {
"type": "api",
"value": {
"method": "POST",
"url": "start::input.apiUrl"
}
},
"token": {
"type": "token",
"value": {
"authType": "bearer_token",
"authOpen": true,
"authData": {
"apiKey": "your-token",
"header": "Authorization"
}
}
},
"body": {
"type": "requestBody",
"value": {
"bodyType": "json",
"bodyData": {
"json": "{\"data\": \"{{start::input.requestData}}\"}"
}
}
}
}
}
},
{
"id": "end",
"type": "end",
"position": { "x": 600, "y": 100 },
"data": {
"nodeMeta": {
"label": "结束",
"iconColor": "#FA8C16",
"category": "basic"
},
"formData": {
"output": {
"type": "declareVar",
"value": [
{
"label": "response",
"type": ["object"],
"value": "http_1::output.response",
"isRef": true
}
]
}
}
}
}
],
"edges": [
{ "id": "e1", "source": "start", "target": "http_1" },
{ "id": "e2", "source": "http_1", "target": "end" }
]
}
{
"nodes": [
{
"id": "start",
"type": "start",
"position": { "x": 100, "y": 150 },
"data": {
"nodeMeta": {
"label": "开始",
"iconColor": "#52C41A",
"category": "basic"
},
"formData": {
"input": {
"type": "defineVar",
"value": [
{
"label": "userList",
"type": ["array", "object"],
"required": true,
"children": [
{ "label": "id", "type": ["number"] },
{ "label": "name", "type": ["string"] }
]
}
]
}
}
}
},
{
"id": "loop_1",
"type": "loop",
"position": { "x": 350, "y": 100 },
"data": {
"nodeMeta": {
"label": "遍历用户",
"iconColor": "#13C2C2",
"category": "logic"
},
"formData": {
"iterateVar": {
"type": "declareVar",
"value": {
"label": "userList",
"type": ["array", "object"],
"value": "start::input.userList",
"isRef": true
}
}
}
}
},
{
"id": "loop_1-child-start-node",
"type": "child_start",
"position": { "x": 20, "y": 55 },
"parentNode": "loop_1",
"draggable": false,
"deletable": false,
"data": {
"nodeMeta": {
"label": "迭代",
"category": "basic"
},
"formData": {
"loop_1-child-start-node": {
"type": "defineVar",
"value": [
{ "label": "item", "type": ["object"] },
{ "label": "index", "type": ["number"] }
]
}
}
}
},
{
"id": "end",
"type": "end",
"position": { "x": 700, "y": 150 },
"data": {
"nodeMeta": {
"label": "结束",
"iconColor": "#FA8C16",
"category": "basic"
}
}
}
],
"edges": [
{ "id": "e1", "source": "start", "target": "loop_1" },
{ "id": "e2", "source": "loop_1", "target": "end" }
]
}
完整示例
{
"nodes": [
{
"id": "start",
"type": "start",
"initialized": false,
"position": {
"x": 0,
"y": 24.5
},
"data": {
"nodeMeta": {
"label": "开始节点",
"icon": "https://api.iconify.design/tabler/circle-check.svg?color=white",
"iconColor": "#52C41A",
"category": "basic",
"showEditBtn": false,
"showRunBtn": false
},
"formData": {
"input": {
"value": [
{
"label": "userId",
"type": [
"number"
],
"required": true,
"desc": "用户ID",
"defaultVal": 1001,
"value": "",
"isRef": false,
"children": [],
"_id": "mkw0kmjt-6d1ny361v57392y"
},
{
"label": "userName",
"type": [
"string"
],
"required": true,
"desc": "用户名",
"defaultVal": "张三",
"value": "",
"isRef": false,
"children": [],
"_id": "mkw2nqte-2un14135a51l1p"
},
{
"label": "userList",
"type": [
"array",
"object"
],
"required": true,
"desc": "用户列表",
"defaultVal": null,
"value": "",
"isRef": false,
"children": [
{
"label": "id",
"type": [
"number"
],
"required": true
},
{
"label": "name",
"type": [
"string"
],
"required": true
},
{
"label": "age",
"type": [
"number"
],
"required": false
}
]
}
],
"type": "defineVar",
"label": "输入变量"
}
}
},
"deletable": false,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "end",
"type": "end",
"initialized": false,
"position": {
"x": 3296.532495563284,
"y": -45.14859031424661
},
"data": {
"nodeMeta": {
"label": "结束节点",
"icon": "https://api.iconify.design/tabler/square-rounded-arrow-down.svg?color=white",
"iconColor": "#FA8C16",
"category": "basic",
"showEditBtn": false,
"showRunBtn": false
},
"formData": {
"output": {
"value": [
{
"label": "success",
"type": [
"boolean"
],
"required": true,
"value": "true",
"isRef": false
},
{
"label": "report",
"type": [
"string"
],
"required": true,
"value": "template_1::output.report",
"isRef": true
},
{
"label": "sortedOrders",
"type": [
"array",
"object"
],
"required": true,
"value": "n_mkw0jnaj-635k14z2h1j443::output.orderList",
"isRef": true
}
],
"type": "declareVar",
"label": "输出"
}
}
},
"deletable": false,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "n_mkvzyfv9-5x34711p443kx6y",
"type": "http-request",
"initialized": false,
"position": {
"x": 370,
"y": 24.5
},
"data": {
"nodeMeta": {
"category": "tool",
"label": "HTTP请求-获取用户详情",
"icon": "https://api.iconify.design/tabler/world.svg?color=white",
"iconColor": "#1890FF",
"showEditBtn": true,
"showRunBtn": true
},
"formData": {
"requestMethod": {
"value": "GET",
"type": "select",
"label": "请求方法"
},
"requestApi": {
"value": "https://api.example.com/users/{{start::input.userId}}\n",
"type": "inputTagVar",
"label": "请求路径"
},
"requestParams": {
"value": [],
"type": "declareVar",
"label": "请求参数"
},
"requestHeaders": {
"value": [],
"type": "declareVar",
"label": "请求头"
},
"token": {
"value": {
"authOpen": true,
"authType": "bearer_token",
"authData": {
"apiKey": "api-key-dwdwaaaa",
"header": ""
}
},
"type": "token",
"label": "鉴权"
},
"requestBody": {
"value": {
"bodyType": "none",
"bodyData": {}
},
"type": "requestBody",
"label": "请求体"
},
"requestTimeout": {
"value": 120,
"type": "number",
"label": "超时时间(秒)"
},
"retryCount": {
"value": 3,
"type": "number",
"label": "重试次数"
},
"output": {
"value": [
{
"label": "statusCode",
"type": [
"number"
],
"desc": "状态码",
"isRef": false,
"_id": "mkw08ny4-3k6c3ra3x4s46w"
},
{
"label": "headers",
"type": [
"string"
],
"desc": "响应头",
"isRef": false
},
{
"label": "body",
"type": [
"string"
],
"desc": "响应体",
"isRef": false,
"_id": "mkw0afak-675vd652g2r622x"
}
],
"type": "outputVar",
"label": "响应结果"
}
}
},
"zIndex": 0,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "n_mkw08g7h-4l2x2w3k72k1736",
"type": "ifelse",
"initialized": false,
"position": {
"x": 1110,
"y": 0
},
"data": {
"nodeMeta": {
"category": "logic",
"label": "条件分支",
"icon": "https://api.iconify.design/tabler/git-branch.svg?color=white",
"iconColor": "#1890FF",
"showEditBtn": true,
"showRunBtn": true
},
"formData": {
"ifelse": {
"value": [
{
"conditions": [
{
"operator": "equal",
"value": "0",
"variable": "n_mkvzyfv9-5x34711p443kx6y::output.statusCode",
"isRef": false
},
{
"operator": "greater_equal",
"value": "18",
"variable": "n_mkw0b7xq-6r234k155867484l::output.userAge",
"isRef": false
}
],
"logic": "and",
"_id": "item-1769483756014-0.6851916864427338"
}
],
"type": "ifelse",
"label": "条件分支"
}
}
},
"zIndex": 0,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "n_mkw0b7xq-6r234k155867484l",
"type": "code-execute",
"initialized": false,
"position": {
"x": 740,
"y": 24.5
},
"data": {
"nodeMeta": {
"category": "logic",
"label": "请求结果提取",
"icon": "https://api.iconify.design/tabler/code.svg?color=white",
"iconColor": "#722ED1",
"showEditBtn": true,
"showRunBtn": true
},
"formData": {
"code": {
"value": {
"code": {
"language": "javascript",
"content": "function main({httpRes}) {\n return {\n userAge: JSON.parse(httpRes).age\n }\n}"
},
"inputVar": [
{
"label": "httpRes",
"required": false,
"value": "n_mkvzyfv9-5x34711p443kx6y::output.body",
"type": [
"string"
],
"desc": "",
"defaultVal": null,
"children": [],
"isRef": true
}
]
},
"type": "code",
"label": "代码"
},
"output": {
"value": [
{
"label": "userAge",
"required": false,
"type": [
"number"
],
"desc": "",
"children": [],
"_id": "mkw0cxxp-27b3u1o1j1v106v"
}
],
"type": "defineVar",
"label": "输出变量"
}
}
},
"zIndex": 0,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "n_mkw0jnaj-635k14z2h1j443",
"type": "query-data",
"initialized": false,
"position": {
"x": 1480,
"y": 24.5
},
"data": {
"nodeMeta": {
"category": "database",
"label": "查询数据",
"icon": "https://api.iconify.design/tabler/search.svg?color=white",
"iconColor": "#1890FF",
"showEditBtn": true,
"showRunBtn": true
},
"formData": {
"dbLabel": {
"value": {
"dbTableId": 3,
"dbId": 2
},
"type": "database",
"label": "数据表"
},
"queryField": {
"value": "n_mkw0jnaj-635k14z2h1j443::injected.field1",
"type": "selectVar",
"label": "查询字段"
},
"ifelse": {
"value": [
{
"conditions": [
{
"operator": "equal",
"value": "start::input.userId",
"variable": "n_mkw0jnaj-635k14z2h1j443::injected.field1",
"isRef": true
}
],
"logic": "or",
"_id": "item-1769483109616-0.7693237549834577"
}
],
"type": "ifelse",
"label": "查询条件"
},
"sort": {
"value": [
{
"variable": "n_mkw0jnaj-635k14z2h1j443::injected.field1",
"sort": "asc"
}
],
"type": "sort",
"label": "排序"
},
"queryLimit": {
"value": 100,
"type": "number",
"label": "查询上限"
},
"output": {
"value": [
{
"label": "orderList",
"required": true,
"type": [
"array",
"object"
],
"desc": "",
"children": [],
"_isExpanded": false,
"_id": "mkw15c3o-512o714f6m2x524o"
}
],
"type": "defineVar",
"label": "输出"
}
}
},
"zIndex": 0,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "n_mkw25bhd-4a2x2k4u3s42ed",
"type": "code-execute",
"initialized": false,
"position": {
"x": 1850,
"y": 24.5
},
"data": {
"nodeMeta": {
"category": "logic",
"label": "代码执行-计算总价",
"icon": "https://api.iconify.design/tabler/code.svg?color=white",
"iconColor": "#722ED1",
"showEditBtn": true,
"showRunBtn": true
},
"formData": {
"code": {
"value": {
"code": {
"language": "javascript",
"content": "function main({orderList}) {\n // 计算订单总价\n const total = orderList.items.reduce((sum, item) => {\n return sum + item.price * item.quantity\n }, 0)\n\n return { calculation: { total, discount: total * 0.1 } }\n}"
},
"inputVar": [
{
"label": "orderList",
"required": false,
"value": "n_mkw0jnaj-635k14z2h1j443::output.orderList",
"type": [
"array",
"object"
],
"desc": "",
"defaultVal": null,
"children": [],
"isRef": true
}
]
},
"type": "code",
"label": "代码"
},
"output": {
"value": [
{
"label": "calculation",
"required": false,
"type": [
"array",
"object"
],
"desc": "",
"children": [
{
"label": "total",
"required": false,
"type": [
"number"
],
"desc": "",
"children": [],
"_id": "mkw29459-u3s586lc684043"
},
{
"label": "discount",
"required": false,
"type": [
"number"
],
"desc": "",
"children": []
}
],
"_id": "mkw2oly2-5c2f213d1v93d1t"
}
],
"type": "defineVar",
"label": "输出变量"
}
}
},
"extent": {
"range": "parent",
"padding": [
55,
20,
20
]
},
"zIndex": 0,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "n_mkw26i1v-4d421nvg3s126y",
"type": "update-data",
"initialized": false,
"position": {
"x": 2220,
"y": 24.5
},
"data": {
"nodeMeta": {
"category": "database",
"label": "更新数据",
"icon": "https://api.iconify.design/tabler/edit.svg?color=white",
"iconColor": "#1890FF",
"showEditBtn": true,
"showRunBtn": true
},
"formData": {
"dbLabel": {
"value": {
"dbTableId": 3,
"dbId": 2
},
"type": "database",
"label": "数据表"
},
"ifelse": {
"value": [
{
"conditions": [
{
"operator": "equal",
"value": "start::input.userId",
"variable": "n_mkw26i1v-4d421nvg3s126y::injected.field1",
"isRef": true
}
],
"logic": "or",
"_id": "item-1769485843409-0.9807798298960236"
}
],
"type": "ifelse",
"label": "更新条件"
},
"setField": {
"value": [
{
"label": "field2",
"required": false,
"value": "n_mkw25bhd-4a2x2k4u3s42ed::output.calculation.total",
"type": [
"number"
],
"desc": "",
"defaultVal": null,
"children": [],
"isRef": true
}
],
"type": "declareVar",
"label": "设置字段"
},
"output": {
"value": [],
"type": "defineVar",
"label": "输出"
}
}
},
"zIndex": 0,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "n_mkw2alma-276u484o2j2yy4z",
"type": "http-request",
"initialized": false,
"position": {
"x": 2590,
"y": 24.5
},
"data": {
"nodeMeta": {
"category": "tool",
"label": "HTTP请求-发送通知",
"icon": "https://api.iconify.design/tabler/world.svg?color=white",
"iconColor": "#1890FF",
"showEditBtn": true,
"showRunBtn": true
},
"formData": {
"requestMethod": {
"value": "POST",
"type": "select",
"label": "请求方法"
},
"requestApi": {
"value": "https://api.example.com/notify",
"type": "inputTagVar",
"label": "请求路径"
},
"requestParams": {
"value": [],
"type": "declareVar",
"label": "请求参数"
},
"requestHeaders": {
"value": [],
"type": "declareVar",
"label": "请求头"
},
"token": {
"value": {
"authOpen": true,
"authType": "custom",
"authData": {
"apiKey": "custom-token",
"header": "X-API-Key"
}
},
"type": "token",
"label": "鉴权"
},
"requestBody": {
"value": {
"bodyType": "json",
"bodyData": {
"json": "{ \"userId\":\" {{start::input.userId}}\", \"message\": \"你好,{{start::input.userName}}\"}"
}
},
"type": "requestBody",
"label": "请求体"
},
"requestTimeout": {
"value": 120,
"type": "number",
"label": "超时时间(秒)"
},
"retryCount": {
"value": 3,
"type": "number",
"label": "重试次数"
},
"output": {
"value": [
{
"label": "statusCode",
"type": [
"number"
],
"desc": "状态码",
"isRef": false
},
{
"label": "headers",
"type": [
"string"
],
"desc": "响应头",
"isRef": false
},
{
"label": "body",
"type": [
"string"
],
"desc": "响应体",
"isRef": false
}
],
"type": "outputVar",
"label": "响应结果"
}
}
},
"zIndex": 0,
"targetPosition": "left",
"sourcePosition": "right"
},
{
"id": "n_mkw2m3r6-15f5c4p19391p54",
"type": "template-transform",
"initialized": false,
"position": {
"x": 2938.2913484734813,
"y": -55.09838893056755
},
"data": {
"nodeMeta": {
"category": "transform",
"label": "模板转换-生成报告",
"icon": "https://api.iconify.design/tabler/transform.svg?color=white",
"iconColor": "#FA8C16",
"showEditBtn": true,
"showRunBtn": true
},
"formData": {
"code": {
"value": {
"code": {
"language": "jinja2",
"content": "{% macro main(userName, total) %}\n尊敬的 {{ userName }}:\\n\\n您的订单统计如下: 总金额:{{ total }}\\n\\n感谢您的支持!\n{% endmacro %}"
},
"inputVar": [
{
"label": "userName",
"required": false,
"value": "start::input.userName",
"type": [
"string"
],
"desc": "",
"defaultVal": null,
"children": [],
"isRef": true
},
{
"label": "total",
"required": false,
"value": "n_mkw25bhd-4a2x2k4u3s42ed::output.calculation.total",
"type": [
"number"
],
"desc": "",
"defaultVal": null,
"children": [],
"isRef": true
}
]
},
"type": "code",
"label": "代码"
},
"output": {
"value": [
{
"label": "output",
"type": [
"string"
],
"desc": "转换结果",
"isRef": false
}
],
"type": "outputVar",
"label": "输出变量"
}
}
},
"zIndex": 0,
"targetPosition": "left",
"sourcePosition": "right"
}
],
"edges": [
{
"id": "vueflow__edge-start-n_mkvzyfv9-5x34711p443kx6y",
"type": "base-edge",
"source": "start",
"target": "n_mkvzyfv9-5x34711p443kx6y",
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 322.5,
"sourceY": 79.5,
"targetX": 367.5,
"targetY": 79.5,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
},
{
"id": "vueflow__edge-n_mkvzyfv9-5x34711p443kx6y-n_mkw0b7xq-6r234k155867484l",
"type": "base-edge",
"source": "n_mkvzyfv9-5x34711p443kx6y",
"target": "n_mkw0b7xq-6r234k155867484l",
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 692.5,
"sourceY": 79.5,
"targetX": 737.5,
"targetY": 79.5,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
},
{
"id": "vueflow__edge-n_mkw0b7xq-6r234k155867484l-n_mkw08g7h-4l2x2w3k72k1736",
"type": "base-edge",
"source": "n_mkw0b7xq-6r234k155867484l",
"target": "n_mkw08g7h-4l2x2w3k72k1736",
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 1062.5,
"sourceY": 79.5,
"targetX": 1107.5,
"targetY": 79.5,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
},
{
"id": "vueflow__edge-n_mkw08g7h-4l2x2w3k72k1736condition-0-n_mkw0jnaj-635k14z2h1j443",
"type": "base-edge",
"source": "n_mkw08g7h-4l2x2w3k72k1736",
"target": "n_mkw0jnaj-635k14z2h1j443",
"sourceHandle": "condition-0",
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 1432.5,
"sourceY": 74.5,
"targetX": 1477.5,
"targetY": 79.5,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
},
{
"id": "vueflow__edge-n_mkw0jnaj-635k14z2h1j443-n_mkw25bhd-4a2x2k4u3s42ed",
"type": "base-edge",
"source": "n_mkw0jnaj-635k14z2h1j443",
"target": "n_mkw25bhd-4a2x2k4u3s42ed",
"sourceHandle": null,
"targetHandle": null,
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 1802.5,
"sourceY": 79.5,
"targetX": 1847.5,
"targetY": 79.5,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
},
{
"id": "vueflow__edge-n_mkw25bhd-4a2x2k4u3s42ed-n_mkw26i1v-4d421nvg3s126y",
"type": "base-edge",
"source": "n_mkw25bhd-4a2x2k4u3s42ed",
"target": "n_mkw26i1v-4d421nvg3s126y",
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 2172.5,
"sourceY": 79.5,
"targetX": 2217.5,
"targetY": 79.5,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
},
{
"id": "vueflow__edge-n_mkw26i1v-4d421nvg3s126y-n_mkw2alma-276u484o2j2yy4z",
"type": "base-edge",
"source": "n_mkw26i1v-4d421nvg3s126y",
"target": "n_mkw2alma-276u484o2j2yy4z",
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 2542.5,
"sourceY": 79.5,
"targetX": 2587.5,
"targetY": 79.5,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
},
{
"id": "vueflow__edge-n_mkw2alma-276u484o2j2yy4z-n_mkw2m3r6-15f5c4p19391p54",
"type": "base-edge",
"source": "n_mkw2alma-276u484o2j2yy4z",
"target": "n_mkw2m3r6-15f5c4p19391p54",
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 2912.5,
"sourceY": 79.5,
"targetX": 2935.7913484734813,
"targetY": -0.09838893056755182,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
},
{
"id": "vueflow__edge-n_mkw2m3r6-15f5c4p19391p54-end",
"type": "base-edge",
"source": "n_mkw2m3r6-15f5c4p19391p54",
"target": "end",
"sourceHandle": null,
"targetHandle": null,
"data": {},
"label": "",
"zIndex": 0,
"sourceX": 3260.7913484734813,
"sourceY": -0.09838893056755182,
"targetX": 3294.032495563284,
"targetY": 9.851409685753389,
"animated": false,
"style": {
"stroke": "",
"strokeWidth": ""
}
}
],
"position": [
-1428.4298232803233,
645.310789176316
],
"zoom": 0.6906716468595293,
"viewport": {
"x": -1428.4298232803233,
"y": 645.310789176316,
"zoom": 0.6906716468595293
}
}