Skip to content

Commit 6e077ac

Browse files
committed
feat: BPM设计器适配Simple设计器,多实例
1 parent 557bc29 commit 6e077ac

File tree

1 file changed

+114
-2
lines changed

1 file changed

+114
-2
lines changed

src/components/bpmnProcessDesigner/package/penal/multi-instance/ElementMultiInstance.vue

Lines changed: 114 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,30 @@
11
<template>
22
<div class="panel-tab__content">
3-
<el-form label-width="90px">
3+
<el-radio-group v-model="approveMethod" @change="onApproveMethodChange">
4+
<div class="flex-col">
5+
<div v-for="(item, index) in APPROVE_METHODS" :key="index">
6+
<el-radio :value="item.value" :label="item.value">
7+
{{ item.label }}
8+
</el-radio>
9+
<el-form-item prop="approveRatio">
10+
<el-input-number
11+
v-model="approveRatio"
12+
:min="10"
13+
:max="100"
14+
:step="10"
15+
size="small"
16+
v-if="
17+
item.value === ApproveMethodType.APPROVE_BY_RATIO &&
18+
approveMethod === ApproveMethodType.APPROVE_BY_RATIO
19+
"
20+
@change="onApproveRatioChange"
21+
/>
22+
</el-form-item>
23+
</div>
24+
</div>
25+
</el-radio-group>
26+
<!-- 与Simple设计器配置合并,保留以前的代码 -->
27+
<el-form label-width="90px" style="display: none">
428
<el-form-item label="快捷配置">
529
<el-button size="small" @click="changeConfig('依次审批')">依次审批</el-button>
630
<el-button size="small" @click="changeConfig('会签')">会签</el-button>
@@ -76,6 +100,8 @@
76100
</template>
77101

78102
<script lang="ts" setup>
103+
import { ApproveMethodType, APPROVE_METHODS } from '@/components/SimpleProcessDesignerV2/src/consts'
104+
79105
defineOptions({ name: 'ElementMultiInstance' })
80106
81107
const props = defineProps({
@@ -267,6 +293,91 @@ const changeConfig = (config) => {
267293
}
268294
}
269295
296+
/**
297+
* -----新版本多实例-----
298+
*/
299+
const approveMethod = ref(1)
300+
const approveRatio = ref(100)
301+
const getElementLoopNew = ({ loopCharacteristics }) => {
302+
if (!loopCharacteristics) {
303+
approveMethod.value = ApproveMethodType.RANDOM_SELECT_ONE_APPROVE
304+
return
305+
}
306+
if (loopCharacteristics.isSequential) {
307+
approveMethod.value = ApproveMethodType.SEQUENTIAL_APPROVE
308+
} else {
309+
if (loopCharacteristics.completionCondition.body === '${ nrOfCompletedInstances > 0 }') {
310+
approveMethod.value = ApproveMethodType.ANY_APPROVE
311+
}
312+
if (
313+
loopCharacteristics.completionCondition.body.includes('nrOfCompletedInstances/nrOfInstances')
314+
) {
315+
approveMethod.value = ApproveMethodType.APPROVE_BY_RATIO
316+
}
317+
}
318+
}
319+
const onApproveMethodChange = () => {
320+
approveRatio.value = 100
321+
updateLoopCharacteristics()
322+
}
323+
const onApproveRatioChange = () => {
324+
updateLoopCharacteristics()
325+
}
326+
const updateLoopCharacteristics = () => {
327+
if (approveMethod.value === ApproveMethodType.RANDOM_SELECT_ONE_APPROVE) {
328+
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
329+
loopCharacteristics: null
330+
})
331+
return
332+
}
333+
if (approveMethod.value === ApproveMethodType.APPROVE_BY_RATIO) {
334+
multiLoopInstance.value = bpmnInstances().moddle.create(
335+
'bpmn:MultiInstanceLoopCharacteristics',
336+
{ isSequential: false, collection: '${coll_userList}' }
337+
)
338+
multiLoopInstance.value.completionCondition = bpmnInstances().moddle.create(
339+
'bpmn:FormalExpression',
340+
{
341+
body: '${ nrOfCompletedInstances/nrOfInstances >= ' + approveRatio.value / 100 + '}'
342+
}
343+
)
344+
}
345+
if (approveMethod.value === ApproveMethodType.ANY_APPROVE) {
346+
multiLoopInstance.value = bpmnInstances().moddle.create(
347+
'bpmn:MultiInstanceLoopCharacteristics',
348+
{ isSequential: false, collection: '${coll_userList}' }
349+
)
350+
multiLoopInstance.value.completionCondition = bpmnInstances().moddle.create(
351+
'bpmn:FormalExpression',
352+
{
353+
body: '${ nrOfCompletedInstances > 0 }'
354+
}
355+
)
356+
}
357+
if (approveMethod.value === ApproveMethodType.SEQUENTIAL_APPROVE) {
358+
multiLoopInstance.value = bpmnInstances().moddle.create(
359+
'bpmn:MultiInstanceLoopCharacteristics',
360+
{ isSequential: true, collection: '${coll_userList}' }
361+
)
362+
multiLoopInstance.value.loopCardinality = bpmnInstances().moddle.create(
363+
'bpmn:FormalExpression',
364+
{
365+
body: '1'
366+
}
367+
)
368+
multiLoopInstance.value.completionCondition = bpmnInstances().moddle.create(
369+
'bpmn:FormalExpression',
370+
{
371+
body: '${ nrOfCompletedInstances >= nrOfInstances }'
372+
}
373+
)
374+
}
375+
376+
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
377+
loopCharacteristics: toRaw(multiLoopInstance.value)
378+
})
379+
}
380+
270381
onBeforeUnmount(() => {
271382
multiLoopInstance.value = null
272383
bpmnElement.value = null
@@ -276,7 +387,8 @@ watch(
276387
() => props.businessObject,
277388
(val) => {
278389
bpmnElement.value = bpmnInstances().bpmnElement
279-
getElementLoop(val)
390+
// getElementLoop(val)
391+
getElementLoopNew(val)
280392
},
281393
{ immediate: true }
282394
)

0 commit comments

Comments
 (0)