helongyang
9 小时以前 3cd89b88edd913530062e13e20e7d6b866fd190f
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/AuxiliaryWarehouse.vue
@@ -1,24 +1,23 @@
<template>
  <div id="title">
    <div id="bkuang" style="border-top: none">
      <div class="skuang">
        <div class="zhuname">入库8005站台</div>
        <div class="zhankuang">
          <div class="xname">放货完成(写):</div>
          <div class="xzhi" :title="data.W_PutFinish5">{{ data.W_PutFinish5 }}</div>
          <div class="xzhi" :title="flData.W_PutFinish5">{{ flData.W_PutFinish5 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">入库到位指令(读):</div>
          <div class="xzhi" :title="data.R_ConveyArrivaled5">{{ data.R_ConveyArrivaled5 }}</div>
          <div class="xzhi" :title="flData.R_ConveyArrivaled5">{{ flData.R_ConveyArrivaled5 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">到位托盘号(读):</div>
          <div class="xzhi" :title="data.R_Barcode5">{{ data.R_Barcode5 }}</div>
          <div class="xzhi" :title="flData.R_Barcode5">{{ flData.R_Barcode5 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">到位任务号(读):</div>
          <div class="xzhi" :title="data.R_TaskNum5">{{ data.R_TaskNum5 }}</div>
          <div class="xzhi" :title="flData.R_TaskNum5">{{ flData.R_TaskNum5 || '-' }}</div>
        </div> 
      </div>
      
@@ -26,20 +25,19 @@
        <div class="zhuname">出库8001站台</div>
        <div class="zhankuang">
          <div class="xname">放货完成(写):</div>
          <div class="xzhi" :title="data.W_PutFinish1">{{ data.W_PutFinish1 }}</div>
          <div class="xzhi" :title="flData.W_PutFinish1">{{ flData.W_PutFinish1 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">是否允许放货(读):</div>
          <div class="xzhi" :title="data.R_IsCanPut">{{ data.R_IsCanPut }}</div>
          <div class="xzhi" :title="flData.R_IsCanPut">{{ flData.R_IsCanPut || '-' }}</div>
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import { ref, nextTick } from "vue";
import { ref, nextTick, watch, onUnmounted } from "vue";
import { useStore } from "vuex";
import { onMounted } from "vue";
@@ -49,69 +47,106 @@
      xuan: 0
    };
  },
  methods: {
  },
  setup() {
    const store = useStore();
    const data = ref({});
    // ä»…存储FL相关数据
    const flData = ref({});
    // 1. å®šä¹‰æ™®é€šå­—段的映射规则
    const statusMap = {
    // å»¶è¿Ÿæ›´æ–°é…ç½®ï¼Œè§£å†³é—ªçƒé—®é¢˜
    const UPDATE_DELAY = 300; // 300ms延迟,平衡实时性和界面稳定性
    let updateTimer = null;   // å®šæ—¶å™¨å®žä¾‹
      
    };
    // 2. å®šä¹‰éœ€è¦å…±ç”¨æ˜ å°„规则的字段列表和对应的映射规则
    const booleanFields = [
    // FL数据映射规则配置
    const flStatusConfig = {
      // FL boolean类型字段映射
      booleanFields: {
        keys: [
      "W_PutFinish5", "W_PutFinish1",
      "R_IsCanPut", "R_ConveyArrivaled5",
    ];
    const booleanMap = {
      true: "是",
      false: "否"
          "R_IsCanPut", "R_ConveyArrivaled5"
        ],
        map: { true: "是", false: "否" }
      }
    };
    // å¤„理数据,先处理普通映射,再批量处理共用映射的字段
    const processData = (rawData) => {
    // å¤„理FL原始数据
    const processFLData = (rawData) => {
      if (!rawData) return {};
      const processed = { ...rawData };
      // å¤„理普通字段映射
      Object.keys(statusMap).forEach(key => {
      // å¤„理boolean类型字段
      flStatusConfig.booleanFields.keys.forEach(key => {
        if (processed.hasOwnProperty(key)) {
          const map = statusMap[key];
          processed[key] = map[processed[key]] || processed[key];
        }
      });
      // æ‰¹é‡å¤„理共用映射规则的字段
      booleanFields.forEach(key => {
        if (processed.hasOwnProperty(key)) {
          processed[key] = booleanMap[processed[key]] || processed[key];
          processed[key] = flStatusConfig.booleanFields.map[processed[key]] || processed[key];
        }
      });
      return processed;
    };
    onMounted(() => {
    // å»¶è¿Ÿæ›´æ–°FL数据,避免高频刷新导致的闪烁
    const delayedUpdateFLData = (newRawData) => {
      if (updateTimer) clearTimeout(updateTimer);
      updateTimer = setTimeout(() => {
        // æ£€æŸ¥æ˜¯å¦åŒ…含FL特征字段
        const hasFLFields = flStatusConfig.booleanFields.keys.some(key =>
          newRawData && newRawData[key] !== undefined
        );
        if (hasFLFields) {
          flData.value = processFLData(newRawData);
          // æ›´æ–°æ ·å¼
      nextTick(() => {
        setInterval(() => {
          const rawData = store.state.homedata;
          data.value = processData(rawData);
          const xian = document.getElementsByClassName("xzhi");
          for (let i = 0; i < xian.length; i++) {
            if (xian[i].innerHTML === "是") {
              xian[i].style.color = "yellow";
            } else if (xian[i].innerHTML === "否") {
              xian[i].style.color = "red";
            const valueElements = document.getElementsByClassName("xzhi");
            for (let i = 0; i < valueElements.length; i++) {
              const text = valueElements[i].innerHTML;
              if (text === "是") {
                valueElements[i].style.color = "yellow";
              } else if (text === "否") {
                valueElements[i].style.color = "red";
            }
          }
        });
        }
      }, UPDATE_DELAY);
    };
    onMounted(() => {
      // åˆå§‹åŠ è½½æ•°æ®
      const initialData = store.state.homedata;
      const hasFLFields = flStatusConfig.booleanFields.keys.some(key =>
        initialData && initialData[key] !== undefined
      );
      if (hasFLFields) {
        flData.value = processFLData(initialData);
      }
      // ç›‘听数据变化,只处理FL数据
      const unwatch = watch(
        () => store.state.homedata,
        (newData) => {
          const hasFLFields = flStatusConfig.booleanFields.keys.some(key =>
            newData && newData[key] !== undefined
          );
          if (hasFLFields) {
            delayedUpdateFLData(newData);
          }
        },
        { deep: true }
      );
      // ç»„件卸载时清理资源
      onUnmounted(() => {
        unwatch();
        if (updateTimer) clearTimeout(updateTimer);
      });
    });
    return {
      data,
      flData
    };
  }
};
@@ -255,3 +290,4 @@
  border-radius: 10px;
}
</style>