From 8e49faa42ff419efa0641478702ce7d5f8455bd9 Mon Sep 17 00:00:00 2001
From: huangxiaoqiang <huangxiaoqiang@hnkhzn.com>
Date: 星期三, 30 七月 2025 20:47:56 +0800
Subject: [PATCH] 1

---
 项目代码/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue |  261 +++++++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 206 insertions(+), 55 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue" "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue"
index 573faf3..0aebd5a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/WCS/WIDESEAWCS_Client/src/views/LineComponent.vue"
@@ -1,7 +1,7 @@
 <template>
   <div>
     <el-row>
-      <template v-for="item in 56" :key="item">
+      <template v-for="item in 32" :key="item">
         <el-col :span="0.9">
           <span class="image-text"></span>
           <img src="../../public/璐ф灦.jpeg" />
@@ -9,7 +9,7 @@
       </template>
     </el-row>
     <el-row style="padding-bottom: 5px;">
-      <template v-for="item in 56" :key="item">
+      <template v-for="item in 32" :key="item">
         <el-col :span="0.9">
           <span class="image-text"></span>
           <img src="../../public/璐ф灦.jpeg" />
@@ -19,11 +19,14 @@
   </div>
   <div class="line-container">
     <div class="line"></div>
-    <div class="dot" :style="{ right: dotPosition + 'px' }" ref="childDot" @click="mouseClick"></div>
+    <!-- <div class="dot" :style="{ right: dotPosition + 'px' }" ref="childDot" @click="mouseClick"></div> -->
+    <div :class="update()"
+      :style="{ transform: `translateX(${StackerCrane.CurrentColumn < 33 ? StackerCrane.CurrentColumn * 30 - 29 : 0}px)` }"
+      ref="childDot" @click="mouseClick"></div>
   </div>
   <div>
     <el-row style="padding-top: 5px;">
-      <template v-for="item in 56" :key="item">
+      <template v-for="item in 32" :key="item">
         <el-col :span="0.9">
           <span class="image-text"></span>
           <img src="../../public/璐ф灦.jpeg" />
@@ -31,7 +34,7 @@
       </template>
     </el-row>
     <el-row style="padding-bottom: 5px;">
-      <template v-for="item in 56" :key="item">
+      <template v-for="item in 32" :key="item">
         <el-col :span="0.9">
           <span class="image-text"></span>
           <img src="../../public/璐ф灦.jpeg" />
@@ -40,46 +43,102 @@
     </el-row>
   </div>
 
-  <el-dialog v-model="dialogVisible" title="淇℃伅鏌ョ湅" :before-close="handleClose">
-    <el-form ref="$form" :model="stackerItemInfo" label-position="left" label-width="100px" size="medium">
+  <el-dialog v-model="dialogVisible" title="鍫嗗灈鏈轰俊鎭煡鐪�" :before-close="handleClose">
+    <el-form ref="$form" :model="StackerCrane" label-position="left" label-width="120px" size="medium">
       <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="璁惧缂栧彿锛�">
-            <!-- <el-input v-model="equipNo"></el-input> -->
-            <j-el-description :value="equipNo" type="primary" ellipsis></j-el-description>
+            <j-el-description :value="StackerCrane.DeviceName" type="primary" ellipsis></j-el-description>
           </el-form-item>
         </el-col>
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="璁惧鐘舵��:">
-            <j-el-description :value="stackerItemInfo.r_Stack_EquipmentStatus" type="primary"
-              ellipsis></j-el-description>
+            <j-el-description :value="StackerCrane.Fault" type="primary" ellipsis></j-el-description>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="宸ヤ綔妯″紡:">
-            <j-el-description :value="stackerItemInfo.r_Stack_WorkPattern" type="primary" ellipsis></j-el-description>
+            <j-el-description :value="StackerCrane.Automatic" type="primary" ellipsis></j-el-description>
           </el-form-item>
         </el-col>
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="浠诲姟鍙凤細">
-            <j-el-description :value="stackerItemInfo.r_Stack_tasknumber" type="primary" ellipsis></j-el-description>
+            <j-el-description :value="StackerCrane.CurrentTaskNum" type="primary" ellipsis></j-el-description>
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="浣滀笟鐘舵��:">
-            <j-el-description :value="stackerItemInfo.r_Stack_jobstate" type="primary" ellipsis></j-el-description>
+            <j-el-description :value="StackerCrane.Running" type="primary" ellipsis></j-el-description>
           </el-form-item>
         </el-col>
         <el-col :span="12" :offset="0" :push="0" :pull="0" tag="div">
           <el-form-item label="褰撳墠琛屽垪灞傦細">
             <j-el-description
