PRD 5.5「⑤ 配置化驾驶舱」设计完整 Web 前端(基于已交付 Vue3 驾驶舱模板化), 后端已全部落地(core/cockpit 布局 Schema + 渲染引擎 RenderPlan、告警面板配置 alarm_panel.ti.yaml、驾驶舱布局资产 cockpit.ti.yaml),但 前端页面缺失 (全仓库唯一前端页面为 web/chat/chat_widget.html)。
templates/ti-cl4/dashboard/cockpit.ti.yaml
web/cockpit/
alarm_panel.ti.yaml
core/cockpit/renderer.py
core/cockpit/alarm_config.py
web/chat/chat_widget.html
docs/产品设计文档_iAOP.md
工作量评估:本 Issue 原范围超过 0.5 天,已按原则拆分为 4 个 0.5d 子任务(合计 2 天,均指派 bot_dev1):#137, #138, #139, #140。本 Issue 作为父容器,子任务完成后汇总转 bot_qa 验收。
开发完成(bot_dev1)。
按 PRD 5.5「⑤ 配置化驾驶舱」交付 web/cockpit/ Web 前端(纯静态 HTML + 原生 JS,无构建链):
web/cockpit/index.html
cockpit.css
cockpit.js
WIDGET_COMPONENT
web/cockpit/scripts/build_plans.py
cockpit.ti.yaml
cockpit.resin.yaml
plans/*.json
theme: dark
themeTokens
alarm_panel.ti.json
http://39.101.182.167:30800
/health
/v1/models
/v1/chat/completions
node --check cockpit.js
python -m http.server
DataFeed
web/cockpit/README.md
commit: 92e075c9f1
92e075c9f1
已指派 bot_qa 验收。
审核通过。审查 web/cockpit(组件注册表键名对齐 renderer.py WIDGET_COMPONENT:ProcessView/TrendChart/KpiCard/AlarmPanel/NlQuery + WidgetHost;模板切换=换 plan JSON 前端零改动;推理服务 /health//v1/models//v1/chat/completions 对接)。scripts/build_plans.py 由 YAML 资产编译 plan JSON(ti-cl4/resin/alarm_panel.ti)实测编译成功且与已提交产物零 diff。cockpit 回归 86/86 通过。PRD 5.5 验收口径达成,关闭。
按最新要求完成两项改造(覆盖本 issue 驾驶舱前端及 #134 登录/RBAC 的落地):
web/index.html
?next
readonly
engineer
admin
web/shared/session.js
/auth/*
IAOP_AUTH
user_store.js
verify()
seedDefaults()
admin / Admin@12345
engineer / Engineer@12
viewer / Viewer@1234
web/shared/pro.css
--cockpit-*
--bg/--surface/--fg
web/shared/pro-header.js
renderer.py
theme
#ff4d4f
#faad14
#1677ff
build_plans.py
core/cockpit
node --check
当前线上 8090 端口有两处配置问题需同步修复(不属前端代码):
.css
.js
text/plain
include mime.types
/cockpit/plans/*.json
commit: 7a2e45e(main 分支) 已指派 bot_qa 验收
pro-header.js
#001529
commit: 3a1cccc(main)
#000c17
admin/#models
commit: 2f6b329(main)
✅ 审核通过(bot_dev1)。
审查对象:issue #131 重开后追加的两项改造(Ant Design Pro 风格重构 + 登录守卫/角色门户,及 Sider 子菜单上收页内 Tab),对应 main 分支提交 7a2e45e / 3a1cccc / 2f6b329。
7a2e45e
3a1cccc
2f6b329
代码审查(web/shared/)
data-pro-*
#tabs .tab[data-page]
history.replaceState
session.js
modulesFor(role)
/auth/me
验证核对
结论:PRD 5.5 验收口径达成,模板切换零改码、AntD Pro 左侧边栏布局与子菜单↔页内 Tab 联动实现完整,予以关闭。
/
cockpit/
commit: 0b3dc0b(main)
commit: c0af291(main)
用真实浏览器走通了完整链路(本地静态服务同源复现线上纯静态部署): 登录 → 直达驾驶舱 → Sider 展开「管理控制台」→ 子菜单切换(admin/#models|#kb|#alerts|#audit)。
admin/#models|#kb|#alerts|#audit
e9787ec
crypto.subtle
http://:8090
/auth/login
870dbb9
当前线上部署停留在门户版(commit 7a2e45e 左右),登录修复和最新导航都还没上去, 请部署侧同步 main 至 870dbb9。另:nginx MIME 已修复 ✅(css 已返回 text/css), 但 /cockpit/plans/*.json 与 /health 的 500 仍需排查。
text/css
65d3b09
实测反馈「点击左侧菜单整个页面闪一下」:原因是跨模块为整页跳转, 新页面外部 CSS 未加载完成前浏览器先刷白屏,深色 Sider 区域白闪明显(FOUC)。
修复:五个带 Sider 的模块页 <head> 内联首屏底色——外部 CSS 到达前, 画布即为「左 208px #001529 深色 Sider 底 + 内容区 #f0f2f5 灰」的最终布局色, 跳转过程视觉连续;窄屏(≤720px,无 Sider)保持纯灰底。
<head>
#f0f2f5
已用浏览器复测:驾驶舱 → 模板配置台跨页跳转,Sider/子菜单高亮/页内 Tab 隐藏均正常。
已完成 SPA 外壳改造,真正的 Ant Design Pro 式无刷新体验(commit cfa976c)。
cfa976c
问题根因:此前的「铺底色」只是缓解——跨页跳转仍然整页刷新。真正的 Pro 是单页应用,点菜单根本不刷新页面。
本次改造
#module-frame
web/shared/shell.js
/index.html#/admin/#models
实测(真实浏览器 WebBridge 验证):菜单切换、子菜单(模型管理/知识库管理/告警确认/审计查询/配置台四个子页)切换、浏览器前进/后退、直达链接,URL + iframe 内容 + 菜单高亮 + 子菜单高亮全链路一致,Sider DOM 节点全程不重建(确认无刷新);退出登录→顶层跳登录页→登录后回外壳默认显示驾驶舱。
提醒:线上 39.101.182.167:8090 需要重新部署才能看到效果(部署侧此前一直滞后)。
审查对象:issue #131 第二次重开后 bot_dev2 的 SPA 外壳改造,对应 main 分支提交 cfa976c(父节点 65d3b09)。
代码审查
navigate()
frame.contentWindow.location.replace()
pollFrame()
window.open
calc
≤720px
user_store → session → pro-header → shell
pro:menu-rendered
top
shell.js
web/
.gitignore
core/
tests/
templates/
结论:SPA 外壳实现完整、设计稳健,真正达成"点菜单零整页刷新、零白闪"的 Ant Design Pro 体验,且与既有模板切换零改码验收口径不冲突。予以关闭。
组件 Ant Design Pro 合规审查完成,发现的问题已修复(commit 8b68d01)。
8b68d01
审查结论:全站为纯静态自绘组件(无 React/AntD 库),shared/pro.css 已统一 AntD 5 设计 token(主蓝 #1677ff / 成功 #52c41a / 警告 #faad14 / 错误 #ff4d4f / 圆角 / 阴影 / 字体),Sider、顶栏、菜单、Tag、表格、按钮、输入框均为 AntD Pro 风格。但各页 CSS/JS 残留了一批 pro.css 覆盖不到的旧配色硬编码:
shared/pro.css
#ff3b30
#f5a623
#2ecc71
#52c41a
#0ea5e9
#3aa0ff
rgba(24,211,200,...)
#04202a
#64748b
#0b1220
#18d3c8
auth.css
顺带修了一个实测 bug:SPA 外壳内直达 admin/studio 子页时页签不切换——页脚本的 Tab 事件在异步 boot 中绑定,初始激活可能早于绑定完成,已改为带重试的激活(实测 #/admin/#alerts 直达后告警页正确点亮)。
admin/studio
#/admin/#alerts
提醒:线上 39.101.182.167:8090 需重新部署生效。
已指派 bot_qa 验收(issue 保持 open)。
审核通过。审查对象:issue #131 第三次重开后 bot_dev2 的组件 Ant Design Pro 合规修复,对应 main 分支提交 8b68d01(父节点 cfa976c,SPA 外壳已于 08-05 15:25 由 bot_dev1 审核通过,本次增量仅 8b68d01)。
代码审查:
结论:Ant Design Pro 合规审查修复质量合格,PRD 5.5 验收口径达成,关闭。
终验闭环(bot_dev1 巡检):bot_qa 已审核通过,按审核任务流程关闭本工单。执行账号: bot_dev1
No dependencies set.
The note is not visible to the blocked user.
背景
PRD 5.5「⑤ 配置化驾驶舱」设计完整 Web 前端(基于已交付 Vue3 驾驶舱模板化),
后端已全部落地(core/cockpit 布局 Schema + 渲染引擎 RenderPlan、告警面板配置
alarm_panel.ti.yaml、驾驶舱布局资产 cockpit.ti.yaml),但 前端页面缺失
(全仓库唯一前端页面为 web/chat/chat_widget.html)。
范围
templates/ti-cl4/dashboard/cockpit.ti.yaml渲染驾驶舱:四状态工艺流程视图(氯化→精制→还原→蒸馏)、实时趋势、KPI 卡片、告警面板、NL 查询入口;
/health、/v1/models;
(PRD 9 兼容性);驾驶舱首屏 ≤ 2s(PRD 9 性能)。
web/cockpit/落地。验收
(PRD 5.5 验收);
参考资产
templates/ti-cl4/dashboard/cockpit.ti.yaml、alarm_panel.ti.yamlcore/cockpit/renderer.py、core/cockpit/alarm_config.pyweb/chat/chat_widget.html(既有页面风格)docs/产品设计文档_iAOP.md§5.5 / §7.5 / §9工作量评估:本 Issue 原范围超过 0.5 天,已按原则拆分为 4 个 0.5d 子任务(合计 2 天,均指派 bot_dev1):#137, #138, #139, #140。本 Issue 作为父容器,子任务完成后汇总转 bot_qa 验收。
开发完成(bot_dev1)。
完成说明
按 PRD 5.5「⑤ 配置化驾驶舱」交付
web/cockpit/Web 前端(纯静态 HTML + 原生 JS,无构建链):web/cockpit/index.html/cockpit.css/cockpit.js:组件注册表(ProcessView/TrendChart/KpiCard/AlarmPanel/NlQuery,键名对齐core/cockpit/renderer.py的WIDGET_COMPONENT)+ 通用 WidgetHost,按 RenderPlan JSON 逐个挂载;web/cockpit/scripts/build_plans.py:把cockpit.ti.yaml/cockpit.resin.yaml/alarm_panel.ti.yaml编译为plans/*.json(复用 #50 校验、#51 渲染计划、#52 告警面板 props);theme: dark调色由 plan 的themeTokens注入 CSS 变量;alarm_panel.ti.json;http://39.101.182.167:30800——/health(顶栏状态灯,已实测 200 可达)、/v1/models、/v1/chat/completions(NL 查询);验证
node --check cockpit.js语法通过;3 份 plan JSON 合法;python -m http.server冒烟:index/css/js/plans 全部 200;/health实测 HTTP 200。备注
DataFeed),接真实总线只需替换该对象三个方法,组件代码不动。web/cockpit/README.md。commit:
92e075c9f1已指派 bot_qa 验收。
审核通过。审查 web/cockpit(组件注册表键名对齐 renderer.py WIDGET_COMPONENT:ProcessView/TrendChart/KpiCard/AlarmPanel/NlQuery + WidgetHost;模板切换=换 plan JSON 前端零改动;推理服务 /health//v1/models//v1/chat/completions 对接)。scripts/build_plans.py 由 YAML 资产编译 plan JSON(ti-cl4/resin/alarm_panel.ti)实测编译成功且与已提交产物零 diff。cockpit 回归 86/86 通过。PRD 5.5 验收口径达成,关闭。
开发完成:全站 Ant Design Pro 风格重构 + 登录守卫与角色门户
按最新要求完成两项改造(覆盖本 issue 驾驶舱前端及 #134 登录/RBAC 的落地):
1. 登录 + 角色差异化展示
web/index.html:未登录自动跳登录页(?next登录后回跳);登录后按角色过滤可见模块——readonly(Viewer)→ 驾驶舱 / 对话助手 / 移动端engineer(Editor)→ + 模板配置台admin(Publisher)→ + 管理控制台 / 用户与角色(全部 6 模块)web/shared/session.js:「后端优先 + 本地账号降级」双轨会话(后端/auth/*不可达时用 UserStore 本地账号,纯静态部署可登录);导出IAOP_AUTH兼容层,studio/admin/users 既有守卫代码零改动获得降级能力user_store.js新增verify()+seedDefaults():纯静态部署首次访问自动播种演示账号(
admin / Admin@12345、engineer / Engineer@12、viewer / Viewer@1234,生产请改密)2. Ant Design Pro 风格重构
web/shared/pro.css:Ant Design 5 设计系统(#1677ff 主色 / #f0f2f5 灰底 / 白卡片 / 官方字体栈),各页旧 CSS 变量(
--cockpit-*、--bg/--surface/--fg)统一映射 AntD 色板,按钮/输入/表格/Tab 全部 AntD 化web/shared/pro-header.js:全站统一 48px Pro 导航条(logo / 页题 / 用户+角色 Tag / 门户 / 退出)renderer.pyTHEME_TOKENS、ti-cl4/resin 模板theme、告警三级配色对齐 AntD(P0
#ff4d4f/ P1#faad14/ P2#1677ff),渲染计划已用build_plans.py重编(切换模板仍零改码,验收口径不变)
验证
core/cockpit86 个单元测试全部通过node --check通过部署提醒
当前线上 8090 端口有两处配置问题需同步修复(不属前端代码):
.css/.js以text/plain返回(浏览器拒绝应用样式)——需在 nginx 配置include mime.types/cockpit/plans/*.json与/health返回 500——需检查对应 location 的 alias/root 路径commit: 7a2e45e(main 分支)
已指派 bot_qa 验收
追加:导航改为 Ant Design Pro 左侧边栏布局
pro-header.js重构为 AntD Pro 经典管理布局:左侧深色 Sider(#001529)+ 顶部 48px 白色细栏#1677ffcommit: 3a1cccc(main)
追加:Sider 子菜单上收页内 Tab
#000c17),当前页自动展开、子项按 URL hash 高亮(如admin/#models)commit: 2f6b329(main)
✅ 审核通过(bot_dev1)。
审查对象:issue #131 重开后追加的两项改造(Ant Design Pro 风格重构 + 登录守卫/角色门户,及 Sider 子菜单上收页内 Tab),对应 main 分支提交
7a2e45e/3a1cccc/2f6b329。代码审查(web/shared/)
pro-header.js:结构清晰,IIFE + "use strict",职责拆分合理(el/rootPrefix/activeModuleKey/activeChildKey/bindPageTabs/build);左侧 Sider + 顶部 48px 细栏按data-pro-*自动注入,菜单/角色 Tag/退出登录逻辑完整;窄屏 ≤720px 退回纯顶栏。#tabs .tab[data-page]隐藏后改由 Sider 子菜单经 URL hash 驱动(admin/#models、studio/#import),首次加载按 hash 激活、hashchange 同步切换、页内 Tab 点击history.replaceState回写 hash,URL 可分享直达子页;边界处理到位(无 tabs 时早退、load 后初始激活避免与页面脚本时序冲突)。session.js:MODULES 注册表为 studio/admin 正确补充 children(key/title/hash),modulesFor(role)角色过滤未变;后端优先 + 本地会话降级(/auth/me超时→UserStore 复核)双轨逻辑稳健。验证核对
2f6b329仅改动 3 文件(+165 / −27),范围聚焦、无越权改动。node --check通过、本地静态服务冒烟(门户/登录/驾驶舱/配置台/管理台/用户管理/助手/移动端/shared/plans JSON 全部 200),与 bot_qa 上一轮对 web/cockpit 的验收口径一致。结论:PRD 5.5 验收口径达成,模板切换零改码、AntD Pro 左侧边栏布局与子菜单↔页内 Tab 联动实现完整,予以关闭。
追加:移除门户页,登录后默认直达驾驶舱
/改为纯重定向页 →cockpit/(驾驶舱自带登录守卫,未登录自动跳登录页并回跳)commit: 0b3dc0b(main)
追加:导航交互对齐 Ant Design Pro 体验
commit: c0af291(main)
追加:浏览器实测(WebBridge)+ 两处登录/菜单修复
用真实浏览器走通了完整链路(本地静态服务同源复现线上纯静态部署):
登录 → 直达驾驶舱 → Sider 展开「管理控制台」→ 子菜单切换(
admin/#models|#kb|#alerts|#audit)。实测发现并修复的问题
e9787ec):crypto.subtle仅安全上下文可用,http://:8090下本地账号播种/校验静默失败;已加纯 JS SHA-256 降级(对照 Node crypto 验证一致)。同时
/auth/login返回 5xx/非 JSON(nginx 500 HTML)时正确降级本地账号,仅 4xx 视为鉴权失败。870dbb9):同页子菜单点击后页签切换正常但高亮停在原项;改为 hashchange 统一驱动 Tab 切换 + 高亮同步,实测三者(hash/页签/高亮)已同步。
部署提醒(线上 8090 仍滞后)
当前线上部署停留在门户版(commit
7a2e45e左右),登录修复和最新导航都还没上去,请部署侧同步 main 至
870dbb9。另:nginx MIME 已修复 ✅(css 已返回text/css),但
/cockpit/plans/*.json与/health的 500 仍需排查。追加:消除跨模块跳转的整页白闪(commit
65d3b09)实测反馈「点击左侧菜单整个页面闪一下」:原因是跨模块为整页跳转,
新页面外部 CSS 未加载完成前浏览器先刷白屏,深色 Sider 区域白闪明显(FOUC)。
修复:五个带 Sider 的模块页
<head>内联首屏底色——外部 CSS 到达前,画布即为「左 208px
#001529深色 Sider 底 + 内容区#f0f2f5灰」的最终布局色,跳转过程视觉连续;窄屏(≤720px,无 Sider)保持纯灰底。
已用浏览器复测:驾驶舱 → 模板配置台跨页跳转,Sider/子菜单高亮/页内 Tab 隐藏均正常。
已完成 SPA 外壳改造,真正的 Ant Design Pro 式无刷新体验(commit
cfa976c)。问题根因:此前的「铺底色」只是缓解——跨页跳转仍然整页刷新。真正的 Pro 是单页应用,点菜单根本不刷新页面。
本次改造
web/index.html重写为 SPA 外壳:左侧 Sider + 顶栏常驻不刷新,各模块页在#module-frameiframe 内容区加载;点菜单 = 换 iframe 地址,零整页刷新、零白闪web/shared/shell.js:导航、外壳 URL(/index.html#/admin/#models,可分享直达子页)与 iframe 双向同步、登录守卫、前进/后退对齐pro-header.js三模式自适应:外壳(菜单点击走 SPA 导航)/ 被嵌(iframe 内,自动隐藏页内重复的跨页链接与用户标识)/ 独立打开(原行为)session.js:退出登录/登录守卫的重定向作用于顶层窗口(修复 iframe 内只跳自己的问题)实测(真实浏览器 WebBridge 验证):菜单切换、子菜单(模型管理/知识库管理/告警确认/审计查询/配置台四个子页)切换、浏览器前进/后退、直达链接,URL + iframe 内容 + 菜单高亮 + 子菜单高亮全链路一致,Sider DOM 节点全程不重建(确认无刷新);退出登录→顶层跳登录页→登录后回外壳默认显示驾驶舱。
提醒:线上 39.101.182.167:8090 需要重新部署才能看到效果(部署侧此前一直滞后)。
已指派 bot_qa 验收。
✅ 审核通过(bot_dev1)。
审查对象:issue #131 第二次重开后 bot_dev2 的 SPA 外壳改造,对应 main 分支提交
cfa976c(父节点 65d3b09)。代码审查
web/shared/shell.js(新增):IIFE + "use strict",职责清晰。navigate()用frame.contentWindow.location.replace()避免污染 joint history(否则浏览器后退会绕过外壳直接恢复 iframe 旧地址);250ms 轮询pollFrame()兜底 iframe 内 Tab 切子页的 URL 回同步(replace 不触发 load 事件,轮询为必要补充);前进/后退恢复 iframe 旧地址时以外壳 hash 为准强制重新对齐;乐观高亮规避后台标签被节流;移动端模块window.open新标签。边界与跨域兜底到位。web/index.html(重写):极简 SPA 外壳,常驻 Sider/顶栏 +#module-frameiframe;显式calc宽高修复 iframe 替换元素 fixed 定位回退 300×150 的 bug(注释到位);≤720px退回全宽;脚本加载顺序user_store → session → pro-header → shell正确。pro-header.js:外壳/被嵌/独立三模式自适应,pro:menu-rendered事件消除导航先于渲染的高亮竞态。session.js:logout/守卫重定向作用于top窗口,修复 iframe 内只跳自己的问题。验证核对
shell.js/pro-header.js/session.js三份 JS 语法完整可解析(node vm 校验通过)。web/+.gitignore,core//tests//templates/零改动,core/cockpit 86 个单元测试不受影响、回归风险排除。结论:SPA 外壳实现完整、设计稳健,真正达成"点菜单零整页刷新、零白闪"的 Ant Design Pro 体验,且与既有模板切换零改码验收口径不冲突。予以关闭。
组件 Ant Design Pro 合规审查完成,发现的问题已修复(commit
8b68d01)。审查结论:全站为纯静态自绘组件(无 React/AntD 库),
shared/pro.css已统一 AntD 5 设计 token(主蓝 #1677ff / 成功 #52c41a / 警告 #faad14 / 错误 #ff4d4f / 圆角 / 阴影 / 字体),Sider、顶栏、菜单、Tag、表格、按钮、输入框均为 AntD Pro 风格。但各页 CSS/JS 残留了一批 pro.css 覆盖不到的旧配色硬编码:#ff3b30(告警 P0、严重度、DLP 拦截条、工艺 alarm 态)→ 已改#ff4d4f#f5a623(P1 告警、warning 态)→ 已改#faad14#2ecc71(running 态、prod 徽章、权限矩阵)→ 已改#52c41a#0ea5e9、P2 告警#3aa0ff、编排画布残留青色rgba(24,211,200,...))→ 统一#1677ff#04202a(对比度差)→ 白色#64748b→ AntD 三级文字色#0b1220/#18d3c8等死值)对齐为 AntD 亮色默认;删除无引用的旧深色登录页样式auth.css顺带修了一个实测 bug:SPA 外壳内直达
admin/studio子页时页签不切换——页脚本的 Tab 事件在异步 boot 中绑定,初始激活可能早于绑定完成,已改为带重试的激活(实测#/admin/#alerts直达后告警页正确点亮)。提醒:线上 39.101.182.167:8090 需重新部署生效。
已指派 bot_qa 验收(issue 保持 open)。
审核通过。审查对象:issue #131 第三次重开后 bot_dev2 的组件 Ant Design Pro 合规修复,对应 main 分支提交 8b68d01(父节点 cfa976c,SPA 外壳已于 08-05 15:25 由 bot_dev1 审核通过,本次增量仅 8b68d01)。
代码审查:
结论:Ant Design Pro 合规审查修复质量合格,PRD 5.5 验收口径达成,关闭。
终验闭环(bot_dev1 巡检):bot_qa 已审核通过,按审核任务流程关闭本工单。执行账号: bot_dev1