@@ -106,7 +106,8 @@ defineOptions({ name: 'ElementMultiInstance' })
106
106
107
107
const props = defineProps ({
108
108
businessObject: Object ,
109
- type: String
109
+ type: String ,
110
+ id: String
110
111
})
111
112
const prefix = inject (' prefix' )
112
113
const loopCharacteristics = ref (' ' )
@@ -296,25 +297,17 @@ const changeConfig = (config) => {
296
297
/**
297
298
* -----新版本多实例-----
298
299
*/
299
- const approveMethod = ref (1 )
300
+ const approveMethod = ref ()
300
301
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
- }
302
+ const otherExtensions = ref ()
303
+ const getElementLoopNew = () => {
304
+ const extensionElements = bpmnElement .value .businessObject ?.extensionElements ?? []
305
+ approveMethod .value = extensionElements .values .filter (
306
+ (ex ) => ex .$type === ` ${prefix }:ApproveMethod `
307
+ )?.[0 ]?.value
308
+
309
+ otherExtensions .value =
310
+ extensionElements .values .filter ((ex ) => ex .$type !== ` ${prefix }:ApproveMethod ` ) ?? []
318
311
}
319
312
const onApproveMethodChange = () => {
320
313
approveRatio .value = 100
@@ -324,57 +317,70 @@ const onApproveRatioChange = () => {
324
317
updateLoopCharacteristics ()
325
318
}
326
319
const updateLoopCharacteristics = () => {
320
+ // 根据ApproveMethod生成multiInstanceLoopCharacteristics节点
327
321
if (approveMethod .value === ApproveMethodType .RANDOM_SELECT_ONE_APPROVE ) {
328
322
bpmnInstances ().modeling .updateProperties (toRaw (bpmnElement .value ), {
329
323
loopCharacteristics: null
330
324
})
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
- )
325
+ } else {
326
+ if (approveMethod .value === ApproveMethodType .APPROVE_BY_RATIO ) {
327
+ multiLoopInstance .value = bpmnInstances ().moddle .create (
328
+ ' bpmn:MultiInstanceLoopCharacteristics' ,
329
+ { isSequential: false , collection: ' ${coll_userList}' }
330
+ )
331
+ multiLoopInstance .value .completionCondition = bpmnInstances ().moddle .create (
332
+ ' bpmn:FormalExpression' ,
333
+ {
334
+ body: ' ${ nrOfCompletedInstances/nrOfInstances >= ' + approveRatio .value / 100 + ' }'
335
+ }
336
+ )
337
+ }
338
+ if (approveMethod .value === ApproveMethodType .ANY_APPROVE ) {
339
+ multiLoopInstance .value = bpmnInstances ().moddle .create (
340
+ ' bpmn:MultiInstanceLoopCharacteristics' ,
341
+ { isSequential: false , collection: ' ${coll_userList}' }
342
+ )
343
+ multiLoopInstance .value .completionCondition = bpmnInstances ().moddle .create (
344
+ ' bpmn:FormalExpression' ,
345
+ {
346
+ body: ' ${ nrOfCompletedInstances > 0 }'
347
+ }
348
+ )
349
+ }
350
+ if (approveMethod .value === ApproveMethodType .SEQUENTIAL_APPROVE ) {
351
+ multiLoopInstance .value = bpmnInstances ().moddle .create (
352
+ ' bpmn:MultiInstanceLoopCharacteristics' ,
353
+ { isSequential: true , collection: ' ${coll_userList}' }
354
+ )
355
+ multiLoopInstance .value .loopCardinality = bpmnInstances ().moddle .create (
356
+ ' bpmn:FormalExpression' ,
357
+ {
358
+ body: ' 1'
359
+ }
360
+ )
361
+ multiLoopInstance .value .completionCondition = bpmnInstances ().moddle .create (
362
+ ' bpmn:FormalExpression' ,
363
+ {
364
+ body: ' ${ nrOfCompletedInstances >= nrOfInstances }'
365
+ }
366
+ )
367
+ }
368
+ bpmnInstances ().modeling .updateProperties (toRaw (bpmnElement .value ), {
369
+ loopCharacteristics: toRaw (multiLoopInstance .value )
370
+ })
374
371
}
375
372
373
+ // 添加ApproveMethod到ExtensionElements
374
+ const extensions = bpmnInstances ().moddle .create (' bpmn:ExtensionElements' , {
375
+ values: [
376
+ ... otherExtensions .value ,
377
+ bpmnInstances ().moddle .create (` ${prefix }:ApproveMethod ` , {
378
+ value: approveMethod .value
379
+ })
380
+ ]
381
+ })
376
382
bpmnInstances ().modeling .updateProperties (toRaw (bpmnElement .value ), {
377
- loopCharacteristics: toRaw ( multiLoopInstance . value )
383
+ extensionElements: extensions
378
384
})
379
385
}
380
386
@@ -384,11 +390,15 @@ onBeforeUnmount(() => {
384
390
})
385
391
386
392
watch (
387
- () => props .businessObject ,
393
+ () => props .id ,
388
394
(val ) => {
389
- bpmnElement .value = bpmnInstances ().bpmnElement
390
- // getElementLoop(val)
391
- getElementLoopNew (val )
395
+ if (val ) {
396
+ nextTick (() => {
397
+ bpmnElement .value = bpmnInstances ().bpmnElement
398
+ // getElementLoop(val)
399
+ getElementLoopNew ()
400
+ })
401
+ }
392
402
},
393
403
{ immediate: true }
394
404
)
0 commit comments