From a6a33f6916afbf1fc629baecb772939cda2ee981 Mon Sep 17 00:00:00 2001
From: wankeda <Administrator@DESKTOP-HAU3ST3>
Date: 星期四, 13 三月 2025 17:58:12 +0800
Subject: [PATCH] 代码提交

---
 代码管理/WMS/WIDESEA_WMSClient/src/views/Home.vue |  279 +++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 268 insertions(+), 11 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/Home.vue" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/Home.vue"
index 820437a..312b017 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/Home.vue"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WMS/WIDESEA_WMSClient/src/views/Home.vue"
@@ -1,24 +1,281 @@
 <template>
-  <div class="title"></div>
+ <div>
+      <!-- <el-tabs tab-position="top" style="height: 2120px;width: 2000px;margin: 0px auto" class="demo-tabs">
+          <el-tab-pane :label="config.areaName" v-for="config in configs" :key="config.index">
+              <el-drawer v-model="visible" :show-close="false" :modal="false" :lock-scroll="false">
+                  <template #header="{ close, titleId, titleClass }">
+                  <h4 :id="titleId" :class="titleClass">璁惧鐘舵�佽缁�</h4>
+                  <el-button type="danger" @click="close">
+                      <el-icon class="el-icon--left"><CircleCloseFilled /></el-icon>
+                      Close
+                  </el-button>
+                  </template>
+                  <div class="equip-container">
+                      <el-table :data="tableData" style="width: 100%" height="85vh">
+                        <el-table-column fixed prop="plcName" label="璁惧鍚嶇О" width="90px" header-align="center" align="center"></el-table-column>
+                        <el-table-column prop="autoStatus" label="宸ヤ綔妯″紡" width="100px" header-align="center" align="center">
+                          <template #default="scope">
+                            <el-tag type="info" effect="plain">{{ scope.row.autoStatus }}</el-tag>
+                          </template>
+                        </el-table-column>
+                        <el-table-column prop="state" label="璁惧鐘舵��" width="90px" header-align="center" align="center">
+                          <template #default="scope">
+                            <el-tag :type="scope.row.state=='鏁呴殰'?'danger':'success'" effect="dark">{{ scope.row.state }}</el-tag>
+                          </template>
+                        </el-table-column>
+                        <el-table-column prop="workStatus" label="浣滀笟鐘舵��" width="100px" header-align="center" align="center">
+                          <template #default="scope">
+                            <el-tag type="warning">{{ scope.row.workStatus }}</el-tag>
+                          </template>
+                        </el-table-column>
+                        <el-table-column prop="errMessage" label="寮傚父淇℃伅" header-align="center" align="center"></el-table-column>
+                      </el-table>
+                  </div>
+              </el-drawer>
+              <div style="width: 1680px;height: 32px;line-height: 32px;margin-bottom: 10px;">
+                    <el-button size="small" @click="visible = true">
+                      鏌ョ湅璁惧鍏蜂綋鐘舵��
+                    </el-button>
+              </div>
+              <div class="home-container">
+                  <grid-layout :layout="config.layout"
+                          :col-num="50"
+                          :row-height="40"
+                          :is-draggable="false"
+                          :is-resizable="false"
+                          :margin="[0,0]"
+                          :responsive="false"
+                          :vertical-compact="false"
+                          :prevent-collision="true"
+                          :use-css-transforms="true"
+                          style="height: 2000px;"
+                  >
+                      <grid-item
+                          v-for="item in config.layout" 
+                          :x="item.x"
+                          :y="item.y"
+                          :w="item.w"
+                          :h="item.h"
+                          :i="item.i"
+                          :key="item.i"
+                          :is-draggable="false" 
+                          :is-resizable="false" 
+                          style="background: transparent;cursor: pointer;"
+                      >
+                          <el-tooltip :visible="item.showName" class="box-item" effect="dark" :content="'璁惧锛�'+item.equipName" placement="bottom">
+                              <div :class="{'wrap':item.isWrap,'fault':item.status.state=='Fault','stored':item.status.iSstore}" 
+                                  style="display: flex; overflow: hidden;" @mouseover="item.showName=true" @mouseout="item.showName=false">
+                                  <el-image :src="item.image" style="display: block;width: 40px;height: 40px" scroll-container=".home-container" v-for="i in item.h>item.w?item.h:item.w" :key="i.index" draggable="false"/>
+                              </div>
+                          </el-tooltip>  
+                      </grid-item>
+                  </grid-layout>
+              </div>
+          </el-tab-pane>
+      </el-tabs> -->
+      
+  </div>
 </template>
 
 <script>
 import { ref, reactive } from 'vue'
