You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
158 lines
6.8 KiB
HTML
158 lines
6.8 KiB
HTML
<!doctype html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Triangulation Control Panel</title>
|
|
<link rel="stylesheet" href="/static/styles.css" />
|
|
</head>
|
|
<body>
|
|
<div class="bg-glow bg-glow-a"></div>
|
|
<div class="bg-glow bg-glow-b"></div>
|
|
|
|
<main class="app-shell">
|
|
<aside class="side-nav card">
|
|
<p class="kicker">Triangulation</p>
|
|
<h1 class="side-title">Control</h1>
|
|
|
|
<div class="menu-wrap">
|
|
<button id="menu-toggle" class="btn btn-primary menu-toggle">Sections ▼</button>
|
|
<div id="menu-list" class="menu-list">
|
|
<button class="menu-item menu-item-active" data-section="overview">Overview</button>
|
|
<button class="menu-item" data-section="frequencies">Frequencies</button>
|
|
<button class="menu-item" data-section="receivers">Receivers</button>
|
|
<button class="menu-item" data-section="delivery">Delivery</button>
|
|
<button class="menu-item" data-section="servers">Servers</button>
|
|
<button class="menu-item" data-section="json">Raw JSON</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="side-meta">
|
|
<span id="updated-at" class="badge">updated: n/a</span>
|
|
<span id="health-status" class="badge">health: n/a</span>
|
|
<span id="delivery-status" class="badge">delivery: n/a</span>
|
|
</div>
|
|
</aside>
|
|
|
|
<section class="content-area">
|
|
<section id="section-overview" class="panel panel-active">
|
|
<header class="hero card">
|
|
<h2>RF Positioning Dashboard</h2>
|
|
<p class="muted">Мониторинг и контроль расчета пересечения 3 сфер.</p>
|
|
<div class="hero-actions">
|
|
<button id="refresh-now" class="btn btn-primary">Refresh</button>
|
|
</div>
|
|
</header>
|
|
|
|
<article class="card">
|
|
<h2>Итоговая позиция</h2>
|
|
<div class="result-box">
|
|
<div><span class="muted">Selected Freq:</span> <b id="selected-freq">-</b></div>
|
|
<div><span class="muted">X:</span> <b id="pos-x">-</b></div>
|
|
<div><span class="muted">Y:</span> <b id="pos-y">-</b></div>
|
|
<div><span class="muted">Z:</span> <b id="pos-z">-</b></div>
|
|
<div><span class="muted">RMSE:</span> <b id="rmse">-</b></div>
|
|
</div>
|
|
</article>
|
|
</section>
|
|
|
|
<section id="section-frequencies" class="panel">
|
|
<article class="card">
|
|
<h2>Таблица пересечений по частотам</h2>
|
|
<div class="table-wrap">
|
|
<table id="freq-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Frequency (MHz)</th>
|
|
<th>X</th>
|
|
<th>Y</th>
|
|
<th>Z</th>
|
|
<th>RMSE</th>
|
|
<th>Exact</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody></tbody>
|
|
</table>
|
|
</div>
|
|
</article>
|
|
</section>
|
|
|
|
<section id="section-receivers" class="panel">
|
|
<article class="card">
|
|
<h2>Ресиверы</h2>
|
|
<div id="receivers-list" class="mono small"></div>
|
|
</article>
|
|
</section>
|
|
|
|
<section id="section-delivery" class="panel">
|
|
<article class="card">
|
|
<h2>Отправка на конечный сервер</h2>
|
|
<div id="delivery-details" class="mono small"></div>
|
|
</article>
|
|
</section>
|
|
|
|
<section id="section-servers" class="panel">
|
|
<article class="card">
|
|
<h2>Настройка серверов</h2>
|
|
<p class="muted">Изменения сохраняются в конфиг и требуют перезапуска сервиса.</p>
|
|
<div class="server-grid">
|
|
<label>Receiver
|
|
<select id="receiver-select"></select>
|
|
</label>
|
|
<label>Receiver URL<input id="rx-url" type="text" /></label>
|
|
<label>Filter enabled
|
|
<select id="rx-filter-enabled">
|
|
<option value="true">true</option>
|
|
<option value="false">false</option>
|
|
</select>
|
|
</label>
|
|
<label>Min freq MHz<input id="rx-min-freq" type="number" step="0.001" min="0" /></label>
|
|
<label>Max freq MHz<input id="rx-max-freq" type="number" step="0.001" min="0" /></label>
|
|
<label>Min RSSI dBm<input id="rx-min-rssi" type="number" step="0.1" /></label>
|
|
<label>Max RSSI dBm<input id="rx-max-rssi" type="number" step="0.1" /></label>
|
|
<label>Write API token (session only)<input id="write-token" type="password" /></label>
|
|
<label>Output enabled
|
|
<select id="out-enabled">
|
|
<option value="true">true</option>
|
|
<option value="false">false</option>
|
|
</select>
|
|
</label>
|
|
<label>Freq filter enabled
|
|
<select id="out-freq-filter-enabled">
|
|
<option value="true">true</option>
|
|
<option value="false">false</option>
|
|
</select>
|
|
</label>
|
|
<label>Min frequency MHz<input id="out-min-freq" type="number" step="0.001" min="0" /></label>
|
|
<label>Max frequency MHz<input id="out-max-freq" type="number" step="0.001" min="0" /></label>
|
|
<label>Output IP/host<input id="out-ip" type="text" /></label>
|
|
<label>Output port<input id="out-port" type="number" min="1" /></label>
|
|
<label>Output path<input id="out-path" type="text" /></label>
|
|
<label>Output timeout s<input id="out-timeout" type="number" step="0.1" min="0.1" /></label>
|
|
</div>
|
|
<div class="editor-actions">
|
|
<button id="load-servers" class="btn">Load</button>
|
|
<button id="save-servers" class="btn btn-primary">Save servers</button>
|
|
<span id="servers-state" class="badge">servers: n/a</span>
|
|
</div>
|
|
</article>
|
|
</section>
|
|
|
|
<section id="section-json" class="panel">
|
|
<article class="card">
|
|
<h2>Конфигурация (Raw JSON)</h2>
|
|
<div class="editor-actions">
|
|
<button id="load-config" class="btn">Load</button>
|
|
<button id="save-config" class="btn btn-primary">Save JSON</button>
|
|
<span id="config-state" class="badge">config: n/a</span>
|
|
</div>
|
|
<textarea id="config-editor" class="editor" spellcheck="false"></textarea>
|
|
</article>
|
|
</section>
|
|
</section>
|
|
</main>
|
|
|
|
<script src="/static/app.js"></script>
|
|
</body>
|
|
</html>
|