Przeglądaj źródła

fix:审批相关

yanghao 1 tydzień temu
rodzic
commit
6bbe3e1079
1 zmienionych plików z 37 dodań i 33 usunięć
  1. 37 33
      src/views/researchProject/approval/index.vue

+ 37 - 33
src/views/researchProject/approval/index.vue

@@ -209,7 +209,7 @@
           </el-tab-pane>
 
           <!-- Tab5:审批记录 -->
-          <!-- <el-tab-pane label="审批记录" name="history">
+          <el-tab-pane label="审批记录" name="history">
             <el-timeline>
               <el-timeline-item
                 v-for="record in selectedProject.approvalRecords || []"
@@ -236,7 +236,7 @@
                 :image-size="60"
               />
             </el-timeline>
-          </el-tab-pane> -->
+          </el-tab-pane>
         </el-tabs>
 
         <!-- 审批操作区 -->
@@ -355,19 +355,35 @@ const selectProject = async (project: any) => {
 }
 
 // ========== 步骤条 ==========
-/**
- * 根据项目当前状态动态生成步骤
- * - 预审中:只显示 预审节点
- * - 预审通过 + 未提交正式:显示 预审完成 + 正式待提交
- * - 正式中:预审完成 + 正式的各级节点
- */
+
 const flowSteps = computed(() => {
   const p = selectedProject.value
   if (!p) return []
 
   const steps: any[] = []
+  const records = p.approvalRecords || []
+
+  /**
+   * 取某节点"最终有效"的审批记录
+   * - 只取通过(1)/驳回(2),排除提交(4)、撤回(3)
+   * - 多条时取最后一条(按 approveTime / id 排序)
+   */
+  const getFinalRecord = (stage: number, node: number) => {
+    const matched = records
+      .filter(
+        (r: any) => r.stage === stage && r.node === node && (r.result === 1 || r.result === 2)
+      )
+      // 用 approveTime 排序,没有就退回 id
+      .sort((a: any, b: any) => {
+        const ta = a.approveTime ? new Date(a.approveTime).getTime() : 0
+        const tb = b.approveTime ? new Date(b.approveTime).getTime() : 0
+        if (ta !== tb) return ta - tb
+        return (a.id || 0) - (b.id || 0)
+      })
+    return matched.length ? matched[matched.length - 1] : null
+  }
 
-  // ---------- 预审阶段 ----------
+  // ---------- 1. 提交预审 ----------
   steps.push({
     name: '提交预审',
     handler: p.projectLeader || '',
@@ -375,34 +391,24 @@ const flowSteps = computed(() => {
     state: p.preSubmitTime ? 'done' : 'pending'
   })
 
-  // 预审二级
-  const preSecondRecord = (p.approvalRecords || []).find(
-    (r: any) => r.stage === STAGE_PRE && r.node === NODE_PRE_SECOND && r.result !== 4
-  )
+  // ---------- 2. 预审审批 ----------
+  const preRecord = getFinalRecord(STAGE_PRE, NODE_PRE_SECOND)
   if (p.preAuditStatus === AUDIT_PROCESSING && p.preCurrentNode === NODE_PRE_SECOND) {
+    // 当前正在预审
+    steps.push({ name: '预审审批', handler: '当前节点', date: '', state: 'current' })
+  } else if (preRecord) {
+    // 有最终记录:通过 or 驳回
     steps.push({
       name: '预审审批',
-      handler: '当前节点',
-      date: '',
-      state: 'current'
-    })
-  } else if (preSecondRecord) {
-    steps.push({
-      name: '预审审批',
-      handler: preSecondRecord.approverName,
-      date: formatDateTime(preSecondRecord.approveTime),
-      state: preSecondRecord.result === 1 ? 'done' : 'fail'
+      handler: preRecord.approverName || '',
+      date: formatDateTime(preRecord.approveTime),
+      state: preRecord.result === 1 ? 'done' : 'fail'
     })
   } else {
     steps.push({ name: '预审审批', handler: '待处理', date: '', state: 'pending' })
   }
 
-  // 如果预审还没通过,后面的不显示
-  if (p.preAuditStatus !== 2) {
-    return steps
-  }
-
-  // ---------- 正式立项阶段 ----------
+  // ---------- 3. 正式立项阶段:永远显示完整流程 ----------
   const formalNodes = [
     { node: NODE_FORMAL_FIRST, name: '专业公司审批' },
     { node: NODE_FORMAL_SECOND, name: '科技发展部审批' }
@@ -412,15 +418,13 @@ const flowSteps = computed(() => {
   }
 
   for (const n of formalNodes) {
-    const record = (p.approvalRecords || []).find(
-      (r: any) => r.stage === STAGE_FORMAL && r.node === n.node && r.result !== 4
-    )
+    const record = getFinalRecord(STAGE_FORMAL, n.node)
     if (p.formalAuditStatus === AUDIT_PROCESSING && p.formalCurrentNode === n.node) {
       steps.push({ name: n.name, handler: '当前节点', date: '', state: 'current' })
     } else if (record) {
       steps.push({
         name: n.name,
-        handler: record.approverName,
+        handler: record.approverName || '',
         date: formatDateTime(record.approveTime),
         state: record.result === 1 ? 'done' : 'fail'
       })