- 新增 web/shared:pro.css(AntD 5 设计系统,旧 CSS 变量统一映射 AntD 色板)、 session.js(后端优先+本地账号降级双轨会话,IAOP_AUTH 兼容层)、 pro-header.js(全站统一 Pro 导航条:logo/页题/用户角色 Tag/退出) - 门户 web/index.html:未登录跳登录页(next 回跳),登录后按角色过滤 可见模块(readonly→驾驶舱/助手/移动端;engineer→+配置台;admin→全部) - 登录页 auth/login.html 重写为 Ant Design Pro 风格,本地降级模式自动 播种演示账号(admin/engineer/viewer),保留 OIDC SSO 双轨入口 - user_store.js 新增 verify() + seedDefaults() 默认账号播种 - 六模块页统一接入 pro.css + 统一导航条 + 登录守卫(PRD 8.2) - 驾驶舱主题 dark→light(Ant Design 5 色板):renderer.py THEME_TOKENS、 ti-cl4/resin 模板 theme、告警三级配色对齐 AntD(P0 #ff4d4f/P1 #faad14/ P2 #1677ff),渲染计划已重编(build_plans.py) - 验证:core/cockpit 86 单测通过;JS 语法检查通过;静态冒烟全 200
配置化驾驶舱内核模块(iAOP-Core / cockpit)
对齐 PRD 5.5「⑤ 配置化驾驶舱」:把驾驶舱抽象为模板化配置资产,按"布局/配置"渲染, 切换行业模板零改前端代码(PRD 5.5 验收口径)。
模块状态
| 能力 | Issue | 状态 |
|---|---|---|
| 布局 JSON Schema 定义 + 校验/解析 | #50 | feature/issue-50(推进中) |
| 图表组件配置化渲染引擎(RenderPlan) | #51 | feature/issue-51(推进中) |
| 报警看板配置化(阈值/规则外置) | #52 | 本分支 feature/issue-52 |
#52「报警看板配置化」把告警面板(alarm_panel)的展示语义外置为模板配置资产,
让"换行业只换配置、前端代码零改动"也覆盖到告警面板。配置点:
- 严重度→颜色映射(
severityColors):P0/P1/P2 三级各自的fg/bg/可选icon/border, 覆盖主题默认告警色;驾驶舱红色告警(PRD 5.3 ③ 场景A)即由P0的fg决定。 - 告警规则 / 阈值源绑定(
rulesSource/thresholdsSource):告警面板订阅哪份 规则资产(kind: asset+ref)或内联规则(kind: inline+data)——把"看哪条规则" 也变成配置项,避免把规则 id 写死在前端。 - SOP 联动(
showSop):PRD 场景A「LLM 生成原因+处置建议 → 值班长确认」是否在面板展开。 - 确认 / 静默行为(
requireAck/ackTimeoutS/muteLower):关键告警是否强制人工确认、 超时升级、是否静默低于某 severity 的提示。 - 分组 / 排序 / 最大条数(
groupBy/sortBy/maxItems):大屏展示策略外置。
用法
from cockpit import (
validate_alarm_config, load_alarm_config, render_alarm_panel_props,
)
# 1) 配置资产(通常来自模板 YAML;这里用 dict 示意)
config = {
"$schema": "iAOP-cockpit-alarm-panel-v1",
"severityColors": [
{"severity": "P0", "fg": "#ff3b30", "bg": "rgba(255,59,48,0.12)", "icon": "alert-octagon"},
{"severity": "P1", "fg": "#f5a623", "bg": "rgba(245,166,35,0.12)"},
{"severity": "P2", "fg": "#3aa0ff", "bg": "rgba(58,160,255,0.10)"},
],
"rulesSource": {"kind": "asset", "ref": "ti-cl4/impurity-forecast/config/alert_rules.template.yaml"},
"showSop": True, "requireAck": True, "ackTimeoutS": 300, "muteLower": "P2",
"groupBy": "severity", "sortBy": "severity", "maxItems": 50,
}
# 2) 校验(聚合全部字段级错误,便于配置台「错误列表」展示)
result = validate_alarm_config(config)
assert result.ok, result.errors
# 3) 加载为内存模型
cfg = load_alarm_config(config)
# 4) 编译为 alarm_panel 组件的 props(#51 渲染层在 _build_props 里合并即可)
props = render_alarm_panel_props(cfg)
# -> {'subscribe': 'alarm_stream', 'severityStyles': {...}, 'rulesSource': {...},
# 'showSop': True, 'requireAck': True, 'ackTimeoutS': 300, ...}
切换行业模板(如树脂)= 换一份配置资产(不同配色 / 规则源),render_alarm_panel_props
随配置变化产出不同 props,前端代码零改动。
设计要点
- 零运行时依赖:只用标准库,配置资产是可
json.dumps的纯 dict,便于配置台发布与审计。 - 声明式 + 强校验:
validate_alarm_config收集全部字段级错误(沿用 #50LayoutValidationResult风格);load_alarm_config校验失败抛AlarmConfigError并携带错误清单。 - 与 #50/#51 解耦:本模块不 import
layout/renderer(它们在各自 feature 分支上推进), 避免对未合并分支形成硬依赖;render_alarm_panel_props仅产出alarm_panel组件的 props dict, 由 #51 渲染层在_build_props里合并即可。#50/#51 合入 main 后,本模块的__init__会合并它们的导出(CockpitLayout/validate_layout/RenderPlan等)。
测试 / 验收
# 在 core/cockpit 目录下
python -m unittest discover -s tests -p "test_alarm_config.py" -v # 28 用例
python scripts/verify_alarm_config.py # 验收脚本
参考资产:templates/ti-cl4/dashboard/alarm_panel.ti.yaml(氯化车间/海绵钛告警面板配置)。