first commit

This commit is contained in:
“dongming”
2026-01-21 16:05:30 +08:00
commit faa74086fe
69 changed files with 14801 additions and 0 deletions

446
src/pages/About.tsx Normal file
View File

@@ -0,0 +1,446 @@
import { motion } from 'framer-motion';
import { useRef } from 'react';
import {
Target,
Heart,
Award,
Users,
Calendar,
TrendingUp,
Building2,
Globe,
} from 'lucide-react';
import { Header } from '../components/Header';
import { Footer } from '../components/Footer';
import { COMPANY_INFO } from '../lib/constants';
import { usePageTitle } from '../hooks/usePageTitle';
// 发展历程数据
const milestones = [
{
year: '2010',
title: '公司成立',
description: '示例集团在北京成立,开始布局金融服务业务',
icon: Building2,
},
{
year: '2012',
title: '首次战略融资',
description: '完成 A 轮融资,获得知名投资机构认可',
icon: TrendingUp,
},
{
year: '2015',
title: '业务扩展',
description: '成立科技研发子公司,进军科技领域',
icon: Globe,
},
{
year: '2018',
title: '规模扩张',
description: '员工规模突破 200 人,服务客户超过 500 家',
icon: Users,
},
{
year: '2020',
title: '产业投资布局',
description: '成立产业投资基金,全面进入投资领域',
icon: Target,
},
{
year: '2023',
title: '集团化运营',
description: '正式更名为示例集团,形成多元化业务体系',
icon: Award,
},
{
year: '2025',
title: '新里程碑',
description: '管理资产突破 500 亿,员工规模超过 500 人',
icon: Calendar,
},
];
// 核心价值观数据
const coreValues = [
{
icon: Heart,
title: '诚信为本',
description: '诚信是企业发展的基石,我们始终坚守诚信底线,与客户、合作伙伴建立长期信任关系',
color: 'from-red-500 to-red-600',
},
{
icon: Target,
title: '创新驱动',
description: '创新是企业发展的动力,我们持续投入研发,不断推出创新产品和服务',
color: 'from-blue-500 to-blue-600',
},
{
icon: Award,
title: '卓越品质',
description: '品质是企业生存的根本,我们追求卓越,确保每一个项目都达到最高标准',
color: 'from-yellow-500 to-yellow-600',
},
{
icon: Users,
title: '共赢合作',
description: '合作是企业成功的关键,我们与客户、员工、合作伙伴实现互利共赢',
color: 'from-green-500 to-green-600',
},
];
// 团队成员数据
const teamMembers = [
{
name: '张明远',
position: '董事长兼 CEO',
bio: '毕业于清华大学金融系,拥有 20 年金融行业经验,曾任多家知名金融机构高管。',
},
{
name: '李晓峰',
position: '首席财务官 CFO',
bio: '持有注册会计师资格,曾在四大会计师事务所工作 15 年,专业财务管理和资本运作专家。',
},
{
name: '王建华',
position: '首席技术官 CTO',
bio: '计算机科学博士,曾在国内外知名科技公司担任技术负责人,拥有多项技术专利。',
},
{
name: '陈静雅',
position: '首席运营官 COO',
bio: 'MBA 学位,拥有丰富的企业运营管理经验,擅长战略规划和流程优化。',
},
];
// 荣誉资质数据
const honors = [
{ name: '国家级高新技术企业认证', year: '2020' },
{ name: '北京市优秀企业', year: '2021' },
{ name: '中国最佳雇主品牌', year: '2022' },
{ name: '金融科技创新奖', year: '2023' },
{ name: '年度优秀企业', year: '2024' },
{ name: 'ESG 最佳实践奖', year: '2025' },
];
/**
* About 组件 - 关于我们页面
*/
export const About: React.FC = () => {
const timelineRef = useRef<HTMLDivElement>(null);
usePageTitle('关于我们');
return (
<motion.div
className="min-h-screen bg-background"
initial={{ opacity: 0 }}
animate={{ opacity: 1 }}
transition={{ duration: 0.5 }}
>
{/* 顶部导航 */}
<Header />
{/* 主内容 */}
<main>
{/* 页面标题区域 */}
<section className="pt-32 pb-16 bg-gradient-to-br from-primary to-primary-light">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<motion.div
className="text-center text-white"
initial={{ opacity: 0, y: 30 }}
animate={{ opacity: 1, y: 0 }}
transition={{ duration: 0.6 }}
>
<h1 className="text-4xl md:text-5xl font-bold mb-4">
</h1>
<p className="text-xl text-white/80 max-w-3xl mx-auto">
2010
</p>
</motion.div>
</div>
</section>
{/* 公司简介 */}
<section className="py-20">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<div className="grid lg:grid-cols-2 gap-12 items-center">
<motion.div
initial={{ opacity: 0, x: -30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.6 }}
>
<h2 className="text-3xl font-bold text-primary-dark mb-6">
</h2>
<div className="space-y-6 text-gray-600 leading-relaxed">
<p>
<strong>{COMPANY_INFO.fullName}</strong>
{COMPANY_INFO.established} {COMPANY_INFO.headquarters}
</p>
<p>
"诚信、创新、共赢"
</p>
<p>
1000
500 亿
</p>
</div>
{/* 核心数据 */}
<div className="mt-8 grid grid-cols-3 gap-6">
<div className="text-center p-4 bg-primary/5 rounded-xl">
<div className="text-2xl font-bold text-primary">15+</div>
<div className="text-sm text-gray-600"></div>
</div>
<div className="text-center p-4 bg-accent/10 rounded-xl">
<div className="text-2xl font-bold text-accent-dark">500+</div>
<div className="text-sm text-gray-600"></div>
</div>
<div className="text-center p-4 bg-green-100 rounded-xl">
<div className="text-2xl font-bold text-green-700">1000+</div>
<div className="text-sm text-gray-600"></div>
</div>
</div>
</motion.div>
<motion.div
className="relative"
initial={{ opacity: 0, x: 30 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.6, delay: 0.2 }}
>
<div className="aspect-[4/3] rounded-2xl overflow-hidden shadow-xl">
<img
src="/images/about-office.jpg"
alt="示例集团办公环境"
className="w-full h-full object-cover"
/>
<div className="absolute inset-0 bg-gradient-to-t from-black/50 to-transparent flex items-end justify-center p-8">
<div className="text-center text-white">
<div className="text-4xl font-bold mb-2"></div>
<div className="text-xl opacity-90"> · </div>
</div>
</div>
</div>
{/* 装饰元素 */}
<div className="absolute -bottom-6 -right-6 w-32 h-32 bg-accent/20 rounded-2xl -z-10" />
<div className="absolute -top-6 -left-6 w-24 h-24 bg-primary/10 rounded-2xl -z-10" />
</motion.div>
</div>
</div>
</section>
{/* 发展历程时间线 */}
<section className="py-20 bg-white" ref={timelineRef}>
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<motion.div
className="text-center mb-16"
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.6 }}
>
<h2 className="text-3xl font-bold text-primary-dark mb-4">
</h2>
<p className="text-lg text-gray-600">
</p>
</motion.div>
{/* 时间线 */}
<div className="relative">
{/* 中轴线 */}
<div className="absolute left-1/2 -translate-x-1/2 w-0.5 h-full bg-gradient-to-b from-primary via-accent to-primary-light hidden md:block" />
{/* 时间线项目 */}
<div className="space-y-12">
{milestones.map((milestone, index) => (
<motion.div
key={milestone.year}
className={`flex items-center gap-8 ${
index % 2 === 0 ? 'md:flex-row' : 'md:flex-row-reverse'
}`}
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ delay: index * 0.1, duration: 0.5 }}
>
{/* 内容区域 */}
<div className="flex-1 text-center md:text-left">
<div
className={`p-6 bg-white rounded-2xl shadow-sm border border-gray-100 hover:shadow-md transition-shadow ${
index % 2 === 0 ? 'md:pr-12' : 'md:pl-12'
}`}
>
<span className="inline-block px-3 py-1 bg-accent/20 text-accent-dark text-sm font-semibold rounded-full mb-3">
{milestone.year}
</span>
<h3 className="text-xl font-semibold text-primary-dark mb-2">
{milestone.title}
</h3>
<p className="text-gray-600">{milestone.description}</p>
</div>
</div>
{/* 中间图标 */}
<div className="hidden md:flex items-center justify-center w-12 h-12 rounded-full bg-primary text-white shadow-lg z-10">
<milestone.icon size={20} />
</div>
{/* 空白区域 */}
<div className="flex-1 hidden md:block" />
</motion.div>
))}
</div>
</div>
</div>
</section>
{/* 企业文化 */}
<section className="py-20 bg-primary-dark text-white">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<motion.div
className="text-center mb-16"
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.6 }}
>
<h2 className="text-3xl font-bold mb-4"></h2>
<p className="text-lg text-gray-300">
</p>
</motion.div>
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-8">
{coreValues.map((value, index) => (
<motion.div
key={value.title}
className="text-center p-6 rounded-2xl bg-white/5 hover:bg-white/10 transition-colors"
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ delay: index * 0.1, duration: 0.5 }}
whileHover={{ y: -5 }}
>
<div
className={`inline-flex items-center justify-center w-16 h-16 rounded-2xl bg-gradient-to-br ${value.color} text-white mb-5`}
>
<value.icon size={32} />
</div>
<h3 className="text-xl font-semibold mb-3">{value.title}</h3>
<p className="text-gray-300 text-sm leading-relaxed">
{value.description}
</p>
</motion.div>
))}
</div>
</div>
</section>
{/* 团队介绍 */}
<section className="py-20">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<motion.div
className="text-center mb-16"
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.6 }}
>
<h2 className="text-3xl font-bold text-primary-dark mb-4">
</h2>
<p className="text-lg text-gray-600">
</p>
</motion.div>
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-8">
{teamMembers.map((member, index) => (
<motion.div
key={member.name}
className="text-center p-6 bg-white rounded-2xl shadow-sm border border-gray-100 hover:shadow-lg transition-shadow"
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ delay: index * 0.1, duration: 0.5 }}
whileHover={{ y: -5 }}
>
{/* 团队成员头像 */}
<div className="w-24 h-24 mx-auto mb-4 rounded-full overflow-hidden ring-4 ring-primary/10">
<div className="w-full h-full rounded-full bg-gradient-to-br from-primary to-primary-light flex items-center justify-center text-white text-2xl font-bold shadow-lg">
{member.name.charAt(0)}
</div>
</div>
<h3 className="text-xl font-semibold text-primary-dark">
{member.name}
</h3>
<p className="text-accent font-medium mb-3">{member.position}</p>
<p className="text-gray-600 text-sm leading-relaxed">
{member.bio}
</p>
</motion.div>
))}
</div>
</div>
</section>
{/* 资质荣誉 */}
<section className="py-20 bg-white">
<div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
<motion.div
className="text-center mb-16"
initial={{ opacity: 0, y: 30 }}
whileInView={{ opacity: 1, y: 0 }}
viewport={{ once: true }}
transition={{ duration: 0.6 }}
>
<h2 className="text-3xl font-bold text-primary-dark mb-4">
</h2>
<p className="text-lg text-gray-600">
</p>
</motion.div>
<div className="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
{honors.map((honor, index) => (
<motion.div
key={honor.name}
className="flex items-center gap-4 p-5 bg-background rounded-xl hover:shadow-md transition-shadow"
initial={{ opacity: 0, x: -20 }}
whileInView={{ opacity: 1, x: 0 }}
viewport={{ once: true }}
transition={{ delay: index * 0.1, duration: 0.5 }}
whileHover={{ x: 5 }}
>
<div className="flex-shrink-0 w-16 h-16 rounded-lg bg-gradient-to-br from-accent/20 to-accent/10 flex items-center justify-center">
<Award size={28} className="text-accent" />
</div>
<div className="flex-1">
<h4 className="font-medium text-primary-dark">
{honor.name}
</h4>
<p className="text-sm text-gray-500">{honor.year}</p>
</div>
</motion.div>
))}
</div>
</div>
</section>
</main>
{/* 页脚 */}
<Footer />
</motion.div>
);
};
export default About;