consts.ts 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. // @ts-ignore
  2. import { DictDataVO } from '@/api/system/dict/types'
  3. /**
  4. * 节点类型
  5. */
  6. export enum NodeType {
  7. /**
  8. * 结束节点
  9. */
  10. END_EVENT_NODE = 1,
  11. /**
  12. * 发起人节点
  13. */
  14. START_USER_NODE = 10,
  15. /**
  16. * 审批人节点
  17. */
  18. USER_TASK_NODE = 11,
  19. /**
  20. * 抄送人节点
  21. */
  22. COPY_TASK_NODE = 12,
  23. /**
  24. * 条件节点
  25. */
  26. CONDITION_NODE = 50,
  27. /**
  28. * 条件分支节点 (对应排他网关)
  29. */
  30. CONDITION_BRANCH_NODE = 51,
  31. /**
  32. * 并行分支节点 (对应并行网关)
  33. */
  34. PARALLEL_BRANCH_NODE = 52,
  35. /**
  36. * 包容分支节点 (对应包容网关)
  37. */
  38. INCLUSIVE_BRANCH_NODE = 53
  39. }
  40. export enum NodeId {
  41. /**
  42. * 发起人节点 Id
  43. */
  44. START_USER_NODE_ID = 'StartUserNode',
  45. /**
  46. * 发起人节点 Id
  47. */
  48. END_EVENT_NODE_ID = 'EndEvent'
  49. }
  50. /**
  51. * 节点结构定义
  52. */
  53. export interface SimpleFlowNode {
  54. id: string
  55. type: NodeType
  56. name: string
  57. showText?: string
  58. // 孩子节点
  59. childNode?: SimpleFlowNode
  60. // 条件节点
  61. conditionNodes?: SimpleFlowNode[]
  62. // 审批类型
  63. approveType?: ApproveType
  64. // 候选人策略
  65. candidateStrategy?: number
  66. // 候选人参数
  67. candidateParam?: string
  68. // 多人审批方式
  69. approveMethod?: ApproveMethodType
  70. //通过比例
  71. approveRatio?: number
  72. // 审批按钮设置
  73. buttonsSetting?: any[]
  74. // 表单权限
  75. fieldsPermission?: Array<Record<string, string>>
  76. // 审批任务超时处理
  77. timeoutHandler?: TimeoutHandler
  78. // 审批任务拒绝处理
  79. rejectHandler?: RejectHandler
  80. // 审批人为空的处理
  81. assignEmptyHandler?: AssignEmptyHandler
  82. // 审批节点的审批人与发起人相同时,对应的处理类型
  83. assignStartUserHandlerType?: number
  84. // 条件类型
  85. conditionType?: ConditionType
  86. // 条件表达式
  87. conditionExpression?: string
  88. // 条件组
  89. conditionGroups?: ConditionGroup
  90. // 是否默认的条件
  91. defaultFlow?: boolean
  92. }
  93. // 候选人策略枚举 ( 用于审批节点。抄送节点 )
  94. export enum CandidateStrategy {
  95. /**
  96. * 指定角色
  97. */
  98. ROLE = 10,
  99. /**
  100. * 部门成员
  101. */
  102. DEPT_MEMBER = 20,
  103. /**
  104. * 部门的负责人
  105. */
  106. DEPT_LEADER = 21,
  107. /**
  108. * 连续多级部门的负责人
  109. */
  110. MULTI_LEVEL_DEPT_LEADER = 23,
  111. /**
  112. * 指定岗位
  113. */
  114. POST = 22,
  115. /**
  116. * 指定用户
  117. */
  118. USER = 30,
  119. /**
  120. * 发起人自选
  121. */
  122. START_USER_SELECT = 35,
  123. /**
  124. * 发起人自己
  125. */
  126. START_USER = 36,
  127. /**
  128. * 发起人部门负责人
  129. */
  130. START_USER_DEPT_LEADER = 37,
  131. /**
  132. * 发起人连续多级部门的负责人
  133. */
  134. START_USER_MULTI_LEVEL_DEPT_LEADER = 38,
  135. /**
  136. * 指定用户组
  137. */
  138. USER_GROUP = 40,
  139. /**
  140. * 流程表达式
  141. */
  142. EXPRESSION = 60
  143. }
  144. // 多人审批方式类型枚举 ( 用于审批节点 )
  145. export enum ApproveMethodType {
  146. /**
  147. * 随机挑选一人审批
  148. */
  149. RANDOM_SELECT_ONE_APPROVE = 1,
  150. /**
  151. * 多人会签(按通过比例)
  152. */
  153. APPROVE_BY_RATIO = 2,
  154. /**
  155. * 多人或签(通过只需一人,拒绝只需一人)
  156. */
  157. ANY_APPROVE = 3,
  158. /**
  159. * 多人依次审批
  160. */
  161. SEQUENTIAL_APPROVE = 4
  162. }
  163. /**
  164. * 审批拒绝结构定义
  165. */
  166. export type RejectHandler = {
  167. // 审批拒绝类型
  168. type: RejectHandlerType
  169. // 回退节点 Id
  170. returnNodeId?: string
  171. }
  172. /**
  173. * 审批超时结构定义
  174. */
  175. export type TimeoutHandler = {
  176. // 是否开启超时处理
  177. enable: boolean
  178. // 超时执行的动作
  179. type?: number
  180. // 超时时间设置
  181. timeDuration?: string
  182. // 执行动作是自动提醒, 最大提醒次数
  183. maxRemindCount?: number
  184. }
  185. /**
  186. * 审批人为空的结构定义
  187. */
  188. export type AssignEmptyHandler = {
  189. // 审批人为空的处理类型
  190. type: AssignEmptyHandlerType
  191. // 指定用户的编号数组
  192. userIds?: number[]
  193. }
  194. // 审批拒绝类型枚举
  195. export enum RejectHandlerType {
  196. /**
  197. * 结束流程
  198. */
  199. FINISH_PROCESS = 1,
  200. /**
  201. * 驳回到指定节点
  202. */
  203. RETURN_USER_TASK = 2
  204. }
  205. // 用户任务超时处理类型枚举
  206. export enum TimeoutHandlerType {
  207. /**
  208. * 自动提醒
  209. */
  210. REMINDER = 1,
  211. /**
  212. * 自动同意
  213. */
  214. APPROVE = 2,
  215. /**
  216. * 自动拒绝
  217. */
  218. REJECT = 3
  219. }
  220. // 用户任务的审批人为空时,处理类型枚举
  221. export enum AssignEmptyHandlerType {
  222. /**
  223. * 自动通过
  224. */
  225. APPROVE = 1,
  226. /**
  227. * 自动拒绝
  228. */
  229. REJECT = 2,
  230. /**
  231. * 指定人员审批
  232. */
  233. ASSIGN_USER,
  234. /**
  235. * 转交给流程管理员
  236. */
  237. ASSIGN_ADMIN = 4
  238. }
  239. // 用户任务的审批人与发起人相同时,处理类型枚举
  240. export enum AssignStartUserHandlerType {
  241. /**
  242. * 由发起人对自己审批
  243. */
  244. START_USER_AUDIT = 1,
  245. /**
  246. * 自动跳过【参考飞书】:1)如果当前节点还有其他审批人,则交由其他审批人进行审批;2)如果当前节点没有其他审批人,则该节点自动通过
  247. */
  248. SKIP = 2,
  249. /**
  250. * 转交给部门负责人审批
  251. */
  252. ASSIGN_DEPT_LEADER = 3
  253. }
  254. // 用户任务的审批类型。 【参考飞书】
  255. export enum ApproveType {
  256. /**
  257. * 人工审批
  258. */
  259. USER = 1,
  260. /**
  261. * 自动通过
  262. */
  263. AUTO_APPROVE = 2,
  264. /**
  265. * 自动拒绝
  266. */
  267. AUTO_REJECT = 3
  268. }
  269. // 时间单位枚举
  270. export enum TimeUnitType {
  271. /**
  272. * 分钟
  273. */
  274. MINUTE = 1,
  275. /**
  276. * 小时
  277. */
  278. HOUR = 2,
  279. /**
  280. * 天
  281. */
  282. DAY = 3
  283. }
  284. // 条件配置类型 ( 用于条件节点配置 )
  285. export enum ConditionType {
  286. /**
  287. * 条件表达式
  288. */
  289. EXPRESSION = 1,
  290. /**
  291. * 条件规则
  292. */
  293. RULE = 2
  294. }
  295. /**
  296. * 表单权限的枚举
  297. */
  298. export enum FieldPermissionType {
  299. /**
  300. * 只读
  301. */
  302. READ = '1',
  303. /**
  304. * 编辑
  305. */
  306. WRITE = '2',
  307. /**
  308. * 隐藏
  309. */
  310. NONE = '3'
  311. }
  312. /**
  313. * 操作按钮权限结构定义
  314. */
  315. export type ButtonSetting = {
  316. id: OperationButtonType
  317. displayName: string
  318. enable: boolean
  319. }
  320. // 操作按钮类型枚举 (用于审批节点)
  321. export enum OperationButtonType {
  322. /**
  323. * 通过
  324. */
  325. APPROVE = 1,
  326. /**
  327. * 拒绝
  328. */
  329. REJECT = 2,
  330. /**
  331. * 转办
  332. */
  333. TRANSFER = 3,
  334. /**
  335. * 委派
  336. */
  337. DELEGATE = 4,
  338. /**
  339. * 加签
  340. */
  341. ADD_SIGN = 5,
  342. /**
  343. * 回退
  344. */
  345. RETURN = 6,
  346. /**
  347. * 抄送
  348. */
  349. COPY = 7
  350. }
  351. /**
  352. * 条件规则结构定义
  353. */
  354. export type ConditionRule = {
  355. type: number
  356. opName: string
  357. opCode: string
  358. leftSide: string
  359. rightSide: string
  360. }
  361. /**
  362. * 条件组结构定义
  363. */
  364. export type ConditionGroup = {
  365. // 条件组的逻辑关系是否为且
  366. and: boolean
  367. // 条件数组
  368. conditions: Condition[]
  369. }
  370. /**
  371. * 条件结构定义
  372. */
  373. export type Condition = {
  374. // 条件规则的逻辑关系是否为且
  375. and: boolean
  376. rules: ConditionRule[]
  377. }
  378. export const NODE_DEFAULT_TEXT = new Map<number, string>()
  379. NODE_DEFAULT_TEXT.set(NodeType.USER_TASK_NODE, '请配置审批人')
  380. NODE_DEFAULT_TEXT.set(NodeType.COPY_TASK_NODE, '请配置抄送人')
  381. NODE_DEFAULT_TEXT.set(NodeType.CONDITION_NODE, '请设置条件')
  382. NODE_DEFAULT_TEXT.set(NodeType.START_USER_NODE, '请设置发起人')
  383. export const NODE_DEFAULT_NAME = new Map<number, string>()
  384. NODE_DEFAULT_NAME.set(NodeType.USER_TASK_NODE, '审批人')
  385. NODE_DEFAULT_NAME.set(NodeType.COPY_TASK_NODE, '抄送人')
  386. NODE_DEFAULT_NAME.set(NodeType.CONDITION_NODE, '条件')
  387. NODE_DEFAULT_NAME.set(NodeType.START_USER_NODE, '发起人')
  388. // 候选人策略。暂时不从字典中取。 后续可能调整。控制显示顺序
  389. export const CANDIDATE_STRATEGY: DictDataVO[] = [
  390. { label: '指定成员', value: CandidateStrategy.USER },
  391. { label: '指定角色', value: CandidateStrategy.ROLE },
  392. { label: '部门成员', value: CandidateStrategy.DEPT_MEMBER },
  393. { label: '部门负责人', value: CandidateStrategy.DEPT_LEADER },
  394. { label: '连续多级部门负责人', value: CandidateStrategy.MULTI_LEVEL_DEPT_LEADER },
  395. { label: '发起人自选', value: CandidateStrategy.START_USER_SELECT },
  396. { label: '发起人本人', value: CandidateStrategy.START_USER },
  397. { label: '发起人部门负责人', value: CandidateStrategy.START_USER_DEPT_LEADER },
  398. { label: '发起人连续部门负责人', value: CandidateStrategy.START_USER_MULTI_LEVEL_DEPT_LEADER },
  399. { label: '用户组', value: CandidateStrategy.USER_GROUP },
  400. { label: '流程表达式', value: CandidateStrategy.EXPRESSION }
  401. ]
  402. // 审批节点 的审批类型
  403. export const APPROVE_TYPE: DictDataVO[] = [
  404. { label: '人工审批', value: ApproveType.USER },
  405. { label: '自动通过', value: ApproveType.AUTO_APPROVE },
  406. { label: '自动拒绝', value: ApproveType.AUTO_REJECT }
  407. ]
  408. export const APPROVE_METHODS: DictDataVO[] = [
  409. { label: '按顺序依次审批', value: ApproveMethodType.SEQUENTIAL_APPROVE },
  410. { label: '会签(可同时审批,至少 % 人必须审批通过)', value: ApproveMethodType.APPROVE_BY_RATIO },
  411. { label: '或签(可同时审批,有一人通过即可)', value: ApproveMethodType.ANY_APPROVE },
  412. { label: '随机挑选一人审批', value: ApproveMethodType.RANDOM_SELECT_ONE_APPROVE }
  413. ]
  414. export const CONDITION_CONFIG_TYPES: DictDataVO[] = [
  415. { label: '条件表达式', value: ConditionType.EXPRESSION },
  416. { label: '条件规则', value: ConditionType.RULE }
  417. ]
  418. // 时间单位类型
  419. export const TIME_UNIT_TYPES: DictDataVO[] = [
  420. { label: '分钟', value: TimeUnitType.MINUTE },
  421. { label: '小时', value: TimeUnitType.HOUR },
  422. { label: '天', value: TimeUnitType.DAY }
  423. ]
  424. // 超时处理执行动作类型
  425. export const TIMEOUT_HANDLER_TYPES: DictDataVO[] = [
  426. { label: '自动提醒', value: 1 },
  427. { label: '自动同意', value: 2 },
  428. { label: '自动拒绝', value: 3 }
  429. ]
  430. export const REJECT_HANDLER_TYPES: DictDataVO[] = [
  431. { label: '终止流程', value: RejectHandlerType.FINISH_PROCESS },
  432. { label: '驳回到指定节点', value: RejectHandlerType.RETURN_USER_TASK }
  433. // { label: '结束任务', value: RejectHandlerType.FINISH_TASK }
  434. ]
  435. export const ASSIGN_EMPTY_HANDLER_TYPES: DictDataVO[] = [
  436. { label: '自动通过', value: 1 },
  437. { label: '自动拒绝', value: 2 },
  438. { label: '指定成员审批', value: 3 },
  439. { label: '转交给流程管理员', value: 4 }
  440. ]
  441. export const ASSIGN_START_USER_HANDLER_TYPES: DictDataVO[] = [
  442. { label: '由发起人对自己审批', value: 1 },
  443. { label: '自动跳过', value: 2 },
  444. { label: '转交给部门负责人审批', value: 3 }
  445. ]
  446. // 比较运算符
  447. export const COMPARISON_OPERATORS: DictDataVO = [
  448. {
  449. value: '==',
  450. label: '等于'
  451. },
  452. {
  453. value: '!=',
  454. label: '不等于'
  455. },
  456. {
  457. value: '>',
  458. label: '大于'
  459. },
  460. {
  461. value: '>=',
  462. label: '大于等于'
  463. },
  464. {
  465. value: '<',
  466. label: '小于'
  467. },
  468. {
  469. value: '<=',
  470. label: '小于等于'
  471. }
  472. ]
  473. // 审批操作按钮名称
  474. export const OPERATION_BUTTON_NAME = new Map<number, string>()
  475. OPERATION_BUTTON_NAME.set(OperationButtonType.APPROVE, '通过')
  476. OPERATION_BUTTON_NAME.set(OperationButtonType.REJECT, '拒绝')
  477. OPERATION_BUTTON_NAME.set(OperationButtonType.TRANSFER, '转办')
  478. OPERATION_BUTTON_NAME.set(OperationButtonType.DELEGATE, '委派')
  479. OPERATION_BUTTON_NAME.set(OperationButtonType.ADD_SIGN, '加签')
  480. OPERATION_BUTTON_NAME.set(OperationButtonType.RETURN, '回退')
  481. OPERATION_BUTTON_NAME.set(OperationButtonType.COPY, '抄送')
  482. // 默认的按钮权限设置
  483. export const DEFAULT_BUTTON_SETTING: ButtonSetting[] = [
  484. { id: OperationButtonType.APPROVE, displayName: '通过', enable: true },
  485. { id: OperationButtonType.REJECT, displayName: '拒绝', enable: true },
  486. { id: OperationButtonType.TRANSFER, displayName: '转办', enable: false },
  487. { id: OperationButtonType.DELEGATE, displayName: '委派', enable: false },
  488. { id: OperationButtonType.ADD_SIGN, displayName: '加签', enable: false },
  489. { id: OperationButtonType.RETURN, displayName: '回退', enable: false }
  490. ]
  491. // 发起人的按钮权限。暂时定死,不可以编辑
  492. export const START_USER_BUTTON_SETTING: ButtonSetting[] = [
  493. { id: OperationButtonType.APPROVE, displayName: '提交', enable: true },
  494. { id: OperationButtonType.REJECT, displayName: '拒绝', enable: false },
  495. { id: OperationButtonType.TRANSFER, displayName: '转办', enable: false },
  496. { id: OperationButtonType.DELEGATE, displayName: '委派', enable: false },
  497. { id: OperationButtonType.ADD_SIGN, displayName: '加签', enable: false },
  498. { id: OperationButtonType.RETURN, displayName: '回退', enable: false }
  499. ]
  500. export const MULTI_LEVEL_DEPT: DictDataVO = [
  501. { label: '第 1 级部门', value: 1 },
  502. { label: '第 2 级部门', value: 2 },
  503. { label: '第 3 级部门', value: 3 },
  504. { label: '第 4 级部门', value: 4 },
  505. { label: '第 5 级部门', value: 5 },
  506. { label: '第 6 级部门', value: 6 },
  507. { label: '第 7 级部门', value: 7 },
  508. { label: '第 8 级部门', value: 8 },
  509. { label: '第 9 级部门', value: 9 },
  510. { label: '第 10 级部门', value: 10 },
  511. { label: '第 11 级部门', value: 11 },
  512. { label: '第 12 级部门', value: 12 },
  513. { label: '第 13 级部门', value: 13 },
  514. { label: '第 14 级部门', value: 14 },
  515. { label: '第 15 级部门', value: 15 }
  516. ]