Учет посещаемости. Вызов модальных окон из таблицы.

PHP

У меня есть проект, вдохновленный платформой FilamentDaily. Его цель — создать интерактивную страницу, которая учитывает посещаемость сотрудников. В верхней части страницы расположены дни недели, а в строках — сотрудники. Для каждого сотрудника можно выбрать чекбокс, чтобы отметить, был ли он на работе в конкретный день.

Я решил расширить функциональность этого проекта, добавив возможность вызова модального окна при клике на ячейку с датой. В модальном окне пользователь сможет ввести время прихода и ухода сотрудника, а также указать тип дня (рабочий, выходной, больничный и т.д.). Это позволит более детально отслеживать присутствие сотрудников и улучшить учет рабочего времени.

Учет посещаемости. Вызов модальных окон из таблицы.
Учет посещаемости. Вызов модальных окон из таблицы.

Создание страницы с расписанием

Сначала нам нужно создать Page через консоль вызвав команду artisan.

Enum виды посещений

Создадим класс перечислений для выбора типа присутствия.

Модель посещений

Blade view сетки с посещениями

Сначала нам нужно программно запустить действие по указанию типа дня и времени присутствия. В компоненте Blade мы используем директиву Livewire wire:click для вызова функции, которая создаст новый элемент:

resources\views\filament\pages\attendance.blade.php

Компонент Livewire:

Теперь давайте рассмотрим компонент Livewire, который управляет логикой создания посещений:

app\Filament\Pages\Attendance.php

В конце компонента мы добавили метод createPresenceAction. Этот метод выполняет несколько важных функций:

  1. Он создает посещение сотрудника на конкретный день.
  2. Он создает модальное окно с настраиваемым значком, заголовком и описанием.
  3. Он определяет форму в модальном окне, включая поле ввода времени входа и выхода сотрудника и статус его явки на работу.
  4. Он загружает данные о посещении на указанный день по сотруднику и позволяем их поменять.
  5. Метод определяет действие, которое должно быть выполнено при отправке формы, включая создание или обновление записи о посещении и отправку уведомления об успешном завершении.

Для вызова этого действия был добавлен метод createPresence

Этот метод:

  1. Находит пользователя по идентификатору.
  2. Если мы передали посещение, то находим его.
  3. Формируем выбранную дату в нужном формате.
  4. Если пользователь найден, выполняется действие createPresence с передачей идентификатора пользователя, полной датой и типом посещения в качестве аргумента.

Заключение

Используя Action API от Filament и реактивность Livewire, мы создали динамичную и удобную для пользователя систему учета времени. Такой подход позволяет взаимодействовать и проверять данные в режиме реального времени, улучшая общее впечатление пользователей.

Ключом к бесперебойной работе является передача идентификатора посещения из шаблона Blade в компонент Livewire, а затем использование этого идентификатора для запуска соответствующего действия с необходимым контекстом. Этот шаблон можно адаптировать для различных других сценариев, в которых необходимо запускать сложные действия на основе взаимодействия пользователя с конкретными элементами в списке или таблице.

Добавить комментарий