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/SimpleProcessDesignerV2/src/NodeHandler.vue | 308 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 308 insertions(+), 0 deletions(-)
diff --git a/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue
new file mode 100644
index 0000000..ae7495e
--- /dev/null
+++ b/src/components/SimpleProcessDesignerV2/src/NodeHandler.vue
@@ -0,0 +1,308 @@
+<template>
+ <div class="node-handler-wrapper">
+ <div class="node-handler">
+ <el-popover
+ trigger="hover"
+ v-model:visible="popoverShow"
+ placement="right-start"
+ width="auto"
+ v-if="!readonly"
+ >
+ <div class="handler-item-wrapper">
+ <div class="handler-item" @click="addNode(NodeType.USER_TASK_NODE)">
+ <div class="approve handler-item-icon">
+ <span class="iconfont icon-approve icon-size"></span>
+ </div>
+ <div class="handler-item-text">瀹℃壒浜�</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.TRANSACTOR_NODE)">
+ <div class="transactor handler-item-icon">
+ <span class="iconfont icon-transactor icon-size"></span>
+ </div>
+ <div class="handler-item-text">鍔炵悊浜�</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.COPY_TASK_NODE)">
+ <div class="handler-item-icon copy">
+ <span class="iconfont icon-size icon-copy"></span>
+ </div>
+ <div class="handler-item-text">鎶勯��</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.CONDITION_BRANCH_NODE)">
+ <div class="handler-item-icon condition">
+ <span class="iconfont icon-size icon-exclusive"></span>
+ </div>
+ <div class="handler-item-text">鏉′欢鍒嗘敮</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.PARALLEL_BRANCH_NODE)">
+ <div class="handler-item-icon parallel">
+ <span class="iconfont icon-size icon-parallel"></span>
+ </div>
+ <div class="handler-item-text">骞惰鍒嗘敮</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.INCLUSIVE_BRANCH_NODE)">
+ <div class="handler-item-icon inclusive">
+ <span class="iconfont icon-size icon-inclusive"></span>
+ </div>
+ <div class="handler-item-text">鍖呭鍒嗘敮</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.DELAY_TIMER_NODE)">
+ <div class="handler-item-icon delay">
+ <span class="iconfont icon-size icon-delay"></span>
+ </div>
+ <div class="handler-item-text">寤惰繜鍣�</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.ROUTER_BRANCH_NODE)">
+ <div class="handler-item-icon router">
+ <span class="iconfont icon-size icon-router"></span>
+ </div>
+ <div class="handler-item-text">璺敱鍒嗘敮</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.TRIGGER_NODE)">
+ <div class="handler-item-icon trigger">
+ <span class="iconfont icon-size icon-trigger"></span>
+ </div>
+ <div class="handler-item-text">瑙﹀彂鍣�</div>
+ </div>
+ <div class="handler-item" @click="addNode(NodeType.CHILD_PROCESS_NODE)">
+ <div class="handler-item-icon child-process">
+ <span class="iconfont icon-size icon-child-process"></span>
+ </div>
+ <div class="handler-item-text">瀛愭祦绋�</div>
+ </div>
+ </div>
+ <template #reference>
+ <div class="add-icon"><Icon icon="ep:plus" /></div>
+ </template>
+ </el-popover>
+ </div>
+ </div>
+</template>
+
+<script setup lang="ts">
+import {
+ ApproveMethodType,
+ AssignEmptyHandlerType,
+ AssignStartUserHandlerType,
+ ConditionType,
+ NODE_DEFAULT_NAME,
+ NodeType,
+ RejectHandlerType,
+ SimpleFlowNode,
+ DEFAULT_CONDITION_GROUP_VALUE
+} from './consts'
+import { generateUUID } from '@/utils'
+import { cloneDeep } from 'lodash-es'
+
+defineOptions({
+ name: 'NodeHandler'
+})
+
+const popoverShow = ref(false)
+const props = defineProps({
+ childNode: {
+ type: Object as () => SimpleFlowNode,
+ default: null
+ },
+ currentNode: {
+ type: Object as () => SimpleFlowNode,
+ required: true
+ }
+})
+const emits = defineEmits(['update:childNode'])
+
+const readonly = inject<Boolean>('readonly') // 鏄惁鍙
+
+const addNode = (type: number) => {
+ popoverShow.value = false
+ if (type === NodeType.USER_TASK_NODE || type === NodeType.TRANSACTOR_NODE) {
+ const id = 'Activity_' + generateUUID()
+ const data: SimpleFlowNode = {
+ id: id,
+ name: NODE_DEFAULT_NAME.get(type) as string,
+ showText: '',
+ type: type,
+ approveMethod: ApproveMethodType.SEQUENTIAL_APPROVE,
+ // 瓒呮椂澶勭悊
+ rejectHandler: {
+ type: RejectHandlerType.FINISH_PROCESS
+ },
+ timeoutHandler: {
+ enable: false
+ },
+ assignEmptyHandler: {
+ type: AssignEmptyHandlerType.APPROVE
+ },
+ assignStartUserHandlerType: AssignStartUserHandlerType.START_USER_AUDIT,
+ childNode: props.childNode,
+ taskCreateListener: {
+ enable: false
+ },
+ taskAssignListener: {
+ enable: false
+ },
+ taskCompleteListener: {
+ enable: false
+ }
+ }
+ emits('update:childNode', data)
+ }
+ if (type === NodeType.COPY_TASK_NODE) {
+ const data: SimpleFlowNode = {
+ id: 'Activity_' + generateUUID(),
+ name: NODE_DEFAULT_NAME.get(NodeType.COPY_TASK_NODE) as string,
+ showText: '',
+ type: NodeType.COPY_TASK_NODE,
+ childNode: props.childNode
+ }
+ emits('update:childNode', data)
+ }
+ if (type === NodeType.CONDITION_BRANCH_NODE) {
+ const data: SimpleFlowNode = {
+ name: '鏉′欢鍒嗘敮',
+ type: NodeType.CONDITION_BRANCH_NODE,
+ id: 'GateWay_' + generateUUID(),
+ childNode: props.childNode,
+ conditionNodes: [
+ {
+ id: 'Flow_' + generateUUID(),
+ name: '鏉′欢1',
+ showText: '',
+ type: NodeType.CONDITION_NODE,
+ childNode: undefined,
+ conditionSetting: {
+ defaultFlow: false,
+ conditionType: ConditionType.RULE,
+ conditionGroups: cloneDeep(DEFAULT_CONDITION_GROUP_VALUE)
+ }
+ },
+ {
+ id: 'Flow_' + generateUUID(),
+ name: '鍏跺畠鎯呭喌',
+ showText: '鏈弧瓒冲叾瀹冩潯浠舵椂锛屽皢杩涘叆姝ゅ垎鏀�',
+ type: NodeType.CONDITION_NODE,
+ childNode: undefined,
+ conditionSetting: {
+ defaultFlow: true
+ }
+ }
+ ]
+ }
+ emits('update:childNode', data)
+ }
+ if (type === NodeType.PARALLEL_BRANCH_NODE) {
+ const data: SimpleFlowNode = {
+ name: '骞惰鍒嗘敮',
+ type: NodeType.PARALLEL_BRANCH_NODE,
+ id: 'GateWay_' + generateUUID(),
+ childNode: props.childNode,
+ conditionNodes: [
+ {
+ id: 'Flow_' + generateUUID(),
+ name: '骞惰1',
+ showText: '鏃犻渶閰嶇疆鏉′欢鍚屾椂鎵ц',
+ type: NodeType.CONDITION_NODE,
+ childNode: undefined
+ },
+ {
+ id: 'Flow_' + generateUUID(),
+ name: '骞惰2',
+ showText: '鏃犻渶閰嶇疆鏉′欢鍚屾椂鎵ц',
+ type: NodeType.CONDITION_NODE,
+ childNode: undefined
+ }
+ ]
+ }
+ emits('update:childNode', data)
+ }
+ if (type === NodeType.INCLUSIVE_BRANCH_NODE) {
+ const data: SimpleFlowNode = {
+ name: '鍖呭鍒嗘敮',
+ type: NodeType.INCLUSIVE_BRANCH_NODE,
+ id: 'GateWay_' + generateUUID(),
+ childNode: props.childNode,
+ conditionNodes: [
+ {
+ id: 'Flow_' + generateUUID(),
+ name: '鍖呭鏉′欢1',
+ showText: '',
+ type: NodeType.CONDITION_NODE,
+ childNode: undefined,
+ conditionSetting: {
+ defaultFlow: false,
+ conditionType: ConditionType.RULE,
+ conditionGroups: cloneDeep(DEFAULT_CONDITION_GROUP_VALUE)
+ }
+ },
+ {
+ id: 'Flow_' + generateUUID(),
+ name: '鍏跺畠鎯呭喌',
+ showText: '鏈弧瓒冲叾瀹冩潯浠舵椂锛屽皢杩涘叆姝ゅ垎鏀�',
+ type: NodeType.CONDITION_NODE,
+ childNode: undefined,
+ conditionSetting: {
+ defaultFlow: true
+ }
+ }
+ ]
+ }
+ emits('update:childNode', data)
+ }
+ if (type === NodeType.DELAY_TIMER_NODE) {
+ const data: SimpleFlowNode = {
+ id: 'Activity_' + generateUUID(),
+ name: NODE_DEFAULT_NAME.get(NodeType.DELAY_TIMER_NODE) as string,
+ showText: '',
+ type: NodeType.DELAY_TIMER_NODE,
+ childNode: props.childNode
+ }
+ emits('update:childNode', data)
+ }
+ if (type === NodeType.ROUTER_BRANCH_NODE) {
+ const data: SimpleFlowNode = {
+ id: 'GateWay_' + generateUUID(),
+ name: NODE_DEFAULT_NAME.get(NodeType.ROUTER_BRANCH_NODE) as string,
+ showText: '',
+ type: NodeType.ROUTER_BRANCH_NODE,
+ childNode: props.childNode
+ }
+ emits('update:childNode', data)
+ }
+ if (type === NodeType.TRIGGER_NODE) {
+ const data: SimpleFlowNode = {
+ id: 'Activity_' + generateUUID(),
+ name: NODE_DEFAULT_NAME.get(NodeType.TRIGGER_NODE) as string,
+ showText: '',
+ type: NodeType.TRIGGER_NODE,
+ childNode: props.childNode
+ }
+ emits('update:childNode', data)
+ }
+ if (type === NodeType.CHILD_PROCESS_NODE) {
+ const data: SimpleFlowNode = {
+ id: 'Activity_' + generateUUID(),
+ name: NODE_DEFAULT_NAME.get(NodeType.CHILD_PROCESS_NODE) as string,
+ showText: '',
+ type: NodeType.CHILD_PROCESS_NODE,
+ childNode: props.childNode,
+ childProcessSetting: {
+ calledProcessDefinitionKey: '',
+ calledProcessDefinitionName: '',
+ async: false,
+ skipStartUserNode: false,
+ startUserSetting: {
+ type: 1
+ },
+ timeoutSetting: {
+ enable: false
+ },
+ multiInstanceSetting: {
+ enable: false
+ }
+ }
+ }
+ emits('update:childNode', data)
+ }
+}
+</script>
+
+<style lang="scss" scoped></style>
--
Gitblit v1.8.0