# План рефакторинга templates/ ## Статистика проекта **Общая информация:** - Всего файлов: 61 (HTML/CSS/JS) - HTML шаблонов: 58 - Общий объём: 11,479 строк кода **Распределение по модулям:** ``` admin/ 1 файл (change_form.html) auth/ 12 файлов (login, register, password reset, logout, verify) communications/ 2 файла (chat_list, chat_detail) documents/ 1 файл (document_list) emails/ 2 файла (password_reset_email, registration_verify_code) employees/ 15 файлов (списки, детали, формы) feed/ 10 файлов (посты, комментарии, ленты) includes/ 4 файла (navbar, sidebar, rightbar_calendar, messages) requests/ 1 файл (request_list.html - ДУБЛИКАТ!) requests_app/ 7 файлов (all_requests, my_requests, process, etc.) search/ 1 файл (results) base.html 1 файл (корневой шаблон) ``` ## Обнаруженные проблемы ### 🔴 КРИТИЧЕСКИЕ ПРОБЛЕМЫ #### 1. **Дублирование папок: requests/ vs requests_app/** **requests/request_list.html** (788 строк): - Путь: `templates/requests/request_list.html` - Использование: `requests_app/views_front.py:174` → `template_name = "requests/request_list.html"` - Назначение: Комплексная страница со списком заявлений + документов + recipient picker **requests_app/all_requests.html** (147 строк): - Путь: `templates/requests_app/all_requests.html` - Использование: `requests_app/views.py:315` → `"requests_app/all_requests.html"` - Назначение: Простой список всех заявлений с фильтрами **requests_app/my_requests.html** (102 строки): - Путь: `templates/requests_app/my_requests.html` - Использование: `requests_app/views.py:251` → `"requests_app/my_requests.html"` - Назначение: Список моих заявлений **Вывод**: - `requests/` - устаревшая папка (1 файл) - `requests_app/` - актуальная структура (7 файлов) - **Необходимо**: объединить всё в `requests_app/` #### 2. **Дублирование auth шаблонов** **auth/logout.html** (171 строка): - Использование: `employees/views_auth.py:182` → `template_name = "auth/logout.html"` - Статус: **ИСПОЛЬЗУЕТСЯ** ✅ - Описание: Современный iOS-стиль, overlay, анимации, полнофункциональный **auth/logout_confirm.html** (33 строки): - Использование: ❌ **НЕ НАЙДЕНО** - Статус: **НЕИСПОЛЬЗУЕМЫЙ ДУБЛИКАТ** - Описание: Простой standalone HTML без base.html **Вывод**: `logout_confirm.html` - устаревший файл → **УДАЛИТЬ** #### 3. **Дублирование password reset шаблонов** **auth/password_reset.html** (83 строки): - Использование: `employees/views_auth.py:199` → `template_name = "auth/password_reset.html"` - Статус: **ИСПОЛЬЗУЕТСЯ** ✅ - Описание: Полноценная форма с валидацией, extends base.html **auth/password_reset_form.html** (7 строк): - Использование: ❌ **НЕ НАЙДЕНО** - Статус: **НЕИСПОЛЬЗУЕМЫЙ ДУБЛИКАТ** - Описание: Простая заглушка без стилей **Вывод**: `password_reset_form.html` - устаревший файл → **УДАЛИТЬ** ### 🟡 СРЕДНИЙ ПРИОРИТЕТ #### 4. **Огромные файлы требуют декомпозиции** **employees/_employee_edit.html** (1391 строка): - Проблема: Монолитная форма редактирования сотрудника - Решение: Разбить на компоненты: - `_employee_edit_personal.html` (ФИО, email, телефон) - `_employee_edit_position.html` (должность, отдел) - `_employee_edit_contact.html` (контакты, адреса) - `_employee_edit_skills.html` (навыки) - `_employee_edit_documents.html` (документы) **employees/department_detail.html** (1025 строк): - Проблема: Детальная страница отдела со множеством разделов - Решение: Выделить компоненты: - `_department_header.html` (заголовок, руководитель) - `_department_members.html` (список сотрудников) - `_department_stats.html` (статистика) - `_department_subdepts.html` (подотделы) **includes/rightbar_calendar.html** (1129 строк): - Проблема: Правый сайдбар с календарём + события - Решение: Разбить на: - `_calendar_widget.html` (виджет календаря) - `_calendar_events.html` (список событий) - `_calendar_filters.html` (фильтры) **documents/document_list.html** (743 строки): - Проблема: Список документов + фильтры + модалки - Решение: Выделить: - `_document_filters.html` (панель фильтров) - `_document_card.html` (карточка документа) - `_document_modals.html` (модальные окна) **requests/request_list.html** (788 строк): - Проблема: Комплексная страница с заявлениями, документами, recipient picker - Решение: После переноса в requests_app/ разбить на компоненты **employees/employee_detail.html** (600 строк): - Решение: Выделить табы в отдельные компоненты #### 5. **Дублирование CSS стилей** Обнаружены повторяющиеся блоки стилей: - `.card-list`, `.card`, `.card-header` - определены в 5+ файлах - `.btn-icon`, `.badge-status` - дублируются - `.ios-overlay`, `.ios-sheet` - iOS-стиль модалок **Решение**: Создать общие файлы стилей: - `static/css/components/feed.css` - стили для лент - `static/css/components/modals.css` - iOS-стиль модалок - `static/css/components/badges.css` - бейджи статусов ### 🟢 НИЗКИЙ ПРИОРИТЕТ #### 6. **Оптимизация структуры includes/** Текущие: - `includes/navbar.html` (143 строки) - `includes/sidebar.html` (259 строк) - `includes/rightbar_calendar.html` (1129 строк) - `includes/messages.html` (9 строк) **Рекомендации**: - Выделить из navbar: `_navbar_search.html`, `_navbar_user_menu.html` - Выделить из sidebar: `_sidebar_menu.html`, `_sidebar_profile.html` #### 7. **Консистентность именования** **Проблемы**: - Некоторые файлы начинаются с `_` (партиалы), другие нет - Смешанное использование `confirm_delete` vs `delete_confirm` - `employee_feed.html` vs `feed_list.html` (разная логика именования) **Стандарт**: - `_` - только для партиалов (переиспользуемых компонентов) - `{model}_list.html` - списки - `{model}_detail.html` - детальные страницы - `{model}_form.html` - формы создания/редактирования - `{model}_confirm_delete.html` - подтверждение удаления ## ⚠️ ВАЖНЫЕ ВЫВОДЫ ИЗ ПРЕДЫДУЩИХ ПОПЫТОК ### Проблемы при декомпозиции HTML без предварительной работы со стилями/скриптами: 1. **Стили в неправильных местах**: При извлечении компонентов стили ` на: {% block extra_css %} {% endblock %} # 4. Проверить рендер python manage.py runserver # Открыть страницу, проверить визуально # 5. Запустить тесты python manage.py test tests.test_template_rendering # 6. Если всё ОК - коммит, если нет - откат из backup ``` 4. **Подключить в base.html**: ```django {% block extra_css %} {% endblock %} ``` **Критерий завершения**: - Создано 4-5 CSS компонентов ✅ - Из шаблонов удалено ~300-400 строк дублирующих стилей ✅ - Все страницы рендерятся идентично ✅ - Git commits: по одному на каждый извлечённый компонент ✅ --- #### Задача 3.2: Извлечь специфичные стили страниц **Для больших файлов** создать отдельные CSS файлы: 1. **employees/department_detail.html** → `static/css/pages/department-detail.css`: ```css /* Стили специфичные для страницы отдела */ .team-wheel { /* ... */ } .wheel-columns { /* ... */ } /* ... */ ``` 2. **includes/rightbar_calendar.html** → `static/css/components/calendar.css`: ```css /* Стили календаря */ .calendar-wrap { /* ... */ } .fc { /* ... */ } /* ... */ ``` 3. **documents/document_list.html** → `static/css/pages/document-list.css` **Критерий завершения**: - Каждый шаблон > 50 строк CSS имеет отдельный файл ✅ - Встроенных `