Gogs 3 weken geleden
bovenliggende
commit
e3d664bdc9
3 gewijzigde bestanden met toevoegingen van 446 en 1 verwijderingen
  1. 1 1
      README.md
  2. 3 0
      vue/app/shared/ModalWindow/README.md
  3. 442 0
      vue/app/shared/SuccessModal/README.md

+ 1 - 1
README.md

@@ -1,5 +1,5 @@
 # Текущая задача
-Опиши компонент для возможности использования в разработке: https://gogs.osvoj.ru/s5l.ru/borbad.s5l.ru/src/master/vue/app/shared/SuccessModal
+Опиши компонент для возможности использования в разработке: https://gogs.osvoj.ru/s5l.ru/borbad.s5l.ru/src/master/vue/app/shared/EventDetailModal
 сделай полное описание вех методов использования и взаимодействия. (в описание не дублируй листинги из репозитария)
 
 # файл с правилами

+ 3 - 0
vue/app/shared/ModalWindow/README.md

@@ -4,6 +4,9 @@
 
 `ModalWindow` - универсальный компонент для создания модальных окон (диалоговых окон) в приложении. Предоставляет функциональность для отображения контента поверх основного интерфейса с затемнением фона, анимациями и управлением через глобальную шину событий.
 
+## git репозитарий
+https://gogs.osvoj.ru/s5l.ru/borbad.s5l.ru/src/master/vue/app/shared/ModalWindow/
+
 ## Архитектура компонента
 
 ### Структура файлов

+ 442 - 0
vue/app/shared/SuccessModal/README.md

@@ -0,0 +1,442 @@
+# Компонент 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 предоставляет унифицированный и гибкий способ отображения успешных операций в приложении, обеспечивая согласованный пользовательский опыт и широкие возможности для кастомизации под конкретные сценарии использования.