# 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. **Протестировать** все сценарии создания/редактирования