# Сервисный портал AegisOne — Единый стиль > Этот документ ОБЯЗАН прочитать каждый AI-агент перед изменением шаблонов/CSS сервисного портала. --- ## 1. Структура страницы Каждая страница наследует `page.html` и реализует блок `page_content`. ### Порядок элементов в правой части (main): ``` page.html main-header: left: h1 (заголовок) + breadcrumb right: page_actions block + дата {{ now }} page_content: 1. div.card — основной контент ├── div.card-header — заголовок + кнопка действия ├── div.filter-bar — фильтры (если нужны) └── div.table-wrap > table — таблица данных 2. div.modal-overlay#modal-xxx — модалка создания/редактирования 3. div.modal-overlay#confirm-delete-xxx — модалка подтверждения удаления ``` ### Card Header: ```html

Название секции

``` --- ## 2. Модалки ### Единые CSS-классы | Класс | Назначение | |-------|-----------| | `.modal-overlay` | Затемнённый фон (position: fixed, z-index: 200) | | `.modal-overlay.open` | Показать модалку (display: flex) | | `.modal` | Контейнер модалки (фон, рамка, скругление) | | `.modal-close` | Кнопка закрытия (✕) в правом верхнем углу | | `.form-actions` | Блок кнопок внизу модалки (display: flex, gap: 10px) | ### Открытие/закрытие ```javascript // Открыть document.getElementById('modal-xxx').classList.add('open'); // Закрыть document.getElementById('modal-xxx').classList.remove('open'); // Или изнутри кнопки this.closest('.modal-overlay').classList.remove('open'); ``` **ЗАПРЕЩЕНО:** использовать `style.display = 'flex'` / `style.display = 'none'` ### Модалка создания/редактирования (стандарт) ```html ``` ### Модалка подтверждения удаления (единый шаблон) **ЗАПРЕЩЕНЫ:** `confirm()`, `alert()`, `prompt()` — только кастомные модалки! ```html ``` ### Порядок кнопок в модалках ``` [ Действие (btn-danger / btn-primary) ] [ Отмена (btn) ] слева справа ``` --- ## 3. Кнопки ### Иконки | Иконка | Назначение | CSS-класс | |--------|-----------|-----------| | `+` | Создание (перед текстом) | `btn btn-primary btn-sm` | | `✎` | Редактирование | `btn btn-secondary btn-sm` | | `✕` | Удаление | `btn btn-danger btn-sm` | | `✓` | Завершение/включение | `btn btn-success btn-sm` | | `🗑` | Удаление (только в карточках) | `btn btn-danger btn-sm` | ### CSS-классы кнопок | Класс | Назначение | |-------|-----------| | `.btn` | Базовая кнопка | | `.btn-primary` | Основное действие (синий) | | `.btn-secondary` | Вторичное действие (серый) | | `.btn-danger` | Удаление/опасное действие (красный) | | `.btn-success` | Успех/завершение (зелёный) | | `.btn-warning` | Предупреждение (жёлтый) | | `.btn-sm` | Маленький размер | ### Таблицы — колонка действий ```html ``` --- ## 4. Уведомления ### Показ уведомлений ```javascript showNotification('Текст уведомления', 'success'); // зелёное showNotification('Текст уведомления', 'error'); // красное showNotification('Текст уведомления', 'warning'); // жёлтое showNotification('Текст уведомления', 'info'); // синее ``` **ЗАПРЕЩЕНЫ:** `alert()`, `prompt()`, `confirm()` — только `showNotification()` и кастомные модалки! --- ## 5. Фильтры ```html
``` --- ## 6. Таблицы ```html
{% for item in items %} {% endfor %}
Колонка 1 Колонка 2
{{ item.field }} {{ item.field2 }}
``` --- ## 7. Страницы с JS-рендерингом Для страниц, где данные загружаются через `fetch()` (bot_consent, bot_dialogues, bot_kb, bot_tickets, bot_unknown, charts): - Таблица рендерится через `renderXxx(data)` в JavaScript - Фильтрация через `filterXxx()` на клиенте - Модалки подтверждения удаления — те же HTML-шаблоны --- ## 8. Чек-лист перед коммитом - [ ] Нет `confirm()`, `alert()`, `prompt()` в коде - [ ] Модалки открываются через `classList.add('open')` - [ ] Модалки закрываются через `classList.remove('open')` - [ ] Кнопки удаления: `✕` (btn-danger) - [ ] Кнопки редактирования: `✎` (btn-secondary) - [ ] Порядок кнопок в модалках: Действие → Отмена - [ ] Уведомления через `showNotification()` - [ ] CSS-классы модалок: `.modal-overlay` / `.modal`