wuyouming666
2023-09-07 db0b4745458fd22b6552912b0572a89b2af09564
Merge branch 'master' of ssh://10.153.19.150:29418/CanadaMes

# Conflicts:
# CanadaMes-ui/src/lang/locales/en-US.json
# CanadaMes-ui/src/lang/locales/zh-CN.json
# CanadaMes-ui/src/views/Electrical/Parameter.vue
# CanadaMes-ui/src/views/Electrical/alarm.vue
# springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java
13个文件已修改
760 ■■■■■ 已修改文件
CanadaMes-ui/src/api/home.js 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/en-US.json 175 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/lang/locales/zh-CN.json 142 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Action.vue 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Parameter.vue 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/Sign.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/State.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/Electrical/alarm.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/views/home/index.vue 174 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java 19 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
CanadaMes-ui/src/api/home.js
@@ -43,9 +43,17 @@
    })
}
export function UpdateTask(types,shelf_rack) {
export function UpdateTask(types,shelfrack) {
    return request({
        url: '/home/UpdateTask?types=' + types + '&shelf_rack'+shelf_rack,
        url: '/home/UpdateTask?types=' + types + '&shelfrack='+shelfrack,
        method: 'get',
        data :""
    })
}
export function SelectAlarmmgInfo() {
    return request({
        url: '/home/SelectAlarmmgInfo',
        method: 'get',
        data :""
    })
CanadaMes-ui/src/lang/locales/en-US.json
@@ -1,4 +1,5 @@
{
<<<<<<< HEAD
    "systemTitle": "Login System",
    "usernamePlaceholder": "Please enter username",
    "passwordPlaceholder": "Please enter password",
@@ -127,3 +128,177 @@
     
    }
  }
=======
  "systemTitle": "Login System",
  "usernamePlaceholder": "Please enter username",
  "passwordPlaceholder": "Please enter password",
  "loginButton": "Login",
  "registerButton": "Register",
  "resetButton": "Reset",
  "usernameRequired": "Please enter username",
  "usernameLength": "Username must be between 5 and 15 characters",
  "passwordRequired": "Please enter password",
  "passwordLength": "Password must be between 5 and 15 characters",
  "loginSuccess": "Login successful",
  "langBtnCN": "Chinese",
  "langBtnEN": "English",
  "langHome": "Home",
  "langUserManagement": "User Management",
  "langUserList": "User List",
  "langUsernamePlaceholder": "Please enter username",
  "langEmailPlaceholder": "Please enter email",
  "langSearch": "Search",
  "langAddUser": "Add User",
  "langUsername": "Username",
  "langEmail": "Email",
  "langCreateTime": "Create Time",
  "langDisabled": "Disabled",
  "langAction": "Action",
  "langEdit": "Edit",
  "langDelete": "Delete",
  "langAddUserTitle": "Add User",
  "langPassword": "Password",
  "langState": "State",
  "langSelect": "Please select",
  "langCancel": "Cancel",
  "langConfirm": "Confirm",
  "langEditUserTitle": "Edit User",
  "northglassMESsystem": "NorthGlassMesSystem",
  "exit": "exit",
  "changePassword": "changePassword",
  "resetPassword": "resetPassword",
  "home": "Home",
  "role": "role",
  "langRoleManagement": "Role Management",
  "langRoleList": "Role List",
  "langEnterRoleName": "Please enter role name",
  "langAddRole": "Add Role",
  "langName": "Name",
  "langIsValid": "Is Valid",
  "langOperation": "Operation",
  "langPleaseSelect": "Please select",
  "langValid": "Valid",
  "langInvalid": "Invalid",
  "langAddRoleSuccess": "Add role successfully",
  "langEnterName": "Please enter name",
  "langLengthBetween": "Length should be between",
  "langAnd": "and",
  "langCharacters": "characters",
  "langEnterState": "Please enter state",
  "langUpdateState": "Update state successfully",
  "langEditRole": "Edit Role",
  "langEditRoleSuccess": "Edit role successfully",
  "langDeleteRoleConfirm": "Are you sure you want to delete this role?",
  "langPrompt": "Prompt",
  "langDeleteRoleSuccess": "Delete role successfully",
  "langCancelDelete": "Cancelled deleting",
  "langRoleName": "langRoleName",
  "updateSuccessMessage": "updateSuccessMessage",
  "paginationTotal": "Total {total}",
  "paginationSizes": "Items per page",
  "paginationPrev": "Previous",
  "paginationPager": "{currentPage}/{pageCount}",
  "paginationNext": "Next",
  "paginationJumper": "Jump to",
  "breadcrumb": {
    "home": "Home",
    "permissionManagement": "Permission Management",
    "permissionList": "Permission List"
  },
  "search": {
    "placeholder": "Enter keywords"
  },
  "button": {
    "addPermission": "Add Permission",
    "cancel": "Cancel",
    "confirm": "Confirm"
  },
  "table": {
    "role": "Role",
    "permissionDescription": "Permission Description",
    "permissionValue": "Permission Value",
    "createTime": "Create Time",
    "isActive": "Is Active",
    "operation": "Operation"
  },
  "tooltip": {
    "edit": "Edit",
    "delete": "Delete"
  },
  "dialog": {
    "addPermission": "Add Permission",
    "editPermission": "Edit Permission"
  },
  "form": {
    "role": "Role",
    "select": "Please Select",
    "permission": "Permission",
    "isActive": "Is Active"
  },
  "操作": "Operation",
  "有效": "Valid",
  "无效": "Invalid",
  "请输入名称": "Please enter a name",
  "长度在 2 到 15 个字符": "Length between 2 and 15 characters",
  "请输入状态": "Please enter the status",
  "添加角色": "Add Role",
  "修改角色": "Edit Role",
  "删除角色": "Delete Role",
  "此操作将永久删除该角色, 是否继续?": "This operation will permanently delete the role. Continue?",
  "提示": "Reminder",
  "确定": "Confirm",
  "取消": "Cancel",
  "添加角色成功": "Successfully added role",
  "更新状态成功": "Successfully updated status",
  "修改角色成功": "Successfully modified role",
  "删除角色成功": "Successfully deleted role",
  "translation": {
    "D01 VFD error": "D01 VFD error",
    "D02 VFD error": "D02 VFD error",
    "D03 VFD error": "D03 VFD erro",
    "D04 VFD error": "D04 VFD error",
    "D05 VFD error": "D05 VFD error",
    "D06 VFD error": "D06 VFD error",
    "B01 VFD error": "B01 VFD error",
    "B02 VFD error": "B02 VFD error",
    "A01 VFD error": "A01 VFD error",
    "A02 VFD error": "A02 VFD error",
    "A01 servo turn error": "A01 servo turn error",
    "A02 servo turn error": "A02 servo turn error",
    "A01 servo travel error": "A01 servo travel error",
    "A02 servo travel error": "A02 servo travel error",
    "B01 servo travel error": "B01 servo travel error",
    "B02 servo travel error": "B02 servo travel error",
    "D01 DEC error": "D01 DEC error",
    "D01 pos error": "D01 pos error",
    "D02 DEC error": "D02 DEC error",
    "D02 pos error": "D02 pos error",
    "D03 DEC error": "D03 DEC error",
    "D03 pos error": "D03 pos error",
    "D04 DEC error": "D04 DEC error",
    "D04 pos error": "D04 pos error",
    "D05 DEC error": "D05 DEC error",
    "D05 pos error": "D05 pos error",
    "D06 DEC error": "D06 DEC error",
    "D06 pos error": "D06 pos error",
    "A01 DEC error": "A01 DEC error",
    "A01 pos error": "A01 pos error",
    "A02 DEC error": "A02 DEC error",
    "A02 pos error": "A02 pos error",
    "B01 IN DEC error": "B01 IN DEC error",
    "B01 IN pos error": "B01 IN pos error",
    "B01 OUT DEC error": "B01 OUT DEC error",
    "B01 OUT pos error": "B01 OUT pos error",
    "B02 IN DEC error": "B02 IN DEC error",
    "B02 IN pos error": "B02 IN pos error",
    "B02 OUT DEC error": "B02 OUT DEC error",
    "B02 OUT pos error": "B02 OUT pos error"
  },
  "Parameter": "Parameter",
  "Action": "Action",
  "Sign": "Sign",
  "State": "State",
  "Alarm": "Alarm",
  "Distribute": "Distribute"
}
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
CanadaMes-ui/src/lang/locales/zh-CN.json
@@ -1,4 +1,3 @@
  {
    "systemTitle": "登录系统",
    "usernamePlaceholder": "请输入用户名",
@@ -31,13 +30,12 @@
  "langPassword": "密码",
  "langState": "状态",
  "langSelect": "请选择",
  "langEditUserTitle": "修改用户",
  "northglassMESsystem":"北玻MES系统",
  "exit":"退出",
  "changePassword":"修改密码",
  "resetPassword": "重置密码",
<<<<<<< HEAD
  "home":"主页",
  "role":"角色",
    "langRoleManagement": "角色管理",
@@ -131,3 +129,141 @@
    }
  }
  
