feat(map): add protected operations access

This commit is contained in:
lingniu
2026-08-11 18:30:16 +08:00
parent f535b1570b
commit d4593c44cd
9 changed files with 738 additions and 37 deletions
+33 -5
View File
@@ -2,7 +2,7 @@
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover">
<title>羚牛氢能 - 车辆网络 | Lingniu H2 Executive Cockpit</title>
<!-- Google Fonts: Inter & JetBrains Mono -->
<link rel="preconnect" href="https://fonts.googleapis.com">
@@ -61,8 +61,8 @@
<!-- Header Controls: Mode Switcher, Theme Switcher & Language Switcher -->
<div class="header-controls">
<div class="glass-segmented-control">
<button class="segment-btn active" id="btnModeVehicle" onclick="switchMode('vehicle')" data-i18n="btnVehicle">车辆</button>
<button class="segment-btn" id="btnModeStation" onclick="switchMode('station')" data-i18n="btnStation">加氢站</button>
<button class="segment-btn active" id="btnModeStation" onclick="switchMode('station')" data-i18n="btnStation">加氢站</button>
<button class="segment-btn is-locked" id="btnModeVehicle" onclick="switchMode('vehicle')" data-i18n="btnVehicle">车辆</button>
</div>
<!-- Bilingual ZH / EN Switcher -->
@@ -95,6 +95,8 @@
</button>
</div>
<button class="access-trigger" id="accessTrigger" type="button" onclick="toggleOperationsAccess()" data-i18n="authEntry">运营授权</button>
<div class="time-widget" id="clockTime">19:04:00</div>
</div>
</header>
@@ -150,7 +152,12 @@
<h2 id="detailTitle"></h2>
<p id="detailSubtitle"></p>
</div>
<button class="detail-close-btn" type="button" onclick="closeEntityDetails()" aria-label="关闭详情">×</button>
<div class="detail-card-actions">
<button class="detail-navigate-btn" id="detailNavigateBtn" type="button" onclick="navigateToSelectedEntity()" aria-label="导航" title="导航" hidden>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M20.7 3.3 14.4 20.1a1.2 1.2 0 0 1-2.2.1l-2.6-5.8-5.8-2.6a1.2 1.2 0 0 1 .1-2.2l16.8-6.3Z"></path><path d="m9.5 14.5 4.9-4.9"></path></svg>
</button>
<button class="detail-close-btn" type="button" onclick="closeEntityDetails()" aria-label="关闭详情">×</button>
</div>
</div>
<dl class="detail-grid" id="detailGrid"></dl>
<button class="detail-expand-btn" id="detailExpandBtn" type="button" onclick="toggleEntityDetails()" hidden>展开详情</button>
@@ -228,7 +235,28 @@
</div>
<script src="node_modules/pinyin-pro/dist/index.js?v=3.28.2"></script>
<dialog class="access-dialog" id="accessDialog" aria-labelledby="accessDialogTitle">
<form class="access-dialog-card" method="dialog" onsubmit="event.preventDefault(); authorizeOperationsAccess();">
<div class="access-dialog-icon" aria-hidden="true"></div>
<div class="access-dialog-heading">
<h2 id="accessDialogTitle" data-i18n="authTitle">进入运营数据</h2>
<p id="accessDialogHint" data-i18n="authDescription">车辆全量信息与加氢量仅向获得授权的用户展示。</p>
</div>
<p class="access-session-note" data-i18n="authExpiry">本次授权有效期为 30 分钟,到期后将自动恢复为公开站点视图。</p>
<label class="access-code-field" for="accessCodeInput">
<span data-i18n="authCodeLabel">访问码</span>
<input id="accessCodeInput" type="password" autocomplete="current-password" enterkeyhint="done" data-i18n-placeholder="authCodePlaceholder" placeholder="输入访问码">
</label>
<p class="access-dialog-error" id="accessDialogError" role="alert" hidden></p>
<div class="access-dialog-actions">
<button type="button" class="access-cancel-btn" onclick="closeAccessDialog()" data-i18n="authCancel">暂不授权</button>
<button type="submit" class="access-submit-btn" id="accessSubmitBtn" data-i18n="authSubmit">验证并进入</button>
</div>
</form>
</dialog>
<!-- 生产发布包不携带 node_modules;固定版本的 CDN 让中文地点保持拼音/首字母搜索能力。 -->
<script src="https://cdn.jsdelivr.net/npm/pinyin-pro@3.28.2/dist/index.js" crossorigin="anonymous"></script>
<script src="app.js?v=20260812113000"></script>
</body>
</html>