From 1f591fe2b49344893dba1371b103cd5f50403239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Mon, 27 Apr 2026 20:53:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E7=BD=91=E7=AB=99?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91=E4=B8=8E=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 完善产品页面布局与交互 - 优化服务详情页用户体验 - 增强新闻模块内容展示 - 改进团队页面设计 - 优化全局样式和响应式布局 - 添加分页组件支持 - 提升性能与SEO优化 - 修复已知问题与改进代码质量 --- src/app/(marketing)/about/client.tsx | 34 +++++-- src/app/(marketing)/cases/[id]/client.tsx | 38 ++++---- src/app/(marketing)/cases/page.tsx | 80 +++++------------ src/app/(marketing)/contact/page.tsx | 26 +++--- src/app/(marketing)/home-content.tsx | 6 ++ src/app/(marketing)/layout.tsx | 1 + .../news/[slug]/NewsDetailClient.tsx | 12 +-- src/app/(marketing)/news/page.tsx | 79 +++++++---------- src/app/(marketing)/products/page.tsx | 71 +++++---------- src/app/(marketing)/services/[id]/client.tsx | 5 +- src/app/(marketing)/services/page.tsx | 65 ++++---------- .../solutions/[id]/solution-detail-client.tsx | 22 ++--- src/app/(marketing)/solutions/page.tsx | 21 ++--- src/app/(marketing)/team/client.tsx | 23 +++-- src/app/error.tsx | 18 ++-- src/app/globals.css | 81 ++++++++--------- src/app/layout.tsx | 2 +- src/app/not-found.tsx | 24 ++--- src/app/privacy/page.tsx | 2 +- src/app/terms/page.tsx | 4 +- src/components/analytics/CookieConsent.tsx | 12 +-- src/components/effects/data-particle-flow.tsx | 2 +- src/components/effects/gradient-flow.tsx | 2 +- src/components/effects/subtle-dots.tsx | 2 +- src/components/layout/breadcrumb.tsx | 51 +++++++---- src/components/layout/footer.tsx | 34 +++---- src/components/layout/header.tsx | 14 +-- src/components/layout/mobile-menu.tsx | 4 +- src/components/layout/mobile-tab-bar.tsx | 13 +-- src/components/layout/product-footer.tsx | 8 +- src/components/layout/product-header.tsx | 4 +- src/components/layout/service-footer.tsx | 8 +- src/components/layout/service-header.tsx | 4 +- .../products/product-benefits-section.tsx | 4 +- .../products/product-cta-section.tsx | 4 +- .../products/product-features-section.tsx | 13 +-- .../products/product-hero-section.tsx | 4 +- .../products/product-overview-section.tsx | 2 +- .../products/product-pricing-section.tsx | 10 +-- .../products/product-process-section.tsx | 4 +- .../products/product-specs-section.tsx | 4 +- src/components/sections/about-section.tsx | 32 ++++--- src/components/sections/cases-section.tsx | 25 ++---- src/components/sections/contact-section.tsx | 32 ++++--- .../sections/hero-section-atoms.tsx | 19 ++-- src/components/sections/hero-section.tsx | 8 +- src/components/sections/hero-stats-ssr.tsx | 2 +- .../sections/home-solutions-section.tsx | 17 ++-- .../sections/methodology-section.tsx | 32 +++++-- src/components/sections/news-section.tsx | 21 ++--- src/components/sections/products-section.tsx | 22 ++--- src/components/sections/services-section.tsx | 18 ++-- src/components/sections/team-section.tsx | 23 ++--- .../services/service-cases-section.tsx | 2 +- .../services/service-challenges-section.tsx | 4 +- .../services/service-cta-section.tsx | 4 +- .../services/service-features-section.tsx | 2 +- .../services/service-hero-section.tsx | 10 +-- .../services/service-outcomes-section.tsx | 6 +- .../services/service-process-section.tsx | 4 +- .../solutions/accompany-section.tsx | 10 +-- .../solutions/consulting-section.tsx | 10 +-- .../solutions/tech-solution-section.tsx | 10 +-- src/components/ui/animated-card.tsx | 2 +- src/components/ui/back-button.tsx | 2 +- src/components/ui/back-to-top.tsx | 2 +- src/components/ui/badge.tsx | 4 +- src/components/ui/button.tsx | 6 +- src/components/ui/dialog.tsx | 2 +- src/components/ui/error-boundary.tsx | 2 +- src/components/ui/flip-clock.tsx | 12 +-- src/components/ui/floating-cta.tsx | 4 +- src/components/ui/ink-decoration.tsx | 10 +-- src/components/ui/input.tsx | 6 +- src/components/ui/insight-card.tsx | 4 +- src/components/ui/optimized-image.tsx | 2 +- src/components/ui/page-header.tsx | 4 +- src/components/ui/page-transitions.tsx | 2 +- src/components/ui/pagination.tsx | 88 +++++++++++++++++++ src/components/ui/ripple-button.tsx | 8 +- src/components/ui/scroll-animations.tsx | 2 +- src/components/ui/scroll-progress.tsx | 2 +- src/components/ui/testimonial-card.tsx | 4 +- src/components/ui/textarea.tsx | 6 +- src/components/ui/touch-button.tsx | 14 +-- src/components/ui/touch-optimized.tsx | 4 +- 86 files changed, 688 insertions(+), 634 deletions(-) create mode 100644 src/components/ui/pagination.tsx diff --git a/src/app/(marketing)/about/client.tsx b/src/app/(marketing)/about/client.tsx index 3de819a..266e966 100644 --- a/src/app/(marketing)/about/client.tsx +++ b/src/app/(marketing)/about/client.tsx @@ -6,7 +6,9 @@ import { useRef, useMemo } from 'react'; import { COMPANY_INFO, STATS } from '@/lib/constants'; import { Card, CardContent } from '@/components/ui/card'; import { PageHeader } from '@/components/ui/page-header'; -import { Lightbulb, Users, Target, MapPin, Mail } from 'lucide-react'; +import { Button } from '@/components/ui/button'; +import { StaticLink } from '@/components/ui/static-link'; +import { Lightbulb, Users, Target, MapPin, Mail, ArrowRight } from 'lucide-react'; export function AboutClient() { const contentRef = useRef(null); @@ -136,7 +138,7 @@ export function AboutClient() { {STATS.map((stat, idx) => ( -
{stat.value}
+
{stat.value}
{stat.label}
@@ -159,7 +161,7 @@ export function AboutClient() { transition={{ duration: 0.5, delay: 0.4 + idx * 0.1 }} className="flex items-start gap-4 p-6 bg-[#FFFBF5] rounded-xl border border-[#E5E5E5] hover:border-[#1C1C1C] transition-all duration-300" > -
+
@@ -188,7 +190,7 @@ export function AboutClient() { className="flex flex-col md:flex-row md:items-start gap-4 p-6 bg-[#FFFBF5] rounded-xl border border-[#E5E5E5]" >
- {milestone.date} + {milestone.date}

{milestone.title}

@@ -209,7 +211,7 @@ export function AboutClient() {
- +

公司地址

@@ -218,16 +220,34 @@ export function AboutClient() {
- +

电子邮箱

-

{COMPANY_INFO.email}

+ + {COMPANY_INFO.email} +
+ + {/* Bottom CTA */} +
+

+ 想了解更多? +

+

+ 我们期待与您交流,共同探讨数字化转型之路 +

+ +
diff --git a/src/app/(marketing)/cases/[id]/client.tsx b/src/app/(marketing)/cases/[id]/client.tsx index 5cb6bbd..298f989 100644 --- a/src/app/(marketing)/cases/[id]/client.tsx +++ b/src/app/(marketing)/cases/[id]/client.tsx @@ -84,7 +84,7 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) {
- + {caseItem.category}

@@ -105,9 +105,9 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) { >
{/* 客户遇到的成长瓶颈 */} -
+
-
+

@@ -120,9 +120,9 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) {

{/* 我们如何智连未来 */} -
+
-
+

@@ -138,9 +138,9 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) { {/* 共同成长的故事 */} {caseItem.keyMoments && caseItem.keyMoments.length > 0 && ( -
+
-
+

@@ -154,7 +154,7 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) { className="p-4 bg-white rounded-lg border border-[#E5E5E5]" >
- +

{moment.title} @@ -172,9 +172,9 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) { {/* 今天,他们走到了哪里 */} {caseItem.results && caseItem.results.length > 0 && ( -
+
-
+

@@ -185,10 +185,10 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) { {caseItem.results.map((result, index) => (
- -
+ +
{result.value}
@@ -202,9 +202,9 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) { {/* 客户证言精选 */} {caseItem.testimonial && ( -
+
-
+

@@ -212,12 +212,12 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) {

- +

{caseItem.testimonial.quote}

-
+
@@ -266,13 +266,13 @@ export function CaseDetailClient({ caseItem }: CaseDetailClientProps) {
-
+

想要了解更多?

联系我们的专家团队,获取定制化解决方案

) : ( <> @@ -124,7 +133,7 @@ export default function CasesPage() { >
- +
@@ -135,11 +144,11 @@ export default function CasesPage() {
- + {caseItem.client}
-

+

{caseItem.title}

@@ -160,7 +169,7 @@ export default function CasesPage() { {caseItem.description}

-
+
查看详情
@@ -170,43 +179,7 @@ export default function CasesPage() { ))}
- {totalPages > 1 && ( -
- - - {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( - - ))} - - -
- )} +
显示 {paginatedCases.length} 条,共 {filteredCases.length} 条案例 @@ -229,19 +202,9 @@ export default function CasesPage() {

让我们与您同行,共创美好未来

-
- - -
diff --git a/src/app/(marketing)/contact/page.tsx b/src/app/(marketing)/contact/page.tsx index df67346..4d7112a 100644 --- a/src/app/(marketing)/contact/page.tsx +++ b/src/app/(marketing)/contact/page.tsx @@ -162,7 +162,7 @@ function ContactFormContent() { /> )} -
+
@@ -175,11 +175,11 @@ function ContactFormContent() { `} >
-
+
联系我们

- 开启 合作 + 开启 合作

无论您有任何问题或合作意向,我们都很乐意与您交流 @@ -198,19 +198,19 @@ function ContactFormContent() {

联系方式

-
-
+
@@ -223,33 +223,33 @@ function ContactFormContent() {
- +

工作时间

周一至周五 - 9:00 - 18:00 + 9:00 - 18:00
- +

我们的承诺

-
+

工作日 2 小时内快速响应您的咨询

-
+

提供免费的业务咨询和方案评估服务

-
+

根据您的需求量身定制最优解决方案

@@ -268,7 +268,7 @@ function ContactFormContent() { {isSubmitted ? (
-
+

消息已发送

diff --git a/src/app/(marketing)/home-content.tsx b/src/app/(marketing)/home-content.tsx index d7c1550..f612aaa 100644 --- a/src/app/(marketing)/home-content.tsx +++ b/src/app/(marketing)/home-content.tsx @@ -105,6 +105,8 @@ function HomeContent({ heroStats }: { heroStats: ReactNode }) { {/* 墨韵分割线 */}
+ {/* 墨韵分割线 */} +
{/* 墨韵分割线 */}
@@ -112,7 +114,11 @@ function HomeContent({ heroStats }: { heroStats: ReactNode }) { {/* 墨韵分割线 */}
+ {/* 墨韵分割线 */} +
+ {/* 墨韵分割线 */} +
); diff --git a/src/app/(marketing)/layout.tsx b/src/app/(marketing)/layout.tsx index cf9553f..c84286c 100644 --- a/src/app/(marketing)/layout.tsx +++ b/src/app/(marketing)/layout.tsx @@ -16,6 +16,7 @@ const breadcrumbMap: Record = { '/products': { label: '产品服务', href: '/products' }, '/solutions': { label: '行业方案', href: '/solutions' }, '/news': { label: '新闻动态', href: '/news' }, + '/cases': { label: '案例展示', href: '/cases' }, '/contact': { label: '联系我们', href: '/contact' }, '/team': { label: '核心团队', href: '/team' }, }; diff --git a/src/app/(marketing)/news/[slug]/NewsDetailClient.tsx b/src/app/(marketing)/news/[slug]/NewsDetailClient.tsx index 09053c8..317382a 100644 --- a/src/app/(marketing)/news/[slug]/NewsDetailClient.tsx +++ b/src/app/(marketing)/news/[slug]/NewsDetailClient.tsx @@ -28,7 +28,7 @@ export function NewsDetailClient({ news }: NewsDetailClientProps) {
-
+
{news.category}

@@ -61,12 +61,12 @@ export function NewsDetailClient({ news }: NewsDetailClientProps) { />

) : ( -
+
📰
)} -

+

{news.excerpt}

@@ -92,7 +92,7 @@ export function NewsDetailClient({ news }: NewsDetailClientProps) { className="w-full h-full object-cover" /> ) : ( -
+
📰
)} @@ -100,7 +100,7 @@ export function NewsDetailClient({ news }: NewsDetailClientProps) { {related.category} -

+

{related.title}

@@ -120,7 +120,7 @@ export function NewsDetailClient({ news }: NewsDetailClientProps) { 返回新闻列表 -

) : ( <> @@ -118,7 +127,7 @@ export default function NewsListPage() { transition={{ duration: 0.5, delay: 0.2 + index * 0.1 }} > - + {newsItem.image ? (
@@ -129,7 +138,7 @@ export default function NewsListPage() { />
) : ( -
+
📰
)} @@ -147,7 +156,7 @@ export default function NewsListPage() {

{newsItem.excerpt}

-
+
阅读更多
@@ -159,49 +168,29 @@ export default function NewsListPage() { ))}
- {totalPages > 1 && ( -
- - - {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( - - ))} - - -
- )} +
显示 {paginatedNews.length} 条,共 {filteredNews.length} 条新闻
)} + + {/* Bottom CTA */} +
+

+ 想获取最新行业资讯? +

+

+ 关注我们的公众号,第一时间了解数字化转型趋势和公司动态 +

+ +
); diff --git a/src/app/(marketing)/products/page.tsx b/src/app/(marketing)/products/page.tsx index 63329fd..aa9d218 100644 --- a/src/app/(marketing)/products/page.tsx +++ b/src/app/(marketing)/products/page.tsx @@ -9,10 +9,11 @@ import { Input } from '@/components/ui/input'; import { Button } from '@/components/ui/button'; import { RippleButton } from '@/components/ui/ripple-button'; import { PageHeader } from '@/components/ui/page-header'; -import { Search, ArrowLeft, Check, TrendingUp, ChevronLeft, ChevronRight, Filter } from 'lucide-react'; +import { Search, ArrowLeft, Check, TrendingUp, Filter, SearchX } from 'lucide-react'; import { StaticLink } from '@/components/ui/static-link'; import { motion } from 'framer-motion'; import { InkCard } from '@/lib/animations'; +import { Pagination } from '@/components/ui/pagination'; const categories = ['全部', '企业软件', '数据产品']; const ITEMS_PER_PAGE = 6; @@ -42,7 +43,6 @@ export default function ProductsPage() { const handlePageChange = (page: number) => { setCurrentPage(page); - window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleCategoryChange = (category: string) => { @@ -62,7 +62,7 @@ export default function ProductsPage() { description="自主研发的企业级产品,助力企业高效运营,实现数字化转型" /> -
+
handleCategoryChange(category)} className={ selectedCategory === category - ? 'bg-[#C41E3A] hover:bg-[#A01830] text-white' + ? 'bg-[var(--color-brand-primary)] hover:bg-[var(--color-brand-primary-hover)] text-white' : '' } > @@ -108,7 +108,16 @@ export default function ProductsPage() { {paginatedProducts.length === 0 ? (
-

没有找到相关产品

+
+ +
+

没有找到相关产品

+
) : ( <> @@ -116,7 +125,7 @@ export default function ProductsPage() { {paginatedProducts.map((product) => ( @@ -124,7 +133,7 @@ export default function ProductsPage() { {product.category} - {product.title} + {product.title} @@ -139,7 +148,7 @@ export default function ProductsPage() { key={idx} className="inline-flex items-center text-xs px-2 py-1 bg-[#FAFAFA] text-[#3D3D3D] rounded border border-[#E5E5E5]" > - + {feature} ))} @@ -148,20 +157,20 @@ export default function ProductsPage() {

- + 核心价值

    {product.benefits.map((benefit, idx) => (
  • - + {benefit}
  • ))}
-
+
了解详情
@@ -172,43 +181,7 @@ export default function ProductsPage() { ))}
- {totalPages > 1 && ( -
- - - {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( - - ))} - - -
- )} +
显示 {paginatedProducts.length} 条,共 {filteredProducts.length} 条产品 @@ -232,7 +205,7 @@ export default function ProductsPage() { 我们的专业团队可以根据您的业务需求,提供量身定制的产品开发和系统集成服务

- + 联系我们 diff --git a/src/app/(marketing)/services/[id]/client.tsx b/src/app/(marketing)/services/[id]/client.tsx index e8b8c77..9fa8e33 100644 --- a/src/app/(marketing)/services/[id]/client.tsx +++ b/src/app/(marketing)/services/[id]/client.tsx @@ -55,14 +55,15 @@ function InlineCTABanner() { 免费咨询 预约演示 diff --git a/src/app/(marketing)/services/page.tsx b/src/app/(marketing)/services/page.tsx index 8d0e000..e9606a1 100644 --- a/src/app/(marketing)/services/page.tsx +++ b/src/app/(marketing)/services/page.tsx @@ -7,9 +7,10 @@ import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Input } from '@/components/ui/input'; import { PageHeader } from '@/components/ui/page-header'; -import { Search, ArrowLeft, Code, BarChart3, Lightbulb, Puzzle, ChevronLeft, ChevronRight, Filter } from 'lucide-react'; +import { Search, ArrowLeft, Code, BarChart3, Lightbulb, Puzzle, Filter, SearchX } from 'lucide-react'; import { StaticLink } from '@/components/ui/static-link'; import { motion } from 'framer-motion'; +import { Pagination } from '@/components/ui/pagination'; const iconMap: Record> = { Code, @@ -46,7 +47,6 @@ export default function ServicesPage() { const handlePageChange = (page: number) => { setCurrentPage(page); - window.scrollTo({ top: 0, behavior: 'smooth' }); }; const handleCategoryChange = (category: string) => { @@ -66,7 +66,7 @@ export default function ServicesPage() { description="专业技术团队,为您提供全方位的数字化解决方案" /> -
+
handleCategoryChange(category)} className={ selectedCategory === category - ? 'bg-[#C41E3A] hover:bg-[#A01830] text-white' + ? 'bg-[var(--color-brand-primary)] hover:bg-[var(--color-brand-primary-hover)] text-white' : '' } > @@ -112,7 +112,16 @@ export default function ServicesPage() { {paginatedServices.length === 0 ? (
-

没有找到相关服务

+
+ +
+

没有找到相关服务

+
) : ( <> @@ -132,11 +141,11 @@ export default function ServicesPage() { >
-
+
{Icon && }
-

+

{service.title}

@@ -153,7 +162,7 @@ export default function ServicesPage() { ))}

-
+
了解详情
@@ -165,43 +174,7 @@ export default function ServicesPage() { })}
- {totalPages > 1 && ( -
- - - {Array.from({ length: totalPages }, (_, i) => i + 1).map((page) => ( - - ))} - - -
- )} +
显示 {paginatedServices.length} 条,共 {filteredServices.length} 条服务 @@ -226,7 +199,7 @@ export default function ServicesPage() {

- -
diff --git a/src/app/(marketing)/team/client.tsx b/src/app/(marketing)/team/client.tsx index 80f52ab..b30e3b1 100644 --- a/src/app/(marketing)/team/client.tsx +++ b/src/app/(marketing)/team/client.tsx @@ -64,10 +64,10 @@ export function TeamClient() {

关于我们的团队

- 我们的核心团队长期从事技术咨询企业数字化等行业,拥有 12 年以上的深厚积累。 + 我们的核心团队长期从事技术咨询企业数字化等行业,拥有 12 年以上的深厚积累。

- 开发团队成员来自于多个大型传统 IT 企业,具备扎实的工程能力和规范化的交付经验。 + 开发团队成员来自于多个大型传统 IT 企业,具备扎实的工程能力和规范化的交付经验。

我们相信,优秀的技术咨询不仅需要过硬的技术能力,更需要深入理解客户的业务场景和真实需求。 @@ -90,8 +90,8 @@ export function TeamClient() { transition={{ duration: 0.5, delay: 0.2 + idx * 0.1 }} className={idx >= 3 ? 'md:col-span-1 lg:col-start-1' : ''} > -

-
+
+

{item.title}

@@ -103,17 +103,22 @@ export function TeamClient() {
- {/* CTA */} + {/* Bottom CTA */} -

想与我们的团队交流?

- diff --git a/src/app/error.tsx b/src/app/error.tsx index c305242..319344a 100644 --- a/src/app/error.tsx +++ b/src/app/error.tsx @@ -21,10 +21,10 @@ export default function Error({
-
- +
+
-
+

@@ -53,7 +53,7 @@ export default function Error({

-
+

最后更新日期

2026年4月25日

diff --git a/src/components/analytics/CookieConsent.tsx b/src/components/analytics/CookieConsent.tsx index 7e06037..767392c 100644 --- a/src/components/analytics/CookieConsent.tsx +++ b/src/components/analytics/CookieConsent.tsx @@ -107,7 +107,7 @@ export function CookieConsent() { 继续使用即表示您同意我们的{' '} 隐私政策 @@ -132,7 +132,7 @@ export function CookieConsent() { @@ -159,7 +159,7 @@ export function CookieConsent() { type="checkbox" checked disabled - className="mt-1 h-4 w-4 rounded border-gray-300 text-[#C41E3A] focus:ring-[#C41E3A] cursor-not-allowed" + className="mt-1 h-4 w-4 rounded border-gray-300 text-[var(--color-brand-primary)] focus:ring-[var(--color-brand-primary)] cursor-not-allowed" aria-label="必要 Cookie" />
@@ -178,7 +178,7 @@ export function CookieConsent() { type="checkbox" checked={preferences.analytics} onChange={() => handleTogglePreference('analytics')} - className="mt-1 h-4 w-4 rounded border-gray-300 text-[#C41E3A] focus:ring-[#C41E3A] cursor-pointer" + className="mt-1 h-4 w-4 rounded border-gray-300 text-[var(--color-brand-primary)] focus:ring-[var(--color-brand-primary)] cursor-pointer" aria-label="分析 Cookie" />
@@ -194,7 +194,7 @@ export function CookieConsent() { type="checkbox" checked={preferences.marketing} onChange={() => handleTogglePreference('marketing')} - className="mt-1 h-4 w-4 rounded border-gray-300 text-[#C41E3A] focus:ring-[#C41E3A] cursor-pointer" + className="mt-1 h-4 w-4 rounded border-gray-300 text-[var(--color-brand-primary)] focus:ring-[var(--color-brand-primary)] cursor-pointer" aria-label="营销 Cookie" />
@@ -217,7 +217,7 @@ export function CookieConsent() { diff --git a/src/components/effects/data-particle-flow.tsx b/src/components/effects/data-particle-flow.tsx index d6d8a16..1627985 100644 --- a/src/components/effects/data-particle-flow.tsx +++ b/src/components/effects/data-particle-flow.tsx @@ -28,7 +28,7 @@ interface Particle { export function DataParticleFlow({ className = '', particleCount = 50, - color = '#C41E3A', + color = 'var(--color-brand-primary)', intensity = 'normal', shape = 'circle', effect = 'default', diff --git a/src/components/effects/gradient-flow.tsx b/src/components/effects/gradient-flow.tsx index 7bfc16e..76f539a 100644 --- a/src/components/effects/gradient-flow.tsx +++ b/src/components/effects/gradient-flow.tsx @@ -10,7 +10,7 @@ interface GradientFlowProps { export function GradientFlow({ className = '', - colors = ['#C41E3A', '#D4A574', '#8B4513', '#2F4F4F'], + colors = ['var(--color-brand-primary)', '#D4A574', '#8B4513', '#2F4F4F'], duration = 15 }: GradientFlowProps) { return ( diff --git a/src/components/effects/subtle-dots.tsx b/src/components/effects/subtle-dots.tsx index 2c62fd4..fee3e67 100644 --- a/src/components/effects/subtle-dots.tsx +++ b/src/components/effects/subtle-dots.tsx @@ -11,7 +11,7 @@ interface SubtleDotsProps { export function SubtleDots({ className = '', - color = '#C41E3A', + color = 'var(--color-brand-primary)', count = 12 }: SubtleDotsProps) { const [dots, setDots] = useState - - - - {items.map((item, index) => ( - - +
    +
  1. - {item.label} + - - ))} +
  2. + {items.map((item, index) => { + const isLast = index === items.length - 1; + return ( + + +
  3. + {isLast ? ( + + {item.label} + + ) : ( + + {item.label} + + )} +
  4. +
    + ); + })} +
); } diff --git a/src/components/layout/footer.tsx b/src/components/layout/footer.tsx index 0153b50..42105e7 100644 --- a/src/components/layout/footer.tsx +++ b/src/components/layout/footer.tsx @@ -7,7 +7,7 @@ export function Footer() { return (
); diff --git a/src/components/sections/news-section.tsx b/src/components/sections/news-section.tsx index d6b1f3a..36b48dd 100644 --- a/src/components/sections/news-section.tsx +++ b/src/components/sections/news-section.tsx @@ -5,6 +5,7 @@ import { useInView } from 'framer-motion'; import { useRef } from 'react'; import { StaticLink } from '@/components/ui/static-link'; import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '@/components/ui/card'; +import { Button } from '@/components/ui/button'; import { ArrowRight, Calendar } from 'lucide-react'; import { NEWS } from '@/lib/constants'; @@ -18,15 +19,16 @@ export function NewsSection() { return (
-
+
+

- 最新资讯 + 最新资讯

了解公司最新动态、行业资讯和技术分享 @@ -61,7 +63,7 @@ export function NewsSection() { 阅读更多 @@ -83,13 +85,12 @@ export function NewsSection() { transition={{ duration: 0.6, delay: 0.5 }} className="mt-12 text-center" > - - 查看全部新闻 - - +

diff --git a/src/components/sections/products-section.tsx b/src/components/sections/products-section.tsx index e981095..1c19912 100644 --- a/src/components/sections/products-section.tsx +++ b/src/components/sections/products-section.tsx @@ -16,8 +16,8 @@ export function ProductsSection() { const isInView = useInView(ref, { once: true, margin: '-100px' }); return ( -
-
+
+
-
+

- 我们的产品 + 我们的产品

自主研发的企业级产品,助力企业高效运营,实现数字化转型 @@ -36,11 +36,11 @@ export function ProductsSection() { {PRODUCTS.length > 0 ? ( -

+
{PRODUCTS.map((product) => ( @@ -63,7 +63,7 @@ export function ProductsSection() { key={idx} className="inline-flex items-center text-xs px-2 py-1 bg-[#FAFAFA] text-[#3D3D3D] rounded border border-[#E5E5E5]" > - + {feature} ))} @@ -72,20 +72,20 @@ export function ProductsSection() {

- + 核心价值

    {product.benefits.map((benefit, idx) => (
  • - + {benefit}
  • ))}
-
+
了解详情
@@ -120,7 +120,7 @@ export function ProductsSection() { 我们的专业团队可以根据您的业务需求,提供量身定制的产品开发和系统集成服务

- + 联系我们 diff --git a/src/components/sections/services-section.tsx b/src/components/sections/services-section.tsx index 3bf651f..7e0dcfb 100644 --- a/src/components/sections/services-section.tsx +++ b/src/components/sections/services-section.tsx @@ -31,11 +31,11 @@ export function ServicesSection() { initial={{ opacity: 0, y: 20 }} animate={isInView ? { opacity: 1, y: 0 } : {}} transition={{ duration: 0.6 }} - className="text-left max-w-3xl mx-auto mb-16" + className="text-center max-w-3xl mx-auto mb-16" > -
+

- 我们的 核心业务 + 我们的 核心业务

专业技术团队,为您提供全方位的数字化解决方案 @@ -43,23 +43,23 @@ export function ServicesSection() { {SERVICES.length > 0 ? ( -

+
{SERVICES.map((service) => { const Icon = iconMap[service.icon]; return ( -
+
{Icon && }
-

{service.title}

+

{service.title}

{service.description}

-
+
了解详情
@@ -83,7 +83,7 @@ export function ServicesSection() { className="text-center mt-12" > - + 查看全部服务 diff --git a/src/components/sections/team-section.tsx b/src/components/sections/team-section.tsx index e077452..591f34a 100644 --- a/src/components/sections/team-section.tsx +++ b/src/components/sections/team-section.tsx @@ -14,7 +14,7 @@ const TEAM_MEMBERS = [ specialties: ['企业战略', '数字化转型', '组织管理'], bio: '15年+企业服务经验,深耕数字化转型领域,擅长从战略高度为企业规划数字化路径。', icon: Target, - accentColor: 'from-[#C41E3A] to-[#E85D75]', + accentColor: 'from-[var(--color-brand-primary)] to-[#E85D75]', }, { name: '联合创始人兼CTO', @@ -22,7 +22,7 @@ const TEAM_MEMBERS = [ specialties: ['系统架构', '云原生', '微服务'], bio: '12年+技术架构经验,主导过多个大型企业级系统的设计与交付,精通分布式系统。', icon: GraduationCap, - accentColor: 'from-[#C41E3A] to-[#D94466]', + accentColor: 'from-[var(--color-brand-primary)] to-[#D94466]', }, { name: '技术总监', @@ -30,7 +30,7 @@ const TEAM_MEMBERS = [ specialties: ['全栈开发', '数据工程', 'DevOps'], bio: '10年+全栈开发经验,专注于高质量软件交付和工程效能提升,推动敏捷实践落地。', icon: Briefcase, - accentColor: 'from-[#C41E3A] to-[#C41E3A]', + accentColor: 'from-[var(--color-brand-primary)] to-[var(--color-brand-primary)]', }, { name: '咨询总监', @@ -38,7 +38,7 @@ const TEAM_MEMBERS = [ specialties: ['业务咨询', '流程优化', '项目管理'], bio: '10年+管理咨询经验,擅长客户需求深度分析和解决方案设计,确保项目精准落地。', icon: Users, - accentColor: 'from-[#C41E3A] to-[#A01830]', + accentColor: 'from-[var(--color-brand-primary)] to-[var(--color-brand-primary-hover)]', }, ]; @@ -54,7 +54,7 @@ export function TeamSection() { const isInView = useInView(ref, { once: true, margin: '-100px' }); return ( -
+
{/* 背景装饰 */}
@@ -66,8 +66,9 @@ export function TeamSection() { transition={{ duration: 0.6 }} className="text-center max-w-3xl mx-auto mb-16" > +

- 核心团队 + 核心团队

来自大型IT企业的核心团队,既懂技术又懂业务,能深入理解客户场景,提供真正落地的解决方案。 @@ -86,7 +87,7 @@ export function TeamSection() { key={stat.label} className="text-center py-4 px-3 bg-white rounded-xl border border-[#E5E5E5]" > -

+
{stat.value}
{stat.label}
@@ -105,7 +106,7 @@ export function TeamSection() { animate={isInView ? { opacity: 1, y: 0 } : {}} transition={{ duration: 0.5, delay: 0.2 + idx * 0.12 }} > -
+
{/* 头像区 */}
@@ -113,7 +114,7 @@ export function TeamSection() {

{member.name}

- {member.initials} + {member.initials}
@@ -125,7 +126,7 @@ export function TeamSection() { {member.specialties.map((spec) => ( {spec} @@ -145,7 +146,7 @@ export function TeamSection() { className="text-center" > - + 了解更多 diff --git a/src/components/services/service-cases-section.tsx b/src/components/services/service-cases-section.tsx index f665f0f..caee3b6 100644 --- a/src/components/services/service-cases-section.tsx +++ b/src/components/services/service-cases-section.tsx @@ -44,7 +44,7 @@ export function ServiceCasesSection({ service }: { service: Service }) { {/* 行业标签 */} diff --git a/src/components/services/service-challenges-section.tsx b/src/components/services/service-challenges-section.tsx index 5e2026c..41c9358 100644 --- a/src/components/services/service-challenges-section.tsx +++ b/src/components/services/service-challenges-section.tsx @@ -30,7 +30,7 @@ export function ServiceChallengesSection({ service }: ServiceChallengesSectionPr {/* 朱砂红装饰线 */} -
+
{/* 副标题描述 */} @@ -44,7 +44,7 @@ export function ServiceChallengesSection({ service }: ServiceChallengesSectionPr {service.challenges.map((challenge, index) => ( diff --git a/src/components/services/service-cta-section.tsx b/src/components/services/service-cta-section.tsx index 59c8ec4..2872a3d 100644 --- a/src/components/services/service-cta-section.tsx +++ b/src/components/services/service-cta-section.tsx @@ -12,7 +12,7 @@ import { RippleButton } from '@/components/ui/ripple-button'; export function ServiceCTASection() { return ( -
+
{/* 右上角装饰圆形 */}
@@ -46,7 +46,7 @@ export function ServiceCTASection() { href="/contact" variant="secondary" rippleColor="rgba(196, 30, 58, 0.3)" - className="bg-white text-[#C41E3A] px-8 py-4 rounded-lg text-lg font-semibold inline-flex items-center justify-center w-full sm:w-auto" + className="bg-white text-[var(--color-brand-primary)] px-8 py-4 rounded-lg text-lg font-semibold inline-flex items-center justify-center w-full sm:w-auto" > 免费获取 diff --git a/src/components/services/service-features-section.tsx b/src/components/services/service-features-section.tsx index 1fbabdf..d915d43 100644 --- a/src/components/services/service-features-section.tsx +++ b/src/components/services/service-features-section.tsx @@ -41,7 +41,7 @@ export function ServiceFeaturesSection({ service }: ServiceFeaturesSectionProps) {service.features.map((feature, index) => (
- + {feature} diff --git a/src/components/services/service-hero-section.tsx b/src/components/services/service-hero-section.tsx index a3890cf..4f291d3 100644 --- a/src/components/services/service-hero-section.tsx +++ b/src/components/services/service-hero-section.tsx @@ -61,7 +61,7 @@ export function ServiceHeroSection({ service }: ServiceHeroSectionProps) { 核心业务 @@ -98,14 +98,14 @@ export function ServiceHeroSection({ service }: ServiceHeroSectionProps) { 预约演示 免费咨询 @@ -113,7 +113,7 @@ export function ServiceHeroSection({ service }: ServiceHeroSectionProps) { 了解详情 diff --git a/src/components/services/service-outcomes-section.tsx b/src/components/services/service-outcomes-section.tsx index 3705229..e97db5f 100644 --- a/src/components/services/service-outcomes-section.tsx +++ b/src/components/services/service-outcomes-section.tsx @@ -31,13 +31,13 @@ function OutcomeCard({ outcome }: { outcome: { value: string; label: string } }) return ( {/* 数字动画区域 */}
{numberValue !== null ? ( - + ) : ( - + {outcome.value} )} diff --git a/src/components/services/service-process-section.tsx b/src/components/services/service-process-section.tsx index 007c0ba..b16c79b 100644 --- a/src/components/services/service-process-section.tsx +++ b/src/components/services/service-process-section.tsx @@ -36,13 +36,13 @@ function ProcessStep({ {/* 左侧:编号圆形 + 渐变连接线 */}
-
+
{index + 1}
{/* 最后一步不显示连接线 */} {index < total - 1 && ( -
+
)}
diff --git a/src/components/solutions/accompany-section.tsx b/src/components/solutions/accompany-section.tsx index 3ccb070..85f9fd2 100644 --- a/src/components/solutions/accompany-section.tsx +++ b/src/components/solutions/accompany-section.tsx @@ -29,11 +29,11 @@ export function AccompanySection() { whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true }} transition={{ duration: 0.6, delay: 0.4 }} - className="bg-gradient-to-br from-[#FFFBF5] to-white rounded-2xl p-12 border border-[#C41E3A]/20" + className="bg-gradient-to-br from-[#FFFBF5] to-white rounded-2xl p-12 border border-[var(--color-brand-primary)]/20" > {/* 标题区域:图标 + 标题 + 副标题 */}
-
+
@@ -73,7 +73,7 @@ export function AccompanySection() {

- + 核心价值点

@@ -81,7 +81,7 @@ export function AccompanySection() { {valuePoints.map((point) => (
-
+
{point}
@@ -94,7 +94,7 @@ export function AccompanySection() {
+ {getVisiblePages().map((page, index) => + page === 'ellipsis' ? ( + + ) : ( + + ) + )} + + + ); +} diff --git a/src/components/ui/ripple-button.tsx b/src/components/ui/ripple-button.tsx index c34a52c..773b7e2 100644 --- a/src/components/ui/ripple-button.tsx +++ b/src/components/ui/ripple-button.tsx @@ -11,19 +11,19 @@ const rippleButtonVariants = cva( variants: { variant: { default: - 'bg-[#C41E3A] text-white hover:bg-[#A01830] hover:shadow-[0_8px_20px_rgba(196,30,58,0.35)]', + 'bg-[var(--color-brand-primary)] text-white hover:bg-[var(--color-brand-primary-hover)] hover:shadow-[0_8px_20px_rgba(196,30,58,0.35)]', secondary: 'bg-[#1C1C1C] text-white hover:bg-[#0A0A0A] hover:shadow-[0_8px_20px_rgba(28,28,28,0.35)]', destructive: - 'bg-[#C41E3A] text-white hover:bg-[#A01830] focus-visible:ring-[#C41E3A]', + 'bg-[var(--color-brand-primary)] text-white hover:bg-[var(--color-brand-primary-hover)] focus-visible:ring-[var(--color-brand-primary)]', outline: 'border-2 border-[#1C1C1C] bg-transparent text-[#1C1C1C] hover:bg-[#F5F5F5] hover:shadow-[0_4px_12px_rgba(28,28,28,0.2)]', ghost: 'text-[#3D3D3D] hover:bg-[#F5F5F5] hover:text-[#1C1C1C]', link: - 'text-[#1C1C1C] underline-offset-4 hover:underline hover:text-[#C41E3A]', + 'text-[#1C1C1C] underline-offset-4 hover:underline hover:text-[var(--color-brand-primary)]', seal: - 'bg-[#C41E3A] text-white font-semibold hover:bg-[#A01830] shadow-[0_6px_20px_rgba(196,30,58,0.3)]', + 'bg-[var(--color-brand-primary)] text-white font-semibold hover:bg-[var(--color-brand-primary-hover)] shadow-[0_6px_20px_rgba(196,30,58,0.3)]', }, size: { default: 'h-11 px-4 py-2.5', diff --git a/src/components/ui/scroll-animations.tsx b/src/components/ui/scroll-animations.tsx index 195a18c..a55b16f 100644 --- a/src/components/ui/scroll-animations.tsx +++ b/src/components/ui/scroll-animations.tsx @@ -397,7 +397,7 @@ interface ProgressIndicatorProps { color?: string; } -export function ProgressIndicator({ className = '', color = '#C41E3A' }: ProgressIndicatorProps) { +export function ProgressIndicator({ className = '', color = 'var(--color-brand-primary)' }: ProgressIndicatorProps) { const { scrollYProgress } = useScroll(); const scaleX = useSpring(scrollYProgress, { stiffness: 100, damping: 30 }); diff --git a/src/components/ui/scroll-progress.tsx b/src/components/ui/scroll-progress.tsx index 4c97192..d278d29 100644 --- a/src/components/ui/scroll-progress.tsx +++ b/src/components/ui/scroll-progress.tsx @@ -41,7 +41,7 @@ export function ScrollProgress() { aria-valuemax={100} > - + {rating > 0 && (
{Array.from({ length: rating }).map((_, i) => ( diff --git a/src/components/ui/textarea.tsx b/src/components/ui/textarea.tsx index ac71607..a6d56cf 100644 --- a/src/components/ui/textarea.tsx +++ b/src/components/ui/textarea.tsx @@ -21,7 +21,7 @@ const Textarea = React.forwardRef( className="block text-sm font-medium text-[#3D3D3D] mb-2" > {label} - {props.required && *} + {props.required && *} )}