Добавлены обработчики изменений для полей ввода в модальном окне контактов, обновлены тексты в секциях контактов и отзывов, а также изменены описания проектов для улучшения информативности.

This commit is contained in:
albivkt
2025-06-30 00:23:52 +03:00
parent 82f6fce8ec
commit 2ca5ac4f9d
4 changed files with 37 additions and 21 deletions

View File

@ -40,6 +40,10 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
} }
}; };
const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => {
handleInputChange('name', e.target.value);
};
const handlePhoneChange = (e: React.ChangeEvent<HTMLInputElement>) => { const handlePhoneChange = (e: React.ChangeEvent<HTMLInputElement>) => {
let value = e.target.value.replace(/\D/g, ''); let value = e.target.value.replace(/\D/g, '');
@ -59,6 +63,10 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
handleInputChange('phone', formattedValue); handleInputChange('phone', formattedValue);
}; };
const handleMessageChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {
handleInputChange('message', e.target.value);
};
const handleSubmit = async (e: React.FormEvent) => { const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault(); e.preventDefault();
@ -149,7 +157,7 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
name="name" name="name"
placeholder="Ваше имя" placeholder="Ваше имя"
value={formData.name} value={formData.name}
onChange={handleInputChange} onChange={handleNameChange}
className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500" className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500"
required required
/> />
@ -161,7 +169,7 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
name="phone" name="phone"
placeholder="Ваш телефон" placeholder="Ваш телефон"
value={formData.phone} value={formData.phone}
onChange={handleInputChange} onChange={handlePhoneChange}
className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500" className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500"
required required
/> />
@ -173,7 +181,7 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
placeholder="Ваше сообщение" placeholder="Ваше сообщение"
rows={4} rows={4}
value={formData.message} value={formData.message}
onChange={handleInputChange} onChange={handleMessageChange}
className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500 resize-none" className="w-full px-4 py-3 rounded-lg bg-white border border-gray-200 focus:border-blue-400 focus:outline-none focus:ring-2 focus:ring-blue-400/20 transition-all duration-300 text-gray-800 placeholder-gray-500 resize-none"
required required
/> />
@ -201,7 +209,7 @@ const ContactModal = ({ isOpen, onClose }: ContactModalProps) => {
</form> </form>
<p className="text-xs text-gray-500 mt-4 text-center"> <p className="text-xs text-gray-500 mt-4 text-center">
Нажимая кнопку "Отправить сообщение", вы соглашаетесь с{' '} Нажимая кнопку &ldquo;Отправить сообщение&rdquo;, вы соглашаетесь с{' '}
<a href="#" className="underline hover:text-blue-600 transition-colors duration-300"> <a href="#" className="underline hover:text-blue-600 transition-colors duration-300">
Политикой конфиденциальности Политикой конфиденциальности
</a> </a>

View File

@ -1,7 +1,7 @@
'use client'; 'use client';
import { useState } from 'react'; import { useState } from 'react';
import { Phone, Mail, MapPin, CheckCircle, AlertCircle } from 'lucide-react'; import { Phone, Mail, MapPin } from 'lucide-react';
import FadeInSection from './FadeInSection'; import FadeInSection from './FadeInSection';
const ContactSection = () => { const ContactSection = () => {
@ -213,7 +213,7 @@ const ContactSection = () => {
</form> </form>
<p className="text-xs text-gray-500 mt-4 text-center"> <p className="text-xs text-gray-500 mt-4 text-center">
Нажимая кнопку "Отправить сообщение", вы соглашаетесь с{' '} Нажимая кнопку &ldquo;Отправить сообщение&rdquo;, вы соглашаетесь с{' '}
<a href="#" className="underline hover:text-blue-600 transition-colors duration-300"> <a href="#" className="underline hover:text-blue-600 transition-colors duration-300">
Политикой конфиденциальности Политикой конфиденциальности
</a> </a>

View File

@ -13,7 +13,7 @@ const projects = [
{ {
id: 1, id: 1,
title: 'Гармония', title: 'Гармония',
description: 'Дом 11х9м, общая площадь 101,4 кв.м., 3 спальни, 1 санузел', description: 'Общая площадь 200 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/garmony.png', alt: 'Фасад дома Гармония' }, { type: 'facade', src: '/images/garmony.png', alt: 'Фасад дома Гармония' },
{ type: 'plan', src: '/images/2.jpg', alt: 'Планировка 1 этажа' }, { type: 'plan', src: '/images/2.jpg', alt: 'Планировка 1 этажа' },
@ -24,7 +24,7 @@ const projects = [
{ {
id: 2, id: 2,
title: 'Горизонт', title: 'Горизонт',
description: 'Дом 14х13 м, общая площадь 142,8 кв.м, 3 спальни, 2 санузла', description: 'Общая площадь 360 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/gorizont.png', alt: 'Фасад дома Горизонт' }, { type: 'facade', src: '/images/gorizont.png', alt: 'Фасад дома Горизонт' },
{ type: 'plan', src: '/images/22.jpg', alt: 'Планировка 1 этажа' }, { type: 'plan', src: '/images/22.jpg', alt: 'Планировка 1 этажа' },
@ -34,20 +34,20 @@ const projects = [
}, },
{ {
id: 3, id: 3,
title: 'Филимонов', title: 'Европейский квартал',
description: 'Дом 14,2х10,5 м, общая площадь 131,4 кв.м., 3 спальни, 2 санузла', description: 'Общая площадь 120 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/filimonov.png', alt: 'Фасад дома Филимонов' }, { type: 'facade', src: '/images/filimonov.png', alt: 'Фасад дома Европейский квартал' },
{ type: 'plan', src: '/images/333.jpg', alt: 'Планировка дома' } { type: 'plan', src: '/images/333.jpg', alt: 'Планировка дома' }
], ],
file: '/projects/filimonov.pdf', file: '/projects/filimonov.pdf',
}, },
{ {
id: 4, id: 4,
title: 'Моронцов', title: 'Проект 12',
description: 'Дом 12х8м, общая площадь 89,6 кв.м., 2 спальни, 1 санузел', description: 'Общая площадь 100 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/moronchov.png', alt: 'Фасад дома Моронцов' }, { type: 'facade', src: '/images/moronchov.png', alt: 'Фасад дома Проект 12' },
{ type: 'plan', src: '/images/3333.jpg', alt: 'Планировка дома' } { type: 'plan', src: '/images/3333.jpg', alt: 'Планировка дома' }
], ],
file: '/projects/moronchov.pdf', file: '/projects/moronchov.pdf',
@ -55,7 +55,7 @@ const projects = [
{ {
id: 5, id: 5,
title: 'Ранчо', title: 'Ранчо',
description: 'Дом 15х12м, общая площадь 156,8 кв.м., 4 спальни, 2 санузла', description: 'Общая площадь 96 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/rancho.png', alt: 'Фасад дома Ранчо' }, { type: 'facade', src: '/images/rancho.png', alt: 'Фасад дома Ранчо' },
{ type: 'plan', src: '/images/111.jpg', alt: 'Планировка 1 этажа' }, { type: 'plan', src: '/images/111.jpg', alt: 'Планировка 1 этажа' },
@ -66,7 +66,7 @@ const projects = [
{ {
id: 6, id: 6,
title: 'Тихие Зори', title: 'Тихие Зори',
description: 'Дом 13х9м, общая площадь 118,2 кв.м., 3 спальни, 1 санузел', description: 'Общая площадь 130 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/zori.png', alt: 'Фасад дома Тихие Зори' }, { type: 'facade', src: '/images/zori.png', alt: 'Фасад дома Тихие Зори' },
{ type: 'plan', src: '/images/122.jpg', alt: 'Планировка дома' } { type: 'plan', src: '/images/122.jpg', alt: 'Планировка дома' }
@ -76,7 +76,7 @@ const projects = [
{ {
id: 7, id: 7,
title: 'Уютное гнездышко', title: 'Уютное гнездышко',
description: 'Дом 16х10м, общая площадь 168,4 кв.м., 4 спальни, 3 санузла', description: 'Общая площадь 98 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/gnezdo.png', alt: 'Фасад дома Уютное гнездышко' }, { type: 'facade', src: '/images/gnezdo.png', alt: 'Фасад дома Уютное гнездышко' },
{ type: 'plan', src: '/images/3333.jpg', alt: 'Планировка дома' } { type: 'plan', src: '/images/3333.jpg', alt: 'Планировка дома' }
@ -86,7 +86,7 @@ const projects = [
{ {
id: 8, id: 8,
title: 'Аура', title: 'Аура',
description: 'Дом 10х8м, общая площадь 78,6 кв.м., 2 спальни, 1 санузел', description: 'Общая площадь 73 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/aura.png', alt: 'Фасад дома Аура' }, { type: 'facade', src: '/images/aura.png', alt: 'Фасад дома Аура' },
{ type: 'plan', src: '/images/444.jpg', alt: 'Планировка 1 этажа' }, { type: 'plan', src: '/images/444.jpg', alt: 'Планировка 1 этажа' },
@ -97,7 +97,7 @@ const projects = [
{ {
id: 9, id: 9,
title: 'Надежда', title: 'Надежда',
description: 'Дом 18х12м, общая площадь 198,4 кв.м., 5 спален, 3 санузла', description: 'Общая площадь 100 кв.м.',
images: [ images: [
{ type: 'facade', src: '/images/nade.png', alt: 'Фасад дома Надежда' }, { type: 'facade', src: '/images/nade.png', alt: 'Фасад дома Надежда' },
{ type: 'plan', src: '/images/666.jpg', alt: 'Планировка дома' } { type: 'plan', src: '/images/666.jpg', alt: 'Планировка дома' }

View File

@ -1,30 +1,38 @@
'use client'; 'use client';
import Image from 'next/image'; import Image from 'next/image';
import { Star } from 'lucide-react';
import FadeInSection from './FadeInSection'; import FadeInSection from './FadeInSection';
const reviews = [ const reviews = [
{ {
id: 1, id: 1,
name: 'Александр Петров', name: 'Александр Петров',
position: 'Владелец дома',
text: 'Очень доволен качеством строительства. Команда профессионалов, все работы выполнены в срок и с соблюдением всех норм.', text: 'Очень доволен качеством строительства. Команда профессионалов, все работы выполнены в срок и с соблюдением всех норм.',
rating: 5, rating: 5,
image: '/images/Sasha.jpg', image: '/images/Sasha.jpg',
project: 'Коттедж 150 м²',
date: 'Сентябрь 2024',
}, },
{ {
id: 2, id: 2,
name: 'Елена Смирнова', name: 'Елена Смирнова',
position: 'Владелица дома',
text: 'Спасибо за отличную работу! Дом построен качественно, все пожелания были учтены. Рекомендую всем!', text: 'Спасибо за отличную работу! Дом построен качественно, все пожелания были учтены. Рекомендую всем!',
rating: 5, rating: 5,
image: '/images/Elena.jpg', image: '/images/Elena.jpg',
project: 'Дом 120 м²',
date: 'Август 2024',
}, },
{ {
id: 3, id: 3,
name: 'Дмитрий Иванов', name: 'Дмитрий Иванов',
position: 'Владелец дома',
text: 'Профессиональный подход к делу. Все этапы строительства контролировались, результат превзошел ожидания.', text: 'Профессиональный подход к делу. Все этапы строительства контролировались, результат превзошел ожидания.',
rating: 5, rating: 5,
image: '/images/Dmitry.jpg', image: '/images/Dmitry.jpg',
project: 'Коттедж 180 м²',
date: 'Июль 2024',
}, },
]; ];
@ -85,7 +93,7 @@ const ReviewsSection = () => {
</div> </div>
<blockquote className="text-gray-600 leading-relaxed italic"> <blockquote className="text-gray-600 leading-relaxed italic">
"{review.text}" &ldquo;{review.text}&rdquo;
</blockquote> </blockquote>
<div className="mt-4 pt-4 border-t border-gray-200"> <div className="mt-4 pt-4 border-t border-gray-200">