dev #15
@@ -20,9 +20,10 @@ export function AboutClient() {
|
||||
const now = new Date();
|
||||
const diff = now.getTime() - foundingDate.getTime();
|
||||
|
||||
const days = Math.floor(diff / (1000 * 60 * 60 * 24));
|
||||
const years = Math.floor(days / 365);
|
||||
const months = Math.floor((days % 365) / 30);
|
||||
const totalDays = Math.floor(diff / (1000 * 60 * 60 * 24));
|
||||
const years = Math.floor(totalDays / 365);
|
||||
const months = Math.floor((totalDays % 365) / 30);
|
||||
const days = totalDays % 30;
|
||||
|
||||
setOperationTime({ days, months, years });
|
||||
};
|
||||
|
||||
@@ -12,7 +12,7 @@ import { Search, ArrowLeft, Check, TrendingUp, ChevronLeft, ChevronRight, Filter
|
||||
import { StaticLink } from '@/components/ui/static-link';
|
||||
import { motion } from 'framer-motion';
|
||||
|
||||
const categories = ['全部', '软件产品', '云服务', '数据分析', '信息安全'];
|
||||
const categories = ['全部', '企业软件', '数据产品'];
|
||||
const ITEMS_PER_PAGE = 6;
|
||||
|
||||
export default function ProductsPage() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import { Fragment } from 'react';
|
||||
import { StaticLink } from '@/components/ui/static-link';
|
||||
import { ChevronRight, Home } from 'lucide-react';
|
||||
|
||||
@@ -14,20 +15,30 @@ interface BreadcrumbProps {
|
||||
|
||||
export function Breadcrumb({ items }: BreadcrumbProps) {
|
||||
return (
|
||||
<nav aria-label="breadcrumb" className="flex items-center space-x-2 text-sm text-[#5C5C5C] py-4">
|
||||
<StaticLink href="/" className="flex items-center hover:text-[#C41E3A] transition-colors" aria-label="返回首页">
|
||||
<Home className="w-4 h-4" />
|
||||
<nav
|
||||
aria-label="breadcrumb"
|
||||
className="flex items-center text-xs md:text-sm text-[#5C5C5C] py-3 md:py-4"
|
||||
style={{ lineHeight: '1' }}
|
||||
>
|
||||
<StaticLink
|
||||
href="/"
|
||||
className="hover:text-[#C41E3A] transition-colors shrink-0"
|
||||
aria-label="返回首页"
|
||||
style={{ minHeight: 0, minWidth: 0 }}
|
||||
>
|
||||
<Home className="w-3.5 h-3.5" />
|
||||
</StaticLink>
|
||||
{items.map((item, index) => (
|
||||
<div key={index} className="flex items-center">
|
||||
<ChevronRight className="w-4 h-4 text-[#E5E5E5]" />
|
||||
<Fragment key={index}>
|
||||
<ChevronRight className="w-3 h-3 text-[#CCCCCC] shrink-0 mx-1" />
|
||||
<StaticLink
|
||||
href={item.href}
|
||||
className="ml-2 hover:text-[#C41E3A] transition-colors"
|
||||
className="hover:text-[#C41E3A] transition-colors whitespace-nowrap"
|
||||
style={{ minHeight: 0, minWidth: 0 }}
|
||||
>
|
||||
{item.label}
|
||||
</StaticLink>
|
||||
</div>
|
||||
</Fragment>
|
||||
))}
|
||||
</nav>
|
||||
);
|
||||
|
||||
@@ -3,12 +3,13 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { motion } from 'framer-motion';
|
||||
import { StaticLink } from '@/components/ui/static-link';
|
||||
import { RippleButton, SealButton } from '@/components/ui/ripple-button';
|
||||
import { RippleButton } from '@/components/ui/ripple-button';
|
||||
import { Button } from '@/components/ui/button';
|
||||
import { MagneticButton, BlurReveal, CounterWithEffect } from '@/lib/animations';
|
||||
import { COMPANY_INFO, STATS } from '@/lib/constants';
|
||||
import { ArrowRight, Shield, Zap, Award } from 'lucide-react';
|
||||
import { useReducedMotion } from '@/hooks/use-reduced-motion';
|
||||
import { trackButtonClick, trackServiceInterest } from '@/lib/analytics';
|
||||
import { trackButtonClick } from '@/lib/analytics';
|
||||
|
||||
interface HeroContentProps {
|
||||
isVisible: boolean;
|
||||
@@ -95,11 +96,6 @@ export function HeroDescription(_props: HeroContentProps) {
|
||||
export function HeroButtons({ isVisible }: HeroContentProps) {
|
||||
const shouldReduceMotion = useReducedMotion();
|
||||
|
||||
const handleConsultClick = () => {
|
||||
trackButtonClick('consult_now', 'hero_section');
|
||||
trackServiceInterest('consultation');
|
||||
};
|
||||
|
||||
const handleLearnMoreClick = () => {
|
||||
trackButtonClick('learn_more', 'hero_section');
|
||||
scrollTo('about');
|
||||
@@ -113,12 +109,12 @@ export function HeroButtons({ isVisible }: HeroContentProps) {
|
||||
className="flex flex-col sm:flex-row items-center justify-center gap-4 mb-8"
|
||||
>
|
||||
<MagneticButton strength={0.4}>
|
||||
<StaticLink href="/contact" onClick={handleConsultClick}>
|
||||
<SealButton size="lg" className="min-w-45">
|
||||
<Button size="lg" className="min-w-45 bg-[#C41E3A] hover:bg-[#A01830] text-white shadow-[0_6px_20px_rgba(196,30,58,0.3)]" asChild>
|
||||
<StaticLink href="/contact">
|
||||
立即咨询
|
||||
<ArrowRight className="w-4 h-4 ml-2" />
|
||||
</SealButton>
|
||||
</StaticLink>
|
||||
</StaticLink>
|
||||
</Button>
|
||||
</MagneticButton>
|
||||
<MagneticButton strength={0.4}>
|
||||
<RippleButton
|
||||
|
||||
@@ -31,7 +31,7 @@ export function PageHeader({ badge, title, description, className = '' }: PageHe
|
||||
/>
|
||||
<SubtleDots color="#C41E3A" count={6} />
|
||||
|
||||
<div className="container-wide relative z-10 pt-32 pb-20" ref={ref}>
|
||||
<div className="container-wide relative z-10 pt-8 pb-12" ref={ref}>
|
||||
<motion.div
|
||||
initial={{ opacity: 0, y: 20 }}
|
||||
animate={isInView ? { opacity: 1, y: 0 } : {}}
|
||||
|
||||
Reference in New Issue
Block a user