=======
  "home": "主页",
  "role": "角色",
  "langRoleManagement": "角色管理",
  "langRoleList": "角色列表",
  "langEnterRoleName": "请输入角色名称",
  "langAddRole": "添加角色",
  "langName": "名称",
  "langIsValid": "是否有效",
  "langOperation": "操作",
  "langPleaseSelect": "请选择",
  "langValid": "有效",
  "langInvalid": "无效",
  "langConfirm": "确定",
  "langCancel": "取消",
  "langAddRoleSuccess": "添加角色成功",
  "langEnterName": "请输入名称",
  "langLengthBetween": "长度在",
  "langAnd": "和",
  "langCharacters": "个字符之间",
  "langEnterState": "请输入状态",
  "langUpdateState": "状态更新成功",
  "langEditRole": "编辑角色",
  "langEditRoleSuccess": "编辑角色成功",
  "langDeleteRoleConfirm": "确定要删除该角色吗?",
  "langPrompt": "提示",
  "langDeleteRoleSuccess": "删除角色成功",
  "langCancelDelete": "已取消删除",
  "langRoleName": "角色名称",
  "updateSuccessMessage": "更新成功",
  "paginationTotal": "共 {total} 条",
  "paginationSizes": "每页显示",
  "paginationPrev": "上一页",
  "paginationPager": "{currentPage}/{pageCount}",
  "paginationNext": "下一页",
  "paginationJumper": "跳至",
  "breadcrumb": {
    "home": "首页",
    "permissionManagement": "权限管理",
    "permissionList": "权限列表"
  },
  "search": {
    "placeholder": "请输入关键字"
  },
  "button": {
    "addPermission": "添加权限",
    "cancel": "取消",
    "confirm": "确认"
  },
  "table": {
    "role": "角色",
    "permissionDescription": "权限描述",
    "permissionValue": "权限值",
    "createTime": "创建时间",
    "isActive": "是否激活",
    "operation": "操作"
  },
  "tooltip": {
    "edit": "修改",
    "delete": "删除"
  },
  "dialog": {
    "addPermission": "添加权限",
    "editPermission": "编辑权限"
  },
  "form": {
    "role": "角色",
    "select": "请选择",
    "permission": "权限",
    "isActive": "是否激活"
  },
  "操作": "操作",
  "有效": "有效",
  "无效": "无效",
  "请输入名称": "请输入名称",
  "长度在 2 到 15 个字符": "长度在 2 到 15 个字符",
  "请输入状态": "请输入状态",
  "添加角色": "添加角色",
  "修改角色": "修改角色",
  "删除角色": "删除角色",
  "此操作将永久删除该角色, 是否继续?": "此操作将永久删除该角色, 是否继续?",
  "提示": "提示",
  "确定": "确定",
  "取消": "取消",
  "添加角色成功": "添加角色成功",
  "更新状态成功": "更新状态成功",
  "修改角色成功": "修改角色成功",
  "删除角色成功": "删除角色成功",
  "translation": {
    "D01 VFD error": "D01 VFD 错误",
    "D02 VFD error": "D02 VFD 错误",
    "D03 VFD error": "D03 VFD 错误",
    "D04 VFD error": "D04 VFD 错误",
    "D05 VFD error": "D05 VFD 错误",
    "D06 VFD error": "D06 VFD 错误",
    "B01 VFD error": "B01 VFD 错误",
    "B02 VFD error": "B02 VFD 错误",
    "A01 VFD error": "A01 VFD 错误",
    "A02 VFD error": "A02 VFD 错误",
    "A01 servo turn error": "A01 servo turn 错误",
    "A02 servo turn error": "A02 servo turn 错误",
    "A01 servo travel error": "A01 servo travel 错误",
    "A02 servo travel error": "A02 servo travel 错误",
    "B01 servo travel error": "B01 servo travel 错误",
    "B02 servo travel error": "B02 servo travel 错误",
    "D01 DEC error": "D01 DEC 错误",
    "D01 pos error": "D01 pos 错误",
    "D02 DEC error": "D02 DEC 错误",
    "D02 pos error": "D02 pos 错误",
    "D03 DEC error": "D03 DEC 错误",
    "D03 pos error": "D03 pos 错误",
    "D04 DEC error": "D04 DEC 错误",
    "D04 pos error": "D04 pos 错误",
    "D05 DEC error": "D05 DEC 错误",
    "D05 pos error": "D05 pos 错误",
    "D06 DEC error": "D06 DEC 错误",
    "D06 pos error": "D06 pos 错误",
    "A01 DEC error": "A01 DEC 错误",
    "A01 pos error": "A01 pos 错误",
    "A02 DEC error": "A02 DEC 错误",
    "A02 pos error": "A02 pos 错误",
    "B01 IN DEC error": "B01 IN DEC 错误",
    "B01 IN pos error": "B01 IN pos 错误",
    "B01 OUT DEC error": "B01 OUT DEC 错误",
    "B01 OUT pos error": "B01 OUT pos 错误",
    "B02 IN DEC error": "B02 IN DEC 错误",
    "B02 IN pos error": "B02 IN pos 错误",
    "B02 OUT DEC error": "B02 OUT DEC 错误",
    "B02 OUT pos error": "B02 OUT pos 错误"
  },
  "Parameter": "参数下发",
  "Action": "开关控制",
  "Sign": "IO状态",
  "State": "State",
  "Alarm": "报警信息",
  "Distribute": "下发"
}
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
CanadaMes-ui/src/views/Electrical/Action.vue
@@ -3,7 +3,7 @@
    <!--面包屑导航区域-->
    <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>
      <el-button type="text">Electrical</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>
