From e1ac085b28440871c9639a63615b7a0f1081e6f3 Mon Sep 17 00:00:00 2001
From: wuyouming666 <2265557248@qq.com>
Date: 星期二, 05 九月 2023 15:13:59 +0800
Subject: [PATCH] 1、Plcaction类  接收前端message并 writeword   同时每10秒readword 发送给前端并渲染 2、用户token 设置为一天 ,超时自动跳转到登录页面 3、layout布局el-head 高度调整

---
 CanadaMes-ui/src/utils/request.js                                                          |   19 
 CanadaMes-ui/src/views/Electrical/Sign.vue                                                 |  111 +++++-
 CanadaMes-ui/src/store/index.js                                                            |   14 
 springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java                |   15 
 CanadaMes-ui/src/views/Electrical/State.vue                                                |   86 ++++-
 springboot-vue3/.idea/libraries/Maven__com_github_xingshuangs_iot_communication_1_4_2.xml  |   13 
 CanadaMes-ui/src/views/Electrical/Parameter.vue                                            |  215 ++++++++----
 springboot-vue3/springboot-vue3.iml                                                        |    1 
 CanadaMes-ui/src/layout/index.vue                                                          |   60 ++-
 springboot-vue3/src/main/java/com/example/springboot/security/constant/SystemConstant.java |    3 
 springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java        |   24 +
 CanadaMes-ui/src/store/module/tags.js                                                      |   22 +
 springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java           |   10 
 springboot-vue3/pom.xml                                                                    |  162 +++++++++
 CanadaMes-ui/src/views/Electrical/Action.vue                                               |  131 ++++++-
 CanadaMes-ui/src/views/device/talkvue.vue                                                  |   23 +
 springboot-vue3/src/main/java/com/example/springboot/entity/vo/Result.java                 |    1 
 springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java              |   73 ++++
 springboot-vue3/src/main/java/com/example/springboot/controller/DefaultController.java     |    3 
 19 files changed, 812 insertions(+), 174 deletions(-)

diff --git a/CanadaMes-ui/src/layout/index.vue b/CanadaMes-ui/src/layout/index.vue
index f18018f..f886453 100644
--- a/CanadaMes-ui/src/layout/index.vue
+++ b/CanadaMes-ui/src/layout/index.vue
@@ -51,36 +51,33 @@
         </el-col>
       </el-aside>
     </div>
-    <el-container>
-      <div>
-   
-  </div>
-      <el-header class="header-container">
-        <!-- <div class="tagContainer">
-               <tag></tag>
-
-        </div>  -->
+    <el-container  >
+     
+      <el-header class="header-container"    >
+      
         
-        <div class="tagContainer">
+        <div class="tagContainer"  >
       <tag v-for="(tag, index) in tags" :key="index" :tag="tag" @removeTag="removeTag"></tag>
     </div>
         <el-menu :default-active="activePath1" class="el-menu-demo" mode="horizontal"
                  background-color="#576574" text-color="#fff" active-text-color="#ffd04b">
-                 <div class="header-left">
-          <el-button :icon="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="toggleCollapse"></el-button>
+                 <div class="header-left"   >
+          <el-button :icon="isCollapse ? 'el-icon-s-unfold' : 'el-icon-s-fold'" @click="toggleCollapse"   style="height:30px"></el-button>
         </div>
-          <el-submenu index="1" class="user-icon">
+        <template >
+          <el-submenu index="1"  class="custom-submenu"  >
         
-            <template slot="title">
-              <el-avatar src="../assets/emi.png">
+             <template slot="title">
+              <el-avatar src="../assets/emi.png"  style="width:30px;height:30px;margin-top:2px;">
               </el-avatar>
-            </template>
-            <el-menu-item index="1-1" @click="logout">{{ $t('exit') }}</el-menu-item>
-            <el-menu-item index="1-2" @click="showChangePasswordDialog">{{ $t('changePassword') }}</el-menu-item>
+            </template> 
+            <el-menu-item index="1-1" @click="logout"  >{{ $t('exit') }}</el-menu-item>
+            <el-menu-item index="1-2" @click="showChangePasswordDialog"  >{{ $t('changePassword') }}</el-menu-item>
           </el-submenu>
+        </template> 
           <template>
-  <el-dialog title="淇敼瀵嗙爜" :visible.sync="dialogVisible" width="30%">
-    <el-form ref="form" :model="formData" label-width="100px">
+  <el-dialog title="淇敼瀵嗙爜" :visible.sync="dialogVisible" width="30%"   s>
+    <el-form ref="form" :model="formData" label-width="100px"   >
       <el-form-item label="鏃у瘑鐮�">
         <el-input v-model="formData.oldPassword" type="password" show-password></el-input>
       </el-form-item>
@@ -255,13 +252,28 @@
 </script>
 
 <style scoped lang="less">
