From 4253b2afbb0307a9a92e0a053b0e4757558252e1 Mon Sep 17 00:00:00 2001
From: LiuHao <liuhaoai545@gmail.com>
Date: 星期一, 18 三月 2024 14:19:30 +0800
Subject: [PATCH] update 增加子流程多实例
---
src/components/BpmnDesign/panel/SubProcessPanel.vue | 192 +++++++++++++++++++++++++++++++++++++++--------
1 files changed, 159 insertions(+), 33 deletions(-)
diff --git a/src/components/BpmnDesign/panel/SubProcessPanel.vue b/src/components/BpmnDesign/panel/SubProcessPanel.vue
index cf32fc6..0310072 100644
--- a/src/components/BpmnDesign/panel/SubProcessPanel.vue
+++ b/src/components/BpmnDesign/panel/SubProcessPanel.vue
@@ -1,62 +1,188 @@
<template>
<div>
- <el-collapse v-model="currentCollapseItem">
- <el-collapse-item name="1">
- <template #title>
- <div class="collapse__title">
- <el-icon>
- <InfoFilled />
- </el-icon>
- 甯歌
- </div>
- </template>
- <div>
- <el-form ref="formRef" :model="formData" :rules="formRules" label-width="90px">
+ <el-form ref="formRef" :model="formData" :rules="formRules" label-width="90px">
+ <el-collapse v-model="currentCollapseItem">
+ <el-collapse-item name="1">
+ <template #title>
+ <div class="collapse__title">
+ <el-icon>
+ <InfoFilled />
+ </el-icon>
+ 甯歌
+ </div>
+ </template>
+ <div>
<el-form-item prop="id" label="鑺傜偣 ID">
<el-input v-model="formData.id" @change="idChange"> </el-input>
</el-form-item>
<el-form-item prop="name" label="鑺傜偣鍚嶇О">
<el-input v-model="formData.name" @change="nameChange"> </el-input>
</el-form-item>
- </el-form>
- </div>
- </el-collapse-item>
-
- <el-collapse-item name="2">
- <template #title>
- <div class="collapse__title">
- <el-icon>
- <BellFilled />
- </el-icon>
- 鎵ц鐩戝惉鍣�
</div>
- </template>
- <div>
- <ExecutionListener :element="element"></ExecutionListener>
- </div>
- </el-collapse-item>
- </el-collapse>
+ </el-collapse-item>
+
+ <el-collapse-item name="2">
+ <template #title>
+ <div class="collapse__title">
+ <el-icon>
+ <BellFilled />
+ </el-icon>
+ 鎵ц鐩戝惉鍣�
+ </div>
+ </template>
+ <div>
+ <ExecutionListener :element="element"></ExecutionListener>
+ </div>
+ </el-collapse-item>
+ <el-collapse-item name="3">
+ <template #title>
+ <div class="collapse__title">
+ <el-icon>
+ <HelpFilled />
+ </el-icon>
+ 澶氬疄渚�
+ </div>
+ </template>
+ <div>
+ <el-form-item label="澶氬疄渚嬬被鍨�">
+ <el-select v-model="formData.multiInstanceType" @change="multiInstanceTypeChange">
+ <el-option v-for="item in constant.MultiInstanceType" :key="item.id" :value="item.value" :label="item.label"> </el-option>
+ </el-select>
+ </el-form-item>
+
+ <div v-if="formData.multiInstanceType !== MultiInstanceTypeEnum.NONE">
+ <el-form-item label="闆嗗悎">
+ <template #label>
+ <span>
+ 闆嗗悎
+ <el-tooltip placement="top">
+ <el-icon><QuestionFilled /></el-icon>
+ <template #content>
+ 灞炴�т細浣滀负琛ㄨ揪寮忚繘琛岃В鏋愩�傚鏋滆〃杈惧紡瑙f瀽涓哄瓧绗︿覆鑰屼笉鏄竴涓泦鍚堬紝<br />
+ 涓嶈鏄洜涓烘湰韬厤缃殑灏辨槸闈欐�佸瓧绗︿覆鍊硷紝杩樻槸琛ㄨ揪寮忚绠楃粨鏋滀负瀛楃涓诧紝<br />
+ 杩欎釜瀛楃涓查兘浼氳褰撳仛鍙橀噺鍚嶏紝骞朵粠娴佺▼鍙橀噺涓敤浜庤幏鍙栧疄闄呯殑闆嗗悎銆�
+ </template>
+ </el-tooltip>
+ </span>
+ </template>
+ <el-input v-model="formData.collection" @change="collectionChange"></el-input>
+ </el-form-item>
+ <el-form-item label="鍏冪礌鍙橀噺">
+ <template #label>
+ <span>
+ 鍏冪礌鍙橀噺
+ <el-tooltip placement="top">
+ <el-icon><QuestionFilled /></el-icon>
+ <template #content>
+ 姣忓垱寤轰竴涓敤鎴蜂换鍔″墠锛屽厛浠ヨ鍏冪礌鍙橀噺涓簂abel锛岄泦鍚堜腑鐨勪竴椤逛负value锛�<br />
+ 鍒涘缓锛堝眬閮級娴佺▼鍙橀噺锛岃灞�閮ㄦ祦绋嬪彉閲忚鐢ㄤ簬鎸囨淳鐢ㄦ埛浠诲姟銆�<br />
+ 涓�鑸潵璇达紝璇ュ瓧绗︿覆搴斾笌鎸囧畾浜哄憳鍙橀噺鐩稿悓銆�
+ </template>
+ </el-tooltip>
+ </span>
+ </template>
+ <el-input v-model="formData.elementVariable" @change="elementVariableChange"> </el-input>
+ </el-form-item>
+ <el-form-item label="瀹屾垚鏉′欢">
+ <template #label>
+ <span>
+ 瀹屾垚鏉′欢
+ <el-tooltip placement="top">
+ <el-icon><QuestionFilled /></el-icon>
+ <template #content>
+ 澶氬疄渚嬫椿鍔ㄥ湪鎵�鏈夊疄渚嬮兘瀹屾垚鏃剁粨鏉燂紝鐒惰�屼篃鍙互鎸囧畾涓�涓〃杈惧紡锛屽湪姣忎釜瀹炰緥<br />
+ 缁撴潫鏃惰繘琛岃绠椼�傚綋琛ㄨ揪寮忚绠椾负true鏃讹紝灏嗛攢姣佹墍鏈夊墿浣欑殑瀹炰緥锛屽苟缁撴潫澶氬疄渚�<br />
+ 娲诲姩锛岀户缁墽琛屾祦绋嬨�備緥濡� ${nrOfCompletedInstances/nrOfInstances >= 0.6 }锛�<br />
+ 琛ㄧず褰撲换鍔″畬鎴�60%鏃讹紝璇ヨ妭鐐瑰氨绠楀畬鎴�
+ </template>
+ </el-tooltip>
+ </span>
+ </template>
+ <el-input v-model="formData.completionCondition" @change="completionConditionChange"> </el-input>
+ </el-form-item>
+ </div>
+ </div>
+ </el-collapse-item>
+ </el-collapse>
+ </el-form>
</div>
</template>
<script setup lang="ts">
import useParseElement from '@/components/BpmnDesign/hooks/useParseElement';
import usePanel from '@/components/BpmnDesign/hooks/usePanel';
import { ModdleElement } from 'bpmn';
-import { StartEndPanel } from 'bpmnDesign';
+import { SubProcessPanel } from 'bpmnDesign';
+import { MultiInstanceTypeEnum } from '@/enums/bpmn/IndexEnums';
interface PropType {
element: ModdleElement;
}
const props = withDefaults(defineProps<PropType>(), {});
-const { nameChange, idChange } = usePanel({
+const { nameChange, idChange, updateProperties, createModdleElement, constant } = usePanel({
element: toRaw(props.element)
});
const { parseData } = useParseElement({
element: toRaw(props.element)
});
-const formData = ref(parseData<StartEndPanel>());
-const currentCollapseItem = ref(['1', '2']);
+const formData = ref(parseData<SubProcessPanel>());
+const currentCollapseItem = ref(['1', '2', '3']);
+
+const multiInstanceTypeChange = (newVal) => {
+ if (newVal !== MultiInstanceTypeEnum.NONE) {
+ let loopCharacteristics = props.element.businessObject.get('loopCharacteristics');
+ if (!loopCharacteristics) {
+ loopCharacteristics = createModdleElement('bpmn:MultiInstanceLoopCharacteristics', {}, props.element.businessObject);
+ }
+ loopCharacteristics.isSequential = newVal === MultiInstanceTypeEnum.SERIAL;
+ updateProperties({ loopCharacteristics: loopCharacteristics });
+ } else {
+ updateProperties({ loopCharacteristics: undefined });
+ }
+};
+const collectionChange = (newVal) => {
+ let loopCharacteristics = props.element.businessObject.get('loopCharacteristics');
+ if (!loopCharacteristics) {
+ loopCharacteristics = createModdleElement('bpmn:MultiInstanceLoopCharacteristics', {}, props.element.businessObject);
+ }
+ loopCharacteristics.collection = newVal && newVal.length > 0 ? newVal : undefined;
+ updateProperties({ loopCharacteristics: loopCharacteristics });
+};
+const elementVariableChange = (newVal) => {
+ let loopCharacteristics = props.element.businessObject.get('loopCharacteristics');
+ if (!loopCharacteristics) {
+ loopCharacteristics = createModdleElement('bpmn:MultiInstanceLoopCharacteristics', {}, props.element.businessObject);
+ }
+ loopCharacteristics.elementVariable = newVal && newVal.length > 0 ? newVal : undefined;
+ updateProperties({ loopCharacteristics: loopCharacteristics });
+};
+const completionConditionChange = (newVal) => {
+ let loopCharacteristics = props.element.businessObject.get<ModdleElement>('loopCharacteristics');
+ if (!loopCharacteristics) {
+ loopCharacteristics = createModdleElement('bpmn:MultiInstanceLoopCharacteristics', {}, props.element.businessObject);
+ }
+ if (newVal && newVal.length > 0) {
+ if (!loopCharacteristics.completionCondition) {
+ loopCharacteristics.completionCondition = createModdleElement('bpmn:Expression', { body: newVal }, loopCharacteristics);
+ } else {
+ loopCharacteristics.completionCondition.body = newVal;
+ }
+ } else {
+ loopCharacteristics.completionCondition = undefined;
+ }
+ updateProperties({ loopCharacteristics: loopCharacteristics });
+};
+
+onBeforeMount(() => {
+ if (formData.value.loopCharacteristics) {
+ const loopCharacteristics = formData.value.loopCharacteristics;
+ formData.value.collection = loopCharacteristics.collection || '';
+ formData.value.elementVariable = loopCharacteristics.elementVariable || '';
+ formData.value.completionCondition = loopCharacteristics.completionCondition?.body || '';
+ formData.value.multiInstanceType = loopCharacteristics.isSequential ? MultiInstanceTypeEnum.SERIAL : MultiInstanceTypeEnum.PARALLEL;
+ }
+});
+
const formRules = ref<ElFormRules>({
id: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }],
name: [{ required: true, message: '璇疯緭鍏�', trigger: 'blur' }]
--
Gitblit v1.9.3