From 6b988bd582bfcd17fee48c476a5a6e5cc172b0d5 Mon Sep 17 00:00:00 2001 From: baoshiwei <baoshiwei@shlanbao.cn> Date: 星期三, 12 三月 2025 10:08:33 +0800 Subject: [PATCH] dev-2 --- src/bpmn/panel/SubProcessPanel.vue | 193 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 193 insertions(+), 0 deletions(-) diff --git a/src/bpmn/panel/SubProcessPanel.vue b/src/bpmn/panel/SubProcessPanel.vue new file mode 100644 index 0000000..3490fff --- /dev/null +++ b/src/bpmn/panel/SubProcessPanel.vue @@ -0,0 +1,193 @@ +<template> + <div> + <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> + </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-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 ExecutionListener from './property/ExecutionListener.vue'; +import useParseElement from '../hooks/useParseElement'; +import usePanel from '../hooks/usePanel'; +import type { ModdleElement } from 'bpmn'; +import type { SubProcessPanel } from 'bpmnDesign'; +import { MultiInstanceTypeEnum } from '@/enums/bpmn/IndexEnums'; + +interface PropType { + element: ModdleElement; +} +const props = withDefaults(defineProps<PropType>(), {}); +const { nameChange, idChange, updateProperties, createModdleElement, constant } = usePanel({ + element: toRaw(props.element) +}); +const { parseData } = useParseElement({ + element: toRaw(props.element) +}); + +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' }] +}); +</script> + +<style lang="scss" scoped></style> -- Gitblit v1.9.3