661 lines
17 KiB
Markdown
661 lines
17 KiB
Markdown
# UI 设计规范文档
|
||
|
||
## 📋 文档说明
|
||
|
||
本文档基于 **CRMEB 项目的 UI 设计理念和交互模式**,提取设计思想、布局方式、组件模式等,为项目提供统一的 UI 设计规范。**所有实现均为原创,不复制任何源码**。
|
||
|
||
### 设计原则
|
||
|
||
1. **参考不复制**:仅参考 CRMEB 的设计理念,不复制任何代码
|
||
2. **现代简约**:遵循现代电商 UI 设计趋势
|
||
3. **用户体验优先**:注重交互流畅性和视觉舒适度
|
||
4. **一致性**:保持整体设计风格统一
|
||
|
||
---
|
||
|
||
## 一、设计风格分析
|
||
|
||
### 1.1 CRMEB 设计特点
|
||
|
||
基于对 CRMEB 项目的分析,提取以下设计特点:
|
||
|
||
#### 1.1.1 视觉风格
|
||
- **色彩**:以红色系为主色调(#E93323),体现电商活力
|
||
- **圆角**:大量使用圆角设计(20rpx-24rpx),柔和现代
|
||
- **阴影**:轻微阴影效果,增强层次感
|
||
- **间距**:宽松的间距设计,提升可读性
|
||
|
||
#### 1.1.2 布局特点
|
||
- **卡片式设计**:信息以卡片形式呈现,清晰分组
|
||
- **瀑布流布局**:商品列表采用瀑布流,提升浏览体验
|
||
- **模块化设计**:首页采用模块化组件,灵活配置
|
||
- **响应式适配**:适配不同屏幕尺寸
|
||
|
||
#### 1.1.3 交互特点
|
||
- **流畅动画**:页面切换和操作有平滑过渡
|
||
- **即时反馈**:操作有明确的视觉反馈
|
||
- **加载状态**:优雅的加载动画和骨架屏
|
||
- **错误处理**:友好的错误提示和空状态
|
||
|
||
---
|
||
|
||
## 二、颜色系统
|
||
|
||
### 2.1 主色调
|
||
|
||
基于 CRMEB 的设计理念,定义以下颜色系统:
|
||
|
||
```scss
|
||
// 主题色
|
||
$theme-primary: #FF4D4F; // 主色(红色系,体现电商活力)
|
||
$theme-primary-light: #FF7875; // 主色浅色
|
||
$theme-primary-dark: #CF1322; // 主色深色
|
||
|
||
// 渐变色
|
||
$gradient-start: #FF4D4F; // 渐变起始色
|
||
$gradient-end: #FF7A45; // 渐变结束色
|
||
|
||
// 功能色
|
||
$success: #52C41A; // 成功色
|
||
$warning: #FAAD14; // 警告色
|
||
$error: #FF4D4F; // 错误色
|
||
$info: #1890FF; // 信息色
|
||
```
|
||
|
||
### 2.2 中性色
|
||
|
||
```scss
|
||
// 文字颜色
|
||
$text-primary: #111111; // 主要文字
|
||
$text-secondary: #333333; // 次要文字
|
||
$text-tertiary: #666666; // 辅助文字
|
||
$text-disabled: #999999; // 禁用文字
|
||
$text-placeholder: #CCCCCC; // 占位文字
|
||
|
||
// 背景颜色
|
||
$bg-primary: #FFFFFF; // 主背景
|
||
$bg-secondary: #F7F8FA; // 次背景
|
||
$bg-tertiary: #F5F5F5; // 三级背景
|
||
$bg-hover: #F1F1F1; // 悬停背景
|
||
|
||
// 边框颜色
|
||
$border-color: rgba(0, 0, 0, 0.06); // 边框色
|
||
$border-color-light: rgba(0, 0, 0, 0.08); // 浅边框
|
||
```
|
||
|
||
### 2.3 使用规范
|
||
|
||
- **主色**:用于按钮、链接、重要信息
|
||
- **渐变色**:用于主要操作按钮、强调元素
|
||
- **中性色**:用于文字、背景、边框
|
||
- **功能色**:用于状态提示、警告信息
|
||
|
||
---
|
||
|
||
## 三、布局规范
|
||
|
||
### 3.1 间距系统
|
||
|
||
```scss
|
||
// 基础间距单位(基于 rpx)
|
||
$spacing-xs: 8rpx; // 极小间距
|
||
$spacing-sm: 16rpx; // 小间距
|
||
$spacing-md: 24rpx; // 中等间距
|
||
$spacing-lg: 32rpx; // 大间距
|
||
$spacing-xl: 48rpx; // 超大间距
|
||
|
||
// 页面边距
|
||
$page-padding: 24rpx; // 页面左右边距
|
||
$section-margin: 20rpx; // 模块间距
|
||
```
|
||
|
||
### 3.2 圆角规范
|
||
|
||
```scss
|
||
$radius-sm: 8rpx; // 小圆角
|
||
$radius-md: 12rpx; // 中等圆角
|
||
$radius-lg: 20rpx; // 大圆角
|
||
$radius-xl: 24rpx; // 超大圆角
|
||
$radius-circle: 50%; // 圆形
|
||
```
|
||
|
||
### 3.3 阴影规范
|
||
|
||
```scss
|
||
// 轻微阴影(卡片)
|
||
$shadow-sm: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
|
||
|
||
// 中等阴影(悬浮)
|
||
$shadow-md: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
|
||
|
||
// 大阴影(弹窗)
|
||
$shadow-lg: 0 8rpx 24rpx rgba(0, 0, 0, 0.12);
|
||
```
|
||
|
||
### 3.4 布局模式
|
||
|
||
#### 3.4.1 卡片布局
|
||
- **特点**:信息以卡片形式呈现,有圆角和阴影
|
||
- **应用**:商品卡片、订单卡片、信息卡片
|
||
- **实现**:使用 `view` 容器,添加圆角和阴影样式
|
||
|
||
#### 3.4.2 列表布局
|
||
- **特点**:信息以列表形式呈现,清晰有序
|
||
- **应用**:订单列表、地址列表、设置列表
|
||
- **实现**:使用 `view` 容器,添加分割线
|
||
|
||
#### 3.4.3 网格布局
|
||
- **特点**:信息以网格形式呈现,整齐排列
|
||
- **应用**:商品网格、分类网格、功能入口
|
||
- **实现**:使用 `view` 容器,配合 flex 布局
|
||
|
||
---
|
||
|
||
## 四、组件设计规范
|
||
|
||
### 4.1 按钮组件
|
||
|
||
#### 4.1.1 主要按钮(Primary)
|
||
```scss
|
||
// 样式特点
|
||
- 背景:渐变色(#FF4D4F → #FF7A45)
|
||
- 文字:白色
|
||
- 圆角:18rpx
|
||
- 高度:92rpx
|
||
- 阴影:0 16rpx 32rpx rgba(255, 77, 79, 0.24)
|
||
```
|
||
|
||
#### 4.1.2 次要按钮(Secondary)
|
||
```scss
|
||
// 样式特点
|
||
- 背景:白色
|
||
- 文字:主题色
|
||
- 边框:1rpx solid 主题色
|
||
- 圆角:18rpx
|
||
- 高度:92rpx
|
||
```
|
||
|
||
#### 4.1.3 文字按钮(Text)
|
||
```scss
|
||
// 样式特点
|
||
- 背景:透明
|
||
- 文字:主题色
|
||
- 无边框
|
||
- 无圆角
|
||
```
|
||
|
||
### 4.2 输入框组件
|
||
|
||
#### 4.2.1 标准输入框
|
||
```scss
|
||
// 样式特点
|
||
- 背景:#F6F7F9
|
||
- 边框:2rpx solid rgba(0, 0, 0, 0.06)
|
||
- 圆角:14rpx
|
||
- 高度:84rpx
|
||
- 内边距:0 14rpx
|
||
- 错误状态:边框变红,背景变浅红
|
||
```
|
||
|
||
### 4.3 商品卡片组件
|
||
|
||
#### 4.3.1 商品列表卡片
|
||
```scss
|
||
// 布局特点
|
||
- 图片:180rpx × 180rpx,圆角 20rpx
|
||
- 信息:商品名称、价格、销量
|
||
- 间距:左右 30rpx,上下 20rpx
|
||
- 活动标签:左上角显示(秒杀/砍价/拼团)
|
||
```
|
||
|
||
#### 4.3.2 商品网格卡片
|
||
```scss
|
||
// 布局特点
|
||
- 图片:宽高比 1:1,圆角 20rpx
|
||
- 信息:商品名称、价格、原价(删除线)
|
||
- 间距:网格间距 16rpx
|
||
- 两列或三列布局
|
||
```
|
||
|
||
### 4.4 订单卡片组件
|
||
|
||
#### 4.4.1 订单列表卡片
|
||
```scss
|
||
// 布局特点
|
||
- 背景:白色
|
||
- 圆角:20rpx
|
||
- 内边距:24rpx
|
||
- 阴影:轻微阴影
|
||
- 内容:订单号、商品信息、价格、状态
|
||
```
|
||
|
||
### 4.5 导航栏组件
|
||
|
||
#### 4.5.1 顶部导航栏
|
||
```scss
|
||
// 样式特点
|
||
- 背景:白色或透明(滚动时变化)
|
||
- 高度:88rpx(含状态栏)
|
||
- 文字:主题色或白色
|
||
- 返回按钮:左侧
|
||
- 搜索框:居中(可选)
|
||
```
|
||
|
||
### 4.6 标签组件
|
||
|
||
#### 4.6.1 活动标签
|
||
```scss
|
||
// 样式特点
|
||
- 背景:主题色或渐变色
|
||
- 文字:白色
|
||
- 圆角:4rpx 或 圆形
|
||
- 位置:商品图片左上角
|
||
- 文字:秒杀/砍价/拼团
|
||
```
|
||
|
||
---
|
||
|
||
## 五、交互模式
|
||
|
||
### 5.1 页面切换
|
||
|
||
- **动画**:使用 uni-app 的页面切换动画
|
||
- **返回**:支持滑动返回(iOS 风格)
|
||
- **加载**:页面切换时显示加载状态
|
||
|
||
### 5.2 数据加载
|
||
|
||
- **骨架屏**:数据加载时显示骨架屏
|
||
- **下拉刷新**:列表页面支持下拉刷新
|
||
- **上拉加载**:列表页面支持上拉加载更多
|
||
- **加载状态**:显示加载动画和提示文字
|
||
|
||
### 5.3 操作反馈
|
||
|
||
- **点击反馈**:使用 `hover-class` 提供点击反馈
|
||
- **成功提示**:使用 `uni.showToast` 显示成功提示
|
||
- **错误提示**:使用 `uni.showModal` 显示错误信息
|
||
- **加载提示**:使用 `uni.showLoading` 显示加载状态
|
||
|
||
### 5.4 表单交互
|
||
|
||
- **实时验证**:输入时实时验证,显示错误信息
|
||
- **提交反馈**:提交时显示加载状态,防止重复提交
|
||
- **成功跳转**:提交成功后自动跳转或提示
|
||
|
||
---
|
||
|
||
## 六、页面设计规范
|
||
|
||
### 6.1 首页设计
|
||
|
||
#### 6.1.1 布局结构
|
||
```
|
||
┌─────────────────────────┐
|
||
│ 顶部搜索栏(可选) │
|
||
├─────────────────────────┤
|
||
│ 轮播图(Banner) │
|
||
├─────────────────────────┤
|
||
│ 分类导航(横向滚动) │
|
||
├─────────────────────────┤
|
||
│ 营销模块(可选) │
|
||
│ - 秒杀/拼团/砍价 │
|
||
├─────────────────────────┤
|
||
│ 商品推荐 │
|
||
│ - 瀑布流布局 │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
#### 6.1.2 设计要点
|
||
- **模块化**:首页由多个模块组成,可配置
|
||
- **瀑布流**:商品列表采用瀑布流布局
|
||
- **懒加载**:图片和内容懒加载,提升性能
|
||
- **下拉刷新**:支持下拉刷新
|
||
|
||
### 6.2 商品详情页
|
||
|
||
#### 6.2.1 布局结构
|
||
```
|
||
┌─────────────────────────┐
|
||
│ 商品轮播图 │
|
||
├─────────────────────────┤
|
||
│ 商品信息 │
|
||
│ - 价格(突出显示) │
|
||
│ - 标题 │
|
||
│ - 标签 │
|
||
├─────────────────────────┤
|
||
│ 优惠信息 │
|
||
│ - 优惠券 │
|
||
│ - 活动 │
|
||
├─────────────────────────┤
|
||
│ 规格选择(弹窗) │
|
||
├─────────────────────────┤
|
||
│ 商品详情(Tab切换) │
|
||
│ - 详情 │
|
||
│ - 评价 │
|
||
│ - 推荐 │
|
||
├─────────────────────────┤
|
||
│ 底部操作栏(固定) │
|
||
│ - 购物车/立即购买 │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
#### 6.2.2 设计要点
|
||
- **图片展示**:轮播图展示商品图片
|
||
- **价格突出**:价格使用大字号和主题色
|
||
- **规格选择**:点击规格弹出选择弹窗
|
||
- **底部固定**:操作按钮固定在底部
|
||
|
||
### 6.3 购物车页面
|
||
|
||
#### 6.3.1 布局结构
|
||
```
|
||
┌─────────────────────────┐
|
||
│ 商品列表 │
|
||
│ ┌───────────────────┐ │
|
||
│ │ ☑ 商品卡片 │ │
|
||
│ │ 数量选择 │ │
|
||
│ └───────────────────┘ │
|
||
├─────────────────────────┤
|
||
│ 底部结算栏(固定) │
|
||
│ - 全选 │
|
||
│ - 合计金额 │
|
||
│ - 结算按钮 │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
#### 6.3.2 设计要点
|
||
- **选择状态**:每个商品可单独选择
|
||
- **数量编辑**:支持增减数量
|
||
- **价格计算**:实时计算总价
|
||
- **底部固定**:结算栏固定在底部
|
||
|
||
### 6.4 订单确认页
|
||
|
||
#### 6.4.1 布局结构
|
||
```
|
||
┌─────────────────────────┐
|
||
│ 收货地址(可选) │
|
||
├─────────────────────────┤
|
||
│ 商品列表 │
|
||
├─────────────────────────┤
|
||
│ 优惠券选择(可选) │
|
||
├─────────────────────────┤
|
||
│ 配送方式 │
|
||
├─────────────────────────┤
|
||
│ 备注信息 │
|
||
├─────────────────────────┤
|
||
│ 价格明细 │
|
||
│ - 商品总额 │
|
||
│ - 运费 │
|
||
│ - 优惠金额 │
|
||
│ - 实付金额 │
|
||
├─────────────────────────┤
|
||
│ 提交订单按钮(固定) │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
### 6.5 个人中心页
|
||
|
||
#### 6.5.1 布局结构
|
||
```
|
||
┌─────────────────────────┐
|
||
│ 用户信息卡片 │
|
||
│ - 头像 │
|
||
│ - 昵称 │
|
||
│ - 会员信息 │
|
||
├─────────────────────────┤
|
||
│ 订单状态(快捷入口) │
|
||
│ - 待付款/待发货等 │
|
||
├─────────────────────────┤
|
||
│ 功能菜单 │
|
||
│ - 我的订单 │
|
||
│ - 我的地址 │
|
||
│ - 我的优惠券 │
|
||
│ - 设置 │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 七、实现指南
|
||
|
||
### 7.1 样式变量定义
|
||
|
||
创建 `styles/variables.uts` 文件:
|
||
|
||
```typescript
|
||
// 颜色变量
|
||
export const THEME_PRIMARY = '#FF4D4F'
|
||
export const THEME_GRADIENT_START = '#FF4D4F'
|
||
export const THEME_GRADIENT_END = '#FF7A45'
|
||
|
||
// 间距变量
|
||
export const SPACING_XS = '8rpx'
|
||
export const SPACING_SM = '16rpx'
|
||
export const SPACING_MD = '24rpx'
|
||
export const SPACING_LG = '32rpx'
|
||
|
||
// 圆角变量
|
||
export const RADIUS_SM = '8rpx'
|
||
export const RADIUS_MD = '12rpx'
|
||
export const RADIUS_LG = '20rpx'
|
||
```
|
||
|
||
### 7.2 通用样式类
|
||
|
||
创建 `styles/common.uvue` 或使用 `<style>` 标签:
|
||
|
||
```css
|
||
/* 卡片样式 */
|
||
.card {
|
||
background: #FFFFFF;
|
||
border-radius: 20rpx;
|
||
padding: 24rpx;
|
||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
|
||
}
|
||
|
||
/* 按钮样式 */
|
||
.btn-primary {
|
||
background: linear-gradient(135deg, #FF4D4F 0%, #FF7A45 100%);
|
||
color: #FFFFFF;
|
||
border-radius: 18rpx;
|
||
height: 92rpx;
|
||
box-shadow: 0 16rpx 32rpx rgba(255, 77, 79, 0.24);
|
||
}
|
||
|
||
/* 输入框样式 */
|
||
.input {
|
||
background: #F6F7F9;
|
||
border: 2rpx solid rgba(0, 0, 0, 0.06);
|
||
border-radius: 14rpx;
|
||
height: 84rpx;
|
||
padding: 0 14rpx;
|
||
}
|
||
```
|
||
|
||
### 7.3 组件实现示例
|
||
|
||
#### 7.3.1 商品卡片组件
|
||
|
||
```vue
|
||
<template>
|
||
<view class="product-card" @click="handleClick">
|
||
<view class="product-image">
|
||
<image :src="product.image_url" mode="aspectFill" />
|
||
<view v-if="product.activity" class="activity-tag">
|
||
{{ activityText }}
|
||
</view>
|
||
</view>
|
||
<view class="product-info">
|
||
<text class="product-name">{{ product.name }}</text>
|
||
<view class="product-price">
|
||
<text class="price-symbol">¥</text>
|
||
<text class="price-value">{{ product.price }}</text>
|
||
</view>
|
||
<text class="product-sales">已售 {{ product.sales }}</text>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<script setup lang="uts">
|
||
import { ref } from 'vue'
|
||
|
||
const props = defineProps<{
|
||
product: ProductType
|
||
}>()
|
||
|
||
const activityText = ref<string>('')
|
||
// 根据活动类型设置标签文字
|
||
</script>
|
||
|
||
<style>
|
||
.product-card {
|
||
background: #FFFFFF;
|
||
border-radius: 20rpx;
|
||
overflow: hidden;
|
||
margin-bottom: 20rpx;
|
||
}
|
||
|
||
.product-image {
|
||
width: 100%;
|
||
height: 360rpx;
|
||
position: relative;
|
||
}
|
||
|
||
.product-image image {
|
||
width: 100%;
|
||
height: 100%;
|
||
}
|
||
|
||
.activity-tag {
|
||
position: absolute;
|
||
top: 10rpx;
|
||
left: 10rpx;
|
||
background: linear-gradient(135deg, #FF4D4F 0%, #FF7A45 100%);
|
||
color: #FFFFFF;
|
||
padding: 4rpx 12rpx;
|
||
border-radius: 4rpx;
|
||
font-size: 20rpx;
|
||
}
|
||
|
||
.product-info {
|
||
padding: 16rpx;
|
||
}
|
||
|
||
.product-name {
|
||
font-size: 28rpx;
|
||
color: #111111;
|
||
display: block;
|
||
margin-bottom: 12rpx;
|
||
overflow: hidden;
|
||
text-overflow: ellipsis;
|
||
white-space: nowrap;
|
||
}
|
||
|
||
.product-price {
|
||
display: flex;
|
||
align-items: baseline;
|
||
margin-bottom: 8rpx;
|
||
}
|
||
|
||
.price-symbol {
|
||
font-size: 24rpx;
|
||
color: #FF4D4F;
|
||
}
|
||
|
||
.price-value {
|
||
font-size: 36rpx;
|
||
color: #FF4D4F;
|
||
font-weight: 600;
|
||
}
|
||
|
||
.product-sales {
|
||
font-size: 22rpx;
|
||
color: #999999;
|
||
}
|
||
</style>
|
||
```
|
||
|
||
---
|
||
|
||
## 八、最佳实践
|
||
|
||
### 8.1 性能优化
|
||
|
||
1. **图片优化**
|
||
- 使用合适的图片尺寸
|
||
- 启用图片懒加载
|
||
- 使用 WebP 格式(如支持)
|
||
|
||
2. **列表优化**
|
||
- 使用虚拟列表(长列表)
|
||
- 分页加载数据
|
||
- 避免不必要的重新渲染
|
||
|
||
3. **动画优化**
|
||
- 使用 CSS 动画而非 JS 动画
|
||
- 避免过度动画
|
||
- 使用 `transform` 和 `opacity` 做动画
|
||
|
||
### 8.2 可访问性
|
||
|
||
1. **文字大小**
|
||
- 最小字号:24rpx
|
||
- 主要文字:28rpx-32rpx
|
||
- 标题文字:36rpx-40rpx
|
||
|
||
2. **点击区域**
|
||
- 最小点击区域:88rpx × 88rpx
|
||
- 按钮高度:至少 80rpx
|
||
|
||
3. **颜色对比**
|
||
- 文字与背景对比度:至少 4.5:1
|
||
- 重要信息使用高对比度
|
||
|
||
### 8.3 响应式设计
|
||
|
||
1. **屏幕适配**
|
||
- 使用 rpx 单位
|
||
- 使用 flex 布局
|
||
- 适配不同屏幕尺寸
|
||
|
||
2. **横竖屏适配**
|
||
- 考虑横屏布局
|
||
- 使用媒体查询(如需要)
|
||
|
||
---
|
||
|
||
## 九、设计资源
|
||
|
||
### 9.1 图标系统
|
||
|
||
- **图标库**:使用 uni-app 内置图标或自定义图标
|
||
- **图标大小**:24rpx、32rpx、48rpx
|
||
- **图标颜色**:主题色或中性色
|
||
|
||
### 9.2 字体规范
|
||
|
||
- **字体家族**:系统默认字体
|
||
- **字重**:Regular(400)、Medium(500)、Bold(600)
|
||
- **字号**:24rpx、28rpx、32rpx、36rpx、40rpx
|
||
|
||
---
|
||
|
||
## 十、总结
|
||
|
||
本文档基于 CRMEB 项目的设计理念,提取了以下核心要点:
|
||
|
||
1. **设计风格**:现代简约,以红色系为主色调
|
||
2. **布局方式**:卡片式、列表式、网格式
|
||
3. **交互模式**:流畅动画、即时反馈、友好提示
|
||
4. **组件设计**:统一的组件样式和交互规范
|
||
|
||
所有实现均为原创,遵循现代 UI 设计最佳实践,确保用户体验和视觉一致性。
|
||
|
||
---
|
||
|
||
**文档版本**: v1.0
|
||
**创建时间**: 2025-01-XX
|
||
**状态**: ✅ 待实施
|