@@ -28,10 +28,11 @@
</template>
<script >
import LanguageMixin from '../../lang/LanguageMixin'
let socket;
export default {
  name: "action",
  mixins: [LanguageMixin],
  data () {
    return {
      record: {
@@ -192,13 +193,13 @@
}
.el-input__inner {
    border: 1 solid black;
  }
.in_mc {
.in_mc {}
 
}
.el-input__inner {
    border: none;
  }
CanadaMes-ui/src/views/Electrical/Parameter.vue
@@ -1,15 +1,23 @@
<template>
  <div class="app">
<<<<<<< HEAD
    <!-- 面包屑导航区域 -->
    <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>
=======
    <!--面包屑导航区域-->
    <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">{{ $t('Distribute') }}</el-button>
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
      <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>
      <router-link to="/Electrical/alarm" tag="el-button" type="text">Alarm</router-link>
    </el-breadcrumb>
<<<<<<< HEAD
    
    <div>Parameter</div>
  
@@ -28,15 +36,41 @@
</template>
<script>
=======
    <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()">{{ $t('Distribute') }}</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.number="item.value" style="width: 80px;"
          @input="handleChange(index, $event.target.value)"></el-input>
      </div>
    </el-form>
  </div>
</template>
<script>
import LanguageMixin from '../../lang/LanguageMixin'
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
let socket;
export default {
  name: "Parameter",
<<<<<<< HEAD
  data() {
=======
  mixins: [LanguageMixin],
  data () {
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
    return {
      record: {
        params: [100, 200, 10, 10, 10, 10],
        xyData: [
<<<<<<< HEAD
          { name: "conveyor Velocity(Auto FAST)", value: 0, value2: 0 },
          { name: "conveyor Velocity(Auto SLOW)", value: 0, value2: 0 },
          { name: "conveyor Velocity(Manual)", value: 0 ,value2: 0 },
@@ -49,6 +83,20 @@
          { name: "A01 A02 TRAVEL POS Velocity manual", value: 0, value2: 0 },
          { name: "B01 B02 TRAVEL POS Velocity AUTO", value: 0, value2: 0 },
          { name: "B01 B02 TRAVEL POS Velocity manual", value: 0, value2: 0 }
=======
          { name: "conveyor Velocity(Auto FAST)", value: 0 },
          { name: "conveyor Velocity(Auto SLOW)", value: 0 },
          { name: "conveyor Velocity(Manual)", value: 0 },
          { name: "A01 A02 TURN JOG Velocity", value: 0 },
          { name: "A01 A02 TRAVEL JOG Velocity", value: 0 },
          { name: "B01 B02 TRAVEL JOG Velocity", value: 0 },
          { name: "A01 A02 TURN POS Velocity AUTO", value: 0 },
          { name: "A01 A02 TURN POS Velocity manual", value: 0 },
          { name: "A01 A02 TRAVEL POS Velocity AUTO", value: 0 },
          { name: "A01 A02 TRAVEL POS Velocity manual", value: 0 },
          { name: "B01 B02 TRAVEL POS Velocity AUTO", value: 0 },
          { name: "B01 B02 TRAVEL POS Velocity manual", value: 0 }
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
        ],
        canshu: []
      },
@@ -61,6 +109,7 @@
      }
    };
  },
<<<<<<< HEAD
  
 
  created() {
@@ -70,28 +119,53 @@
    initWebSocket() {
      let viewname = "Parameter";
  
=======
  created () {
    this.initWebSocket();
  },
  methods: {
    initWebSocket () {
      let viewname = "Parameter";
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
      if (typeof WebSocket === "undefined") {
        console.log("您的浏览器不支持WebSocket");
      } else {
        let socketUrl = "ws://" + "localhost:8888" + "/springboot-vue3/api/talk/" + viewname;
<<<<<<< HEAD
  
=======
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
        if (socket != null) {
          socket.close();
          socket = null;
        }
<<<<<<< HEAD
  
        // 开启一个websocket服务
        socket = new WebSocket(socketUrl);
  
=======
        // 开启一个websocket服务
        socket = new WebSocket(socketUrl);
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
        // 打开事件
        socket.onopen = function () {
          console.log("websocket已打开");
        };
<<<<<<< HEAD
  
=======
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
        // 收到消息
        socket.onmessage = (msg) => {
          if (!msg.data) {
            return; // 如果收到空数据,则直接返回,不执行后续逻辑
<<<<<<< HEAD
          }
  
          let obj = JSON.parse(msg.data);
@@ -109,28 +183,61 @@
          this.$forceUpdate();
        };
  
=======
          }
          let obj = JSON.parse(msg.data);
          this.record.params[0] = obj.params[0];
          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];
            }
          }
          console.log(this.record.xyData);
          this.$forceUpdate();
        };
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
        // 关闭事件
        socket.onclose = function () {
          console.log("websocket已关闭");
        };
<<<<<<< HEAD
  
=======
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
        // 发生错误事件
        socket.onerror = function () {
          console.log("websocket发生了错误");
        };
      }
    },
<<<<<<< HEAD
    send() {
      this.messagepack.data = this.record.xyData.map((item) => parseInt(item.value2)); // 转换为整数数组
      console.log(this.messagepack);
      socket?.send(JSON.stringify(this.messagepack));
    },
    handleChange(index, value) {
=======
    send () {
      this.messagepack.data = this.record.xyData.map((item) => parseInt(item.value)); // 转换为整数数组
      console.log(this.messagepack);
      socket?.send(JSON.stringify(this.messagepack));
    },
    handleChange (index, value) {
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
      this.record.xyData[index].value = value;
    }
  }
};
</script>
<<<<<<< HEAD
<style>
.kuai_div {
@@ -147,6 +254,27 @@
}
=======
<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;
}
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
#btn_div {
  width: 100%;
}
@@ -154,6 +282,7 @@
#btn_div .el-button {
  float: right;
}
<<<<<<< HEAD
input[type="number"]::-webkit-inner-spin-button,
  input[type="number"]::-webkit-outer-spin-button {
    -webkit-appearance: none;
@@ -164,3 +293,6 @@
    -moz-appearance: textfield; /* Firefox中禁用上下箭头 */
  }
