| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- PASS A1-backend-SUCCESS — → success
- PASS A1-backend-EMPTY — → empty
- PASS A1-backend-STALE — → stale
- PASS A1-backend-FAILED — → failed
- PASS A1-unknown-backend-state — 认不出的后端态不得混进「已就绪」
- PASS A2-401-unavailable
- PASS A2-no-base-url
- PASS A2-mock-missing
- PASS A2-network-failed — 网络失败是「加载失败」而不是「数据不可用」
- PASS A3-stale-not-empty
- PASS A3-empty
- PASS A4-401-marks-own-section
- PASS A4-neighbour-untouched — 相邻分区不因别的分区 401 而受影响
- PASS A5-stale-keeps-value — 过期优先于空,且保留最后已知值
- PASS A6-empty-no-fake-zero — 空分区不得带 0 值数据
- PASS A7-partial
- PASS A7-all-failed
- PASS A7-all-denied
- PASS A8-view-tone — {"tone":"lv1","label":"数据不可用","detail":"凭据未通过校验(由部署层注入)"}
- PASS A8-success-view
- PASS A8-stale-view
- PASS A9-no-reason-code-in-ui — 全部原因都有中文文案,零代号泄漏
- PASS A9-unknown-reason-safe — 认不出的原因回空串,不把代号甩给值班人员
- PASS A9-failed-still-labelled — 没有文案时仍要说出「加载失败」
- PASS B1-zero-is-value — 后端真给的 0 是有效数据,不是缺失
- PASS B1-empty-string-missing — 空串记一笔缺失
- PASS B1-optional-null-silent — 可选字段缺失不记问题
- PASS B1-missing-number-null — 缺失数字回 null,不回 0
- PASS B2-unvalidated-not-renderable — 整段坐标校验缺失时不假装可绘制
- PASS B3-batch-shape — 分页与快照原样带出(票 08 用)
- PASS B3-points-mapped
- PASS B3-status-is-backend — 点位状态用后端解析结果,前端不重算
- PASS B3-equipment-kind — 未关联设备没有点位状态,不得借用在线态
- PASS B4-validation-summary — {"total":3,"renderable":1,"blocked":2,"states":{"VALID":1,"UNVERIFIED":1,"INVALID":1}}
- PASS B4-out-of-range-blocked — 超范围坐标不上图(票 07 输入)
- PASS B5-missing-coord-null — 坐标缺失保持 null 且不上图
- PASS B5-missing-recorded — ["monitoringPoint.longitude","monitoringPoint.latitude"]
- PASS B5-unnaffected-fields — 一个字段缺失不影响其它字段
- PASS B5-zero-not-faked — 真 0 坐标照原样带出(是否上图由后端 renderable 决定)
- PASS B6-point-detail
- PASS B6-device-order-kept — 设备卡片顺序由后端决定(票 10 验收)
- PASS B6-dictionary-priority — 状态字典带后端优先级(票 09 用)
- PASS B7-seven-states — 0–7 共 8 个码(旧 1–7「七态」已作废)
- PASS B7-closed-terminal — 只有已结案(5)/已取消(7)是终态;6 延期中是处理旁路
- PASS B7-bypass-is-not-terminal — 6 延期中是旁路:既非终态也不在推进主线上
- PASS B7-work-order — 未结案 realFinishTime 为 null(本来就没有,不算缺失)
- PASS B7-state-name-from-dictionary — → 已接单
- PASS B8-distribution-fills-zero
- PASS B8-distribution-total — 总数只算码表内的(3),不把未知键混进来
- PASS B8-unknown-kept — 字典外的键单独列出,不静默丢
- PASS B8-closed-code — 已结案是 5(后端的处置率分子就是它)
- PASS B9-timeline-sorted — 轨迹按时间升序(后端顺序不保证)
- PASS B9-rollback-is-action — 验收驳回是回到「处理中」的动作,不是多出来的一个状态
- PASS B10-families
- PASS B10-unified-code — 两类事件统一成 code,列表不必分支
- PASS B10-alarm-keeps-rule-code — 报警的 warningCode 是规则编码,另存避免与事件编码混淆
- PASS B10-threshold-on-alarm — 阈值只有报警有,预警不得伪造
- PASS B10-relation
- PASS B10-family-switch
- PASS B10-sort-desc — 最新在前(票 13 默认最新 10-15 条)
- PASS B11-unknown-level-color — 认不出的配色回空串,不自造颜色
- PASS B12-expired-by-backend
- PASS B12-expired-fallback — 后端没给 freshness 时才用 missedCycles 兜底
- PASS B12-retained-has-value
- PASS B12-age-placeholder — 缺时间显示占位符,不显示「0 秒」
- PASS B13-sections-all-present — 八个分区都在(后端没给的分区也留位)
- PASS B13-failed-isolated — 档案失败不影响指标成功(票 11 验收第 3 条)
- PASS B13-failed-keeps-message
- PASS B13-empty-distinct
- PASS B13-stale-retains — 过期分区保留旧值
- PASS B13-missing-section — 后端整段缺失时该分区算失败,不算成功
- PASS B13-metric-zero — 指标真 0 不得被当成缺失
- PASS B13-metric-missing-null — 缺 value 显示占位符,不显示虚假零值
- PASS B13-aggregate-state-not-authoritative — 界面分区状态以各分区自己的为准
- PASS B13-unknown-section-kept
- PASS C1-map-success — {"state":"success","points":2,"equipment":0}
- PASS C1-map-snapshot-locked — {"snapshotAt":"2026-09-02T10:00:00+08:00","complete":false,"total":5}
- PASS C1-map-page-locked-to-snapshot — {"sameSnapshot":true,"complete":true}
- PASS C1-aggregate-success
- PASS C1-aggregate-substates
- PASS C1-point-success
- PASS C1-point-path-param — 模板路径 /monitoring-points/* 命中(带路径参数的接口也要能 mock)
- PASS C1b-main-scene-overlap-sample — 主场景 MP-001 返回 2 台(期望 K=2 重叠示例)
- PASS C1-events-success
- PASS C1-work-orders-success
- PASS C1-freshness-success
- PASS C2-empty-aggregate — 整体取到了,但每个分区各自是「无数据」
- PASS C2-empty-orders — 空列表分区不得带空数组冒充数据
- PASS C2-empty-freshness
- PASS C3-degraded-archive — 缺字段的分区仍算成功,只是字段为空
- PASS C3-degraded-missing-recorded — ["archive.deviceName"]
- PASS C3-degraded-order-name — 工单状态名缺失时用状态字典补
- PASS C3-degraded-age — 缺 dataAgeSeconds 时显示占位符
- PASS C3-degraded-point — 点位记录缺字段仍算成功(缺字段 ≠ 空记录)
- PASS C4-failed-aggregate — 处理器抛出 → 分区失败,不抛给页面
- PASS C4-failed-snapshot
- PASS C5-stale-metrics — 过期分区带 retained,界面须显示过期标识
- PASS C5-stale-keeps-other — 过期不牵连其它分区
- PASS C5-stale-freshness
- PASS C6-401-isolated — {"state":"unavailable","reason":"unauthorized"}
- PASS C6-neighbours-survive — 受影响分区之外照常成功(保留已成功分区)
- PASS C6-overall-partial
- PASS C6-view-is-data-unavailable
- PASS C6-prefix-isolated — 前缀选中一族接口,其余分区与地图不受影响
- PASS C7-unregistered
- PASS C8-real-same-adapter — 真接口与 mock 走同一适配层与同一转换
- PASS C8-real-no-credential — REST 免鉴权后真接口也不携带 Authorization(ADR 0005 修订)
- PASS C8-real-url — https://gw/api/cockpit/v1/map-snapshot
- PASS C8-real-401
- PASS C8-real-bad-payload
- PASS C9-query-empty
- PASS C9-query-encode — ?page=1&snapshotAt=2026-09-02T10%3A00%3A00%2B08%3A00
- PASS C9-query-array
- PASS C9-history-path — https://gw/api/cockpit/v1/equipments/TC-1/events/history?startTime=2026-09-01T00%3A00%3A00%2B08%3A00&endTime=2026-09-02T00%3A00%3A00%2B08%3A00
- PASS C9-current-path — https://gw/api/cockpit/v1/equipments/TC-1/events/current
- PASS C9-no-code-no-request — 缺少设备编码
- PASS C10-foundation-empty-frame
- PASS C10-foundation-ready
- PASS C11-delta-online-frame — {"deviceCode":"DEV001","monitoringPointCode":"","status":"ALARM","statusTime":"2026-09-02T10:00:00+08:00","serverUpdatedAt":"2026-09-02T10:00:01+08:00","reason":"浓度超限","sampledAt":"","eventId":null}
- PASS C11-delta-dto-name — 后端 DTO 用 monitoringState,线上帧用 status,两个都要认
- PASS C11-unknown-frame — 认不出的帧回 null,不猜
- PASS C11-no-code — 没有设备编码的增量帧无法回联点位,必须丢弃
- PASS C11-subscribed
- PASS C12-idempotent — 23 个路径(两次注册后不翻倍)
- PASS C12-covers-shared-domain — /map-snapshot, /monitoring-points/*, /equipments/*/detail-aggregate, /equipments/*/events/current, /equipments/*/events/history, /events/current, /events/history-analysis, /events/handling-efficiency, /events/multidimensional-analysis, /equipments/*/work-orders, /work-orders/*/timeline, /equipments/*/freshness, /equipments/*/archive, /infrastructure/base-archives, /infrastructure/operating-information, /infrastructure/management-information, /infrastructure/emergency-support, /monitoring/overview, /monitoring/distribution, /monitoring/situation, /overview/infrastructure, /overview/monitoring, /overview/warning-settings
- PASS D1-CockpitShell.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/MapCanvas.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/CockpitPanel.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/PanelPlaceholder.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/StatusTag.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/SectionStateTag.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/CockpitIcon.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/PointDetailCard.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/EquipmentDetailSections.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/WorkOrderTimeline.vue-no-raw-fields — 零后端裸字段
- PASS D1-components/PanelBlocks.vue-no-raw-fields — 零后端裸字段
- PASS D1-stores/uiStore.js-no-raw-fields — 零后端裸字段
- PASS D1-stores/filterStore.js-no-raw-fields — 零后端裸字段
- PASS D1-stores/detailStore.js-no-raw-fields — 零后端裸字段
- PASS D1-stores/infrastructureStore.js-no-raw-fields — 零后端裸字段
- PASS D1-stores/monitoringStore.js-no-raw-fields — 零后端裸字段
- PASS D1-components/EventListPane.vue-no-raw-fields — 零后端裸字段
- PASS D1-stores/eventStore.js-no-raw-fields — 零后端裸字段
- PASS D1-pointSelection.js-no-raw-fields — 零后端裸字段
- PASS D1-stores/deviceLayerStore.js-no-raw-fields — 零后端裸字段
- PASS D1-stores/overviewStore.js-no-raw-fields — 零后端裸字段
- PASS D1-components/WarningResponsePane.vue-no-raw-fields — 零后端裸字段
- PASS D2-CockpitShell.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/MapCanvas.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/CockpitPanel.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/PanelPlaceholder.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/StatusTag.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/SectionStateTag.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/CockpitIcon.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/PointDetailCard.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/EquipmentDetailSections.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/WorkOrderTimeline.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-components/PanelBlocks.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-stores/uiStore.js-no-credential — 页面与 store 不碰凭据
- PASS D2-stores/filterStore.js-no-credential — 页面与 store 不碰凭据
- PASS D2-stores/detailStore.js-no-credential — 页面与 store 不碰凭据
- PASS D2-stores/infrastructureStore.js-no-credential — 页面与 store 不碰凭据
- PASS D2-stores/monitoringStore.js-no-credential — 页面与 store 不碰凭据
- PASS D2-components/EventListPane.vue-no-credential — 页面与 store 不碰凭据
- PASS D2-stores/eventStore.js-no-credential — 页面与 store 不碰凭据
- PASS D2-pointSelection.js-no-credential — 页面与 store 不碰凭据
- PASS D2-stores/deviceLayerStore.js-no-credential — 页面与 store 不碰凭据
- PASS D2-stores/overviewStore.js-no-credential — 页面与 store 不碰凭据
- PASS D2-components/WarningResponsePane.vue-no-credential — 页面与 store 不碰凭据
- PASS D3-domain/sectionState.js-pure — 领域转换不自己发请求
- PASS D3-domain/mapSummary.js-pure — 领域转换不自己发请求
- PASS D3-domain/pointDetail.js-pure — 领域转换不自己发请求
- PASS D3-domain/equipmentDetail.js-pure — 领域转换不自己发请求
- PASS D3-domain/equipmentDetailView.js-pure — 领域转换不自己发请求
- PASS D3-domain/workOrderTimeline.js-pure — 领域转换不自己发请求
- PASS D3-domain/infrastructurePanels.js-pure — 领域转换不自己发请求
- PASS D3-domain/mapLocate.js-pure — 领域转换不自己发请求
- PASS D3-domain/panelBlocks.js-pure — 领域转换不自己发请求
- PASS D3-domain/monitoringPanels.js-pure — 领域转换不自己发请求
- PASS D3-domain/panelViews.js-pure — 领域转换不自己发请求
- PASS D3-domain/workOrder.js-pure — 领域转换不自己发请求
- PASS D3-domain/events.js-pure — 领域转换不自己发请求
- PASS D3-domain/freshness.js-pure — 领域转换不自己发请求
- PASS D3-domain/fields.js-pure — 领域转换不自己发请求
- PASS D3-domain/eventList.js-pure — 领域转换不自己发请求
- PASS D3-domain/primaryArea.js-pure — 领域转换不自己发请求
- PASS D3-domain/areaLimits.js-pure — 领域转换不自己发请求
- PASS D3-domain/fog.js-pure — 领域转换不自己发请求
- PASS D3-domain/imageryHandover.js-pure — 领域转换不自己发请求
- PASS D3-domain/pointLocate.js-pure — 领域转换不自己发请求
- PASS D3-domain/pointAnchor.js-pure — 领域转换不自己发请求
- PASS D3-domain/deviceLayer.js-pure — 领域转换不自己发请求
- PASS D3-domain/deviceCorrespondence.js-pure — 领域转换不自己发请求
- PASS D3-domain/deviceAssets.js-pure — 领域转换不自己发请求
- PASS D3-domain/deviceStatus.js-pure — 领域转换不自己发请求
- PASS D3-domain/modeLayerPlan.js-pure — 领域转换不自己发请求
- PASS D3-domain/overlapDevices.js-pure — 领域转换不自己发请求
- PASS D3-domain/overviewPanels.js-pure — 领域转换不自己发请求
- PASS D3-domain/warningResponsePanels.js-pure — 领域转换不自己发请求
- PASS D4-domain/sectionState.js-no-service-import — domain 不 import service
- PASS D4-domain/mapSummary.js-no-service-import — domain 不 import service
- PASS D4-domain/pointDetail.js-no-service-import — domain 不 import service
- PASS D4-domain/equipmentDetail.js-no-service-import — domain 不 import service
- PASS D4-domain/equipmentDetailView.js-no-service-import — domain 不 import service
- PASS D4-domain/workOrderTimeline.js-no-service-import — domain 不 import service
- PASS D4-domain/infrastructurePanels.js-no-service-import — domain 不 import service
- PASS D4-domain/mapLocate.js-no-service-import — domain 不 import service
- PASS D4-domain/panelBlocks.js-no-service-import — domain 不 import service
- PASS D4-domain/monitoringPanels.js-no-service-import — domain 不 import service
- PASS D4-domain/panelViews.js-no-service-import — domain 不 import service
- PASS D4-domain/workOrder.js-no-service-import — domain 不 import service
- PASS D4-domain/events.js-no-service-import — domain 不 import service
- PASS D4-domain/freshness.js-no-service-import — domain 不 import service
- PASS D4-domain/fields.js-no-service-import — domain 不 import service
- PASS D4-domain/eventList.js-no-service-import — domain 不 import service
- PASS D4-domain/primaryArea.js-no-service-import — domain 不 import service
- PASS D4-domain/areaLimits.js-no-service-import — domain 不 import service
- PASS D4-domain/fog.js-no-service-import — domain 不 import service
- PASS D4-domain/imageryHandover.js-no-service-import — domain 不 import service
- PASS D4-domain/pointLocate.js-no-service-import — domain 不 import service
- PASS D4-domain/pointAnchor.js-no-service-import — domain 不 import service
- PASS D4-domain/deviceLayer.js-no-service-import — domain 不 import service
- PASS D4-domain/deviceCorrespondence.js-no-service-import — domain 不 import service
- PASS D4-domain/deviceAssets.js-no-service-import — domain 不 import service
- PASS D4-domain/deviceStatus.js-no-service-import — domain 不 import service
- PASS D4-domain/modeLayerPlan.js-no-service-import — domain 不 import service
- PASS D4-domain/overlapDevices.js-no-service-import — domain 不 import service
- PASS D4-domain/overviewPanels.js-no-service-import — domain 不 import service
- PASS D4-domain/warningResponsePanels.js-no-service-import — domain 不 import service
- PASS D5-CockpitShell.vue-no-login-redirect — 不跳登录页
- PASS D5-components/MapCanvas.vue-no-login-redirect — 不跳登录页
- PASS D5-components/CockpitPanel.vue-no-login-redirect — 不跳登录页
- PASS D5-components/PanelPlaceholder.vue-no-login-redirect — 不跳登录页
- PASS D5-components/StatusTag.vue-no-login-redirect — 不跳登录页
- PASS D5-components/SectionStateTag.vue-no-login-redirect — 不跳登录页
- PASS D5-components/CockpitIcon.vue-no-login-redirect — 不跳登录页
- PASS D5-components/PointDetailCard.vue-no-login-redirect — 不跳登录页
- PASS D5-components/EquipmentDetailSections.vue-no-login-redirect — 不跳登录页
- PASS D5-components/WorkOrderTimeline.vue-no-login-redirect — 不跳登录页
- PASS D5-components/PanelBlocks.vue-no-login-redirect — 不跳登录页
- PASS D5-stores/uiStore.js-no-login-redirect — 不跳登录页
- PASS D5-stores/filterStore.js-no-login-redirect — 不跳登录页
- PASS D5-stores/detailStore.js-no-login-redirect — 不跳登录页
- PASS D5-stores/infrastructureStore.js-no-login-redirect — 不跳登录页
- PASS D5-stores/monitoringStore.js-no-login-redirect — 不跳登录页
- PASS D5-components/EventListPane.vue-no-login-redirect — 不跳登录页
- PASS D5-stores/eventStore.js-no-login-redirect — 不跳登录页
- PASS D5-pointSelection.js-no-login-redirect — 不跳登录页
- PASS D5-stores/deviceLayerStore.js-no-login-redirect — 不跳登录页
- PASS D5-stores/overviewStore.js-no-login-redirect — 不跳登录页
- PASS D5-components/WarningResponsePane.vue-no-login-redirect — 不跳登录页
- PASS D5-mocks/contractMocks.js-no-login-redirect — 不跳登录页
- PASS D5-mocks/index.js-no-login-redirect — 不跳登录页
- PASS D5-domain/sectionState.js-no-login-redirect — 不跳登录页
- PASS D5-domain/mapSummary.js-no-login-redirect — 不跳登录页
- PASS D5-domain/pointDetail.js-no-login-redirect — 不跳登录页
- PASS D5-domain/equipmentDetail.js-no-login-redirect — 不跳登录页
- PASS D5-domain/equipmentDetailView.js-no-login-redirect — 不跳登录页
- PASS D5-domain/workOrderTimeline.js-no-login-redirect — 不跳登录页
- PASS D5-domain/infrastructurePanels.js-no-login-redirect — 不跳登录页
- PASS D5-domain/mapLocate.js-no-login-redirect — 不跳登录页
- PASS D5-domain/panelBlocks.js-no-login-redirect — 不跳登录页
- PASS D5-domain/monitoringPanels.js-no-login-redirect — 不跳登录页
- PASS D5-domain/panelViews.js-no-login-redirect — 不跳登录页
- PASS D5-domain/workOrder.js-no-login-redirect — 不跳登录页
- PASS D5-domain/events.js-no-login-redirect — 不跳登录页
- PASS D5-domain/freshness.js-no-login-redirect — 不跳登录页
- PASS D5-domain/fields.js-no-login-redirect — 不跳登录页
- PASS D5-domain/eventList.js-no-login-redirect — 不跳登录页
- PASS D5-domain/primaryArea.js-no-login-redirect — 不跳登录页
- PASS D5-domain/areaLimits.js-no-login-redirect — 不跳登录页
- PASS D5-domain/fog.js-no-login-redirect — 不跳登录页
- PASS D5-domain/imageryHandover.js-no-login-redirect — 不跳登录页
- PASS D5-domain/pointLocate.js-no-login-redirect — 不跳登录页
- PASS D5-domain/pointAnchor.js-no-login-redirect — 不跳登录页
- PASS D5-domain/deviceLayer.js-no-login-redirect — 不跳登录页
- PASS D5-domain/deviceCorrespondence.js-no-login-redirect — 不跳登录页
- PASS D5-domain/deviceAssets.js-no-login-redirect — 不跳登录页
- PASS D5-domain/deviceStatus.js-no-login-redirect — 不跳登录页
- PASS D5-domain/modeLayerPlan.js-no-login-redirect — 不跳登录页
- PASS D5-domain/overlapDevices.js-no-login-redirect — 不跳登录页
- PASS D5-domain/overviewPanels.js-no-login-redirect — 不跳登录页
- PASS D5-domain/warningResponsePanels.js-no-login-redirect — 不跳登录页
- T05 适配层检查:283/283 项通过。
- T05 领域适配层全部通过。
|