Skip to content

Commit 00a19cf

Browse files
committed
feat: bpm设计器适配Simple设计器,审批人为空时
1 parent 1d4339f commit 00a19cf

File tree

2 files changed

+110
-2
lines changed

2 files changed

+110
-2
lines changed

src/components/bpmnProcessDesigner/package/designer/plugins/descriptor/flowableDescriptor.json

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1253,6 +1253,34 @@
12531253
"isBody": true
12541254
}
12551255
]
1256+
},
1257+
{
1258+
"name": "AssignEmptyHandlerType",
1259+
"superClass": ["Element"],
1260+
"meta": {
1261+
"allowedIn": ["bpmn:UserTask"]
1262+
},
1263+
"properties": [
1264+
{
1265+
"name": "value",
1266+
"type": "Integer",
1267+
"isBody": true
1268+
}
1269+
]
1270+
},
1271+
{
1272+
"name": "AssignEmptyUserIds",
1273+
"superClass": ["Element"],
1274+
"meta": {
1275+
"allowedIn": ["bpmn:UserTask"]
1276+
},
1277+
"properties": [
1278+
{
1279+
"name": "value",
1280+
"type": "String",
1281+
"isBody": true
1282+
}
1283+
]
12561284
}
12571285
],
12581286
"emumerations": []

src/components/bpmnProcessDesigner/package/penal/custom-config/ElementCustomConfig.vue

Lines changed: 82 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<!-- UserTask 自定义配置:
22
1. 审批人与提交人为同一人时
33
2. 审批人拒绝时
4+
3. 审批人为空时
45
-->
56
<template>
67
<div class="panel-tab__content">
@@ -33,6 +34,38 @@
3334
</el-select>
3435
</el-form-item>
3536

