Skip to content

Commit 8b3c294

Browse files
committed
【功能新增】工作流:支持审批人为空时,根据配置进行自动通过、自动拒绝、指定人审批的配置
1 parent 6b31a32 commit 8b3c294

File tree

4 files changed

+108
-13
lines changed

4 files changed

+108
-13
lines changed

src/components/SimpleProcessDesignerV2/src/NodeHandler.vue

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,16 @@
4343

4444
<script setup lang="ts">
4545
import {
46-
SimpleFlowNode,
47-
NodeType,
48-
NODE_DEFAULT_NAME,
4946
ApproveMethodType,
50-
RejectHandlerType
47+
AssignEmptyHandlerType,
48+
AssignStartUserHandlerType,
49+
NODE_DEFAULT_NAME,
50+
NodeType,
51+
RejectHandlerType,
52+
SimpleFlowNode
5153
} from './consts'
5254
import { generateUUID } from '@/utils'
55+
5356
defineOptions({
5457
name: 'NodeHandler'
5558
})
@@ -86,6 +89,10 @@ const addNode = (type: number) => {
8689
timeoutHandler: {
8790
enable: false
8891
},
92+
assignEmptyHandler: {
93+
type: AssignEmptyHandlerType.APPROVE
94+
},
95+
assignStartUserHandlerType: AssignStartUserHandlerType.START_USER_AUDIT,
8996
childNode: props.childNode
9097
}
9198
emits('update:childNode', data)

