| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- PASS A1-all-eight-sections-present — 8 个分区都有位置(后端没给的也留位)
- PASS A2-backend-state-mapped-1to1 — {"archive":"failed","metrics":"success","alarms":"empty","workOrders":"stale"}
- PASS A3-failed-section-keeps-backend-message — 界面文案取后端 message:「档案读不到」
- PASS A4-stale-keeps-value-and-flag — 过期分区保留最后已知值,并带 retained 标识(票 16:不得伪装成实时)
- PASS A5-empty-has-no-data — 空分区不伪造空数组冒充数据
- PASS A6-missing-section-counts-as-failed — 后端整段缺失的分区算失败,不算「成功但没内容」
- PASS A7-aggregate-state-not-authoritative — 界面分区状态以各分区自己为准,整体态漏标也不会拖垮成功分区
- PASS A8-unknown-state-falls-to-failed — 认不出的后端状态不静默混进「已就绪」
- PASS B1-zero-is-a-value-not-missing — 后端真给的 0 是有效读数,照原样显示
- PASS B2-missing-shows-placeholder — 缺值显示占位符(—),且不拼出「— mg/L」这种半截读数
- PASS B3-placeholder-text-per-state — 空 / 失败 / 不可用各有明确且不同的措辞(失败态明确说「不影响其它分区」)
- PASS B4-stale-and-success-have-content — 过期是有值(内容照画),空与失败才是没内容
- PASS B5-archive-rows-placeholder — 有值的照原样、缺值的占位符
- PASS B6-metric-zero-vs-missing — 真 0 → 0;缺 value → —
- PASS B7-work-order-state-from-dictionary — 码 3 → 处理中;认不出的码 99 → —(不猜)
- PASS B8-unclosed-order-placeholder — 未结案的真实 null 与字段缺失一样显示占位符
- PASS B9-event-level-and-color — 等级出文本、配色如实带后端值、缺等级占位符
- PASS B10-missing-collected-recursively — 嵌套缺失也收上来:archive.deviceName, metric.value
- PASS B11-missing-collector-survives-cycles — 自引用形状不炸(契约缺口造出的怪数据也不能让界面挂掉)
- PASS B11b-missing-note-hides-field-paths — 界面文案「后端未提供 2 项字段」不含字段路径;路径只在 tooltip:「archive.deviceName、metric.value」
- PASS B11c-source-reason-never-leaks-codes — SAMPLE_OUTDATED → 「采样已超过配置周期」;未知码 → 空串(不泄漏)
- PASS B12-empty-list-is-explicit — 「工单当前没有记录」
- PASS C1-select-device-loads-by-code — 层级 equipment、请求 1 次
- PASS C2-aggregate-carries-requested-code — 按设备编码取数(传错编码能看出来)
- PASS C3-same-device-does-not-refetch — 再选同一台后请求数仍为 1
- PASS C4-back-and-forth-does-not-refetch — 来回一次后请求数仍为 1
- PASS C5-race-latest-wins — B 落地后聚合里是 EQ-FAST-B(A 迟到被丢弃)
- PASS C6-stale-aggregate-not-shown-for-new-device — interface 的匹配判据挡住了「把 A 的载荷挂在 B 表头下」
- PASS C7-failed-device-can-be-retried — 第一次 failed → 再选一次(第 2 次请求)后 success
- PASS C8-close-invalidates-in-flight — {"level":"none","deviceLoading":false}
- PASS C9-unassociated-device-loads-aggregate — {"level":"equipment","pointCode":"","deviceCode":"EQ-FREE-9"}
- PASS C10-blank-code-does-not-load — 缺编码不取数、不卡加载态
- PASS C11-preload-does-not-clobber-user-device — 用户选的 EQ-USER 没被预载的演示设备覆盖(预载迟到被丢弃)
- PASS C12-whole-failure-shows-single-truthful-state — 整包失败:判据成立(界面据此只说一句实话,不逐块谎报"其它分区不受影响")
- PASS C13-whole-failure-retry-recovers — 重试后第 2 次请求 → success(界面回到六块分区)
- PASS D1-six-panels-in-order — 6 块:设备档案 / 最新指标 / 预警 / 报警 / 工单状态 / 最新图片
- PASS D2-one-failure-does-not-cover-others — 档案=failed 指标=success 预警=success 报警=success 工单=failed 图片=failed
- PASS D3-successful-panels-still-render-content — 指标 2 条、预警 1 条仍然画得出来
- PASS D4-failed-panels-say-why — 失败块显示「该分区加载失败(其它分区不受影响)」并带上后端原因
- PASS D5-guard-has-teeth — 成功场景下六块全绿(因此 D2 的"部分失败"是有信息量的,不是恒真)
- PASS D6-empty-scenario-all-placeholders — 空场景六块都是明确占位说明,没有一块冒充有数据
- PASS D7-stale-is-value-not-empty — 指标块 stale 但仍画出 2 条读数;档案块照常 success
- PASS D8-whole-failure-detected — 整包失败与分区级失败分得开
- PASS D9-partial-failure-still-renders-panels — 分区级失败仍渲染六块(档案=failed、指标=success)
- PASS D10-not-loaded-is-not-a-failure — 还没取数时不报"没取到"
- PASS D11-whole-failure-carries-no-device-code — 失败分区带不出设备编码(故判定不依赖编码;靠 token 纪律保证归属当前设备)
- PASS E1-image-shows-backend-designated-one — 画的是后端给的那一张:/cockpit/a.webp
- PASS E2-image-empty-and-missing-safe — 后端没给 / 给了空串都不画空图
- PASS E3-image-never-indexes-a-list — 后端若给数组,前端**不**挑第一张(挑图=替后端做业务判断)
- PASS E4-adapter-image-is-single-value — 档案里的 latestImage 是单值对象,不是列表
- PASS E5-no-picking-among-images — 图片路径里没有 find/filter/sort/slice,组件也不认数组
- PASS F1-component-does-not-build-api-paths — 接口路径只在 services/detailApi.js,组件不自己拼
- PASS F2-component-has-no-backend-field-names — 组件只读视图对象字段(后端裸字段名只在 domain 适配层出现)
- PASS F3-component-does-not-sort — 展示顺序由计划与后端顺序决定,前端不重排
- PASS F4-section-state-comes-from-section-state-module — 分区状态色键与文案只来自 domain/sectionState.js(组件不写第二套)
- PASS F4b-no-backend-reason-codes-in-ui — 组件零后端代号(都是 domain 翻好的人话)
- PASS F4c-no-field-paths-in-visible-text — 缺失只报条数,字段路径只进 title(排查拿得到,值班人员看不到)
- PASS F5-deferred-sections-not-rendered — 预警-报警关联(票 13)不在本票渲染计划内:alarmWarningRelations
- PASS F6-store-loads-aggregate-on-level-entry — 设备级入口(selectDevice / openDevice)自己负责取数,调用方不必记得多调一次
- PASS F7-card-does-not-hold-its-own-aggregate-state — 业务分区只从detailStore读;允许组件保存纯UI展开状态,不复制设备聚合载荷
- PASS F8-no-write-operations — 驾驶舱只读:本票不引入任何写操作(spec 验收第 6 条)
- T11 逻辑检查:61/61 项通过。
|