From a1a6630f2eabfc78a379b5808b1bf7231a084d0b Mon Sep 17 00:00:00 2001
From: haoxuan <haoxuan>
Date: 星期三, 11 十月 2023 18:02:44 +0800
Subject: [PATCH] 工序弹框的 列表和详情的更新同步

---
 src/components/AddIssue.vue |  607 +++++++++++++++++++++++++++++++++++++++---------------
 1 files changed, 439 insertions(+), 168 deletions(-)

diff --git a/src/components/AddIssue.vue b/src/components/AddIssue.vue
index ae10aa1..223ce43 100644
--- a/src/components/AddIssue.vue
+++ b/src/components/AddIssue.vue
@@ -3,12 +3,17 @@
   <el-dialog
     :close-on-click-modal="false"
     :visible.sync="islook"
-    width="700px"
+    width="753px"
     class="add-event-dialog"
     :show-close="false"
   >
     <div class="tank-box">
-      <div slot="title" class="tac drawerHeader">鏂颁换鍔�</div>
+      <div slot="title" class="tac drawerHeader">
+        <span class="title-l">{{messageError?'鎻愮ず':'鏂颁换鍔�'}}</span>
+        <!-- <span class="title-r" @click="closeClick">
+          <img src="../../public/close.png" />
+        </span> -->
+      </div>
       <div class="dialog-content-box">
         <div
           style="
@@ -16,102 +21,143 @@
             width: 100%;
             height: 100%;
             overflow: hidden;
-            margin-bottom: 30px;
             text-align: left;
           "
         >
-          <div class="title-box margin_bottom_13">
-            <div class="title-item color_4efefa font_size_20 title-bng">
-              褰撳墠浠诲姟锛歿{ taskData.Procedure.procedure.procedureName || "" }}
+          <template v-if="messageError">
+            <div class="error-t">
+              <span v-if="messageError =='涓嬪彂鎴愬姛锛�'"  class="el-icon-success color_success"></span>
+              <span  v-else class="el-icon-error color_error"></span>
             </div>
-            <div class="title-item title-bng color_4efefa font_size_20">
-              鐢熶骇鏁伴噺锛�<span>{{ taskData.Order.amount || 0 }}</span>
+            <div class="error-m">
+              {{ messageError }}
             </div>
-          </div>
-          <div class="title-auto-box">
-            <div class="title-box margin_bottom_20">
-              <div class="title-item">
-                璁㈠崟缂栧彿锛歿{ taskData.Order.orderId || "" }}
+            <div
+              class="font_size_20 color_fff"
+              style="text-align: center; width: 100%; margin: 10px 0"
+            >
+              <span v-if="messageError =='涓嬪彂鎴愬姛锛�'" style="font-size:30px;">{{3-Number(sencond)}}s</span>
+              <span v-else>璇烽噸璇�</span>
+            </div>
+            
+          </template>
+          <template v-else-if="Object.keys(taskData).length > 0 ">
+            <div class="title-box margin_bottom_13">
+              <div class="title-item color_4efefa font_size_20 title-bng">
+                褰撳墠浠诲姟锛歿{ taskData.Procedure.procedure.procedureName || "" }}
               </div>
-              <div class="title-item">
-                宸ュ崟缂栧彿锛歿{ taskData.Order.workOrderId || "" }}
+              <div class="title-item title-bng color_4efefa font_size_20">
+                鐢熶骇鏁伴噺锛�<span style="color:#fff;">{{ taskData.Order.amount || 0 }}</span>
               </div>
