| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340 |
- import type { XYPosition } from '@repo/workflow'
- import type { FormItemRule } from 'element-plus'
- import type { VNode } from 'vue'
- /**
- * 渲染回调参数
- */
- export interface RenderCallbackParams {
- [key: string]: any
- }
- /**
- * 表单项配置模型
- */
- export interface ConfigSchema {
- // 其他未明确指定的属性
- [fieldName: string]: any
- /**
- * 子节点列表,可选
- */
- children?: ConfigSchema[]
- /**
- * 表单控件属性,可选
- * @example { type: 'input', options: [{ label: '用户名', value: 'username' }] }
- */
- componentProps?: any
- /**
- * 节点字段path,可选 获取参考lodash get方法
- * @example 'data.username'
- */
- field?: string
- // 是否为表单输入组件,可选
- input?: boolean
- // 节点标签,可选
- label?: string
- /**
- * 标签配置
- */
- labelConfig?: {
- /**
- * 宽度,可选
- */
- width?: number
- /**
- * 是否显示,可选
- */
- show?: boolean
- /**
- * 位置,可选
- */
- position?: 'top' | 'left'
- /**
- * 配置提示
- */
- tooltip?: string
- }
- // 是否无需表单项,可选
- noFormItem?: boolean
- // 事件绑定
- // 表单验证规则,可选
- rules?: FormItemRule[]
- // 是否显示(属性编辑组件可以添加函数动态显示隐藏),可选
- show?: ((renderCallbackParams: RenderCallbackParams) => boolean) | boolean
- // 插槽名称(组件为插槽类型时,需要设置插槽name),可选
- slotName?: string
- // 插槽列表,可选
- slots?: { [slotName: string]: ConfigSchema[] }
- /**
- * 节点类型,必选
- * @example 'text' | 'textarea' | 'select' | 'checkbox' | 'radio' | 'switch' | 'date' | 'time' | 'datetime' | 'color' | 'file' | 'image' | 'video' | 'audio' | 'range' | 'number' | 'password' | 'hidden' | 'button' | 'reset' | 'submit' | 'html' | 'custom'
- */
- valueType: string
- // 渲染表单项
- render?: (renderCallbackParams: RenderCallbackParams) => Element
- // 渲染组件
- renderItem?: (renderCallbackParams: RenderCallbackParams) => Element
- }
- type EndpointType = string | { type: string; label: string }
- export interface INodeType {
- /**
- * 版本信息
- */
- version: string[]
- /**
- * 所属分组
- */
- group?: string
- /**
- * 展示名称
- */
- displayName: string
- /**
- * 名称
- */
- name: string
- /**
- * 副标题 带格式化信息
- */
- subtitle?: string
- /**
- * 描述
- */
- description?: string
- /**
- * 节点图标 默认使用iconify图标名称
- * @example 'mdi:home'
- * 参考 https://icon-sets.iconify.design/
- */
- icon?: string
- /**
- * 图标颜色
- */
- iconColor?: string
- /**
- * 输入端口列表
- */
- inputs: EndpointType[] | ((params: any) => EndpointType[])
- /**
- * 输出端口列表
- */
- outputs: EndpointType[] | ((params: any) => EndpointType[])
- /**
- * 输出端口名称
- */
- schema: {
- // 流程id
- appAgentId?: string
- // 父级节点Id
- parentId?: string
- // 节点位置
- position: XYPosition
- // 节点宽度
- width: number
- // 节点高度
- height: number
- // 当前是否选中
- selected: boolean
- // 节点类型
- nodeType: string
- // 节点层级
- zIndex: number
- // 节点业务数据 存储配置等
- data: Record<string, any>
- }
- /**
- * 表单配置
- */
- formConfig?: ConfigSchema[]
- /**
- * 节点自定义渲染
- */
- render?: (renderCallbackParams: RenderCallbackParams) => Element | VNode
- /**
- * 配置校验
- */
- validate?: (data: any) => boolean | string | Promise<boolean | string>
- // 其他配置
- [key: string]: any
- }
- /**
- * 节点连接类型
- */
- export const NodeConnectionTypes = {
- main: 'main'
- }
- /**
- * 节点变量类型
- */
- type NodeVariableType =
- | 'string'
- | 'number'
- | 'boolean'
- | 'object'
- | 'array[string]'
- | 'array[number]'
- | 'array[boolean]'
- | 'array[object]'
- /**
- * 节点变量值类型
- */
- type NodeVariableValueType = 'constant' | 'variable'
- /**
- * 节点变量
- */
- interface NodeVariable {
- name: string
- describe: string
- type: NodeVariableType
- value: any
- value_type?: NodeVariableValueType
- }
- /**
- * 节点重试配置
- */
- interface NodeRetryConfig {
- retry_enabled: boolean
- max_retries: number
- retry_interval: number // milliseconds
- }
- /**
- * 节点错误处理策略
- */
- type NodeErrorStrategy = 'none' | 'default-value' | 'fail-branch'
- /**
- * 节点类型
- */
- type NodeType =
- | 'http-request'
- | 'code'
- | 'if-else'
- | 'iteration'
- | 'iteration-start'
- | 'list-operator'
- | 'loop'
- | 'loop-start'
- | 'end'
- | string
- /**
- * 节点公共配置信息
- */
- export interface INodeDataBaseSchema {
- /**
- * 节点类型
- */
- type: NodeType
- /**
- * 标题
- */
- title: string
- /**
- * 是否在迭代中
- */
- isInIteration: boolean
- /**
- * 迭代id
- */
- iteration_id: string
- /**
- * 是否在循环中
- */
- isInLoop: boolean
- /**
- * 循环id
- */
- loop_id: string
- /**
- * 输入变量列表
- */
- variables: NodeVariable[]
- /**
- * 重试配置
- */
- retry_config: NodeRetryConfig
- /**
- * 错误处理策略
- */
- error_strategy: NodeErrorStrategy
- /**
- * 失败分支节点id
- */
- fail_branch_node_id: string
- /**
- * 默认值
- */
- default_value: NodeVariable[]
- /**
- * 输出变量是否可修改
- */
- output_can_alter: boolean
- /**
- * 输出变量列表
- */
- outputs: NodeVariable[]
- }
- /**
- * 条件项类型
- */
- export interface ConditionType {
- /**
- * 比较操作符
- * 可选值: contains, not_contains, start_with, end_with, is, is_not, empty, not_empty, =, !=, >, <, ≥, ≤, all_of
- */
- comparison_operator:
- | 'contains'
- | 'not_contains'
- | 'start_with'
- | 'end_with'
- | 'is'
- | 'is_not'
- | 'empty'
- | 'not_empty'
- | '='
- | '!='
- | '>'
- | '<'
- | '≥'
- | '≤'
- | 'all_of'
- /**
- * 左值,支持常量或#{}方式的动态变量
- */
- left_value: string
- /**
- * 右值,支持常量或#{}方式的动态变量
- */
- right_value: string
- /**
- * 右值列表,预留
- */
- right_value_list: string[]
- /**
- * 变量类型
- * 可选值: string | number | boolean | object | array[string] | array[number] | array[boolean] | array[object]
- */
- varType:
- | 'string'
- | 'number'
- | 'boolean'
- | 'object'
- | 'array[string]'
- | 'array[number]'
- | 'array[boolean]'
- | 'array[object]'
- }
|