import assert from 'node:assert/strict' import { eventStatusTone, eventSummaryText, eventRowView } from '../src/modules/cockpit/domain/eventList.js' import { normalizeEntityDetail } from '../src/modules/cockpit/domain/entityDetail.js' // —— 处理状态用颜色区分(维护者 2026-10-29) —— assert.equal(eventStatusTone('PENDING'), 'lv2') assert.equal(eventStatusTone('ACTIVE'), 'lv2') assert.equal(eventStatusTone('PROCESSING'), 'lv3') assert.equal(eventStatusTone('HANDLING'), 'lv3') assert.equal(eventStatusTone('RESOLVED'), 'lv4') assert.equal(eventStatusTone('CLEARED'), 'lv4') assert.equal(eventStatusTone('CANCELLED'), 'neutral') assert.equal(eventStatusTone(''), 'neutral') // 认不出的状态不许猜成某个真实状态色 assert.equal(eventStatusTone('SOMETHING_NEW'), 'neutral') // —— 卡片摘要:让用户直观看到"发生了什么" —— assert.equal(eventSummaryText({ type: '电导率监测', thresholdMinValue: 100, thresholdMaxValue: 5000, unit: 'μS/cm' }, '454 μS/cm'), '电导率监测 · 实际值 454 μS/cm · 阈值 100 ~ 5000 μS/cm') // 缺哪段少哪段,不编造 assert.equal(eventSummaryText({ type: '水位预警' }, '—'), '水位预警') assert.equal(eventSummaryText({}, '—'), '') assert.equal(eventSummaryText({ type: '压力', thresholdMaxValue: 5, unit: 'MPa' }, '—'), '压力 · 阈值 ≤ 5 MPa') // —— 列表行同时带等级与状态两套色键 —— const row = eventRowView({ code: 'YJ1', name: '电导率预警', level: 2, status: 'PENDING', type: '电导率监测', value: 454, unit: 'μS/cm', thresholdMaxValue: 5000, deviceName: '测试设备' }) assert.equal(row.level.label, '2级') assert.equal(row.level.tone, 'lv2') assert.equal(row.statusTone, 'lv2') assert.match(row.summaryText, /电导率监测/) assert.match(row.summaryText, /454 μS\/cm/) // —— 详情抬头也显示等级(与卡片同表同色) —— const detail = normalizeEntityDetail({ kind: 'event', id: 'YJ1', family: 'WARNING' }, { warningNo: 'YJ1', level: 2, status: 'PENDING' }) assert.equal(detail.levelLabel, '2级') assert.equal(detail.levelTone, 'lv2') // —— 历史事件与当前预警/报警使用同一套卡片字段(同步设计) —— const historyDomain = normalizeEntityDetail({ kind: 'event', id: 'H1', family: 'ALARM' }, { alarmNo: 'H1', level: 1, status: 'RESOLVED', type: 'COD监测' }) assert.equal(historyDomain.levelLabel, '1级') assert.equal(historyDomain.statusText.length > 0, true) console.log('t65-event-card-design: 22/22')