|
|
@@ -15,13 +15,46 @@ export function detailEventLevel(event) {
|
|
|
return { level, tone, color: COLORS[tone], label: level ? family + ' · ' + level + '级' : family + ' · 未分级' }
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * 当前采集契约只发布逐格 alarm 布尔值,无预警/等级/规则配置。
|
|
|
- * 只消费这条明确结论,不拿历史事件阈值或设备总体状态重判每个采集值。
|
|
|
- */
|
|
|
+const UNKNOWN_REASONS = {
|
|
|
+ NO_THRESHOLD: '未配置阈值',
|
|
|
+ THRESHOLD_NOT_CONFIGURED: '未配置阈值',
|
|
|
+ MISSING_VALUE: '缺少采集值',
|
|
|
+ MISSING_STATUS: '缺少上报状态',
|
|
|
+ INVALID_STATUS: '上报状态无效',
|
|
|
+ METRIC_UNMAPPED: '指标未关联规则',
|
|
|
+ COMPOSITE_RULE_REQUIRED: '需频段及连续确认等联合规则判定',
|
|
|
+ NOT_APPLICABLE: '该字段不参与判定',
|
|
|
+ INVALID_VALUE: '采集值无法判定',
|
|
|
+ UNSUPPORTED_METRIC: '该指标暂不支持判定',
|
|
|
+ RULE_UNAVAILABLE: '规则暂不可用',
|
|
|
+ INVALID_THRESHOLD: '阈值配置无效',
|
|
|
+}
|
|
|
+
|
|
|
+/** 后端逐格判定是唯一权威来源;旧版接口仅兼容明确的 alarm=true。 */
|
|
|
+export function collectionCellAssessment(cell) {
|
|
|
+ const assessment = cell?.assessment
|
|
|
+ const status = String(assessment?.status || '').toUpperCase()
|
|
|
+ if (['NORMAL', 'WARNING', 'ALARM', 'UNKNOWN'].includes(status)) {
|
|
|
+ if (status === 'UNKNOWN') return {
|
|
|
+ state: 'unknown', color: 'var(--text-strong, #fff)', alert: null,
|
|
|
+ label: '未判定:' + (UNKNOWN_REASONS[assessment.reason] || '当前规则无法给出结论'),
|
|
|
+ }
|
|
|
+ const state = status.toLowerCase()
|
|
|
+ if (state === 'normal') return { state, color: COLORS.lv4, alert: null, label: '正常' }
|
|
|
+ const level = detailEventLevel({ ...assessment, family: status })
|
|
|
+ const color = state === 'alarm' ? COLORS.lv1 : COLORS.lv2
|
|
|
+ const alert = { state, color, dotColor: level.color, label: level.label }
|
|
|
+ return { state, color, alert, label: alert.label }
|
|
|
+ }
|
|
|
+ if (cell?.alarm === true) {
|
|
|
+ const alert = { state: 'alarm', color: COLORS.lv1, dotColor: COLORS.lv1, label: '报警 · 未分级(采集记录未提供等级)' }
|
|
|
+ return { state: 'alarm', color: COLORS.lv1, alert, label: alert.label }
|
|
|
+ }
|
|
|
+ return { state: 'unknown', color: 'var(--text-strong, #fff)', alert: null, label: '未判定:采集接口未提供判定结果' }
|
|
|
+}
|
|
|
+
|
|
|
export function collectionCellAlert(cell) {
|
|
|
- if (cell?.alarm !== true) return null
|
|
|
- return { state: 'alarm', color: COLORS.lv1, dotColor: COLORS.lv1, label: '报警 · 未分级(采集记录未提供等级)' }
|
|
|
+ return collectionCellAssessment(cell).alert
|
|
|
}
|
|
|
|
|
|
/** 最新记录按整组最高严重性取色;绿色是无已发布异常标记时的默认强调,不是阈值合格证明。 */
|