From aa4f970f6d0a2c88111e1e9baf58c8626c38068c Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期日, 08 十月 2023 16:30:29 +0800
Subject: [PATCH] Merge branch 'wn' of http://192.168.5.5:10010/r/web/SchedulingDashboard into wn

---
 src/views/visualization.vue |  331 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 235 insertions(+), 96 deletions(-)

diff --git a/src/views/visualization.vue b/src/views/visualization.vue
index aa8ee94..9d1679e 100644
--- a/src/views/visualization.vue
+++ b/src/views/visualization.vue
@@ -1,6 +1,6 @@
 
 <template>
-  <div class="home">
+  <div class="home" ref="homeRef">
     <!-- v-if="Tasks&&Tasks.length>0" -->
     <template >
       <div class="left">
@@ -25,9 +25,9 @@
               style="float: left;"
               @click="cutClick(3)"
             >
-              <img style="width:32px;" v-if="activeName == 3" src="../../public/one-blue.png" />
+              <img style="width:32px;" v-if="activeName == 3" src="../../public/right-blue.png" />
               <span  v-else>
-                <img style="width:32px;" src="../../public/one.png" />
+                <img style="width:32px;" src="../../public/right.png" />
               </span>
             </span>
          </template>
@@ -104,7 +104,7 @@
                       style="font-size: 35px; font-weight: 600"
                       class="color_green"
                     >
-                      {{ taskData.finishNumber }}{{ taskData.Order.unit }}
+                      {{ taskData.finishNumber || 0 }}{{ taskData.Order.unit }}
                     </dd>
                   </dl>
                 </div>
@@ -124,33 +124,37 @@
               </div>
             </div>
             <div class="content_right">
+              <div class="gif" v-if="taskData.Procedure.ID" @click="processModelClick(taskData)">
+                    <img v-if="isUpdateIcon"  src="../../public/shan.gif" />
+                    <span v-else class="yuandian"></span>
+               </div>
               <el-descriptions :column="(activeName == 1||activeName == 3) ? 2 : 1" :colon="true">
                 <el-descriptions-item label="浜у搧鍚嶇О">{{
-                  taskData.Order.productName || ""
+                  taskData.Order.productName || "--"
                 }}</el-descriptions-item>
                 <el-descriptions-item label="鏁伴噺"
                   >{{ taskData.Order.amount || 0
                   }}{{ taskData.Order.unit }}</el-descriptions-item
                 >
                 <el-descriptions-item label="浜よ揣鏃ユ湡">{{
-                  taskData.Order.deliverDate || ""
+                  taskData.Order.deliverDate || "--"
                 }}</el-descriptions-item>
                 <el-descriptions-item label="宸ユ椂">
-                  {{ taskData.Procedure.procedure.workHours || "" }}
+                  {{ taskData.Procedure.procedure.workHours || "--" }}
                 </el-descriptions-item>
                 <el-descriptions-item label="璁″垝鏃堕棿"
-                  >{{ formatDate(taskData.Order.startTime) || "" }}
+                  >{{ formatDate(taskData.Order.startTime) || "--" }}
                   -
                   {{ formatDate(taskData.Order.endTime) }}</el-descriptions-item
                 >
                 <el-descriptions-item label="璐х墿鎻忚堪">{{
-                  taskData.Order.orderAttr || ""
+                  taskData.Order.orderAttr || "--"
                 }}</el-descriptions-item>
                 <el-descriptions-item label="瀹㈡埛鍚嶇О">{{
-                  taskData.Order.customer || ""
+                  taskData.Order.customer || "--"
                 }}</el-descriptions-item>
                 <el-descriptions-item label="鍙傛暟瑕佹眰">{{
-                  taskData.Order.parameter || ""
+                  taskData.Order.parameter || "--"
                 }}</el-descriptions-item>
               </el-descriptions>
               <el-descriptions :column="1" :colon="true">
