import assert from 'node:assert/strict' import { CARD_ACTION, cardActionFor } from '../src/modules/cockpit/domain/panelBlocks.js' import { workOrderCardRows } from '../src/modules/cockpit/domain/warningResponsePanels.js' import { entityIdentity, normalizeEntityDetail } from '../src/modules/cockpit/domain/entityDetail.js' import { entityDetailPath } from '../src/modules/cockpit/services/entityDetailApi.js' const cases = [ [{ identityKind: CARD_ACTION.POINT, identityCode: 'P1' }, CARD_ACTION.POINT], [{ identityKind: CARD_ACTION.DEVICE, identityCode: 'D1' }, CARD_ACTION.DEVICE], [{ identityKind: CARD_ACTION.EVENT, identityCode: 'E1' }, CARD_ACTION.EVENT], [{ identityKind: CARD_ACTION.WORK_ORDER, identityCode: 'W1' }, CARD_ACTION.WORK_ORDER], [{ identityKind: CARD_ACTION.FACILITY, identityCode: 'F1' }, CARD_ACTION.FACILITY], [{ identityKind: CARD_ACTION.EMERGENCY, identityCode: 'R1' }, CARD_ACTION.EMERGENCY], [{ identityKind: CARD_ACTION.POINT, identityCode: '' }, CARD_ACTION.NONE], [{ identityKind: 'unknown', identityCode: 'X1' }, CARD_ACTION.NONE], ] for (const [row, kind] of cases) assert.equal(cardActionFor(row).kind, kind) const [order] = workOrderCardRows([{ id: '42', code: 'W1', stateCode: 0 }]) assert.equal(cardActionFor(order).kind, CARD_ACTION.WORK_ORDER) assert.equal(cardActionFor(order).code, '42') assert.deepEqual(entityIdentity({ kind: 'facility', id: 'F1', category: 'water_plant' }), { kind: 'facility', id: 'F1', category: 'WATER_PLANT', family: '', valid: true }) assert.equal(entityDetailPath({ kind: 'facility', id: 'F1', category: 'WATER_PLANT' }), '/entities/F1/detail?category=WATER_PLANT') assert.equal(entityDetailPath({ kind: 'emergency', id: 'H1', category: 'HAZARD' }), '/entities/H1/detail?category=HAZARD') assert.equal(entityDetailPath({ kind: 'event', id: 'A1', family: 'ALARM' }), '/events/A1/detail?family=ALARM') assert.equal(entityDetailPath({ kind: 'event', id: 'W2', family: 'WARNING' }), '/events/W2/detail?family=WARNING') assert.equal(entityDetailPath({ kind: 'work-order', id: '42' }), '/work-orders/42/detail') assert.equal(entityDetailPath({ kind: 'facility', id: 'F1' }), '') assert.equal(entityDetailPath({ kind: 'emergency', id: 'R1' }), '') const mobileOrder = normalizeEntityDetail({ kind: 'work-order', id: '42' }, { order: { orderId: 42, orderNo: 'WO42', orderStatus: 3, orderDesc: '测试故障', deviceName: '水位计', deviceLocation: '城南', receiveUserName: '运维员' }, logs: [{ operationType: '接单', operationTime: '2026-10-28 10:00:00', orderStatus: 2 }] }) assert.equal(mobileOrder.order.id, '42') assert.equal(mobileOrder.order.code, 'WO42') assert.equal(mobileOrder.statusText, '处理中') assert.ok(mobileOrder.track) const warning = normalizeEntityDetail({ kind: 'event', id: 'W1', family: 'WARNING' }, { basicInfo: { warningNo: 'YJ1', warningLevel: 2, status: 'PENDING', deviceName: '压力计' }, disposalHistory: [{}], attachmentList: [{}, {}] }) assert.equal(warning.kindLabel, '预警') assert.ok(warning.sections.some((section) => section.title === '处置与附件')) const facility = normalizeEntityDetail({ kind: 'facility', id: 'P1', category: 'WATER_PLANT' }, { category: 'WATER_PLANT', id: 'P1', code: 'WP-1', name: '一水厂', location: '城南', districtName: '城南', coordinates: { longitude: 110, latitude: 28 }, attributes: { designCapacity: 5000, treatmentProcess: '沉淀过滤', principal: '张三', contactPhone: '123' } }) assert.ok(facility.sections.some((section) => section.fields.some((field) => field.label === '设计能力' && field.value === '5000 万m³/d'))) assert.ok(facility.sections.some((section) => section.fields.some((field) => field.label === '处理工艺' && field.value === '沉淀过滤'))) const resource = normalizeEntityDetail({ kind: 'emergency', id: 'E1', category: 'EMERGENCY_RESOURCE' }, { category: 'EMERGENCY_RESOURCE', id: 'E1', name: '应急泵', attributes: { model: 'M1', maintainer: '李四' } }) assert.ok(resource.sections.some((section) => section.fields.some((field) => field.label === '型号' && field.value === 'M1'))) const hazard = normalizeEntityDetail({ kind: 'emergency', id: 'H1', category: 'HAZARD' }, { category: 'HAZARD', id: 'H1', name: '泄漏隐患', attributes: { rectifyPlan: '立即整改', level: 'HIGH' } }) assert.ok(hazard.sections.some((section) => section.fields.some((field) => field.label === '整改方案' && field.value === '立即整改'))) const target = normalizeEntityDetail({ kind: 'emergency', id: 'R1', category: 'PROTECTION_TARGET' }, { category: 'PROTECTION_TARGET', id: 'R1', name: '学校', attributes: { riskLevel: 'HIGH', riskScore: 88 } }) assert.ok(target.sections.some((section) => section.fields.some((field) => field.label === '风险分值' && field.value === '88 分'))) const engineeringDetail = normalizeEntityDetail({ kind: 'facility', id: 'eng-1', category: 'ENGINEERING_FACILITY' }, { category: 'ENGINEERING_FACILITY', id: 'eng-1', name: '排水闸门', attributes: { facilityLevel: '一级', designFlow: 3.5, devices: [{ id: 'd1', code: 'D1', name: '闸门控制器', location: '城南', onlineStatus: 1, alarmStatus: 0 }] } }) assert.ok(engineeringDetail.sections.some((section) => section.fields.some((field) => field.label === '设计流量' && field.value === '3.5 m³/s'))) assert.deepEqual(engineeringDetail.devices.map((item) => item.code), ['D1']) assert.equal(engineeringDetail.devices[0].name, '闸门控制器') assert.equal(engineeringDetail.devices[0].status, '在线') assert.deepEqual(warning.tabs.map((item) => item.key), ['overview','records','alarms','attachments']) assert.deepEqual(mobileOrder.tabs.map((item) => item.key), ['overview','flow','devices','attachments']) assert.deepEqual(facility.tabs.map((item) => item.key), ['overview','business','related']) console.log('t65-card-actions: 38/38')