helongyang
2025-11-17 291067c13bfe8fb9c876e3764a828dc3ddd22f99
´úÂë¹ÜÀí/WCS/WIDESEAWCS_Client/src/views/deviceMonitoring/BoardWarehouse.vue
@@ -28,10 +28,58 @@
          <div class="xname">托盘类型:</div>
          <div class="xbci" :title="bcData.R_BC_TrayType">{{ bcData.R_BC_TrayType || '-' }}</div>
        </div>
        <!-- æ–°å¢žï¼šå½“前列状态显示 -->
        <div class="bcankuang">
          <div class="xname">当前所在列:</div>
          <div class="xbci" :title="bcData.R_BC_Column">{{ bcData.R_BC_Column || '未知' }}</div>
        </div>
      </div>
    </div>
    <!-- æ–°å¢žï¼šå †åž›æœºå½“前列文字显示(与PP仓一致) -->
    <div id="bc-nowcolumn" :class="{ 'abnormal-column': bcData.R_BC_Status !== '正常' }">
      <div>板料堆垛机当前所在列:
        <span :title="bcData.R_BC_Column">{{ bcData.R_BC_Column || '未知' }}</span>
      </div>
    </div>
    <!-- æ–°å¢žï¼šåˆ—方格展示区域(与PP仓逻辑一致) -->
    <div class="bc-column-container" :class="{ 'pp-status-abnormal': bcData.R_BC_Status !== '正常' }">
      <!-- ä¸Šæ–¹1-24列 -->
      <div class="column-grid-container">
        <div
          v-for="num in 37"
          :key="num"
          class="column-grid-item"
          :class="{ 'active': num == bcData.R_BC_Column }"
          :title="`列号: ${num}`"
        >
          {{ num }}
        </div>
      </div>
      <!-- ä¸‹æ–¹25-47列 (23个) -->
      <div class="column-grid-container">
        <div
          v-for="i in 34"
          :key="'bc-lower-' + i"
          class="column-grid-item"
          :class="{ 'active': (103 + i) == bcData.R_BC_Column }"
          :title="`列号: ${103 + i}`"
        >
          {{ 103 + i }}
        </div>
      </div>
      <div class="column-grid-container">
        <div
          v-for="i in 34"
          :key="'bc-lower-' + i"
          class="column-grid-item"
          :class="{ 'active': (203 + i) == bcData.R_BC_Column }"
          :title="`列号: ${203 + i}`"
        >
          {{ 203 + i }}
        </div>
      </div>
    </div>
  </div>
