Kaynağa Gözat

update 新增池/参与者面板

LiuHao 1 yıl önce
ebeveyn
işleme
1c0e614d7d

+ 8 - 2
src/components/BpmnDesign/assets/lang/zh.ts

@@ -16,7 +16,12 @@ export const NodeName = {
   'bpmn:ParallelGateway': '并行网关',
   'bpmn:InclusiveGateway': '相容网关',
   'bpmn:ComplexGateway': '复杂网关',
-  'bpmn:EventBasedGateway': '事件网关'
+  'bpmn:EventBasedGateway': '事件网关',
+  'bpmn:Participant': '池/参与者',
+  'bpmn:SubProcess': '子流程',
+  'bpmn:DataObjectReference': '数据对象引用',
+  'bpmn:DataStoreReference': '数据存储引用',
+  'bpmn:Group': '组'
 };
 
 export default {
@@ -114,5 +119,6 @@ export default {
   'Append message intermediate catch event': '追加中间消息捕获事件',
   'Append timer intermediate catch event': '追加中间定时捕获事件',
   'Append conditional intermediate catch event': '追加中间条件捕获事件',
-  'Append signal intermediate catch event': '追加中间信号捕获事件'
+  'Append signal intermediate catch event': '追加中间信号捕获事件',
+  'flow elements must be children of pools/participants': '流程元素必须是池/参与者的子元素'
 };

+ 51 - 0
src/components/BpmnDesign/assets/style/index.scss

@@ -227,4 +227,55 @@
       opacity: 0.8;
     }
   }
+  .bpmn-icon-data-object {
+    &:hover {
+      &:after {
+        content: '创建数据对象';
+        position: absolute;
+        left: 45px;
+        width: 120px;
+        font-size: 15px;
+        font-weight: bold;
+        color: #3a84de;
+        border-radius: 2px;
+        border: 1px solid #cccccc;
+        background-color: #fafafa;
+        opacity: 0.8;
+      }
+    }
+  }
+  .bpmn-icon-data-store {
+    &:hover {
+      &:after {
+        content: '创建数据存储';
+        position: absolute;
+        left: 100px;
+        width: 120px;
+        font-size: 15px;
+        font-weight: bold;
+        color: #3a84de;
+        border-radius: 2px;
+        border: 1px solid #cccccc;
+        background-color: #fafafa;
+        opacity: 0.8;
+      }
+    }
+  }
+  .bpmn-icon-group {
+    &:hover {
+      &:after {
+        content: '创建分组';
+        position: absolute;
+        left: 100px;
+        width: 100px;
+        font-size: 15px;
+        font-weight: bold;
+        color: #3a84de;
+        border-radius: 2px;
+        border: 1px solid #cccccc;
+        background-color: #fafafa;
+        opacity: 0.8;
+      }
+    }
+  }
 }

+ 40 - 0
src/components/BpmnDesign/panel/ParticipantPanel.vue

@@ -0,0 +1,40 @@
+<template>
+  <div>
+    <el-form ref="formRef" :model="formData" :rules="formRules" label-width="80px">
+      <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-item label="执行监听器" style="margin-bottom: 0"> </el-form-item>
+      <ExecutionListener :element="element"></ExecutionListener>
+    </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';
+
+interface PropType {
+  element: ModdleElement;
+}
+const props = withDefaults(defineProps<PropType>(), {});
+const { nameChange, idChange } = usePanel({
+  element: toRaw(props.element)
+});
+const { parseData } = useParseElement({
+  element: toRaw(props.element)
+});
+
+const formData = ref(parseData<StartEndPanel>());
+
+const formRules = ref<ElFormRules>({
+  id: [{ required: true, message: '请输入', trigger: 'blur' }],
+  name: [{ required: true, message: '请输入', trigger: 'blur' }]
+});
+</script>
+
+<style lang="scss" scoped></style>

+ 2 - 0
src/components/BpmnDesign/panel/index.vue

@@ -11,6 +11,7 @@ import ProcessPanel from './ProcessPanel.vue';
 import StartEndPanel from './StartEndPanel.vue';
 import GatewayPanel from './GatewayPanel.vue';
 import SequenceFlowPanel from './SequenceFlowPanel.vue';
+import ParticipantPanel from './ParticipantPanel.vue';
 import { Modeler, ModdleElement } from 'bpmn';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 interface propsType {
@@ -45,6 +46,7 @@ const component = computed(() => {
   if (sequenceType.includes(type)) return SequenceFlowPanel;
   if (gatewayType.includes(type)) return GatewayPanel;
   if (processType.includes(type)) return ProcessPanel;
+  if (type === 'bpmn:Participant') return ParticipantPanel;
   //return proxy?.$modal.msgWarning('面板开发中....');
 });