Files
xiaobai-review/xiaobai-datahub/admin/index.html
T
78931f9c42 restore main tree to deployed 3bafd30 (HEL-529 校准)
Revert the full revert 6f99ee9 so main's tree content is byte-identical
to 3bafd30, which is the commit currently deployed and healthy on the
8766 xiaobai-datahub container (image hel531-3bafd30). No history
rewrite, no force push; this is a normal forward commit on top of main.

Co-authored-by: multica-agent <github@multica.ai>
2026-09-15 15:03:14 +08:00

115 lines
5.4 KiB
HTML
Raw 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.
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>小白复盘 · 数据中枢</title>
<link rel="stylesheet" href="/admin/styles.css" />
</head>
<body>
<div id="app">
<div id="login-view" class="auth-wrap bg-ambient" hidden>
<section class="panel auth-panel">
<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>
</div>
<div id="change-view" class="auth-wrap bg-ambient" hidden>
<section class="panel auth-panel">
<h1>修改初始密码</h1>
<p class="muted">首次登录需先设置新密码才能进入。</p>
<form id="change-form">
<label>当前密码 <input name="current" type="password" autocomplete="current-password" /></label>
<label>新密码(至少 8 位) <input name="new_password" type="password" autocomplete="new-password" /></label>
<button type="submit">保存并继续</button>
<p id="change-error" class="error" hidden></p>
</form>
</section>
</div>
<div class="app bg-ambient" id="appRoot" hidden>
<div class="bg-layer bg-gridlines z0"></div>
<div class="bg-layer scanlines z50"></div>
<header class="hdr">
<div class="hdr-in">
<div class="radar" style="width:26px;height:26px" id="radarLogo">
<div class="sweep radar-sweep"></div>
<div class="ring1" style="inset:5.72px"></div>
<div class="ring2" style="inset:9.88px"></div>
<div class="center"></div>
<div class="blip pulse-dot" id="radarBlipOk" style="left:64%;top:30%;background:#34d399"></div>
<div class="blip pulse-dot" id="radarBlipBad" style="left:30%;top:62%;background:#f87171;animation-delay:.6s;display:none"></div>
</div>
<div class="brand"><span class="b1">小白复盘 <span style="color:#22d3ee">·</span> 数据中枢</span><span class="b2">DATA-HUB</span></div>
<span class="vsep"></span>
<nav class="nav" id="navEl">
<button class="navbtn" data-nav="overview"><span class="tri"></span>运行总览<span class="en">OVERVIEW</span></button>
<button class="navbtn" data-nav="sources"><span class="tri"></span>数据源配置<span class="en">SOURCES</span></button>
<button class="navbtn" data-nav="lineage"><span class="tri"></span>数据血缘<span class="en">LINEAGE</span></button>
</nav>
<span class="flex1"></span>
<span class="mdtag" id="phaseTag"></span>
<span class="livespan" id="liveSpan"><span class="livedot pulse-dot"></span>LIVE</span>
<span class="clock num" id="clock"><span id="ckD"></span><span class="csep">|</span><span class="ct"><span id="ckH"></span><span class="blink cc">:</span><span id="ckM"></span><span class="blink cc">:</span><span id="ckS"></span></span></span>
<span class="vsep"></span>
<button class="tbtn" id="opsBtn" style="font-size:10px">调度 / 发布 / 审计</button>
<button class="tbtn" id="calmBtn" style="font-size:10px">减少动态</button>
<span id="who" class="muted" style="font-size:10px"></span>
<button class="tbtn" id="logout-btn" style="font-size:10px">退出</button>
</div>
</header>
<main class="main" id="mainEl"></main>
<footer class="tape">
<span class="tape-label" id="tapeLed"><span class="led rev pulse"></span>EVENT TAPE</span>
<div class="tape-view"><div class="marquee-track" id="marqueeTrack"><span style="display:inline-flex;align-items:center" id="tapeA"></span><span style="display:inline-flex;align-items:center" id="tapeB"></span></div></div>
</footer>
</div>
<div class="drawer-mask" id="drawerMask">
<aside class="drawer">
<div class="drawer-hd">
<span class="ttl">调度 / 发布 / 审计</span>
<span class="sub" id="drawerSub"></span>
<button class="drawer-close" id="drawerClose">×</button>
</div>
<div class="drawer-tabs" id="drawerTabs">
<button class="drawer-tab" data-dtab="jobs">调度任务</button>
<button class="drawer-tab" data-dtab="release">盘后发布</button>
<button class="drawer-tab" data-dtab="audit">审计</button>
</div>
<div class="drawer-body" id="drawerBody"></div>
</aside>
</div>
<div class="modal-mask" id="modalMask">
<div class="modal-box">
<h3 id="modalTitle">危险操作确认</h3>
<p id="modalDesc"></p>
<label>管理密码 <input id="modalPassword" type="password" autocomplete="current-password" /></label>
<label id="modalConfirmWrap">请输入确认词 <span id="modalConfirmWord" class="num" style="color:#fbbf24"></span> <input id="modalConfirm" type="text" autocomplete="off" /></label>
<p class="modal-err" id="modalErr"></p>
<div class="modal-actions">
<button class="tbtn" id="modalCancel">取消</button>
<button class="tbtn danger" id="modalOk">确认执行</button>
</div>
</div>
</div>
<div class="toast" id="toastEl"></div>
</div>
<script src="/admin/app.js"></script>
</body>
</html>