GEO 平台 - UI 风格指南
概述
本文档定义 GEO 平台的前端 UI 风格规范,确保全平台视觉一致性。所有前端开发人员、UI 设计师和产品经理应遵循本指南进行界面设计和开发。
GEO 平台的 UI 设计遵循以下核心原则:
- 专业可信:体现企业级 SaaS 平台的专业感和可信度
- 简洁高效:减少视觉噪音,让用户聚焦于数据和操作
- 层次分明:通过清晰的信息层级引导用户注意力
- 响应式适配:适配桌面端、平板和移动端设备
风格特征总结
设计语言
| 特征 |
描述 |
应用场景 |
| 扁平化设计 |
去除冗余装饰,强调内容和功能 |
全局 |
| 卡片化布局 |
使用卡片容器组织信息模块 |
仪表盘、列表页 |
| 留白呼吸感 |
充足的内边距和外边距 |
全局 |
| 微妙的层次感 |
通过阴影和边框区分层级 |
卡片、弹窗、下拉 |
| 数据可视化 |
丰富的图表和数据展示 |
仪表盘、报告页 |
| 状态色彩编码 |
使用颜色直观表达状态 |
状态标签、进度条 |
整体氛围
- 主色调:深蓝/靛蓝色系,传达专业、科技、可信
- 辅助色:翠绿色表示成功/正向,琥珀色表示警告,红色表示错误
- 中性色:丰富的灰度层级用于文字和边框
- 背景:浅色背景为主,深色模式作为可选项
Design Tokens
颜色体系
主色调(Primary)
| Token |
色值 |
用途 |
--color-primary-50 |
#EEF2FF |
极浅背景、hover 状态 |
--color-primary-100 |
#E0E7FF |
轻色背景、选中状态 |
--color-primary-200 |
#C7D2FE |
边框高亮 |
--color-primary-300 |
#A5B4FC |
禁用状态主色 |
--color-primary-400 |
#818CF8 |
次要强调 |
--color-primary-500 |
#6366F1 |
主色 - 按钮、链接、图标 |
--color-primary-600 |
#4F46E5 |
按钮 hover、深色调 |
--color-primary-700 |
#4338CA |
按钮 active |
--color-primary-800 |
#3730A3 |
深色背景文字 |
--color-primary-900 |
#312E81 |
标题、深色元素 |
语义色(Semantic)
| Token |
色值 |
用途 |
--color-success-50 |
#F0FDF4 |
成功状态轻背景 |
--color-success-500 |
#22C55E |
成功 - 成功提示、正向指标 |
--color-success-600 |
#16A34A |
成功 hover |
--color-warning-50 |
#FFFBEB |
警告状态轻背景 |
--color-warning-500 |
#F59E0B |
警告 - 警告提示、待处理 |
--color-warning-600 |
#D97706 |
警告 hover |
--color-error-50 |
#FEF2F2 |
错误状态轻背景 |
--color-error-500 |
#EF4444 |
错误 - 错误提示、失败状态 |
--color-error-600 |
#DC2626 |
错误 hover |
--color-info-50 |
#EFF6FF |
信息状态轻背景 |
--color-info-500 |
#3B82F6 |
信息 - 信息提示 |
中性色(Neutral)
| Token |
色值 |
用途 |
--color-gray-50 |
#F9FAFB |
页面背景、hover 背景 |
--color-gray-100 |
#F3F4F6 |
卡片背景、分隔背景 |
--color-gray-200 |
#E5E7EB |
边框、分隔线 |
--color-gray-300 |
#D1D5DB |
禁用边框、占位符 |
--color-gray-400 |
#9CA3AF |
次要文字、图标 |
--color-gray-500 |
#6B7280 |
辅助文字 |
--color-gray-600 |
#4B5563 |
正文文字 |
--color-gray-700 |
#374151 |
标题文字 |
--color-gray-800 |
#1F2937 |
深色标题 |
--color-gray-900 |
#111827 |
主标题、深色文字 |
圆角(Border Radius)
| Token |
值 |
用途 |
--radius-none |
0 |
直角(表格、特殊场景) |
--radius-sm |
4px |
小元素(标签、徽章) |
--radius-md |
6px |
默认(按钮、输入框) |
--radius-lg |
8px |
卡片、容器 |
--radius-xl |
12px |
大卡片、模态框 |
--radius-2xl |
16px |
页面级容器 |
--radius-full |
9999px |
圆形(头像、状态点) |
阴影(Shadow)
| Token |
值 |
用途 |
--shadow-sm |
0 1px 2px 0 rgba(0,0,0,0.05) |
轻微提升(按钮 hover) |
--shadow-md |
0 4px 6px -1px rgba(0,0,0,0.1), 0 2px 4px -2px rgba(0,0,0,0.1) |
卡片默认 |
--shadow-lg |
0 10px 15px -3px rgba(0,0,0,0.1), 0 4px 6px -4px rgba(0,0,0,0.1) |
下拉菜单、浮层 |
--shadow-xl |
0 20px 25px -5px rgba(0,0,0,0.1), 0 8px 10px -6px rgba(0,0,0,0.1) |
模态框、抽屉 |
--shadow-inner |
inset 0 2px 4px 0 rgba(0,0,0,0.05) |
内嵌效果 |
字体(Typography)
字体族
| Token |
值 |
用途 |
--font-sans |
Inter, "PingFang SC", "Microsoft YaHei", sans-serif |
正文、UI 文字 |
--font-mono |
"JetBrains Mono", "Fira Code", monospace |
代码、数据值 |
字号层级
| Token |
大小 |
字重 |
行高 |
用途 |
--text-xs |
12px |
400 |
16px |
辅助说明、时间戳 |
--text-sm |
14px |
400 |
20px |
次要文字、描述 |
--text-base |
16px |
400 |
24px |
正文默认 |
--text-lg |
18px |
500 |
28px |
小标题、强调文字 |
--text-xl |
20px |
600 |
28px |
卡片标题 |
--text-2xl |
24px |
600 |
32px |
页面小标题 |
--text-3xl |
30px |
700 |
36px |
页面标题 |
--text-4xl |
36px |
700 |
40px |
大标题、数字展示 |
间距(Spacing)
| Token |
值 |
用途 |
--space-1 |
4px |
极小间距 |
--space-2 |
8px |
紧凑间距(图标与文字) |
--space-3 |
12px |
小间距 |
--space-4 |
16px |
默认间距(内边距基础) |
--space-5 |
20px |
中等间距 |
--space-6 |
24px |
卡片内边距 |
--space-8 |
32px |
区块间距 |
--space-10 |
40px |
大区块间距 |
--space-12 |
48px |
页面级间距 |
--space-16 |
64px |
大页面间距 |
组件改造计划
GEO 平台基于 shadcn/ui 组件库进行构建,以下是对核心组件的定制化规范。
Button 按钮
| 变体 |
背景 |
文字 |
边框 |
Hover |
用途 |
default |
primary-500 |
white |
none |
primary-600 |
主要操作 |
secondary |
gray-100 |
gray-900 |
none |
gray-200 |
次要操作 |
outline |
transparent |
gray-700 |
gray-200 |
gray-50 |
辅助操作 |
ghost |
transparent |
gray-700 |
none |
gray-100 |
极简操作 |
destructive |
error-500 |
white |
none |
error-600 |
危险操作 |
link |
transparent |
primary-500 |
none |
underline |
链接样式 |
尺寸规范:
sm:h-8 px-3 text-sm
md(默认):h-10 px-4 text-base
lg:h-12 px-6 text-lg
Card 卡片
默认样式:
- 背景:white
- 圆角:`radius-lg` (8px)
- 阴影:`shadow-md`
- 内边距:`space-6` (24px)
- 边框:`1px solid gray-200`
Hover 状态:
- 阴影提升:`shadow-lg`
- 过渡:`transition-shadow duration-200`
卡片变体:
| 变体 |
说明 |
default |
标准卡片,用于信息展示 |
stats |
统计卡片,大号数字 + 描述 |
interactive |
可交互卡片,hover 有明显反馈 |
flat |
扁平卡片,无阴影,用于列表项 |
Input 输入框
默认样式:
- 高度:`h-10`
- 圆角:`radius-md` (6px)
- 边框:`1px solid gray-300`
- 内边距:`px-3`
- 字体:`text-base`
- 背景:white
Focus 状态:
- 边框:`primary-500`
- 阴影:`0 0 0 2px primary-100`
- 过渡:`transition-all duration-200`
错误状态:
- 边框:`error-500`
- 阴影:`0 0 0 2px error-50`
Badge 标签
| 变体 |
背景 |
文字 |
用途 |
default |
primary-100 |
primary-700 |
默认标签 |
secondary |
gray-100 |
gray-700 |
次要标签 |
success |
success-50 |
success-600 |
成功状态 |
warning |
warning-50 |
warning-600 |
警告状态 |
error |
error-50 |
error-600 |
错误状态 |
info |
info-50 |
info-600 |
信息状态 |
Table 表格
默认样式:
- 表头背景:`gray-50`
- 表头文字:`gray-700` font-medium text-sm
- 行高:`h-12`
- 行边框:`border-b border-gray-200`
- 行 hover:`bg-gray-50`
- 单元格内边距:`px-4 py-3`
- 空状态:居中显示插图 + 提示文字
特殊行样式:
| 状态 |
样式 |
| 选中行 |
bg-primary-50 |
| 禁用行 |
opacity-50 |
| 高亮行 |
bg-warning-50 |
Modal / Dialog 模态框
默认样式:
- 遮罩:`bg-black/50`
- 容器背景:white
- 圆角:`radius-xl` (12px)
- 阴影:`shadow-xl`
- 最大宽度:`max-w-lg` (512px)
- 内边距:`p-6`
- 动画:fade-in + scale-in
头部:
- 标题:`text-lg font-semibold`
- 关闭按钮:右上角 ghost 按钮
底部操作区:
- 居右排列
- 主按钮在右,次按钮在左
- 间距:`gap-3`
Toast 通知
| 类型 |
图标 |
背景 |
边框 |
success |
CheckCircle |
white |
success-200 |
warning |
AlertTriangle |
white |
warning-200 |
error |
XCircle |
white |
error-200 |
info |
Info |
white |
info-200 |
默认样式:
- 位置:右上角固定
- 最大宽度:`400px`
- 圆角:`radius-lg`
- 阴影:`shadow-lg`
- 内边距:`p-4`
- 自动关闭:`5秒`
- 动画:slide-in-right + fade-out
Navigation 导航
侧边栏导航:
默认样式:
- 宽度:`w-64` (256px)
- 背景:`gray-900`
- 文字:`gray-300`
选中状态:
- 背景:`primary-600`
- 文字:white
- 左侧边框指示:`3px solid primary-400`
Hover 状态:
- 背景:`gray-800`
- 文字:white
顶部导航:
默认样式:
- 高度:`h-16`
- 背景:white
- 边框:`border-b border-gray-200`
- 阴影:`shadow-sm`
交互规范
过渡动画
| 场景 |
时长 |
缓动函数 |
属性 |
| 按钮 hover |
150ms |
ease-in-out |
background-color, border-color, box-shadow |
| 卡片 hover |
200ms |
ease-out |
box-shadow, transform |
| 模态框出现 |
200ms |
cubic-bezier(0.16, 1, 0.3, 1) |
opacity, transform |
| 下拉菜单 |
150ms |
ease-out |
opacity, transform |
| Toast 出现/消失 |
300ms |
ease-in-out |
opacity, transform |
| 页面切换 |
200ms |
ease-in-out |
opacity |
| 数据加载骨架屏 |
pulse 2s infinite |
- |
opacity |
加载状态
| 场景 |
样式 |
| 页面加载 |
全屏骨架屏 + Logo |
| 数据加载 |
卡片/表格骨架屏 |
| 按钮加载 |
按钮内 Spinner,禁用点击 |
| 无限滚动 |
底部 Spinner |
| 文件上传 |
进度条 + 百分比 |
空状态
统一空状态样式:
- 居中布局
- 插图/图标:`primary-200` 色调
- 标题:`text-lg font-medium text-gray-700`
- 描述:`text-sm text-gray-500`
- 操作按钮(可选):`primary` 按钮
错误状态
统一错误状态样式:
- 错误图标:`error-500` 色的 AlertTriangle
- 标题:`text-lg font-medium text-gray-900`
- 描述:`text-sm text-gray-600`
- 重试按钮:`outline` 按钮
- 错误详情(可选):可展开的折叠面板
表单校验
校验提示样式:
- 错误信息:`text-xs text-error-500 mt-1`
- 错误图标:输入框右侧 `error-500` 图标
- 成功图标:输入框右侧 `success-500` Check 图标
- 实时校验:输入后 `300ms` 延迟触发
布局规范
页面结构
┌─────────────────────────────────────────────┐
│ 顶部导航栏 (h-16, fixed) │
├──────────┬──────────────────────────────────┤
│ │ 页面标题区 │
│ 侧边栏 │ ┌────────────────────────────┐ │
│ (w-64) │ │ 内容区 │ │
│ fixed │ │ ┌──────┐ ┌──────┐ ┌──────┐ │ │
│ │ │ │ 卡片 │ │ 卡片 │ │ 卡片 │ │ │
│ │ │ └──────┘ └──────┘ └──────┘ │ │
│ │ │ ┌────────────────────────┐ │ │
│ │ │ │ 表格/列表 │ │ │
│ │ │ └────────────────────────┘ │ │
│ │ └────────────────────────────┘ │
└──────────┴──────────────────────────────────┘
响应式断点
| 断点 |
宽度 |
布局调整 |
sm |
640px |
移动端基础适配 |
md |
768px |
侧边栏可折叠 |
lg |
1024px |
完整桌面布局 |
xl |
1280px |
宽屏扩展 |
2xl |
1536px |
超宽屏 |
网格系统
- 采用 CSS Grid + Flexbox 混合布局
- 仪表盘卡片网格:
grid-cols-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4
- 卡片间距:
gap-6
- 页面最大宽度:
max-w-7xl (1280px),居中显示
图表规范
GEO 平台大量使用数据可视化图表,基于 Recharts 实现。
配色方案
图表主色系:
- 系列 1:`#6366F1` (primary-500)
- 系列 2:`#22C55E` (success-500)
- 系列 3:`#F59E0B` (warning-500)
- 系列 4:`#EF4444` (error-500)
- 系列 5:`#8B5CF6` (violet-500)
- 系列 6:`#06B6D4` (cyan-500)
图表样式
通用样式:
- 背景:透明
- 网格线:`gray-200`,虚线
- 坐标轴文字:`gray-500`,text-xs
- 图例:底部居中
- Tooltip:白色背景,圆角,阴影
柱状图:
- 圆角:`radius-sm` 顶部
- 间距:`barGap=4`
折线图:
- 线条宽度:`2px`
- 数据点:`r=4`,hover `r=6`
- 填充区域:`fillOpacity=0.1`
饼图/环形图:
- 内半径:`60%`
- 标签:外部引导线 + 百分比
本文档定义 GEO 平台的 UI 风格规范,所有前端实现应严格遵循以上 Design Tokens 和组件规范。