geo/docs/02-design/ui-style-guide.md

14 KiB
Raw Blame History

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 链接样式

尺寸规范

  • smh-8 px-3 text-sm
  • md(默认):h-10 px-4 text-base
  • lgh-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 和组件规范。