Files
medical-mall/docs/UI_DESIGN_GUIDELINES.md
2026-01-22 21:15:02 +08:00

661 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 字体规范
- **字体家族**:系统默认字体
- **字重**Regular400、Medium500、Bold600
- **字号**24rpx、28rpx、32rpx、36rpx、40rpx
---
## 十、总结
本文档基于 CRMEB 项目的设计理念,提取了以下核心要点:
1. **设计风格**:现代简约,以红色系为主色调
2. **布局方式**:卡片式、列表式、网格式
3. **交互模式**:流畅动画、即时反馈、友好提示
4. **组件设计**:统一的组件样式和交互规范
所有实现均为原创,遵循现代 UI 设计最佳实践,确保用户体验和视觉一致性。
---
**文档版本**: v1.0
**创建时间**: 2025-01-XX
**状态**: ✅ 待实施