@@ -163,7 +167,7 @@
                     :text-inside="true"
                     :stroke-width="30"
                     :percentage="
-                      (taskData.Order && taskData.finishNumber != 0)
+                      (taskData.Order && taskData.finishNumber != 0 && taskData.Order.amount)
                         ? parseInt(
                             (taskData.finishNumber / taskData.Order.amount) *
                               100
@@ -211,16 +215,32 @@
                     v-for="(list, index2) in item"
                   >
                     <div class="card_content">
-                      <div class="card_contentLeft">{{ list.materialId }}</div>
+                      <div class="card_contentLeft font_dian">
+                        <el-popover
+                          width="200"
+                          :content="list.materialId"
+                          placement="top-start"
+                          trigger="click"
+                        >
+                          <span slot="reference">{{ list.materialId }}</span>
+                        </el-popover>
+                      </div>
                     </div>
                     <div class="card-top-input-out-l">
-                      <div>
+                      <div class="font_dian">
                         <!-- 璁惧12<i
                             style="font-size: 14px"
                             class="el-icon-right font-arrow-20"
                           ></i>
                           璁惧13 -->
-                        {{ list.materialName }}
+                          <el-popover
+                          width="200"
+                          :content="list.materialName"
+                          placement="top-start"
+                          trigger="click"
+                        >
+                          <span slot="reference">{{ list.materialName }}</span>
+                        </el-popover>
                       </div>
                     </div>
                     <div class="card-top-input-out-r">
@@ -277,7 +297,7 @@
                       <div class="card_top-3">
                         <span class="card-top-r-t"
                           >瀹屾垚杩涘害锛歿{
-                            taskData.Order && taskData.finishNumber != 0
+                            (taskData.Order && taskData.finishNumber != 0 && taskData.Order.amount)
                               ? parseInt(
                                   (taskData.finishNumber /
                                     taskData.Order.amount) *
@@ -344,7 +364,9 @@
               ></p>
               <div class="right-small-btn bottom-box-btn">
                 <el-button type="primary"> 鎵撳嵃</el-button>
+
                 <el-popover
+                v-if="taskData.Procedure.Status && taskData.Procedure.Status!==3"
                   placement="top-end"
                   width="160"
                   class="button-finish"
@@ -359,7 +381,6 @@
                     <el-button
                       type="primary"
                       size="mini"
-                      :disabled="taskData.Procedure.Status==3?true:false"
                       class="color_f70f83"
                       @click="finishClick(index, taskData)"
                     >
@@ -368,6 +389,7 @@
                   </div>
                   <el-button type="primary" slot="reference"> 瀹屾垚</el-button>
                 </el-popover>
+                <el-button  v-else type="primary" class="huise"> 瀹屾垚</el-button>
               </div>
             </div>
             <i class="el-icon-arrow-right font-arrow-20 color_318583"></i>
@@ -397,13 +419,27 @@
                   >
                     <div class="card">
                       <div class="card_content">
-                        <div class="card_contentLeft">
-                          {{ list.materialId }}
+                        <div class="card_contentLeft font_dian">
+                          <el-popover
+                          width="200"
+                          :content="list.materialId"
+                          placement="top-start"
+                          trigger="click"
+                        >
+                          <span slot="reference">{{ list.materialId }}</span>
+                        </el-popover>
                         </div>
                       </div>
                       <div class="card-top-input-out-l">
-                        <div>
-                          {{ list.materialName }}
+                        <div class="font_dian">
+                          <el-popover
+                            width="200"
+                            :content="list.materialName"
+                            placement="top-start"
+                            trigger="click"
+                          >
+                            <span slot="reference">{{ list.materialName }}</span>
+                          </el-popover>
                         </div>
                       </div>
                       <div class="card-top-input-out-r">
@@ -448,12 +484,24 @@
         <div class="right-top-m">
           璁惧鐘舵��:
           <!-- 1鏂紑2鐢熶骇3寰呮満 -->
-          <span style="position: relative"
-           v-if="plcStatus" >
-            <img v-if="plcStatus == 1" src="../../public/duan.png" />
-            <img v-else src="../../public/lian.png" />
-            <!-- <span class="yuandian"></span> -->
-            {{ plcStatus==1?'鏂紑':(plcStatus==2?'鐢熶骇涓�':'寰呮満') }}
+          <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" />
+                鏂紑
+              </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>
         </div>
         <div class="right-top-m-btn">
@@ -551,11 +599,18 @@
     <AddIssue
       ref="control"
       :Arr="Arr"
+      :activeName="activeName"
+      :ArrError="ArrError"
       :safeProduce="safeProduce"
       :taskData="taskData"
       :Order="taskData.Order"
-      @getSetProductNumber="getTaskInfo"
+      @getSetProductNumber="reloadPage"
       @isTip="isTip"
+    />
+    <!-- 宸ヨ壓妯″瀷 -->
+    <ProcessModel
+      ref="processModel"
+      :listData="listData"
     />
   </div>
 </template>
@@ -570,17 +625,20 @@
   getProgress,
   countdown,
   getTaskUnStarted,
+  processModelList,
 } from "@/api/home/index"; // 浜х嚎
 import Card from "@/components/Card.vue";
 import Knowledge from "../components/Knowledge.vue";
 import AddControl from "../components/AddControl.vue";
 import AddIssue from "../components/AddIssue.vue";
+import ProcessModel from  "../components/ProcessModel.vue";
 export default {
   components: {
     Card,
     Knowledge,
     AddControl,
     AddIssue,
+    ProcessModel,
   },
   data() {
     return {
@@ -679,15 +737,33 @@
       countDownHour: 0,
       countDownMinute: 0,
       Arr: [],
+      ArrError:'',
       // 璁板綍瀹氭椂鍣ㄧ姸鎬�
       procInfoTimer: null,
       cutdownTimer: null,
+      ProcessModelTimer: null,
       TaskCount:0,
       plcStatus:0,
       isTipShow:false,
       // isFinsh:0,
       safeProduce:'',
+      // 璁惧鏂紑鐨勫師鍥�
+      plcNotConnected:'',
       ChannelAmount:0,
+      object:{
+        Order: {},
+        Procedure: {
+          procedure: { inputMaterials: [], outputMaterials: [], workers: [] },
+        },
+        inputMaterials: [],
+        outputMaterials: [],
+        procedureList: [],
+      },
+      processList:[],
+      isUpdateIcon:false,
+      listData:[],
+      resResult:null,
+      resprocInfoTimer:null,
     };
   },
   mounted() {
@@ -712,6 +788,51 @@
     // }
   },
   methods: {
+    getModelList(){
+      this.resResult=null
+      for (let i in this.TasksCopy){
+        if(this.TasksCopy[i].Procedure.ID&&this.TasksCopy[i].number){
+          processModelList({
+            procedureId: this.TasksCopy[i].Procedure.ID,
+            page: 1,
+            pageSize:6,
+            number:this.TasksCopy[i].number
+          }).then(res=>{
+            if(res.code==200){
+              this.processList=res.data?res.data:[];
+              if(this.processList.length>0){
+                for(let i in this.processList){
+                  if(this.processList[i].isUpdate){
+                    this.isUpdateIcon=true;
+                    break;
+                  }
+                } 
+              }
+            }
+            this.resResult=res; 
+          })
+        }
+      }
+    },
+    processModelClick(list){
+      this.listData=list;
+      if( Object.keys(this.listData).length > 0){
+        if(this.listData.Procedure.ID&&this.listData.number){
+          this.$refs.processModel.islook=true
+          return true;
+        }
+      }
+      this.$message.error('褰撳墠宸ュ簭鏃犵紪鍙凤紝鏃犳硶鏌ョ湅宸ュ簭!')
+     
+    },
+    getProcessModelList(){
+      this.getModelList()
+      if (!this.ProcessModelTimer&&!this.resResult) {
+          this.ProcessModelTimer = setInterval(() => {
+          this.getModelList();
+        }, 10000)
+      }
+    },
     taskClick(){
       if(this.TaskCount>0){
         this.getStartArr()
@@ -731,15 +852,27 @@
       this.activeName = val;
       if(this.activeName==2){
         this.Tasks=this.TasksCopy.slice(0,2)
+        if(this.Tasks.length<2){
+          if(this.Tasks.length==0){
+            this.Tasks.push(this.object)
+          }
+          this.Tasks.push(this.object)
+        }
       }else if(this.activeName==1){
         this.Tasks=this.TasksCopy.slice(0,1)
+        if(this.Tasks.length<1){
+          this.Tasks.push(this.object)
+        }
       }else if(this.activeName==3){
         this.Tasks=this.TasksCopy.slice(1)
+        if(this.Tasks.length<1){
+          this.Tasks.push(this.object)
+        }
       }
     },
-    reloadPage() {
+    reloadPage(val) {
       // window.location.reload();
-      this.getTaskInfo();
+      this.getTaskInfo(val);
     },
     getcountdown() {
       countdown().then((res) => {
@@ -832,16 +965,21 @@
       setInterval(() => {
        d= getCha();
       }, 6000);
-      return d;
+      return date?d:'--';
     },
     setInterCard(value, name, i) {
       if (this.TasksCopy[i].Procedure.procedure[value]!=null) {
         let height = 200;
-        let num = 1;
-        if (this.$refs[name]) {
-          height = this.$refs[name].$el?this.$refs[name].$el.offsetHeight:200;
-          num = Math.floor(height / 80);
+        let num = 3;
+        // if (this.$refs[name]) {
+        //   height = this.$refs[name].$el?this.$refs[name].$el.offsetHeight:200;
+        //   num = Math.floor(height / 80);
+        // }
+        height = this.$refs['homeRef']?(this.$refs['homeRef'].offsetHeight-470-90-20):200;
+        if(this.activeName==2){
+          height=height-610-90-20
         }
+        num = Math.floor(height / 80);
         let inputMaterials = JSON.parse(
           JSON.stringify(this.TasksCopy[i].Procedure.procedure[value])
         );
@@ -868,35 +1006,10 @@
       }
     },
 
-    getTaskInfo() {
-      let object = {
-        Order: {},
-        Procedure: {
-          procedure: { inputMaterials: [], outputMaterials: [], workers: [] },
-        },
-        inputMaterials: [],
-        outputMaterials: [
-            // [
-            //   {
-            //    materialId:11111,
-            //    materialName:'272澶у鍟婃斁鍋囦簡鍗¤壈鑻﹀鏂楀瀮鍦惧彂蹇�掑瀮鍦惧弽棣堟潵寰楀強鍏嬮殕',
-            //    amount:100,
-            //    unit:'浠�'
-            //   }
-            // ]
-        ],
-        procedureList: [
-        //  [ 
-        //     {
-        //       name:"宸ュ簭",
-        //       deviceName:'1111dhafjdhajkhf jkdahjkf鎵撴硶鍗冲彲鎵撻枊閺堟帴鑲痉鍩哄晩鐪嬩締jdad澶ч浜笢鍗¤�佸徃鏈虹暘绐犲�掕嚰寮�浜嗘埧閲戦樋濂庣鍗佸叚灞婂弽棣堟媺寰锋柉鍩簁鎵撳崱鏈洪樋鐝傞檮浠舵墦寮�浜嗙偣鍑婚樋閲屽崱鍑忚偉鐨勫崱鎷夎兌寮�浜嗘埧澶ц涓婂厠闅唂k鍟﹀ぇ瀹堕槻绌洪浄閬旀暩鎿氱湅i'
-        //     },
-        //   ]
-        ],
-      };
+    getTaskInfo(val) {
       this.Tasks = [];
       this.TasksCopy=[]
-      getTaskInfo({  }).then((res) => {
+      getTaskInfo({taskMode:2}).then((res) => {
         if (res.code == 200&&res.data) {
           let arr=[]
           if(res.data.Tasks){
@@ -904,21 +1017,21 @@
             return (a.Channel - b.Channel)
            })
           }
-          this.activeName=1;
           this.TasksCopy = res.data.Tasks ? res.data.Tasks : [];
           this.safeProduce=res.data.Prompt.safeProduce?res.data.Prompt.safeProduce:''
+          this.plcNotConnected=res.data.Prompt.plcNotConnected?res.data.Prompt.plcNotConnected:''
           this.ChannelAmount=res.data.ChannelAmount?res.data.ChannelAmount:1
           // if(this.ChannelAmount>1 &&this.TasksCopy.length<2){
-          //   this.TasksCopy.push(object)
+          //   this.TasksCopy.push(this.object)
           // }
           this.TaskCount=res.data.TaskCount?res.data.TaskCount:0
           
-          if (this.TasksCopy.length == 0&&this.TaskCount==0) {
+          if ((this.TasksCopy.length ==0 )||!this.TasksCopy) {
             if (this.activeName == 1||this.activeName == 3) {
-              this.TasksCopy.push(object);
+              this.TasksCopy.push(this.object);
             } else {
-              this.TasksCopy.push(object);
-              this.TasksCopy.push(object);
+              this.TasksCopy.push(this.object);
+              this.TasksCopy.push(this.object);
             }
           }
           this.workers=res.data.workers?res.data.workers:[]
@@ -927,6 +1040,7 @@
             this.TasksCopy[i].inputMaterials = [];
             this.TasksCopy[i].outputMaterials = [];
             this.TasksCopy[i].finishNumber = 0;
+            this.TasksCopy[i].number=0;
             this.finishShow['finishShow&'+i]=false
             this.TasksCopy[i].Procedure.procedure.workers = this.TasksCopy[i].Procedure
               .procedure.workers
@@ -943,6 +1057,7 @@
             if (this.TasksCopy[i].Procedure.ID) {
               startTask({ id: this.TasksCopy[i].Procedure.ID }).then((res) => {
                 if (res.code == 200) {
+                  this.TasksCopy[i].number=res.data.Number
                   // res.data.number
                   this.TasksCopy[i].procedureList[0].push({
                     number: res.data.Number,
@@ -957,11 +1072,12 @@
           }
           this.getStartArr()
           this.getProgressInfo();
-              if (!this.procInfoTimer) {
+              if (!this.procInfoTimer&&!this.resprocInfoTimer) {
                 this.procInfoTimer = setInterval(() => {
                   this.getProgressInfo();
                 }, 3000);
-          }
+              }
+           this.getProcessModelList();
         }
         // if (res.code != 200 || this.TasksCopy.length == 0) {
         //   this.getcountdown();
@@ -972,10 +1088,10 @@
         //     }, 60000);
         //   }
         // }
-        this.cutClick(1)
+        this.cutClick(val?val:1)
       });
-      // this.TasksCopy.push(object)
-      // this.TasksCopy.push(object)
+      // this.TasksCopy.push(this.object)
+      // this.TasksCopy.push(this.object)
     },
     getStartArr(){
       // for (let i in this.TasksCopy) {
@@ -985,13 +1101,16 @@
       //       break;
       //   }
       // }
-      getTaskUnStarted({page:1,pageSize:1}).then(res=>{
+      getTaskInfo({taskMode:1}).then(res=>{
         if(res.code==200){
           this.taskData=res.data.Tasks?res.data.Tasks[0]:{};
-          if (this.taskData.Procedure.ID) {
+          this.ArrError=''
+          if (Object.keys(this.taskData).length > 0 &&this.taskData.Procedure.ID) {
               startTask({ id: this.taskData.Procedure.ID }).then((res) => {
                 if (res.code == 200) {
                   this.Arr =res.data.Params ? res.data.Params : []
+                }else{
+                  this.ArrError=res.msg?res.msg:'鑾峰彇宸ヨ壓鍙傛暟澶辫触锛�';
                 }
               });
             }
@@ -999,6 +1118,7 @@
       })
     },
     getProgressInfo() {
+      this.resprocInfoTimer=null
       for (let i in this.TasksCopy){
         if(this.TasksCopy[i].Procedure.ID){
           getProgress({
@@ -1011,10 +1131,10 @@
                 : 0;
                 this.plcStatus=res.data.plcStatus?res.data.plcStatus:0
             }
+            this.resprocInfoTimer=res;
           });
         }
       }
-      
     },
     // 璁剧疆
     setUrl() {
@@ -1045,7 +1165,7 @@
         finishTask({ id: taskData.Procedure.ID }).then((res) => {
           if (res.code == 200) {
             this.finishShow['finishShow&'+i] = false;
-            this.getTaskInfo();
+            this.reloadPage(this.activeName?this.activeName:1);
             this.$message.success("鎿嶄綔鎴愬姛锛�");
           }
         });
@@ -1084,7 +1204,7 @@
  color:#318583;
 }
 .el-empty{
-  height:100%;
+  height:calc(100% - 190px);
   .el-empty__description p{
     font-size:16px!important;
     color:#fff!important;
@@ -1305,6 +1425,16 @@
   background: #09e5ed !important;
   color: #333 !important;
 }
+.yuandian {
+        width: 35px;
+        height: 35px;
+        display:inline-block;
+        // background: #15d815;
+        background:red;
+        border-radius: 50%;
+        // margin-top:-5px;
+        vertical-align: middle;
+      }
 .bottom_list {
   position: relative;
   padding: 10px;
@@ -1407,6 +1537,15 @@
       border: 0;
     }
   }
+  .huise{
+    width: 46%;
+    float: right;
+  }
+  .huise.el-button--primary {
+      background: #CCE8E8;
+      color: #AAAAAA;
+      border: 0;
+    }
 }
 .home {
   width: 100%;
@@ -1500,6 +1639,17 @@
         padding: 0 10px;
         background: rgb(22 72 173);
         border-radius: 6px;
+        position:relative;
+        .gif{
+          position:absolute;
+          right:15px;
+          top:10px;
+          width:35px;
+          vertical-align: middle;
+          img{
+            width:100%;
+          }
+        }
         // background: #233b9e;
         .el-descriptions-row{
           height:45px;
@@ -1543,6 +1693,12 @@
         margin-top: 10px;
         color: #333;
         position: relative;
+        .font_dian{
+            -webkit-box-orient:vertical;
+            overflow:hidden;
+            text-overflow:ellipsis;
+            white-space:nowrap;
+          }
         .card_top-2{
           width:35%;
         }
@@ -1664,12 +1820,7 @@
             border-radius: 5px 5px 0 0;
             background: rgb(19, 35, 90);
           }
-          .font_dian{
-            -webkit-box-orient:vertical;
-            overflow:hidden;
-            text-overflow:ellipsis;
-            white-space:nowrap;
-          }
+          
 
           .card_contentRight {
             width: 100%;
@@ -1739,18 +1890,6 @@
           // float:left;
           display:inline-block;
         }
-      }
-      
-      .yuandian {
-        width: 25px;
-        height: 25px;
-        line-height: 40px;
-        margin-top: 12.5px;
-        display: inline-block;
-        background: #15d815;
-        display: block;
-        border-radius: 50%;
-        float: right;
       }
     }
     .right-top-m-btn {

--
Gitblit v1.8.0