Interface.ts 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340
  1. import type { XYPosition } from '@repo/workflow'
  2. import type { FormItemRule } from 'element-plus'
  3. import type { VNode } from 'vue'
  4. /**
  5. * 渲染回调参数
  6. */
  7. export interface RenderCallbackParams {
  8. [key: string]: any
  9. }
  10. /**
  11. * 表单项配置模型
  12. */
  13. export interface ConfigSchema {
  14. // 其他未明确指定的属性
  15. [fieldName: string]: any
  16. /**
  17. * 子节点列表,可选
  18. */
  19. children?: ConfigSchema[]
  20. /**
  21. * 表单控件属性,可选
  22. * @example { type: 'input', options: [{ label: '用户名', value: 'username' }] }
  23. */
  24. componentProps?: any
  25. /**
  26. * 节点字段path,可选 获取参考lodash get方法
  27. * @example 'data.username'
  28. */
  29. field?: string
  30. // 是否为表单输入组件,可选
  31. input?: boolean
  32. // 节点标签,可选
  33. label?: string
  34. /**
  35. * 标签配置
  36. */
  37. labelConfig?: {
  38. /**
  39. * 宽度,可选
  40. */
  41. width?: number
  42. /**
  43. * 是否显示,可选
  44. */
  45. show?: boolean
  46. /**
  47. * 位置,可选
  48. */
  49. position?: 'top' | 'left'
  50. /**
  51. * 配置提示
  52. */
  53. tooltip?: string
  54. }
  55. // 是否无需表单项,可选
  56. noFormItem?: boolean
  57. // 事件绑定
  58. // 表单验证规则,可选
  59. rules?: FormItemRule[]
  60. // 是否显示(属性编辑组件可以添加函数动态显示隐藏),可选
  61. show?: ((renderCallbackParams: RenderCallbackParams) => boolean) | boolean
  62. // 插槽名称(组件为插槽类型时,需要设置插槽name),可选
  63. slotName?: string
  64. // 插槽列表,可选
  65. slots?: { [slotName: string]: ConfigSchema[] }
  66. /**
  67. * 节点类型,必选
  68. * @example 'text' | 'textarea' | 'select' | 'checkbox' | 'radio' | 'switch' | 'date' | 'time' | 'datetime' | 'color' | 'file' | 'image' | 'video' | 'audio' | 'range' | 'number' | 'password' | 'hidden' | 'button' | 'reset' | 'submit' | 'html' | 'custom'
  69. */
  70. valueType: string
  71. // 渲染表单项
  72. render?: (renderCallbackParams: RenderCallbackParams) => Element
  73. // 渲染组件
  74. renderItem?: (renderCallbackParams: RenderCallbackParams) => Element
  75. }
  76. type EndpointType = string | { type: string; label: string }
  77. export interface INodeType {
  78. /**
  79. * 版本信息
  80. */
  81. version: string[]
  82. /**
  83. * 所属分组
  84. */
  85. group?: string
  86. /**
  87. * 展示名称
  88. */
  89. displayName: string
  90. /**
  91. * 名称
  92. */
  93. name: string
  94. /**
  95. * 副标题 带格式化信息
  96. */
  97. subtitle?: string
  98. /**
  99. * 描述
  100. */
  101. description?: string
  102. /**
  103. * 节点图标 默认使用iconify图标名称
  104. * @example 'mdi:home'
  105. * 参考 https://icon-sets.iconify.design/
  106. */
  107. icon?: string
  108. /**
  109. * 图标颜色
  110. */
  111. iconColor?: string
  112. /**
  113. * 输入端口列表
  114. */
  115. inputs: EndpointType[] | ((params: any) => EndpointType[])
  116. /**
  117. * 输出端口列表
  118. */
  119. outputs: EndpointType[] | ((params: any) => EndpointType[])
  120. /**
  121. * 输出端口名称
  122. */
  123. schema: {
  124. // 流程id
  125. appAgentId?: string
  126. // 父级节点Id
  127. parentId?: string
  128. // 节点位置
  129. position: XYPosition
  130. // 节点宽度
  131. width: number
  132. // 节点高度
  133. height: number
  134. // 当前是否选中
  135. selected: boolean
  136. // 节点类型
  137. nodeType: string
  138. // 节点层级
  139. zIndex: number
  140. // 节点业务数据 存储配置等
  141. data: Record<string, any>
  142. }
  143. /**
  144. * 表单配置
  145. */
  146. formConfig?: ConfigSchema[]
  147. /**
  148. * 节点自定义渲染
  149. */
  150. render?: (renderCallbackParams: RenderCallbackParams) => Element | VNode
  151. /**
  152. * 配置校验
  153. */
  154. validate?: (data: any) => boolean | string | Promise<boolean | string>
  155. // 其他配置
  156. [key: string]: any
  157. }
  158. /**
  159. * 节点连接类型
  160. */
  161. export const NodeConnectionTypes = {
  162. main: 'main'
  163. }
  164. /**
  165. * 节点变量类型
  166. */
  167. type NodeVariableType =
  168. | 'string'
  169. | 'number'
  170. | 'boolean'
  171. | 'object'
  172. | 'array[string]'
  173. | 'array[number]'
  174. | 'array[boolean]'
  175. | 'array[object]'
  176. /**
  177. * 节点变量值类型
  178. */
  179. type NodeVariableValueType = 'constant' | 'variable'
  180. /**
  181. * 节点变量
  182. */
  183. interface NodeVariable {
  184. name: string
  185. describe: string
  186. type: NodeVariableType
  187. value: any
  188. value_type?: NodeVariableValueType
  189. }
  190. /**
  191. * 节点重试配置
  192. */
  193. interface NodeRetryConfig {
  194. retry_enabled: boolean
  195. max_retries: number
  196. retry_interval: number // milliseconds
  197. }
  198. /**
  199. * 节点错误处理策略
  200. */
  201. type NodeErrorStrategy = 'none' | 'default-value' | 'fail-branch'
  202. /**
  203. * 节点类型
  204. */
  205. type NodeType =
  206. | 'http-request'
  207. | 'code'
  208. | 'if-else'
  209. | 'iteration'
  210. | 'iteration-start'
  211. | 'list-operator'
  212. | 'loop'
  213. | 'loop-start'
  214. | 'end'
  215. | string
  216. /**
  217. * 节点公共配置信息
  218. */
  219. export interface INodeDataBaseSchema {
  220. /**
  221. * 节点类型
  222. */
  223. type: NodeType
  224. /**
  225. * 标题
  226. */
  227. title: string
  228. /**
  229. * 是否在迭代中
  230. */
  231. isInIteration: boolean
  232. /**
  233. * 迭代id
  234. */
  235. iteration_id: string
  236. /**
  237. * 是否在循环中
  238. */
  239. isInLoop: boolean
  240. /**
  241. * 循环id
  242. */
  243. loop_id: string
  244. /**
  245. * 输入变量列表
  246. */
  247. variables: NodeVariable[]
  248. /**
  249. * 重试配置
  250. */
  251. retry_config: NodeRetryConfig
  252. /**
  253. * 错误处理策略
  254. */
  255. error_strategy: NodeErrorStrategy
  256. /**
  257. * 失败分支节点id
  258. */
  259. fail_branch_node_id: string
  260. /**
  261. * 默认值
  262. */
  263. default_value: NodeVariable[]
  264. /**
  265. * 输出变量是否可修改
  266. */
  267. output_can_alter: boolean
  268. /**
  269. * 输出变量列表
  270. */
  271. outputs: NodeVariable[]
  272. }
  273. /**
  274. * 条件项类型
  275. */
  276. export interface ConditionType {
  277. /**
  278. * 比较操作符
  279. * 可选值: contains, not_contains, start_with, end_with, is, is_not, empty, not_empty, =, !=, >, <, ≥, ≤, all_of
  280. */
  281. comparison_operator:
  282. | 'contains'
  283. | 'not_contains'
  284. | 'start_with'
  285. | 'end_with'
  286. | 'is'
  287. | 'is_not'
  288. | 'empty'
  289. | 'not_empty'
  290. | '='
  291. | '!='
  292. | '>'
  293. | '<'
  294. | '≥'
  295. | '≤'
  296. | 'all_of'
  297. /**
  298. * 左值,支持常量或#{}方式的动态变量
  299. */
  300. left_value: string
  301. /**
  302. * 右值,支持常量或#{}方式的动态变量
  303. */
  304. right_value: string
  305. /**
  306. * 右值列表,预留
  307. */
  308. right_value_list: string[]
  309. /**
  310. * 变量类型
  311. * 可选值: string | number | boolean | object | array[string] | array[number] | array[boolean] | array[object]
  312. */
  313. varType:
  314. | 'string'
  315. | 'number'
  316. | 'boolean'
  317. | 'object'
  318. | 'array[string]'
  319. | 'array[number]'
  320. | 'array[boolean]'
  321. | 'array[object]'
  322. }