-              :value="stackerItemInfo.r_Stack_linenum + '-' + stackerItemInfo.r_Stack_olumnnum + '-' + stackerItemInfo.r_Stack_layernum"
+              :value="StackerCrane.CurrentRow + '-' + StackerCrane.CurrentColumn + '-' + StackerCrane.CurrentLayer"
               type="primary" ellipsis></j-el-description>
           </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div" style="margin-bottom: 10px;">
+        <el-col :span="24" :offset="0" :push="0" :pull="0" tag="div">
+          <el-form-item label="鎶ヨ淇℃伅:">
+            <j-el-description :value="StackerCrane.StackerAlarm" type="primary" ellipsis></j-el-description>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-divider />
+      <h4 style="margin-bottom: 50px;">鎵嬪姩鎿嶄綔</h4>
+      <el-form ref="form" :model="form" label-width="90px">
+        <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+          <el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+            <el-form-item label="浠诲姟鍛戒护"  prop="TargetAddress">
+              <el-select size="large" v-model="form.TaskType" placeholder="璇烽�夋嫨浠诲姟鍛戒护">
+                <el-option label="鍏ュ簱" value="17" />
+                <el-option label="鍑哄簱" value="18" />
+                <el-option label="绉诲簱" value="20" />
+                <el-option label="鍙栬揣" value="24" />
+                <el-option label="鏀捐揣" value="48" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+          <el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+            <el-form-item label="璧风偣琛屽垪灞�:">
+              <el-input size="large" v-model="form.SourceAddress" style="width: 800px" placeholder="璇疯緭鍏ヨ捣鐐硅鍒楀眰" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+          <el-col :span="16" :offset="0" :push="0" :pull="0" tag="div">
+            <el-form-item label="缁堢偣琛屽垪灞�:">
+              <el-input size="large" v-model="form.TargetAddress" style="width: 800px" placeholder="璇疯緭鍏ョ粓鐐硅鍒楀眰" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <el-divider />
+      <el-row :gutter="20" type="flex" justify="start" align="top" tag="div">
+        <el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+          <el-button type="primary" size="small" plain @click="start">
+            <i class="el-icon-check">鍚姩</i>
+          </el-button>
+
+        </el-col>
+        <el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+          <el-button type="warning" size="small" plain @click="reset">
+            <i class="el-icon-check">澶嶄綅</i>
+          </el-button>
+
+        </el-col>
+        <el-col :span="8" :offset="0" :push="0" :pull="0" tag="div">
+          <el-button type="danger" size="small" plain @click="emergencyStop">
+            <i class="el-icon-check">鎬ュ仠</i>
+          </el-button>
         </el-col>
       </el-row>
     </el-form>
@@ -95,6 +154,7 @@
 </template>
 
 <script>
