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: () => {}
   }
 )