# Posts Form Components Guide ## Структура компонентов Posts/Form.vue (1284 строки) разбит на переиспользуемые подкомпоненты: ``` Posts/Components/ ├── PostMainInfo.vue # Заголовок, slug, статус, категория ├── PostTagsAuthors.vue # Теги и авторы └── PostPublishSettings.vue # Настройки публикации и соцсети ``` ## Как использовать ### 1. PostMainInfo.vue Основная информация о посте. ```vue ``` **Props:** - `title` - заголовок новости - `slug` - URL-адрес - `status` - статус публикации - `categoryId` - ID категории - `categories` - массив категорий - `statusOptions` - массив опций статуса - `errors` - объект ошибок валидации - `inputClass` - CSS классы для инпутов **Events:** - `update:title` - обновление заголовка - `update:slug` - обновление slug - `update:status` - обновление статуса - `update:categoryId` - обновление категории - `generate-slug` - генерация slug из заголовка --- ### 2. PostTagsAuthors.vue Управление тегами и авторами. ```vue ``` **Props:** - `tags` - массив тегов - `authors` - массив авторов **Events:** - `add-tag` - добавить тег - `remove-tag` - удалить тег по индексу - `add-author` - добавить автора - `remove-author` - удалить автора по индексу --- ### 3. PostPublishSettings.vue Настройки публикации и социальных сетей. ```vue ``` **Props:** - `publishAfter` - флаг отложенной публикации - `publishAt` - дата/время публикации - `publishVk` - публикация ВКонтакте - `errors` - объект ошибок валидации - `inputClass` - CSS классы для инпутов **Events:** - `update:publishAfter` - обновление флага отложенной публикации - `update:publishAt` - обновление даты/времени - `update:publishVk` - обновление флага VK --- ## Пример интеграции в Form.vue ### BEFORE (монолитный подход): ```vue
``` ### AFTER (компонентный подход): ```vue ``` --- ## Преимущества рефакторинга ### До: - **1284 строки** в одном файле - Сложно искать и отлаживать - Невозможно переиспользовать - Долгая загрузка ### После: - **~300-400 строк** в Form.vue (только логика) - **3 переиспользуемых компонента** (~150 строк каждый) - Легко тестировать изолированно - Можно использовать в других формах (например, редактирование новостей) - Улучшенная читаемость --- ## Следующие шаги 1. **Заменить в Form.vue** использование этих компонентов 2. **Создать дополнительные компоненты:** - `PostContentBuilder.vue` - конструктор контента - `PostMediaUploader.vue` - загрузка медиа - `PostSliderConfig.vue` - настройка слайдера 3. **Протестировать** все сценарии создания/редактирования