Files
iAOP/web/cockpit/plans/resin.json
bot_dev1 7a2e45e7c4 feat: 全站 Ant Design Pro 风格重构 + 登录守卫与角色门户(issue #131/#134)
- 新增 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
2026-08-05 14:17:37 +08:00

236 lines
5.7 KiB
JSON
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"$schema": "iAOP-cockpit-layout-v1",
"title": "吸附树脂车间驾驶舱",
"theme": "light",
"themeTokens": {
"--cockpit-bg": "#f0f2f5",
"--cockpit-surface": "#ffffff",
"--cockpit-fg": "rgba(0,0,0,0.88)",
"--cockpit-fg-muted": "rgba(0,0,0,0.45)",
"--cockpit-accent": "#1677ff",
"--cockpit-warn": "#faad14",
"--cockpit-grid-line": "rgba(5,5,5,0.06)"
},
"grid": {
"columns": 12
},
"widgets": [
{
"id": "process_view-0",
"component": "ProcessView",
"type": "process_view",
"grid": {
"columnStart": 1,
"columnSpan": 12,
"rowStart": 1,
"rowSpan": 4,
"widthPct": 100.0,
"style": "grid-column: 1 / span 12; grid-row: 1 / span 4;"
},
"description": "四状态工艺流程(合成 → 交联 → 洗涤 → 干燥)",
"props": {
"src": "resin_four_state.svg",
"states": [
"running",
"warning",
"alarm",
"offline"
]
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
},
{
"id": "trend-1",
"component": "TrendChart",
"type": "trend",
"grid": {
"columnStart": 1,
"columnSpan": 6,
"rowStart": 5,
"rowSpan": 2,
"widthPct": 50.0,
"style": "grid-column: 1 / span 6; grid-row: 5 / span 2;"
},
"description": "反应釜温度实时趋势",
"props": {
"series": "R-801.TEMP",
"window": "PT30M"
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
},
{
"id": "trend-2",
"component": "TrendChart",
"type": "trend",
"grid": {
"columnStart": 7,
"columnSpan": 6,
"rowStart": 5,
"rowSpan": 2,
"widthPct": 50.0,
"style": "grid-column: 7 / span 6; grid-row: 5 / span 2;"
},
"description": "搅拌转速实时趋势",
"props": {
"series": "R-801.AGIT",
"window": "PT30M"
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
},
{
"id": "kpi_card-3",
"component": "KpiCard",
"type": "kpi_card",
"grid": {
"columnStart": 1,
"columnSpan": 3,
"rowStart": 7,
"rowSpan": 2,
"widthPct": 25.0,
"style": "grid-column: 1 / span 3; grid-row: 7 / span 2;"
},
"description": "当批平均交换容量(mmol/g)",
"props": {
"metric": "resin_exchange_capacity",
"label": "交换容量"
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
},
{
"id": "kpi_card-4",
"component": "KpiCard",
"type": "kpi_card",
"grid": {
"columnStart": 4,
"columnSpan": 3,
"rowStart": 7,
"rowSpan": 2,
"widthPct": 25.0,
"style": "grid-column: 4 / span 3; grid-row: 7 / span 2;"
},
"description": "当批平均交联度(%)",
"props": {
"metric": "resin_crosslink_degree",
"label": "交联度"
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
},
{
"id": "kpi_card-5",
"component": "KpiCard",
"type": "kpi_card",
"grid": {
"columnStart": 7,
"columnSpan": 3,
"rowStart": 7,
"rowSpan": 2,
"widthPct": 25.0,
"style": "grid-column: 7 / span 3; grid-row: 7 / span 2;"
},
"description": "当批产率(%)",
"props": {
"metric": "batch_yield",
"label": "批产率"
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
},
{
"id": "kpi_card-6",
"component": "KpiCard",
"type": "kpi_card",
"grid": {
"columnStart": 10,
"columnSpan": 3,
"rowStart": 7,
"rowSpan": 2,
"widthPct": 25.0,
"style": "grid-column: 10 / span 3; grid-row: 7 / span 2;"
},
"description": "单吨树脂综合能耗(kWh/t)",
"props": {
"metric": "energy_per_ton",
"label": "单吨能耗"
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
},
{
"id": "alarm_panel-7",
"component": "AlarmPanel",
"type": "alarm_panel",
"grid": {
"columnStart": 1,
"columnSpan": 9,
"rowStart": 9,
"rowSpan": 3,
"widthPct": 75.0,
"style": "grid-column: 1 / span 9; grid-row: 9 / span 3;"
},
"description": "告警面板(温度/交联度/质量预测异常)",
"props": {
"subscribe": "alarm_stream"
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
},
{
"id": "nl_query-8",
"component": "NlQuery",
"type": "nl_query",
"grid": {
"columnStart": 10,
"columnSpan": 3,
"rowStart": 9,
"rowSpan": 3,
"widthPct": 25.0,
"style": "grid-column: 10 / span 3; grid-row: 9 / span 3;"
},
"description": "自然语言查询入口(配方/质量/能耗问答)",
"props": {
"placeholder": "输入自然语言查询(配方 / 质量 / 能耗)"
},
"perf": {
"virtualScroll": false,
"downsample": false,
"worker": false
}
}
],
"widgetCount": 9,
"perfFlags": {
"virtualScroll": false,
"downsample": false,
"worker": false
},
"perfHint": null
}