Обновлены компоненты страницы: передан параметр selectedCity в компонент Hero, добавлены новые изображения для услуг в компоненте Services, исправлены данные о компании в компонентах About и Footer, обновлены контактные данные в компоненте Contacts, изменены описания в компоненте WhyUs. Также добавлено предупреждение о необходимости замены заглушек для изображений.
This commit is contained in:
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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 }}>
|
||||||
|
@ -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>
|
||||||
|
@ -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>
|
||||||
|
@ -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"
|
||||||
|
@ -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,
|
||||||
|
@ -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>
|
||||||
|
0
public/images/placeholders/other/banner.jpg
Normal file
0
public/images/placeholders/other/banner.jpg
Normal file
0
public/images/placeholders/other/office-2.jpg
Normal file
0
public/images/placeholders/other/office-2.jpg
Normal file
0
public/images/placeholders/other/team.jpg
Normal file
0
public/images/placeholders/other/team.jpg
Normal file
Reference in New Issue
Block a user