+import http from "@/api/http";
+// import "@/assets/css/index.css"
+import { CircleCloseFilled } from '@element-plus/icons-vue'
+import { ElNotification } from 'element-plus'
 
 export default {
-  setup() {
-    return {
-
-    }
+  components: {
+      CircleCloseFilled
+  },
+  data() {
+      return {
+          configs:[],
+          visible:false,
+          isGetConfig:true,
+          timer:null,
+          webSocket:null,
+          receivedData:null,
+          tableData:[
+            {
+              plcName: 'L1',
+              autoStatus: '鑷姩',
+              state: '姝e父',
+              workStatus: '鏀捐揣瀹屾垚',
+              errMessage: ''
+            },
+            {
+              plcName: 'L2',
+              autoStatus: '鑷姩',
+              state: '鏁呴殰',
+              workStatus: '鏀捐揣瀹屾垚',
+              errMessage: ''
+            },
+          ]
+      }
+  },
+  mounted(){
+      // this.configs=[];
+      // this.$nextTick(x=>{
+          // this.getConfigList();
+      // });
+      // this.showErrMsg("璁惧10锛氳繛鎺ュ紓甯�");
+      // this.connectWebSocket();
+  },
+  unmounted () {
+    this.configs=[];
+    clearInterval(this.timer);
+  },
+  methods: {
+      connectWebSocket() {  
+        this.webSocket = new WebSocket('ws:localhost:9290/websocket')
+        this.webSocket.addEventListener('open', this.onWebSocketOpen)
+        this.webSocket.addEventListener('message', this.onWebSocketMessage)  
+        this.webSocket.addEventListener('error', this.onWebSocketError)  
+        this.webSocket.addEventListener('close', this.onWebSocketClose)  
+      },  
+      onWebSocketOpen() {  
+        console.log('WebSocket connection established.')  
+      },  
+      onWebSocketMessage(event) {  
+        this.receivedData = event.data  
+        console.log('Received data:', this.receivedData)  
+        // 澶勭悊鎺ユ敹鍒扮殑鏁版嵁  
+        this.processData(this.receivedData)  
+      },  
+      onWebSocketError(event) {  
+        console.error('WebSocket error:', event)  
+      },  
+      onWebSocketClose(event) {  
+        console.log('WebSocket connection closed:', event.code, event.reason)  
+      },  
+      processData(data) {
+        console.log('Processing data:', data)
+        switch (data.type) {
+          case 'config':
+            this.configs=[];
+            data.config.forEach(item => {
+              for (let index = 0; index < item.layout.length; index++) {
+                item.layout[index].status=JSON.parse(item.layout[index].status);
+              }
+              this.configs.push(item);
+            });
+            break;
+          case 'equipDetail':
+            this.tableData=[];
+            data.equipDetail.forEach(item=>{
+              this.tableData.push(item);
+            });
+            break;
+          case 'errMessage':
+              this.showErrMsg(data.content);
+            break;
+          default:
+            break;
+        }
+      },
+      closeWebSocket() {  
+        if (this.webSocket && this.webSocket.readyState === WebSocket.OPEN) {  
+          this.webSocket.close()  
+        }  
+      },
+      getConfigList(){
+          http.post("/api/dt_ConfigArea/GetConfig",null).then(x=>{
+              if(x.status){
+                  this.configs=[];
+                  x.data.forEach(item => {
+                    for (let index = 0; index < item.layout.length; index++) {
+                        item.layout[index].status=JSON.parse(item.layout[index].status);
+                    }
+                    this.configs.push(item);
+                  });
+              }
+              if(this.isGetConfig){
+                this.isGetConfig=false;
+                this.timer=setInterval(()=>{
+                  this.$nextTick(x=>{
+                    this.getConfigList();
+                  });
+                },3000)
+              }
+          }).catch(error=>{
+              console.log("鍑洪敊"+error);
+          });
+      },
+      getDate(){
+        var currentDate = new Date();
+        // 鑾峰彇骞淬�佹湀銆佹棩銆佸皬鏃躲�佸垎閽熷拰绉�
+        var year = currentDate.getFullYear();
+        var month = (currentDate.getMonth() + 1).toString().padStart(2, '0'); // 鏈堜唤浠�0寮�濮嬶紝鎵�浠ヨ鍔�1锛屽苟琛ラ浂
+        var day = currentDate.getDate().toString().padStart(2, '0'); // 琛ラ浂
+        var hours = currentDate.getHours().toString().padStart(2, '0'); // 琛ラ浂
+        var minutes = currentDate.getMinutes().toString().padStart(2, '0'); // 琛ラ浂
+        var seconds = currentDate.getSeconds().toString().padStart(2, '0'); // 琛ラ浂
+        // 鎷兼帴鏃ユ湡鍜屾椂闂村瓧绗︿覆
+        var formattedDateTime = year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds;
+        return formattedDateTime;
+      },
+      showErrMsg(val){
+        ElNotification({
+          title: ' 寮傚父 '+this.getDate(),
+          message: val,
+          position: 'bottom-right',
+          type:'error',
+          duration: 0
+        })
+      },
+      // getStoredStyle(iSstore,val){
+      //   if(iSstore){
+      //     var indexU=val.indexOf("Up");
+      //     var indexD=val.indexOf("Down");
+      //     var indexL=val.indexOf("Left");
+      //     var indexR=val.indexOf("Right");
+      //     if(indexU>=0){
+      //       var style={
+      //         "width": "40px",
+      //         "height": "40px",
+      //         "--g":"repeat-y repeating-linear-gradient(0deg,#000 0 10px, #E6A23C 0 30px)",
+      //         "background": "var(--g)",
+      //         "background-size": "40px 40px,40px 40px",
+      //         "animation": "up 5s infinite linear"
+      //       };
+      //       return style
+      //     }else if(indexD>=0){
+      //       var style={
+      //         "width": "40px",
+      //         "height": "40px",
+      //         "--g":"repeat-y repeating-linear-gradient(0deg,#000 0 10px, #E6A23C 0px 30px)",
+      //         "background": "var(--g)",
+      //         "background-size": "40px 40px,40px 40px",
+      //         "animation": "down 5s linear infinite"
+      //       };
+      //       return style
+      //     }else if(indexL>=0){
+      //       var style={
+      //         "width": "40px",
+      //         "height": "40px",
+      //         "--g":"repeat-x repeating-linear-gradient(90deg,#000 0 10px, #E6A23C 0 30px)",
+      //         "background": "var(--g)",
+      //         "background-size": "40px 40px,40px 40px",
+      //         "animation": "left 5s infinite linear"
+      //       };
+      //       return style
+      //     }else if(indexR>=0){
+      //       var style={
+      //         "width": "40px",
+      //         "height": "40px",
+      //         "--g":"repeat-x repeating-linear-gradient(90deg,#000 0 10px, #E6A23C 0 30px)",
+      //         "background": "var(--g)",
+      //         "background-size": "40px 40px,40px 40px",
+      //         "animation": "right 5s infinite linear"
+      //       };
+      //       return style
+      //     }
+      //   }
+      // }
   }
 }
 </script>
 
 <style scoped>
-.title {
-  line-height: 70vh;
-  text-align: center;
-  font-size: 28px;
-  color: orange;
-}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3