<template> 
 | 
  <el-row> 
 | 
    <el-col :span="24"> 
 | 
      <device-line v-for="device in devices" :key="device.deviceName" :device="device" /> 
 | 
    </el-col> 
 | 
  </el-row> 
 | 
</template> 
 | 
  
 | 
<script setup> 
 | 
import { onMounted, reactive, toRefs } from "vue"; 
 | 
import eventBus from "@/uitils/eventBus"; 
 | 
import DeviceLine from "@/components/DeviceLine.vue"; 
 | 
  
 | 
// 设备列表(修改重复设备名称) 
 | 
const devices = reactive([]); 
 | 
  
 | 
const intToBitArrayFromBinaryString = (num, numBits) => { 
 | 
  let binaryString = num.toString(2).padStart(numBits, '0'); 
 | 
  return Array.from({ length: numBits }, (_, index) => binaryString[index] === '1'); 
 | 
}; 
 | 
  
 | 
// 监听设备数据变化 
 | 
onMounted(() => { 
 | 
  eventBus.on('locationData', eventData => { 
 | 
    if (eventData.deviceName === "化成入库输送线") { 
 | 
      if (devices.length <= 0) { 
 | 
        devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode }); 
 | 
      } 
 | 
      else { 
 | 
        const device = devices.find(c => c.childDeviceCode == eventData.childDeviceCode) 
 | 
        if (device) { 
 | 
          const number = eventData.data.commandWrite.writeInteractiveSignal; 
 | 
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8) 
 | 
          eventData.data.writeInteractiveSignal = writeInteractiveSignal; 
 | 
          device.data = eventData.data 
 | 
           
 | 
        } 
 | 
        else { 
 | 
          const number = eventData.data.commandWrite.writeInteractiveSignal; 
 | 
          const writeInteractiveSignal = intToBitArrayFromBinaryString(number, 8) 
 | 
          eventData.data.writeInteractiveSignal = writeInteractiveSignal; 
 | 
          devices.push({ deviceName: eventData.deviceName, data: eventData.data, childDeviceCode: eventData.childDeviceCode }); 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
  }); 
 | 
}); 
 | 
</script> 
 |