import assert from 'node:assert/strict' import { normalizeEntityDetail } from '../src/modules/cockpit/domain/entityDetail.js' // —— 「等级明明能拿到却标注未知」的三种输入形状都要认 —— const fromNumber = normalizeEntityDetail({ kind: 'event', id: 'W1', family: 'WARNING' }, { warningNo: 'W1', level: 2 }) assert.equal(fromNumber.summary.find((s) => s.label === '等级').value, '2级') assert.equal(fromNumber.tone, 'lv2') const fromTaggedObject = normalizeEntityDetail({ kind: 'event', id: 'W2', family: 'WARNING' }, { code: 'W2', level: { tone: 'lv3', label: '3级' }, statusText: '待处理', }) assert.equal(fromTaggedObject.summary.find((s) => s.label === '等级').value, '3级') assert.equal(fromTaggedObject.tone, 'lv3') const fromLevelName = normalizeEntityDetail({ kind: 'event', id: 'A1', family: 'ALARM' }, { alarmNo: 'A1', alarmLevel: '二级预警' }) assert.equal(fromLevelName.summary.find((s) => s.label === '等级').value, '2级') const unknown = normalizeEntityDetail({ kind: 'event', id: 'X1', family: 'ALARM' }, { alarmNo: 'X1' }) assert.equal(unknown.summary.find((s) => s.label === '等级').value, '等级未知') // —— 预警与报警的处置流程必须分开(阶段节点不同) —— assert.deepEqual(fromNumber.stage.map((s) => s.label), ['发布', '接收', '处置', '核验', '解除']) assert.deepEqual(fromLevelName.stage.map((s) => s.label), ['产生', '确认', '处置', '关闭']) assert.notDeepEqual(fromNumber.stage.map((s) => s.label), fromLevelName.stage.map((s) => s.label)) // —— 预警与报警的详情标签也不同 —— assert.deepEqual(fromNumber.tabs.map((t) => t.label), ['预警信息', '处置记录', '关联报警', '附件']) assert.deepEqual(fromLevelName.tabs.map((t) => t.label), ['报警信息', '设备信息', '处置记录', '附件']) // —— 工单:有主键就能展开,不得再说「缺少工单主键」 —— const order = normalizeEntityDetail({ kind: 'work-order', id: '42' }, { order: { orderId: 42, orderNo: 'WO42', orderStatus: 3, orderDesc: '测试', deviceName: '水位计' }, logs: [{ operationType: '接单', operationTime: '2026-10-29 10:00:00', orderStatus: 2 }], }) assert.equal(order.order.id, '42') assert.equal(order.order.code, 'WO42') assert.ok(order.track, '工单应有处置轨迹') assert.deepEqual(order.tabs.map((t) => t.label), ['工单信息', '处理流程', '设备信息', '附件']) // —— 预警详情的移动端信封(basicInfo + 分区)要能读出真实字段 —— const envelope = normalizeEntityDetail({ kind: 'event', id: 'W9', family: 'WARNING' }, { basicInfo: { warningNo: 'W9', warningName: '电导率预警', warningLevel: 2, status: 'PENDING', deviceName: '测试设备' }, disposalHistory: [{ disposalContent: '已现场核实' }], attachmentList: [{ attachmentName: '报告.pdf' }, { attachmentName: '照片.jpg' }], alarmList: [{ alarmNo: 'A-1', alarmName: '关联报警一', auditStatusName: '确认报警' }], supervisionList: [{}], }) assert.equal(envelope.summary.find((s) => s.label === '等级').value, '2级') assert.equal(envelope.attachments.length, 2) assert.equal(envelope.relatedAlarms.length, 1) assert.ok(envelope.records.length >= 1) console.log('t65-warning-detail: 24/24')