2025-09-15 16:58:31 +08:00

157 lines
8.0 KiB
TypeScript
Raw 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 Navigation from '../../../components/Navigation';
import Footer from '../../../components/Footer';
import { useLanguage } from '../../../hooks/useLanguage';
interface PricingPageProps {
params: {
lang: string;
};
}
export default function PricingPage({ params }: PricingPageProps) {
const { currentLang, setCurrentLang, currentContent, createLocalizedPath } = useLanguage(
params.lang,
);
return (
<div className="min-h-screen bg-gray-900 text-white">
<Navigation
currentLang={currentLang}
setCurrentLang={setCurrentLang}
content={currentContent}
createLocalizedPath={createLocalizedPath}
/>
{/* Hero Section */}
<section className="relative z-10 px-6 py-20">
<div className="max-w-7xl mx-auto text-center">
<h1 className="text-4xl md:text-6xl font-bold mb-8 bg-gradient-to-r from-cyan-400 to-blue-500 bg-clip-text text-transparent">
{currentContent.pricing.title}
</h1>
<p className="text-xl text-gray-300 mb-12 max-w-3xl mx-auto">
{currentContent.pricing.subtitle}
</p>
</div>
</section>
{/* Pricing Cards */}
<section className="relative z-10 px-6 py-20">
<div className="max-w-7xl mx-auto">
<div className="grid md:grid-cols-3 gap-8">
{currentContent.pricing.plans.map((plan, index) => (
<div
key={index}
className={`relative bg-gray-800/50 backdrop-blur-sm rounded-xl p-8 border transition-all duration-300 ${
plan.popular
? 'border-cyan-400 scale-105 shadow-2xl shadow-cyan-500/20'
: 'border-cyan-500/20 hover:border-cyan-400/50'
}`}
>
{plan.popular && (
<div className="absolute -top-4 left-1/2 transform -translate-x-1/2">
<span className="bg-gradient-to-r from-cyan-400 to-blue-500 text-white px-4 py-1 rounded-full text-sm font-semibold">
</span>
</div>
)}
<div className="text-center mb-8">
<h3 className="text-2xl font-bold mb-2 text-cyan-400">
{plan.name}
</h3>
<div className="mb-4">
<span className="text-4xl font-bold">{plan.price}</span>
<span className="text-gray-400">{plan.period}</span>
</div>
<p className="text-gray-300">{plan.description}</p>
</div>
<ul className="space-y-4 mb-8">
{plan.features.map((feature, featureIndex) => (
<li
key={featureIndex}
className="flex items-center text-gray-300"
>
<svg
className="w-5 h-5 text-cyan-400 mr-3 flex-shrink-0"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
strokeLinecap="round"
strokeLinejoin="round"
strokeWidth={2}
d="M5 13l4 4L19 7"
/>
</svg>
{feature}
</li>
))}
</ul>
<button
className={`w-full py-4 rounded-lg font-semibold transition-all duration-300 ${
plan.popular
? 'bg-gradient-to-r from-cyan-500 to-blue-600 hover:from-cyan-400 hover:to-blue-500 text-white'
: 'border border-cyan-500 text-cyan-400 hover:bg-cyan-500/10'
}`}
>
</button>
</div>
))}
</div>
</div>
</section>
{/* FAQ Section */}
<section className="relative z-10 px-6 py-20 bg-gray-800/30">
<div className="max-w-4xl mx-auto">
<div className="text-center mb-16">
<h2 className="text-3xl md:text-4xl font-bold mb-6 bg-gradient-to-r from-cyan-400 to-blue-500 bg-clip-text text-transparent">
</h2>
<p className="text-xl text-gray-300"></p>
</div>
<div className="space-y-6">
{[
{
question: '如何选择适合的方案?',
answer: '我们建议根据您的业务规模、预期流量和技术需求来选择。我们的专业团队可以为您提供免费咨询,帮助您选择最适合的方案。',
},
{
question: '是否支持方案升级?',
answer: '是的,您可以随时升级到更高级的方案。升级过程无缝衔接,不会影响您的业务运行。',
},
{
question: '技术支持包含哪些内容?',
answer: '我们提供7x24小时技术支持包括系统监控、故障排除、性能优化、安全更新等全方位服务。',
},
{
question: '数据安全如何保障?',
answer: '我们采用AWS企业级安全标准包括数据加密、访问控制、定期备份、灾难恢复等多重安全保障措施。',
},
].map((faq: { question: string; answer: string }, index: number) => (
<div
key={index}
className="bg-gray-800/50 rounded-lg p-6 border border-cyan-500/20"
>
<h3 className="text-xl font-bold mb-3 text-cyan-400">
{faq.question}
</h3>
<p className="text-gray-300 leading-relaxed">{faq.answer}</p>
</div>
))}
</div>
</div>
</section>
<Footer content={currentContent} createLocalizedPath={createLocalizedPath} />
</div>
);
}