</style>
=======
</style>
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
CanadaMes-ui/src/views/Electrical/Sign.vue
@@ -3,7 +3,7 @@
    <!--面包屑导航区域-->
    <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>
      <el-button type="text">Electrical</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>
CanadaMes-ui/src/views/Electrical/State.vue
@@ -3,7 +3,7 @@
    <!--面包屑导航区域-->
    <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>
      <el-button type="text">Electrical</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>
CanadaMes-ui/src/views/Electrical/alarm.vue
@@ -3,7 +3,7 @@
    <!--面包屑导航区域-->
    <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>
      <el-button type="text">Electrical</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>
@@ -47,7 +47,11 @@
      },
      roles: [],
<<<<<<< HEAD
      localizedRoles:[],
=======
      localizedRoles: [],
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
      messagepack: {
        data: { taskname: "" }
      },
@@ -64,6 +68,7 @@
  },
  methods: {
<<<<<<< HEAD
    load() {
  setAll().then(res => {
    this.roles = res.data.list;
@@ -83,6 +88,27 @@
    content: translation[role.content] || role.content
  }));
},
=======
    load () {
      setAll().then(res => {
        this.roles = res.data.list;
        const language = this.$i18n.locale;
        if (language === 'zh-CN') {
          this.replaceChineseWithEnglish();
        } else {
          this.localizedRoles = [...this.roles];
        }
        console.log(this.localizedRoles);
      });
    },
    replaceChineseWithEnglish () {
      const translation = this.$t('translation');
      this.localizedRoles = this.roles.map(role => ({
        ...role,
        content: translation[role.content] || role.content
      }));
    },
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
    init () {
      let viewname = "alarm";
CanadaMes-ui/src/views/home/index.vue
@@ -73,7 +73,7 @@
.blocks {
    min-height: 50vh;
    min-height: 49vh;
    max-width: 100vw;
    background-image: url('../../img/xmjc.png');
    margin: 0 auto;
@@ -110,36 +110,74 @@
.el-table__empty-text {
    line-height: 41px;
}
.box {
    width: 90%;
    margin-left: 5%;
    height: 35px;
    color: red;
    font-size: 12px;
    overflow: hidden;
}
.text {
    width: auto;
    line-height: 35px;
    white-space: nowrap;
    animation: textScroll 20s linear infinite;
    margin: 0 auto;
}
@keyframes textScroll {
    0% {
        transform: translateX(100%);
    }
    100% {
        transform: translateX(-150%);
    }
}
</style>
<template>
    <el-container>
        <!-- <el-header style="padding: 10px;"></el-header> -->
        <el-main>
            <div class="box">
                <div class="text">
                    Alarm:
                    <label v-for="item in this.alarm" :key="item['id']">
                        {{ item['content'] }}
                    </label>
                </div>
            </div>
            <div style="display:flex;justify-content: space-around;width: 95%;margin: 0 auto;">
                <el-input style="width:15%;" placeholder="Enter the glass lD" v-model="glassid"></el-input>
                <el-button type="primary" @click="showform()">Manually feed the glass</el-button>
                <el-input style="width:15%;" placeholder="Enter the order number" v-model="order"></el-input>
                <el-button type="warning" @click="getOrder()">Exit the glass by order number</el-button>
                <el-button type="warning" @click="showform1();">Exit the glass by order number</el-button>
            </div>
            <div>
                <el-table :data="this.tasklist1" border style="width: 100%" >
                    <el-table-column prop="glassId" label="Coming out glass ID"></el-table-column>
                    <el-table-column :width="250" prop="cage" label="The Grille number being used"></el-table-column>
                    <el-table-column :width="250" prop="cell" label="The Grille number being used"></el-table-column>
                    <el-table-column prop="orderId" label="Order Nmuber"></el-table-column>
                    <el-table-column prop="lengthwidth" label="Length and width"></el-table-column>
                    <el-table-column prop="coating" label="coating"></el-table-column>
                    <el-table-column label="Operate">
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;">end task</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;" @click="endtask(0)">end
                            task</el-button>
                    </el-table-column>
                </el-table>
                <el-table :data="this.tasklist2" border style="width: 100%">
                    <el-table-column prop="glassId" label="Incoming glass ID"></el-table-column>
                    <el-table-column :width="250" prop="cage" label="The Grille number being used"></el-table-column>
                    <el-table-column :width="250" prop="cell" label="The Grille number being used"></el-table-column>
                    <el-table-column prop="orderId" label="Order Nmuber"></el-table-column>
                    <el-table-column prop="lengthwidth" label="Length and width"></el-table-column>
                    <el-table-column prop="coating" label="coating"></el-table-column>
                    <el-table-column label="Operate">
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;">end task</el-button>
                        <el-button type="primary" style="padding: 4px 10px;font-size: 12px;" @click="endtask(1)">end
                            task</el-button>
                    </el-table-column>
                </el-table>
            </div>
@@ -180,7 +218,7 @@
        </el-footer>
        <el-dialog :visible.sync="dialogFormVisible" title="Please confirm the information">
            <el-form :model="form" label-width="100px" style="padding-right: 30px">
                <el-form-item label="Order">
                <el-form-item label="order">
                    <el-input v-model="form.orderno" autocomplete="off" />
                </el-form-item>
                <el-form-item label="length">
@@ -200,12 +238,28 @@
                </span>
            </template>
        </el-dialog>
        <el-dialog :visible.sync="dialogFormVisible1" title="Ordering Information">
            <el-form :model="form1" label-width="100px" style="padding-right: 30px">
                <el-form-item label="order">
                    <el-input v-model="form1.order" autocomplete="off" />
                </el-form-item>
                <el-form-item label="number">
                    <el-input v-model="form1.number" autocomplete="off" />
                </el-form-item>
            </el-form>
            <template #footer>
                <span class="dialog-footer">
                    <el-button @click="cancal1()">cancal</el-button>
                    <el-button @click="getOrder();" type="primary">confirm</el-button>
                </span>
            </template>
        </el-dialog>
    </el-container>
</template>
  
<script>
import { home, home2, loadtask, InsertOrder, Addglassid } from "../../api/home";
import { home, home2, loadtask, InsertOrder, Addglassid, UpdateTask, SelectAlarmmgInfo } from "../../api/home";
let socket;
export default {
@@ -213,12 +267,18 @@
    data() {
        return {
            dialogFormVisible: false,
            dialogFormVisible1: false,
            form: {
                orderno: "NG2210210",
                length: 800,
                width: 1000,
                coating: "red",
            },
            form1: {
                order: "NG2210210",
                number: 800,
            },
            alarm: [],
            tableData: [],
            cagelist1: [],
            cagelist2: [],
@@ -232,7 +292,9 @@
            glassid: "",
            url: "../../img/bigcar01.png",
            car1: 116,
            car2: 187
            car2: 187,
            incell: "",
            outcell: ""
        };
    },
    created() {
@@ -275,7 +337,13 @@
                    this.cagelist4=obj.cagelist4[0];
                    this.tasklist1=obj.tasklist1[0];
                    this.tasklist2=obj.tasklist2[0];
                    if (this.tasklist1.length > 0) {
                        this.incell = this.tasklist1[0]['cell'];
                    }
                    if (this.tasklist1.length > 0) {
                        this.outcell = this.tasklist2[0]['cell'];
                    }
                    this.alarm = obj.alarmmg[0];
                    // for (let a = 0; a <= this.record.params.length - 1; a++) {
                    //     // this.record.xyData[a] = [this.record.canshu[a], this.record.params[0][a]];
                    //     // this.record.xyData[a] = { name: this.record.canshu[a], value: this.record.params[0][a] };
@@ -311,14 +379,23 @@
            });
            loadtask(this.task1).then(res => {
                this.tasklist1 = res.data.list;
                console.log(this.tasklist1);
                if (res.data.list.length > 0) {
                    this.incell = this.tasklist1[0]['cell'];
                }
            });
            loadtask(this.task2).then(res => {
                this.tasklist2 = res.data.list;
                if (res.data.list.length > 0) {
                    this.outcell = this.tasklist2[0]['cell'];
                }
            });
            loadtask(this.task2).then(res => {
                this.tasklist2 = res.data.list;
                
            });
            SelectAlarmmgInfo().then(res => {
                this.alarm = res.data.alarmmg;
            });
        },
        //根据格子状态修改颜色
@@ -337,7 +414,7 @@
        },
        //按订单出片
        getOrder() {
            if (this.order != "") {
            if (this.form1.order != "") {
                InsertOrder(this.order).then(res => {
                    if (res.data.message == 200) {
                        this.$message.success("Operation successful");
@@ -349,23 +426,9 @@
            }
        },
        showform() {
            this.form =
            {
                orderno: "NG2210210",
                length: 800,
                width: 1000,
                coating: "red",
            };
            this.dialogFormVisible = true;
        },
        cancal() {
            this.dialogFormVisible = false;
            this.form = {};
        },
        //手动上片
        sbumitglassid() {
            if (this.glassid != "") {
            if (this.form.order != "") {
                Addglassid(this.glassid).then(res => {
                    if (res.data.message2 == 200) {
                        this.$message.success("Operation successful");
@@ -376,12 +439,59 @@
                });
            }
        },
        endtask(type,shelfrack) {
            alert(type);
            alert(shelfrack);
        }
    }
        showform() {
            if (this.glassid != "") {
                this.form =
                {
                    orderno: "NG2210210",
                    length: 800,
                    width: 1000,
                    coating: "red",
};
                this.dialogFormVisible = true;
            }
        },
        showform1() {
            if (this.order != "") {
                this.form1 =
                {
                    order: "NG2210210",
                    number: 800,
                };
                this.dialogFormVisible1 = true;
            }
        },
        cancal() {
            this.dialogFormVisible = false;
            this.form = {};
        },
        cancal1() {
            this.dialogFormVisible1 = false;
            this.form1 = {};
        },
        endtask(type) {
            if (type == 0) {
                UpdateTask(type, this.incell).then(res => {
                    if (res.data.message3 == 200) {
                        this.$message.success("Operation successful");
                    }
                });
            } else {
                UpdateTask(type, this.outcell).then(res => {
                    if (res.data.message3 == 200) {
                        this.$message.success("Operation successful");
                    }
                });
            }
        }
    }
}
</script>
springboot-vue3/src/main/java/com/example/springboot/component/Plcaction.java
@@ -35,30 +35,19 @@
        }
    }
    private void sendMessages() {
        WebSocketServer sendwServer = WebSocketServer.sessionMap.get("action");
        if (sendwServer != null) {
            List<Boolean> paramlist = S7control.getinstance().ReadBits("DB100.DBW", 12);
            List<Boolean> paramlist2 = new ArrayList<>(Arrays.asList(true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false));
            List<Integer> binaryList = new ArrayList<>();
            for (Boolean value : paramlist2) {
                int binaryValue = value ? 1 : 0;
                binaryList.add(binaryValue);
            }
            //        new short[]{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}
      // new short[]{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0,
      // 1, 0}
            JSONObject jsonObject = new JSONObject();
            jsonObject.append("params", binaryList);
      jsonObject.append("params",
          new short[] { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0 });
            sendwServer.sendMessage(jsonObject.toString());
        }
    }
@@ -86,6 +75,29 @@
                        e.printStackTrace();
                    }
                }
