feat(layout): 重构布局组件体系与数据层

- 重构 Header 导航、Footer 页脚、MobileMenu 移动端菜单
- 新增 MobileTabBar 移动端底部导航栏
- 更新 MegaDropdown 大型下拉导航
- 重构 SEO 结构化数据组件
- 更新数据层常量 (products, services, solutions, navigation 等)
- 新增 useCountUp 数字递增 Hook
- 修复 .gitignore 中 src/lib 被错误忽略的问题
This commit is contained in:
张翔
2026-07-07 06:53:13 +08:00
parent e78df62cd1
commit 767931202d
28 changed files with 898 additions and 468 deletions
+13 -13
View File
@@ -59,13 +59,13 @@ export const DESIGN_SYSTEM = {
effects: {
inkGlow: {
border: 'conic-gradient(from var(--angle), transparent 0%, var(--color-brand-primary) 10%, transparent 20%)',
glow: 'radial-gradient(circle at var(--mouse-x) var(--mouse-y), rgba(var(--color-brand-primary-rgb), 0.15) 0%, transparent 50%)',
border: 'conic-gradient(from var(--angle), transparent 0%, var(--color-brand) 10%, transparent 20%)',
glow: 'radial-gradient(circle at var(--mouse-x) var(--mouse-y), rgba(var(--color-brand-rgb), 0.15) 0%, transparent 50%)',
speed: '3s',
},
hover: {
translateY: '-4px',
shadow: 'shadow-xl shadow-[var(--color-shadow-color)]',
shadow: 'shadow-xl',
transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',
},
scroll: {
@@ -85,10 +85,10 @@ export const DESIGN_SYSTEM = {
// These are used for inline styles where Tailwind classes aren't feasible
colors: {
brand: {
primary: 'var(--color-brand-primary)',
light: 'var(--color-brand-primary-bg)',
lighter: 'rgba(var(--color-brand-primary-rgb), 0.04)',
gradient: 'linear-gradient(135deg, var(--color-brand-primary) 0%, #99182d 100%)',
primary: 'var(--color-brand)',
light: 'var(--color-brand-bg)',
lighter: 'rgba(var(--color-brand-rgb), 0.04)',
gradient: 'linear-gradient(135deg, var(--color-brand) 0%, #99182d 100%)',
},
neutral: {
50: 'var(--color-bg-primary)',
@@ -111,23 +111,23 @@ export const DESIGN_SYSTEM = {
components: {
card: {
base: 'rounded-2xl border border-[var(--color-border-primary)] overflow-hidden transition-all duration-300 bg-[var(--color-surface-primary)]',
hover: 'hover:border-[rgba(var(--color-brand-primary-rgb),0.2)] hover:shadow-lg hover:-translate-y-1',
base: 'rounded-2xl border border-[var(--color-border-primary)] overflow-hidden transition-all duration-300 bg-[var(--color-bg-primary)]',
hover: 'hover:border-[rgba(var(--color-brand-rgb),0.2)] hover:shadow-lg hover:-translate-y-1',
padding: 'p-6 lg:p-8',
},
badge: {
base: 'inline-flex items-center gap-1.5 px-3 py-1 rounded-full text-xs font-medium',
variants: {
primary: 'bg-[var(--color-brand-primary-bg)] text-[var(--color-brand-primary)]',
primary: 'bg-[var(--color-brand-bg)] text-[var(--color-brand)]',
secondary: 'bg-[var(--color-bg-tertiary)] text-[var(--color-text-secondary)]',
success: 'bg-green-50 text-green-700',
warning: 'bg-yellow-50 text-yellow-700',
},
},
button: {
primary: 'inline-flex items-center gap-2 px-6 py-3 text-white font-semibold rounded-lg shadow-md transition-all duration-200 bg-[var(--color-brand-primary)] hover:brightness-110 hover:shadow-lg',
secondary: 'inline-flex items-center gap-2 px-6 py-3 font-semibold rounded-lg border transition-all duration-200 bg-[var(--color-surface-primary)] text-[var(--color-text-secondary)] border-[var(--color-border-primary)] hover:border-[var(--color-text-hint)] hover:shadow-sm',
ghost: 'inline-flex items-center gap-2 px-4 py-2 font-medium rounded-lg transition-colors duration-200 text-[var(--color-brand-primary)] hover:bg-[var(--color-brand-primary-bg)]',
primary: 'inline-flex items-center gap-2 px-6 py-3 text-white font-semibold rounded-lg shadow-md transition-all duration-200 bg-[var(--color-brand)] hover:brightness-110 hover:shadow-lg',
secondary: 'inline-flex items-center gap-2 px-6 py-3 font-semibold rounded-lg border transition-all duration-200 bg-[var(--color-bg-primary)] text-[var(--color-text-secondary)] border-[var(--color-border-primary)] hover:border-[var(--color-text-hint)] hover:shadow-sm',
ghost: 'inline-flex items-center gap-2 px-4 py-2 font-medium rounded-lg transition-colors duration-200 text-[var(--color-brand)] hover:bg-[var(--color-brand-bg)]',
},
metric: {
container: 'text-center p-6 rounded-xl border bg-[var(--color-bg-section)] border-[var(--color-border-primary)]',