-.header-container {
-  display: flex;
-  justify-content: flex-start;
+// .header-container {
+//   display: flex;
+//   justify-content: flex-start;
+//   height: 10px; /* 璁剧疆杈冨皬鐨勯珮搴� */
+// }
+
+.custom-submenu  {
+ 
+ 
+  height: 90px   !important;
 }
+
+.header-container {
+ 
+  height: 30px   !important; /* 璁剧疆杈冨皬鐨勯珮搴� */
+ }
+
+
 
 .header-left {
   margin-right: auto;
+  
 }
 .el-aside {
   height: 100vh;
@@ -302,7 +314,7 @@
 }
 
 .el-header {
-  padding: 0;
+
   background-color: #576574;
 }
 </style>
diff --git a/CanadaMes-ui/src/store/index.js b/CanadaMes-ui/src/store/index.js
new file mode 100644
index 0000000..150cead
--- /dev/null
+++ b/CanadaMes-ui/src/store/index.js
@@ -0,0 +1,14 @@
+// src/store/index.js
+
+import Vue from 'vue';
+import Vuex from 'vuex';
+import tags from './module/tags';
+
+Vue.use(Vuex);
+
+export default new Vuex.Store({
+  modules: {
+    tags,
+  },
+  // 鍏朵粬閰嶇疆
+});
diff --git a/CanadaMes-ui/src/store/module/tags.js b/CanadaMes-ui/src/store/module/tags.js
new file mode 100644
index 0000000..3e3b974
--- /dev/null
+++ b/CanadaMes-ui/src/store/module/tags.js
@@ -0,0 +1,22 @@
+const state = {
+  tags: []
+};
+
+const mutations = {
+  addTag(state, tag) {
+    if (!state.tags.includes(tag)) {
+      state.tags.push(tag);
+    }
+  },
+  removeTag(state, tag) {
+    const index = state.tags.indexOf(tag);
+    if (index !== -1) {
+      state.tags.splice(index, 1);
+    }
+  }
+};
+
+export default {
+  state,
+  mutations
+};
\ No newline at end of file
diff --git a/CanadaMes-ui/src/utils/request.js b/CanadaMes-ui/src/utils/request.js
index 65218d5..c5b5a25 100644
--- a/CanadaMes-ui/src/utils/request.js
+++ b/CanadaMes-ui/src/utils/request.js
@@ -1,5 +1,5 @@
 import axios from 'axios'
-import {Message} from 'element-ui'
+import { Message } from 'element-ui'
 
 const service = axios.create({
     baseURL: process.env.VUE_APP_BASE_API,
@@ -9,16 +9,29 @@
 service.interceptors.response.use(
     response => {
         const res = response.data
-        if (res.code !== 1 && res.code !== "200") {
+        if (res.code !== 1 && res.code !== "200" ) {
             Message({
                 message: res.msg || 'Error',
                 type: 'error',
                 duration: 5 * 1000
             })
-            return Promise.reject(new Error(res.msg || 'Error'))
+            if (res == 403) {
+                window.location.href = '/login'
+            }else{
+
+                return Promise.reject(new Error(res.msg || 'Error')
+                )
+            }
+
+           
+            
         } else {
             return res
+           
         }
+
+       
+        
     },
     error => {
         console.log('err' + error)
diff --git a/CanadaMes-ui/src/views/Electrical/Action.vue b/CanadaMes-ui/src/views/Electrical/Action.vue
index 2218ad7..8c429b9 100644
--- a/CanadaMes-ui/src/views/Electrical/Action.vue
+++ b/CanadaMes-ui/src/views/Electrical/Action.vue
@@ -2,38 +2,131 @@
   <div class="app">
     <!--闈㈠寘灞戝鑸尯鍩�-->
     <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
-      <el-breadcrumb-item :to="{ path: '/home' }">{{ $t('langHome') }}</el-breadcrumb-item>
-      <el-breadcrumb-item>璁惧绠$悊</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Parameter' }">鍙傛暟</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Action' }">寮�鍏虫帶鍒�</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Sign' }">IO鐘舵��</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/State' }">鎶ヨ淇℃伅</el-breadcrumb-item>
+      <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
+      <el-button type="text">璁惧绠$悊</el-button>
+      <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
+      <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
+      <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
+      <router-link to="/Electrical/State" tag="el-button" type="text">State</router-link>
     </el-breadcrumb>
-    <div>寮�鍏虫帶鍒�</div>
+    <div>Action</div>
+    <el-form label-width="100px" style="display: flex;flex-wrap: wrap;" :model="{ records }">
+      <div class="kuai_sb" v-for="item in records" :key="item.id">
+        <el-input v-model="item.mingcheng" style="width: 280px;" class="in_mc"></el-input>
+        <!-- <el-input v-model="item.zhuangtai" style="width: 80px;"></el-input> -->
+        <el-switch v-model="item.zhuangtai" active-color="#13ce66" active-value="1" inactive-value="2"></el-switch>
+      </div>
+
+
+      <div class="kuai_div">
+  <el-input style="width: 280px;" class="in_mc" value="conveyor Velocity(Auto SLOW)"></el-input>
+  <el-input v-for="(param, index) in record.params[0]" :key="index" v-model="record.params[0][index]" style="width: 80px;"></el-input>
+</div>
+<button @click="send()">娴嬭瘯鍙戦��</button>
+    </el-form>
+
+
   </div>
 </template>
 
-<script>
-
-
+<script >
+let socket;
 export default {
   name: "Action",
+  data () {
+    return {
+      records: [
+        { id: 1, mingcheng: 'conveyor Velocity(Auto SLOW)', zhuangtai: "1" },
+        { id: 2, mingcheng: 'B01 B02 TRAVEL POS Velocity AUTO', zhuangtai: "2" },
+        { id: 3, mingcheng: 'B01 B02 TRAVEL JOG Velocity', zhuangtai: "2" },
+        { id: 4, mingcheng: 'conveyor Velocity(Manual)', zhuangtai: "1" }
+      ],
+      messagepack: {
+        data: { taskname: "" }
+      },
+
+      record: {
+      params: [0,0,0,0,0,0]
+    },
+
+    }
+  },
+  created () {
+    this.init();
+    //console.log(this.records);
+  },
+  methods: {
+    init () {
+      let viewname = "talkvue";
+
+      if (typeof (WebSocket) == "undefined") {
+        console.log("鎮ㄧ殑娴忚鍣ㄤ笉鏀寔WebSocket");
+      } else {
+        //console.log("鎮ㄧ殑娴忚鍣ㄦ敮鎸乄ebSocket");
+
+        let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
+        if (socket != null) {
+          socket.close();
+          socket = null;
+        }
+        // 寮�鍚竴涓獁ebsocket鏈嶅姟
+        socket = new WebSocket(socketUrl);
+        //鎵撳紑浜嬩欢
+        socket.onopen = function () {
+          console.log("websocket宸叉墦寮�");
+        };
+        //  娴忚鍣ㄧ鏀舵秷鎭紝鑾峰緱浠庢湇鍔$鍙戦�佽繃鏉ョ殑鏂囨湰娑堟伅
+        socket.onmessage = function (msg) {
+  console.log("鏀跺埌鏁版嵁====" + msg.data);
+  let obj = JSON.parse(msg.data);
+  this.$set(this.record.params, 0, obj.params[0]);
+  console.log( this.record.params[0])
+}.bind(this);
+        //鍏抽棴浜嬩欢
+        socket.onclose = function () {
+          console.log("websocket宸插叧闂�");
+        };
+        //鍙戠敓浜嗛敊璇簨浠�
+        socket.onerror = function () {
+          console.log("websocket鍙戠敓浜嗛敊璇�");
+        }
+      }
+    },
+    send () {
+      this.messagepack.data = { taskname: "鍓嶇鍒板悗鍙�" };
+      socket?.send(JSON.stringify(this.messagepack));  // 灏嗙粍瑁呭ソ鐨刯son鍙戦�佺粰鏈嶅姟绔紝鐢辨湇鍔$杩涜杞彂
+    }
+
+  }
 
 }
+
+
+
+
 
 </script>
 
-<style lang="less" scoped>
-.el-table {
-  margin-top: 15px;
-  font-size: 12px;
+<style>
+.kuai_sb {
+  width: 30%;
+  margin-bottom: 15px;
 }
 
-.el-pagination {
-  margin-top: 15px;
+.el-input {
+  border: none;
+
+
+  .el-input__inner {
+    border: 1 solid black;
+  }
+
+
 }
 
-.app .el-card {
-  width: 99%;
+.in_mc {
+  .el-input__inner {
+    border: none;
+  }
 }
-</style>
+</style>
\ No newline at end of file
diff --git a/CanadaMes-ui/src/views/Electrical/Parameter.vue b/CanadaMes-ui/src/views/Electrical/Parameter.vue
index e54c476..49a02c8 100644
--- a/CanadaMes-ui/src/views/Electrical/Parameter.vue
+++ b/CanadaMes-ui/src/views/Electrical/Parameter.vue
@@ -1,81 +1,152 @@
 <template>
   <div class="app">
-    <!--闈㈠寘灞戝鑸尯鍩�-->
-    <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
-      <el-breadcrumb-item :to="{ path: '/home' }">{{ $t('langHome') }}</el-breadcrumb-item>
-      <el-breadcrumb-item>璁惧绠$悊</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Parameter' }">鍙傛暟</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Action' }">寮�鍏虫帶鍒�</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Sign' }">IO鐘舵��</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/State' }">鎶ヨ淇℃伅</el-breadcrumb-item>
-    </el-breadcrumb>
-    <div>鍙傛暟</div>
-    <el-row :gutter="40" style="display: flex;flex-wrap: wrap;">
-      <el-col :span="7">
-        <div class="grid-content bg-purple">
-          <el-input prop="sbname"></el-input>
-          <el-input prop="sbdata"></el-input>
-        </div>
-      </el-col>
-
-    </el-row>
+  <!--闈㈠寘灞戝鑸尯鍩�-->
+  <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
+  <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
+  <el-button type="text">璁惧绠$悊</el-button>
+  <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
+  <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
+  <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
+  <router-link to="/Electrical/State" tag="el-button" type="text">State</router-link>
+  </el-breadcrumb>
+  <div>Parameter</div>
+  
+  <el-form label-width="100px" style="display: flex;flex-wrap: wrap;" :model="messagepack.data">
+    <div id="btn_div">
+      <el-button type="primary" @click="send()">涓嬪彂鍙傛暟</el-button>
+    </div>
+    <div class="kuai_div" v-for="(item, index) in record.xyData" :key="index">
+      <el-input style="width: 280px;" class="in_mc" v-model="item.name"  readonly></el-input>
+      <el-input v-model="item.value" style="width: 80px;"></el-input>
+    </div>
+  </el-form>
   </div>
-</template>
-
-<script>
-
-
-export default {
+  </template>
+  
+  <script>
+  let socket;
+  
+  export default {
   name: "Parameter",
-  // data () {
-  //   return {
-  //     sbList: {
-  //       records: [],
-  //     }
-  //   }
-  // }
-}
-
-</script>
-
-<style lang="less" scoped>
-.el-row {
-  margin-bottom: 20px;
-
-  &:last-child {
-    margin-bottom: 0;
+  data() {
+  return {
+  record: {
+  params: [0, 0, 0, 0, 0, 0],
+  xyData: [{ name: "conveyor Velocity(Auto SLOW)", value: 0 },
+    { name: "B01 B02 TRAVEL POS Velocity AUTO", value: 0 },
+    { name: "B01 B02 TRAVEL JOG Velocity", value: 0 },
+    { name: "conveyor Velocity(Manual)", value: 0},
+    { name: "B01 B02 TRAVEL JOG Velocity", value: 0},
+    { name: "conveyor Velocity(Manual)", value: 0 }],
+  canshu: [
+  'conveyor Velocity(Auto SLOW)',
+  'B01 B02 TRAVEL POS Velocity AUTO',
+  'B01 B02 TRAVEL JOG Velocity',
+  'conveyor Velocity(Manual)',
+  'B01 B02 TRAVEL JOG Velocity',
+  'conveyor Velocity(Manual)'
+  ],
+  },
+  messagepack: {
+  data: { taskname: "" }
+  },
+  queryInfo: {
+  data: "1",
+  pageSize: 10
+  },
   }
-}
+  },
+  created() {
+  this.initWebSocket();
+  },
+  methods: {
+  initWebSocket() {
+  let viewname = "action";
+  
+    if (typeof WebSocket == "undefined") {
+      console.log("鎮ㄧ殑娴忚鍣ㄤ笉鏀寔WebSocket");
+    } else {
+      //console.log("鎮ㄧ殑娴忚鍣ㄦ敮鎸乄ebSocket");
+  
+      let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
+  
+      if (socket != null) {
+        socket.close();
+        socket = null;
+      }
+  
+      // 寮�鍚竴涓獁ebsocket鏈嶅姟
+      socket = new WebSocket(socketUrl);
+  
+      // 鎵撳紑浜嬩欢
+      socket.onopen = function () {
+        console.log("websocket宸叉墦寮�");
+      };
+  
+      // 鏀跺埌娑堟伅
+      socket.onmessage = (msg) => {
+  if (!msg.data) {
+    return; // 濡傛灉鏀跺埌绌烘暟鎹紝鍒欑洿鎺ヨ繑鍥烇紝涓嶆墽琛屽悗缁�昏緫
+  }
 
-.el-col {
-  border-radius: 4px;
-  margin: 10px;
-}
+  let obj = JSON.parse(msg.data);
+  this.record.params[0] = obj.params[0];
 
-.el-input {
-  width: 70px;
-  height: 30px;
-}
+  for (let a = 0; a <= this.record.params[0].length - 1; a++) {
+    if (!this.record.xyData[a]) {
+      this.record.xyData[a] = { name: this.record.canshu[a], value: this.record.params[0][a] };
+    } else {
+      this.record.xyData[a].value = this.record.params[0][a];
+    }
+  }
 
-.bg-purple-dark {
-  background: #99a9bf;
+  console.log(this.record.xyData);
+  this.$forceUpdate();
+};
+  
+      // 鍏抽棴浜嬩欢
+      socket.onclose = function () {
+        console.log("websocket宸插叧闂�");
+      };
+  
+      // 鍙戠敓閿欒浜嬩欢
+      socket.onerror = function () {
+        console.log("websocket鍙戠敓浜嗛敊璇�");
+      }
+    }
+  },
+  send() {
+  this.messagepack.data = this.record.xyData.map(item => parseInt(item.value)); // 杞崲涓烘暣鏁版暟缁�
+  console.log(this.messagepack);
+  socket?.send(JSON.stringify(this.messagepack));
 }
-
-.bg-purple {
-  background: #d3dce6;
-}
-
-.bg-purple-light {
-  background: #e5e9f2;
-}
-
-.grid-content {
-  border-radius: 4px;
-  min-height: 36px;
-}
-
-.row-bg {
-  padding: 10px 0;
-  background-color: #f9fafc;
-}
-</style>
+  }
+  }
+  </script>
+  
+  <style>
+  .kuai_div {
+  width: 30%;
+  margin-bottom: 15px;
+  }
+  
+  .el-input {
+  border: none;
+  }
+  
+  .el-input__inner {
+  border: 1px solid black;
+  }
+  
+  .in_mc .el-input__inner {
+  border: none;
+  }
+  
+  #btn_div {
+  width: 100%;
+  }
+  
+  #btn_div .el-button {
+  float: right;
+  }
+  </style>
\ No newline at end of file
diff --git a/CanadaMes-ui/src/views/Electrical/Sign.vue b/CanadaMes-ui/src/views/Electrical/Sign.vue
index b0dc890..2394d89 100644
--- a/CanadaMes-ui/src/views/Electrical/Sign.vue
+++ b/CanadaMes-ui/src/views/Electrical/Sign.vue
@@ -2,38 +2,113 @@
   <div class="app">
     <!--闈㈠寘灞戝鑸尯鍩�-->
     <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
-      <el-breadcrumb-item :to="{ path: '/home' }">{{ $t('langHome') }}</el-breadcrumb-item>
-      <el-breadcrumb-item>璁惧绠$悊</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Parameter' }">鍙傛暟</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Action' }">寮�鍏虫帶鍒�</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Sign' }">IO鐘舵��</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/State' }">鎶ヨ淇℃伅</el-breadcrumb-item>
+      <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
+      <el-button type="text">璁惧绠$悊</el-button>
+      <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
+      <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
+      <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
+      <router-link to="/Electrical/State" tag="el-button" type="text">State</router-link>
     </el-breadcrumb>
-    <div>IO鐘舵��</div>
+    <div>Sign</div>
+    <div style="padding-right: 30px;display: flex;flex-wrap: wrap;">
+      <div class="kuai_sb" v-for="item in records" :key="item.id">
+        <el-col class="deng" :class="getStatusClass(item.zhuangtai)">
+          <!-- <el-input v-model="item.zhuangtai" style="width: 280px;display: none;"
+            class="in_mc"></el-input>-->
+        </el-col>
+        <el-input v-model="item.mingcheng" style="width: 280px;" class="in_mc"></el-input>
+
+        <!-- <el-switch v-model="item.zhuangtai" active-color="#13ce66" active-value="1" inactive-value="2"></el-switch> -->
+      </div>
+
+    </div>
+
   </div>
 </template>
 
-<script>
-
+<script >
 
 export default {
   name: "Sign",
+  data () {
+    return {
+      records: [
+        { id: 1, mingcheng: 'conveyor Velocity(Auto SLOW)', zhuangtai: "1" },
+        { id: 2, mingcheng: 'B01 B02 TRAVEL POS Velocity AUTO', zhuangtai: "2" },
+        { id: 3, mingcheng: 'B01 B02 TRAVEL JOG Velocity', zhuangtai: "2" },
+        { id: 4, mingcheng: 'conveyor Velocity(Manual)', zhuangtai: "2" }
+      ]
+
+    }
+  },
+  created () {
+  },
+  methods: {
+    getStatusClass (zhuangtai) {
+      if (zhuangtai === "2") {
+        return "dow";
+      } else {
+        return "op";
+      }
+    }
+  }
 
 }
+
+
+
+
 
 </script>
 
-<style lang="less" scoped>
-.el-table {
-  margin-top: 15px;
-  font-size: 12px;
+<style>
+* {
+  margin: 0;
+  padding: 0;
 }
 
-.el-pagination {
-  margin-top: 15px;
+.el-input__inner {
+  text-align: center;
+  width: 100%;
 }
 
-.app .el-card {
-  width: 99%;
+.kuai_sb {
+  text-align: center;
+  width: 30%;
+  margin-bottom: 15px;
 }
-</style>
+
+.el-input {
+
+  .el-input__inner {
+    border: 1 solid black;
+  }
+
+
+}
+
+.in_mc {
+  .el-input__inner {
+    border: none;
+  }
+}
+
+.deng {
+  margin-left: 40%;
+  display: inline-block;
+  background: #A0A0A0;
+  border: 0.1875em solid white;
+  border-radius: 50%;
+  height: 5em;
+  width: 5em;
+  box-shadow: 0.375em 0.375em 0 0 rgba(214, 214, 214, 0.125);
+}
+
+.op {
+  background-color: #00ff22;
+}
+
+.dow {
+  background-color: #A0A0A0;
+}
+</style>
\ No newline at end of file
diff --git a/CanadaMes-ui/src/views/Electrical/State.vue b/CanadaMes-ui/src/views/Electrical/State.vue
index e3e3794..979371d 100644
--- a/CanadaMes-ui/src/views/Electrical/State.vue
+++ b/CanadaMes-ui/src/views/Electrical/State.vue
@@ -2,38 +2,90 @@
   <div class="app">
     <!--闈㈠寘灞戝鑸尯鍩�-->
     <el-breadcrumb separator-class="el-icon-arrow-right" class="el-breadcrumb">
-      <el-breadcrumb-item :to="{ path: '/home' }">{{ $t('langHome') }}</el-breadcrumb-item>
-      <el-breadcrumb-item>璁惧绠$悊</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Parameter' }">鍙傛暟</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Action' }">寮�鍏虫帶鍒�</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/Sign' }">IO鐘舵��</el-breadcrumb-item>
-      <el-breadcrumb-item :to="{ path: '/Electrical/State' }">鎶ヨ淇℃伅</el-breadcrumb-item>
+      <router-link to="/home" tag="el-button" type="text">{{ $t('langHome') }}</router-link>
+      <el-button type="text">璁惧绠$悊</el-button>
+      <router-link to="/Electrical/Parameter" tag="el-button" type="text">Parameter</router-link>
+      <router-link to="/Electrical/Action" tag="el-button" type="text">Action</router-link>
+      <router-link to="/Electrical/Sign" tag="el-button" type="text">Sign</router-link>
+      <router-link to="/Electrical/State" tag="el-button" type="text">State</router-link>
     </el-breadcrumb>
-    <div>鎶ヨ淇℃伅</div>
+    <div>State</div>
+
+
+    <el-form label-width="100px" style="display: flex;flex-wrap: wrap;" :model="{ records }">
+      <div id="btn_div">
+        <el-button type="primary">涓嬪彂鍙傛暟</el-button>
+      </div>
+
+      <div class="kuai_div" v-for="item in records" :key="item.id">
+        <el-input v-model="item.mingcheng" style="width: 280px;" class="in_mc"></el-input>
+        <el-input v-model="item.zhuangtai" style="width: 80px;"></el-input>
+      </div>
+    </el-form>
+
+
+
+
   </div>
 </template>
 
-<script>
-
+<script >
 
 export default {
   name: "State",
+  data () {
+    return {
+      records: [
+        { id: 1, mingcheng: 'conveyor Velocity(Auto SLOW)', zhuangtai: "1" },
+        { id: 2, mingcheng: 'B01 B02 TRAVEL POS Velocity AUTO', zhuangtai: "2" },
+        { id: 3, mingcheng: 'B01 B02 TRAVEL JOG Velocity', zhuangtai: "2" },
+        { id: 4, mingcheng: 'conveyor Velocity(Manual)', zhuangtai: "2" }
+      ]
+
+    }
+  },
+  created () {
+  },
+  methods: {
+  }
 
 }
+
+
+
+
 
 </script>
 
-<style lang="less" scoped>
-.el-table {
-  margin-top: 15px;
-  font-size: 12px;
+<style>
+.kuai_div {
+  width: 30%;
+  margin-bottom: 15px;
 }
 
-.el-pagination {
-  margin-top: 15px;
+.el-input {
+  border: none;
+
+
+  .el-input__inner {
+    border: 1 solid black;
+  }
+
+
 }
 
-.app .el-card {
-  width: 99%;
+.in_mc {
+  .el-input__inner {
+    border: none;
+  }
+}
+
+#btn_div {
+  width: 100%;
+
+}
+
+#btn_div .el-button {
+  float: right;
 }
 </style>
diff --git a/CanadaMes-ui/src/views/device/talkvue.vue b/CanadaMes-ui/src/views/device/talkvue.vue
index 96afec3..b1bf81f 100644
--- a/CanadaMes-ui/src/views/device/talkvue.vue
+++ b/CanadaMes-ui/src/views/device/talkvue.vue
@@ -1,6 +1,14 @@
 <template>
   <!-- <button v-on:click="send">娴嬭瘯鍙戦��</button> -->
-  <button @click="send()">娴嬭瘯鍙戦��</button>
+
+  <div>
+    <button @click="send()">娴嬭瘯鍙戦��</button>
+  <button @click="ttt()">娴嬭瘯鍙戦��</button>
+
+  </div>
+
+
+
 </template>
     
 <script>
@@ -13,6 +21,7 @@
       messagepack: {
         data: { taskname:"" }
       },
+      qqqq:{},
       queryInfo: {
         data: "1",
         pageSize: 10
@@ -21,6 +30,7 @@
   },
   created() {
     this.init();
+    
   },
   methods:
   {
@@ -47,8 +57,9 @@
         socket.onmessage = function (msg) {
           console.log("鏀跺埌鏁版嵁====" + msg.data)
 
-          //let data = JSON.parse(msg.data)  // 瀵规敹鍒扮殑json鏁版嵁杩涜瑙f瀽锛� 绫讳技杩欐牱鐨勶細 {"users": [{"username": "zhang"},{ "username": "admin"}]}
-
+          // 瀵规敹鍒扮殑json鏁版嵁杩涜瑙f瀽锛� 绫讳技杩欐牱鐨勶細 {"users": [{"username": "zhang"},{ "username": "admin"}]}
+          this.qqqq= JSON.parse(msg.data);
+console.log(this.qqqq);
         };
         //鍏抽棴浜嬩欢
         socket.onclose = function () {
@@ -63,7 +74,11 @@
     send() {
       this.messagepack.data =  {taskname:"鍓嶇鍒板悗鍙�"} ;
       socket?.send(JSON.stringify(this.messagepack));  // 灏嗙粍瑁呭ソ鐨刯son鍙戦�佺粰鏈嶅姟绔紝鐢辨湇鍔$杩涜杞彂
-    }
+    },
+    ttt() {
+      console.log(this.qqqq)
+    },
+    
   }
 }
 </script>
\ No newline at end of file
diff --git a/springboot-vue3/.idea/libraries/Maven__com_github_xingshuangs_iot_communication_1_4_2.xml b/springboot-vue3/.idea/libraries/Maven__com_github_xingshuangs_iot_communication_1_4_2.xml
new file mode 100644
index 0000000..0bc4dc9
--- /dev/null
+++ b/springboot-vue3/.idea/libraries/Maven__com_github_xingshuangs_iot_communication_1_4_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.github.xingshuangs:iot-communication:1.4.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/github/xingshuangs/iot-communication/1.4.2/iot-communication-1.4.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/github/xingshuangs/iot-communication/1.4.2/iot-communication-1.4.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/github/xingshuangs/iot-communication/1.4.2/iot-communication-1.4.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/springboot-vue3/pom.xml b/springboot-vue3/pom.xml
new file mode 100644
index 0000000..26c55e1
--- /dev/null
+++ b/springboot-vue3/pom.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-parent</artifactId>
+        <version>2.3.2.RELEASE</version>
+        <relativePath/>
+    </parent>
+
+    <groupId>com.canadames</groupId>
+    <artifactId>canadames</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <name>canadames</name>
+    <description>canadames System</description>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <encoding>UTF-8</encoding>
+        <java.version>8</java.version>
+        <maven.compiler.source>${java.version}</maven.compiler.source>
+        <maven.compiler.target>${java.version}</maven.compiler.target>
+
+        <spring-boot.version>2.3.2.RELEASE</spring-boot.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <scope>runtime</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <optional>true</optional>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>cn.hutool</groupId>
+            <artifactId>hutool-all</artifactId>
+            <version>5.5.4</version>
+        </dependency>
+        <!--鍙傛暟鏍¢獙-->
+        <dependency>
+            <groupId>org.hibernate.validator</groupId>
+            <artifactId>hibernate-validator</artifactId>
+        </dependency>
+        <!--JWT-->
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-api</artifactId>
+            <version>0.10.7</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-impl</artifactId>
+            <version>0.10.7</version>
+            <scope>runtime</scope>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt-jackson</artifactId>
+            <version>0.10.7</version>
+            <scope>runtime</scope>
+        </dependency>
+        <!--shiro-->
+        <dependency>
+            <groupId>org.apache.shiro</groupId>
+            <artifactId>shiro-spring-boot-starter</artifactId>
+            <version>1.8.0</version>
+        </dependency>
+        <!--mybatis-plus-->
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-core</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-freemarker</artifactId>
+        </dependency>
+        <!-- swagger -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger2</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+        <!-- swagger-ui -->
+        <dependency>
+            <groupId>io.springfox</groupId>
+            <artifactId>springfox-swagger-ui</artifactId>
+            <version>2.9.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.deepoove</groupId>
+            <artifactId>poi-tl</artifactId>
+            <version>1.12.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.github.xingshuangs</groupId>
+            <artifactId>iot-communication</artifactId>
+            <version>1.4.2</version>
+        </dependency>
+
+         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+         </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <version>${spring-boot.version}</version>
+            </plugin>
+        </plugins>
+    </build>
+
+    <repositories>
+
+        <repository>
+            <id>nexus-aliyun</id>
+            <name>nexus-aliyun</name>
+            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
+            <releases>
+                <enabled>true</enabled>
+            </releases>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+
+    </repositories>
+</project>
diff --git a/springboot-vue3/springboot-vue3.iml b/springboot-vue3/springboot-vue3.iml
index 79ce731..79a8091 100644
--- a/springboot-vue3/springboot-vue3.iml
+++ b/springboot-vue3/springboot-vue3.iml
@@ -179,5 +179,6 @@
     <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-websocket:2.3.2.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.2.8.RELEASE" level="project" />
     <orderEntry type="library" name="Maven: org.springframework:spring-websocket:5.2.8.RELEASE" level="project" />
+    <orderEntry type="library" name="Maven: com.github.xingshuangs:iot-communication:1.4.2" level="project" />
   </component>
 </module>
\ No newline at end of file
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java b/springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
index abf3fff..6eae7f5 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/PlcHold.java
@@ -2,9 +2,6 @@
 
 import java.util.List;
 
-import javax.websocket.Session;
-
-import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
 
 public class PlcHold extends Thread {
@@ -13,7 +10,7 @@
         while (this != null) {
             try {
 
-                Thread.sleep(15000);
+                Thread.sleep(2000);
             } catch (InterruptedException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
@@ -26,11 +23,19 @@
             //鎺ㄩ�佸埌鍓嶇
 
             JSONObject jsonObject = new JSONObject();
-            jsonObject.append("params", new short[] { 0, 1, 2, 3, 4, 5, });
+            jsonObject.append("params", new short[] { 0, 1, 2, 3, 4, 5 });
             WebSocketServer sendwServer = WebSocketServer.sessionMap.get("talkvue");
             if (sendwServer != null) {
                 sendwServer.sendMessage(jsonObject.toString());
             }
+
+
+            JSONObject jsonObject2 = new JSONObject();
+            jsonObject2.append("params", new short[] { 0, 3, 2, 3, 4, 5 });
+            WebSocketServer sendwServer2 = WebSocketServer.sessionMap.get("action");
+            if (sendwServer2 != null) {
+                sendwServer2.sendMessage(jsonObject2.toString());
+            }
         }
     }
 }
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java b/springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java
new file mode 100644
index 0000000..2437cd4
--- /dev/null
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java
@@ -0,0 +1,73 @@
+package com.example.springboot.component;
+
+import cn.hutool.json.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Plcaction extends Thread {
+    @Override
+    public void run() {
+        while (this != null) {
+            try {
+                Thread.sleep(10000);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+
+            List<Short> paramlist = S7control.getinstance().ReadWord("DB100.DBW", 12);
+
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.append("params", paramlist);
+            WebSocketServer sendwServer = WebSocketServer.sessionMap.get("action");
+            if (sendwServer != null) {
+                sendwServer.sendMessage(jsonObject.toString());
+            }
+
+            WebSocketServer webSocketServer = WebSocketServer.sessionMap.get("action");
+            if (webSocketServer != null) {
+                List<String> messages = webSocketServer.getMessages();
+
+                List<String> addressList = new ArrayList<>();
+                addressList.add("DB100.DBW0");
+                addressList.add("DB100.DBW2");
+                addressList.add("DB100.DBW4");
+                addressList.add("DB100.DBW6");
+                addressList.add("DB100.DBW8");
+                addressList.add("DB100.DBW10");
+                addressList.add("DB100.DBW12");
+                addressList.add("DB100.DBW14");
+                addressList.add("DB100.DBW16");
+                addressList.add("DB100.DBW18");
+                addressList.add("DB100.DBW20");
+                addressList.add("DB100.DBW22");
+
+                if (!messages.isEmpty()) {
+                    // 灏嗘渶鍚庝竴涓秷鎭浆鎹负 short 绫诲瀷鐨勫垪琛�
+                    String lastMessage = messages.get(messages.size() - 1);
+                    System.out.println("messages锛�" + messages);
+                    String[] parts = lastMessage.split(",");
+                    List<Short> messageValues = new ArrayList<>();
+                    for (String part : parts) {
+                        try {
+                            // 浣跨敤姝e垯琛ㄨ揪寮忔竻闄ら潪鏁板瓧瀛楃
+                            String cleanedPart = part.replaceAll("[^0-9-]", "");
+                            short value = Short.parseShort(cleanedPart.trim());
+                            messageValues.add(value);
+                        } catch (NumberFormatException e) {
+                            // 濡傛灉鏃犳硶瑙f瀽涓� short 绫诲瀷锛屽垯蹇界暐璇ラ儴鍒�
+
+                            e.printStackTrace();
+                        }
+                    }
+
+                    // 灏嗘秷鎭�煎啓鍏� PLC
+//                    S7control.getinstance().WriteWord(addressList, messageValues);
+                    System.out.println("messageValues锛�" + messageValues);
+                    // 娓呯┖娑堟伅鍒楄〃
+                    messages.clear();
+                }
+            }
+        }
+    }
+}
diff --git a/springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java b/springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java
index 18785c1..697d697 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/component/WebSocketServer.java
@@ -1,5 +1,7 @@
 package com.example.springboot.component;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import org.slf4j.Logger;
@@ -23,16 +25,19 @@
 @ServerEndpoint(value = "/api/talk/{username}")
 @Component
 public class WebSocketServer {
-    
-   private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
 
+   private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
+    private List<String> messages;
     /**
      * 璁板綍褰撳墠鍦ㄧ嚎杩炴帴鏁�
      */
     public static final Map<String, WebSocketServer> sessionMap = new ConcurrentHashMap<>();
     
-    private String username;
-    private Session session;
+    String username;
+    Session session;
+    public WebSocketServer() {
+        this.messages = new ArrayList<>();
+    }
     /**
      * 杩炴帴寤虹珛鎴愬姛璋冪敤鐨勬柟娉�
      */
@@ -75,11 +80,11 @@
     public void onMessage(String message, Session session, @PathParam("username") String username) {
         log.info("鏈嶅姟绔敹鍒扮敤鎴穟sername={}鐨勬秷鎭�:{}", username, message);
         JSONObject obj = JSONUtil.parseObj(message);
-        
          String text = obj.getStr("data"); 
 
          JSONObject jsonObject = new JSONObject();
-         jsonObject.set("message", "ngng"); 
+         jsonObject.set("message", text);
+        this.messages.add(text);
          this.sendMessage(jsonObject.toString()); //JSONUtil.toJsonStr(jsonObject)
     }
 
@@ -115,4 +120,11 @@
         }
     }
 
+    public List<String> getMessages() {
+        return messages;
+    }
+
+    public void clearMessages() {
+        messages.clear();
+    }
 }
diff --git a/springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java b/springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
index 0973688..83af3f6 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/config/AppRunnerConfig.java
@@ -5,7 +5,8 @@
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 
-import com.example.springboot.component.PlcHold;
+
+import com.example.springboot.component.Plcaction;
 
 @Component
 @Order(1)
@@ -15,7 +16,8 @@
         // TODO Auto-generated method stub
        //
        System.out.println("鍚姩瀹屾垚");
-       
-       new PlcHold().start();
-    }   
+
+
+        new Plcaction().start();
+    }
 }
diff --git a/springboot-vue3/src/main/java/com/example/springboot/controller/DefaultController.java b/springboot-vue3/src/main/java/com/example/springboot/controller/DefaultController.java
index dc194f7..9208175 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/controller/DefaultController.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/controller/DefaultController.java
@@ -82,7 +82,8 @@
             } catch (DisabledAccountException e) {
                 return Result.fail("甯愬彿宸茶绂佺敤");
             } catch (ExpiredCredentialsException e) {
-                return Result.fail("甯愬彿宸茶繃鏈�");
+                return Result.fail("璇烽噸鏂扮櫥褰�");
+
             } catch (UnknownAccountException e) {
                 return Result.fail("甯愬彿涓嶅瓨鍦�");
             } catch (UnauthorizedException e) {
diff --git a/springboot-vue3/src/main/java/com/example/springboot/entity/vo/Result.java b/springboot-vue3/src/main/java/com/example/springboot/entity/vo/Result.java
index 13eeeb6..a5e1078 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/entity/vo/Result.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/entity/vo/Result.java
@@ -8,6 +8,7 @@
     private String msg;
     private Object data;
 
+
     public static Result success(Object data) {
         Result result = new Result();
         result.setCode(1);
diff --git a/springboot-vue3/src/main/java/com/example/springboot/security/constant/SystemConstant.java b/springboot-vue3/src/main/java/com/example/springboot/security/constant/SystemConstant.java
index 2440116..1a99f01 100644
--- a/springboot-vue3/src/main/java/com/example/springboot/security/constant/SystemConstant.java
+++ b/springboot-vue3/src/main/java/com/example/springboot/security/constant/SystemConstant.java
@@ -9,7 +9,8 @@
     /**
      * rememberMe 涓� false 鐨勬椂鍊欒繃鏈熸椂闂存槸1涓皬鏃�
      */
-    public static final long EXPIRATION = 60 * 60L;
+    public static final long EXPIRATION = 60 * 60 * 24L;
+
     /**
      * rememberMe 涓� true 鐨勬椂鍊欒繃鏈熸椂闂存槸7澶�
      */

--
Gitblit v1.8.0