From f9b459a3fefd5fab0ee8e19268adb9d9eadab2a7 Mon Sep 17 00:00:00 2001 From: dengzedong <dengzedong@email> Date: 星期二, 17 十二月 2024 18:16:58 +0800 Subject: [PATCH] 预测项setting的值修改最大输入长度为1000 --- src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue | 168 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 168 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..0808bec --- /dev/null +++ b/src/views/bpm/processInstance/detail/ProcessInstanceSimpleViewer.vue @@ -0,0 +1,168 @@ +<template> + <div v-loading="loading" class="process-viewer-container"> + <SimpleProcessViewer + :flow-node="simpleModel" + :tasks="tasks" + :process-instance="processInstance" + class="process-viewer" + /> + </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() +// 用户任务 +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、Gateway 等 + 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 + } + } +) +/** 监控模型结构数据 */ +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.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 + } + } + // 条件节点 对应 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 + ) { + // 网关节点。只有通过和未执行状态 + 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> +.process-viewer-container { + height: 100%; + width: 100%; + + :deep(.process-viewer) { + height: 100% !important; + min-height: 100%; + width: 100%; + overflow: auto; + } +} +</style> -- Gitblit v1.9.3