| 123456789101112131415161718192021222324252627282930313233343536373839 |
- import assert from 'node:assert/strict'
- import { entityDetailView, normalizeEntityDetail } from '../src/modules/cockpit/domain/entityDetail.js'
- import { eventRowView, toEventItem } from '../src/modules/cockpit/domain/eventList.js'
- // —— 4) 报警详情/卡片:上屏用业务编号 alarmNo,不是主键 UUID ——
- const raw = { eventNo: '9a0738db9773af8bfb0ccd1ef8680b82', eventCode: 'BJ202610281616136810', eventName: '报警', eventType: 'WARN-LEAK', level: 1, status: 'UNHANDLED' }
- const item = toEventItem(raw)
- assert.equal(item.code, '9a0738db9773af8bfb0ccd1ef8680b82', '内部键仍是 eventNo')
- assert.equal(item.codeText, 'BJ202610281616136810', '展示编号必须是 eventCode')
- const row = eventRowView(item)
- assert.equal(row.code, '9a0738db9773af8bfb0ccd1ef8680b82')
- assert.equal(row.codeText, 'BJ202610281616136810')
- // 详情(远端已返回 AlarmVO 形状)
- const detail = normalizeEntityDetail({ kind: 'event', id: raw.eventNo, family: 'ALARM' }, {
- id: '9a0738db9773af8bfb0ccd1ef8680b82',
- alarmNo: 'BJ202610281616136810',
- alarmLevel: 1,
- alarmStatus: 'UNHANDLED',
- deviceCode: '8652052334',
- deviceName: '测试设备',
- })
- assert.equal(detail.displayCode, 'BJ202610281616136810', '详情事件编码必须是 alarmNo')
- const codeField = detail.sections.find((s) => s.title === '事件摘要').fields.find((f) => f.label === '事件编码')
- assert.equal(codeField.value, 'BJ202610281616136810')
- assert.ok(!codeField.value.includes('9a0738db'), '不得显示主键 UUID')
- assert.ok(entityDetailView(detail).subtitle.includes('BJ202610281616136810'))
- // 详情 prefill(列表行)也必须是业务编号
- const fromPrefill = normalizeEntityDetail({ kind: 'event', id: raw.eventNo, family: 'ALARM' }, row)
- assert.equal(fromPrefill.displayCode, 'BJ202610281616136810', 'prefill 阶段也不得回落到主键')
- // —— 5) 关联设备:详情必须带设备编码,定位按钮据此渲染 ——
- assert.equal(detail.devices.length, 1)
- assert.equal(detail.devices[0].code, '8652052334')
- assert.ok(detail.devices[0].name)
- console.log('t65-alarm-code-and-locate: 17/17')
|