feat: simplify navigation and add RU/EN home and contacts
- simplify main navigation and hide extra menu items - make home page more sales-focused with updated hero, benefits and fleet teaser - add RU/EN handling for home and contacts, including SEO defaults - integrate basic Strapi homepage API client (no breaking changes) - update contacts page with messenger buttons and dynamic footer year Made-with: Cursor
This commit is contained in:
@@ -1,8 +1,11 @@
|
||||
import React, { useState } from 'react';
|
||||
import PageHeader from '../components/PageHeader';
|
||||
import { ChevronLeft, ChevronRight } from 'lucide-react';
|
||||
import { useLocation } from 'react-router-dom';
|
||||
|
||||
const FleetPage: React.FC = () => {
|
||||
const location = useLocation();
|
||||
const isEnglish = location.pathname.startsWith('/en');
|
||||
const [currentImageIndex, setCurrentImageIndex] = useState(0);
|
||||
|
||||
// Список всех фотографий из папки cars
|
||||
@@ -70,8 +73,12 @@ const FleetPage: React.FC = () => {
|
||||
return (
|
||||
<div className="bg-white pb-20">
|
||||
<PageHeader
|
||||
title="Автопарк"
|
||||
description="Современная техника для выполнения работ любой сложности"
|
||||
title={isEnglish ? 'Fleet' : 'Автопарк'}
|
||||
description={
|
||||
isEnglish
|
||||
? 'Modern equipment for projects of any complexity.'
|
||||
: 'Современная техника для выполнения работ любой сложности'
|
||||
}
|
||||
image="/media/images/headers/header-fleet.png"
|
||||
/>
|
||||
|
||||
@@ -79,7 +86,7 @@ const FleetPage: React.FC = () => {
|
||||
{/* Карусель фотографий */}
|
||||
<div className="mb-20">
|
||||
<h2 className="text-3xl font-bold text-gray-900 mb-8 text-center">
|
||||
Галерея техники
|
||||
{isEnglish ? 'Equipment gallery' : 'Галерея техники'}
|
||||
</h2>
|
||||
|
||||
<div className="relative max-w-5xl mx-auto">
|
||||
@@ -87,7 +94,11 @@ const FleetPage: React.FC = () => {
|
||||
<div className="relative aspect-[16/9] rounded-2xl overflow-hidden bg-gray-100">
|
||||
<img
|
||||
src={carImages[currentImageIndex]}
|
||||
alt={`Транспортное средство ${currentImageIndex + 1}`}
|
||||
alt={
|
||||
isEnglish
|
||||
? `Vehicle ${currentImageIndex + 1}`
|
||||
: `Транспортное средство ${currentImageIndex + 1}`
|
||||
}
|
||||
className="w-full h-full object-cover"
|
||||
/>
|
||||
|
||||
@@ -95,7 +106,7 @@ const FleetPage: React.FC = () => {
|
||||
<button
|
||||
onClick={prevImage}
|
||||
className="absolute left-4 top-1/2 -translate-y-1/2 bg-white/90 hover:bg-white p-3 rounded-full shadow-lg transition-all duration-300 group"
|
||||
aria-label="Предыдущее фото"
|
||||
aria-label={isEnglish ? 'Previous photo' : 'Предыдущее фото'}
|
||||
>
|
||||
<ChevronLeft size={24} className="text-brand-orange" />
|
||||
</button>
|
||||
@@ -103,7 +114,7 @@ const FleetPage: React.FC = () => {
|
||||
<button
|
||||
onClick={nextImage}
|
||||
className="absolute right-4 top-1/2 -translate-y-1/2 bg-white/90 hover:bg-white p-3 rounded-full shadow-lg transition-all duration-300 group"
|
||||
aria-label="Следующее фото"
|
||||
aria-label={isEnglish ? 'Next photo' : 'Следующее фото'}
|
||||
>
|
||||
<ChevronRight size={24} className="text-brand-orange" />
|
||||
</button>
|
||||
@@ -128,7 +139,7 @@ const FleetPage: React.FC = () => {
|
||||
>
|
||||
<img
|
||||
src={image}
|
||||
alt={`Миниатюра ${index + 1}`}
|
||||
alt={isEnglish ? `Thumbnail ${index + 1}` : `Миниатюра ${index + 1}`}
|
||||
className="w-full h-full object-cover"
|
||||
/>
|
||||
</button>
|
||||
@@ -140,7 +151,9 @@ const FleetPage: React.FC = () => {
|
||||
{/* Список транспортных средств */}
|
||||
<div className="max-w-6xl mx-auto">
|
||||
<h2 className="text-3xl font-bold text-gray-900 mb-8 text-center">
|
||||
Список транспортных средств ООО «ГЕОВЕКТОР»
|
||||
{isEnglish
|
||||
? 'List of vehicles of GeoVector LLC'
|
||||
: 'Список транспортных средств ООО «ГЕОВЕКТОР»'}
|
||||
</h2>
|
||||
|
||||
<div className="overflow-x-auto shadow-lg rounded-2xl">
|
||||
@@ -148,8 +161,12 @@ const FleetPage: React.FC = () => {
|
||||
<thead>
|
||||
<tr className="bg-brand-orange text-white">
|
||||
<th className="px-6 py-4 text-left font-bold w-20">№</th>
|
||||
<th className="px-6 py-4 text-left font-bold">Тип авто</th>
|
||||
<th className="px-6 py-4 text-left font-bold">Марка машины</th>
|
||||
<th className="px-6 py-4 text-left font-bold">
|
||||
{isEnglish ? 'Vehicle type' : 'Тип авто'}
|
||||
</th>
|
||||
<th className="px-6 py-4 text-left font-bold">
|
||||
{isEnglish ? 'Make/model' : 'Марка машины'}
|
||||
</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -164,7 +181,42 @@ const FleetPage: React.FC = () => {
|
||||
{index + 1}
|
||||
</td>
|
||||
<td className="px-6 py-4 text-gray-700">
|
||||
{vehicle.type || ''}
|
||||
{isEnglish
|
||||
? (() => {
|
||||
switch (vehicle.type) {
|
||||
case 'Установка разведочного бурения':
|
||||
return 'Exploration drilling rig';
|
||||
case 'Специальное пассажирское ТС':
|
||||
return 'Special-purpose passenger vehicle';
|
||||
case 'Грузовой бортовой':
|
||||
return 'Flatbed truck';
|
||||
case 'УБШМ 1.20':
|
||||
return 'UBShM 1.20 (drilling support vehicle)';
|
||||
case 'Грузовое ТС, Фермер грузопассажирский УБШМ 1-13':
|
||||
return 'Cargo vehicle, UBShM 1-13 crew cab (cargo-passenger)';
|
||||
case 'Грузовой фургон':
|
||||
return 'Box truck / cargo van';
|
||||
case 'Установка разведочного бурения УРБ-2Д3':
|
||||
return 'Exploration drilling rig URB-2D3';
|
||||
case 'Седельный тягач':
|
||||
return 'Tractor unit / semi-trailer truck';
|
||||
case 'Полуприцеп низкорамный трал':
|
||||
return 'Low-bed semi-trailer (lowboy)';
|
||||
case 'Снегоход':
|
||||
return 'Snowmobile';
|
||||
case 'Прицеп для перевозки водной техники, грузов':
|
||||
return 'Trailer for watercraft and cargo';
|
||||
case 'Специальная установка каротажной станции СК 1-74-II':
|
||||
return 'Special logging station unit SK 1-74-II';
|
||||
case 'Фермер грузопассажирский УБШМ 1-13':
|
||||
return 'UBShM 1-13 crew cab (cargo-passenger)';
|
||||
case 'Болотовездеход':
|
||||
return 'Amphibious all-terrain vehicle';
|
||||
default:
|
||||
return vehicle.type || '';
|
||||
}
|
||||
})()
|
||||
: vehicle.type || ''}
|
||||
</td>
|
||||
<td className="px-6 py-4 font-semibold text-gray-900">
|
||||
{vehicle.brand}
|
||||
@@ -179,15 +231,21 @@ const FleetPage: React.FC = () => {
|
||||
<div className="mt-12 grid grid-cols-1 md:grid-cols-3 gap-6">
|
||||
<div className="bg-brand-orange text-white rounded-2xl p-6 text-center">
|
||||
<div className="text-4xl font-bold mb-2">{vehicles.length}</div>
|
||||
<div className="text-lg">Единиц техники</div>
|
||||
<div className="text-lg">
|
||||
{isEnglish ? 'Units of equipment' : 'Единиц техники'}
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-gray-900 text-white rounded-2xl p-6 text-center">
|
||||
<div className="text-4xl font-bold mb-2">{carImages.length}</div>
|
||||
<div className="text-lg">Фотографий</div>
|
||||
<div className="text-lg">
|
||||
{isEnglish ? 'Photos' : 'Фотографий'}
|
||||
</div>
|
||||
</div>
|
||||
<div className="bg-brand-orange text-white rounded-2xl p-6 text-center">
|
||||
<div className="text-4xl font-bold mb-2">24/7</div>
|
||||
<div className="text-lg">Готовность к работе</div>
|
||||
<div className="text-lg">
|
||||
{isEnglish ? 'Ready for work' : 'Готовность к работе'}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user