<<<<<<< HEAD
    }
    private void sendMessages() {
        WebSocketServer sendwServer = WebSocketServer.sessionMap.get("action");
        if (sendwServer != null) {
            List<Boolean> paramlist = S7control.getinstance().ReadBits("DB100.DBW", 12);
            List<Boolean> paramlist2 = new ArrayList<>(Arrays.asList(true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false, true, false));
            List<Integer> binaryList = new ArrayList<>();
            for (Boolean value : paramlist2) {
                int binaryValue = value ? 1 : 0;
                binaryList.add(binaryValue);
            }
            //        new short[]{1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0}
            JSONObject jsonObject = new JSONObject();
            jsonObject.append("params", binaryList);
=======
>>>>>>> 36acd690614dd276428530a59f448c543bac52d4
                // 将消息值转换为布尔列表
                List<Boolean> messageBooleans = new ArrayList<>();
springboot-vue3/src/main/java/com/example/springboot/component/Plchome.java
@@ -7,6 +7,7 @@
import org.springframework.context.ConfigurableApplicationContext;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import com.example.springboot.mapper.HomeMapper;
public class Plchome extends Thread {
@@ -42,7 +43,9 @@
            List<StorageCage> tasklist2=homeMapper.selectinout(3);
            jsonObject.append("tasklist1", tasklist1);
            jsonObject.append("tasklist2", tasklist2);
            //查询报警信息
            List<alarmmg> alarmmg=homeMapper.SelectAlarmmgInfo();
            jsonObject.append("alarmmg", alarmmg);
            //读去Plc进片车与出片车位置
            // List<String> addressList = new ArrayList<>();
            // addressList.add("DB100.DBW0");
springboot-vue3/src/main/java/com/example/springboot/controller/HomeController.java
@@ -10,6 +10,7 @@
import com.example.springboot.service.HomeService;
import com.example.springboot.common.Result;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import org.springframework.web.bind.annotation.*;
@@ -81,12 +82,24 @@
    }
    @GetMapping("/UpdateTask")
    public Result UpdateTask(Integer types,Integer shelf_rack){
    public Result UpdateTask(Integer types,Integer shelfrack){
        Map<String, Object> map = new HashMap<>();
        homeMapper.UpdateTask(types,shelf_rack);
        map.put("message2","200");
        homeMapper.UpdateTask(types,shelfrack);
        if(types==0){
            homeMapper.UpdateCageTask1(shelfrack);
        }else{
            homeMapper.UpdateCageTask2(shelfrack);
        }
        map.put("message3","200");
        return Result.success(map);
    }
    @GetMapping("/SelectAlarmmgInfo")
    public Result SelectAlarmmgInfo(){
        List<alarmmg> alarmmg=homeMapper.SelectAlarmmgInfo();
        Map<String, Object> map = new HashMap<>();
        map.put("alarmmg",alarmmg);
        return Result.success(map);
    }
    
}
springboot-vue3/src/main/java/com/example/springboot/mapper/HomeMapper.java
@@ -3,11 +3,13 @@
import org.apache.ibatis.annotations.*;
import com.example.springboot.entity.StorageCage;
import com.example.springboot.entity.alarmmg;
import java.util.List;
@Mapper
public interface HomeMapper {
  //查询每个笼子的使用情况
  @Select("SELECT cage,round(round(sum(state)/42,2)*100) as cell,42-sum(state) as state FROM storage_cage group by cage")
  List<StorageCage> selectAll();
@@ -48,6 +50,18 @@
  short SelectOutTask();
  // 手动完成任务
  @Select("update storage_task set state=1 where shelf_rack=#{shelf_rack} and task_type=#{task_type} and task_state=0")
  short UpdateTask(@Param("task_type") Integer task_type, @Param("shelf_rack") Integer shelf_rack);
  @Update("update storage_task set task_state=1 where shelf_rack=#{shelf_rack} and task_type=#{task_type} and task_state=0")
  void UpdateTask(@Param("task_type") Integer task_type, @Param("shelf_rack") Integer shelf_rack);
  // 手动完成进片任务修改笼子数据
  @Update("update storage_cage set state=1 where cell=#{cell} and state=2")
  void UpdateCageTask1(@Param("cell") Integer cell);
  // 手动完成出片任务修改笼子数据
  @Update("update storage_cage set state=0,glass_id=null,order_id=null,glasswidth=null,glassheight=null,coating=null where cell=#{cell} and state=2")
  void UpdateCageTask2(@Param("cell") Integer cell);
  //获取报警信息
  @Select("select * from alarmmg where endTime is null")
  List<alarmmg> SelectAlarmmgInfo();
}