refactor(link): 营销页站内链接统一 StaticLink(静态托管适配)+ 删除 0 引用死代码组件 + QA 页 client/server 拆分

This commit is contained in:
2026-08-31 12:03:12 +08:00
parent 77b455c04e
commit 08a020105f
26 changed files with 297 additions and 571 deletions
+5 -8
View File
@@ -48,14 +48,11 @@ export function CaseCard({
>
{/* Background image */}
{image && (
<div className="absolute inset-0 transition-opacity duration-500 opacity-[0.02] group-hover:opacity-[0.05]">
<img
src={image}
alt=""
className="w-full h-full object-cover"
loading="lazy"
/>
</div>
<div
aria-hidden="true"
style={{ backgroundImage: `url(${image})` }}
className="absolute inset-0 bg-cover bg-center transition-opacity duration-500 opacity-[0.02] group-hover:opacity-[0.05]"
/>
)}
<div className="relative z-10 flex flex-col flex-1">
+6 -5
View File
@@ -3,6 +3,7 @@
import { motion, useScroll, useTransform } from 'framer-motion';
import { useRef, useState, useEffect } from 'react';
import { ScrollReveal, StaggerReveal } from '@/components/ui/scroll-reveal';
import { StaticLink } from '@/components/ui/static-link';
import { SectionHeader } from '@/components/sections/section-header';
import { ServiceCard } from '@/components/sections/service-card';
import { ScrollProgress } from '@/components/ui/scroll-progress';
@@ -175,10 +176,10 @@ function CaseDetailHero({ data }: CaseDetailHeroProps) {
transition={{ duration: 0.8, delay: 0.8, ease: EASE }}
>
<Button size="lg" asChild>
<a href="/contact">
<StaticLink href="/contact">
咨询类似方案
<ArrowRight className="w-4 h-4 ml-2" />
</a>
</StaticLink>
</Button>
<Button size="lg" variant="outline" asChild>
<a href="#solution">查看方案</a>
@@ -512,13 +513,13 @@ function CTASection() {
</p>
<div className="flex flex-col sm:flex-row justify-center gap-4">
<Button size="lg" asChild>
<a href="/contact">
<StaticLink href="/contact">
免费咨询
<ArrowRight className="w-4 h-4 ml-2" />
</a>
</StaticLink>
</Button>
<Button size="lg" variant="outline" asChild>
<a href="/cases">查看更多案例</a>
<StaticLink href="/cases">查看更多案例</StaticLink>
</Button>
</div>
</ScrollReveal>
+4 -5
View File
@@ -38,11 +38,10 @@ export function InsightCard({
>
{/* Background image */}
{image && (
<img
src={image}
alt=""
className="absolute inset-0 w-full h-full object-cover transition-transform duration-700 group-hover:scale-105 opacity-10"
loading="lazy"
<div
aria-hidden="true"
style={{ backgroundImage: `url(${image})` }}
className="absolute inset-0 bg-cover bg-center transition-transform duration-700 group-hover:scale-105 opacity-10"
/>
)}
+1 -1
View File
@@ -174,7 +174,7 @@ export function WhyUsSection() {
{tech.abbr}
</span>
</div>
<span className="text-[10px] text-[var(--color-text-hint)]">{tech.name}</span>
<span className="text-[10px] text-[var(--color-text-muted)]">{tech.name}</span>
</div>
))}
</div>