37+
<el-divider content-position="left">审批人为空时</el-divider>
38+
<el-form-item prop="assignEmptyHandlerType">
39+
<el-radio-group v-model="assignEmptyHandlerType" @change="updateAssignEmptyHandlerType">
40+
<div class="flex-col">
41+
<div v-for="(item, index) in ASSIGN_EMPTY_HANDLER_TYPES" :key="index">
42+
<el-radio :key="item.value" :value="item.value" :label="item.label" />
43+
</div>
44+
</div>
45+
</el-radio-group>
46+
</el-form-item>
47+
<el-form-item
48+
v-if="assignEmptyHandlerType == AssignEmptyHandlerType.ASSIGN_USER"
49+
label="指定用户"
50+
prop="assignEmptyHandlerUserIds"
51+
span="24"
52+
>
53+
<el-select
54+
v-model="assignEmptyUserIds"
55+
clearable
56+
multiple
57+
style="width: 100%"
58+
@change="updateAssignEmptyUserIds"
59+
>
60+
<el-option
61+
v-for="item in userOptions"
62+
:key="item.id"
63+
:label="item.nickname"
64+
:value="item.id"
65+
/>
66+
</el-select>
67+
</el-form-item>
68+
3669
<el-divider content-position="left">审批人与提交人为同一人时</el-divider>
3770
<el-radio-group v-model="assignStartUserHandlerType" @change="updateAssignStartUserHandlerType">
3871
<div class="flex-col">
@@ -48,8 +81,11 @@
4881
import {
4982
ASSIGN_START_USER_HANDLER_TYPES,
5083
RejectHandlerType,
51-
REJECT_HANDLER_TYPES
84+
REJECT_HANDLER_TYPES,
85+
ASSIGN_EMPTY_HANDLER_TYPES,
86+
AssignEmptyHandlerType
5287
} from '@/components/SimpleProcessDesignerV2/src/consts'
88+
import * as UserApi from '@/api/system/user'
5389
5490
defineOptions({ name: 'ElementCustomConfig' })
5591
const props = defineProps({
@@ -69,6 +105,12 @@ const returnNodeIdEl = ref()
69105
const returnNodeId = ref()
70106
const returnTaskList = ref([])
71107
108+
// 审批人为空时
109+
const assignEmptyHandlerTypeEl = ref()
110+
const assignEmptyHandlerType = ref()
111+
const assignEmptyUserIdsEl = ref()
112+
const assignEmptyUserIds = ref()
113+
72114
const elExtensionElements = ref()
73115
const otherExtensions = ref()
74116
const bpmnElement = ref()
@@ -107,13 +149,31 @@ const resetCustomConfigList = () => {
107149
)?.[0] || bpmnInstances().moddle.create(`${prefix}:RejectReturnTaskId`, { value: '' })
108150
returnNodeId.value = returnNodeIdEl.value.value
109151
152+
// 审批人为空时
153+
assignEmptyHandlerTypeEl.value =
154+
elExtensionElements.value.values?.filter(
155+
(ex) => ex.$type === `${prefix}:AssignEmptyHandlerType`
156+
)?.[0] || bpmnInstances().moddle.create(`${prefix}:AssignEmptyHandlerType`, { value: 1 })
157+
assignEmptyHandlerType.value = assignEmptyHandlerTypeEl.value.value
158+
assignEmptyUserIdsEl.value =
159+
elExtensionElements.value.values?.filter(
160+
(ex) => ex.$type === `${prefix}:AssignEmptyUserIds`
161+
)?.[0] || bpmnInstances().moddle.create(`${prefix}:AssignEmptyUserIds`, { value: '' })
162+
assignEmptyUserIds.value = assignEmptyUserIdsEl.value.value.split(',').map((item) => {
163+
// 如果数字超出了最大安全整数范围,则将其作为字符串处理
164+
let num = Number(item)
165+
return num > Number.MAX_SAFE_INTEGER || num < -Number.MAX_SAFE_INTEGER ? item : num
166+
})
167+
110168
// 保留剩余扩展元素,便于后面更新该元素对应属性
111169
otherExtensions.value =
112170
elExtensionElements.value.values?.filter(
113171
(ex) =>
114172
ex.$type !== `${prefix}:AssignStartUserHandlerType` &&
115173
ex.$type !== `${prefix}:RejectHandlerType` &&
116-
ex.$type !== `${prefix}:RejectReturnTaskId`
174+
ex.$type !== `${prefix}:RejectReturnTaskId` &&
175+
ex.$type !== `${prefix}:AssignEmptyHandlerType` &&
176+
ex.$type !== `${prefix}:AssignEmptyUserIds`
117177
) ?? []
118178
119179
// 更新元素扩展属性,避免后续报错
@@ -141,13 +201,27 @@ const updateReturnNodeId = () => {
141201
updateElementExtensions()
142202
}
143203
204+
const updateAssignEmptyHandlerType = () => {
205+
assignEmptyHandlerTypeEl.value.value = assignEmptyHandlerType.value
206+
207+
updateElementExtensions()
208+
}
209+
210+
const updateAssignEmptyUserIds = () => {
211+
assignEmptyUserIdsEl.value.value = assignEmptyUserIds.value.toString()
212+
213+
updateElementExtensions()
214+
}
215+
144216
const updateElementExtensions = () => {
145217
const extensions = bpmnInstances().moddle.create('bpmn:ExtensionElements', {
146218
values: [
147219
...otherExtensions.value,
148220
assignStartUserHandlerTypeEl.value,
149221
rejectHandlerTypeEl.value,
150222
returnNodeIdEl.value,
223+
assignEmptyHandlerTypeEl.value,
224+
assignEmptyUserIdsEl.value
151225
]
152226
})
153227
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
@@ -200,4 +274,10 @@ function findAllPredecessorsExcludingStart(elementId, modeler) {
200274
201275
return Array.from(predecessors) // 返回前置节点数组
202276
}
277+
278+
const userOptions = ref<UserApi.UserVO[]>([]) // 用户列表
279+
onMounted(async () => {
280+
// 获得用户列表
281+
userOptions.value = await UserApi.getSimpleUserList()
282+
})
203283
</script>

0 commit comments

Comments
 (0)