-              <div class="title-item">
-                浜у搧鍚嶇О锛歿{ taskData.Order.productName || "" }}
-              </div>
-              <div class="title-item">
-                鏁伴噺锛歿{ taskData.Order.amount || 0 }}{{ taskData.Order.unit }}
-              </div>
-              <div class="title-item">
-                浜よ揣鏃ユ湡锛歿{ taskData.Order.deliverDate || "" }}
-              </div>
-              <div class="title-item">
-                宸ユ椂锛� {{ taskData.Procedure.procedure.workHours || "" }}
-              </div>
-              <div class="title-item">
-                璧锋鏃堕棿锛� {{ formatDate(taskData.Order.startTime) || "" }}
-                -
-                {{ formatDate(taskData.Order.endTime) }}
-              </div>
-              <div class="title-item">
-                瀹㈡埛鍚嶇О锛歿{ taskData.Order.customer || "" }}
-              </div>
-              <div class="title-item title-item-two">
-                璐х墿鎻忚堪锛� {{ taskData.Order.orderAttr || "" }}
-              </div>
+            </div>
+            <div class="title-auto-box">
+              <div class="title-box margin_bottom_20">
+                <div class="title-item">
+                  璁㈠崟缂栧彿锛歿{ taskData.Order.orderId || "" }}
+                </div>
+                <div class="title-item">
+                  宸ュ崟缂栧彿锛歿{ taskData.Order.workOrderId || "" }}
+                </div>
+                <div class="title-item">
+                  浜у搧鍚嶇О锛歿{ taskData.Order.productName || "" }}
+                </div>
+                <div class="title-item">
+                  鏁伴噺锛歿{ taskData.Order.amount || 0
+                  }}{{ taskData.Order.unit }}
+                </div>
+                <div class="title-item">
+                  浜よ揣鏃ユ湡锛歿{ taskData.Order.deliverDate || "" }}
+                </div>
+                <div class="title-item">
+                  宸ユ椂锛� {{ taskData.Procedure.procedure.workHours || "" }}
+                </div>
+                <div class="title-item">
+                  璁″垝鏃堕棿锛� {{ formatDate(taskData.Order.startTime) || "" }}
+                  -
+                  {{ formatDate(taskData.Order.endTime) }}
+                </div>
 
-              <div class="title-item title-item-two">
-                鍙傛暟瑕佹眰锛歿{ taskData.Order.parameter || "" }}
+                <div class="title-item">
+                  瀹㈡埛鍚嶇О锛歿{ taskData.Order.customer || "" }}
+                </div>
+                <div class="title-item title-item-two">
+                  璐х墿鎻忚堪锛� {{ taskData.Order.orderAttr || "" }}
+                </div>
+
+                <div class="title-item title-item-two">
+                  鍙傛暟瑕佹眰锛歿{ taskData.Order.parameter || "" }}
+                </div>
+              </div>
+              <div class="title-box margin_bottom_20">
+                <div
+                  style="
+                    color: #fff;
+                    font-size: 18px;
+                    margin-bottom: 10px;
+                    margin-top: 20px;
+                  "
+                  class="color_4efefa"
+                >
+                  宸ヨ壓鍙傛暟
+                </div>
+                <div
+                  class="title-item title-item-two"
+                  v-for="(item, index) in Arr"
+                  :key="index"
+                >
+                  {{ item.Key }}锛歿{ item.Value || "" }} 
+                  
+                </div>
               </div>
             </div>
-            <div class="title-box margin_bottom_20">
+            <div class="process-box" v-if="showBtn == 2 || showBtn == 3">
               <div
                 style="
-                  color: #fff;
-                  font-size: 18px;
-                  font-weight: 700;
-                  margin-bottom: 10px;
-                  margin-top: 20px;
+                  color: red;
+                  font-size: 26px;
+                  width: 100%;
+                  text-align: center;
+                  margin-bottom: 15px;
+                  line-height:35px;
                 "
+                :class="showBtn == 3&&isLoading?'margin-top-10px':'margin-top-40px'"
               >
