From 58991e42260a92fe305bab96747f61a8f956a3b9 Mon Sep 17 00:00:00 2001 From: Bivekich Date: Tue, 1 Jul 2025 22:24:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BE=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D1=83=D0=BB=D1=83=D1=87?= =?UTF-8?q?=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B8=20=D0=B3=D1=80=D1=83=D0=BF=D0=BF=20?= =?UTF-8?q?=D0=B1=D1=8B=D1=81=D1=82=D1=80=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B8=D1=81=D0=BA=D0=B0=20=D0=B8=20=D0=B4=D0=B5=D1=82=D0=B0?= =?UTF-8?q?=D0=BB=D0=B5=D0=B9=20=D1=83=D0=B7=D0=BB=D0=BE=D0=B2.=20=D0=92?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B2=20=D0=BB=D0=BE=D0=B3?= =?UTF-8?q?=D0=B8=D0=BA=D1=83=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=B0=D1=82?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=D1=80=D0=B8=D0=B9=20=D0=B2=20VinCategory=20?= =?UTF-8?q?=D0=B8=20VinLeftbar,=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=8F=D1=81?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8.=20=D0=98=D1=81=D0=BF=D1=80?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B=20=D1=83=D1=81=D0=BB=D0=BE?= =?UTF-8?q?=D0=B2=D0=B8=D1=8F=20=D0=BF=D1=80=D0=BE=D0=BF=D1=83=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=BE=D0=B2=20?= =?UTF-8?q?=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D1=82=D0=B8=D0=BF=D1=8B=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20SSD=20=D1=83=D0=B7?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/QuickGroupsSection.tsx | 21 +- src/components/vin/VinCategory.tsx | 44 ++- src/components/vin/VinLeftbar.tsx | 330 +++++++----------- src/components/vin/VinQuick.tsx | 4 +- .../vehicle-search/[brand]/[vehicleId].tsx | 73 ++-- src/types/laximo.ts | 2 + 6 files changed, 218 insertions(+), 256 deletions(-) diff --git a/src/components/QuickGroupsSection.tsx b/src/components/QuickGroupsSection.tsx index 85afa4b..525c2e8 100644 --- a/src/components/QuickGroupsSection.tsx +++ b/src/components/QuickGroupsSection.tsx @@ -25,9 +25,17 @@ const QuickGroupItem: React.FC = ({ group, level, onGroupCl const handleGroupClick = () => { if (canShowDetails) { + // Если это конечная группа с поиском деталей - переходим к просмотру деталей onGroupClick(group); } else if (hasChildren) { + // Если это родительская группа с подгруппами + if (group.children?.some(child => child.link)) { + // Есть подгруппы с активным поиском - показываем пользователю выбор + setIsExpanded(!isExpanded); + } else { + // Все подгруппы неактивны - просто разворачиваем setIsExpanded(!isExpanded); + } } }; @@ -69,6 +77,11 @@ const QuickGroupItem: React.FC = ({ group, level, onGroupCl Доступен поиск )} + {hasChildren && !canShowDetails && ( + + {group.children?.filter(child => child.link).length || 0} подгрупп + + )}

@@ -143,8 +156,10 @@ const QuickDetailSection: React.FC = ({ }; const handleUnitClick = (unit: LaximoUnit) => { - console.log('🔍 Выбран узел для детального просмотра:', unit.name, 'ID:', unit.unitid); - setSelectedUnit(unit); + setSelectedUnit({ + ...unit, + ssd: unit.ssd || ssd // Сохраняем правильный SSD в selectedUnit + }); }; const handleBackFromUnit = () => { @@ -198,7 +213,7 @@ const QuickDetailSection: React.FC = ({ = ({ catalogCode, vehicleId, ssd, setSelectedCategory(null); }, [activeTab]); - // Запрос для "Узлы" - const { data: categoriesData, loading: categoriesLoading, error: categoriesError } = useQuery(GET_LAXIMO_CATEGORIES, { + // Запрос для "Общие" (QuickGroups) + const { data: quickGroupsData, loading: quickGroupsLoading, error: quickGroupsError } = useQuery(GET_LAXIMO_QUICK_GROUPS, { variables: { catalogCode: catalogCode || '', vehicleId: vehicleId || '', ssd: ssd || '' }, skip: !catalogCode || !vehicleId || activeTab !== 'uzly', errorPolicy: 'all' }); - // Запрос для получения units (подкатегорий) в режиме "Узлы" + // Запрос для "От производителя" (Categories) + const { data: categoriesData, loading: categoriesLoading, error: categoriesError } = useQuery(GET_LAXIMO_CATEGORIES, { + variables: { catalogCode: catalogCode || '', vehicleId: vehicleId || '', ssd: ssd || '' }, + skip: !catalogCode || !vehicleId || activeTab !== 'manufacturer', + errorPolicy: 'all' + }); + + // Запрос для получения units (подкатегорий) в режиме "От производителя" const [getUnits] = useLazyQuery(GET_LAXIMO_UNITS, { onCompleted: (data) => { - console.log('Units loaded:', data); if (data && data.laximoUnits && lastCategoryIdRef.current) { - console.log('Setting units for category:', lastCategoryIdRef.current, data.laximoUnits); setUnitsByCategory(prev => ({ ...prev, [lastCategoryIdRef.current!]: data.laximoUnits || [] @@ -46,16 +51,9 @@ const VinCategory: React.FC = ({ catalogCode, vehicleId, ssd, } }); - // Запрос для "От производителя" - const { data: quickGroupsData, loading: quickGroupsLoading, error: quickGroupsError } = useQuery(GET_LAXIMO_QUICK_GROUPS, { - variables: { catalogCode: catalogCode || '', vehicleId: vehicleId || '', ssd: ssd || '' }, - skip: !catalogCode || !vehicleId || activeTab !== 'manufacturer', - errorPolicy: 'all' - }); - - const categories = activeTab === 'uzly' ? (categoriesData?.laximoCategories || []) : (quickGroupsData?.laximoQuickGroups || []); - const loading = activeTab === 'uzly' ? categoriesLoading : quickGroupsLoading; - const error = activeTab === 'uzly' ? categoriesError : quickGroupsError; + const categories = activeTab === 'uzly' ? (quickGroupsData?.laximoQuickGroups || []) : (categoriesData?.laximoCategories || []); + const loading = activeTab === 'uzly' ? quickGroupsLoading : categoriesLoading; + const error = activeTab === 'uzly' ? quickGroupsError : categoriesError; const handleBack = () => { setSelectedCategory(null); @@ -68,7 +66,8 @@ const VinCategory: React.FC = ({ catalogCode, vehicleId, ssd, return; } - if (activeTab === 'manufacturer') { + if (activeTab === 'uzly') { + // Логика для вкладки "Общие" (QuickGroups) if (category.children && category.children.length > 0) { setSelectedCategory(category); } else if (category.link && onQuickGroupSelect) { @@ -77,7 +76,7 @@ const VinCategory: React.FC = ({ catalogCode, vehicleId, ssd, onNodeSelect(category); } } else { - // Логика для вкладки "Узлы" + // Логика для вкладки "От производителя" (Categories) if (category.children && category.children.length > 0) { setSelectedCategory(category); } else { @@ -85,7 +84,6 @@ const VinCategory: React.FC = ({ catalogCode, vehicleId, ssd, const categoryId = category.categoryid || category.quickgroupid || category.id; if (!unitsByCategory[categoryId] && catalogCode && vehicleId) { lastCategoryIdRef.current = categoryId; - console.log('Loading units for category:', { categoryId, category }); getUnits({ variables: { catalogCode, @@ -101,8 +99,8 @@ const VinCategory: React.FC = ({ catalogCode, vehicleId, ssd, }; const handleSubcategoryClick = (subcat: any) => { - if (activeTab === 'uzly' && onNodeSelect) { - // Для режима "Узлы" при клике на подкатегорию открываем KnotIn + if (activeTab === 'manufacturer' && onNodeSelect) { + // Для режима "От производителя" при клике на подкатегорию открываем KnotIn onNodeSelect({ ...subcat, unitid: subcat.unitid || subcat.categoryid || subcat.quickgroupid || subcat.id @@ -130,11 +128,11 @@ const VinCategory: React.FC = ({ catalogCode, vehicleId, ssd, // Определяем, какие подкатегории показывать let subcategories: any[] = []; if (selectedCategory) { - if (activeTab === 'manufacturer') { - // Для вкладки "От производителя" используем children + if (activeTab === 'uzly') { + // Для вкладки "Общие" используем children subcategories = selectedCategory.children || []; } else { - // Для вкладки "Узлы" используем либо children, либо units + // Для вкладки "От производителя" используем либо children, либо units if (selectedCategory.children && selectedCategory.children.length > 0) { subcategories = selectedCategory.children; } else { diff --git a/src/components/vin/VinLeftbar.tsx b/src/components/vin/VinLeftbar.tsx index 5b20582..95c5aed 100644 --- a/src/components/vin/VinLeftbar.tsx +++ b/src/components/vin/VinLeftbar.tsx @@ -73,7 +73,6 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o console.error('SSD обязателен для поиска по названию'); return; } - console.log('SEARCH PARAMS', { catalogCode, vehicleId, searchQuery: searchQuery.trim(), ssd }); executeSearch({ variables: { catalogCode, @@ -102,7 +101,7 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o query: searchQuery }); } - }, [searchResults, loading, error, searchQuery, onSearchResults]); + }, [searchResults, loading, error, searchQuery]); // --- Новый блок: вычисляем доступность поиска --- const isSearchAvailable = !!catalogCode && vehicleId !== undefined && vehicleId !== null && !!ssd && ssd.trim() !== ''; @@ -112,10 +111,9 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o const showTips = isSearchAvailable && !searchQuery.trim() && !loading; // --- QuickGroups (от производителя) --- - const [selectedQuickGroup, setSelectedQuickGroup] = useState(null); const { data: quickGroupsData, loading: quickGroupsLoading, error: quickGroupsError } = useQuery(GET_LAXIMO_QUICK_GROUPS, { variables: { catalogCode, vehicleId, ssd }, - skip: !catalogCode || vehicleId === undefined || vehicleId === null || activeTab !== 'manufacturer', + skip: !catalogCode || vehicleId === undefined || vehicleId === null, errorPolicy: 'all' }); const quickGroups = quickGroupsData?.laximoQuickGroups || []; @@ -136,57 +134,15 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o const handleQuickGroupClick = (group: any) => { if (group.link) { - setSelectedQuickGroup(group); + // Передаем выбранную группу в родительский компонент для отображения справа + if (onQuickGroupSelect) { + onQuickGroupSelect(group); + } } else { handleQuickGroupToggle(group.quickgroupid); } }; - // Детали выбранной группы (если link: true) - console.log('QuickDetail QUERY VARS', { - catalogCode, - vehicleId, - quickGroupId: selectedQuickGroup?.quickgroupid, - ssd - }); - - const skipQuickDetail = - !selectedQuickGroup || - !catalogCode || - vehicleId === undefined || - vehicleId === null || - !selectedQuickGroup?.quickgroupid || - !ssd || - ssd.trim() === ''; - - console.log('QuickDetail QUERY VARS', { - catalogCode, - vehicleId, - quickGroupId: selectedQuickGroup?.quickgroupid, - ssd: ssd ? `${ssd.substring(0, 30)}...` : 'отсутствует' - }); - - console.log('QuickDetail SKIP CONDITIONS', { - hasSelectedQuickGroup: !!selectedQuickGroup, - hasCatalogCode: !!catalogCode, - hasVehicleId: vehicleId !== undefined && vehicleId !== null, - hasQuickGroupId: !!selectedQuickGroup?.quickgroupid, - hasSsd: !!ssd && ssd.trim() !== '', - skipQuickDetail - }); - - const { data: quickDetailData, loading: quickDetailLoading, error: quickDetailError } = useQuery(GET_LAXIMO_QUICK_DETAIL, { - variables: selectedQuickGroup?.quickgroupid && !skipQuickDetail ? { - catalogCode, - vehicleId, - quickGroupId: selectedQuickGroup.quickgroupid, - ssd - } : undefined, - skip: skipQuickDetail, - errorPolicy: 'all' - }); - const quickDetail = quickDetailData?.laximoQuickDetail; - // === Полнотекстовый поиск деталей (аналогично FulltextSearchSection) === const [fulltextQuery, setFulltextQuery] = useState(''); const [executeFulltextSearch, { data: fulltextData, loading: fulltextLoading, error: fulltextError }] = useLazyQuery(GET_LAXIMO_FULLTEXT_SEARCH, { errorPolicy: 'all' }); @@ -243,7 +199,7 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o isSearching: true }); } - }, [fulltextData, fulltextLoading, fulltextError, onSearchResults]); + }, [fulltextData, fulltextLoading, fulltextError, fulltextQuery]); const handleFulltextKeyDown = (e: React.KeyboardEvent) => { if (e.key === 'Enter') { @@ -258,7 +214,7 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o if (onActiveTabChange) { onActiveTabChange(activeTab); } - }, [activeTab, onActiveTabChange]); + }, [activeTab]); // Если нет данных о транспортном средстве, показываем заглушку if (!vehicleInfo) { @@ -336,9 +292,13 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o e.preventDefault(); if (searchQuery) setSearchQuery(''); setActiveTab('uzly'); + // Очищаем выбранную группу при смене таба + if (onQuickGroupSelect) { + onQuickGroupSelect(null); + } }} > - Узлы + Общие = ({ vehicleInfo, onSearchResults, o e.preventDefault(); if (searchQuery) setSearchQuery(''); setActiveTab('manufacturer'); + // Очищаем выбранную группу при смене таба + if (onQuickGroupSelect) { + onQuickGroupSelect(null); + } }} > От производителя @@ -360,6 +324,112 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o {/* Tab content start */} {activeTab === 'uzly' ? ( + // Общие (QuickGroups - бывшие "От производителя") + quickGroupsLoading ? ( +
Загружаем группы быстрого поиска...
+ ) : quickGroupsError ? ( +
Ошибка загрузки групп: {quickGroupsError.message}
+ ) : ( + <> + {(quickGroups as QuickGroup[]).map((group: QuickGroup) => { + const hasChildren = group.children && group.children.length > 0; + const isOpen = expandedQuickGroups.has(group.quickgroupid); + + if (!hasChildren) { + return ( +
{ + e.preventDefault(); + handleQuickGroupClick(group); + }} + > + {group.name} + + ); + } + + return ( +
+
handleQuickGroupToggle(group.quickgroupid)} + style={{ cursor: "pointer" }} + > +
+
{group.name}
+
+ +
+ ); + })} + + + + ) + ) : ( + // От производителя (Categories - узлы) categoriesLoading ? (
Загружаем категории...
) : categoriesError ? ( @@ -415,160 +485,6 @@ const VinLeftbar: React.FC = ({ vehicleInfo, onSearchResults, o })} ) - ) : ( - // Manufacturer tab content (QuickGroups) - quickGroupsLoading ? ( -
Загружаем группы быстрого поиска...
- ) : quickGroupsError ? ( -
Ошибка загрузки групп: {quickGroupsError.message}
- ) : ( - <> - {(quickGroups as QuickGroup[]).map((group: QuickGroup) => { - const hasChildren = group.children && group.children.length > 0; - const isOpen = expandedQuickGroups.has(group.quickgroupid); - - if (!hasChildren) { - return ( - { - e.preventDefault(); - if (group.link && onQuickGroupSelect) { - onQuickGroupSelect(group); - } - }} - > - {group.name} - - ); - } - - return ( -
-
handleQuickGroupToggle(group.quickgroupid)} - style={{ cursor: "pointer" }} - > -
-
{group.name}
-
- -
- ); - })} - - {/* Quick Detail Modal */} - {selectedQuickGroup && ( -
-
-
-

{selectedQuickGroup.name}

- -
- - {quickDetailLoading ? ( -
Загружаем детали...
- ) : quickDetailError ? ( -
Ошибка загрузки деталей: {quickDetailError.message}
- ) : quickDetail?.units?.length > 0 ? ( -
- {quickDetail.units.map((unit: any) => ( -
-
{unit.name}
- {unit.details && unit.details.length > 0 && ( -
- {unit.details.map((detail: any) => ( -
- {detail.name} - - OEM: {detail.oem} - -
- ))} -
- )} -
- ))} -
- ) : ( -
Нет деталей для этой группы
- )} -
-
- )} - - ) )} {/* Tab content end */} diff --git a/src/components/vin/VinQuick.tsx b/src/components/vin/VinQuick.tsx index d92c377..209f4c8 100644 --- a/src/components/vin/VinQuick.tsx +++ b/src/components/vin/VinQuick.tsx @@ -24,6 +24,8 @@ const VinQuick: React.FC = ({ quickGroup, catalogCode, vehicleId, }); const quickDetail = data?.laximoQuickDetail; + + const [isBrandModalOpen, setIsBrandModalOpen] = useState(false); const [selectedDetail, setSelectedDetail] = useState(null); @@ -34,7 +36,7 @@ const VinQuick: React.FC = ({ quickGroup, catalogCode, vehicleId, name: unit.name, catalogCode, vehicleId, - ssd + ssd: unit.ssd || ssd // Используем SSD узла, а не родительский }); }; const handleDetailClick = (detail: any) => { diff --git a/src/pages/vehicle-search/[brand]/[vehicleId].tsx b/src/pages/vehicle-search/[brand]/[vehicleId].tsx index 82024ae..c03004e 100644 --- a/src/pages/vehicle-search/[brand]/[vehicleId].tsx +++ b/src/pages/vehicle-search/[brand]/[vehicleId].tsx @@ -46,7 +46,7 @@ const VehicleDetailsPage = () => { if (searchTypeParam === 'categories') { // В URL categories, но мы используем quickgroups для групп быстрого поиска defaultSearchType = 'quickgroups'; - console.log('🔄 URL содержит searchType=categories, интерпретируем как quickgroups (группы быстрого поиска)'); + } else if (searchTypeParam === 'quickgroups') { defaultSearchType = 'quickgroups'; } else if (searchTypeParam === 'fulltext') { @@ -109,27 +109,14 @@ const VehicleDetailsPage = () => { const storedSsd = localStorage.getItem(vehicleKey); if (storedSsd) { finalSsd = storedSsd; - console.log('🔧 SSD получен из localStorage, длина:', storedSsd.length); // НЕ ОЧИЩАЕМ SSD сразу, оставляем на случай перезагрузки страницы // localStorage.removeItem(vehicleKey); - } else { - console.log('⚠️ SSD не найден в localStorage, ключ:', vehicleKey); - console.log('🔍 Все ключи localStorage:', Object.keys(localStorage)); } } else if (ssdFromQuery && ssdFromQuery.trim() !== '') { finalSsd = ssdFromQuery; - console.log('🔧 SSD получен из URL'); } - console.log('🔍 Vehicle page params:', { - brand, - vehicleId, - useStorage, - ssdLengthFromUrl, - ssdFromQuery: ssdFromQuery ? `${ssdFromQuery.substring(0, 50)}...` : 'отсутствует', - finalSsd: finalSsd ? `${finalSsd.substring(0, 50)}...` : 'отсутствует', - ssdLength: finalSsd.length - }); + const { data: vehicleData, loading: vehicleLoading, error: vehicleError } = useQuery<{ laximoVehicleInfo: LaximoVehicleInfo }>( GET_LAXIMO_VEHICLE_INFO, @@ -141,9 +128,56 @@ const VehicleDetailsPage = () => { localized: true }, skip: !brand || vehicleId === undefined || vehicleId === null, - errorPolicy: 'all' + errorPolicy: 'all', + onCompleted: (data) => { + console.log('🔍 VehicleInfo GraphQL completed:', { + requestedVehicleId: vehicleId, + returnedVehicleId: data?.laximoVehicleInfo?.vehicleid, + vehicleName: data?.laximoVehicleInfo?.name, + ssdUsed: finalSsd?.substring(0, 50) + '...', + fullData: data + }); + + if (data?.laximoVehicleInfo?.vehicleid !== vehicleId) { + console.log('🚨 ОБНАРУЖЕНО НЕСООТВЕТСТВИЕ VEHICLE ID!'); + console.log(`📍 URL vehicleId: ${vehicleId}`); + console.log(`📍 API vehicleId: ${data?.laximoVehicleInfo?.vehicleid}`); + } else { + console.log('✅ Vehicle ID соответствует URL'); + } + }, + onError: (error) => { + console.error('❌ VehicleInfo GraphQL error:', error); + } } ); + + // Автоматическое перенаправление на правильный vehicleId если API вернул другой ID + useEffect(() => { + if (vehicleData?.laximoVehicleInfo && vehicleData.laximoVehicleInfo.vehicleid !== vehicleId) { + const correctVehicleId = vehicleData.laximoVehicleInfo.vehicleid; + console.log(`🔄 Автоматическое перенаправление: ${vehicleId} -> ${correctVehicleId}`); + + // Обновляем localStorage с правильным ключом + if (finalSsd && typeof window !== 'undefined') { + const oldKey = `vehicle_ssd_${brand}_${vehicleId}`; + const newKey = `vehicle_ssd_${brand}_${correctVehicleId}`; + + // Перемещаем SSD на правильный ключ + localStorage.setItem(newKey, finalSsd); + localStorage.removeItem(oldKey); + console.log(`💾 SSD перемещен: ${oldKey} -> ${newKey}`); + } + + // Строим новый URL с правильным vehicleId + const currentParams = new URLSearchParams(window.location.search); + const newUrl = `/vehicle-search/${brand}/${correctVehicleId}?${currentParams.toString()}`; + + // Перенаправляем на правильный URL + router.replace(newUrl); + return; + } + }, [vehicleData, vehicleId, brand, finalSsd, router]); // Получаем детали выбранного узла, если он выбран const { @@ -249,12 +283,7 @@ const VehicleDetailsPage = () => { vehicleInfo = { ...vehicleInfo, vehicleid: fallbackVehicleId }; } - // Логируем, что реально передаём в VinLeftbar - console.log('Передаём в VinLeftbar:', { - catalog: vehicleInfo.catalog, - vehicleid: vehicleInfo.vehicleid, - ssd: vehicleInfo.ssd - }); + // Если нет данных автомобиля и есть ошибка, показываем предупреждение const hasError = vehicleError && !vehicleData?.laximoVehicleInfo; diff --git a/src/types/laximo.ts b/src/types/laximo.ts index 427a940..5ac703e 100644 --- a/src/types/laximo.ts +++ b/src/types/laximo.ts @@ -154,6 +154,7 @@ export interface LaximoUnit { description?: string imageurl?: string largeimageurl?: string + ssd?: string // 🎯 ДОБАВЛЕНИЕ: SSD для узла details?: LaximoDetail[] attributes?: LaximoDetailAttribute[] } @@ -279,6 +280,7 @@ export interface LaximoUnitInfo { description?: string imageurl?: string largeimageurl?: string + ssd?: string // 🎯 ДОБАВЛЕНИЕ: SSD для узла attributes?: LaximoDetailAttribute[] }