288 lines
12 KiB
TypeScript
Raw Normal View History

2025-09-15 14:52:27 +08:00
'use client';
import { useState } from 'react';
import { Mail, Phone, MapPin, Clock, Send, CheckCircle, AlertCircle, Building, MessageSquare, MessageCircle } from 'lucide-react';
export default function Contact() {
const [form, setForm] = useState({
name: '',
email: '',
company: '',
phone: '',
subject: '',
message: '',
inquiryType: 'general'
});
const [isSubmitting, setIsSubmitting] = useState(false);
const [submitStatus, setSubmitStatus] = useState<'idle' | 'success' | 'error'>('idle');
const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setIsSubmitting(true);
try {
const response = await fetch('https://formspree.io/f/xkgvgzal', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
name: form.name,
email: form.email,
company: form.company,
phone: form.phone,
subject: form.subject,
message: form.message,
inquiryType: form.inquiryType,
_subject: `来自网站的联系表单 - ${form.subject || '一般咨询'}`
})
});
if (response.ok) {
setSubmitStatus('success');
setForm({ name: '', email: '', company: '', phone: '', subject: '', message: '', inquiryType: 'general' });
} else {
setSubmitStatus('error');
}
} catch (error) {
setSubmitStatus('error');
} finally {
setIsSubmitting(false);
}
};
const contactInfo = [
{
icon: MapPin,
title: '公司地址',
details: ['全球远程办公', '总部位于美国纽约'],
color: 'text-red-500'
},
{
icon: Phone,
title: 'WhatsApp',
details: ['+1 917-402-9875', '7×24 小时技术支持'],
color: 'text-blue-500'
},
{
icon: Mail,
title: '邮箱地址',
details: ['support@pinnovatecloud.com', 'info@pinnovatecloud.com'],
color: 'text-green-500'
},
{
icon: MessageCircle,
title: 'Telegram',
details: ['@pinnovatecloud', '即时响应支持'],
color: 'text-purple-500'
}
];
return (
<section className="px-6 py-16 bg-white" id="contact-form">
<div className="max-w-screen-xl mx-auto">
<div className="text-center mb-12">
<h2 className="text-3xl font-bold text-primary mb-4"></h2>
<p className="text-xl text-gray-600 max-w-3xl mx-auto">
24
</p>
</div>
<div className="grid grid-cols-1 lg:grid-cols-3 gap-12">
{/* 联系表单 */}
<div className="lg:col-span-2">
<div className="bg-gray-50 rounded-2xl p-8">
{submitStatus === 'success' && (
<div className="mb-6 p-4 bg-green-50 border border-green-200 rounded-lg flex items-center gap-3">
<CheckCircle className="w-5 h-5 text-green-500" />
<span className="text-green-700"></span>
</div>
)}
{submitStatus === 'error' && (
<div className="mb-6 p-4 bg-red-50 border border-red-200 rounded-lg flex items-center gap-3">
<AlertCircle className="w-5 h-5 text-red-500" />
<span className="text-red-700"></span>
</div>
)}
<form onSubmit={handleSubmit} className="space-y-6">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
*
</label>
<input
type="text"
required
className="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-accent focus:border-transparent outline-none transition-colors"
placeholder="请输入您的姓名"
value={form.name}
onChange={e => setForm({ ...form, name: e.target.value })}
/>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
*
</label>
<input
type="email"
required
className="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-accent focus:border-transparent outline-none transition-colors"
placeholder="请输入您的邮箱"
value={form.email}
onChange={e => setForm({ ...form, email: e.target.value })}
/>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6">
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
</label>
<input
type="text"
className="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-accent focus:border-transparent outline-none transition-colors"
placeholder="请输入您的公司名称"
value={form.company}
onChange={e => setForm({ ...form, company: e.target.value })}
/>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
</label>
<input
type="tel"
className="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-accent focus:border-transparent outline-none transition-colors"
placeholder="请输入您的联系电话"
value={form.phone}
onChange={e => setForm({ ...form, phone: e.target.value })}
/>
</div>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
</label>
<select
className="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-accent focus:border-transparent outline-none transition-colors"
value={form.inquiryType}
onChange={e => setForm({ ...form, inquiryType: e.target.value })}
>
<option value="general"></option>
<option value="sales"></option>
<option value="support"></option>
<option value="partnership"></option>
<option value="feedback"></option>
</select>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
</label>
<input
type="text"
className="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-accent focus:border-transparent outline-none transition-colors"
placeholder="请输入消息主题"
value={form.subject}
onChange={e => setForm({ ...form, subject: e.target.value })}
/>
</div>
<div>
<label className="block text-sm font-medium text-gray-700 mb-2">
*
</label>
<textarea
required
rows={6}
className="w-full px-4 py-3 border border-gray-300 rounded-xl focus:ring-2 focus:ring-accent focus:border-transparent outline-none transition-colors resize-none"
placeholder="请详细描述您的问题或需求..."
value={form.message}
onChange={e => setForm({ ...form, message: e.target.value })}
/>
</div>
<button
type="submit"
disabled={isSubmitting || !form.name || !form.email || !form.message}
className="w-full flex items-center justify-center gap-2 py-4 px-6 bg-accent text-white rounded-xl font-semibold hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed transition-colors"
>
{isSubmitting ? (
<>
<div className="w-5 h-5 border-2 border-white border-t-transparent rounded-full animate-spin"></div>
...
</>
) : (
<>
<Send className="w-5 h-5" />
</>
)}
</button>
</form>
</div>
</div>
{/* 联系信息 */}
<div className="space-y-8">
<div>
<h3 className="text-2xl font-bold text-primary mb-6"></h3>
<div className="space-y-6">
{contactInfo.map((info, index) => (
<div key={index} className="flex items-start gap-4">
<div className={`w-12 h-12 bg-gray-100 rounded-full flex items-center justify-center flex-shrink-0 ${info.color}`}>
<info.icon className="w-6 h-6" />
</div>
<div>
<h4 className="font-semibold text-primary mb-2">{info.title}</h4>
{info.details.map((detail, idx) => (
<p key={idx} className="text-gray-600 text-sm mb-1">{detail}</p>
))}
</div>
</div>
))}
</div>
</div>
{/* 在线客服 */}
<div className="bg-gradient-to-r from-accent to-blue-600 rounded-2xl p-6 text-white">
<div className="flex items-center gap-3 mb-4">
<MessageSquare className="w-6 h-6" />
<h4 className="text-lg font-semibold">线</h4>
</div>
<p className="text-blue-100 mb-4">
线
</p>
<button className="w-full py-3 bg-white text-accent rounded-xl font-semibold hover:bg-gray-100 transition-colors">
</button>
</div>
{/* 工作时间提醒 */}
<div className="bg-yellow-50 border border-yellow-200 rounded-xl p-6">
<div className="flex items-start gap-3">
<Clock className="w-5 h-5 text-yellow-600 mt-0.5" />
<div>
<h4 className="font-semibold text-yellow-800 mb-2"></h4>
<ul className="text-sm text-yellow-700 space-y-1">
<li> 线</li>
<li> 24 </li>
<li> 7×24 </li>
<li> 1 </li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
);
}