bricks/aidocs/line.md
2025-10-05 06:39:58 +08:00

203 lines
5.0 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.

# `bricks.ChartLine` 技术文档
> 基于 ECharts 扩展的折线图组件,用于快速渲染多系列折线图。
---
## 概述
`bricks.ChartLine``bricks.EchartsExt` 的子类,封装了基于 ECharts 的折线图配置逻辑。它支持从远程数据源或本地数据动态生成折线图,并自动构建图表所需的 `options` 配置对象。
该组件通过工厂模式注册为 `'ChartLine'` 类型,可通过 `bricks.Factory.create('ChartLine', config)` 实例化。
---
## 依赖
- `bricks.EchartsExt`:基础 ECharts 扩展类。
- `bricks.Factory`:用于组件注册与创建的工厂类。
---
## 属性(配置项)
| 属性名 | 类型 | 必填 | 描述 |
|----------------|----------|------|------|
| `data_url` | String | 否 | 数据请求的 URL 地址。若提供,则通过 AJAX 获取数据。 |
| `data_params` | Object | 否 | 请求数据时携带的参数GET 或 POST。 |
| `method` | String | 否 | 请求方法,默认为 `'GET'`。可选 `'POST'`。 |
| `data` | Array | 否 | 直接传入的本地数据数组,格式为对象数组。例如:`[{name: 'A', value1: 10, value2: 20}]`。 |
| `line_options` | Object | 否 | 自定义 ECharts 配置的扩展选项,会合并到最终的 `options` 中。 |
| `nameField` | String | 是 | 用作 X 轴分类字段的键名(如时间、类别等)。 |
| `valueFields` | Array<String> | 是 | 一个字符串数组表示需要绘制为折线的字段名称Y 轴数据)。每个字段将生成一条折线。 |
> ⚠️ 注意:`data` 和 `data_url` 二选一。若两者都存在,优先使用 `data_url` 异步加载数据。
---
## 方法
### `values_from_data(data, name)`
从数据数组中提取指定字段的所有值。
#### 参数
- `data` (Array<Object>):数据对象数组。
- `name` (String):要提取的字段名。
#### 返回值
- Array包含所有 `data[i][name]` 值的数组。
#### 示例
```js
const data = [{x: 'A', y: 1}, {x: 'B', y: 2}];
this.values_from_data(data, 'y'); // 返回 [1, 2]
```
---
### `lineinfo_from_data(data, name)`
生成单条折线的 ECharts 系列配置项。
#### 参数
- `data` (Array<Object>):原始数据。
- `name` (String):对应 `valueFields` 中的字段名,作为该折线的名称和数据来源。
#### 返回值
```js
{
name: String,
type: 'line',
data: Array // 提取自 data 中对应字段的值
}
```
#### 示例
```js
this.lineinfo_from_data(data, 'sales');
// 返回:
// {
// name: 'sales',
// type: 'line',
// data: [100, 150, 200]
// }
```
---
### `setup_options(data)`
根据输入数据构建完整的 ECharts 配置对象。
#### 参数
- `data` (Array<Object>):待处理的数据数组。
#### 返回值
返回标准的 ECharts `options` 对象,结构如下:
```js
{
tooltip: { trigger: 'axis' },
legend: { data: valueFields },
xAxis: {
type: 'category',
data: [/* 所有 nameField 对应的值 */]
},
yAxis: {
type: 'value'
},
series: [/* 多个 lineinfo_from_data 生成的对象 */]
}
```
#### 内部流程
1. 提取 `nameField` 字段作为 X 轴数据。
2. 遍历 `valueFields`,每项生成一条折线系列。
3. 构建图例legend`valueFields` 数组。
4. 设置提示框为轴触发(`axis`)。
5. 返回完整配置。
---
## 使用示例
### HTML 结构
```html
<div id="chart-line" style="width: 800px; height: 400px;"></div>
```
### JavaScript 初始化
#### 方式一:使用本地数据
```js
const chart = new bricks.ChartLine({
data: [
{ month: 'Jan', sales: 100, profit: 60 },
{ month: 'Feb', sales: 130, profit: 70 },
{ month: 'Mar', sales: 145, profit: 65 }
],
nameField: 'month',
valueFields: ['sales', 'profit']
});
chart.renderTo('#chart-line');
```
#### 方式二:从接口加载数据
```js
const chart = new bricks.ChartLine({
data_url: '/api/chart-data',
data_params: { year: 2023 },
method: 'GET',
nameField: 'date',
valueFields: ['pv', 'uv', 'orders']
});
chart.renderTo('#chart-line');
```
---
## 图表效果说明
- 支持多条折线同时展示。
- X 轴为类目轴category显示 `nameField` 的值。
- Y 轴为数值轴value
- 鼠标悬停时显示坐标轴对齐的提示框tooltip
- 图例自动根据 `valueFields` 生成。
---
## 注册信息
```js
bricks.Factory.register('ChartLine', bricks.ChartLine);
```
可通过工厂方式创建:
```js
const chart = bricks.Factory.create('ChartLine', config);
```
---
## 注意事项
1. 数据必须是对象数组格式。
2. `nameField``valueFields` 中的字段必须存在于数据对象中。
3. 若使用 `data_url`,后端需返回 JSON 格式数组。
4. 可通过 `line_options` 进行高级定制(如颜色、样式、动画等),会深度合并至最终 options。
---
## 版本信息
- 创建者:`bricks` 框架团队
- 类型名称:`ChartLine`
- 继承自:`bricks.EchartsExt`
- 注册标识符:`'ChartLine'`
---
✅ 推荐用于快速搭建基于 ECharts 的多系列折线图场景。