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