Страница сети была переведена на единое меню

Этот коммит содержится в:
Виктор
2026-05-07 10:25:04 +09:00
родитель d529c5672a
Коммит 4779b74464
+13 -26
Просмотреть файл
@@ -7,15 +7,17 @@
<link rel="stylesheet" href="/static/app.css"> <link rel="stylesheet" href="/static/app.css">
</head> </head>
<body> <body>
<div class="shell"> <div class="v-layout">
<header class="topbar"> {% include "_sidebar.html" %}
<main class="v-main">
<header class="v-topbar">
<div> <div>
<div class="brand">Сеть</div> <div class="v-title">Сеть</div>
<div class="muted">NAT Router для VPS, проброс одиночных портов и диапазонов к VM</div> <div class="v-subtitle">NAT Router для VPS, проброс одиночных портов и диапазонов к VM</div>
</div> </div>
<div class="top-meta"> <div class="top-meta">
<span>user: {{ user }}</span> <span>user: {{ user }}</span>
<a class="link-pill accent" href="/vm/create">+ Создать VM</a>
<a class="link-pill" href="/">← Дашборд</a> <a class="link-pill" href="/">← Дашборд</a>
<form method="post" action="/logout" class="logout-form"><button class="ghost">Выйти</button></form> <form method="post" action="/logout" class="logout-form"><button class="ghost">Выйти</button></form>
</div> </div>
@@ -83,12 +85,10 @@
<span>Описание</span> <span>Описание</span>
<input type="text" name="note" placeholder="Например: сайт, SSH, SIP, RTP MikoPBX"> <input type="text" name="note" placeholder="Например: сайт, SSH, SIP, RTP MikoPBX">
</label> </label>
<label> <label>
<span>Внешний порт или диапазон</span> <span>Внешний порт или диапазон</span>
<input type="text" name="external_port" pattern="[0-9]{1,5}([:-][0-9]{1,5})?" placeholder="80, 443, 2222 или 10000-20000" required> <input type="text" name="external_port" pattern="[0-9]{1,5}([:-][0-9]{1,5})?" placeholder="80, 443, 2222 или 10000-20000" required>
</label> </label>
<label> <label>
<span>Машина</span> <span>Машина</span>
<select name="vm_name" required> <select name="vm_name" required>
@@ -97,9 +97,7 @@
{% endfor %} {% endfor %}
</select> </select>
</label> </label>
<input type="hidden" name="guest_ip" value="auto"> <input type="hidden" name="guest_ip" value="auto">
<label> <label>
<span>Внутренний порт или диапазон</span> <span>Внутренний порт или диапазон</span>
<input type="text" name="guest_port" list="standard-ports" pattern="[0-9]{1,5}([:-][0-9]{1,5})?" placeholder="Выбери стандартный или введи 10000-20000" required> <input type="text" name="guest_port" list="standard-ports" pattern="[0-9]{1,5}([:-][0-9]{1,5})?" placeholder="Выбери стандартный или введи 10000-20000" required>
@@ -136,7 +134,6 @@
<option value="10000-20000" label="RTP / VoIP media range"></option> <option value="10000-20000" label="RTP / VoIP media range"></option>
</datalist> </datalist>
</label> </label>
<label> <label>
<span>Протокол</span> <span>Протокол</span>
<select name="protocol"> <select name="protocol">
@@ -144,11 +141,7 @@
<option value="udp">udp</option> <option value="udp">udp</option>
</select> </select>
</label> </label>
<div class="notice">Можно указать одиночный порт или диапазон. Для VoIP/RTP обычно: внешний 10000-20000 → внутренний 10000-20000, протокол udp. Длины диапазонов должны совпадать.</div>
<div class="notice">
Можно указать одиночный порт или диапазон. Для VoIP/RTP обычно: внешний 10000-20000 → внутренний 10000-20000, протокол udp. Длины диапазонов должны совпадать.
</div>
<button class="primary wide">Добавить и применить</button> <button class="primary wide">Добавить и применить</button>
</form> </form>
</article> </article>
@@ -214,14 +207,8 @@
</tbody> </tbody>
</table> </table>
<div class="grid two top-space"> <div class="grid two top-space">
<article> <article><div class="label">Проверить входящий трафик</div><pre>{{ diagnostics.commands.watch_external }}</pre></article>
<div class="label">Проверить входящий трафик</div> <article><div class="label">Проверить трафик к VM</div><pre>{{ diagnostics.commands.watch_internal }}</pre></article>
<pre>{{ diagnostics.commands.watch_external }}</pre>
</article>
<article>
<div class="label">Проверить трафик к VM</div>
<pre>{{ diagnostics.commands.watch_internal }}</pre>
</article>
</div> </div>
</section> </section>
{% endif %} {% endif %}
@@ -255,9 +242,7 @@
<input type="hidden" name="protocol" value="{{ item.protocol }}"> <input type="hidden" name="protocol" value="{{ item.protocol }}">
<button>Диагностика</button> <button>Диагностика</button>
</form> </form>
<form method="post" action="/network/forward/{{ item.id }}/delete"> <form method="post" action="/network/forward/{{ item.id }}/delete"><button class="danger">Удалить</button></form>
<button class="danger">Удалить</button>
</form>
</div> </div>
</td> </td>
</tr> </tr>
@@ -275,6 +260,8 @@
</div> </div>
<pre>{{ ctx.nft_rules }}</pre> <pre>{{ ctx.nft_rules }}</pre>
</section> </section>
</main>
</div> </div>
<script src="/static/panel.js" defer></script>
</body> </body>
</html> </html>