+import { id } from "element-plus/es/locale";
 import JElDescription from "./JElDescription";
 export default {
   components: {
@@ -105,16 +165,24 @@
       x: 0, // 鍒濆x鍊�
       url: "api/Equipment/GetStackerInfoByNo",
       dialogVisible: false,
-      stackerItemInfo: {
-        r_Stack_EquipmentStatus: "",
-        r_Stack_jobstate: "",
-        r_Stack_layernum: "",
-        r_Stack_linenum: "",
-        r_Stack_olumnnum: "",
-        r_Stack_tasknumber: "",
-        r_Stack_WalkingLaserValue: "",
-        r_Stack_WorkPattern: "",
-      }
+      StackerCrane: {
+        Automatic: "",
+        Fault: "",
+        CurrentLayer: "1",
+        CurrentRow: "1",
+        CurrentColumn: "1",
+        CurrentTaskNum: "",
+        Running: "",
+        DeviceName: "",
+        DeviceCode: "",
+        StackerAlarm:"",
+      },
+      form: {
+        TaskType: "",
+        SourceAddress: "",
+        TargetAddress: "",
+        DeviceCode: "",
+      },
     };
   },
   props: {
@@ -125,37 +193,92 @@
   },
   computed: {
     dotPosition() {
-      return -this.x;
+      return this.x;
     },
   },
   mounted() {
-    this.moveDot(-this.x);
+    this.moveDot(this.x);
   },
   methods: {
     moveDot(x) {
-      const dot = this.$refs.childDot;
-      dot.style.transform = `translateX(${-x}px)`;
+      this.StackerCrane.Automatic = x.Automatic == null ? "鏁呴殰" : x.Automatic;
+      this.StackerCrane.Fault = x.Fault == null ? "鏁呴殰" : x.Fault;
+      this.StackerCrane.Running = x.Running == null ? "鏁呴殰" : x.Running;
+      this.StackerCrane.CurrentColumn = x.CurrentColumn == undefined ? 1 : x.CurrentColumn;
+      this.StackerCrane.CurrentLayer = x.CurrentLayer == undefined ? 1 : x.CurrentLayer;
+      this.StackerCrane.LevelPoint = x.LevelPoint;
+      this.StackerCrane.DeviceName = x.DeviceName;
+      this.StackerCrane.StackerAlarm = x.StackerAlarm;
+      this.form.DeviceCode = x.DeviceCode;
+    },
+    update() {
+      if (this.StackerCrane.Automatic == "鑱旀満妯″紡" && this.StackerCrane.Fault != "鏁呴殰" && this.StackerCrane.Running == "寰呮満") {
+        return 'dot-Automatic ';
+      }
+      else if (this.StackerCrane.Automatic == "鑱旀満妯″紡" && this.StackerCrane.Fault != "鏁呴殰" && this.StackerCrane.Running == "杩愯涓�") {
+        return 'dot-Running ';
+      } else if (this.StackerCrane.Fault == "鏁呴殰") {
+        return 'dot-Fault ';
+      } else {
+        return 'dot-Fault ';
+      }
     },
     mouseClick() {
       this.fullscreenLoading = true;
       this.dialogVisible = true;
-      // 澶勭悊鐐瑰嚮浜嬩欢
-      if (this.url != "") {
-        this.http.post(this.url + "?equipNo=" + this.equipNo, null, "")
-          .then((x) => {
-            if (x.status) {
-              this.stackerItemInfo = x.data;
-            } else {
-              this.$message({
-                type: "error",
-                message: x.message,
-              });
-            }
-          });
-      }
       this.fullscreenLoading = false;
-      // this.dialogVisible = false;
     },
+    start() {
+      this.fullscreenLoading = true;
+      this.http.post("api/DeviceInfo/StackerHandTask", this.form)
+        .then((x) => {
+          if (!x.status) {
+            this.$message.error(x.message);
+          } else {
+            this.$Message.success("鍫嗗灈鏈哄懡浠ゅ凡涓嬪彂");
+            // $vue.success("鎴愬姛.");
+            this.show = false;
+            $vue.refresh();
+          }
+        })
+        .finally(() => {
+          this.fullscreenLoading = false;
+        });
+    }, reset() {
+      this.fullscreenLoading = true;
+      this.http.post("api/DeviceInfo/StackerReset?DeviceCode=" + this.form.DeviceCode)
+        .then((x) => {
+          if (!x.status) {
+            this.$message.error(x.message);
+          } else {
+            this.$Message.success("澶嶄綅鎴愬姛");
+            // $vue.success("鎴愬姛.");
+            this.show = false;
+            $vue.refresh();
+          }
+        })
+        .finally(() => {
+          this.fullscreenLoading = false;
+        });
+    },
+
+    emergencyStop() {
+      this.fullscreenLoading = true;
+      this.http.post("api/DeviceInfo/StackerEmergencyStop?DeviceCode=" + this.form.DeviceCode)
+        .then((x) => {
+          if (!x.status) {
+            this.$message.error(x.message);
+          } else {
+            this.$Message.success("鎬ュ仠宸叉寜涓�");
+            // $vue.success("鎴愬姛.");
+            // this.show = false;
+            // $vue.refresh();
+          }
+        })
+        .finally(() => {
+          this.fullscreenLoading = false;
+        });
+    }
   },
 };
 </script>
@@ -163,9 +286,9 @@
 <style scoped>
 .line-container {
   position: relative;
-  height: 10px;
+  height: 20px;
   background-color: #ecf5ff;
-  width: 1570px;
+  width: 960px;
 }
 
 .line {
@@ -177,11 +300,11 @@
   background-color: #a0cfff;
 }
 
-.dot {
+.dot-Running {
   position: absolute;
   top: -5px;
-  width: 20px;
-  height: 20px;
+  width: 25px;
+  height: 25px;
   border-radius: 50%;
   background-color: #409eff;
   transition: transform 0.3s ease;
@@ -191,14 +314,42 @@
   font-size: 9px;
   font-weight: bold;
   color: white;
-  /* background-image: url("../../public/鍫嗗灈鏈�.png");
-  background-repeat: no-repeat;
-  background-size: cover;
-  background-position: center; */
+}
+
+.dot-Automatic {
+  position: absolute;
+  top: -5px;
+  width: 25px;
+  height: 25px;
+  border-radius: 50%;
+  background-color: #0df705;
+  transition: transform 0.3s ease;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  font-size: 9px;
+  font-weight: bold;
+  color: white;
+}
+
+.dot-Fault {
+  position: absolute;
+  top: -5px;
+  width: 25px;
+  height: 25px;
+  border-radius: 50%;
+  background-color: #f80410;
+  transition: transform 0.3s ease;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  font-size: 9px;
+  font-weight: bold;
+  color: white;
 }
 
 img {
-  width: 28px;
+  width: 30px;
   height: 25px;
 }
 

--
Gitblit v1.9.3