Модальные окна для работы с сотрудниками
_create_employee.html
Модальное окно для создания нового профиля сотрудника.
Использование
{# Включить модал в шаблон #}
{% include "employees/modals/_create_employee.html" %}
{# Инициализировать JavaScript (в конце страницы) #}
<script type="module">
import { initCreateEmployeeModal } from '{% static "js/components/createEmployeeModal.js" %}';
initCreateEmployeeModal({
submitUrl: '{% url "employees:employee_create_modal" %}'
});
</script>
Интеграция с page_header компонентом
{% include "includes/components/page_header.html" with
icon="bi-people"
title="Сотрудники"
create_as_card=True
create_modal="#createEmployeeModal"
create_text="Создать профиль"
%}
{# В конце шаблона #}
{% include "employees/modals/_create_employee.html" %}
<script type="module">
import { initCreateEmployeeModal } from '{% static "js/components/createEmployeeModal.js" %}';
initCreateEmployeeModal({
submitUrl: '{% url "employees:employee_create_modal" %}'
});
</script>
JavaScript API
initCreateEmployeeModal(options)
Инициализирует обработчик модального окна создания сотрудника.
Параметры:
options.modalId(string) - ID модального окна, по умолчанию'createEmployeeModal'options.formId(string) - ID формы, по умолчанию'createEmployeeForm'options.errorsId(string) - ID блока ошибок, по умолчанию'createEmployeeErrors'options.submitBtnId(string) - ID кнопки отправки, по умолчанию'createEmployeeSubmit'options.submitUrl(string) - URL для отправки формы, обязательный параметр
Пример:
initCreateEmployeeModal({
submitUrl: '/employees/create/modal/',
modalId: 'myCustomModal' // опционально
});
Поля формы
Обязательные:
- Телефон
Опциональные:
- Фамилия, Имя, Отчество
- Пол (M/F)
- Дата рождения
- Должность (выбор из списка)
- Пароль (генерируется автоматически, если не указан)
- Telegram, WhatsApp, WeChat
- Аватар (изображение)
Backend
Модал отправляет AJAX запрос на:
POST /employees/create/modal/
Вьюха: employees.views_front.employee_create_modal
Обрабатывает данные формы, обращается к API через get_api_client() и возвращает JSON:
Успех:
{
"success": true,
"message": "Сотрудник успешно создан",
"employee_id": 123,
"redirect_url": "/employees/123/"
}
Ошибка:
{
"success": false,
"error": "Описание ошибки"
}
Особенности
- Нет прямого обращения к API - запрос идёт через фронтовую вьюху
employee_create_modal, которая сама обращается к API - Валидация - ошибки парсятся из ответа API и показываются в модале
- Автозакрытие - при успехе модал закрывается и происходит редирект на профиль созданного сотрудника
- Loading state - кнопка блокируется и показывает spinner во время отправки
Зависимости
- Bootstrap 5 Modal
- Django CSRF middleware
- Список должностей в контексте (
positions_list)