src/components/SimpleProcessDesignerV2/src/consts.ts

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ export interface SimpleFlowNode {
7878
timeoutHandler?: TimeoutHandler
7979
// 审批任务拒绝处理
8080
rejectHandler?: RejectHandler
81+
// 审批人为空的处理
82+
assignEmptyHandler?: AssignEmptyHandler
8183
// 审批节点的审批人与发起人相同时,对应的处理类型
8284
assignStartUserHandlerType?: number
8385
}
@@ -169,7 +171,7 @@ export type RejectHandler = {
169171
* 审批超时结构定义
170172
*/
171173
export type TimeoutHandler = {
172-
//是否开启超时处理
174+
// 是否开启超时处理
173175
enable: boolean
174176
// 超时执行的动作
175177
type?: number
@@ -178,6 +180,17 @@ export type TimeoutHandler = {
178180
// 执行动作是自动提醒, 最大提醒次数
179181
maxRemindCount?: number
180182
}
183+
184+
/**
185+
* 审批人为空的结构定义
186+
*/
187+
export type AssignEmptyHandler = {
188+
// 审批人为空的处理类型
189+
type: AssignEmptyHandlerType
190+
// 指定用户的编号数组
191+
userIds?: number[]
192+
}
193+
181194
// 审批拒绝类型枚举
182195
export enum RejectHandlerType {
183196
/**
@@ -204,6 +217,25 @@ export enum TimeoutHandlerType {
204217
*/
205218
REJECT = 3
206219
}
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+
}
207239
// 用户任务的审批人与发起人相同时,处理类型枚举
208240
export enum AssignStartUserHandlerType {
209241
/**
@@ -369,6 +401,12 @@ export const REJECT_HANDLER_TYPES: DictDataVO[] = [
369401
{ label: '驳回到指定节点', value: RejectHandlerType.RETURN_USER_TASK }
370402
// { label: '结束任务', value: RejectHandlerType.FINISH_TASK }
371403
]
404+
export const ASSIGN_EMPTY_HANDLER_TYPES: DictDataVO[] = [
405+
{ label: '自动通过', value: 1 },
406+
{ label: '自动拒绝', value: 2 },
407+
{ label: '指定成员审批', value: 3 },
408+
{ label: '转交给流程管理员', value: 4 }
409+
]
372410
export const ASSIGN_START_USER_HANDLER_TYPES: DictDataVO[] = [
373411
{ label: '由发起人对自己审批', value: 1 },
374412
{ label: '自动跳过', value: 2 },

src/components/SimpleProcessDesignerV2/src/node.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
RejectHandlerType,
1313
NODE_DEFAULT_NAME,
1414
AssignStartUserHandlerType,
15-
ASSIGN_START_USER_HANDLER_TYPES
15+
AssignEmptyHandlerType
1616
} from './consts'
1717
export function useWatchNode(props: { flowNode: SimpleFlowNode }): Ref<SimpleFlowNode> {
1818
const node = ref<SimpleFlowNode>(props.flowNode)
@@ -57,7 +57,7 @@ export function useFormFieldsPermission() {
5757
fieldsPermission: Array<Record<string, string>>,
5858
parentTitle: string = ''
5959
) => {
60-
const { type, field, title: tempTitle, children } = rule
60+
const { /**type,*/ field, title: tempTitle, children } = rule
6161
if (field && tempTitle) {
6262
let title = tempTitle
6363
if (parentTitle) {
@@ -106,6 +106,8 @@ export type UserTaskFormType = {
106106
returnNodeId?: string
107107
timeoutHandlerEnable?: boolean
108108
timeoutHandlerType?: number
109+
assignEmptyHandlerType?: AssignEmptyHandlerType
110+
assignEmptyHandlerUserIds?: number[]
109111
assignStartUserHandlerType?: AssignStartUserHandlerType
110112
timeDuration?: number
111113
maxRemindCount?: number

src/components/SimpleProcessDesignerV2/src/nodes-config/UserTaskNodeConfig.vue

Lines changed: 54 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@
196196
</div>
197197
</el-radio-group>
198198
</el-form-item>
199+
199200
<el-divider content-position="left">审批人拒绝时</el-divider>
200201
<el-form-item prop="rejectHandlerType">
201202
<el-radio-group v-model="configForm.rejectHandlerType">
@@ -206,7 +207,6 @@
206207
</div>
207208
</el-radio-group>
208209
</el-form-item>
209-
210210
<el-form-item
211211
v-if="configForm.rejectHandlerType == RejectHandlerType.RETURN_USER_TASK"
212212
label="驳回节点"
@@ -221,6 +221,7 @@
221221
/>
222222
</el-select>
223223
</el-form-item>
224+
224225
<el-divider content-position="left">审批人超时未处理时</el-divider>
225226
<el-form-item label="启用开关" prop="timeoutHandlerEnable">
226227
<el-switch
@@ -281,6 +282,37 @@
281282
<el-input-number v-model="configForm.maxRemindCount" :min="1" :max="10" />
282283
</el-form-item>
283284

285+
<el-divider content-position="left">审批人为空时</el-divider>
286+
<el-form-item prop="assignEmptyHandlerType">
287+
<el-radio-group v-model="configForm.assignEmptyHandlerType">
288+
<div class="flex-col">
289+
<div v-for="(item, index) in ASSIGN_EMPTY_HANDLER_TYPES" :key="index">
290+
<el-radio :key="item.value" :value="item.value" :label="item.label" />
291+
</div>
292+
</div>
293+
</el-radio-group>
294+
</el-form-item>
295+
<el-form-item
296+
v-if="configForm.assignEmptyHandlerType == AssignEmptyHandlerType.ASSIGN_USER"
297+
label="指定用户"
298+
prop="assignEmptyHandlerUserIds"
299+
span="24"
300+
>
301+
<el-select
302+
v-model="configForm.assignEmptyHandlerUserIds"
303+
clearable
304+
multiple
305+
style="width: 100%"
306+
>
307+
<el-option
308+
v-for="item in userOptions"
309+
:key="item.id"
310+
:label="item.nickname"
311+
:value="item.id"
312+
/>
313+
</el-select>
314+
</el-form-item>
315+
284316
<el-divider content-position="left">审批人与提交人为同一人时</el-divider>
285317
<el-form-item prop="assignStartUserHandlerType">
286318
<el-radio-group v-model="configForm.assignStartUserHandlerType">
@@ -384,7 +416,9 @@ import {
384416
MULTI_LEVEL_DEPT,
385417
CANDIDATE_STRATEGY,
386418
ASSIGN_START_USER_HANDLER_TYPES,
387-
TimeoutHandlerType
419+
TimeoutHandlerType,
420+
ASSIGN_EMPTY_HANDLER_TYPES,
421+
AssignEmptyHandlerType
388422
} from '../consts'
389423
390424
import {
@@ -450,7 +484,10 @@ const formRules = reactive({
450484
timeoutHandlerEnable: [{ required: true }],
451485
timeoutHandlerType: [{ required: true }],
452486
timeDuration: [{ required: true, message: '超时时间不能为空', trigger: 'blur' }],
453-
maxRemindCount: [{ required: true, message: '提醒次数不能为空', trigger: 'blur' }]
487+
maxRemindCount: [{ required: true, message: '提醒次数不能为空', trigger: 'blur' }],
488+
assignEmptyHandlerType: [{ required: true }],
489+
assignEmptyHandlerUserIds: [{ required: true, message: '用户不能为空', trigger: 'change' }],
490+
assignStartUserHandlerType: [{ required: true }]
454491
})
455492
456493
const {
@@ -549,7 +586,15 @@ const saveConfig = async () => {
549586
timeDuration: isoTimeDuration.value,
550587
maxRemindCount: cTimeoutMaxRemindCount.value
551588
}
552-
// 设置用户任务的审批人与发起人相同时
589+
// 设置审批人为空时
590+
currentNode.value.assignEmptyHandler = {
591+
type: configForm.value.assignEmptyHandlerType!,
592+
userIds:
593+
configForm.value.assignEmptyHandlerType === AssignEmptyHandlerType.ASSIGN_USER
594+
? configForm.value.assignEmptyHandlerUserIds
595+
: undefined
596+
}
597+
// 设置审批人与发起人相同时
553598
currentNode.value.assignStartUserHandlerType = configForm.value.assignStartUserHandlerType
554599
// 设置表单权限
555600
currentNode.value.fieldsPermission = fieldsPermissionConfig.value
@@ -573,7 +618,7 @@ const showUserTaskNodeConfig = (node: SimpleFlowNode) => {
573618
} else {
574619
notAllowedMultiApprovers.value = false
575620
}
576-
//1.2 设置审批方式
621+
// 1.2 设置审批方式
577622
configForm.value.approveMethod = node.approveMethod!
578623
if (node.approveMethod == ApproveMethodType.APPROVE_BY_RATIO) {
579624
configForm.value.approveRatio = node.approveRatio!
@@ -595,7 +640,10 @@ const showUserTaskNodeConfig = (node: SimpleFlowNode) => {
595640
}
596641
configForm.value.timeoutHandlerType = node.timeoutHandler?.type
597642
configForm.value.maxRemindCount = node.timeoutHandler?.maxRemindCount
598-
// 1.5 设置用户任务的审批人与发起人相同时
643+
// 1.5 设置审批人为空时
644+
configForm.value.assignEmptyHandlerType = node.assignEmptyHandler?.type
645+
configForm.value.assignEmptyHandlerUserIds = node.assignEmptyHandler?.userIds
646+
// 1.6 设置用户任务的审批人与发起人相同时
599647
configForm.value.assignStartUserHandlerType = node.assignStartUserHandlerType
600648
// 2. 操作按钮设置
601649
buttonsSetting.value = cloneDeep(node.buttonsSetting) || DEFAULT_BUTTON_SETTING

0 commit comments

Comments
 (0)