helongyang
8 小时以前 3cd89b88edd913530062e13e20e7d6b866fd190f
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/SolderMaskWarehouse.vue
@@ -1,168 +1,174 @@
<template>
  <div id="title">
    <div id="bkuang" style="border-top: none">
      <!-- ZH仓堆垛机状态面板 -->
      <div class="skuang">
        <div class="zhuname">阻焊仓堆垛机</div>
        <div class="zhankuang">
          <div class="xname">堆垛机状态:</div>
          <div class="xzhi" :title="data.R_ZH_Status">{{ data.R_ZH_Status }}</div>
          <div class="xzhi" :title="zhData.R_ZH_Status">{{ zhData.R_ZH_Status || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">堆垛机手自动状态:</div>
          <div class="xzhi" :title="data.R_ZH_AutoStatus">{{ data.R_ZH_AutoStatus }}</div>
          <div class="xzhi" :title="zhData.R_ZH_AutoStatus">{{ zhData.R_ZH_AutoStatus || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">正在执行的任务号:</div>
          <div class="xzhi" :title="data.R_ZH_TaskNum">{{ data.R_ZH_TaskNum }}</div>
          <div class="xzhi" :title="zhData.R_ZH_TaskNum">{{ zhData.R_ZH_TaskNum || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">堆垛机工作状态:</div>
          <div class="xzhi" :title="data.R_ZH_WorkStatus">{{ data.R_ZH_WorkStatus }}</div>
          <div class="xzhi" :title="zhData.R_ZH_WorkStatus">{{ zhData.R_ZH_WorkStatus || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">作业类型:</div>
          <div class="xzhi" :title="data.R_ZH_WorkType">{{ data.R_ZH_WorkType }}</div>
          <div class="xzhi" :title="zhData.R_ZH_WorkType">{{ zhData.R_ZH_WorkType || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">托盘类型:</div>
          <div class="xzhi" :title="data.R_ZH_TrayType">{{ data.R_ZH_TrayType }}</div>
          <div class="xzhi" :title="zhData.R_ZH_TrayType">{{ zhData.R_ZH_TrayType || '-' }}</div>
        </div>
      </div>
      <!-- ZH关联站台(入库301+入库302) -->
      <div class="skuang">
        <div class="zhuname">入库301站台</div>
        <div class="zhankuang">
          <div class="xname">是否允许放货(读):</div>
          <div class="xzhi" :title="data.R_ZH_IsCanPut1">{{ data.R_ZH_IsCanPut1 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_IsCanPut1">{{ zhData.R_ZH_IsCanPut1 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">是否允许取货(读):</div>
          <div class="xzhi" :title="data.R_ZH_IsCanTake1">{{ data.R_ZH_IsCanTake1 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_IsCanTake1">{{ zhData.R_ZH_IsCanTake1 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货托盘类型(读):</div>
          <div class="xzhi" :title="data.R_ZH_TakePalletType1">{{ data.R_ZH_TakePalletType1 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_TakePalletType1">{{ zhData.R_ZH_TakePalletType1 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货托盘类型(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutPalletType1">{{ data.W_ZH_PutPalletType1 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutPalletType1">{{ zhData.W_ZH_PutPalletType1 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货请求(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutRequest1">{{ data.W_ZH_PutRequest1 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutRequest1">{{ zhData.W_ZH_PutRequest1 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货完成(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutFinish1">{{ data.W_ZH_PutFinish1 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutFinish1">{{ zhData.W_ZH_PutFinish1 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货请求(写):</div>
          <div class="xzhi" :title="data.W_ZH_TakeRequest1">{{ data.W_ZH_TakeRequest1 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_TakeRequest1">{{ zhData.W_ZH_TakeRequest1 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货完成(写):</div>
          <div class="xzhi" :title="data.W_ZH_TakeFinish1">{{ data.W_ZH_TakeFinish1 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_TakeFinish1">{{ zhData.W_ZH_TakeFinish1 || '-' }}</div>
        </div>
        <div class="zhuname">入库302站台</div>
        <div class="zhankuang">
          <div class="xname">是否允许放货(读):</div>
          <div class="xzhi" :title="data.R_ZH_IsCanPut2">{{ data.R_ZH_IsCanPut2 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_IsCanPut2">{{ zhData.R_ZH_IsCanPut2 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">是否允许取货(读):</div>
          <div class="xzhi" :title="data.R_ZH_IsCanTake2">{{ data.R_ZH_IsCanTake2 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_IsCanTake2">{{ zhData.R_ZH_IsCanTake2 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货托盘类型(读):</div>
          <div class="xzhi" :title="data.R_ZH_TakePalletType2">{{ data.R_ZH_TakePalletType2 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_TakePalletType2">{{ zhData.R_ZH_TakePalletType2 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货托盘类型(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutPalletType2">{{ data.W_ZH_PutPalletType2 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutPalletType2">{{ zhData.W_ZH_PutPalletType2 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货请求(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutRequest2">{{ data.W_ZH_PutRequest2 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutRequest2">{{ zhData.W_ZH_PutRequest2 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货完成(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutFinish2">{{ data.W_ZH_PutFinish2 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutFinish2">{{ zhData.W_ZH_PutFinish2 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货请求(写):</div>
          <div class="xzhi" :title="data.W_ZH_TakeRequest2">{{ data.W_ZH_TakeRequest2 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_TakeRequest2">{{ zhData.W_ZH_TakeRequest2 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货完成(写):</div>
          <div class="xzhi" :title="data.W_ZH_TakeFinish2">{{ data.W_ZH_TakeFinish2 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_TakeFinish2">{{ zhData.W_ZH_TakeFinish2 || '-' }}</div>
        </div>
      </div>
      <!-- ZH关联站台(出库303+出库304) -->
      <div class="skuang">
        <div class="zhuname">出库303站台</div>
        <div class="zhankuang">
          <div class="xname">是否允许放货(读):</div>
          <div class="xzhi" :title="data.R_ZH_IsCanPut3">{{ data.R_ZH_IsCanPut3 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_IsCanPut3">{{ zhData.R_ZH_IsCanPut3 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">是否允许取货(读):</div>
          <div class="xzhi" :title="data.R_ZH_IsCanTake3">{{ data.R_ZH_IsCanTake3 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_IsCanTake3">{{ zhData.R_ZH_IsCanTake3 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货托盘类型(读):</div>
          <div class="xzhi" :title="data.R_ZH_TakePalletType3">{{ data.R_ZH_TakePalletType3 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_TakePalletType3">{{ zhData.R_ZH_TakePalletType3 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货托盘类型(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutPalletType3">{{ data.W_ZH_PutPalletType3 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutPalletType3">{{ zhData.W_ZH_PutPalletType3 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货请求(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutRequest3">{{ data.W_ZH_PutRequest3 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutRequest3">{{ zhData.W_ZH_PutRequest3 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货完成(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutFinish3">{{ data.W_ZH_PutFinish3 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutFinish3">{{ zhData.W_ZH_PutFinish3 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货请求(写):</div>
          <div class="xzhi" :title="data.W_ZH_TakeRequest3">{{ data.W_ZH_TakeRequest3 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_TakeRequest3">{{ zhData.W_ZH_TakeRequest3 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货完成(写):</div>
          <div class="xzhi" :title="data.W_ZH_TakeFinish3">{{ data.W_ZH_TakeFinish3 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_TakeFinish3">{{ zhData.W_ZH_TakeFinish3 || '-' }}</div>
        </div>
        <div class="zhuname">出库304站台</div>
        <div class="zhankuang">
          <div class="xname">是否允许放货(读):</div>
          <div class="xzhi" :title="data.R_ZH_IsCanPut4">{{ data.R_ZH_IsCanPut4 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_IsCanPut4">{{ zhData.R_ZH_IsCanPut4 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">是否允许取货(读):</div>
          <div class="xzhi" :title="data.R_ZH_IsCanTake4">{{ data.R_ZH_IsCanTake4 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_IsCanTake4">{{ zhData.R_ZH_IsCanTake4 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货托盘类型(读):</div>
          <div class="xzhi" :title="data.R_ZH_TakePalletType4">{{ data.R_ZH_TakePalletType4 }}</div>
          <div class="xzhi" :title="zhData.R_ZH_TakePalletType4">{{ zhData.R_ZH_TakePalletType4 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货托盘类型(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutPalletType4">{{ data.W_ZH_PutPalletType4 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutPalletType4">{{ zhData.W_ZH_PutPalletType4 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货请求(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutRequest4">{{ data.W_ZH_PutRequest4 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutRequest4">{{ zhData.W_ZH_PutRequest4 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">放货完成(写):</div>
          <div class="xzhi" :title="data.W_ZH_PutFinish4">{{ data.W_ZH_PutFinish4 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_PutFinish4">{{ zhData.W_ZH_PutFinish4 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货请求(写):</div>
          <div class="xzhi" :title="data.W_ZH_TakeRequest4">{{ data.W_ZH_TakeRequest4 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_TakeRequest4">{{ zhData.W_ZH_TakeRequest4 || '-' }}</div>
        </div>
        <div class="zhankuang">
          <div class="xname">取货完成(写):</div>
          <div class="xzhi" :title="data.W_ZH_TakeFinish4">{{ data.W_ZH_TakeFinish4 }}</div>
          <div class="xzhi" :title="zhData.W_ZH_TakeFinish4">{{ zhData.W_ZH_TakeFinish4 || '-' }}</div>
        </div>
      </div>
    </div>
@@ -170,7 +176,7 @@
</template>
<script>
import { ref, nextTick } from "vue";
import { ref, nextTick, watch, onUnmounted } from "vue";
import { useStore } from "vuex";
import { onMounted } from "vue";
@@ -180,14 +186,17 @@
      xuan: 0
    };
  },
  methods: {
  },
  setup() {
    const store = useStore();
    const data = ref({});
    // ä»…存储ZH数据,与其他数据隔离
    const zhData = ref({});
    // 1. å®šä¹‰æ™®é€šå­—段的映射规则
    const statusMap = {
    // å»¶è¿Ÿæ›´æ–°é…ç½®ï¼Œè§£å†³é—ªçƒé—®é¢˜
    const UPDATE_DELAY = 300; // å»¶è¿Ÿ300ms更新UI
    let updateTimer = null;   // å®šæ—¶å™¨å®žä¾‹
    // ZH数据映射规则
    const zhStatusMap = {
      R_ZH_Status: {
        1: "正常",
        2: "故障",
@@ -223,68 +232,109 @@
      }
    };
    // 2. å®šä¹‰éœ€è¦å…±ç”¨æ˜ å°„规则的字段列表和对应的映射规则
    const booleanFields = [
      "R_ZH_IsCanPut1", "R_ZH_IsCanTake1",
      "W_ZH_PutRequest1", "W_ZH_PutFinish1",
      "W_ZH_TakeRequest1", "W_ZH_TakeFinish1",
      "R_ZH_IsCanPut2", "R_ZH_IsCanTake2",
      "W_ZH_PutRequest2", "W_ZH_PutFinish2",
      "W_ZH_TakeRequest2", "W_ZH_TakeFinish2",
      "R_ZH_IsCanPut3", "R_ZH_IsCanTake3",
      "W_ZH_PutRequest3", "W_ZH_PutFinish3",
      "W_ZH_TakeRequest3", "W_ZH_TakeFinish3",
      "R_ZH_IsCanPut4", "R_ZH_IsCanTake4",
      "W_ZH_PutRequest4", "W_ZH_PutFinish4",
      "W_ZH_TakeRequest4", "W_ZH_TakeFinish4",
    ];
    const booleanMap = {
      true: "是",
      false: "否"
    // ZH字段分组
    const zhFieldGroups = {
      permissionFields: {
        keys: ["R_ZH_IsCanPut1", "R_ZH_IsCanTake1", "R_ZH_IsCanPut2", "R_ZH_IsCanTake2",
               "R_ZH_IsCanPut3", "R_ZH_IsCanTake3", "R_ZH_IsCanPut4", "R_ZH_IsCanTake4"],
        map: { true: "是", false: "否" }
      },
      requestFields: {
        keys: ["W_ZH_PutRequest1", "W_ZH_TakeRequest1", "W_ZH_PutRequest2", "W_ZH_TakeRequest2",
               "W_ZH_PutRequest3", "W_ZH_TakeRequest3", "W_ZH_PutRequest4", "W_ZH_TakeRequest4"],
        map: { true: "是", false: "否" }
      },
      finishFields: {
        keys: ["W_ZH_PutFinish1", "W_ZH_TakeFinish1", "W_ZH_PutFinish2", "W_ZH_TakeFinish2",
               "W_ZH_PutFinish3", "W_ZH_TakeFinish3", "W_ZH_PutFinish4", "W_ZH_TakeFinish4"],
        map: { true: "是", false: "否" }
      },
      palletTypeFields: {
        keys: ["R_ZH_TakePalletType1", "R_ZH_TakePalletType2", "R_ZH_TakePalletType3", "R_ZH_TakePalletType4",
               "W_ZH_PutPalletType1", "W_ZH_PutPalletType2", "W_ZH_PutPalletType3", "W_ZH_PutPalletType4"],
        map: { "-1": "空箱(-1)", 1: "小托盘(1)", 2: "中托盘(2)", 3: "大托盘(3)", 4: "特大托盘(4)" }
      }
    };
    // å¤„理数据,先处理普通映射,再批量处理共用映射的字段
    const processData = (rawData) => {
    // å¤„理ZH原始数据
    const processZHData = (rawData) => {
      if (!rawData) return {};
      const processed = { ...rawData };
      const processedData = { ...rawData };
      // å¤„理普通字段映射
      Object.keys(statusMap).forEach(key => {
        if (processed.hasOwnProperty(key)) {
          const map = statusMap[key];
          processed[key] = map[processed[key]] || processed[key];
      // å¤„理核心状态字段
      Object.keys(zhStatusMap).forEach(key => {
        if (processedData.hasOwnProperty(key)) {
          processedData[key] = zhStatusMap[key][processedData[key]] || processedData[key];
        }
      });
      // æ‰¹é‡å¤„理共用映射规则的字段
      booleanFields.forEach(key => {
        if (processed.hasOwnProperty(key)) {
          processed[key] = booleanMap[processed[key]] || processed[key];
        }
      // å¤„理分组字段
      Object.values(zhFieldGroups).forEach(group => {
        group.keys.forEach(key => {
          if (processedData.hasOwnProperty(key)) {
            processedData[key] = group.map[processedData[key]] || processedData[key];
          }
        });
      });
      return processed;
      return processedData;
    };
    // å»¶è¿Ÿæ›´æ–°ZH数据,避免高频刷新
    const delayedUpdateZHData = (newRawData) => {
      if (updateTimer) {
        clearTimeout(updateTimer);
      }
      updateTimer = setTimeout(() => {
        // åªå¤„理包含ZH特征字段的数据
        if (newRawData && newRawData.R_ZH_Status !== undefined) {
          zhData.value = processZHData(newRawData);
          // æ›´æ–°æ ·å¼
          nextTick(() => {
            const valueElements = document.getElementsByClassName("xzhi");
            for (let i = 0; i < valueElements.length; i++) {
              if (valueElements[i].innerHTML === "是") {
                valueElements[i].style.color = "yellow";
              } else if (valueElements[i].innerHTML === "否") {
                valueElements[i].style.color = "red";
              }
            }
          });
        }
      }, UPDATE_DELAY);
    };
    onMounted(() => {
      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 initialData = store.state.homedata;
      if (initialData && initialData.R_ZH_Status !== undefined) {
        zhData.value = processZHData(initialData);
      }
      // ç›‘听数据变化,只处理ZH数据
      const unwatch = watch(
        () => store.state.homedata,
        (newData) => {
          if (newData && newData.R_ZH_Status !== undefined) {
            delayedUpdateZHData(newData);
          }
        });
        },
        { deep: true }
      );
      // ç»„件卸载时清理
      onUnmounted(() => {
        unwatch();
        if (updateTimer) {
          clearTimeout(updateTimer);
        }
      });
    });
    return {
      data,
      zhData
    };
  }
};