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/nodes/StartUserNode.vue | 154 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 154 insertions(+), 0 deletions(-)
diff --git a/src/components/SimpleProcessDesignerV2/src/nodes/StartUserNode.vue b/src/components/SimpleProcessDesignerV2/src/nodes/StartUserNode.vue
new file mode 100644
index 0000000..4abe38f
--- /dev/null
+++ b/src/components/SimpleProcessDesignerV2/src/nodes/StartUserNode.vue
@@ -0,0 +1,154 @@
+<template>
+ <div class="node-wrapper">
+ <div class="node-container">
+ <div
+ class="node-box"
+ :class="[
+ { 'node-config-error': !currentNode.showText },
+ `${useTaskStatusClass(currentNode?.activityStatus)}`
+ ]"
+ >
+ <div class="node-title-container">
+ <div class="node-title-icon start-user"
+ ><span class="iconfont icon-start-user"></span
+ ></div>
+ <input
+ v-if="!readonly && showInput"
+ type="text"
+ class="editable-title-input"
+ @blur="blurEvent()"
+ v-mountedFocus
+ v-model="currentNode.name"
+ :placeholder="currentNode.name"
+ />
+ <div v-else class="node-title" @click="clickTitle">
+ {{ currentNode.name }}
+ </div>
+ </div>
+ <div class="node-content" @click="nodeClick">
+ <div class="node-text" :title="currentNode.showText" v-if="currentNode.showText">
+ {{ currentNode.showText }}
+ </div>
+ <div class="node-text" v-else>
+ {{ NODE_DEFAULT_TEXT.get(NodeType.START_USER_NODE) }}
+ </div>
+ <Icon icon="ep:arrow-right-bold" v-if="!readonly" />
+ </div>
+ </div>
+ <!-- 浼犻�掑瓙鑺傜偣缁欐坊鍔犺妭鐐圭粍浠躲�備細鍦ㄥ瓙鑺傜偣鍓嶉潰娣诲姞鑺傜偣 -->
+ <NodeHandler
+ v-if="currentNode"
+ v-model:child-node="currentNode.childNode"
+ :current-node="currentNode"
+ />
+ </div>
+ </div>
+ <StartUserNodeConfig v-if="!readonly && currentNode" ref="nodeSetting" :flow-node="currentNode" />
+ <!-- 瀹℃壒璁板綍 -->
+ <el-dialog
+ :title="dialogTitle || '瀹℃壒璁板綍'"
+ v-model="dialogVisible"
+ width="1000px"
+ append-to-body
+ >
+ <el-row>
+ <el-table :data="selectTasks" size="small" border header-cell-class-name="table-header-gray">
+ <el-table-column
+ label="搴忓彿"
+ header-align="center"
+ align="center"
+ type="index"
+ width="50"
+ />
+ <el-table-column label="瀹℃壒浜�" min-width="100" align="center">
+ <template #default="scope">
+ {{ scope.row.assigneeUser?.nickname || scope.row.ownerUser?.nickname }}
+ </template>
+ </el-table-column>
+
+ <el-table-column label="閮ㄩ棬" min-width="100" align="center">
+ <template #default="scope">
+ {{ scope.row.assigneeUser?.deptName || scope.row.ownerUser?.deptName }}
+ </template>
+ </el-table-column>
+ <el-table-column
+ :formatter="dateFormatter"
+ align="center"
+ label="寮�濮嬫椂闂�"
+ prop="createTime"
+ min-width="140"
+ />
+ <el-table-column
+ :formatter="dateFormatter"
+ align="center"
+ label="缁撴潫鏃堕棿"
+ prop="endTime"
+ min-width="140"
+ />
+ <el-table-column align="center" label="瀹℃壒鐘舵��" prop="status" min-width="90">
+ <template #default="scope">
+ <dict-tag :type="DICT_TYPE.BPM_TASK_STATUS" :value="scope.row.status" />
+ </template>
+ </el-table-column>
+ <el-table-column align="center" label="瀹℃壒寤鸿" prop="reason" min-width="120" />
+ <el-table-column align="center" label="鑰楁椂" prop="durationInMillis" width="100">
+ <template #default="scope">
+ {{ formatPast2(scope.row.durationInMillis) }}
+ </template>
+ </el-table-column>
+ </el-table>
+ </el-row>
+ </el-dialog>
+</template>
+<script setup lang="ts">
+import NodeHandler from '../NodeHandler.vue'
+import { useWatchNode, useNodeName2, useTaskStatusClass } from '../node'
+import { SimpleFlowNode, NODE_DEFAULT_TEXT, NodeType } from '../consts'
+import StartUserNodeConfig from '../nodes-config/StartUserNodeConfig.vue'
+import { dateFormatter, formatPast2 } from '@/utils/formatTime'
+import { DICT_TYPE } from '@/utils/dict'
+defineOptions({
+ name: 'StartEventNode'
+})
+const props = defineProps({
+ flowNode: {
+ type: Object as () => SimpleFlowNode,
+ default: () => null
+ }
+})
+const readonly = inject<Boolean>('readonly') // 鏄惁鍙
+const tasks = inject<Ref<any[]>>('tasks', ref([]))
+// 瀹氫箟浜嬩欢锛屾洿鏂扮埗缁勪欢銆�
+const emits = defineEmits<{
+ 'update:modelValue': [node: SimpleFlowNode | undefined]
+}>()
+// 鐩戞帶鑺傜偣鍙樺寲
+const currentNode = useWatchNode(props)
+// 鑺傜偣鍚嶇О缂栬緫
+const { showInput, blurEvent, clickTitle } = useNodeName2(currentNode, NodeType.START_USER_NODE)
+
+const nodeSetting = ref()
+//
+const nodeClick = () => {
+ if (readonly) {
+ // 鍙妯″紡锛屽脊绐楁樉绀轰换鍔′俊鎭�
+ if (tasks && tasks.value) {
+ dialogTitle.value = currentNode.value.name
+ selectTasks.value = tasks.value.filter(
+ (item: any) => item?.taskDefinitionKey === currentNode.value.id
+ )
+ dialogVisible.value = true
+ }
+ } else {
+ // 缂栬緫妯″紡锛屾墦寮�鑺傜偣閰嶇疆銆佹妸褰撳墠鑺傜偣浼犻�掔粰閰嶇疆缁勪欢
+ nodeSetting.value.showStartUserNodeConfig(currentNode.value)
+ nodeSetting.value.openDrawer()
+ }
+}
+
+// 浠诲姟鐨勫脊绐楁樉绀猴紝鐢ㄤ簬鍙妯″紡
+const dialogVisible = ref(false) // 寮圭獥鍙鎬�
+const dialogTitle = ref<string | undefined>(undefined) // 寮圭獥鏍囬
+const selectTasks = ref<any[] | undefined>([]) // 閫変腑鐨勪换鍔℃暟缁�
+</script>
+<style lang="scss" scoped></style>
--
Gitblit v1.8.0