Appearance
Каталог компонентов
Компоненты организованы по слоям FSD (Feature-Sliced Design).
Shared
Общие UI-компоненты, не привязанные к бизнес-логике.
| Компонент | Файл | Описание |
|---|---|---|
SharedAppLogo | shared/ui/AppLogo.vue | Текстовый логотип "Partizap". Стилизованный <span> с классами text-xl font-bold text-primary. |
Авто-импорт
Компоненты из shared/ui/ регистрируются с префиксом Shared (SharedAppLogo). Остальные слои --- без префикса.
Entities
Компоненты отображения доменных сущностей. Не содержат бизнес-логики --- только отображение переданных данных.
product
| Компонент | Файл | Описание | Ключевые пропсы |
|---|---|---|---|
ProductCard | entities/product/ui/ProductCard.vue | Карточка товара: изображение, название, цена, кнопка чата, геолокация, избранное. | product, showStatus?, to? |
ProductStatusBadge | entities/product/ui/ProductStatusBadge.vue | Бейдж статуса объявления (draft/pending/active/sold/archived/rejected) через UBadge. | status |
conversation
| Компонент | Файл | Описание | Ключевые пропсы |
|---|---|---|---|
ConversationCard | entities/conversation/ui/ConversationCard.vue | Карточка диалога в списке сообщений: аватар собеседника, миниатюра товара, превью сообщения, время, бейдж непрочитанных. | conversation |
message
| Компонент | Файл | Описание | Ключевые пропсы |
|---|---|---|---|
MessageBubble | entities/message/ui/MessageBubble.vue | Пузырь сообщения в чате. Поддерживает текст, изображения, системные сообщения, статус загрузки, подсветку поиска. | message, isMine, showAvatar?, avatarUrl?, highlightQuery?, isCurrentMatch? |
MessageStatus | entities/message/ui/MessageStatus.vue | Иконка статуса отправки: одна галочка (sent), две серые (delivered), две синие (read). | status |
Features
Компоненты с бизнес-логикой, привязанные к конкретным пользовательским сценариям.
search
| Компонент | Файл | Описание |
|---|---|---|
SearchBar | features/search/ui/SearchBar.vue | Компактная строка поиска с автокомплитом для хедера. |
HeroSearchBar | features/search/ui/HeroSearchBar.vue | Крупная строка поиска для главной страницы. Пропсы: initialQuery?, navigateOnSubmit?. |
favorites
| Компонент | Файл | Описание |
|---|---|---|
FavoriteButton | features/favorites/ui/FavoriteButton.vue | Кнопка-сердечко для добавления/удаления из избранного. Пропс: productId. |
contact-seller
| Компонент | Файл | Описание |
|---|---|---|
ContactSellerButton | features/contact-seller/ui/ContactSellerButton.vue | Кнопка "Написать продавцу" --- создаёт/открывает диалог. Пропс: productId. |
geo-select
| Компонент | Файл | Описание |
|---|---|---|
CitySelector | features/geo-select/ui/CitySelector.vue | Кнопка выбора города в хедере + модалка с регионом и мультиселектом городов. |
GeoSelect | features/geo-select/ui/GeoSelect.vue | Каскадный селектор гео (Регион -> Город -> Район -> Метро) для форм. Emit: change. |
category-select
| Компонент | Файл | Описание |
|---|---|---|
CategoryCascadeSelect | features/category-select/ui/CategoryCascadeSelect.vue | Каскадный селектор категорий N уровней вложенности. v-model --- массив id. |
ymm-select
| Компонент | Файл | Описание |
|---|---|---|
YmmSelect | features/ymm-select/ui/YmmSelect.vue | Одна строка каскада Марка -> Модель -> Поколение -> Модификация. |
YmmMultiSelect | features/ymm-select/ui/YmmMultiSelect.vue | Мультиселект совместимости: несколько строк YmmSelect + кнопка добавления. v-model --- массив Compatibility. |
image-upload
| Компонент | Файл | Описание |
|---|---|---|
ImageUploader | features/image-upload/ui/ImageUploader.vue | Загрузчик фото: превью серверных и локальных изображений, индикация загрузки/ошибки, кнопка добавления. Пропсы: images, localImages, uploading, maxImages?, disabled?. |
product-form
| Компонент | Файл | Описание |
|---|---|---|
ProductFormPage | features/product-form/ui/ProductFormPage.vue | Полная форма создания/редактирования объявления. Пропсы: mode (create / edit), productId?. |
cabinet-settings
| Компонент | Файл | Описание |
|---|---|---|
SettingsTabs | features/cabinet-settings/ui/SettingsTabs.vue | Табы навигации настроек (Профиль, Безопасность, Бизнес). |
PhoneManager | features/cabinet-settings/ui/PhoneManager.vue | CRUD-управление телефонами: список, добавление, редактирование, удаление с подтверждением. |
chat-image
| Компонент | Файл | Описание |
|---|---|---|
ChatImageLightbox | features/chat-image/ui/ChatImageLightbox.vue | Полноэкранный просмотр изображений из чата с навигацией (стрелки, свайпы, клавиатура). Пропсы: images, initialIndex, open. |
chat-search
| Компонент | Файл | Описание |
|---|---|---|
ChatSearchBar | features/chat-search/ui/ChatSearchBar.vue | Строка поиска внутри диалога с навигацией по совпадениям. Пропсы: query, totalMatches, currentMatch, isSearching. |
GlobalSearchResults | features/chat-search/ui/GlobalSearchResults.vue | Результаты глобального поиска по чатам, сгруппированные по диалогам. Пропсы: grouped, query, isSearching, hasMore. |
admin-dashboard
| Компонент | Файл | Описание |
|---|---|---|
StatCard | features/admin-dashboard/ui/StatCard.vue | Карточка статистики для дашборда. Пропсы: title, value, subtitle?, icon?, to?. |
admin-moderation
| Компонент | Файл | Описание |
|---|---|---|
ModerationActions | features/admin-moderation/ui/ModerationActions.vue | Кнопки "Одобрить" / "Отклонить" для модерации товаров. Пропсы: productId, status, loading?. |
admin-references
| Компонент | Файл | Описание |
|---|---|---|
ReferenceList | features/admin-references/ui/ReferenceList.vue | Список элементов справочника с CRUD-операциями. Пропсы: title, items, selectedId?, selectable?, loading?. |
ReferenceFormModal | features/admin-references/ui/ReferenceFormModal.vue | Универсальная модалка создания/редактирования элемента справочника. Пропсы: open, title, fields, initialValues?, loading?. |
admin-users
| Компонент | Файл | Описание |
|---|---|---|
UserBlockAction | features/admin-users/ui/UserBlockAction.vue | Кнопка блокировки/разблокировки пользователя с модалкой подтверждения. Пропсы: userId, userName, isActive, loading?. |
Widgets
Композитные компоненты, собирающие несколько entity/feature-компонентов.
| Компонент | Файл | Описание |
|---|---|---|
AppHeader | widgets/header/ui/AppHeader.vue | Шапка приложения: лого, город, поиск, навигация (desktop/mobile), slideover-меню, модалка подтверждения выхода. |
ChatUnreadBadge | widgets/chat-unread-badge/ui/ChatUnreadBadge.vue | Кнопка чата с бейджем непрочитанных сообщений из chatStore. |
Заглушки виджетов
Директории widgets/catalog-filters/, widgets/footer/, widgets/product-list/, widgets/ymm-filter/ существуют, но пока не содержат компонентов.
Используемые компоненты Nuxt UI
Проект активно использует компоненты из Nuxt UI v3:
| Компонент | Применение |
|---|---|
UButton | Все кнопки, ссылки-кнопки |
UInput | Текстовые поля |
UTextarea | Многострочные поля |
USelectMenu | Выпадающие списки (каскадные селекторы, выбор телефона) |
UFormField | Обёртка поля формы (label + error) |
UModal | Модальные окна |
USlideover | Выдвижная панель (мобильное меню) |
UBadge | Бейджи (статус товара, основной телефон) |
UAlert | Уведомления в формах (ошибки, успех) |
UIcon | Иконки (Lucide, Heroicons) |
UAvatar | Аватарки пользователей в чате |
USwitch | Переключатели (режим комплекта, основной телефон) |
UCheckbox | Чекбоксы (в ReferenceFormModal) |
UTooltip | Подсказки (причина блокировки кнопки) |
USeparator | Разделители в мобильном меню |
UColorModeButton | Переключение светлой/тёмной темы |
UApp | Корневой компонент с локалью |