-                宸ヨ壓鍙傛暟
-              </div>
-              <div
-                class="title-item title-item-two"
-                v-for="(item, index) in Arr"
-                :key="index"
-              >
-                {{ item.Key }}锛歿{ item.Value || "" }}
-              </div>
-            </div>
-          </div>
-          <div class="process-box"  v-if="showBtn==2||showBtn==3">
-            <div
-              style="
-                color: red;
-                font-size: 16px;
-                width: 100%;
-                text-align: center;
-                font-weight: 700;
-                margin-bottom: 20px;
-                margin-top: 10px;
-              "
-            >
-              璇风‘璁ょ敓浜у畨鍏紒
-            </div>
-            <div class="progress-item">
-              <span>{{ parseInt(num/60*100) }}%</span>
-            <el-progress
-             style="width:calc(100% - 50px);float:right"
-                  define-back-color="#CDC6C6"
-                  color="#00cc66"
-                  text-color="#fff"
-                  :text-inside="true"
-                  :stroke-width="20"
-                  :percentage="parseInt(num/60*100)"
-                ></el-progress>
+              <div class="gif-box" v-if="showBtn == 2||(showBtn == 3&&!isLoading)">
+                <template v-if="showBtn == 2">
+                  <div class="gif">
+                    <img  src="../../public/shan.gif" />
+                  </div>
+                  
+                </template>
+                <template v-if="showBtn == 3&&!isLoading">
+                  <div class="gif">
+                    <span class="yuandian"></span>
+                  </div>
+                </template>
+                <div class="gif-right">
+                  ----- 鍓╀綑鏃堕棿 -----
+                  <span>00:00:{{30 - Number(num)<10?0:''}}{{ 30 - Number(num) }}</span>
                 </div>
-          </div>
+              </div>
+                {{ message }}
+              </div>
+              <template v-if="showBtn == 3&&isLoading">
+                <div class="progress-item">
+                    <span>{{ parseInt((num / 30) * 100) }}%</span>
+                    <el-progress
+                      style="width: calc(100% - 50px); float: right"
+                      define-back-color="#CDC6C6"
+                      color="#00cc66"
+                      text-color="#fff"
+                      :text-inside="true"
+                      :stroke-width="20"
+                      :percentage="parseInt((num / 30) * 100)"
+                    ></el-progress>
+                </div>
+              </template>
+            </div>
+          </template>
+
           <!-- <div class="circel-text">
          <div class="circel-text-b">
           鐢熶骇鏁伴噺锛�<span>{{ Order.amount||0 }}</span>{{ Order.unit||'' }}
@@ -119,26 +165,49 @@
         </div> -->
         </div>
       </div>
-      <div slot="footer" class="dialog-footer tac" style="overflow: hidden">
-        <div class="btn" @click="closeClick">
-          <img src="../../public/btn1.png" />
-        </div>
-        <div class="btn" v-if="showBtn==1" @click="confirmClick1">
-          <img src="../../public/confirm3.png" />
-        </div>
-        <div class="btn" v-if="showBtn==2">
-          <img src="../../public/confirm2.png" />
-        </div>
-        <div class="btn" v-if="showBtn==3" @click="onSubmit()">
-          <img src="../../public/confirm1.png" />
-        </div>
+      <div slot="footer" :class="messageError?'dialog-footer tac btn-error':'dialog-footer tac'" style="overflow: hidden">
+        <template v-if="messageError">
+          <div class="btn" v-if="messageError =='涓嬪彂鎴愬姛锛�'||ArrError"  @click="closeClick">
+            <img  src="../../public/close-btn.png" />
+          </div>
+          <div class="btn" v-else  @click="confirmClick2">
+            <img  src="../../public/agin.png" />
+          </div>
+        </template>
+        <template v-else>
+          <div class="btn" @click="closeClick">
+              <img src="../../public/btn1.png" />
+          </div>
+          <div class="btn" v-if="showBtn == 1">
+            <div v-if='taskData&&taskData.CanStarted' @click="confirmClick1"><img  src="../../public/confirm1.png" /></div>
+            <div v-else><img  src="../../public/confirm2.png" /></div>
+          </div>
+          <div class="btn" v-if="showBtn == 2">
+            <img src="../../public/confirm2.png" />
+          </div>
+          <div
+            class="btn"
+            v-if="showBtn == 3"
+            v-prevent-re-click="3000"
+            @click="onSubmit()"
+          >
+            <i class="el-icon-loading icon-loading" v-if="isLoading"/>
+            <img src="../../public/loading.png"  v-if="isLoading"/>
+            <img src="../../public/confirm3.png" v-if="!isLoading"/>
+          </div>
+        </template>
       </div>
