From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目

---
 src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue |  125 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 125 insertions(+), 0 deletions(-)

diff --git a/src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue b/src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue
new file mode 100644
index 0000000..83ed24e
--- /dev/null
+++ b/src/components/bpmnProcessDesigner/package/penal/task/task-components/ReceiveTask.vue
@@ -0,0 +1,125 @@
+<template>
+  <div style="margin-top: 16px">
+    <el-form-item label="娑堟伅瀹炰緥">
+      <div
+        style="
+          display: flex;
+          align-items: center;
+          justify-content: space-between;
+          flex-wrap: nowrap;
+        "
+      >
+        <el-select v-model="bindMessageId" @change="updateTaskMessage">
+          <el-option
+            v-for="key in Object.keys(messageMap)"
+            :value="key"
+            :label="messageMap[key]"
+            :key="key"
+          />
+        </el-select>
+        <XButton
+          type="primary"
+          preIcon="ep:plus"
+          style="margin-left: 8px"
+          @click="openMessageModel"
+        />
+      </div>
+    </el-form-item>
+    <el-dialog
+      v-model="messageModelVisible"
+      :close-on-click-modal="false"
+      title="鍒涘缓鏂版秷鎭�"
+      width="400px"
+      append-to-body
+      destroy-on-close
+    >
+      <el-form :model="newMessageForm" size="small" label-width="90px">
+        <el-form-item label="娑堟伅ID">
+          <el-input v-model="newMessageForm.id" clearable />
+        </el-form-item>
+        <el-form-item label="娑堟伅鍚嶇О">
+          <el-input v-model="newMessageForm.name" clearable />
+        </el-form-item>
+      </el-form>
+      <template #footer>
+        <el-button size="small" type="primary" @click="createNewMessage">纭� 璁�</el-button>
+      </template>
+    </el-dialog>
+  </div>
+</template>
+
+<script lang="ts" setup>
+defineOptions({ name: 'ReceiveTask' })
+const props = defineProps({
+  id: String,
+  type: String
+})
+
+const message = useMessage()
+
+const bindMessageId = ref('')
+const newMessageForm = ref<any>({})
+const messageMap = ref<any>({})
+const messageModelVisible = ref(false)
+const bpmnElement = ref<any>()
+const bpmnMessageRefsMap = ref<any>()
+const bpmnRootElements = ref<any>()
+
+const bpmnInstances = () => (window as any).bpmnInstances
+const getBindMessage = () => {
+  bpmnElement.value = bpmnInstances().bpmnElement
+  bindMessageId.value = bpmnElement.value.businessObject?.messageRef?.id || '-1'
+}
+const openMessageModel = () => {
+  messageModelVisible.value = true
+  newMessageForm.value = {}
+}
+const createNewMessage = () => {
+  if (messageMap.value[newMessageForm.value.id]) {
+    message.error('璇ユ秷鎭凡瀛樺湪锛岃淇敼id鍚庨噸鏂颁繚瀛�')
+    return
+  }
+  const newMessage = bpmnInstances().moddle.create('bpmn:Message', newMessageForm.value)
+  bpmnRootElements.value.push(newMessage)
+  messageMap.value[newMessageForm.value.id] = newMessageForm.value.name
+  bpmnMessageRefsMap.value[newMessageForm.value.id] = newMessage
+  messageModelVisible.value = false
+}
+const updateTaskMessage = (messageId) => {
+  if (messageId === '-1') {
+    bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
+      messageRef: null
+    })
+  } else {
+    bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), {
+      messageRef: bpmnMessageRefsMap.value[messageId]
+    })
+  }
+}
+
+onMounted(() => {
+  bpmnMessageRefsMap.value = Object.create(null)
+  bpmnRootElements.value = bpmnInstances().modeler.getDefinitions().rootElements
+  bpmnRootElements.value
+    .filter((el) => el.$type === 'bpmn:Message')
+    .forEach((m) => {
+      bpmnMessageRefsMap.value[m.id] = m
+      messageMap.value[m.id] = m.name
+    })
+  messageMap.value['-1'] = '鏃�'
+})
+
+onBeforeUnmount(() => {
+  bpmnElement.value = null
+})
+watch(
+  () => props.id,
+  () => {
+    // bpmnElement.value = bpmnInstances().bpmnElement
+    nextTick(() => {
+      getBindMessage()
+    })
+  },
+  { immediate: true }
+)
+</script>

--
Gitblit v1.8.0