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