feat: 统一全站设计风格、导航组件与文案逻辑自洽性修复

- 新增 InkGlowCard 墨韵流光卡片组件,统一全站卡片交互风格
- 新增 PageNav 面包屑组件,统一全站页面导航
- 统一色彩体系、排版层级、间距节奏和动画风格
- 修复 CTA 区品牌名称错误(诺瓦隆→睿新致遠)
- 修复 ERP 产品卖点与年费制定价矛盾
- 导航下拉补充 SDS 和 OA 产品
- 统一全站数据指标为 12+年核心团队经验、6自研产品、10+团队成员
- 移除不可靠的 100%客户满意度和 30+行业专家指标
- 修复新闻时间线不合理问题,调整里程碑节奏
- 统一响应承诺为工作日快速响应
- 服务第4项重命名为行业方案实施,厘清概念
- 服务详情页效果数据改为定性描述
- 删除 cases 模块,精简代码库
This commit is contained in:
张翔
2026-05-02 08:11:47 +08:00
parent 307e0a654e
commit a272e58aaa
64 changed files with 1934 additions and 2995 deletions
+15 -32
View File
@@ -1,55 +1,38 @@
'use client';
import { useState, useLayoutEffect, useRef } from 'react';
import { StaticLink } from '@/components/ui/static-link';
import { usePathname, useSearchParams } from 'next/navigation';
import { usePathname } from 'next/navigation';
import { Home, Briefcase, Package, FileText, User } from 'lucide-react';
import { motion } from 'framer-motion';
import { cn } from '@/lib/utils';
const tabs = [
{ id: 'home', label: '首页', href: '/', icon: Home },
{ id: 'services', label: '服务', href: '/#services', icon: Briefcase },
{ id: 'products', label: '产品', href: '/#products', icon: Package },
{ id: 'news', label: '新闻', href: '/#news', icon: FileText },
{ id: 'services', label: '服务', href: '/services', icon: Briefcase },
{ id: 'products', label: '产品', href: '/products', icon: Package },
{ id: 'about', label: '关于', href: '/about', icon: FileText },
{ id: 'contact', label: '联系', href: '/contact', icon: User },
];
export function MobileTabBar() {
const pathname = usePathname();
const searchParams = useSearchParams();
const [hash, setHash] = useState('');
const isInitializedRef = useRef(false);
useLayoutEffect(() => {
if (!isInitializedRef.current) {
isInitializedRef.current = true;
setHash(window.location.hash.slice(1));
}
const handleHashChange = () => {
setHash(window.location.hash.slice(1));
};
window.addEventListener('hashchange', handleHashChange);
return () => window.removeEventListener('hashchange', handleHashChange);
}, []);
const isActive = (_href: string, id: string) => {
if (id === 'home') {
return pathname === '/';
}
if (id === 'contact') {
return pathname === '/contact';
}
if (pathname === '/') {
const section = searchParams.get('section');
const currentSection = section || hash;
if (id === 'home') {
return !currentSection || currentSection === 'home';
}
return currentSection === id;
if (id === 'products') {
return pathname === '/products' || pathname.startsWith('/products/');
}
if (id === 'services') {
return pathname === '/services' || pathname.startsWith('/services/');
}
if (id === 'about') {
return pathname === '/about';
}
return false;
};