2025-09-15 14:52:27 +08:00

288 lines
12 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

'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>
);
}