Files
xiaobai-review/xiaobai-datahub/admin/index.html
T
011ecc0d1a feat(HEL-546): 数据中枢 A/B/C 三方向落地为可用页面
- 基于第七版稳定基线(be647bb)重构 admin 前端为模块化架构:
  tokens.css(设计token唯一来源) + shared.css(公共组件) + core.js(状态/API/事件总线/轮询/路由)
  + main.js(入口) + layouts/{flowline,ledger,strata}.{css,js}(三方向独立布局)
  + layouts/shared.js(三方向共用数据视图与操作绑定)
- 三个页面(A装配线/B值班台账/C地层剖面)通过 ?layout= 查询参数独立可达、可刷新、可前进后退导航,
  共享登录态、真实后端数据(overview/sources/jobs/batches/datasets/audit)、错误处理与主题
- 六大板块(总览/数据源/调度任务/盘后发布/数据集/审计)在三个方向均可查看与操作(探测/触发/回滚/补数)
- 修正健康状态语义:CircuitBreaker closed/half_open/open 与适配器 ok/error/empty/unconfigured/unknown
  统一归一化为 ok/warn/error/unconfigured/unknown 供三方向一致展示
- 事件驱动动效:A 水平接力光梭、B 行级高亮+实时调用跑马灯、C 纵向贯穿光点+分层标记;
  统一使用 transform/opacity/WAAPI,避免 transition:all,支持 prefers-reduced-motion 静态降级
- 修复响应式布局在 1024/1280 断点因 CSS Grid 默认 min-width:auto 被内部宽表格撑爆轨道的问题
- 修复布局切换/前进后退时残留 setTimeout 回调在 unmount 后访问 null root 导致的报错(mounted 标志位+
  safeTimeout+统一清理定时器)
- 自测:Playwright 全断点(1440/1280/1024)x 双主题矩阵截图、90 次连续布局切换+前进后退压力测试无报错、
  探测/触发/回滚danger操作流程验证、reduced-motion 验证;后端 pytest 全量 133 用例通过,无回归
- 未改动:登录/鉴权契约、后端 API、'问天'冻结区、生产数据/权限

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
2026-09-13 16:28:50 +08:00

65 lines
2.8 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>xiaobai-datahub 管理后台 · 数据中枢</title>
<link rel="stylesheet" href="/admin/tokens.css" />
<link rel="stylesheet" href="/admin/shared.css" />
<link rel="stylesheet" href="/admin/layouts/flowline.css" />
<link rel="stylesheet" href="/admin/layouts/ledger.css" />
<link rel="stylesheet" href="/admin/layouts/strata.css" />
</head>
<body>
<div id="app">
<section id="login-view" class="panel auth-panel">
<span class="badge-sim">内网 · 8766</span>
<h1>数据中枢</h1>
<p class="muted">四路来源持续汇流、调度、发布与审计的运转空间。</p>
<form id="login-form">
<label>账号 <input name="username" value="hub_admin" autocomplete="username" /></label>
<label>密码 <input name="password" type="password" autocomplete="current-password" /></label>
<button type="submit">登录</button>
<p id="login-error" class="error" hidden></p>
</form>
</section>
<section id="change-view" class="panel auth-panel" hidden>
<h1>修改初始密码</h1>
<form id="change-form">
<label>当前密码 <input name="current" type="password" /></label>
<label>新密码(至少 8 位) <input name="new_password" type="password" /></label>
<button type="submit">保存并继续</button>
<p id="change-error" class="error" hidden></p>
</form>
</section>
<section id="shell" hidden style="display:flex; flex-direction:column; min-height:100vh;">
<header id="topbar">
<div class="title">小白复盘 <em>·</em> 数据中枢</div>
<span class="vdiv"></span>
<span class="tdate mono" id="crumb">8766 · 四源汇流 · 持续运转</span>
<span class="spacer"></span>
<nav id="layoutSwitch" aria-label="页面切换">
<button type="button" data-layout="flowline"><span class="k">A</span>装配线</button>
<button type="button" data-layout="ledger"><span class="k">B</span>值班台账</button>
<button type="button" data-layout="strata"><span class="k">C</span>地层剖面</button>
</nav>
<span class="who muted" id="who"></span>
<button type="button" id="theme-btn" class="btn ghost">夜间</button>
<button type="button" id="logout-btn" class="btn ghost">退出</button>
</header>
<main id="page-root" style="flex:1;"></main>
</section>
</div>
<script src="/admin/core.js"></script>
<script src="/admin/layouts/shared.js"></script>
<script src="/admin/layouts/flowline.js"></script>
<script src="/admin/layouts/ledger.js"></script>
<script src="/admin/layouts/strata.js"></script>
<script src="/admin/main.js"></script>
</body>
</html>