@@ -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,67 @@ 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
+ const parseFields = (
50
+ rule : Record < string , any > ,
51
+ fields : Array < Record < string , any > > ,
52
+ parentTitle : string = ''
53
+ ) => {
54
+ const { type, field, $required, title : tempTitle , children } = rule
55
+ if ( field && tempTitle ) {
56
+ let title = tempTitle
57
+ if ( parentTitle ) {
58
+ title = `${ parentTitle } .${ tempTitle } `
59
+ }
60
+ let required = false ;
61
+ if ( $required ) {
62
+ required = true ;
63
+ }
64
+ fields . push ( {
65
+ field,
66
+ title,
67
+ type,
68
+ required
69
+ } )
70
+ // TODO 子表单 需要处理子表单字段
71
+ // if (type === 'group' && rule.props?.rule && Array.isArray(rule.props.rule)) {
72
+ // // 解析子表单的字段
73
+ // rule.props.rule.forEach((item) => {
74
+ // parseFields(item, fieldsPermission, title)
75
+ // })
76
+ // }
77
+ }
78
+ if ( children && Array . isArray ( children ) ) {
79
+ children . forEach ( ( rule ) => {
80
+ parseFields ( rule , fields )
81
+ } )
82
+ }
83
+ }
84
+
85
+
30
86
/**
31
87
* @description 表单数据权限配置,用于发起人节点 、审批节点、抄送节点
32
88
*/
33
89
export function useFormFieldsPermission ( defaultPermission : FieldPermissionType ) {
34
90
// 字段权限配置. 需要有 field, title, permissioin 属性
35
- const fieldsPermissionConfig = ref < Array < Record < string , string > > > ( [ ] )
91
+ const fieldsPermissionConfig = ref < Array < Record < string , any > > > ( [ ] )
36
92
37
93
const formType = inject < Ref < number > > ( 'formType' ) // 表单类型
38
94
@@ -45,100 +101,37 @@ export function useFormFieldsPermission(defaultPermission: FieldPermissionType)
45
101
}
46
102
// 默认的表单权限: 获取表单的所有字段,设置字段默认权限为只读
47
103
const getDefaultFieldsPermission = ( formFields ?: string [ ] ) => {
48
- const defaultFieldsPermission : Array < Record < string , string > > = [ ]
104
+ let defaultFieldsPermission : Array < Record < string , any > > = [ ]
49
105
if ( formFields ) {
50
- formFields . forEach ( ( fieldStr : string ) => {
51
- parseFieldsSetDefaultPermission ( JSON . parse ( fieldStr ) , defaultFieldsPermission )
52
- } )
106
+ defaultFieldsPermission = parseFormCreateFields ( formFields ) . map ( item => {
107
+ return {
108
+ field : item . field ,
109
+ title : item . title ,
110
+ permission : defaultPermission
111
+ }
112
+ } ) ;
53
113
}
54
114
return defaultFieldsPermission
55
115
}
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
- }
116
+
117
+
118
+
119
+ // 获取表单的所有字段,作为下拉框选项
120
+ const formFieldOptions = parseFormCreateFields ( unref ( formFields ) )
87
121
88
122
return {
89
123
formType,
90
124
fieldsPermissionConfig,
125
+ formFieldOptions,
91
126
getNodeConfigFormFields
92
127
}
93
128
}
94
129
/**
95
130
* @description 获取表单的字段
96
131
*/
97
132
export function useFormFields ( ) {
98
- // 解析后的表单字段
99
133
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 ( )
134
+ return parseFormCreateFields ( unref ( formFields ) )
142
135
}
143
136
144
137
export type UserTaskFormType = {
@@ -152,6 +145,8 @@ export type UserTaskFormType = {
152
145
userGroups ?: number [ ] // 用户组
153
146
postIds ?: number [ ] // 岗位
154
147
expression ?: string // 流程表达式
148
+ userFieldOnForm ?: string // 表单内用户字段
149
+ deptFieldOnForm ?: string // 表单内部门字段
155
150
approveRatio ?: number
156
151
rejectHandlerType ?: RejectHandlerType
157
152
returnNodeId ?: string
@@ -174,6 +169,8 @@ export type CopyTaskFormType = {
174
169
userIds ?: number [ ] // 用户
175
170
userGroups ?: number [ ] // 用户组
176
171
postIds ?: number [ ] // 岗位
172
+ userFieldOnForm ?: string // 表单内用户字段
173
+ deptFieldOnForm ?: string // 表单内部门字段
177
174
expression ?: string // 流程表达式
178
175
}
179
176
@@ -187,6 +184,7 @@ export function useNodeForm(nodeType: NodeType) {
187
184
const deptOptions = inject < Ref < DeptApi . DeptVO [ ] > > ( 'deptList' ) // 部门列表
188
185
const userGroupOptions = inject < Ref < UserGroupApi . UserGroupVO [ ] > > ( 'userGroupList' ) // 用户组列表
189
186
const deptTreeOptions = inject ( 'deptTree' ) // 部门树
187
+ const formFields = inject < Ref < string [ ] > > ( 'formFields' ) // 流程表单字段
190
188
const configForm = ref < UserTaskFormType | CopyTaskFormType > ( )
191
189
if ( nodeType === NodeType . USER_TASK_NODE ) {
192
190
configForm . value = {
@@ -282,6 +280,18 @@ export function useNodeForm(nodeType: NodeType) {
282
280
}
283
281
}
284
282
283
+ // 表单内用户字段
284
+ if ( configForm . value ?. candidateStrategy === CandidateStrategy . USER_FIELD_ON_FORM ) {
285
+ const formFieldOptions = parseFormCreateFields ( unref ( formFields ) )
286
+ const item = formFieldOptions . find ( ( item ) => item . field === configForm . value ?. userFieldOnForm )
287
+ showText = `表单用户:${ item ?. title } `
288
+ }
289
+
290
+ // 表单内部门负责人
291
+ if ( configForm . value ?. candidateStrategy === CandidateStrategy . DEPT_LEADER_ON_FORM ) {
292
+ showText = `表单内部门负责人`
293
+ }
294
+
285
295
// 发起人自选
286
296
if ( configForm . value ?. candidateStrategy === CandidateStrategy . START_USER_SELECT ) {
287
297
showText = `发起人自选`
@@ -328,6 +338,9 @@ export function useNodeForm(nodeType: NodeType) {
328
338
case CandidateStrategy . USER_GROUP :
329
339
candidateParam = configForm . value . userGroups ! . join ( ',' )
330
340
break
341
+ case CandidateStrategy . USER_FIELD_ON_FORM :
342
+ candidateParam = configForm . value . userFieldOnForm !
343
+ break
331
344
case CandidateStrategy . EXPRESSION :
332
345
candidateParam = configForm . value . expression !
333
346
break
@@ -347,6 +360,13 @@ export function useNodeForm(nodeType: NodeType) {
347
360
candidateParam = deptIds . concat ( '|' + configForm . value . deptLevel + '' )
348
361
break
349
362
}
363
+ // 表单内部门的负责人
364
+ case CandidateStrategy . DEPT_LEADER_ON_FORM : {
365
+ // 候选人参数格式: | 分隔 。左边为表单内部门字段。 右边为部门层级
366
+ const deptFieldOnForm = configForm . value . deptFieldOnForm !
367
+ candidateParam = deptFieldOnForm . concat ( '|' + configForm . value . deptLevel + '' )
368
+ break
369
+ }
350
370
default :
351
371
break
352
372
}
@@ -376,6 +396,9 @@ export function useNodeForm(nodeType: NodeType) {
376
396
case CandidateStrategy . USER_GROUP :
377
397
configForm . value . userGroups = candidateParam . split ( ',' ) . map ( ( item ) => + item )
378
398
break
399
+ case CandidateStrategy . USER_FIELD_ON_FORM :
400
+ configForm . value . userFieldOnForm = candidateParam
401
+ break
379
402
case CandidateStrategy . EXPRESSION :
380
403
configForm . value . expression = candidateParam
381
404
break
@@ -396,6 +419,14 @@ export function useNodeForm(nodeType: NodeType) {
396
419
configForm . value . deptLevel = + paramArray [ 1 ]
397
420
break
398
421
}
422
+ // 表单内的部门负责人
423
+ case CandidateStrategy . DEPT_LEADER_ON_FORM : {
424
+ // 候选人参数格式: | 分隔 。左边为表单内的部门字段。 右边为部门层级
425
+ const paramArray = candidateParam . split ( '|' )
426
+ configForm . value . deptFieldOnForm = paramArray [ 0 ]
427
+ configForm . value . deptLevel = + paramArray [ 1 ]
428
+ break
429
+ }
399
430
default :
400
431
break
401
432
}
0 commit comments