@@ -14,7 +14,8 @@ import {
14
14
NODE_DEFAULT_NAME ,
15
15
AssignStartUserHandlerType ,
16
16
AssignEmptyHandlerType ,
17
- FieldPermissionType
17
+ FieldPermissionType ,
18
+ ProcessVariableEnum
18
19
} from './consts'
19
20
export function useWatchNode ( props : { flowNode : SimpleFlowNode } ) : Ref < SimpleFlowNode > {
20
21
const node = ref < SimpleFlowNode > ( props . flowNode )
@@ -27,12 +28,68 @@ export function useWatchNode(props: { flowNode: SimpleFlowNode }): Ref<SimpleFlo
27
28
return node
28
29
}
29
30
31
+ // 解析 formCreate 所有表单字段, 并返回
32
+ const parseFormCreateFields = ( formFields ?: string [ ] ) => {
33
+ const result : Array < Record < string , any > > = [ ]
34
+ if ( formFields ) {
35
+ formFields . forEach ( ( fieldStr : string ) => {
36
+ parseFields ( JSON . parse ( fieldStr ) , result )
37
+ } )
38
+ }
39
+ // 固定添加发起人 ID 字段
40
+ result . unshift ( {
41
+ field : ProcessVariableEnum . START_USER_ID ,
42
+ title : '发起人' ,
43
+ type : 'UserSelect' ,
44
+ required : true
45
+ } )
46
+ return result
47
+ }
48
+
49
+ // TODO @jason :parse 方法,是不是搞到 formCreate.ts。统一维护管理
50
+ const parseFields = (
51
+ rule : Record < string , any > ,
52
+ fields : Array < Record < string , any > > ,
53
+ parentTitle : string = ''
54
+ ) => {
55
+ const { type, field, $required, title : tempTitle , children } = rule
56
+ if ( field && tempTitle ) {
57
+ let title = tempTitle
58
+ if ( parentTitle ) {
59
+ title = `${ parentTitle } .${ tempTitle } `
60
+ }
61
+ // TODO @jason :按照微信讨论的,非 $required 显示,但是 disable 不可选择
62
+ let required = false
63
+ if ( $required ) {
64
+ required = true
65
+ }
66
+ fields . push ( {
67
+ field,
68
+ title,
69
+ type,
70
+ required
71
+ } )
72
+ // TODO 子表单 需要处理子表单字段
73
+ // if (type === 'group' && rule.props?.rule && Array.isArray(rule.props.rule)) {
74
+ // // 解析子表单的字段
75
+ // rule.props.rule.forEach((item) => {
76
+ // parseFields(item, fieldsPermission, title)
77
+ // })
78
+ // }
79
+ }
80
+ if ( children && Array . isArray ( children ) ) {
81
+ children . forEach ( ( rule ) => {
82
+ parseFields ( rule , fields )
83
+ } )
84
+ }
85
+ }
86
+
30
87
/**
31
88
* @description 表单数据权限配置,用于发起人节点 、审批节点、抄送节点
32
89
*/
33
90
export function useFormFieldsPermission ( defaultPermission : FieldPermissionType ) {
34
91
// 字段权限配置. 需要有 field, title, permissioin 属性
35
- const fieldsPermissionConfig = ref < Array < Record < string , string > > > ( [ ] )
92
+ const fieldsPermissionConfig = ref < Array < Record < string , any > > > ( [ ] )
36
93
37
94
const formType = inject < Ref < number > > ( 'formType' ) // 表单类型
38
95
@@ -45,100 +102,35 @@ export function useFormFieldsPermission(defaultPermission: FieldPermissionType)
45
102
}
46
103
// 默认的表单权限: 获取表单的所有字段,设置字段默认权限为只读
47
104
const getDefaultFieldsPermission = ( formFields ?: string [ ] ) => {
48
- const defaultFieldsPermission : Array < Record < string , string > > = [ ]
105
+ let defaultFieldsPermission : Array < Record < string , any > > = [ ]
49
106
if ( formFields ) {
50
- formFields . forEach ( ( fieldStr : string ) => {
51
- parseFieldsSetDefaultPermission ( JSON . parse ( fieldStr ) , defaultFieldsPermission )
107
+ defaultFieldsPermission = parseFormCreateFields ( formFields ) . map ( ( item ) => {
108
+ return {
109
+ field : item . field ,
110
+ title : item . title ,
111
+ permission : defaultPermission
112
+ }
52
113
} )
53
114
}
54
115
return defaultFieldsPermission
55
116
}
56
- // 解析字段。赋给默认权限
57
- const parseFieldsSetDefaultPermission = (
58
- rule : Record < string , any > ,
59
- fieldsPermission : Array < Record < string , string > > ,
60
- parentTitle : string = ''
61
- ) => {
62
- const { /**type,*/ field, title : tempTitle , children } = rule
63
- if ( field && tempTitle ) {
64
- let title = tempTitle
65
- if ( parentTitle ) {
66
- title = `${ parentTitle } .${ tempTitle } `
67
- }
68
- fieldsPermission . push ( {
69
- field,
70
- title,
71
- permission : defaultPermission
72
- } )
73
- // TODO 子表单 需要处理子表单字段
74
- // if (type === 'group' && rule.props?.rule && Array.isArray(rule.props.rule)) {
75
- // // 解析子表单的字段
76
- // rule.props.rule.forEach((item) => {
77
- // parseFieldsSetDefaultPermission(item, fieldsPermission, title)
78
- // })
79
- // }
80
- }
81
- if ( children && Array . isArray ( children ) ) {
82
- children . forEach ( ( rule ) => {
83
- parseFieldsSetDefaultPermission ( rule , fieldsPermission )
84
- } )
85
- }
86
- }
117
+
118
+ // 获取表单的所有字段,作为下拉框选项
119
+ const formFieldOptions = parseFormCreateFields ( unref ( formFields ) )
87
120
88
121
return {
89
122
formType,
90
123
fieldsPermissionConfig,
124
+ formFieldOptions,
91
125
getNodeConfigFormFields
92
126
}
93
127
}
94
128
/**
95
129
* @description 获取表单的字段
96
130
*/
97
131
export function useFormFields ( ) {
98
- // 解析后的表单字段
99
132
const formFields = inject < Ref < string [ ] > > ( 'formFields' ) // 流程表单字段
100
- const parseFormFields = ( ) => {
101
- const parsedFormFields : Array < Record < string , string > > = [ ]
102
- if ( formFields ) {
103
- formFields . value . forEach ( ( fieldStr : string ) => {
104
- parseField ( JSON . parse ( fieldStr ) , parsedFormFields )
105
- } )
106
- }
107
- return parsedFormFields
108
- }
109
- // 解析字段。
110
- const parseField = (
111
- rule : Record < string , any > ,
112
- parsedFormFields : Array < Record < string , string > > ,
113
- parentTitle : string = ''
114
- ) => {
115
- const { field, title : tempTitle , children, type } = rule
116
- if ( field && tempTitle ) {
117
- let title = tempTitle
118
- if ( parentTitle ) {
119
- title = `${ parentTitle } .${ tempTitle } `
120
- }
121
- parsedFormFields . push ( {
122
- field,
123
- title,
124
- type
125
- } )
126
- // TODO 子表单 需要处理子表单字段
127
- // if (type === 'group' && rule.props?.rule && Array.isArray(rule.props.rule)) {
128
- // // 解析子表单的字段
129
- // rule.props.rule.forEach((item) => {
130
- // parseFieldsSetDefaultPermission(item, fieldsPermission, title)
131
- // })
132
- // }
133
- }
134
- if ( children && Array . isArray ( children ) ) {
135
- children . forEach ( ( rule ) => {
136
- parseField ( rule , parsedFormFields )
137
- } )
138
- }
139
- }
140
-
141
- return parseFormFields ( )
133
+ return parseFormCreateFields ( unref ( formFields ) )
142
134
}
143
135
144
136
export type UserTaskFormType = {
@@ -152,6 +144,8 @@ export type UserTaskFormType = {
152
144
userGroups ?: number [ ] // 用户组
153
145
postIds ?: number [ ] // 岗位
154
146
expression ?: string // 流程表达式
147
+ userFieldOnForm ?: string // 表单内用户字段
148
+ deptFieldOnForm ?: string // 表单内部门字段
155
149
approveRatio ?: number
156
150
rejectHandlerType ?: RejectHandlerType
157
151
returnNodeId ?: string
@@ -174,6 +168,8 @@ export type CopyTaskFormType = {
174
168
userIds ?: number [ ] // 用户
175
169
userGroups ?: number [ ] // 用户组
176
170
postIds ?: number [ ] // 岗位
171
+ userFieldOnForm ?: string // 表单内用户字段
172
+ deptFieldOnForm ?: string // 表单内部门字段
177
173
expression ?: string // 流程表达式
178
174
}
179
175
@@ -187,6 +183,7 @@ export function useNodeForm(nodeType: NodeType) {
187
183
const deptOptions = inject < Ref < DeptApi . DeptVO [ ] > > ( 'deptList' ) // 部门列表
188
184
const userGroupOptions = inject < Ref < UserGroupApi . UserGroupVO [ ] > > ( 'userGroupList' ) // 用户组列表
189
185
const deptTreeOptions = inject ( 'deptTree' ) // 部门树
186
+ const formFields = inject < Ref < string [ ] > > ( 'formFields' ) // 流程表单字段
190
187
const configForm = ref < UserTaskFormType | CopyTaskFormType > ( )
191
188
if ( nodeType === NodeType . USER_TASK_NODE ) {
192
189
configForm . value = {
@@ -282,6 +279,18 @@ export function useNodeForm(nodeType: NodeType) {
282
279
}
283
280
}
284
281
282
+ // 表单内用户字段
283
+ if ( configForm . value ?. candidateStrategy === CandidateStrategy . FORM_USER ) {
284
+ const formFieldOptions = parseFormCreateFields ( unref ( formFields ) )
285
+ const item = formFieldOptions . find ( ( item ) => item . field === configForm . value ?. userFieldOnForm )
286
+ showText = `表单用户:${ item ?. title } `
287
+ }
288
+
289
+ // 表单内部门负责人
290
+ if ( configForm . value ?. candidateStrategy === CandidateStrategy . FORM_DEPT_LEADER ) {
291
+ showText = `表单内部门负责人`
292
+ }
293
+
285
294
// 发起人自选
286
295
if ( configForm . value ?. candidateStrategy === CandidateStrategy . START_USER_SELECT ) {
287
296
showText = `发起人自选`
@@ -328,6 +337,9 @@ export function useNodeForm(nodeType: NodeType) {
328
337
case CandidateStrategy . USER_GROUP :
329
338
candidateParam = configForm . value . userGroups ! . join ( ',' )
330
339
break
340
+ case CandidateStrategy . FORM_USER :
341
+ candidateParam = configForm . value . userFieldOnForm !
342
+ break
331
343
case CandidateStrategy . EXPRESSION :
332
344
candidateParam = configForm . value . expression !
333
345
break
@@ -347,6 +359,13 @@ export function useNodeForm(nodeType: NodeType) {
347
359
candidateParam = deptIds . concat ( '|' + configForm . value . deptLevel + '' )
348
360
break
349
361
}
362
+ // 表单内部门的负责人
363
+ case CandidateStrategy . FORM_DEPT_LEADER : {
364
+ // 候选人参数格式: | 分隔 。左边为表单内部门字段。 右边为部门层级
365
+ const deptFieldOnForm = configForm . value . deptFieldOnForm !
366
+ candidateParam = deptFieldOnForm . concat ( '|' + configForm . value . deptLevel + '' )
367
+ break
368
+ }
350
369
default :
351
370
break
352
371
}
@@ -376,6 +395,9 @@ export function useNodeForm(nodeType: NodeType) {
376
395
case CandidateStrategy . USER_GROUP :
377
396
configForm . value . userGroups = candidateParam . split ( ',' ) . map ( ( item ) => + item )
378
397
break
398
+ case CandidateStrategy . FORM_USER :
399
+ configForm . value . userFieldOnForm = candidateParam
400
+ break
379
401
case CandidateStrategy . EXPRESSION :
380
402
configForm . value . expression = candidateParam
381
403
break
@@ -396,6 +418,14 @@ export function useNodeForm(nodeType: NodeType) {
396
418
configForm . value . deptLevel = + paramArray [ 1 ]
397
419
break
398
420
}
421
+ // 表单内的部门负责人
422
+ case CandidateStrategy . FORM_DEPT_LEADER : {
423
+ // 候选人参数格式: | 分隔 。左边为表单内的部门字段。 右边为部门层级
424
+ const paramArray = candidateParam . split ( '|' )
425
+ configForm . value . deptFieldOnForm = paramArray [ 0 ]
426
+ configForm . value . deptLevel = + paramArray [ 1 ]
427
+ break
428
+ }
399
429
default :
400
430
break
401
431
}
@@ -481,22 +511,22 @@ export function useNodeName2(node: Ref<SimpleFlowNode>, nodeType: NodeType) {
481
511
/**
482
512
* @description 根据节点任务状态,获取节点任务状态样式
483
513
*/
484
- export function useTaskStatusClass ( taskStatus : TaskStatusEnum | undefined ) : string {
514
+ export function useTaskStatusClass ( taskStatus : TaskStatusEnum | undefined ) : string {
485
515
if ( ! taskStatus ) {
486
516
return ''
487
517
}
488
- if ( taskStatus === TaskStatusEnum . APPROVE ) {
518
+ if ( taskStatus === TaskStatusEnum . APPROVE ) {
489
519
return 'status-pass'
490
520
}
491
- if ( taskStatus === TaskStatusEnum . RUNNING ) {
521
+ if ( taskStatus === TaskStatusEnum . RUNNING ) {
492
522
return 'status-running'
493
523
}
494
- if ( taskStatus === TaskStatusEnum . REJECT ) {
524
+ if ( taskStatus === TaskStatusEnum . REJECT ) {
495
525
return 'status-reject'
496
526
}
497
- if ( taskStatus === TaskStatusEnum . CANCEL ) {
527
+ if ( taskStatus === TaskStatusEnum . CANCEL ) {
498
528
return 'status-cancel'
499
529
}
500
-
501
- return '' ;
530
+
531
+ return ''
502
532
}
0 commit comments