299 lines
6.8 KiB
Markdown
299 lines
6.8 KiB
Markdown
|
|
# StatCard 组件
|
|||
|
|
|
|||
|
|
## 组件说明
|
|||
|
|
|
|||
|
|
统计卡片组件,用于展示数值型统计数据。支持图标、颜色主题、趋势指示器等功能,适合在仪表盘或信息面板中使用。
|
|||
|
|
|
|||
|
|
## 组件位置
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
src/components/StatCard/StatCard.jsx
|
|||
|
|
src/components/StatCard/StatCard.css
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 参数说明
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|||
|
|
|--------|------|------|--------|------|
|
|||
|
|
| title | string | 是 | - | 卡片标题 |
|
|||
|
|
| value | number \| string | 是 | - | 统计值 |
|
|||
|
|
| icon | ReactNode | 否 | - | 图标 |
|
|||
|
|
| color | string | 否 | 'blue' | 主题颜色:blue/green/orange/red/purple/gray 或自定义颜色值 |
|
|||
|
|
| trend | TrendConfig | 否 | - | 趋势信息 |
|
|||
|
|
| suffix | string | 否 | '' | 后缀单位 |
|
|||
|
|
| layout | string | 否 | 'column' | 布局模式:'column'(一列)\| 'row'(两列) |
|
|||
|
|
| className | string | 否 | '' | 自定义类名 |
|
|||
|
|
|
|||
|
|
### TrendConfig 配置项
|
|||
|
|
|
|||
|
|
| 属性名 | 类型 | 必填 | 说明 |
|
|||
|
|
|--------|------|------|------|
|
|||
|
|
| value | number | 是 | 趋势值(百分比,自动取绝对值) |
|
|||
|
|
| direction | 'up' \| 'down' | 是 | 趋势方向 |
|
|||
|
|
|
|||
|
|
### 颜色预设
|
|||
|
|
|
|||
|
|
| 颜色名 | 色值 | 适用场景 |
|
|||
|
|
|--------|------|---------|
|
|||
|
|
| blue | #1677ff | 默认、总数、常规数据 |
|
|||
|
|
| green | #52c41a | 成功、在线、正常状态 |
|
|||
|
|
| orange | #faad14 | 警告、待处理 |
|
|||
|
|
| red | #ff4d4f | 错误、危险、异常 |
|
|||
|
|
| purple | #722ed1 | 特殊、高级功能 |
|
|||
|
|
| gray | #8c8c8c | 禁用、离线、未激活 |
|
|||
|
|
|
|||
|
|
## 使用示例
|
|||
|
|
|
|||
|
|
### 基础用法
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
import StatCard from '../components/StatCard/StatCard'
|
|||
|
|
import { DatabaseOutlined } from '@ant-design/icons'
|
|||
|
|
|
|||
|
|
<StatCard
|
|||
|
|
title="镜像总数"
|
|||
|
|
value={32}
|
|||
|
|
icon={<DatabaseOutlined />}
|
|||
|
|
/>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 带颜色主题
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
<StatCard
|
|||
|
|
title="在线用户"
|
|||
|
|
value={156}
|
|||
|
|
icon={<UserOutlined />}
|
|||
|
|
color="green"
|
|||
|
|
/>
|
|||
|
|
|
|||
|
|
<StatCard
|
|||
|
|
title="错误数量"
|
|||
|
|
value={3}
|
|||
|
|
icon={<CloseCircleOutlined />}
|
|||
|
|
color="red"
|
|||
|
|
/>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 带趋势指示
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
<StatCard
|
|||
|
|
title="访问量"
|
|||
|
|
value={1250}
|
|||
|
|
icon={<LineChartOutlined />}
|
|||
|
|
trend={{ value: 12.5, direction: 'up' }}
|
|||
|
|
/>
|
|||
|
|
|
|||
|
|
<StatCard
|
|||
|
|
title="响应时间"
|
|||
|
|
value={245}
|
|||
|
|
suffix="ms"
|
|||
|
|
trend={{ value: 8.3, direction: 'down' }}
|
|||
|
|
color="green"
|
|||
|
|
/>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 自定义颜色
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
<StatCard
|
|||
|
|
title="自定义指标"
|
|||
|
|
value={88}
|
|||
|
|
color="#9c27b0"
|
|||
|
|
suffix="%"
|
|||
|
|
/>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 布局模式
|
|||
|
|
|
|||
|
|
StatCard 支持两种布局模式,通过 `layout` 参数配置:
|
|||
|
|
|
|||
|
|
#### 一列布局(默认)
|
|||
|
|
|
|||
|
|
标题和图标在上方,数值和趋势在下方。适合垂直排列的卡片网格。
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
<StatCard
|
|||
|
|
title="CPU使用率"
|
|||
|
|
value={45}
|
|||
|
|
suffix="%"
|
|||
|
|
icon={<DashboardOutlined />}
|
|||
|
|
color="blue"
|
|||
|
|
trend={{ value: 5, direction: 'up' }}
|
|||
|
|
/>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 两列布局
|
|||
|
|
|
|||
|
|
左侧显示标题和图标,右侧显示数值和趋势。适合在较宽的容器中横向展示数据。
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
<StatCard
|
|||
|
|
layout="row"
|
|||
|
|
title="内存使用率"
|
|||
|
|
value={62}
|
|||
|
|
suffix="%"
|
|||
|
|
icon={<DatabaseOutlined />}
|
|||
|
|
color="orange"
|
|||
|
|
trend={{ value: 3, direction: 'down' }}
|
|||
|
|
/>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 布局模式选择建议
|
|||
|
|
|
|||
|
|
- **一列布局(column)**:
|
|||
|
|
- 适用于窄宽度容器(如侧边信息面板)
|
|||
|
|
- 适用于网格布局中垂直排列
|
|||
|
|
- 数值作为视觉焦点,强调数据本身
|
|||
|
|
|
|||
|
|
- **两列布局(row)**:
|
|||
|
|
- 适用于较宽的容器(宽度 > 300px)
|
|||
|
|
- 适用于列表或卡片中横向展示
|
|||
|
|
- 平衡展示标题和数值,节省垂直空间
|
|||
|
|
|
|||
|
|
### 网格布局
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
<div style={{ display: 'grid', gap: '12px' }}>
|
|||
|
|
<StatCard
|
|||
|
|
title="总数"
|
|||
|
|
value={100}
|
|||
|
|
icon={<DatabaseOutlined />}
|
|||
|
|
color="blue"
|
|||
|
|
/>
|
|||
|
|
<StatCard
|
|||
|
|
title="在线"
|
|||
|
|
value={85}
|
|||
|
|
icon={<CheckCircleOutlined />}
|
|||
|
|
color="green"
|
|||
|
|
trend={{ value: 12, direction: 'up' }}
|
|||
|
|
/>
|
|||
|
|
<StatCard
|
|||
|
|
title="离线"
|
|||
|
|
value={15}
|
|||
|
|
icon={<CloseCircleOutlined />}
|
|||
|
|
color="gray"
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 配合 SideInfoPanel 使用
|
|||
|
|
|
|||
|
|
```jsx
|
|||
|
|
import SideInfoPanel from '../components/SideInfoPanel/SideInfoPanel'
|
|||
|
|
import StatCard from '../components/StatCard/StatCard'
|
|||
|
|
|
|||
|
|
<SideInfoPanel
|
|||
|
|
sections={[
|
|||
|
|
{
|
|||
|
|
key: 'overview',
|
|||
|
|
title: '系统概览',
|
|||
|
|
content: (
|
|||
|
|
<div style={{ display: 'grid', gap: '12px' }}>
|
|||
|
|
<StatCard
|
|||
|
|
title="CPU使用率"
|
|||
|
|
value={45}
|
|||
|
|
suffix="%"
|
|||
|
|
icon={<DashboardOutlined />}
|
|||
|
|
trend={{ value: 5, direction: 'up' }}
|
|||
|
|
/>
|
|||
|
|
<StatCard
|
|||
|
|
title="内存使用率"
|
|||
|
|
value={62}
|
|||
|
|
suffix="%"
|
|||
|
|
color="orange"
|
|||
|
|
trend={{ value: 3, direction: 'down' }}
|
|||
|
|
/>
|
|||
|
|
<StatCard
|
|||
|
|
title="磁盘使用率"
|
|||
|
|
value={78}
|
|||
|
|
suffix="%"
|
|||
|
|
color="red"
|
|||
|
|
/>
|
|||
|
|
</div>
|
|||
|
|
),
|
|||
|
|
},
|
|||
|
|
]}
|
|||
|
|
/>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 样式定制
|
|||
|
|
|
|||
|
|
组件提供以下 CSS 类名供自定义样式:
|
|||
|
|
|
|||
|
|
- `.stat-card` - 卡片容器
|
|||
|
|
- `.stat-card-column` - 一列布局模式
|
|||
|
|
- `.stat-card-row` - 两列布局模式
|
|||
|
|
- `.stat-card-header` - 卡片头部
|
|||
|
|
- `.stat-card-title` - 标题文本
|
|||
|
|
- `.stat-card-icon` - 图标
|
|||
|
|
- `.stat-card-body` - 卡片内容
|
|||
|
|
- `.stat-card-value` - 统计值
|
|||
|
|
- `.stat-card-suffix` - 后缀单位
|
|||
|
|
- `.stat-card-trend` - 趋势指示器
|
|||
|
|
- `.trend-up` - 上升趋势
|
|||
|
|
- `.trend-down` - 下降趋势
|
|||
|
|
|
|||
|
|
### 自定义样式示例
|
|||
|
|
|
|||
|
|
```css
|
|||
|
|
/* 修改卡片圆角 */
|
|||
|
|
.stat-card {
|
|||
|
|
border-radius: 12px;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 自定义标题样式 */
|
|||
|
|
.stat-card-title {
|
|||
|
|
font-size: 14px;
|
|||
|
|
font-weight: 600;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/* 自定义数值大小 */
|
|||
|
|
.stat-card-value {
|
|||
|
|
font-size: 28px;
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 使用场景
|
|||
|
|
|
|||
|
|
1. **仪表盘概览** - 展示关键业务指标
|
|||
|
|
2. **系统监控** - 展示CPU、内存、磁盘使用率
|
|||
|
|
3. **数据统计** - 展示用户数、订单数等统计数据
|
|||
|
|
4. **性能指标** - 展示响应时间、吞吐量等性能数据
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **数值格式化**:
|
|||
|
|
- 大数值建议使用千分位格式(如 1,250)
|
|||
|
|
- 小数建议保留 1-2 位
|
|||
|
|
- 使用 suffix 添加单位,而不是直接拼接在 value 中
|
|||
|
|
|
|||
|
|
2. **颜色使用**:
|
|||
|
|
- 保持颜色语义一致(绿色=正常,红色=错误)
|
|||
|
|
- 避免过多颜色,建议同一页面不超过 4 种
|
|||
|
|
- 优先使用预设颜色,保持风格统一
|
|||
|
|
|
|||
|
|
3. **趋势指示**:
|
|||
|
|
- 趋势值会自动取绝对值显示
|
|||
|
|
- 上升趋势不一定是好事(如错误率上升)
|
|||
|
|
- 根据业务含义选择合适的颜色
|
|||
|
|
|
|||
|
|
4. **布局建议**:
|
|||
|
|
- 一列布局(column):适合侧边信息面板和网格垂直排列
|
|||
|
|
- 两列布局(row):适合较宽容器和横向展示
|
|||
|
|
- 网格布局推荐使用:`display: grid; gap: 12px;`
|
|||
|
|
- 避免卡片过宽,建议最大宽度 400px
|
|||
|
|
- 根据容器宽度选择合适的 layout 模式
|
|||
|
|
|
|||
|
|
5. **图标选择**:
|
|||
|
|
- 使用与数据相关的图标
|
|||
|
|
- 保持图标风格统一
|
|||
|
|
- 避免过于复杂的图标
|
|||
|
|
|
|||
|
|
## 配合使用的组件
|
|||
|
|
|
|||
|
|
- **SideInfoPanel** - 侧边信息面板(推荐)
|
|||
|
|
- **SplitLayout** - 分栏布局
|
|||
|
|
- **ChartPanel** - 图表面板(配合使用)
|