This commit is contained in:
2026-03-27 17:24:46 +09:00
parent 71c31b3477
commit 4dc1c112e6
6 changed files with 95 additions and 14 deletions

View File

@@ -144,7 +144,7 @@ function App() {
<div className='flex flex-row'>
{languages.map((lang, index) => (
<div key={index} style={{ marginLeft: index === 0 ? '' : '-0.5rem' }} className='border-2 border-base-200 w-12.5 h-12.5 flex justify-center items-center p-2 rounded-full overflow-hidden bg-white'>
<div key={index} style={{ marginLeft: index === 0 ? '' : '-0.5rem' }} className='border-2 border-base-200 w-16 h-16 flex justify-center items-center p-2 rounded-full overflow-hidden bg-white'>
<img src={lang} />
</div>
))}
@@ -156,7 +156,7 @@ function App() {
<div className='flex flex-row'>
{programs.map((lang, index) => (
<div key={index} style={{ marginLeft: index === 0 ? '' : '-0.5rem' }} className='border-2 border-base-200 w-12.5 h-12.5 flex justify-center items-center p-2 rounded-full overflow-hidden bg-white'>
<div key={index} style={{ marginLeft: index === 0 ? '' : '-0.5rem' }} className='border-2 border-base-200 w-16 h-16 flex justify-center items-center p-2 rounded-full overflow-hidden bg-white'>
<img src={lang} />
</div>
))}
@@ -164,7 +164,7 @@ function App() {
</div>
</div>
<div className='absolute blur-xs sm:blur-none inset-0 sm:relative h-full w-full p-4'>
<div className='absolute blur-xs sm:blur-none inset-0 sm:relative h-full w-full p-4 opacity-40'>
<TypingEffect text={`/*
Совет из продакшена:
если код "гениальный" — готовься его переписывать.

View File

@@ -1,8 +1,41 @@
import CheckLabel from './CheckLabel'
import Braces from './Braces'
import Thesis from './Thesis'
import { useState } from 'react'
import axios from 'axios'
const DiscussSection = () => {
const [consult, setConsult] = useState({
fio: '',
phone: '',
email: '',
desc: '',
conf: false
})
const mail = () => {
axios.create({
headers: {
'Access-Control-Allow-Headers': 'Content-Type',
'Access-Control-Allow-Origin': 'http://localhost:5173',
'Content-Type': 'application/json'
}
})
if (consult.conf) {
axios.post('http://localhost:3000/send_mail', consult).then(res => {
if (res.data == 'OK') {
setConsult({
fio: '',
phone: '',
email: '',
desc: '',
conf: false
})
}
})
}
}
return (
<section id='discuss' className='max-w-7xl w-full h-auto flex flex-col sm:grid sm:grid-cols-5 gap-4'>
<div className='flex flex-col col-span-3 gap-4 p-8'>
@@ -18,25 +51,25 @@ const DiscussSection = () => {
<CheckLabel text='Оценка стоимости и сроков' />
<CheckLabel text='Обсудим формат сотрудничества' />
<form className='flex flex-col gap-4'>
<input type="name" placeholder="Введите ваше имя *" required className="input rounded-full w-full" />
<input type="tel" placeholder="+7(000)000-00-00 *" required className="input rounded-full w-full" />
<input type="email" placeholder="mail@company.ru *" required className="input validator rounded-full w-full" />
<textarea className="textarea rounded-2xl w-full" placeholder="Опишите вашу ситуацию (необязательно)"></textarea>
<div id='form' className='flex flex-col gap-4'>
<input type="name" onChange={(e) => { setConsult({ ...consult, fio: e.target.value }) }} value={consult.fio} placeholder="Введите ваше имя *" required className="input rounded-full w-full" />
<input type="number" onChange={(e) => { setConsult({ ...consult, phone: e.target.value }) }} value={consult.phone} placeholder="+7(000)000-00-00 *" required className="input rounded-full w-full" />
<input onChange={(e) => { setConsult({ ...consult, email: e.target.value }) }} value={consult.email} type="email" placeholder="mail@company.ru *" required className="input validator rounded-full w-full" />
<textarea onChange={(e) => { setConsult({ ...consult, desc: e.target.value }) }} value={consult.desc} rows={5} cols={30} className="textarea rounded-2xl w-full" placeholder="Опишите вашу ситуацию (необязательно)"></textarea>
<label className="label flex flex-row items-start">
<input type="checkbox" defaultChecked className="mt-1 checkbox checkbox-xs checked:border-blue-500 checked:bg-blue-400 checked:text-white rounded-sm" />
<input type="checkbox" onChange={(e) => { setConsult({ ...consult, conf: e.target.checked }) }} checked={consult.conf} className="mt-1 checkbox checkbox-xs checked:border-blue-500 checked:bg-blue-400 checked:text-white rounded-sm" />
<span className='text-wrap'>
Я согласен(-на) с условиями <a className='text-blue-500'>Политики конфиденциальности</a> и разрешаю обработку моих персональных данных согласно <a className='text-blue-500'>Политики обработки персональных данных</a>
</span>
</label>
<button className='btn btn-lg bg-blue-500 text-white rounded-full'>
<button disabled={(consult.phone == '') || (consult.email == '') || (consult.desc == '') || (consult.fio == '') || (!consult.conf)} onClick={() => mail()} className='btn btn-lg not-disabled:bg-blue-500 text-white rounded-full'>
Оставить заявку
</button>
<span className='text-base-content/70'>Отправляя форму, вы даёте согласие на обработку ваших персональных данных (ФИО, номер телефона, электронную почту и комментарий) для связи c вами и обработки вашей заявки. Данные будут храниться в течение <span className='underline text-blue-500'>12 месяцев</span>. Вы можете отозвать своё согласие в любой момент</span>
</form>
</div>
</div>
<div className='flex flex-col col-span-2 bg-base-200 rounded-2xl gap-8'>

View File

@@ -19,13 +19,13 @@ const Footer = () => {
<a href='#case' className='text-base-content/70 hover:text-blue-500'>Портфолио</a>
</div>
<div className='flex flex-col text-nowrap gap-4 text-base-content/70'>
<section id="contacts" className='flex flex-col text-nowrap gap-4 text-base-content/70'>
<span className='text-2xl text-base-content'>Контакты</span>
<a className='text-base-content/70 hover:text-blue-500' href="mailto:commit23@mail.ru">commit23@mail.ru</a>
<a className='text-base-content/70 hover:text-blue-500' href="tel:+79142739020">+7 (914) 273-90-20</a>
<span className="text-wrap">{`677021, Республика Саха (Якутия), г. Якутск, ул. К.Д. Уткина, д. 20, стр. 1`}</span>
</div>
</section>
</div>
<hr className="my-4 border-gray-300" />

View File

@@ -10,7 +10,7 @@ const LicenseSection = () => {
]
return (
<section id='case' className='max-w-7xl w-full h-auto px-2 xl:px-0'>
<section id='license' className='max-w-7xl w-full h-auto px-2 xl:px-0'>
<div className='w-full h-auto flex flex-col items-center py-8 bg-base-200 rounded-2xl'>
<span className='px-4 text-3xl sm:text-4xl sm:text-center my-8'>
<span className='text-blue-500'>Наши</span> лицензии и сертификаты