Files
iAOP/web/admin
bot_dev1 cfa976cac3 feat: SPA 外壳——菜单切换零刷新,对齐 Ant Design Pro 体验(issue #131)
- web/index.html 重写为 SPA 外壳:Sider/顶栏常驻,模块页在
  #module-frame iframe 内容区加载,点菜单只换 iframe 地址,
  彻底消灭整页刷新与白闪(此前只是铺底色缓解)
- 新增 shared/shell.js:IAOP_SHELL.navigate() 导航、外壳 hash
  (#/admin/#models) 与 iframe 地址双向同步、登录守卫、移动端
  模块新标签打开;iframe 地址用 location.replace 避免污染
  joint history;250ms 轮询回同步(replace 不触发 load 事件);
  导航时乐观高亮(后台标签轮询被节流不能作为唯一途径);
  前进/后退若恢复了 iframe 旧地址则以外壳 hash 为准强制对齐
- pro-header.js 三模式:外壳(菜单点击走 IAOP_SHELL、导出
  IAOP_PRO.setActive)/被嵌(iframe 内,隐藏页内跨页链接与重复
  用户标识、保留 Tab-hash 联动)/独立(原行为);菜单渲染后派发
  pro:menu-rendered 事件消除导航先于渲染的高亮竞态
- session.js:logout/守卫重定向作用于顶层窗口(iframe 内不再
  只跳 iframe 自己)
- 修复 iframe 替换元素宽高 bug:fixed 时左右定位不拉伸(回退
  固有 300x150),改显式 calc 宽高
- 登录页 next 默认回外壳 ../index.html

实测(本地 http.server + WebBridge 真实浏览器):菜单切换/
子菜单切换/前进/后退/直达链接(#/admin/#models) URL、iframe、
菜单高亮、子菜单高亮全链路一致,Sider 节点全程不重建;
登录守卫 logout→顶层跳登录、登录后回外壳默认驾驶舱。
2026-08-05 22:43:47 +08:00
..

web/admin — iAOP 管理控制台

issue #135 / PRD 8.1/8.2。纯静态单页(无构建链): 模型管理 / 知识库管理 / 告警确认 / 审计查询。

使用

# 从 web/ 根目录起服务(依赖 ../auth 守卫与 ../chat/citations.json、
# ../cockpit/plans/alarm_panel.ti.json 相对路径)
cd web && python -m http.server 8084
# 打开 http://127.0.0.1:8084/admin/index.html

加载到 ../auth/auth.js 时强制登录(未登录跳登录页);纯静态独立运行时降级免登录演示。

页面与后端语义对齐

页签 能力 对齐
模型管理 模板列表、版本/阶段视图(dev/staging/prod 徽标)、注册新版本(semver 递增校验)、promote 逐级提升、rollback 回退、全程审计 core/model-framework/template_registry.py(Stage/next_stage/_log)
知识库管理 文档列表(标题/来源/章节数/索引状态)、上传并索引(浏览器端)、来源引用查看 core/rag-kb/ 文档资产 + web/chat/citations.json 编译产物
告警确认 告警列表(P0/P1/P2 配色取自 alarm_panel.ti.json)、详情(LLM 解释 + SOP)、状态机 待处理→已确认→已闭环(P0 先确认后闭环) PRD 8.1 Alert 状态机、alert_rules.py severity、alarm_config.py 配色
审计查询 统一审计日志(时间/操作者/动作/资源/原因)、关键词+动作筛选、导出 JSON template_registry._log / prompts.drain_audit 风格(#134 UserStore 审计)

边界

数据持久化在 localStorage(Demo 级;模型/告警含 Ti 示例种子数据); 后端 HTTP 服务就绪后替换各 Store 读写即可,页面结构不变。 LLM 解释直连推理服务 http://39.101.182.167:30800/v1/chat/completions。