From 81d2a38363b3472059cefd71d00e611d8dc17b0f Mon Sep 17 00:00:00 2001 From: jason <2667446@qq.com> Date: Sun, 10 Nov 2024 09:30:30 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=8A=9F=E8=83=BD=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E3=80=91=E5=8F=91=E8=B5=B7=E4=BA=BA=E8=87=AA=E9=80=89=E5=88=A4?= =?UTF-8?q?=E6=96=AD=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/bpm/processInstance/index.ts | 3 ++- .../create/ProcessDefinitionDetail.vue | 20 +++++++++---------- .../detail/ProcessInstanceTimeline.vue | 9 +++------ 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/api/bpm/processInstance/index.ts b/src/api/bpm/processInstance/index.ts index e9256407..f97270f9 100644 --- a/src/api/bpm/processInstance/index.ts +++ b/src/api/bpm/processInstance/index.ts @@ -1,6 +1,6 @@ import request from '@/config/axios' import { ProcessDefinitionVO } from '@/api/bpm/model' -import { NodeType } from '@/components/SimpleProcessDesignerV2/src/consts' +import { NodeType, CandidateStrategy } from '@/components/SimpleProcessDesignerV2/src/consts' export type Task = { id: string name: string @@ -43,6 +43,7 @@ export type ApprovalNodeInfo = { id: number name: string nodeType: NodeType + candidateStrategy?: CandidateStrategy status: number startTime?: Date endTime?: Date diff --git a/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue b/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue index 70aad873..7b8da933 100644 --- a/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue +++ b/src/views/bpm/processInstance/create/ProcessDefinitionDetail.vue @@ -29,7 +29,6 @@ ref="timelineRef" :activity-nodes="activityNodes" :show-status-icon="false" - :startUserSelectTasks="startUserSelectTasks" :startUserSelectAssignees="startUserSelectAssignees" @select-user-confirm="selectUserConfirm" /> @@ -78,6 +77,7 @@ <script lang="ts" setup> import { decodeFields, setConfAndFields2 } from '@/utils/formCreate' import { BpmModelType } from '@/utils/constants' +import { CandidateStrategy } from '@/components/SimpleProcessDesignerV2/src/consts' import ProcessInstanceBpmnViewer from '../detail/ProcessInstanceBpmnViewer.vue' import ProcessInstanceSimpleViewer from '../detail/ProcessInstanceSimpleViewer.vue' import ProcessInstanceTimeline from '../detail/ProcessInstanceTimeline.vue' @@ -103,7 +103,7 @@ const detailForm: any = ref({ }) // 流程表单详情 const fApi = ref<ApiAttrs>() // 指定审批人 -const startUserSelectTasks: any = ref([]) // 发起人需要选择审批人的用户任务列表 +const startUserSelectTasks: any = ref([]) // 发起人需要选择审批人或抄送人的任务列表 const startUserSelectAssignees = ref({}) // 发起人选择审批人的数据 const bpmnXML: any = ref(null) // BPMN 数据 const simpleJson = ref<string | undefined>() // Simple 设计器数据 json 格式 @@ -140,14 +140,6 @@ const initProcessInfo = async (row: any, formVariables?: any) => { if (processDefinitionDetail) { bpmnXML.value = processDefinitionDetail.bpmnXml simpleJson.value = processDefinitionDetail.simpleModel - startUserSelectTasks.value = processDefinitionDetail.startUserSelectTasks - // 设置指定审批人 - if (startUserSelectTasks.value?.length > 0) { - for (const userTask of startUserSelectTasks.value) { - // 初始化数据 - startUserSelectAssignees.value[userTask.id] = [] - } - } } // 情况二:业务表单 } else if (row.formCustomCreatePath) { @@ -169,6 +161,12 @@ const getApprovalDetail = async (row: any) => { message.error('查询不到审批详情信息!') return } + // 获取发起人自选的任务 + startUserSelectTasks.value = data.activityNodes?.filter(node => CandidateStrategy.START_USER_SELECT === node.candidateStrategy ) + for (const node of startUserSelectTasks.value) { + // 初始化数据 + startUserSelectAssignees.value[node.id] = [] + } // 获取审批节点,显示 Timeline 的数据 activityNodes.value = data.activityNodes } finally { @@ -187,7 +185,7 @@ const submitForm = async () => { Array.isArray(startUserSelectAssignees.value[userTask.id]) && startUserSelectAssignees.value[userTask.id].length === 0 ) - return message.warning(`请选择${userTask.name}的审批人`) + return message.warning(`请选择${userTask.name}的候选人`) } } diff --git a/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue b/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue index 31ec61d5..49c7e4e1 100644 --- a/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue +++ b/src/views/bpm/processInstance/detail/ProcessInstanceTimeline.vue @@ -39,9 +39,7 @@ <!-- 需要自定义选择审批人 --> <div class="flex flex-wrap gap2 items-center" - v-if=" - startUserSelectTasks?.length > 0 && Array.isArray(startUserSelectAssignees[activity.id]) - " + v-if="isEmpty(activity.tasks) && isEmpty(activity.candidateUsers) && CandidateStrategy.START_USER_SELECT === activity.candidateStrategy" > <!-- && activity.nodeType === NodeType.USER_TASK_NODE --> <el-button @@ -156,7 +154,8 @@ import { formatDate } from '@/utils/formatTime' import * as ProcessInstanceApi from '@/api/bpm/processInstance' import { TaskStatusEnum } from '@/api/bpm/task' -import { NodeType } from '@/components/SimpleProcessDesignerV2/src/consts' +import { NodeType, CandidateStrategy } from '@/components/SimpleProcessDesignerV2/src/consts' +import { isEmpty } from '@/utils/is' import { Check, Close, Loading, Clock, Minus, Delete } from '@element-plus/icons-vue' import starterSvg from '@/assets/svgs/bpm/starter.svg' import auditorSvg from '@/assets/svgs/bpm/auditor.svg' @@ -170,12 +169,10 @@ withDefaults( defineProps<{ activityNodes: ProcessInstanceApi.ApprovalNodeInfo[] // 审批节点信息 showStatusIcon?: boolean // 是否显示头像右下角状态图标 - startUserSelectTasks?: any[] // 发起人需要选择审批人的用户任务列表 startUserSelectAssignees?: any // 发起人选择审批人的数据 }>(), { showStatusIcon: true, // 默认值为 true - startUserSelectTasks: () => [], // 默认值为空数组 startUserSelectAssignees: () => {} } )