Explorar el Código

fix(waterSupply): 实时报警兜底判定与后端同序,在办工单优先于已处理 (#58)

Kazerin hace 1 mes
padre
commit
fb03a302bd
Se han modificado 2 ficheros con 24 adiciones y 4 borrados
  1. 6 4
      src/utils/waterHomeModel.js
  2. 18 0
      tests/waterHomeModel.test.mjs

+ 6 - 4
src/utils/waterHomeModel.js

@@ -196,13 +196,15 @@ function derivedDisplayStatus(row = {}) {
   if (Number.isFinite(explicit) && explicit !== 0) {
     return explicit
   }
-  if (Number(row?.alarmStatus) === 1) {
-    return ALARM_DISPLAY_RELEASED
-  }
+  // 与后端 resolveDisplayStatus 同序:在办工单优先,
+  // 其次才看报警是否已处理/误报解除,避免把“已转工单”误判成“已解除”。
   const hasOrder = String(row?.orderNo || row?.relatedOrderNo || '').trim().length > 0
   const orderStatus = Number(row?.orderStatus ?? row?.relatedOrderStatus ?? -1)
   const liveOrder = hasOrder && orderStatus !== 7
-  return liveOrder ? 2 : 1
+  if (liveOrder) {
+    return 2
+  }
+  return Number(row?.alarmStatus) === 1 ? ALARM_DISPLAY_RELEASED : 1
 }
 
 /**

+ 18 - 0
tests/waterHomeModel.test.mjs

@@ -185,6 +185,24 @@ test('realtime alarm rows never treat a cancelled order as transferred', () => {
   assert.equal(rows[0].displayStatusText, '待审核')
 })
 
+test('realtime alarm fallback keeps a live order as transferred even when the alarm row is already handled', () => {
+  // 与后端 resolveDisplayStatus 同序:在办工单优先于报警是否已处理。
+  const rows = normalizeRealtimeAlarmRows([
+    {
+      id: 'legacy-handled-with-order',
+      deviceCode: 'CN-GS-202609020007',
+      alarmStatus: 1,
+      orderNo: 'WO202609151100011',
+      orderStatus: 3,
+      alarmTime: '2026-09-15 12:00:00'
+    }
+  ], 5)
+
+  assert.equal(rows.length, 1)
+  assert.equal(rows[0].displayStatus, 2)
+  assert.equal(rows[0].displayStatusText, '已转工单')
+})
+
 test('realtime alarm jumps split between audit and work order by display status', () => {
   assert.deepEqual(realtimeAlarmJumpTarget({
     id: 'alarm-1',