120 lines
6.1 KiB
HTML
120 lines
6.1 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="ru">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>{% block title %}LKM37 CORE{% endblock %}</title>
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
|
|
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css" rel="stylesheet">
|
|
<link href="/static/css/matrix.css" rel="stylesheet">
|
|
<style>
|
|
.sidebar { min-height: 100vh; position: sticky; top: 0; overflow-y: auto; }
|
|
.content { padding: 2rem; }
|
|
{% block extra_style %}{% endblock %}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="matrix-canvas-container" style="position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: -1; opacity: 0.1;">
|
|
<canvas id="matrix-canvas"></canvas>
|
|
</div>
|
|
|
|
<div class="container-fluid">
|
|
<div class="row">
|
|
<!-- Sidebar (ВОССТАНОВЛЕННОЕ ПОЛНОЕ МЕНЮ) -->
|
|
<div class="col-md-2 sidebar p-0 border-end border-success">
|
|
<div class="p-3 text-center border-bottom border-success">
|
|
<h4 class="mb-0" style="color: var(--matrix-green); text-shadow: 0 0 10px var(--matrix-green);">LKM37</h4>
|
|
<small class="text-success opacity-50">CORE SYSTEM v4.0</small>
|
|
</div>
|
|
<nav class="nav flex-column mt-3">
|
|
<a class="nav-link {% block nav_dashboard %}{% endblock %}" href="/">
|
|
<i class="bi bi-terminal"></i> ДАШБОРД
|
|
</a>
|
|
|
|
<div class="mt-3 px-3"><small class="text-success opacity-50 text-uppercase" style="font-size: 0.6em;">Жильцы</small></div>
|
|
<a class="nav-link {% block nav_users %}{% endblock %}" href="/users">
|
|
<i class="bi bi-people"></i> ЖИЛЬЦЫ
|
|
</a>
|
|
<a class="nav-link {% block nav_verification %}{% endblock %}" href="/verification">
|
|
<i class="bi bi-shield-lock"></i> ВЕРИФИКАЦИЯ
|
|
</a>
|
|
<a class="nav-link {% block nav_phones %}{% endblock %}" href="/phones">
|
|
<i class="bi bi-telephone"></i> ТЕЛЕФОНЫ
|
|
</a>
|
|
|
|
<div class="mt-3 px-3"><small class="text-success opacity-50 text-uppercase" style="font-size: 0.6em;">Контент</small></div>
|
|
<a class="nav-link {% block nav_broadcast %}{% endblock %}" href="/broadcast">
|
|
<i class="bi bi-broadcast"></i> РАССЫЛКА
|
|
</a>
|
|
<a class="nav-link {% block nav_scheduled_posts %}{% endblock %}" href="/scheduled_posts">
|
|
<i class="bi bi-clock-history"></i> ПОСТЫ
|
|
</a>
|
|
<a class="nav-link {% block nav_digests %}{% endblock %}" href="/digests">
|
|
<i class="bi bi-file-earmark-text"></i> ДАЙДЖЕСТЫ
|
|
</a>
|
|
<a class="nav-link {% block nav_files %}{% endblock %}" href="/files">
|
|
<i class="bi bi-folder2-open"></i> ФАЙЛЫ
|
|
</a>
|
|
|
|
<div class="mt-3 px-3"><small class="text-success opacity-50 text-uppercase" style="font-size: 0.6em;">Сервисы</small></div>
|
|
<a class="nav-link {% block nav_schedules %}{% endblock %}" href="/schedules">
|
|
<i class="bi bi-calendar-event"></i> ГРАФИКИ
|
|
</a>
|
|
<a class="nav-link {% block nav_ads %}{% endblock %}" href="/ads">
|
|
<i class="bi bi-shop"></i> ОБЪЯВЛЕНИЯ
|
|
</a>
|
|
<a class="nav-link {% block nav_polls %}{% endblock %}" href="/polls">
|
|
<i class="bi bi-check2-square"></i> ОПРОСЫ
|
|
</a>
|
|
<a class="nav-link {% block nav_events %}{% endblock %}" href="/events">
|
|
<i class="bi bi-calendar3"></i> СОБЫТИЯ
|
|
</a>
|
|
|
|
<div class="mt-3 px-3"><small class="text-success opacity-50 text-uppercase" style="font-size: 0.6em;">Система</small></div>
|
|
<a class="nav-link {% block nav_export %}{% endblock %}" href="/export">
|
|
<i class="bi bi-download"></i> ЭКСПОРТ
|
|
</a>
|
|
<a class="nav-link {% block nav_emails %}{% endblock %}" href="/emails">
|
|
<i class="bi bi-envelope-at"></i> ПОЧТА
|
|
</a>
|
|
</nav>
|
|
</div>
|
|
|
|
<!-- Main Content -->
|
|
<div class="col-md-10 content">
|
|
{% block content %}{% endblock %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
const canvas = document.getElementById('matrix-canvas');
|
|
const ctx = canvas.getContext('2d');
|
|
canvas.width = window.innerWidth;
|
|
canvas.height = window.innerHeight;
|
|
const letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
const fontSize = 16;
|
|
const columns = canvas.width / fontSize;
|
|
const drops = Array(Math.floor(columns)).fill(1);
|
|
|
|
function draw() {
|
|
ctx.fillStyle = "rgba(0, 0, 0, 0.05)";
|
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
ctx.fillStyle = "#22c55e";
|
|
ctx.font = fontSize + "px monospace";
|
|
for (let i = 0; i < drops.length; i++) {
|
|
const text = letters[Math.floor(Math.random() * letters.length)];
|
|
ctx.fillText(text, i * fontSize, drops[i] * fontSize);
|
|
if (drops[i] * fontSize > canvas.height && Math.random() > 0.975) drops[i] = 0;
|
|
drops[i]++;
|
|
}
|
|
}
|
|
setInterval(draw, 33);
|
|
window.addEventListener('resize', () => {
|
|
canvas.width = window.innerWidth;
|
|
canvas.height = window.innerHeight;
|
|
});
|
|
</script>
|
|
{% block extra_script %}{% endblock %}
|
|
</body>
|
|
</html>
|