+      <!-- <ErrorIssue ref="error" :messageError="messageError" @shutdown="shutdown"/> -->
     </div>
   </el-dialog>
 </template>
 
 <script>
-import { startTask, setProductNumber,sendProcessParams } from "@/api/home/index"; // 浜х嚎
+import {
+  startTask,
+  sendProcessParams,
+} from "@/api/home/index"; // 浜х嚎
+// import ErrorIssue from "@/components/ErrorIssue";
 export default {
   components: {},
   props: {
@@ -160,51 +229,113 @@
         return [];
       },
     },
+    ArrError:{
+      type: [String],
+      default: () => {
+        return '';
+      },
+    },
+    safeProduce:{
+      type: [String],
+      default: () => {
+        return '';
+      },
+    },
+    activeName:{
+      type: [String,Number],
+      default: () => {
+        return 1;
+      },
+    },
   },
   data() {
     return {
       islook: false,
       showBtn:1,
-      num:0,
-      timer:null,
+      num: 0,
+      timer: null,
+      message: this.safeProduce,
+      messageError: "",
+      resParams: {},
+      isLoading:false,
+      sencond:0,
+      sencondTimer:null,
     };
   },
   mounted() {
+    this.message=this.safeProduce;
     this.getInfo();
   },
   watch: {
     taskData(val) {
+      this.message=this.safeProduce;
       this.getInfo();
     },
-    num(){
-      if(this.num==60){
-        clearInterval(this.timer)
-        this.showBtn=3;
+    num() {
+      if (this.num == 30) {
+        clearInterval(this.timer);
+        this.showBtn = 3;
       }
-    }
+    },
+    sencond(){
+      if(this.sencond==3){
+        clearInterval(this.sencondTimer);
+        this.closeClick()
+      }
+    },
+    islook(){
+      if (this.timer) {
+        clearInterval(this.timer);
+      }
+      this.num = 0;
+      this.showBtn=1;
+      this.isLoading=false
+      this.sencond=0
+      this.sencondTimer=null
+      this.messageError=''
+      this.resParams= {},
+      this.$emit('isTip',this.islook)
+    },
   },
   methods: {
-    confirmClick1(){
-      this.num=0;
-      this.showBtn=2;
-      this.timer=setInterval(()=>{
-       this.num=this.num+1;
-      },1000)
-      
+    confirmClick2() {
+      this.messageError = "";
+      this.isLoading=false;
     },
-    closeClick(){
-      if(this.timer){
-        clearInterval(this.timer)
+    confirmClick1() {
+      this.num = 0;
+      this.showBtn = 2;
+      (this.message = this.safeProduce),
+        (this.timer = setInterval(() => {
+          this.num = this.num + 1;
+        }, 1000));
+    },
+    closeClick() {
+      if (this.timer) {
+        clearInterval(this.timer);
       }
-      this.num=0;
+      this.num = 0;
       this.shutdown();
     },
     getInfo() {
-      if (Object.keys(this.taskData).length > 0 && this.taskData.Procedure.ID) {
-        this.islook=true
-      }else{
-        this.islook=false;
+      // 1 鏈敓浜� 2鐢熶骇涓� 3鐢熶骇瀹屾垚
+      if (
+        Object.keys(this.taskData).length > 0 && this.taskData.Procedure.ID &&
+          this.taskData.Procedure.Status == 1
+      ) {
+          this.num = 0;
+          this.showBtn = 1;
+          this.islook = true;
+      } else {
+        this.islook = false;
+        //  this.islook = true;
+        
       }
+      if(this.ArrError){
+        this.messageError=this.ArrError;
+        
+      }
+      
     },
     getDateObj(date, fmt) {
       if (/(y+)/.test(fmt)) {
@@ -238,29 +369,68 @@
     formatDate(value) {
       if (value) {
         const now = value ? new Date(value * 1000) : new Date();
-        let time = this.getDateObj(now, "yyyy-MM-dd");
+        let time = this.getDateObj(now, "MM-dd hh:mm");
         return time;
       } else {
         return "";
       }
     },
+
     onSubmit() {
-      if(this.taskData.Procedure.ID){
-        sendProcessParams({id:this.taskData.Procedure.ID}).then(res=>{
-          if(res.code==200){
-            setProductNumber().then((res) => {
-              if (res.code == 200) {
-                this.$message.success("涓嬪彂鎴愬姛锛�");
-                // this.$message.success("涓嬪彂鐢熶骇鏁伴噺鎴愬姛锛�");
-                this.$emit("getSetProductNumber");
-                this.shutdown();
-              }
-            });
+      if (this.taskData.Procedure.ID) {
+        (this.message = "宸ヨ壓鍙傛暟涓嬪彂涓�..."), (this.num = 0);
+        this.timer = setInterval(() => {
+          this.num = this.num + 1;
+          if (this.num == 30 || this.resParams) {
+            this.num = 30;
+            this.getCode(this.resParams);
           }
-        })
-     
+        }, 1000);
+        if(this.isLoading){
+          return true;
+        }
+        this.isLoading=true;
+          sendProcessParams({ procedureId: this.taskData.Procedure.ID,position: Number(this.taskData.Position), }).then((res) => {
+            if (res.code == 200) {
+              this.resParams = res;
+              this.isLoading=false;
+            } else {
+              this.isLoading=false;
+              this.resParams = res;
+            }
+          });
+          setTimeout(()=>{
+            this.isLoading=false;
+          },30000)
       }
-      
+    },
+    getCode(res) {
+      if (res.code == 200) {
+        if (this.num == 30) {
+          this.messageError = "涓嬪彂鎴愬姛锛�";
+          if (!this.sencondTimer) {
+            this.sencondTimer = setInterval(() => {
+              this.sencond = this.sencond + 1;
+            }, 1000);
+          }
+          clearInterval(this.timer);
+          // this.num = 30;
+          // this.showBtn = 2;
+          this.message = this.safeProduce;
+
+          this.num = 0;
+          this.showBtn= 1
+          this.shutdown();
+          this.$emit('getSetProductNumber',this.activeName)
+          // this.$message.success("涓嬪彂鐢熶骇鏁伴噺鎴愬姛锛�");
+        }
+      } else {
+        this.messageError = res.msg ? res.msg : "鎶辨瓑锛屽伐搴忎笅鍙戝け璐ワ紒";
+        clearInterval(this.timer);
+        this.num = 30;
+        this.showBtn = 2;
+        this.message =this.safeProduce;
+      }
     },
     shutdown() {
       this.islook = false;
@@ -270,19 +440,35 @@
 </script>
 
 <style lang="scss" scoped>
+.color_error{
+  color:red;
+}
+.color_success{
+  color:green;
+}
 .tank-box {
-  width: 638px;
-  height: 630px;
-  padding: 0 20px;
+  width: 753px;
+  height: 728px;
   background: url("../../public/tank.png") no-repeat center center / cover;
   position: relative;
   .dialog-footer {
     position: absolute;
-    bottom: 40px;
+    bottom: 25px;
+    width:100%;
+    text-align:center;
   }
+}
+.margin-top-10px{
+  margin-top:10px;
+}
+.margin-top-40px{
+  margin-top:40px;
 }
 .color_4efefa {
   color: #4efefa !important;
+}
+.color_fff {
+  color: #fff;
 }
 .font_size_20 {
   font-size: 20px !important;
@@ -291,9 +477,10 @@
   margin-bottom: 13px;
 }
 .title-box {
-  width: 100%;
+  width: calc(100% - 140px);
   height: auto;
   overflow: hidden;
+  padding:0 70px;
   .title-item {
     width: 45%;
     float: left;
@@ -305,12 +492,13 @@
       width: 55%;
     }
   }
+
   .title-bng {
-    height: 42px;
-    line-height: 42px;
+    height: 52px;
+    line-height:52px;
     span {
-      width: calc(100% - 110px);
-      height: 42px;
+      width: calc(100% - 120px);
+      height: 52px;
       text-align: center;
       display: inline-block;
       background: url("../../public/number.png") no-repeat center center / cover;
@@ -319,6 +507,21 @@
   .title-item-two {
     width: 100% !important;
   }
+}
+.error-t {
+  width: 100px;
+  margin: 100px auto 40px;
+  font-size:98px;
+  span {
+    display: inline-block;
+  }
+}
+.error-m {
+  line-height: 35px;
+  font-size: 28px;
+  color: #fff;
+  margin-bottom: 20px;
+  text-align: center;
 }
 ::v-deep .el-dialog {
   background: transparent;
@@ -329,17 +532,27 @@
 ::v-deep .el-dialog__body {
   padding: 0 !important;
 }
+.btn-error{
+  bottom:80px!important;
+}
 .btn {
-  width: 200px;
+  width: 150px;
   height: auto;
-  float: left;
   display: inline-block;
+  position:relative;
   img {
     width: 100%;
   }
+  .icon-loading{
+    font-size:32px;
+    color:#333;
+    position:absolute;
+    line-height:2.0;
+    left:38%;
+  }
   &:nth-of-type(1) {
-    margin-right: 30px;
-    margin-left: 110px;
+    // margin-right: 30px;
+    // margin-left: 110px;
   }
 }
 ::v-deep .el-tabs__content {
@@ -417,30 +630,71 @@
   width: 100%;
 }
 .dialog-content-box {
-  height: calc(100% - 200px);
+  height: calc(100% - 190px);
   // overflow: hidden;
-  padding: 50px 20px 20px;
+  padding: 20px 0px 10px;
   .el-form {
     overflow: hidden;
   }
   .title-auto-box {
-    height: calc(100% - 150px);
+    height: calc(100% - 220px);
     overflow: auto;
+    width:calc(100% - 140px);
+    margin: 0 auto; 
+    background:#0E246A;
+    .title-box{
+      padding:0 10px;
+      width:calc(100% - 20px);
+    }
   }
-  .progress-item{
-    width:55%;
-    padding:2px 8px;
-    height:20px;
-    background:#fff;
-    border-radius:30px;
+  .gif-box{
+    width:230px;
     margin:0 auto;
-    border:2px solid rgba(255,255,255,0.5);
-    box-shadow: 1px 5px 5px rgba(255,255,255,0.5);
-    span{
-      float:left;
+    margin-bottom:5px;
+    .gif-right{
+      width:210px;
+      font-size:14px;
+      color:#fff;
+      line-height:28px;
+      span{
+        font-weight: 700;
+        font-size:18px;
+      }
+    }
+  }
+  .gif{
+    width:55px;
+    vertical-align: middle;
+    float:left;
+    margin-right:20px;
+    img{
+      width:100%;
+    }
+    .yuandian {
+        width: 55px;
+        height: 55px;
+        float:left;
+        // background: #15d815;
+        background:red;
+        border-radius: 50%;
+        // margin-top:-5px;
+        vertical-align: middle;
+      }
+  }
+  .progress-item {
+    width: 55%;
+    padding: 2px 8px;
+    height: 20px;
+    background: #fff;
+    border-radius: 30px;
+    margin: 0 auto;
+    border: 2px solid rgba(255, 255, 255, 0.5);
+    box-shadow: 1px 5px 5px rgba(255, 255, 255, 0.5);
+    span {
+      float: left;
       font-weight: 700;
-      color:#333;
-      font-size:15px;
+      color: #333;
+      font-size: 15px;
     }
   }
 }
@@ -453,12 +707,29 @@
   font-weight: 600;
 }
 .drawerHeader {
-  font-weight: 700;
-  font-size: 20px;
-  text-align: center;
-  color: #fff;
-  height: 35px;
-  line-height: 35px;
+  width:98%;
+  margin:0 auto;
+  overflow:hidden;
+  .title-l{
+    width:25%;
+    float:left;
+    margin-left:30px;
+    font-size: 25px;
+    color: #fff;
+    height: 3.2vw;
+    line-height: 4.5vw;
+  }
+  .title-r{
+    width:60px;
+    float:right;
+    height: 60px;
+    line-height: 5vw;
+    cursor:pointer;
+    img{
+      display:inline-block;
+      width:100%;
+    }
+  }
   .identify {
     width: 80px;
     height: 25px;

--
Gitblit v1.8.0