2025-09-16 16:15:57 +08:00

538 lines
22 KiB
TypeScript

'use client';
import {
Mail,
Phone,
MapPin,
Globe,
Facebook,
Twitter,
Linkedin,
Youtube,
ArrowUp,
} from 'lucide-react';
import { useState, useEffect } from 'react';
interface FooterProps {
currentLang: string;
translations: any;
}
export function Footer({ currentLang, translations }: FooterProps) {
const [showScrollTop, setShowScrollTop] = useState(false);
const t = translations[currentLang];
// Show scroll to top button when user scrolls down
useEffect(() => {
const handleScroll = () => {
setShowScrollTop(window.scrollY > 300);
};
window.addEventListener('scroll', handleScroll);
return () => window.removeEventListener('scroll', handleScroll);
}, []);
const scrollToTop = () => {
window.scrollTo({
top: 0,
behavior: 'smooth',
});
};
const footerLinks = {
products: {
title:
currentLang === 'zh'
? '产品服务'
: currentLang === 'zh-tw'
? '產品服務'
: 'Products & Services',
links: [
{
name:
currentLang === 'zh'
? '云服务器 ECS'
: currentLang === 'zh-tw'
? '雲伺服器 ECS'
: 'Cloud Server ECS',
href: '/products/ecs',
},
{
name:
currentLang === 'zh'
? '云数据库 RDS'
: currentLang === 'zh-tw'
? '雲資料庫 RDS'
: 'Cloud Database RDS',
href: '/products/rds',
},
{
name:
currentLang === 'zh'
? '负载均衡 SLB'
: currentLang === 'zh-tw'
? '負載平衡 SLB'
: 'Load Balancer SLB',
href: '/products/slb',
},
{
name:
currentLang === 'zh'
? '对象存储 OSS'
: currentLang === 'zh-tw'
? '物件儲存 OSS'
: 'Object Storage OSS',
href: '/products/oss',
},
{
name:
currentLang === 'zh'
? 'CDN 加速'
: currentLang === 'zh-tw'
? 'CDN 加速'
: 'CDN Acceleration',
href: '/products/cdn',
},
],
},
solutions: {
title:
currentLang === 'zh'
? '解决方案'
: currentLang === 'zh-tw'
? '解決方案'
: 'Solutions',
links: [
{
name:
currentLang === 'zh'
? '企业上云'
: currentLang === 'zh-tw'
? '企業上雲'
: 'Enterprise Cloud',
href: '/solutions/enterprise',
},
{
name:
currentLang === 'zh'
? '数据备份'
: currentLang === 'zh-tw'
? '資料備份'
: 'Data Backup',
href: '/solutions/backup',
},
{
name:
currentLang === 'zh'
? '灾难恢复'
: currentLang === 'zh-tw'
? '災難恢復'
: 'Disaster Recovery',
href: '/solutions/recovery',
},
{
name:
currentLang === 'zh'
? '混合云'
: currentLang === 'zh-tw'
? '混合雲'
: 'Hybrid Cloud',
href: '/solutions/hybrid',
},
{
name:
currentLang === 'zh'
? '容器服务'
: currentLang === 'zh-tw'
? '容器服務'
: 'Container Service',
href: '/solutions/container',
},
],
},
support: {
title:
currentLang === 'zh'
? '支持与服务'
: currentLang === 'zh-tw'
? '支援與服務'
: 'Support & Service',
links: [
{
name:
currentLang === 'zh'
? '技术文档'
: currentLang === 'zh-tw'
? '技術文件'
: 'Documentation',
href: '/docs',
},
{
name:
currentLang === 'zh'
? '帮助中心'
: currentLang === 'zh-tw'
? '幫助中心'
: 'Help Center',
href: '/help',
},
{
name:
currentLang === 'zh'
? '服务状态'
: currentLang === 'zh-tw'
? '服務狀態'
: 'Service Status',
href: '/status',
},
{
name:
currentLang === 'zh'
? '培训认证'
: currentLang === 'zh-tw'
? '培訓認證'
: 'Training & Certification',
href: '/training',
},
{
name:
currentLang === 'zh'
? '社区论坛'
: currentLang === 'zh-tw'
? '社群論壇'
: 'Community Forum',
href: '/community',
},
],
},
company: {
title:
currentLang === 'zh'
? '关于我们'
: currentLang === 'zh-tw'
? '關於我們'
: 'About Us',
links: [
{
name:
currentLang === 'zh'
? '公司介绍'
: currentLang === 'zh-tw'
? '公司介紹'
: 'Company Profile',
href: '/about',
},
{
name:
currentLang === 'zh'
? '新闻动态'
: currentLang === 'zh-tw'
? '新聞動態'
: 'News & Events',
href: '/news',
},
{
name:
currentLang === 'zh'
? '招贤纳士'
: currentLang === 'zh-tw'
? '招賢納士'
: 'Careers',
href: '/careers',
},
{
name:
currentLang === 'zh'
? '合作伙伴'
: currentLang === 'zh-tw'
? '合作夥伴'
: 'Partners',
href: '/partners',
},
{
name:
currentLang === 'zh'
? '联系我们'
: currentLang === 'zh-tw'
? '聯絡我們'
: 'Contact Us',
href: '/contact',
},
],
},
};
const contactInfo = [
{
icon: <Phone className="w-5 h-5" />,
label:
currentLang === 'zh'
? '客服热线'
: currentLang === 'zh-tw'
? '客服熱線'
: 'Hotline',
value: '+86 400-123-4567',
href: 'tel:+864001234567',
},
{
icon: <Mail className="w-5 h-5" />,
label:
currentLang === 'zh' ? '邮箱地址' : currentLang === 'zh-tw' ? '郵箱地址' : 'Email',
value: 'support@cloudpro.com',
href: 'mailto:support@cloudpro.com',
},
{
icon: <MapPin className="w-5 h-5" />,
label:
currentLang === 'zh'
? '公司地址'
: currentLang === 'zh-tw'
? '公司地址'
: 'Address',
value:
currentLang === 'zh'
? '北京市朝阳区科技园区'
: currentLang === 'zh-tw'
? '北京市朝陽區科技園區'
: 'Beijing Chaoyang Tech Park',
href: '#',
},
];
const socialLinks = [
{ icon: <Facebook className="w-5 h-5" />, href: '#', label: 'Facebook' },
{ icon: <Twitter className="w-5 h-5" />, href: '#', label: 'Twitter' },
{ icon: <Linkedin className="w-5 h-5" />, href: '#', label: 'LinkedIn' },
{ icon: <Youtube className="w-5 h-5" />, href: '#', label: 'YouTube' },
];
return (
<footer className="bg-gradient-to-br from-amber-950 via-amber-900 to-yellow-900 text-yellow-100 relative">
{/* Main Footer Content */}
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-16">
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-6 gap-8">
{/* Company Info */}
<div className="lg:col-span-2">
<div className="mb-6">
<h3 className="text-2xl font-bold text-yellow-300 mb-4">CloudPro</h3>
<p className="text-yellow-200 leading-relaxed mb-6">
{currentLang === 'zh'
? '专业的云服务器代理商,致力于为企业提供稳定、高效、安全的云计算解决方案,助力数字化转型。'
: currentLang === 'zh-tw'
? '專業的雲伺服器代理商,致力於為企業提供穩定、高效、安全的雲端運算解決方案,助力數位化轉型。'
: 'Professional cloud server reseller dedicated to providing stable, efficient, and secure cloud computing solutions for enterprises.'}
</p>
{/* Contact Info */}
<div className="space-y-3">
{contactInfo.map((contact, index) => (
<a
key={index}
href={contact.href}
className="flex items-center space-x-3 text-yellow-200 hover:text-yellow-300 transition-colors duration-200 group"
>
<div className="text-yellow-400 group-hover:text-yellow-300 transition-colors">
{contact.icon}
</div>
<div>
<div className="text-xs text-yellow-300 font-medium">
{contact.label}
</div>
<div className="text-sm">{contact.value}</div>
</div>
</a>
))}
</div>
</div>
</div>
{/* Products Links */}
<div>
<h4 className="text-lg font-semibold text-yellow-300 mb-4">
{footerLinks.products.title}
</h4>
<ul className="space-y-2">
{footerLinks.products.links.map((link, index) => (
<li key={index}>
<a
href={link.href}
className="text-yellow-200 hover:text-yellow-300 transition-colors duration-200 text-sm"
>
{link.name}
</a>
</li>
))}
</ul>
</div>
{/* Solutions Links */}
<div>
<h4 className="text-lg font-semibold text-yellow-300 mb-4">
{footerLinks.solutions.title}
</h4>
<ul className="space-y-2">
{footerLinks.solutions.links.map((link, index) => (
<li key={index}>
<a
href={link.href}
className="text-yellow-200 hover:text-yellow-300 transition-colors duration-200 text-sm"
>
{link.name}
</a>
</li>
))}
</ul>
</div>
{/* Support Links */}
<div>
<h4 className="text-lg font-semibold text-yellow-300 mb-4">
{footerLinks.support.title}
</h4>
<ul className="space-y-2">
{footerLinks.support.links.map((link, index) => (
<li key={index}>
<a
href={link.href}
className="text-yellow-200 hover:text-yellow-300 transition-colors duration-200 text-sm"
>
{link.name}
</a>
</li>
))}
</ul>
</div>
{/* Company Links */}
<div>
<h4 className="text-lg font-semibold text-yellow-300 mb-4">
{footerLinks.company.title}
</h4>
<ul className="space-y-2">
{footerLinks.company.links.map((link, index) => (
<li key={index}>
<a
href={link.href}
className="text-yellow-200 hover:text-yellow-300 transition-colors duration-200 text-sm"
>
{link.name}
</a>
</li>
))}
</ul>
</div>
</div>
{/* Newsletter Subscription */}
<div className="mt-12 pt-8 border-t border-yellow-800">
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 items-center">
<div>
<h4 className="text-lg font-semibold text-yellow-300 mb-2">
{currentLang === 'zh'
? '订阅我们的资讯'
: currentLang === 'zh-tw'
? '訂閱我們的資訊'
: 'Subscribe to Our Newsletter'}
</h4>
<p className="text-yellow-200 text-sm">
{currentLang === 'zh'
? '获取最新的产品更新、技术资讯和优惠活动信息'
: currentLang === 'zh-tw'
? '獲取最新的產品更新、技術資訊和優惠活動信息'
: 'Get the latest product updates, technical insights, and promotional offers'}
</p>
</div>
<div className="flex flex-col sm:flex-row gap-3">
<input
type="email"
placeholder={
currentLang === 'zh'
? '请输入您的邮箱地址'
: currentLang === 'zh-tw'
? '請輸入您的郵箱地址'
: 'Enter your email address'
}
className="flex-1 px-4 py-3 bg-amber-800 border border-yellow-600 rounded-lg text-yellow-100 placeholder-yellow-300 focus:outline-none focus:ring-2 focus:ring-yellow-400 focus:border-transparent"
/>
<button className="px-6 py-3 bg-yellow-500 hover:bg-yellow-600 text-white font-semibold rounded-lg transition-colors duration-200 whitespace-nowrap">
{currentLang === 'zh'
? '订阅'
: currentLang === 'zh-tw'
? '訂閱'
: 'Subscribe'}
</button>
</div>
</div>
</div>
</div>
{/* Bottom Bar */}
<div className="border-t border-yellow-800 bg-amber-950">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-6">
<div className="flex flex-col md:flex-row justify-between items-center space-y-4 md:space-y-0">
{/* Copyright */}
<div className="text-sm text-yellow-300">
© 2024 CloudPro.{' '}
{currentLang === 'zh'
? '版权所有'
: currentLang === 'zh-tw'
? '版權所有'
: 'All rights reserved'}
.<span className="mx-2">|</span>
<a href="/privacy" className="hover:text-yellow-200 transition-colors">
{currentLang === 'zh'
? '隐私政策'
: currentLang === 'zh-tw'
? '隱私政策'
: 'Privacy Policy'}
</a>
<span className="mx-2">|</span>
<a href="/terms" className="hover:text-yellow-200 transition-colors">
{currentLang === 'zh'
? '服务条款'
: currentLang === 'zh-tw'
? '服務條款'
: 'Terms of Service'}
</a>
</div>
{/* Social Links */}
<div className="flex items-center space-x-4">
<span className="text-sm text-yellow-300 mr-2">
{currentLang === 'zh'
? '关注我们:'
: currentLang === 'zh-tw'
? '關注我們:'
: 'Follow us:'}
</span>
{socialLinks.map((social, index) => (
<a
key={index}
href={social.href}
className="text-yellow-300 hover:text-yellow-200 transition-colors duration-200 p-2 hover:bg-amber-800 rounded-full"
aria-label={social.label}
>
{social.icon}
</a>
))}
</div>
</div>
</div>
</div>
{/* Scroll to Top Button */}
{showScrollTop && (
<button
onClick={scrollToTop}
className="fixed bottom-8 right-8 p-3 bg-yellow-500 hover:bg-yellow-600 text-white rounded-full shadow-lg hover:shadow-xl transition-all duration-200 transform hover:scale-110 z-50"
aria-label="Scroll to top"
>
<ArrowUp className="w-5 h-5" />
</button>
)}
</footer>
);
}