# Компонент SuccessModal - Полная документация ## Назначение компонента `SuccessModal` - компонент модального окна для отображения успешных операций, подтверждений и уведомлений. Предоставляет стандартизированный интерфейс для информирования пользователя о успешном выполнении действий с возможностью кастомизации контента и поведения. ## git репозитарий https://gogs.osvoj.ru/s5l.ru/borbad.s5l.ru/src/master/vue/app/shared/SuccessModal/ ## Импорт и регистрация ```coffee # В основном файле приложения (app/temp.coffee) components: 'success-modal': require 'app/shared/SuccessModal' ``` ## Базовое использование ### 1. Простое модальное окно ```pug success-modal( :show="showSuccess" title="Операция выполнена" message="Данные успешно сохранены" @close="showSuccess = false" ) ``` ### 2. Модальное окно с кастомными действиями ```pug success-modal( :show="showSuccess" title="Заказ оформлен" message="Ваш заказ успешно создан и передан в обработку" @close="handleOrderSuccess" ) ``` ## Полный список props ### `show` (обязательный) - **Тип:** `Boolean` - **Описание:** Управляет видимостью модального окна - **Пример:** ```pug success-modal(:show="isModalVisible" @close="isModalVisible = false") ``` ### `title` (опциональный) - **Тип:** `String` - **По умолчанию:** `'Успешно!'` - **Описание:** Заголовок модального окна - **Пример:** ```pug success-modal(:show="showModal" title="Профиль обновлен") ``` ### `message` (опциональный) - **Тип:** `String` - **По умолчанию:** `''` - **Описание:** Основное сообщение модального окна - **Пример:** ```pug success-modal( :show="showModal" message="Изменения успешно сохранены и применены к вашему профилю" ) ``` ### `buttonText` (опциональный) - **Тип:** `String` - **По умолчанию:** `'Понятно'` - **Описание:** Текст на кнопке подтверждения - **Пример:** ```pug success-modal(:show="showModal" buttonText="Отлично!") ``` ### `icon` (опциональный) - **Тип:** `String` - **По умолчанию:** `'check-circle'` - **Описание:** Название иконки для отображения - **Допустимые значения:** Любое название иконки из используемой иконной библиотеки - **Пример:** ```pug success-modal(:show="showModal" icon="check") ``` ### `size` (опциональный) - **Тип:** `String` - **По умолчанию:** `'md'` - **Описание:** Размер модального окна - **Допустимые значения:** `'sm'`, `'md'`, `'lg'`, `'xl'` - **Пример:** ```pug success-modal(:show="showModal" size="lg") ``` ### `closeOnBackdrop` (опциональный) - **Тип:** `Boolean` - **По умолчанию:** `true` - **Описание:** Закрывать ли модальное окно при клике на бэкдроп - **Пример:** ```pug success-modal(:show="showModal" :closeOnBackdrop="false") ``` ### `showCloseButton` (опциональный) - **Тип:** `Boolean` - **По умолчанию:** `true` - **Описание:** Показывать ли кнопку закрытия в заголовке - **Пример:** ```pug success-modal(:show="showModal" :showCloseButton="false") ``` ### `autoClose` (опциональный) - **Тип:** `Boolean | Number` - **По умолчанию:** `false` - **Описание:** Автоматическое закрытие модального окна. Если `true` - 3000ms, если число - указанное время в ms - **Примеры:** ```pug success-modal(:show="showModal" :autoClose="true") // Закроется через 3 секунды success-modal(:show="showModal" :autoClose="5000") // Закроется через 5 секунд ``` ## События (Events) ### `@close` - **Описание:** Событие закрытия модального окна - **Payload:** `null` - **Когда вызывается:** - Клик на кнопку закрытия - Клик на бэкдроп (если `closeOnBackdrop = true`) - Нажатие клавиши ESC - Автоматическое закрытие (если `autoClose` включен) - **Пример:** ```pug success-modal(:show="showModal" @close="handleModalClose") ``` ### `@confirm` - **Описание:** Событие подтверждения (клик на основную кнопку) - **Payload:** `null` - **Пример:** ```pug success-modal(:show="showModal" @confirm="handleSuccessAction") ``` ## Слоты (Slots) ### `[body]` (основной слот) - **Описание:** Кастомное содержимое модального окна вместо стандартного message - **Примеры:** ```pug success-modal(:show="showModal" title="Заказ оформлен") div(class="space-y-4") p Ваш заказ №{{ orderId }} успешно создан div(class="bg-gray-50 p-4 rounded") h4(class="font-semibold") Детали заказа: p Сумма: {{ orderAmount }} TJS p Статус: В обработке ``` ### `[icon]` (опциональный) - **Описание:** Кастомная иконка вместо стандартной - **Пример:** ```pug success-modal(:show="showModal") template([icon]) div(class="w-16 h-16 bg-green-100 rounded-full flex items-center justify-center") icon(name="trophy" class="w-8 h-8 text-green-600") ``` ### `[actions]` (опциональный) - **Описание:** Кастомные действия вместо стандартной кнопки - **Пример:** ```pug success-modal(:show="showModal" title="Заказ создан") template([actions]) div(class="flex space-x-3") button( @click="$emit('close')" class="px-4 py-2 border border-gray-300 rounded hover:bg-gray-50" ) Закрыть app-link( to="/orders" class="app-link--primary" ) Перейти к заказам app-link( to="/products" class="app-link--secondary" ) Продолжить покупки ``` ## Примеры использования в различных сценариях ### 1. Успешное создание заказа ```pug success-modal( :show="orderSuccess" title="Заказ оформлен!" message="Ваш заказ успешно создан. Номер заказа: #12345" icon="shopping-bag" @close="handleOrderSuccessClose" ) ``` ### 2. Успешная регистрация ```pug success-modal( :show="registrationSuccess" title="Добро пожаловать!" message="Регистрация завершена успешно. На ваш email отправлено письмо с подтверждением." buttonText="Начать" @confirm="redirectToDashboard" ) ``` ### 3. Успешное сохранение настроек ```pug success-modal( :show="settingsSaved" title="Настройки сохранены" message="Изменения в настройках профиля успешно применены" autoClose="2000" @close="resetSettingsState" ) ``` ### 4. Кастомное модальное окно с дополнительной информацией ```pug success-modal( :show="showCustomSuccess" title="Билеты забронированы" size="lg" ) div(class="space-y-4") p(class="text-lg") Ваши билеты успешно забронированы! div(class="bg-blue-50 border border-blue-200 rounded-lg p-4") h4(class="font-semibold text-blue-900 mb-2") Важная информация: ul(class="list-disc list-inside space-y-1 text-blue-800") li Сохраните QR-код из письма li Приходите за 30 минут до начала li Иметь при себе документ, удостоверяющий личность p(class="text-sm text-gray-600") Подробности отправлены на ваш email template([actions]) div(class="flex flex-col sm:flex-row gap-3") button( @click="$emit('close')" class="px-6 py-3 border border-gray-300 rounded-lg hover:bg-gray-50 flex-1" ) Закрыть app-link( to="/tickets" class="app-link--primary text-center flex-1" ) Мои билеты ``` ### 5. Модальное окно с автоматическим закрытием ```pug success-modal( :show="showAutoClose" title="Форма отправлена" message="Ваше сообщение успешно отправлено. Мы свяжемся с вами в ближайшее время." autoClose="4000" @close="resetContactForm" ) ``` ### 6. Модальное окно без возможности закрытия ```pug success-modal( :show="processingComplete" title="Обработка завершена" message="Все данные успешно обработаны и сохранены в системе." :closeOnBackdrop="false" :showCloseButton="false" @confirm="redirectToNextStep" ) ``` ## Интеграция с глобальным состоянием приложения ### Использование через EventBus ```coffee # В компоненте methods: showSuccessModal: (title, message) -> EventBus.emit('show_success_modal', { title, message }) # В основном приложении (app/temp.coffee) EventBus.on 'show_success_modal', (data) -> _.openModal('success-modal', data) ``` ### Использование с глобальным modalState ```pug success-modal( :show="_.modalState.isVisible && _.modalState.component === 'success-modal'" :title="_.modalState.props.title" :message="_.modalState.props.message" @close="_.closeModal()" ) ``` ## Стили и кастомизация ### Размеры модального окна ```pug //- Маленький (sm) success-modal(:show="showModal" size="sm") //- Средний (md) - по умолчанию success-modal(:show="showModal" size="md") //- Большой (lg) success-modal(:show="showModal" size="lg") //- Очень большой (xl) success-modal(:show="showModal" size="xl") ``` ### Кастомные CSS классы Компонент поддерживает стандартные классы Tailwind CSS для дополнительной стилизации: ```pug success-modal( :show="showModal" class="success-modal-custom" ) ``` ## Особенности поведения ### Управление фокусом - Автоматически фокусируется на кнопке подтверждения при открытии - Захватывает фокус внутри модального окна (accessibility) - Возвращает фокус предыдущему элементу при закрытии ### Обработка клавиатуры - **ESC** - закрывает модальное окно - **Enter** - активирует основную кнопку - **Tab** - циклическое перемещение по фокусируемым элементам внутри модального окна ### Анимации - Плавное появление и исчезновение - Анимация масштабирования - Затемнение фона с переходом ## Best Practices ### 1. Всегда обрабатывайте событие закрытия ```pug //- Правильно success-modal(:show="showModal" @close="showModal = false") //- Опасно (модальное окно не сможет закрыться) success-modal(:show="showModal") ``` ### 2. Используйте autoClose для временных уведомлений ```pug //- Для кратковременных сообщений success-modal( :show="showTempMessage" message="Настройки сохранены" autoClose="2000" @close="showTempMessage = false" ) ``` ### 3. Предоставляйте понятные заголовки и сообщения ```pug //- Хорошо success-modal( :show="showSuccess" title="Профиль обновлен" message="Изменения в вашем профиле успешно сохранены и применены" ) //- Плохо success-modal(:show="showSuccess" message="Успешно") ``` ### 4. Используйте слоты для сложного контента ```pug //- Вместо длинного message success-modal(:show="showComplex" title="Отчет готов") div(class="space-y-3") p Отчет успешно сгенерирован и содержит: ul(class="list-disc list-inside") li 25 записей о мероприятиях li Статистику посещаемости li Финансовые показатели p(class="text-sm text-gray-600") Файл доступен для скачивания в вашем кабинете ``` ### 5. Соответствуйте контексту действия ```pug //- Для финансовых операций success-modal( :show="paymentSuccess" title="Платеж выполнен" icon="credit-card" buttonText="Перейти к заказу" ) //- Для создания контента success-modal( :show="contentCreated" title="Материал опубликован" icon="edit" buttonText="Посмотреть" ) ``` ## Отладка и разработка ### Проверка состояния модального окна ```coffee # В методах компонента checkModalState: -> debug.log "Modal visible: "+@show debug.log "Modal title: "+@title debug.log "Modal message: "+@message ``` ### Отслеживание событий ```coffee # В основном приложении EventBus.on 'success_modal_closed', (data) -> debug.log "Success modal closed" EventBus.on 'success_modal_confirmed', (data) -> debug.log "Success modal confirmed" ``` Компонент SuccessModal предоставляет унифицированный и гибкий способ отображения успешных операций в приложении, обеспечивая согласованный пользовательский опыт и широкие возможности для кастомизации под конкретные сценарии использования.