Files
4eb1f622-0599-449d-9efe-c7a…/src/components/ProductsSection.tsx
2026-01-15 15:54:20 +08:00

271 lines
12 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.
import React, { useState } from 'react'
interface ProductsSectionProps {
language?: 'zh' | 'en'
}
export const ProductsSection: React.FC<ProductsSectionProps> = ({ language = 'zh' }) => {
const [activeTab, setActiveTab] = useState(0)
const content = {
zh: {
title: '我们的产品与服务',
subtitle: '全面覆盖企业AI转型的各个阶段',
tabs: ['AI平台', '数据分析', '自动化流程', '智能客服'],
products: [
{
title: 'TuringFlow AI平台',
description: '企业级AI开发与部署平台支持多模态AI模型训练、推理和监控',
features: [
'支持主流深度学习框架',
'可视化模型训练界面',
'自动化模型调优',
'实时性能监控',
],
cta: '了解详情',
},
{
title: '智能数据分析套件',
description: '一站式数据分析解决方案,从数据采集到智能洞察的全流程覆盖',
features: [
'实时数据流处理',
'智能异常检测',
'预测性分析',
'可视化报表',
],
cta: '查看案例',
},
{
title: '流程自动化引擎',
description: '基于RPA和AI的流程自动化平台实现业务流程的智能化改造',
features: [
'无代码流程设计',
'智能文档处理',
'跨系统集成',
'流程监控与优化',
],
cta: '免费试用',
},
{
title: '智能客服解决方案',
description: '融合NLP和知识图谱的智能客服系统提升客户服务效率和质量',
features: [
'多轮对话理解',
'情感分析',
'知识库管理',
'人工客服协同',
],
cta: '预约演示',
},
],
},
en: {
title: 'Our Products & Services',
subtitle: 'Comprehensive coverage of all stages of enterprise AI transformation',
tabs: ['AI Platform', 'Data Analytics', 'Automation', 'Intelligent Support'],
products: [
{
title: 'TuringFlow AI Platform',
description: 'Enterprise-grade AI development and deployment platform supporting multimodal AI model training, inference, and monitoring',
features: [
'Support for mainstream deep learning frameworks',
'Visual model training interface',
'Automated model tuning',
'Real-time performance monitoring',
],
cta: 'Learn More',
},
{
title: 'Intelligent Analytics Suite',
description: 'End-to-end data analytics solution covering the entire process from data collection to intelligent insights',
features: [
'Real-time data stream processing',
'Intelligent anomaly detection',
'Predictive analytics',
'Visual reporting',
],
cta: 'View Cases',
},
{
title: 'Process Automation Engine',
description: 'RPA and AI-based process automation platform for intelligent business process transformation',
features: [
'No-code process design',
'Intelligent document processing',
'Cross-system integration',
'Process monitoring and optimization',
],
cta: 'Free Trial',
},
{
title: 'Intelligent Support Solution',
description: 'NLP and knowledge graph integrated intelligent customer service system to enhance service efficiency and quality',
features: [
'Multi-turn conversation understanding',
'Sentiment analysis',
'Knowledge base management',
'Human agent collaboration',
],
cta: 'Book Demo',
},
],
},
}
const t = content[language]
return (
<section id="products" className="py-16 md:py-24 bg-gradient-to-b from-white to-brand-light">
<div className="container mx-auto px-4">
<div className="text-center max-w-3xl mx-auto mb-12">
<h2 className="text-3xl md:text-4xl font-bold text-brand-dark mb-4">{t.title}</h2>
<p className="text-xl text-gray-600">{t.subtitle}</p>
</div>
{/* Tabs */}
<div className="flex flex-wrap justify-center gap-2 mb-12">
{t.tabs.map((tab, index) => (
<button
key={index}
onClick={() => setActiveTab(index)}
className={`px-6 py-3 rounded-lg font-medium transition-all duration-300 ${activeTab === index ? 'bg-gradient-to-r from-brand-primary to-brand-secondary text-white shadow-lg' : 'bg-white text-gray-700 hover:bg-gray-50 border border-gray-200'}`}
aria-label={`切换到${tab}`}
aria-selected={activeTab === index}
>
{tab}
</button>
))}
</div>
{/* Active Product */}
<div className="bg-white rounded-2xl shadow-xl overflow-hidden animate-fade-in">
<div className="grid grid-cols-1 lg:grid-cols-2">
{/* Left Side - Content */}
<div className="p-8 md:p-12 lg:p-16">
<div className="inline-flex items-center gap-2 bg-gradient-to-r from-brand-primary/10 to-brand-secondary/10 text-brand-primary px-4 py-2 rounded-full mb-6">
<span className="w-2 h-2 bg-brand-primary rounded-full"></span>
<span className="text-sm font-medium"></span>
</div>
<h3 className="text-2xl md:text-3xl font-bold text-brand-dark mb-4">
{t.products[activeTab].title}
</h3>
<p className="text-gray-600 mb-8 text-lg">
{t.products[activeTab].description}
</p>
<ul className="space-y-3 mb-8">
{t.products[activeTab].features.map((feature, index) => (
<li key={index} className="flex items-start gap-3">
<svg className="w-5 h-5 text-brand-primary mt-0.5 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>
<span className="text-gray-700">{feature}</span>
</li>
))}
</ul>
<div className="flex flex-wrap gap-4">
<a
href="#contact"
className="px-8 py-3 bg-gradient-to-r from-brand-primary to-brand-secondary text-white font-semibold rounded-lg hover:shadow-lg transition-all duration-300 hover:scale-105 inline-flex items-center gap-2"
aria-label={t.products[activeTab].cta}
>
<span>{t.products[activeTab].cta}</span>
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M13 7l5 5m0 0l-5 5m5-5H6" />
</svg>
</a>
<a
href="#demo"
className="px-8 py-3 bg-white border-2 border-gray-200 text-gray-700 font-semibold rounded-lg hover:border-brand-primary hover:text-brand-primary transition-all duration-300 inline-flex items-center gap-2"
aria-label="查看技术文档"
>
<svg className="w-5 h-5" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth="2" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" />
</svg>
</a>
</div>
</div>
{/* Right Side - Visual */}
<div className="bg-gradient-to-br from-brand-primary/5 to-brand-secondary/5 p-8 md:p-12 lg:p-16 flex items-center justify-center">
<div className="relative w-full max-w-md">
{/* Decorative Circles */}
<div className="absolute top-0 left-0 w-32 h-32 bg-gradient-to-r from-brand-primary/20 to-brand-secondary/20 rounded-full blur-xl"></div>
<div className="absolute bottom-0 right-0 w-40 h-40 bg-gradient-to-l from-brand-accent/20 to-brand-primary/20 rounded-full blur-xl"></div>
{/* Product Visualization */}
<div className="relative bg-white rounded-xl shadow-lg p-6 border border-gray-100">
<div className="flex items-center gap-3 mb-6">
<div className="w-10 h-10 bg-gradient-to-br from-brand-primary to-brand-secondary rounded-lg flex items-center justify-center">
<span className="text-white font-bold">TF</span>
</div>
<div>
<h4 className="font-bold text-brand-dark"></h4>
<p className="text-sm text-gray-500"></p>
</div>
</div>
{/* Stats Grid */}
<div className="grid grid-cols-2 gap-4 mb-6">
<div className="bg-gray-50 rounded-lg p-4">
<div className="text-2xl font-bold text-brand-primary mb-1">99.9%</div>
<div className="text-sm text-gray-600"></div>
</div>
<div className="bg-gray-50 rounded-lg p-4">
<div className="text-2xl font-bold text-brand-secondary mb-1">50ms</div>
<div className="text-sm text-gray-600"></div>
</div>
<div className="bg-gray-50 rounded-lg p-4">
<div className="text-2xl font-bold text-brand-accent mb-1">1M+</div>
<div className="text-sm text-gray-600">/</div>
</div>
<div className="bg-gray-50 rounded-lg p-4">
<div className="text-2xl font-bold text-brand-primary mb-1">24/7</div>
<div className="text-sm text-gray-600"></div>
</div>
</div>
{/* Performance Chart */}
<div className="bg-gray-50 rounded-lg p-4">
<div className="flex justify-between items-center mb-3">
<span className="text-sm font-medium text-gray-700"></span>
<span className="text-xs text-green-600 bg-green-100 px-2 py-1 rounded-full">+12%</span>
</div>
<div className="h-2 bg-gray-200 rounded-full overflow-hidden">
<div className="h-full bg-gradient-to-r from-brand-primary to-brand-secondary w-3/4"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{/* All Products Grid */}
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6 mt-12">
{t.products.map((product, index) => (
<div
key={index}
className={`bg-white border rounded-xl p-6 hover:shadow-lg transition-all duration-300 hover:-translate-y-1 cursor-pointer ${activeTab === index ? 'border-brand-primary' : 'border-gray-200'}`}
onClick={() => setActiveTab(index)}
aria-label={`查看${product.title}`}
role="button"
tabIndex={0}
onKeyDown={(e) => e.key === 'Enter' && setActiveTab(index)}
>
<div className="w-12 h-12 bg-gradient-to-br from-brand-primary/10 to-brand-secondary/10 rounded-lg flex items-center justify-center mb-4">
<span className="text-brand-primary font-bold">{index + 1}</span>
</div>
<h4 className="font-bold text-brand-dark mb-2">{product.title}</h4>
<p className="text-sm text-gray-600 line-clamp-2">{product.description}</p>
</div>
))}
</div>
</div>
</section>
)
}