From 40fee153f5c427c23b7191e8116c342b51ac6009 Mon Sep 17 00:00:00 2001
From: zouyu <2723363702@qq.com>
Date: 星期二, 27 一月 2026 17:10:41 +0800
Subject: [PATCH] 业务管理:问题修复

---
 src/views/business/unpass/components/OAProcess.vue |  420 +++++++++++++++++++++++++++++------------------------------
 1 files changed, 205 insertions(+), 215 deletions(-)

diff --git a/src/views/business/unpass/components/OAProcess.vue b/src/views/business/unpass/components/OAProcess.vue
index 5b0b616..eba813d 100644
--- a/src/views/business/unpass/components/OAProcess.vue
+++ b/src/views/business/unpass/components/OAProcess.vue
@@ -1,107 +1,47 @@
 <template>
   <div>
-    <el-dialog :close-on-press-escape="false" :visible.sync="isShow" title="涓嶅悎鏍煎鐞�"
-               width="1040px"
-               @close="$emit('closeOAProcess')">
-
-      <table :border='true' class="table">
-        <tr>
-          <th class="th-title">1妫�楠屽憳</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{oneOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{oneInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{oneName}}<span v-if="oneName">锛�</span>{{oneTime}}</th>
-        </tr>
-        <tr>
-          <th class="th-title">2妫�娴嬩富绠$‘璁�</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{twoOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{twoInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{twoName}}<span v-if="twoName">锛�</span>{{twoTime}}</th>
-        </tr>
-        <tr>
-          <th class="th-title">3鐗╂祦閮ㄧ‘璁�</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{threeOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{threeInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{threeName}}<span v-if="threeName">锛�</span>{{threeTime}}</th>
-        </tr>
-        <tr>
-          <th class="th-title">4浜у搧宸ョ▼甯堝鐞嗘剰瑙�</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{fourOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{fourInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{fourName}}<span v-if="fourName">锛�</span>{{fourTime}}</th>
-        </tr>
-        <tr>
-          <th class="th-title">5.鎬诲伐鎴栬�呭壇缁忕悊鐨勫鐞嗘剰瑙�</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{fiveOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{fiveInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{fiveName}}<span v-if="fiveName">锛�</span>{{fiveTime}}</th>
-        </tr>
-        <tr>
-          <th class="th-title">6璐ㄩ噺閮�</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{sixOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{sixInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{sixName}}<span v-if="sixName">锛�</span>{{sixTime}}</th>
-        </tr>
-        <tr>
-          <th class="th-title">7璐ㄩ噺閮ㄧ粡鐞�</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{sevenOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{sevenInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{sevenName}}<span v-if="sevenName">锛�</span>{{sevenTime}}</th>
-        </tr>
-        <tr>
-          <th class="th-title">8鏍哥畻鍛�</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{eightOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{eightInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{eightName}}<span v-if="eightName">锛�</span>{{eightTime}}</th>
-        </tr>
-        <tr>
-          <th class="th-title">9鐗╂祦閮ㄧ储璧旂粨鏋�</th>
-          <th class="th-titleSec">澶勭悊缁撴灉</th>
-          <th class="th-info1">{{nineOperation}}</th>
-          <th class="th-titleSec">澶勭悊鎰忚</th>
-          <th class="th-info" colspan="3">{{nineInfo}}</th>
-          <th style="display:none;"></th>
-          <th style="display:none;"></th>
-          <th >{{nineName}}<span v-if="nineName">锛�</span>{{nineTime}}</th>
-        </tr>
-      </table>
+    <el-dialog
+      :close-on-press-escape="false"
+      :visible.sync="isShow"
+      title="涓嶅悎鏍煎鐞哋A娴佺▼"
+      width="900px"
+      top="10vh"
+      @close="$emit('closeOAProcess')"
+    >
+      <el-timeline style="height: 80vh; overflow-y: scroll">
+        <el-timeline-item
+          placement="top"
+          v-for="node in nodes"
+          :key="node.id"
+          :timestamp="node.name"
+          :icon="node.hasData ? 'el-icon-check' : 'el-icon-time'"
+          :color="node.hasData ? '#0bbd87' : ''"
+        >
+          <el-card>
+            <h3 class="node-title">{{ node.operation }}</h3>
+            <div class="node-details">
+              <div class="detail-item">
+                <span class="label">澶勭悊浜猴細</span>
+                <span class="value">{{ node.operator || "-" }}</span>
+              </div>
+              <div class="detail-item">
+                <span class="label">澶勭悊鏃堕棿锛�</span>
+                <span class="value">{{ node.time || "-" }}</span>
+              </div>
+              <div class="detail-item">
+                <span class="label">{{node.name && node.name==='1妫�楠屽憳'?'涓嶅悎鏍兼弿杩帮細':'澶勭悊鎰忚锛�'}}</span>
+                <span class="value">{{ node.info || "-" }}</span>
+              </div>
+            </div>
+          </el-card>
+        </el-timeline-item>
+      </el-timeline>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import {getOaFlow} from "../../../../api/business/unqualifiedHandler";
+import { getOaFlow } from "../../../../api/business/unqualifiedHandler";
 
 export default {
   name: "OAProcess",
@@ -110,143 +50,193 @@
   props: {
     OAProcess: {
       type: Boolean,
-      default: () => false
+      default: () => false,
     },
   },
   data() {
     // 杩欓噷瀛樻斁鏁版嵁
     return {
       isShow: this.OAProcess,
-      oneInfo: '',
-      twoInfo: '',
-      threeInfo: '',
-      fourInfo: '',
-      fiveInfo: '',
-      sixInfo: '',
-      sevenInfo: '',
-      eightInfo: '',
-      nineInfo: '',
-      oneTime: '',
-      twoTime: '',
-      threeTime: '',
-      fourTime: '',
-      fiveTime: '',
-      sixTime: '',
-      sevenTime: '',
-      eightTime: '',
-      nineTime: '',
-      oneName: '',
-      twoName: '',
-      threeName: '',
-      fourName: '',
-      fiveName: '',
-      sixName: '',
-      sevenName: '',
-      eightName: '',
-      nineName: '',
-      oneOperation: '',
-      twoOperation: '',
-      threeOperation: '',
-      fourOperation: '',
-      fiveOperation: '',
-      sixOperation: '',
-      sevenOperation: '',
-      eightOperation: '',
-      nineOperation: '',
-    }
+      nodes: [
+        {
+          id: 1,
+          name: "1妫�楠屽憳",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+        {
+          id: 2,
+          name: "2妫�娴嬩富绠$‘璁�",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+        {
+          id: 3,
+          name: "3鐗╂祦閮ㄧ‘璁�",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+        {
+          id: 4,
+          name: "4浜у搧宸ョ▼甯堝鐞嗘剰瑙�",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+        {
+          id: 5,
+          name: "5.鎬诲伐鎴栬�呭壇缁忕悊鐨勫鐞嗘剰瑙�",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+        {
+          id: 6,
+          name: "6璐ㄩ噺閮�",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+        {
+          id: 7,
+          name: "7璐ㄩ噺閮ㄧ粡鐞�",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+        {
+          id: 8,
+          name: "8鏍哥畻鍛�",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+        {
+          id: 9,
+          name: "9鐗╂祦閮ㄧ储璧旂粨鏋�",
+          info: "",
+          time: "",
+          operator: "",
+          operation: "",
+          hasData: false,
+        },
+      ],
+    };
   },
   // 鏂规硶闆嗗悎
   methods: {
-    getInfo (id) {
+    getInfo(id,unqualifiedDesc) {
       getOaFlow({
-        id: id
-      }).then(res => {
-        if (res.code === 200) {
-          const data = res.data
-          if (data.length > 0) {
-            data.forEach(item => {
-              if (item.nodeName === '1妫�楠屽憳') {
-                this.oneInfo = item.approvalOpinion
-                this.oneTime = item.approvalDate
-                this.oneName = item.approver
-                this.oneOperation = item.operation
-              } else if (item.nodeName === '2妫�娴嬩富绠$‘璁�') {
-                this.twoInfo = item.approvalOpinion
-                this.twoTime = item.approvalDate
-                this.twoName = item.approver
-                this.twoOperation = item.operation
-              } else if (item.nodeName === '3鐗╂祦閮ㄧ‘璁�') {
-                this.threeInfo = item.approvalOpinion
-                this.threeTime = item.approvalDate
-                this.threeName = item.approver
-                this.threeOperation = item.operation
-              } else if (item.nodeName === '4浜у搧宸ョ▼甯堝鐞嗘剰瑙�') {
-                this.fourInfo = item.approvalOpinion
-                this.fourTime = item.approvalDate
-                this.fourName = item.approver
-                this.fourOperation = item.operation
-              } else if (item.nodeName === '5.鎬诲伐鎴栬�呭壇缁忕悊鐨勫鐞嗘剰瑙�') {
-                this.fiveInfo = item.approvalOpinion
-                this.fiveTime = item.approvalDate
-                this.fiveName = item.approver
-                this.fiveOperation = item.operation
-              } else if (item.nodeName === '6璐ㄩ噺閮�') {
-                this.sixInfo = item.approvalOpinion
-                this.sixTime = item.approvalDate
-                this.sixName = item.approver
-                this.sixOperation = item.operation
-              } else if (item.nodeName === '7璐ㄩ噺閮ㄧ粡鐞�') {
-                this.sevenInfo = item.approvalOpinion
-                this.sevenTime = item.approvalDate
-                this.sevenName = item.approver
-                this.sevenOperation = item.operation
-              } else if (item.nodeName === '8鏍哥畻鍛�') {
-                this.eightInfo = item.approvalOpinion
-                this.eightTime = item.approvalDate
-                this.eightName = item.approver
-                this.eightOperation = item.operation
-              } else if (item.nodeName === '9鐗╂祦閮ㄧ储璧旂粨鏋�') {
-                this.nineInfo = item.approvalOpinion
-                this.nineTime = item.approvalDate
-                this.nineName = item.approver
-                this.nineOperation = item.operation
-              }
-            })
-          }
-        }
-      }).catch(err => {
-        this.submitDeclareLoading = false
-        console.log(err)
+        id: id,
       })
-    }
+        .then((res) => {
+          if (res.code === 200) {
+            const data = res.data;
+            if (data.length > 0) {
+              data.forEach((item) => {
+                const node = this.nodes.find((n) => n.name === item.nodeName);
+                if (node) {
+                  node.time = item.approvalDate + " " + item.approvalTime;
+                  if(item.nodeName && item.nodeName==="1妫�楠屽憳"){
+                    node.info=unqualifiedDesc;
+                  }else{
+                    node.info = item.approvalOpinion;
+                  }
+                  node.operator = item.approver;
+                  node.operation = item.operation;
+                  node.hasData = true;
+                }
+              });
+            }
+          }
+        })
+        .catch((err) => {
+          this.submitDeclareLoading = false;
+          console.log(err);
+        });
+    },
   },
-}
+};
 </script>
 
 <style scoped>
-.table {
-  width: 100%;
-  height: 500px;
+.timeline-item-content {
+  padding: 15px;
+  border: 1px solid #e4e7ed;
+  border-radius: 4px;
+  margin-bottom: 10px;
+  transition: all 0.3s ease;
 }
-.th-title {
-  width: 160px;
-  text-align: left;
-  background-color: #e0eaf5;
+
+.node-title {
   font-size: 16px;
+  font-weight: bold;
+  margin-bottom: 10px;
+  color: #333;
 }
-.th-titleSec {
-  width: 70px;
-  background-color: #e0eaf5;
-  font-size: 16px;
+
+.node-details {
+  display: flex;
+  flex-wrap: wrap;
+  gap: 15px;
 }
-.th-info {
-  width: 210px;
-  text-align: left;
-  font-size: 16px;
+
+.detail-item {
+  display: flex;
+  align-items: center;
+  min-width: 350px;
 }
-.th-info1 {
-  width: 100px;
-  text-align: center;
-  font-size: 16px;
+
+.label {
+  font-weight: 500;
+  color: #606266;
+  margin-right: 8px;
+  min-width: 90px;
+}
+
+.value {
+  color: #303133;
+}
+
+/* 宸插畬鎴愯妭鐐规牱寮� */
+.node-completed {
+  color: #67c23a;
+}
+
+.node-completed .timeline-item-content {
+  border-color: #c6e2b8;
+  background-color: #f0f9eb;
+}
+
+.node-completed .node-title {
+  color: #67c23a;
+}
+
+/* 鏃堕棿绾垮浘鏍囨牱寮� */
+.el-timeline-item__node {
+  background-color: #909399;
+}
+
+.node-completed .el-timeline-item__node {
+  background-color: #67c23a;
 }
 </style>

--
Gitblit v1.9.3