nex_design/docs/components/StatCard.md

299 lines
6.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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** - 图表面板(配合使用)