From c36d7594f155a079a80ef8b697219695184cea31 Mon Sep 17 00:00:00 2001
From: songshankun <songshankun@foxmail.com>
Date: 星期一, 23 十月 2023 15:50:02 +0800
Subject: [PATCH] feat: 看板bug修复

---
 src/views/visualization.vue |  165 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 118 insertions(+), 47 deletions(-)

diff --git a/src/views/visualization.vue b/src/views/visualization.vue
index faa8596..b2c21a5 100644
--- a/src/views/visualization.vue
+++ b/src/views/visualization.vue
@@ -104,7 +104,8 @@
                       style="font-size: 35px; font-weight: 600"
                       class="color_green"
                     >
-                      {{ processingStatistics(taskData).finishNumber }}{{ taskData.Order.unit }}
+                      {{ processingStatistics(taskData).finishNumber }}
+<!--                      {{ taskData.Order.unit }}-->
                     </dd>
                   </dl>
                 </div>
@@ -117,7 +118,8 @@
                       style="font-size: 35px; font-weight: 600"
                       class="color_green"
                     >
-                      {{ processingStatistics(taskData).totalNumber }}{{ taskData.Order.unit }}
+                      {{ processingStatistics(taskData).totalNumber }}
+<!--                      {{ taskData.Order.unit }}-->
                     </dd>
                   </dl>
                 </div>
@@ -125,8 +127,8 @@
             </div>
             <div class="content_right">
               <div class="gif" v-if="taskData.Procedure.ID" @click="processModelClick(taskData,index)">
