|  |  | 
 |  |  | <template> | 
 |  |  |   <div class="home-contianer"> | 
 |  |  |     <div> | 
 |  |  |       <el-tabs type="border-card" @tab-click="handleClick" style="width: 100%; height: 100%;"> | 
 |  |  |         <el-tab-pane label="陈化库" style="width: 100%;height: 100%;"> | 
 |  |  |           <div class="StackerOne"> | 
 |  |  |             <div class="content">{{ this.StackerOne.deviceName }}:</div> | 
 |  |  |             <!-- <div :class="this.ConveyorlineOut.data.command.interactiveSignal==1 ? 'bool_false' : 'bool_true'"></div> --> | 
 |  |  |             <div class="content">任务号:{{ this.StackerOne.data.currentTaskNum }}</div> | 
 |  |  |             <div class="content display"> | 
 |  |  |               <div>工作模式:{{ this.StackerOne.data.stackerCraneAutoStatusDes }}</div> | 
 |  |  |               <div :class="this.StackerOne.data.stackerCraneAutoStatusDes != '自动' ? 'bool_false' : 'bool_true'"></div> | 
 |  |  |             </div> | 
 |  |  |             <div class="content display"> | 
 |  |  |               <div>设备状态:{{ this.StackerOne.data.stackerCraneStatusDes }}</div> | 
 |  |  |               <div :class="this.StackerOne.data.stackerCraneStatusDes != '正常' ? 'bool_false' : 'bool_true'"></div> | 
 |  |  |             </div> | 
 |  |  |             <div class="content display"> | 
 |  |  |               <div>作业状态:{{ this.StackerOne.data.stackerCraneWorkStatusDes }}</div> | 
 |  |  |               <div :class="this.StackerOne.data.stackerCraneWorkStatusDes != '待机' ? 'bool_false' : 'bool_true'"></div> | 
 |  |  |             </div> | 
 |  |  |           </div> | 
 |  |  |           <div class="ConveyorlineOut"> | 
 |  |  |             <div class="content">{{ this.ConveyorlineOut.deviceName }}-----{{ | 
 |  |  |               this.ConveyorlineOut.data.childDeviceCode}}:</div> | 
 |  |  |             <div class="display"> | 
 |  |  |               <div> | 
 |  |  |                 <div class="Signal">读取信号:</div> | 
 |  |  |                 <div class="content ">任务号:{{ this.ConveyorlineOut.data.command.taskNum }}</div> | 
 |  |  |                 <div class="content ">托盘号:{{ this.ConveyorlineOut.data.command.barcode }}</div> | 
 |  |  |                 <div class="content ">终点地址:{{ this.ConveyorlineOut.data.command.targetAddress}}</div> | 
 |  |  |                 <div class="content display"> | 
 |  |  |                   <div>扫码站台入库请求:</div> | 
 |  |  |                   <div | 
 |  |  |                     :class="this.ConveyorlineOut.data.writeInteractiveSignal[0] != true ? 'bool_false' : 'bool_true'"> | 
 |  |  |                   </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="content display"> | 
 |  |  |                   <div>堆垛机出库站台请求:</div> | 
 |  |  |                   <div | 
 |  |  |                     :class="this.ConveyorlineOut.data.writeInteractiveSignal[2] != true ? 'bool_false' : 'bool_true'"> | 
 |  |  |                   </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="content display"> | 
 |  |  |                   <div>堆垛机入库站台请求</div> | 
 |  |  |                   <div | 
 |  |  |                     :class="this.ConveyorlineOut.data.writeInteractiveSignal[4] != true ? 'bool_false' : 'bool_true'"> | 
 |  |  |                   </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="content display"> | 
 |  |  |                   <div>线体出库口请求:</div> | 
 |  |  |                   <div | 
 |  |  |                     :class="this.ConveyorlineOut.data.writeInteractiveSignal[6] != true ? 'bool_false' : 'bool_true'"> | 
 |  |  |                   </div> | 
 |  |  |                 </div> | 
 |  |  |               </div> | 
 |  |  |               <div style="margin-left: 40px;"> | 
 |  |  |                 <div class="Signal">写入信号:</div> | 
 |  |  |                 <div class="content ">任务号:{{ this.ConveyorlineOut.data.commandWrite.taskNum }}</div> | 
 |  |  |                 <div class="content ">托盘号:{{ this.ConveyorlineOut.data.commandWrite.barcode }}</div> | 
 |  |  |                 <div class="content ">终点地址:{{ this.ConveyorlineOut.data.commandWrite.targetAddress}}</div> | 
 |  |  |                 <div class="content display"> | 
 |  |  |                   <div>扫码站台入库请求:</div> | 
 |  |  |                   <div | 
 |  |  |                     :class="this.ConveyorlineOut.data.writeInteractiveSignal[1] != true ? 'bool_false' : 'bool_true'"> | 
 |  |  |                   </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="content display"> | 
 |  |  |                   <div>堆垛机出库站台请求:</div> | 
 |  |  |                   <div | 
 |  |  |                     :class="this.ConveyorlineOut.data.writeInteractiveSignal[3] != true ? 'bool_false' : 'bool_true'"> | 
 |  |  |                   </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="content display"> | 
 |  |  |                   <div>堆垛机入库站台请求</div> | 
 |  |  |                   <div | 
 |  |  |                     :class="this.ConveyorlineOut.data.writeInteractiveSignal[5] != true ? 'bool_false' : 'bool_true'"> | 
 |  |  |                   </div> | 
 |  |  |                 </div> | 
 |  |  |                 <div class="content display"> | 
 |  |  |                   <div>线体出库口请求:</div> | 
 |  |  |                   <div | 
 |  |  |                     :class="this.ConveyorlineOut.data.writeInteractiveSignal[7] != true ? 'bool_false' : 'bool_true'"> | 
 |  |  |                   </div> | 
 |  |  |                 </div> | 
 |  |  |               </div> | 
 |  |  |             </div> | 
 |  |  |           </div> | 
 |  |  |         </el-tab-pane> | 
 |  |  |         <el-tab-pane label="静置库" id="print-content"> | 
 |  |  |  | 
 |  |  |         </el-tab-pane> | 
 |  |  |         <el-tab-pane label="分容库" id="print-content"> | 
 |  |  |  | 
 |  |  |         </el-tab-pane><el-tab-pane label="高温库" id="print-content"> | 
 |  |  |  | 
 |  |  |         </el-tab-pane> | 
 |  |  |         <el-tab-pane label="常温库" id="print-content"> | 
 |  |  |  | 
 |  |  |         </el-tab-pane> | 
 |  |  |       </el-tabs> | 
 |  |  |     </div> | 
 |  |  |   </div> | 
 |  |  |   <div class="title"></div> | 
 |  |  |   <el-container> | 
 |  |  |     <el-header>日志</el-header> | 
 |  |  |     <el-main> | 
 |  |  |       <el-card v-for="(log, index) in logs" :key="index" class="log-card" :style="{ color: log.color }"> | 
 |  |  |         <div :style="{ color: log.color }">{{ log.logEntry }}</div> | 
 |  |  |         <div :style="{ color: log.color }">{{ log.time }}</div> | 
 |  |  |       </el-card> | 
 |  |  |     </el-main> | 
 |  |  |   </el-container> | 
 |  |  | </template> | 
 |  |  |  | 
 |  |  | <script> | 
 |  |  | import { ref, reactive } from 'vue' | 
 |  |  | import eventBus from "../uitils/eventBus"; | 
 |  |  | import { ref, onMounted } from 'vue' | 
 |  |  | import eventBus from "@/uitils/eventBus"; | 
 |  |  |  | 
 |  |  | export default { | 
 |  |  |   setup() { | 
 |  |  |     return { | 
 |  |  |       StackerOne: { | 
 |  |  |         deviceName: "", | 
 |  |  |         data: {}, | 
 |  |  |       }, | 
 |  |  |       ConveyorlineOut: { | 
 |  |  |         deviceName: "", | 
 |  |  |         data: { | 
 |  |  |           command: {}, | 
 |  |  |           commandWrite: {}, | 
 |  |  |           writeInteractiveSignal:[], | 
 |  |  |         }, | 
 |  |  |       }, | 
 |  |  |       ConveyorlineIn: { | 
 |  |  |         deviceName: "", | 
 |  |  |         data: { | 
 |  |  |           command: {}, | 
 |  |  |           commandWrite: {}, | 
 |  |  |           writeInteractiveSignal:[], | 
 |  |  |         }, | 
 |  |  |       } | 
 |  |  |     } | 
 |  |  |  | 
 |  |  |   }, | 
 |  |  |   methods: { | 
 |  |  |      intToBitArrayFromBinaryString (num, numBits){ | 
 |  |  |         // 将整数转换为二进制字符串,并使用padStart方法补足到指定的位数(前面补0) | 
 |  |  |         let binaryString = num.toString(2).padStart(numBits, '0'); | 
 |  |  |         let bitArray = []; | 
 |  |  |         for (let i = 0; i < numBits; i++) { | 
 |  |  |             // 直接根据字符串中字符是否为'1'来确定每一位的值(转换为布尔值) | 
 |  |  |             bitArray.push(binaryString[i] === '1'); | 
 |  |  |     const logs = ref([]); | 
 |  |  |     onMounted(() => { | 
 |  |  |       eventBus.on('Logs', eventData => { | 
 |  |  |         if (logs.value.length > 500) { | 
 |  |  |           logs.value = []; | 
 |  |  |         } | 
 |  |  |         return bitArray; | 
 |  |  |         const logEntry = "日志信息:" + eventData.log | 
 |  |  |         const time = "时间:" + eventData.time  | 
 |  |  |         logs.value.unshift({ logEntry: logEntry, time: time, color: eventData.color }); | 
 |  |  |          | 
 |  |  |         // logs.value.unshift(logEntry); | 
 |  |  |       }); | 
 |  |  |     }); | 
 |  |  |     return { | 
 |  |  |       logs | 
 |  |  |     } | 
 |  |  |   }, | 
 |  |  |   mounted() { | 
 |  |  |     eventBus.on('stackerData', eventData => { | 
 |  |  |       if (eventData.deviceName == "陈化1号堆垛机") { | 
 |  |  |         this.StackerOne.deviceName = eventData.deviceName; | 
 |  |  |         this.StackerOne.data = eventData.data | 
 |  |  |       } | 
 |  |  |       // console.log(eventData); | 
 |  |  |     }) | 
 |  |  |     eventBus.on('locationData', eventData => { | 
 |  |  |       console.log(eventData); | 
 |  |  |       if (eventData.deviceName == "陈化出库输送线") { | 
 |  |  |         this.ConveyorlineOut.deviceName = eventData.deviceName; | 
 |  |  |         this.ConveyorlineOut.data = eventData.data | 
 |  |  |       } | 
 |  |  |       if (eventData.data.childDeviceCode == '1018') { | 
 |  |  |         this.ConveyorlineIn.deviceName = eventData.deviceName; | 
 |  |  |         this.ConveyorlineIn.data = eventData.data | 
 |  |  |         let number = eventData.data.commandWrite.writeInteractiveSignal | 
 |  |  |         this.ConveyorlineIn.data.writeInteractiveSignal = this.intToBitArrayFromBinaryString(number, 8); | 
 |  |  |         console.log(this.ConveyorlineIn.data.writeInteractiveSignal); | 
 |  |  |       } | 
 |  |  |     }) | 
 |  |  |   } | 
 |  |  | } | 
 |  |  | </script> | 
 |  |  | 
 |  |  |   color: orange; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .bool_true { | 
 |  |  |   width: 30px; | 
 |  |  |   height: 20px; | 
 |  |  |   margin-top: 10px; | 
 |  |  |   margin-left: 10px; | 
 |  |  |   background-color: rgb(99, 155, 16); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .bool_info { | 
 |  |  |   width: 30px; | 
 |  |  |   height: 10px; | 
 |  |  |   background-color: #ccc; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .StackerOne { | 
 |  |  |   width: 100%; | 
 |  |  | .log-card { | 
 |  |  |   margin-bottom: 10px; | 
 |  |  |   padding-left: 30px; | 
 |  |  |   font-size: 25px; | 
 |  |  |   border: 1px solid #ccc; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .ConveyorlineOut { | 
 |  |  |   width: 100%; | 
 |  |  |   margin-bottom: 10px; | 
 |  |  |   padding-left: 30px; | 
 |  |  |   font-size: 25px; | 
 |  |  |   border: 1px solid #ccc; | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .bool_false { | 
 |  |  |   display: block; | 
 |  |  |   width: 30px; | 
 |  |  |   height: 20px; | 
 |  |  |   margin-top: 10px; | 
 |  |  |   margin-left: 10px; | 
 |  |  |   background-color: rgb(204, 71, 71); | 
 |  |  | } | 
 |  |  |  | 
 |  |  | .content { | 
 |  |  |   margin-bottom: 20px; | 
 |  |  | } | 
 |  |  | .Signal{ | 
 |  |  |   margin-bottom: 20px; | 
 |  |  |   color:blueviolet; | 
 |  |  | } | 
 |  |  | .display { | 
 |  |  |   display: flex; | 
 |  |  | } | 
 |  |  | </style> |