</template>
@@ -49,19 +97,18 @@
  },
  setup() {
    const store = useStore();
    // ä»…存储BC数据,与其他数据隔离
    const bcData = ref({});
    // å»¶è¿Ÿæ›´æ–°é…ç½®ï¼Œè§£å†³é—ªçƒé—®é¢˜
    const UPDATE_DELAY = 300; // å»¶è¿Ÿ300ms更新UI
    let updateTimer = null;   // å®šæ—¶å™¨å®žä¾‹
    const UPDATE_DELAY = 300;
    let updateTimer = null;
    // BC数据映射规则
    // BC数据映射规则(新增R_BC_Column列号处理)
    const bcStatusMap = {
      R_BC_Status: {
        1: "正常",
        2: "故障",
        3: "急停",
        0: "正常",
        1: "故障",
        2: "急停",
        3: "未知"
      },
      R_BC_AutoStatus: {
        0: "ç»´ä¿®",
@@ -90,10 +137,11 @@
        2: "中托盘(2)",
        3: "大托盘(3)",
        4: "特大托盘(4)",
      }
      },
      // æ–°å¢žï¼šåˆ—号映射(与PP仓一致)
      R_BC_Column: (val) => val !== undefined ? val : "未知"
    };
    // BC字段分组
    const bcFieldGroups = {
      permissionFields: {
        keys: ["R_BC_IsCanPut1", "R_BC_IsCanTake1", "R_BC_IsCanPut2", "R_BC_IsCanTake2", 
@@ -117,19 +165,20 @@
      }
    };
    // å¤„理BC原始数据
    const processBCData = (rawData) => {
      if (!rawData) return {};
      const processedData = { ...rawData };
      // å¤„理核心状态字段
      // å¤„理核心状态字段(包含列号)
      Object.keys(bcStatusMap).forEach(key => {
        if (processedData.hasOwnProperty(key)) {
          processedData[key] = bcStatusMap[key][processedData[key]] || processedData[key];
          const mapper = bcStatusMap[key];
          processedData[key] = typeof mapper === 'function'
            ? mapper(processedData[key])
            : (mapper[processedData[key]] || processedData[key]);
        }
      });
      // å¤„理分组字段
      Object.values(bcFieldGroups).forEach(group => {
        group.keys.forEach(key => {
          if (processedData.hasOwnProperty(key)) {
@@ -141,18 +190,15 @@
      return processedData;
    };
    // å»¶è¿Ÿæ›´æ–°BC数据,避免高频刷新
    const delayedUpdateBCData = (newRawData) => {
      if (updateTimer) {
        clearTimeout(updateTimer);
      }
      updateTimer = setTimeout(() => {
        // åªå¤„理包含BC特征字段的数据
        if (newRawData && newRawData.R_BC_Status !== undefined) {
          bcData.value = processBCData(newRawData);
          
          // æ›´æ–°æ ·å¼
          nextTick(() => {
            const valueElements = document.getElementsByClassName("xbci");
            for (let i = 0; i < valueElements.length; i++) {
@@ -168,13 +214,11 @@
    };
    onMounted(() => {
      // åˆå§‹åŠ è½½æ•°æ®
      const initialData = store.state.homedata;
      if (initialData && initialData.R_BC_Status !== undefined) {
        bcData.value = processBCData(initialData);
      }
      // ç›‘听数据变化,只处理BC数据
      const unwatch = watch(
        () => store.state.homedata,
        (newData) => {
@@ -185,7 +229,6 @@
        { deep: true }
      );
      // ç»„件卸载时清理
      onUnmounted(() => {
        unwatch();
        if (updateTimer) {
@@ -338,4 +381,76 @@
  margin-left: 1.7%;
  border-radius: 10px;
}
</style>
/* æ–°å¢žï¼šBC堆垛机当前列文字样式(与PP仓一致) */
#bc-nowcolumn {
  width: 100%;
  height: 70px;
  float: left;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 1.5cqw;
  font-weight: bold;
  color: #00ff4c;
}
/* æ–°å¢žï¼šBC堆垛机异常状态文字变色 */
#bc-nowcolumn.abnormal-column {
  color: red !important;
}
#bc-nowcolumn.abnormal-column span {
  color: red !important;
}
/* æ–°å¢žï¼šBC列容器样式 */
.bc-column-container {
  width: 95%;
  margin: 0 auto;
  position: relative;
  clear: both;
  padding-top: 15px;
}
/* å¤ç”¨ï¼šæ–¹æ ¼å®¹å™¨æ ·å¼ï¼ˆä¸ŽPP仓一致) */
.column-grid-container {
  width: 100%;
  display: flex;
  flex-wrap: nowrap;
  justify-content: space-between;
  align-items: center;
  gap: 2px;
  position: relative;
  z-index: 2;
  margin-bottom: 10px;
  padding: 0 2px;
}
/* å¤ç”¨ï¼šæ–¹æ ¼æ ·å¼ï¼ˆä¸ŽPP仓一致) */
.column-grid-item {
  flex: 1;
  min-width: 24px;
  max-width: 60px;
  height: 30px;
  border: 1px solid #fff;
  border-radius: 8px 8px 0 0;
  color: white;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: clamp(8px, 1vw, 14px);
  box-sizing: border-box;
  transition: background-color 0.3s ease;
}
/* å¤ç”¨ï¼šå½“前列高亮样式 */
.column-grid-item.active {
  background-color: green;
  font-weight: bold;
}
/* å¤ç”¨ï¼šå¼‚常状态下当前列红色高亮 */
.pp-status-abnormal .column-grid-item.active {
  background-color: red !important;
}
</style>