Initial commit
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ru">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<title>{% block title %}Service Portal — AegisOne Engineering{% endblock %}</title>
|
||||
<link rel="stylesheet" href="/service-style.php">
|
||||
<link rel="icon" type="image/x-icon" href="/assets/img/favicon.ico">
|
||||
{% block extra_head %}{% endblock %}
|
||||
</head>
|
||||
<body class="{% block body_class %}{% endblock %}">
|
||||
{% block content %}{% endblock %}
|
||||
{% block extra_scripts %}{% endblock %}
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,126 @@
|
||||
{% extends "base.html" %}
|
||||
{% block body_class %}dashboard-page{% endblock %}
|
||||
{% block content %}
|
||||
<button class="sidebar-toggle" onclick="document.querySelector('.sidebar').classList.toggle('open')">☰</button>
|
||||
<div class="layout">
|
||||
<aside class="sidebar">
|
||||
<div class="sidebar-header">
|
||||
<div class="logo">Aegis<span>One</span></div>
|
||||
<div style="font-size:10px;color:var(--text-muted);">Service Portal</div>
|
||||
</div>
|
||||
<nav class="sidebar-nav">
|
||||
<div class="sidebar-section">Панель</div>
|
||||
<a href="/service/dashboard" class="active">Дашборд</a>
|
||||
{% if user.role == 'owner' %}
|
||||
<div class="sidebar-section">Управление</div>
|
||||
<a href="/service/users">Сотрудники</a>
|
||||
<a href="/service/customers">Клиенты</a>
|
||||
<a href="/service/objects">Объекты</a>
|
||||
<a href="/service/assignments">Назначения</a>
|
||||
<a href="/service/sla">SLA контракты</a>
|
||||
<a href="/service/ceo">CEO дашборд</a>
|
||||
<a href="/service/coefficients">Коэффициенты</a>
|
||||
{% elif user.role == 'engineer' %}
|
||||
<div class="sidebar-section">Управление</div>
|
||||
<a href="/service/customers">Клиенты</a>
|
||||
<a href="/service/objects">Объекты</a>
|
||||
<a href="/service/sla">SLA контракты</a>
|
||||
{% endif %}
|
||||
<div class="sidebar-section">Работа</div>
|
||||
{% if user.role in ['engineer', 'technician'] %}
|
||||
<a href="/service/tasks">Задачи</a>
|
||||
<a href="/service/reports">Отчёты</a>
|
||||
<a href="/service/incidents">Инциденты</a>
|
||||
{% endif %}
|
||||
{% if user.role in ['owner', 'engineer'] %}
|
||||
<a href="/service/questionnaire">Опросник</a>
|
||||
{% endif %}
|
||||
{% if user.role == 'owner' %}
|
||||
<a href="/service/questionnaire-config">Настройка опросника</a>
|
||||
{% endif %}
|
||||
{% if user.role in ['owner', 'engineer'] %}
|
||||
<a href="/service/passports">Паспорта объектов</a>
|
||||
{% endif %}
|
||||
{% if user.role == 'technician' %}
|
||||
<a href="/service/checklist">Чек-лист</a>
|
||||
{% endif %}
|
||||
<div class="sidebar-section">Блог</div>
|
||||
{% if user.role == 'owner' %}
|
||||
<a href="/service/blog">Управление блогом</a>
|
||||
{% endif %}
|
||||
<a href="/blog/">Публичный блог</a>
|
||||
<div class="sidebar-section">Контент</div>
|
||||
{% if user.role == 'owner' %}
|
||||
<a href="/service/cases">Примеры из практики</a>
|
||||
{% endif %}
|
||||
<div class="sidebar-section">Документация</div>
|
||||
{% if user.role in ['owner', 'engineer'] %}
|
||||
<a href="/service/docs">Просмотр документации</a>
|
||||
{% endif %}
|
||||
{% if user.role == 'owner' %}
|
||||
<a href="/service/docs-manage">Управление документами</a>
|
||||
{% endif %}
|
||||
</nav>
|
||||
<div class="sidebar-footer">
|
||||
<div class="user-name">{{ user.full_name }}</div>
|
||||
<div class="user-role">{{ {'owner': 'Владелец', 'engineer': 'Инженер', 'technician': 'Техник'}[user.role] }}</div>
|
||||
<a href="/service/logout" style="display:inline-block;margin-top:6px;font-size:12px;">Выйти</a>
|
||||
</div>
|
||||
</aside>
|
||||
<main class="main">
|
||||
<div class="main-header">
|
||||
<div>
|
||||
<h1>Дашборд</h1>
|
||||
<div class="breadcrumb"><a href="/service/dashboard">Главная</a></div>
|
||||
</div>
|
||||
<div class="actions">
|
||||
<span style="font-size:12px;color:var(--text-muted);">{{ now }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% if shs_alert %}
|
||||
<div class="shs-alert critical">⚠ {{ shs_alert }}</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="card-grid">
|
||||
<a href="/service/objects" class="card card-link">
|
||||
<div class="card-label">Активные объекты</div>
|
||||
<div class="card-value value-accent">{{ stats.objects }}</div>
|
||||
</a>
|
||||
<a href="/service/tasks" class="card card-link">
|
||||
<div class="card-label">Активные задачи</div>
|
||||
<div class="card-value {% if stats.tasks > 0 %}value-yellow{% else %}value-green{% endif %}">{{ stats.tasks }}</div>
|
||||
</a>
|
||||
<a href="/service/incidents" class="card card-link">
|
||||
<div class="card-label">Открытые инциденты</div>
|
||||
<div class="card-value {% if stats.incidents > 0 %}value-red{% else %}value-green{% endif %}">{{ stats.incidents }}</div>
|
||||
</a>
|
||||
<a href="/service/sla" class="card card-link">
|
||||
<div class="card-label">SLA контракты</div>
|
||||
<div class="card-value value-info">{{ stats.sla_count }}</div>
|
||||
</a>
|
||||
<a href="/service/sla" class="card card-link">
|
||||
<div class="card-label">SLA Compliance</div>
|
||||
<div class="card-value {% if stats.sla_compliance >= 90 %}value-green{% elif stats.sla_compliance >= 70 %}value-yellow{% else %}value-red{% endif %}">{{ stats.sla_compliance }}%</div>
|
||||
</a>
|
||||
{% if stats.shs %}
|
||||
<a href="/service/ceo" class="card card-link">
|
||||
<div class="card-label">SHS (System Health)</div>
|
||||
<div class="card-value {% if stats.shs.shs_status in ['Growth', 'Stable'] %}value-green{% else %}value-red{% endif %}">{{ stats.shs.shs_score }}</div>
|
||||
<div class="card-label"><span class="badge badge-{{ stats.shs.shs_status|lower }}">{{ stats.shs.shs_status }}</span></div>
|
||||
</a>
|
||||
{% endif %}
|
||||
{% if stats.my_tasks is defined %}
|
||||
<a href="/service/tasks" class="card card-link">
|
||||
<div class="card-label">Мои задачи</div>
|
||||
<div class="card-value">{{ stats.my_tasks }}</div>
|
||||
</a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</main>
|
||||
</div>
|
||||
<style>
|
||||
.card-link { text-decoration:none; color:inherit; display:block; transition:transform 0.2s, box-shadow 0.2s; }
|
||||
.card-link:hover { transform:translateY(-2px); box-shadow:var(--shadow); cursor:pointer; }
|
||||
</style>
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,28 @@
|
||||
{% extends "base.html" %}
|
||||
{% block body_class %}login-page{% endblock %}
|
||||
{% block content %}
|
||||
<div class="login-box">
|
||||
<div class="login-brand">
|
||||
<img src="/logo.php" alt="AegisOne" class="login-brand__img">
|
||||
<div class="login-brand__title">AegisOne Engineering</div>
|
||||
<div class="login-brand__subtitle">Service Portal</div>
|
||||
</div>
|
||||
<div class="login-divider"></div>
|
||||
<h1>Вход в сервисный портал</h1>
|
||||
{% if error %}
|
||||
<div class="alert alert-error">{{ error }}</div>
|
||||
{% endif %}
|
||||
<form method="post">
|
||||
<div class="form-group">
|
||||
<label for="login">Логин</label>
|
||||
<input type="text" id="login" name="login" placeholder="Введите логин" required autocomplete="username" autofocus>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="password">Пароль</label>
|
||||
<input type="password" id="password" name="password" placeholder="Введите пароль" required autocomplete="current-password">
|
||||
</div>
|
||||
<button type="submit" class="btn btn-primary btn-block">Войти</button>
|
||||
</form>
|
||||
<p class="login-box__footnote">* Сервисный портал для сотрудников AegisOne Engineering</p>
|
||||
</div>
|
||||
{% endblock %}
|
||||
Reference in New Issue
Block a user