Add Info panel for catalog with tabbed interface

Implemented Info mode для детального просмотра объектов каталога (hub/supplier/offer) с навигацией между связанными объектами.

Новые компоненты:
- InfoPanel.vue - панель с детальной информацией и табами для связанных объектов
- useCatalogInfo.ts - composable для управления Info state и загрузки данных

Изменения:
- useCatalogSearch.ts - добавлен infoId state и функции openInfo/closeInfo
- catalog/index.vue - интеграция InfoPanel, обработчики событий, relatedPoints для карты
- CatalogPage.vue - проброс relatedPoints в CatalogMap
- CatalogMap.vue - related points layer (cyan circles) для отображения связанных объектов

Флоу:
1. Клик на чип → Selection → Выбор → Info открывается
2. Клик на карту → Info открывается напрямую
3. В Info показываются табы со связанными объектами (top-12)
4. Клик на связанный объект → навигация к его Info
5. Кнопка "Добавить в фильтр" - добавляет объект в chips

URL sharing: ?info=type:uuid для шаринга ссылок

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Ruslan Bakiev
2026-01-25 14:17:47 +07:00
parent 9b99d8981c
commit 2ce3bd0bd2
6 changed files with 882 additions and 12 deletions

View File

@@ -23,6 +23,7 @@
:entity-type="activeEntityType"
:hovered-item-id="hoveredId"
:hovered-item="hoveredItem"
:related-points="relatedPoints"
@select-item="onMapSelect"
@bounds-change="onBoundsChange"
/>
@@ -210,6 +211,13 @@ const props = withDefaults(defineProps<{
items?: MapItem[]
showPanel?: boolean
filterByBounds?: boolean
relatedPoints?: Array<{
uuid: string
name: string
latitude: number
longitude: number
type: 'hub' | 'supplier' | 'offer'
}>
}>(), {
loading: false,
useServerClustering: true,
@@ -218,7 +226,8 @@ const props = withDefaults(defineProps<{
pointColor: '#f97316',
items: () => [],
showPanel: false,
filterByBounds: false
filterByBounds: false,
relatedPoints: () => []
})
const emit = defineEmits<{