Обновлены компоненты страницы: передан параметр selectedCity в компонент Hero, добавлены новые изображения для услуг в компоненте Services, исправлены данные о компании в компонентах About и Footer, обновлены контактные данные в компоненте Contacts, изменены описания в компоненте WhyUs. Также добавлено предупреждение о необходимости замены заглушек для изображений.

This commit is contained in:
Bivekich
2025-04-06 18:07:54 +03:00
parent 5705d70867
commit eea97a129f
18 changed files with 65 additions and 21 deletions

View File

@ -104,7 +104,7 @@ const About = () => {
</div> </div>
<div> <div>
<h3 className="text-xl font-semibold text-gray-900 mb-2"> <h3 className="text-xl font-semibold text-gray-900 mb-2">
Более 9 лет на рынке Более 11 лет на рынке
</h3> </h3>
<p className="text-gray-600"> <p className="text-gray-600">
Многолетний опыт работы позволяет нам решать задачи любой Многолетний опыт работы позволяет нам решать задачи любой
@ -211,20 +211,20 @@ const About = () => {
variants={containerVariants} variants={containerVariants}
> >
<motion.div className="text-center" variants={statsVariants}> <motion.div className="text-center" variants={statsVariants}>
<div className="text-4xl font-bold text-blue-700 mb-2">9+</div> <div className="text-4xl font-bold text-blue-700 mb-2">11+</div>
<div className="text-gray-600">лет опыта</div> <div className="text-gray-600">лет опыта</div>
</motion.div> </motion.div>
<motion.div className="text-center" variants={statsVariants}> <motion.div className="text-center" variants={statsVariants}>
<div className="text-4xl font-bold text-blue-700 mb-2">500+</div> <div className="text-4xl font-bold text-blue-700 mb-2">1500+</div>
<div className="text-gray-600">проектов</div> <div className="text-gray-600">проектов</div>
</motion.div> </motion.div>
<motion.div className="text-center" variants={statsVariants}> <motion.div className="text-center" variants={statsVariants}>
<div className="text-4xl font-bold text-blue-700 mb-2">50+</div> <div className="text-4xl font-bold text-blue-700 mb-2">100%</div>
<div className="text-gray-600">экспертов</div> <div className="text-gray-600">бесплатная юр. консультация</div>
</motion.div> </motion.div>
<motion.div className="text-center" variants={statsVariants}> <motion.div className="text-center" variants={statsVariants}>
<div className="text-4xl font-bold text-blue-700 mb-2">98%</div> <div className="text-4xl font-bold text-blue-700 mb-2">0</div>
<div className="text-gray-600">довольных клиентов</div> <div className="text-gray-600">скрытых услуг и доплат</div>
</motion.div> </motion.div>
</motion.div> </motion.div>
</motion.div> </motion.div>

View File

@ -14,7 +14,7 @@ import {
const cityContacts = { const cityContacts = {
Москва: { Москва: {
address: 'г. Москва, ул. Пресненская, д. 6, стр. 2', address: 'г. Москва, ул. Космонавта Волкова, д. 29к1',
phone: '+7 (916) 830-58-58', phone: '+7 (916) 830-58-58',
email: 'ckeproekt@yandex.ru', email: 'ckeproekt@yandex.ru',
workHours: 'ПН-ПТ: 8:00 - 20:00', workHours: 'ПН-ПТ: 8:00 - 20:00',
@ -223,7 +223,7 @@ const Contacts = ({ selectedCity }: ContactsProps) => {
Время работы Время работы
</h3> </h3>
<p className="text-gray-600">{cityData.workHours}</p> <p className="text-gray-600">{cityData.workHours}</p>
<p className="text-gray-600">Сб-Вс: выходной</p> <p className="text-gray-600">Сб-Вс: 8:00 - 18:00</p>
</div> </div>
</motion.div> </motion.div>
</div> </div>

View File

@ -86,7 +86,7 @@ const Footer = ({ selectedCity }: FooterProps) => {
> >
<Building className="h-6 w-6" /> <Building className="h-6 w-6" />
<div> <div>
<h2 className="text-xl font-bold">ЦКЕ</h2> <h2 className="text-xl font-bold">ЦКЭ</h2>
<p className="text-sm text-gray-600"> <p className="text-sm text-gray-600">
Центр комплексных экспертиз Центр комплексных экспертиз
</p> </p>
@ -182,7 +182,7 @@ const Footer = ({ selectedCity }: FooterProps) => {
className="flex flex-col md:flex-row justify-between items-center gap-4 text-sm text-gray-500" className="flex flex-col md:flex-row justify-between items-center gap-4 text-sm text-gray-500"
> >
<div> <div>
© {new Date().getFullYear()} ЦКЕ - Центр комплексных экспертиз. © {new Date().getFullYear()} ЦКЭ - Центр комплексных экспертиз.
Все права защищены Все права защищены
</div> </div>
<motion.div whileHover={{ scale: 1.05 }}> <motion.div whileHover={{ scale: 1.05 }}>

View File

@ -73,7 +73,7 @@ const Header = ({ selectedCity, onCityChange }: HeaderProps) => {
> >
<Building className="h-6 w-6" /> <Building className="h-6 w-6" />
<div> <div>
<span className="text-xl font-bold">ЦКЕ</span> <span className="text-xl font-bold">ЦКЭ</span>
<span className="block text-sm font-normal text-gray-600"> <span className="block text-sm font-normal text-gray-600">
Центр комплексных экспертиз Центр комплексных экспертиз
</span> </span>

View File

@ -10,7 +10,11 @@ import { sendTelegramNotification } from '@/lib/telegram';
import ContactModal from './ContactModal'; import ContactModal from './ContactModal';
import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
const Hero = () => { interface HeroProps {
selectedCity: 'Москва' | 'Чебоксары';
}
const Hero = ({ selectedCity }: HeroProps) => {
const [phone, setPhone] = useState(''); const [phone, setPhone] = useState('');
const [isSubmitted, setIsSubmitted] = useState(false); const [isSubmitted, setIsSubmitted] = useState(false);
const [error, setError] = useState(''); const [error, setError] = useState('');
@ -93,6 +97,11 @@ const Hero = () => {
/> />
</div> </div>
{/* Заглушка-предупреждение */}
<div className="absolute top-4 right-4 bg-yellow-600 text-white text-xs px-3 py-1 rounded z-10">
Нужна баннерная фотография для этого раздела
</div>
<motion.div <motion.div
className="container mx-auto px-4 py-16 sm:py-20 relative" className="container mx-auto px-4 py-16 sm:py-20 relative"
variants={containerVariants} variants={containerVariants}
@ -105,7 +114,8 @@ const Hero = () => {
className="text-3xl sm:text-4xl md:text-5xl font-bold leading-tight" className="text-3xl sm:text-4xl md:text-5xl font-bold leading-tight"
variants={itemVariants} variants={itemVariants}
> >
Независимая строительно-техническая экспертиза в Москве и Чебоксарах Независимая строительно-техническая экспертиза в{' '}
{selectedCity === 'Москва' ? 'Москве' : 'Чебоксарах'}
</motion.h1> </motion.h1>
{/* Описание */} {/* Описание */}
@ -186,16 +196,16 @@ const Hero = () => {
variants={itemVariants} variants={itemVariants}
> >
<div className="bg-white/10 backdrop-blur-sm rounded-lg p-4"> <div className="bg-white/10 backdrop-blur-sm rounded-lg p-4">
<p className="font-bold text-xl sm:text-2xl mb-2">9+ лет</p> <p className="font-bold text-xl sm:text-2xl mb-2">11+ лет</p>
<p className="text-blue-100">опыта в экспертизе</p> <p className="text-blue-100">опыта в экспертизе</p>
</div> </div>
<div className="bg-white/10 backdrop-blur-sm rounded-lg p-4"> <div className="bg-white/10 backdrop-blur-sm rounded-lg p-4">
<p className="font-bold text-xl sm:text-2xl mb-2">500+</p> <p className="font-bold text-xl sm:text-2xl mb-2">1500+</p>
<p className="text-blue-100">выполненных проектов</p> <p className="text-blue-100">выполненных проектов</p>
</div> </div>
<div className="bg-white/10 backdrop-blur-sm rounded-lg p-4"> <div className="bg-white/10 backdrop-blur-sm rounded-lg p-4">
<p className="font-bold text-xl sm:text-2xl mb-2">100%</p> <p className="font-bold text-xl sm:text-2xl mb-2">100%</p>
<p className="text-blue-100">гарантия качества</p> <p className="text-blue-100">фиксированная цена без доплат</p>
</div> </div>
</motion.div> </motion.div>
</div> </div>

View File

@ -11,10 +11,12 @@ import {
Building, Building,
FlaskConical, FlaskConical,
ArrowRight, ArrowRight,
FileText,
} from 'lucide-react'; } from 'lucide-react';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import ContactModal from './ContactModal'; import ContactModal from './ContactModal';
import Link from 'next/link'; import Link from 'next/link';
import Image from 'next/image';
export const services = [ export const services = [
{ {
@ -29,6 +31,7 @@ export const services = [
'Расчет стоимости восстановительных работ', 'Расчет стоимости восстановительных работ',
'Составление экспертного заключения', 'Составление экспертного заключения',
], ],
image: '/images/placeholders/services/flood-expertise.jpg',
}, },
{ {
icon: Waves, icon: Waves,
@ -42,6 +45,7 @@ export const services = [
'Оценка состояния коммуникаций', 'Оценка состояния коммуникаций',
'Рекомендации по ремонту', 'Рекомендации по ремонту',
], ],
image: '/images/placeholders/services/sewerage-inspection.jpg',
}, },
{ {
icon: Home, icon: Home,
@ -55,6 +59,7 @@ export const services = [
'Анализ микроклимата', 'Анализ микроклимата',
'Подготовка документации', 'Подготовка документации',
], ],
image: '/images/placeholders/services/house-recognition.jpg',
}, },
{ {
icon: CheckSquare, icon: CheckSquare,
@ -68,6 +73,7 @@ export const services = [
'Выявление дефектов', 'Выявление дефектов',
'Рекомендации по устранению', 'Рекомендации по устранению',
], ],
image: '/images/placeholders/services/renovation-expertise.jpg',
}, },
{ {
icon: Thermometer, icon: Thermometer,
@ -81,6 +87,7 @@ export const services = [
'Выявление мостиков холода', 'Выявление мостиков холода',
'Рекомендации по утеплению', 'Рекомендации по утеплению',
], ],
image: '/images/placeholders/services/thermal-inspection.jpg',
}, },
{ {
icon: Building, icon: Building,
@ -94,6 +101,7 @@ export const services = [
'Оценка материалов', 'Оценка материалов',
'Выявление нарушений', 'Выявление нарушений',
], ],
image: '/images/placeholders/services/construction-control.jpg',
}, },
{ {
icon: FlaskConical, icon: FlaskConical,
@ -107,6 +115,7 @@ export const services = [
'Расчет площадей', 'Расчет площадей',
'Составление технического паспорта', 'Составление технического паспорта',
], ],
image: '/images/placeholders/services/room-measurement.jpg',
}, },
]; ];
@ -202,6 +211,26 @@ const Services = () => {
</ul> </ul>
</div> </div>
</div> </div>
<div className="relative h-64">
<Image
src={service.image}
alt={service.title}
fill
className="object-cover"
/>
<motion.div
initial={{ opacity: 0 }}
whileHover={{ opacity: 1 }}
className="absolute inset-0 bg-black bg-opacity-20 flex items-center justify-center"
>
<motion.div
whileHover={{ scale: 1.2 }}
whileTap={{ scale: 0.9 }}
>
<FileText className="w-10 h-10 text-white" />
</motion.div>
</motion.div>
</div>
</motion.div> </motion.div>
</Link> </Link>
))} ))}
@ -213,6 +242,11 @@ const Services = () => {
<br /> <br />
Все консультации бесплатны. Все консультации бесплатны.
</p> </p>
<p className="text-gray-600 mb-6 text-sm italic">
Примечание: Для каждой услуги необходимы качественные тематические
фотографии. Пожалуйста, предоставьте соответствующие изображения
для замены заглушек.
</p>
<motion.div whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }}> <motion.div whileHover={{ scale: 1.05 }} whileTap={{ scale: 0.95 }}>
<Button <Button
className="bg-blue-700 hover:bg-blue-800 text-white px-8" className="bg-blue-700 hover:bg-blue-800 text-white px-8"

View File

@ -31,13 +31,13 @@ const features = [
icon: Building2, icon: Building2,
title: 'Членство в СРО', title: 'Членство в СРО',
description: description:
'Состоим в профильных СРО, предоставляющей разрешение на работы и страхование до 30 млн рублей.', 'Состоим в профильных СРО, предоставляющей разрешение на работы и подтверждающее нашу квалификацию.',
}, },
{ {
icon: Umbrella, icon: Umbrella,
title: 'Страховая защита', title: 'Страховая защита',
description: description:
'Застрахованы в Британском страховом доме на 10 млн рублей, что гарантирует безопасность наших клиентов.', 'Застрахованы в Британском страховом доме на 30 млн рублей, что гарантирует безопасность наших клиентов.',
}, },
{ {
icon: FileCheck, icon: FileCheck,

View File

@ -47,12 +47,12 @@ export default function Home() {
onCityChange={setSelectedCity} onCityChange={setSelectedCity}
/> />
<main className="flex-1"> <main className="flex-1">
<Hero /> <Hero selectedCity={selectedCity} />
<Services />
<About /> <About />
<WhyUs /> <WhyUs />
<WorkFlow /> <WorkFlow />
<Certificates /> <Certificates />
<Services />
<Contacts selectedCity={selectedCity} /> <Contacts selectedCity={selectedCity} />
<ContactForm /> <ContactForm />
</main> </main>