-                    <img v-if="taskData.isUpdateIcon"  src="../../public/shan.gif" />
-                    <span v-else class="yuandian"></span>
+                    <img class="blink" v-if="taskData.isUpdateIcon"  src="../../public/shan.gif" />
+                    <span v-else class="tip"></span>
                </div>
               <el-descriptions :column="(activeName == 1||activeName == 3) ? 2 : 1" :colon="true">
                 <el-descriptions-item label="浜у搧鍚嶇О">{{
@@ -304,7 +306,7 @@
                       </div>
                       <div class="card_top-2">
                         <div style="line-height: 45px; text-align: center">
-                          {{ taskData.Procedure.Status==3?'鐢熶骇瀹屾垚':'鐢熶骇涓�' }}
+                          {{ taskData?.plcStatus === 3 ? '寰呮満' : (taskData.Procedure.Status==3?'鐢熶骇瀹屾垚':'鐢熶骇涓�') }}
                         </div>
                         <!-- <span class="card-top-r-t">瀹屾垚杩涘害锛�50%</span>
                           <span class="card-top-r-b">12鏈�28鏃� 08:24</span> -->
@@ -354,10 +356,11 @@
                   class="button-finish"
                   v-model="finishShow['finishShow&'+index]"
                   trigger="click"
+                  :ref="'popoverRef_' + index"
                 >
                   <p><i class="el-icon-error" style="color:red;margin-right:5px;"/>璇风‘璁ゆ槸鍚﹀凡瀹屾垚璇ョ敓浜т换鍔�?</p>
                   <div style="text-align: right; margin: 0">
-                    <el-button size="mini" @click="finishShow['finishShow&'+index] = false">
+                    <el-button size="mini" @click="closePopover(index)">
                       鍙栨秷</el-button
                     >
                     <el-button
@@ -465,26 +468,28 @@
         </div>
         <div class="right-top-m">
           璁惧鐘舵��:
-          <!-- 1鏂紑2鐢熶骇3寰呮満 -->
-          <span style="position: relative" v-if="plcStatus" >
-            <el-popover
-              v-if="plcStatus == 1&&plcNotConnected"
-              width="180"
-              :content="plcNotConnected"
-              placement="top-end"
-              trigger="click"
-            >
-              <span slot="reference">
-                <img  src="../../public/duan.png" />
-                鏂紑
+          <template v-for="(plcStatus, channel) in displayPLCStatus">
+             <!-- 1鏂紑2鐢熶骇3寰呮満 -->
+            <span class="plc-status" style="position: relative" v-if="plcStatus">
+              <el-popover
+                v-if="plcStatus === 1&&plcNotConnected"
+                width="180"
+                :content="plcNotConnected"
+                placement="top-end"
+                trigger="click"
+              >
+                <span slot="reference">
+                  <img src="../../public/duan.png"/>
+                  鏂紑
+                </span>
+              </el-popover>
+              <span v-else>
+                <img v-if="plcStatus === 1&&!plcNotConnected" src="../../public/duan.png"/>
+                <img v-else src="../../public/lian.png"/>
+                {{ plcStatus === 1 ? '鏂紑' : (plcStatus === 2 ? '鐢熶骇涓�' : '寰呮満') }}
               </span>
-            </el-popover>
-            <span v-else>
-              <img  v-if="plcStatus == 1&&!plcNotConnected"  src="../../public/duan.png" />
-              <img  v-else src="../../public/lian.png" />
-              {{ plcStatus==1?'鏂紑':(plcStatus==2?'鐢熶骇涓�':'寰呮満') }}
             </span>
-          </span>
+          </template>
         </div>
         <div class="right-top-m-btn">
           <!-- <el-button type="primary" @click="controlClick"> 鎺у埗</el-button> -->
@@ -726,7 +731,7 @@
       cutdownTimer: null,
       ProcessModelTimer: null,
       TaskCount:0,
-      plcStatus:0,
+      PLCStatusMap:{0:0,1:0},
       isTipShow:false,
       // isFinsh:0,
       safeProduce:'',
@@ -781,24 +786,31 @@
     //   }
     // }
   },
-  methods: {
-    processingStatistics(taskData){
-      const status = taskData?.Procedure?.Status;
-      // 濡傛灉status = 2 鍔犲伐涓�, 鍒欏姞宸ユ暟鍜岀洰鏍囨暟搴斿彇杞鎺ュ彛涓殑 finishNumber 鍜� totalNumber
-      // 濡傛灉status = 1 鏈紑濮�, 鐩爣鏁� 鍙� taskData.Order.amount  鍔犲伐鏁板彇 0
-      // 濡傛灉status = 3 宸插畬鎴�, 鐩爣鏁板拰鍔犲伐鏁伴兘鍙� amount
-      let finishNumber = 0;
-      let totalNumber = 0;
-      if (status === 1){
-        totalNumber = taskData?.Order?.amount ?? 0
-        finishNumber = 0
-      }else if (status === 2){
-        totalNumber = taskData?.totalNumber ?? 0
-        finishNumber = taskData?.finishNumber ?? 0
-      }else if (status === 3){
-        totalNumber = taskData?.Order?.amount  ?? 0
-        finishNumber = taskData?.Order?.amount ?? 0
+  computed:{
+    displayPLCStatus(){
+      let PLCStatus = []
+      if (this.activeName===1){
+        PLCStatus =[this.PLCStatusMap[0]]
+      }else if (this.activeName===2){
+        PLCStatus =[this.PLCStatusMap[0],this.PLCStatusMap[1]]
+      }else if (this.activeName===3){
+        PLCStatus =[this.PLCStatusMap[1]]
+      }else {
+        return []
       }
+
+      return PLCStatus
+    }
+  },
+  methods: {
+    /**
+     * 浠庝换鍔′腑鑾峰彇鍔犲伐鏁板拰鐩爣鏁�
+     * @param taskData
+     * @return {{totalNumber: number, finishNumber: number}}
+     */
+    processingStatistics(taskData){
+      const totalNumber = taskData?.totalNumber ?? 0
+      const finishNumber = taskData?.finishNumber ?? 0
 
       return {
         /** 鐩爣鏁� */
@@ -809,10 +821,13 @@
     },
     /**
      * 璁$畻鐢熶骇杩涘害
-     * @param statistics
+     * @param {{totalNumber: number, finishNumber: number}} statistics
      * @return {number}  杩涘害,0~100
      */
     calculateProgress(statistics){
+      if (statistics.finishNumber === 0){
+        return 0
+      }
       if (statistics.finishNumber === statistics.totalNumber){
         return 100
       }
@@ -1152,6 +1167,7 @@
             this.TasksCopy[i].outputMaterials = [];
             this.TasksCopy[i].finishNumber = 0;
             this.TasksCopy[i].totalNumber = 0;
+            this.TasksCopy[i].plcStatus = 0;
             this.TasksCopy[i].number=0;
             this.TasksCopy[i].isUpdateIcon=false;
             this.finishShow['finishShow&'+i]=false
@@ -1268,7 +1284,8 @@
             if (res.code == 200) {
               this.TasksCopy[i].finishNumber = res.data?.finishNumber ?? 0;
               this.TasksCopy[i].totalNumber = res.data?.totalNumber ?? 0;
-              this.plcStatus = res.data?.plcStatus ?? 0
+              this.TasksCopy[i].plcStatus = res.data?.plcStatus ?? 0
+              this.PLCStatusMap[i] = res.data?.plcStatus ?? 0
             }
             this.resprocInfoTimer=res;
           });
@@ -1311,6 +1328,15 @@
       } else {
         this.$message.error("褰撳墠璁惧娌℃湁宸ュ簭锛�");
       }
+    },
+
+    /**
+     * 鍏抽棴 tooltip
+     * @param index
+     */
+    closePopover(index){
+      this.finishShow['finishShow&'+index] = false
+      this.$refs?.['popoverRef_' + index]?.[0]?.doClose()
     },
     getRandomNumber(min, max) {
       return Math.floor(Math.random() * (max - min + 1) + min);
@@ -1602,6 +1628,28 @@
         // margin-top:-5px;
         vertical-align: middle;
       }
+
+
+.tip {
+  display:inline-block;
+  // background: #15d815;
+  background:red;
+  border-radius: 50%;
+  // margin-top:-5px;
+  vertical-align: middle;
+}
+.blink{
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+}
+.tip, .blink{
+  position: absolute;
+  top: -6px;
+  right: -6px;
+  width: 14px;
+  height: 14px;
+}
 .bottom_list {
   position: relative;
   padding: 10px;
@@ -1810,15 +1858,18 @@
         border-radius: 6px;
         position:relative;
         .gif{
+          background: url("../../public/setting.png") no-repeat;
+          background-size:100% 100%;
           position:absolute;
           right:15px;
           top:10px;
           width:35px;
+          height: 35px;
           vertical-align: middle;
           cursor:pointer;
-          img{
-            width:100%;
-          }
+          //img{
+          //  width:100%;
+          //}
         }
         // background: #233b9e;
         .el-descriptions-row{
@@ -2190,4 +2241,24 @@
     padding: 12px;
   }
 }
+.plc-status{
+  margin-right: 24px;
+  position: relative;
+  display: inline-block;
+  height: 50px;
+  &:after{
+    content: '';
+    position: absolute;
+    top: 50%;
+    right: -12px;
+    margin-top: -15px;
+    border-right: 2px solid #ffffff;
+    height: 30px;
+  }
+}
+.plc-status:last-child{
+  &:after{
+    display: none;
+  }
+}
 </style>

--
Gitblit v1.8.0