From a1d7e81859f554f3a53680cc35f0f49bf1f77098 Mon Sep 17 00:00:00 2001
From: wwf <1971391498@qq.com>
Date: 星期四, 14 五月 2026 14:37:02 +0800
Subject: [PATCH] 导入项目
---
src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 174 insertions(+), 0 deletions(-)
diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue b/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue
new file mode 100644
index 0000000..87f8119
--- /dev/null
+++ b/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue
@@ -0,0 +1,174 @@
+<template>
+ <div v-loading="loading" class="process-viewer-container">
+ <SimpleProcessViewer
+ :flow-node="simpleModel"
+ :tasks="tasks"
+ :process-instance="processInstance"
+ />
+ </div>
+</template>
+<script lang="ts" setup>
+import { propTypes } from '@/utils/propTypes'
+import { TaskStatusEnum } from '@/api/bpm/task'
+import { SimpleFlowNode, NodeType } from '@/components/SimpleProcessDesignerV2/src/consts'
+import { SimpleProcessViewer } from '@/components/SimpleProcessDesignerV2/src/'
+defineOptions({ name: 'BpmProcessInstanceSimpleViewer' })
+
+const props = defineProps({
+ loading: propTypes.bool.def(false), // 鏄惁鍔犺浇涓�
+ modelView: propTypes.object,
+ simpleJson: propTypes.string // Simple 妯″瀷缁撴瀯鏁版嵁 (json 鏍煎紡)
+})
+const simpleModel = ref<any>({})
+// 鐢ㄦ埛浠诲姟
+const tasks = ref([])
+// 娴佺▼瀹炰緥
+const processInstance = ref()
+
+/** 鐩戞帶妯″瀷瑙嗗浘 鍖呮嫭浠诲姟鍒楄〃銆佽繘琛屼腑鐨勬椿鍔ㄨ妭鐐圭紪鍙风瓑 */
+watch(
+ () => props.modelView,
+ async (newModelView) => {
+ if (newModelView) {
+ tasks.value = newModelView.tasks
+ processInstance.value = newModelView.processInstance
+ // 宸茬粡鎷掔粷鐨勬椿鍔ㄨ妭鐐圭紪鍙烽泦鍚堬紝鍙寘鎷� UserTask
+ const rejectedTaskActivityIds: string[] = newModelView.rejectedTaskActivityIds
+ // 杩涜涓殑娲诲姩鑺傜偣缂栧彿闆嗗悎锛� 鍙寘鎷� UserTask
+ const unfinishedTaskActivityIds: string[] = newModelView.unfinishedTaskActivityIds
+ // 宸茬粡瀹屾垚鐨勬椿鍔ㄨ妭鐐圭紪鍙烽泦鍚堬紝 鍖呮嫭 UserTask銆丟ateway 绛�
+ const finishedActivityIds: string[] = newModelView.finishedTaskActivityIds
+ // 宸茬粡瀹屾垚鐨勮繛绾胯妭鐐圭紪鍙烽泦鍚堬紝鍙寘鎷� SequenceFlow
+ const finishedSequenceFlowActivityIds: string[] = newModelView.finishedSequenceFlowActivityIds
+ setSimpleModelNodeTaskStatus(
+ newModelView.simpleModel,
+ newModelView.processInstance?.status,
+ rejectedTaskActivityIds,
+ unfinishedTaskActivityIds,
+ finishedActivityIds,
+ finishedSequenceFlowActivityIds
+ )
+ simpleModel.value = newModelView.simpleModel ? newModelView.simpleModel : {}
+ }
+ }
+)
+/** 鐩戞帶妯″瀷缁撴瀯鏁版嵁 */
+watch(
+ () => props.simpleJson,
+ async (value) => {
+ if (value) {
+ simpleModel.value = JSON.parse(value)
+ }
+ }
+)
+const setSimpleModelNodeTaskStatus = (
+ simpleModel: SimpleFlowNode | undefined,
+ processStatus: number,
+ rejectedTaskActivityIds: string[],
+ unfinishedTaskActivityIds: string[],
+ finishedActivityIds: string[],
+ finishedSequenceFlowActivityIds: string[]
+) => {
+ if (!simpleModel) {
+ return
+ }
+ // 缁撴潫鑺傜偣
+ if (simpleModel.type === NodeType.END_EVENT_NODE) {
+ if (finishedActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = processStatus
+ } else {
+ simpleModel.activityStatus = TaskStatusEnum.NOT_START
+ }
+ return
+ }
+ // 瀹℃壒鑺傜偣
+ if (
+ simpleModel.type === NodeType.START_USER_NODE ||
+ simpleModel.type === NodeType.USER_TASK_NODE ||
+ simpleModel.type === NodeType.TRANSACTOR_NODE ||
+ simpleModel.type === NodeType.CHILD_PROCESS_NODE
+ ) {
+ simpleModel.activityStatus = TaskStatusEnum.NOT_START
+ if (rejectedTaskActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = TaskStatusEnum.REJECT
+ } else if (unfinishedTaskActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = TaskStatusEnum.RUNNING
+ } else if (finishedActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = TaskStatusEnum.APPROVE
+ }
+ // TODO 鏄笉鏄繕缂轰竴涓� cancel 鐨勭姸鎬�
+ }
+ // 鎶勯�佽妭鐐�
+ if (simpleModel.type === NodeType.COPY_TASK_NODE) {
+ // 鎶勯�佽妭鐐�,鍙湁閫氳繃鍜屾湭鎵ц鐘舵��
+ if (finishedActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = TaskStatusEnum.APPROVE
+ } else {
+ simpleModel.activityStatus = TaskStatusEnum.NOT_START
+ }
+ }
+ // 寤惰繜鍣ㄨ妭鐐�
+ if (simpleModel.type === NodeType.DELAY_TIMER_NODE) {
+ // 寤惰繜鍣ㄨ妭鐐�,鍙湁閫氳繃鍜屾湭鎵ц鐘舵��
+ if (finishedActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = TaskStatusEnum.APPROVE
+ } else {
+ simpleModel.activityStatus = TaskStatusEnum.NOT_START
+ }
+ }
+ // 瑙﹀彂鍣ㄨ妭鐐�
+ if (simpleModel.type === NodeType.TRIGGER_NODE) {
+ // 瑙﹀彂鍣ㄨ妭鐐�,鍙湁閫氳繃鍜屾湭鎵ц鐘舵��
+ if (finishedActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = TaskStatusEnum.APPROVE
+ } else {
+ simpleModel.activityStatus = TaskStatusEnum.NOT_START
+ }
+ }
+
+ // 鏉′欢鑺傜偣瀵瑰簲 SequenceFlow
+ if (simpleModel.type === NodeType.CONDITION_NODE) {
+ // 鏉′欢鑺傜偣,鍙湁閫氳繃鍜屾湭鎵ц鐘舵��
+ if (finishedSequenceFlowActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = TaskStatusEnum.APPROVE
+ } else {
+ simpleModel.activityStatus = TaskStatusEnum.NOT_START
+ }
+ }
+ // 缃戝叧鑺傜偣
+ if (
+ simpleModel.type === NodeType.CONDITION_BRANCH_NODE ||
+ simpleModel.type === NodeType.PARALLEL_BRANCH_NODE ||
+ simpleModel.type === NodeType.INCLUSIVE_BRANCH_NODE ||
+ simpleModel.type === NodeType.ROUTER_BRANCH_NODE
+ ) {
+ // 缃戝叧鑺傜偣銆傚彧鏈夐�氳繃鍜屾湭鎵ц鐘舵��
+ if (finishedActivityIds.includes(simpleModel.id)) {
+ simpleModel.activityStatus = TaskStatusEnum.APPROVE
+ } else {
+ simpleModel.activityStatus = TaskStatusEnum.NOT_START
+ }
+ simpleModel.conditionNodes?.forEach((node) => {
+ setSimpleModelNodeTaskStatus(
+ node,
+ processStatus,
+ rejectedTaskActivityIds,
+ unfinishedTaskActivityIds,
+ finishedActivityIds,
+ finishedSequenceFlowActivityIds
+ )
+ })
+ }
+
+ setSimpleModelNodeTaskStatus(
+ simpleModel.childNode,
+ processStatus,
+ rejectedTaskActivityIds,
+ unfinishedTaskActivityIds,
+ finishedActivityIds,
+ finishedSequenceFlowActivityIds
+ )
+}
+</script>
+
+<style lang="scss" scoped></style>
--
Gitblit v1.8.0