# 数据分析页面 UI 设计文档
## 📋 文档说明
本文档记录了**数据分析中心页面**的 UI 设计实现,遵循项目的 UI 设计规范,采用现代简约的设计风格,提供清晰直观的数据可视化界面。
### 页面访问 URL
#### 主页面路径
- **完整路径**:`/pages/mall/analytics/index`
- **页面标题**:数据分析中心
- **导航栏样式**:自定义导航栏(`navigationStyle: "custom"`)
- **路由配置位置**:`subPackages` → `pages/mall/analytics` → `index`
#### 相关子页面 URL
- **销售报表**:`/pages/mall/analytics/sales-report`
- **用户分析**:`/pages/mall/analytics/user-analysis`
- **商品洞察**:`/pages/mall/analytics/product-insights`
- **市场趋势**:`/pages/mall/analytics/market-trends`
- **自定义报表**:`/pages/mall/analytics/custom-report`
- **报表详情**:`/pages/mall/analytics/report-detail`
- **数据分析详情**:`/pages/mall/analytics/data-detail`
- **数据洞察详情**:`/pages/mall/analytics/insight-detail`
### 访问方式
#### 1. 代码中跳转(uni-app x)
```typescript
// 方式一:使用 navigateTo(推荐,保留返回栈)
uni.navigateTo({
url: '/pages/mall/analytics/index'
})
// 方式二:使用 redirectTo(替换当前页面,不保留返回栈)
uni.redirectTo({
url: '/pages/mall/analytics/index'
})
// 方式三:使用 reLaunch(关闭所有页面,打开新页面)
uni.reLaunch({
url: '/pages/mall/analytics/index'
})
```
#### 2. 从其他页面跳转示例
```typescript
// 从管理后台跳转到数据分析中心
const goToAnalytics = () => {
uni.navigateTo({
url: '/pages/mall/analytics/index'
})
}
// 从首页跳转到数据分析中心
const goToDataAnalysis = () => {
uni.navigateTo({
url: '/pages/mall/analytics/index',
success: () => {
console.log('跳转成功')
},
fail: (err) => {
console.error('跳转失败:', err)
}
})
}
```
#### 3. 带参数跳转
```typescript
// 跳转并传递参数
uni.navigateTo({
url: '/pages/mall/analytics/index?period=30d&refresh=true'
})
// 在目标页面接收参数(index.uvue 的 onLoad)
onLoad(options: any) {
const period = options.period || '30d'
const refresh = options.refresh === 'true'
if (period) {
this.period = period
}
if (refresh) {
this.refreshData()
}
}
```
#### 4. 页面间跳转
```typescript
// 从数据分析首页跳转到销售报表
const goToSalesReport = () => {
uni.navigateTo({
url: '/pages/mall/analytics/sales-report'
})
}
// 从数据分析首页跳转到用户分析
const goToUserAnalysis = () => {
uni.navigateTo({
url: '/pages/mall/analytics/user-analysis'
})
}
```
#### 5. 权限控制示例
```typescript
// 跳转前检查权限
const goToAnalyticsWithAuth = () => {
// 检查用户是否有数据分析权限
const userType = getUserType() // 假设这是获取用户类型的函数
if (userType === 'admin' || userType === 'analyst') {
uni.navigateTo({
url: '/pages/mall/analytics/index'
})
} else {
uni.showToast({
title: '您没有访问权限',
icon: 'none'
})
}
}
```
#### 6. 在页面配置中设置入口
如果需要在 TabBar 或其他导航中添加入口,可以在 `pages.json` 中配置:
```json
{
"tabBar": {
"list": [
{
"pagePath": "pages/mall/analytics/index",
"text": "数据分析"
}
]
}
}
```
### 设计原则
1. **数据优先**:突出核心数据指标,减少视觉干扰
2. **层次清晰**:通过卡片、阴影、间距建立清晰的信息层次
3. **视觉统一**:遵循项目统一的颜色系统和设计规范
4. **响应式适配**:适配不同屏幕尺寸,确保良好的用户体验
---
## 一、页面结构
### 1.1 整体布局
```
┌─────────────────────────────────────┐
│ Header(头部控制面板) │
│ - 标题 + 最后更新时间 │
│ - 刷新/导出按钮 │
├─────────────────────────────────────┤
│ 实时大屏(4个核心指标卡片) │
│ - GMV / 订单 / 用户 / 转化率 │
├─────────────────────────────────────┤
│ 时间筛选(Tab切换) │
│ - 今日/本周/本月/本季度 │
├─────────────────────────────────────┤
│ 销售分析 │
│ - 销售趋势图 │
│ - 商品销量排行 │
├─────────────────────────────────────┤
│ 用户行为分析 │
│ - 用户活跃度 │
│ - 流量来源 │
├─────────────────────────────────────┤
│ 商家表现 │
│ - 商家排行榜 │
├─────────────────────────────────────┤
│ 配送效率 │
│ - 配送时效 │
│ - 配送覆盖 │
├─────────────────────────────────────┤
│ 快速分析工具(6个工具卡片) │
│ - 销售报表/用户分析/商品洞察等 │
└─────────────────────────────────────┘
```
### 1.2 模块划分
1. **Header 区域**:页面标题、更新时间、操作按钮
2. **实时大屏**:核心业务指标(GMV、订单、用户、转化率)
3. **时间筛选**:时间维度切换(今日/本周/本月/本季度)
4. **销售分析**:销售趋势、商品排行
5. **用户行为分析**:用户活跃度、流量来源
6. **商家表现**:商家销售排行榜
7. **配送效率**:配送时效、覆盖情况
8. **快速工具**:常用分析工具入口
---
## 二、设计规范应用
### 2.1 CSS 变量系统
所有设计 token 通过 CSS 变量定义,便于统一管理和换肤:
```css
:root {
/* 主题色 */
--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;
/* 文字颜色 */
--text-primary: #111111;
--text-secondary: #333333;
--text-tertiary: #666666;
--text-disabled: #999999;
/* 背景颜色 */
--bg-primary: #FFFFFF;
--bg-secondary: #F7F8FA;
--bg-tertiary: #F5F5F5;
/* 边框 */
--border-color: rgba(0, 0, 0, 0.06);
/* 阴影 */
--shadow-sm: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
--shadow-md: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
/* 圆角 */
--radius-md: 12rpx;
--radius-lg: 20rpx;
--radius-xl: 24rpx;
/* 间距 */
--spacing-sm: 16rpx;
--spacing-md: 24rpx;
--spacing-lg: 32rpx;
}
```
### 2.2 卡片式设计
所有数据模块采用卡片式设计:
- **圆角**:`border-radius: 20rpx`(符合 UI 规范)
- **阴影**:`box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06)`(轻微阴影)
- **背景**:白色背景 `#FFFFFF`
- **内边距**:`32rpx`(统一间距)
- **外边距**:`24rpx`(卡片间距)
### 2.3 颜色系统应用
#### Header 渐变背景
```css
background: linear-gradient(135deg, #FF4D4F 0%, #FF7A45 100%);
```
#### 实时指标卡片渐变
- **GMV(收入)**:`#FF6B6B → #FF4D4F`(红色渐变)
- **订单**:`#4ECDC4 → #44A08D`(青色渐变)
- **用户**:`#A8E6CF → #7FCDBB`(绿色渐变)
- **转化率**:`#FFD93D → #FFA07A`(黄色渐变)
#### 状态颜色
- **增长(正)**:绿色 `#52C41A` + 浅绿背景
- **下降(负)**:红色 `#FF4D4F` + 浅红背景
- **中性**:灰色 `#666666` + 浅灰背景
---
## 三、组件设计详解
### 3.1 Header 头部
**设计特点**:
- 使用主题色渐变背景
- 左侧显示标题和更新时间
- 右侧操作按钮使用毛玻璃效果
**实现代码**:
```css
.header {
background: linear-gradient(135deg, var(--gradient-start) 0%, var(--gradient-end) 100%);
padding: var(--spacing-lg) var(--spacing-md) var(--spacing-md);
box-shadow: var(--shadow-md);
}
.refresh-btn,
.export-btn {
width: 64rpx;
height: 64rpx;
background: rgba(255, 255, 255, 0.2);
border-radius: 50%;
backdrop-filter: blur(10rpx);
}
```
### 3.2 实时大屏卡片
**设计特点**:
- 2x2 网格布局
- 每个卡片使用不同渐变背景
- 数值突出显示,增长指标使用标签样式
**布局**:
```css
.dashboard-grid {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: var(--spacing-md);
}
.dashboard-card {
width: calc(50% - var(--spacing-md) / 2);
padding: var(--spacing-lg) var(--spacing-md);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-sm);
}
```
### 3.3 时间筛选 Tab
**设计特点**:
- 激活状态使用主题色渐变
- 添加阴影效果增强层次
- 平滑过渡动画
**实现**:
```css
.filter-tab.active {
background: linear-gradient(135deg, var(--gradient-start) 0%, var(--gradient-end) 100%);
color: #fff;
font-weight: 500;
box-shadow: 0 2rpx 8rpx rgba(255, 77, 79, 0.3);
}
```
### 3.4 销售分析卡片
**设计特点**:
- 图表区域使用浅色背景区分
- 统计项使用独立卡片样式
- 数值使用主题色突出
**布局**:
```css
.trend-stats {
display: flex;
justify-content: space-around;
gap: var(--spacing-md);
}
.stat-item {
flex: 1;
padding: var(--spacing-md);
background: var(--bg-secondary);
border-radius: var(--radius-md);
}
```
### 3.5 商品排行
**设计特点**:
- 排名使用圆形徽章,使用主题色渐变
- 商品名称和销量清晰对比
- 统一的分割线
**实现**:
```css
.rank-number {
width: 56rpx;
height: 56rpx;
background: linear-gradient(135deg, var(--gradient-start) 0%, var(--gradient-end) 100%);
border-radius: 50%;
box-shadow: var(--shadow-sm);
}
```
### 3.6 用户行为分析
**设计特点**:
- 指标使用列表式展示
- 流量来源使用进度条可视化
- 进度条使用主题色渐变
**进度条实现**:
```css
.progress-bar {
height: 100%;
background: linear-gradient(135deg, var(--gradient-start) 0%, var(--gradient-end) 100%);
border-radius: 12rpx;
transition: width 0.3s ease;
}
```
### 3.7 商家排行榜
**设计特点**:
- 排名徽章使用金银铜渐变
- 增长率使用彩色标签
- 商家信息清晰展示
**排名徽章**:
```css
.rank-gold {
background: linear-gradient(135deg, #FFD700 0%, #FFA500 100%);
}
.rank-silver {
background: linear-gradient(135deg, #C0C0C0 0%, #A0A0A0 100%);
}
.rank-bronze {
background: linear-gradient(135deg, #CD7F32 0%, #B8860B 100%);
}
```
### 3.8 快速工具卡片
**设计特点**:
- 3 列网格布局
- 点击反馈效果
- 图标 + 标题 + 描述
**交互效果**:
```css
.tool-card:active {
transform: scale(0.98);
box-shadow: var(--shadow-md);
}
```
---
## 四、响应式设计
### 4.1 断点设置
- **默认**:>= 768rpx(双列布局)
- **小屏**:< 768rpx(单列布局)
### 4.2 响应式规则
```css
@media screen and (max-width: 768rpx) {
/* 实时大屏卡片改为单列 */
.dashboard-card {
width: 100%;
}
/* 工具卡片改为 2 列 */
.tool-card {
width: calc(50% - var(--spacing-md) / 2);
}
/* 配送分析改为纵向布局 */
.delivery-metrics {
flex-direction: column;
}
}
```
### 4.3 适配策略
1. **实时大屏**:小屏下改为单列,保持卡片完整性
2. **工具卡片**:小屏下改为 2 列,提升空间利用率
3. **配送分析**:小屏下改为纵向堆叠,避免内容挤压
---
## 五、交互设计
### 5.1 操作反馈
- **按钮点击**:缩放效果 `transform: scale(0.98)`
- **Tab 切换**:平滑过渡动画 `transition: all 0.3s`
- **进度条**:宽度变化动画 `transition: width 0.3s ease`
### 5.2 数据刷新
- **刷新按钮**:点击后显示加载状态
- **数据更新**:更新时间实时显示
- **错误处理**:友好的错误提示
### 5.3 导出功能
- **导出选项**:Excel / PDF / 图片
- **加载提示**:导出过程中显示加载动画
- **成功反馈**:导出成功后 Toast 提示
---
## 六、数据可视化
### 6.1 图表占位
当前使用占位符,后续可集成图表库:
- **销售趋势图**:折线图或面积图
- **商品销量排行**:柱状图或条形图
- **流量来源**:饼图或环形图
### 6.2 推荐图表库
- **uni-app x 兼容**:需使用原生图表组件
- **Web 端**:可使用 ECharts、Chart.js 等
- **移动端**:可使用 uni-charts 或自定义 Canvas 绘制
---
## 七、性能优化
### 7.1 数据加载
- **分步加载**:先加载核心指标,再加载详细数据
- **缓存策略**:合理使用数据缓存,减少重复请求
- **防抖处理**:刷新操作添加防抖,避免频繁请求
### 7.2 渲染优化
- **虚拟列表**:长列表使用虚拟滚动
- **懒加载**:非首屏内容延迟加载
- **图片优化**:使用合适的图片格式和尺寸
---
## 八、后续优化建议
### 8.1 功能增强
1. **实时数据推送**:使用 WebSocket 实现数据实时更新
2. **数据钻取**:点击指标可查看详细数据
3. **自定义看板**:允许用户自定义指标和布局
4. **数据对比**:支持多时间段数据对比
5. **导出增强**:支持自定义导出字段和格式
### 8.2 UI 优化
1. **图表集成**:集成专业图表库,替换占位符
2. **动画效果**:添加数据变化动画,提升视觉体验
3. **暗色模式**:支持暗色主题切换
4. **国际化**:支持多语言切换
### 8.3 交互优化
1. **下拉刷新**:支持下拉刷新数据
2. **上拉加载**:长列表支持上拉加载更多
3. **手势操作**:支持滑动切换时间维度
4. **快捷操作**:添加常用操作的快捷入口
---
## 九、技术实现
### 9.1 文件结构
```
pages/mall/analytics/
├── index.uvue # 数据分析首页
├── profile.uvue # 数据分析个人中心
└── report-detail.uvue # 报表详情页
```
### 9.2 核心代码结构
```vue
...
...
...
...
```
### 9.3 数据接口
当前使用 Supabase 查询数据,主要涉及:
- `orders` 表:订单数据
- `users` 表:用户数据
- `user_sessions` 表:用户会话数据(如果存在)
---
## 十、设计规范遵循
### 10.1 颜色系统 ✅
- ✅ 使用主题色 `#FF4D4F` 作为主色调
- ✅ 使用渐变色增强视觉效果
- ✅ 使用功能色表示状态(成功/警告/错误)
### 10.2 间距系统 ✅
- ✅ 使用统一的间距变量(`--spacing-sm/md/lg`)
- ✅ 卡片间距统一为 `24rpx`
- ✅ 内容内边距统一为 `32rpx`
### 10.3 圆角系统 ✅
- ✅ 卡片圆角统一为 `20rpx`
- ✅ 小元素圆角为 `12rpx`
- ✅ 圆形元素使用 `50%`
### 10.4 阴影系统 ✅
- ✅ 卡片使用轻微阴影 `0 2rpx 8rpx rgba(0, 0, 0, 0.06)`
- ✅ 激活状态使用增强阴影
- ✅ 按钮使用阴影增强层次
---
## 十一、总结
数据分析页面 UI 设计完全遵循项目的 UI 设计规范,实现了:
1. ✅ **统一的视觉风格**:使用项目统一的颜色系统和设计 token
2. ✅ **清晰的信息层次**:通过卡片、阴影、间距建立清晰层次
3. ✅ **良好的用户体验**:响应式设计、交互反馈、数据可视化
4. ✅ **可维护的代码**:CSS 变量系统、模块化设计、清晰的代码结构
页面已实现核心功能,后续可根据实际需求进行功能增强和 UI 优化。
---
**文档版本**: v1.0
**创建时间**: 2025-01-XX
**最后更新**: 2025-01-XX
**状态**: ✅ 已完成