Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программная инженерия. Курсовые / Вебтехнологии_Курсовая_Кларк.docx
Скачиваний:
0
Добавлен:
04.01.2026
Размер:
659.73 Кб
Скачать

5.2. Слой управления состоянием

5.2.1. Класс MedicalPortal

Назначение: Класс MedicalPortal является центральным управляющим компонентом клиентской части, инкапсулирующим всё состояние приложения, бизнес-логику и методы взаимодействия с пользовательским интерфейсом.

Структура состояния: Класс содержит ключевые свойства для хранения состояния, инициализируемые в конструкторе и обновляемые через различные методы:

· clinics и appointments — заполняются через loadData().

· cart — восстанавливается из localStorage и обновляется методами работы с корзиной.

· selectedAppointmentId — управляется через renderTimeSlots() и updateBookButtonState().

· currentDate — изменяется через обработчики календаря в setupEventListeners().

· myAppointments — загружается через loadMyAppointments().

Методы жизненного цикла:

· constructor() инициализирует состояние и запускает init().

· init() координирует начальную загрузку и настройку приложения, вызывая последовательно loadData(), setupEventListeners() и методы первичного рендеринга.

Принципы управления состоянием: Все изменения состояния происходят через методы класса, которые гарантируют согласованность данных и автоматическое обновление пользовательского интерфейса через соответствующие методы рендеринга.

5.2.2. Управление корзиной услуг (Cart State)

Назначение: Модуль управления корзиной отвечает за хранение, обновление, сохранение и восстановление выбранных пользователем медицинских услуг.

Структура данных корзины: Корзина реализована как объект, где ключами являются уникальные идентификаторы услуг. Состояние корзины сохраняется между сессиями.

Ключевые методы управления:

· addSelectedServiceToCart() — добавляет услугу из выпадающего списка.

· addCustomServiceToCart() — добавляет произвольную услугу через модальное окно, открываемое openAddServiceModal().

· persistCart() — сохраняет корзину в localStorage.

· updateCartDisplay() — перерисовывает интерфейс корзины, вызывается после любых изменений.

Механизм сохранения: для обеспечения сохранности данных между сессиями состояние корзины автоматически сохраняется через persistCart() при каждом изменении и восстанавливается при инициализации приложения в конструкторе класса.

5.2.3. Управление состоянием записи на приём

Назначение: Модуль управления записью отслеживает выбранные пользователем параметры и обеспечивает корректность и согласованность данных в процессе записи.

Логика зависимых выборов: Реализована цепочка обработчиков событий, установленных в setupEventListeners():

1. Выбор клиницы (изменение #clinic-select) запускает updateDoctorSelect() и clearTimeSlots().

2. Выбор врача (изменение #doctor-select) запускает renderTimeSlots().

3. Выбор временного слота (клик на .time-slot) активирует кнопку подтверждения через updateBookButtonState().

Процесс записи: Финальное действие — вызов bookAppointment(), который отправляет данные на сервер и, в случае успеха, обновляет состояние приложения через повторный вызов loadData() и других методов обновления интерфейса.

Удаление записи начинается с обработчиков кликов для всех кнопок с классом .my-appointment-delete внутри указанного контейнера. Для каждой кнопки добавляется асинхронный обработчик события click, который сначала показывает диалоговое окно подтверждения, — если пользователь нажимает "Отмена", выполнение прерывается. Затем формируется JSON для серверного запроса: id берётся из dataset.id кнопки (или null), а clinic_name, doctor и appointment_time — из соответствующих data-атрибутов кнопки. Далее выполняется асинхронный POST-запрос на /api/my_appointments/delete.