xt-element-ui 1.3.2 → 1.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +72 -72
- package/LICENSE +21 -21
- package/README.md +240 -240
- package/docs/README.md +100 -100
- package/docs/components/base/xt-button.md +114 -114
- package/docs/components/base/xt-card-item.md +104 -104
- package/docs/components/base/xt-card.md +108 -108
- package/docs/components/base/xt-config-provider.md +199 -199
- package/docs/components/base/xt-flex-box.md +115 -115
- package/docs/components/base/xt-grid-box.md +302 -302
- package/docs/components/base/xt-input.md +150 -150
- package/docs/components/base/xt-map-provider.md +23 -0
- package/docs/components/base/xt-map.md +331 -331
- package/docs/components/base/xt-step-price.md +165 -165
- package/docs/components/base/xt-text.md +212 -212
- package/docs/components/base/xt-time.md +165 -165
- package/docs/components/extend/ex-bar.md +67 -67
- package/docs/components/extend/ex-button.md +62 -62
- package/docs/components/extend/ex-card.md +86 -86
- package/docs/components/extend/ex-chart.md +463 -463
- package/docs/components/extend/ex-icon.md +189 -189
- package/docs/components/extend/ex-line.md +70 -70
- package/docs/components/extend/ex-multi.md +155 -155
- package/docs/components/extend/ex-pie.md +69 -69
- package/docs/components/extend/ex-select-tree.md +210 -210
- package/docs/components/extend/ex-table.md +590 -590
- package/docs/components/extend/ex-upload.md +134 -134
- package/docs/components/utils/size.md +147 -147
- package/docs/components/utils/theme.md +182 -182
- package/lib/index.common.js +4131 -4162
- package/lib/index.css +1 -1
- package/lib/index.umd.js +4099 -4129
- package/lib/index.umd.min.js +3 -3
- package/package.json +80 -81
- package/src/components/ex-button/index.js +7 -7
- package/src/components/ex-button/index.vue +66 -66
- package/src/components/ex-button/style/index.scss +67 -67
- package/src/components/ex-card/index.js +7 -7
- package/src/components/ex-card/index.vue +68 -68
- package/src/components/ex-card/style/index.scss +73 -73
- package/src/components/ex-chart/index.js +7 -7
- package/src/components/ex-chart/index.vue +136 -136
- package/src/components/ex-date-picker/index.js +7 -7
- package/src/components/ex-icon/index.js +7 -7
- package/src/components/ex-icon/index.vue +168 -168
- package/src/components/ex-icon/style/index.scss +7 -7
- package/src/components/ex-page/index.js +7 -7
- package/src/components/ex-select-tree/index.js +7 -7
- package/src/components/ex-table/ExTableCell.vue +22 -22
- package/src/components/ex-table/index.js +7 -7
- package/src/components/ex-table/virtualScrollData.js +35 -35
- package/src/components/ex-upload/index.js +7 -7
- package/src/components/index.scss +39 -39
- package/src/components/xt-button/index.js +7 -7
- package/src/components/xt-button/index.vue +97 -97
- package/src/components/xt-card/index.js +7 -7
- package/src/components/xt-card/style/index.scss +48 -48
- package/src/components/xt-card-item/index.js +7 -7
- package/src/components/xt-card-item/style/index copy.scss +71 -71
- package/src/components/xt-card-item/style/index.scss +82 -82
- package/src/components/xt-config-provider/index.js +7 -7
- package/src/components/xt-config-provider/index.vue +362 -362
- package/src/components/xt-config-provider/style/index.scss +11 -11
- package/src/components/xt-flex-box/index.js +7 -7
- package/src/components/xt-flex-box/style/index.scss +81 -81
- package/src/components/xt-grid-box/index.js +7 -7
- package/src/components/xt-grid-box/style/index.scss +92 -92
- package/src/components/xt-grid-item/index.js +7 -7
- package/src/components/xt-grid-item/index.vue +106 -106
- package/src/components/xt-input/index.js +7 -7
- package/src/components/xt-input/index.vue +66 -66
- package/src/components/xt-input/style/index.scss +84 -84
- package/src/components/xt-map/adapters/amap.js +235 -235
- package/src/components/xt-map/adapters/baidu.js +254 -254
- package/src/components/xt-map/adapters/base.js +267 -267
- package/src/components/xt-map/adapters/index.js +29 -29
- package/src/components/xt-map/adapters/tianditu.js +242 -242
- package/src/components/xt-map/config/xt-map-config.js +197 -197
- package/src/components/xt-map/index.js +8 -30
- package/src/components/xt-map/index.vue +351 -351
- package/src/components/xt-map/loaders/script-loader.js +114 -114
- package/src/components/xt-map/provider.vue +200 -200
- package/src/components/xt-map/style/index.scss +77 -77
- package/src/components/xt-map-provider/index.js +8 -0
- package/src/components/xt-step-price/index.js +10 -10
- package/src/components/xt-step-price/index.vue +272 -272
- package/src/components/xt-step-price/style/index.scss +123 -123
- package/src/components/xt-step-price-item/index.js +7 -7
- package/src/components/xt-step-price-item/index.vue +187 -187
- package/src/components/xt-text/index.js +7 -7
- package/src/components/xt-text/index.vue +1 -1
- package/src/components/xt-text/style/index.scss +92 -92
- package/src/components/xt-time/index.js +7 -7
- package/src/components/xt-time/index.vue +313 -313
- package/src/components/xt-time/style/index.scss +23 -23
- package/src/config/element-registry.js +135 -135
- package/src/index.js +162 -178
- package/src/styles/css-variables.scss +257 -257
- package/src/styles/theme/background.scss +5 -5
- package/src/styles/theme/border-radius.scss +3 -3
- package/src/styles/theme/borders.scss +3 -3
- package/src/styles/theme/colors.scss +101 -101
- package/src/styles/theme/component-variables.scss +69 -69
- package/src/styles/theme/dark-variables.scss +28 -28
- package/src/styles/theme/font.scss +12 -12
- package/src/styles/theme/index.scss +11 -11
- package/src/styles/theme/shadows.scss +2 -2
- package/src/styles/theme/spacing.scss +4 -4
- package/src/styles/theme/transitions.scss +2 -2
- package/src/styles/theme/typography.scss +4 -4
- package/src/styles/variables-export.scss +85 -85
- package/src/utils/index.js +191 -202
|
@@ -1,463 +1,463 @@
|
|
|
1
|
-
## ExChart 图表组件
|
|
2
|
-
|
|
3
|
-
图表组件基于 ECharts 封装,支持多种图表类型和主题样式。**使用前需自行安装 ECharts 依赖**。
|
|
4
|
-
|
|
5
|
-
## 安装依赖
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm install echarts --save
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## 基础用法
|
|
12
|
-
|
|
13
|
-
图表组件包含五个独立子组件:`ExBar`(柱状图)、`ExLine`(折线图)、`ExPie`(饼图)、`ExMulti`(多系列组合图),以及统一入口组件 `ExChart`(通过 `type` 动态切换图表类型)。所有子组件支持通过 `fieldKeys` 自定义 chartData 中的字段映射。
|
|
14
|
-
|
|
15
|
-
## 全局通用属性
|
|
16
|
-
|
|
17
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
18
|
-
|------|------|--------|------|
|
|
19
|
-
| `theme` | String / Object | - | 主题名称:`white`、`dark` 或自定义主题对象 |
|
|
20
|
-
| `size` | String | medium | 字体大小:`small`、`medium`、`large` |
|
|
21
|
-
| `chartData` | Array | 见各组件默认示例 | 图表数据数组 |
|
|
22
|
-
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义 chartData 中字段名的映射,详见下方「自定义字段映射」 |
|
|
23
|
-
| `simpleMode` | Boolean | false | 是否开启极简模式(隐藏图例、坐标轴等装饰元素) |
|
|
24
|
-
|
|
25
|
-
### 自定义字段映射 (fieldKeys)
|
|
26
|
-
|
|
27
|
-
组件默认从 chartData 中读取 `label`、`value`、`data` 字段。如果后端返回的数据字段名不同,可通过 `fieldKeys` 映射。
|
|
28
|
-
|
|
29
|
-
```js
|
|
30
|
-
// 例如后端返回 { date: '01月', count: 980 }
|
|
31
|
-
fieldKeys: { label: 'date', value: 'count' }
|
|
32
|
-
|
|
33
|
-
// ExMulti 两层嵌套数据可同时配置外层与内层字段
|
|
34
|
-
// 外层: { title: '入户量', points: [...] }
|
|
35
|
-
// 内层: { month: '01月', num: 980 }
|
|
36
|
-
fieldKeys: { label: 'title', value: 'num', data: 'points' }
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
---
|
|
40
|
-
|
|
41
|
-
## ExBar 柱状图
|
|
42
|
-
|
|
43
|
-
::: demo 基础柱状图
|
|
44
|
-
```vue
|
|
45
|
-
<template>
|
|
46
|
-
<ExBar :chartData="chartData" style="height: 400px;" />
|
|
47
|
-
</template>
|
|
48
|
-
|
|
49
|
-
<script>
|
|
50
|
-
export default {
|
|
51
|
-
data() {
|
|
52
|
-
return {
|
|
53
|
-
chartData: [
|
|
54
|
-
{ label: '华东区', value: 1250 },
|
|
55
|
-
{ label: '华南区', value: 980 },
|
|
56
|
-
{ label: '华北区', value: 890 },
|
|
57
|
-
{ label: '西南区', value: 720 },
|
|
58
|
-
{ label: '西北区', value: 560 }
|
|
59
|
-
]
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
</script>
|
|
64
|
-
```
|
|
65
|
-
:::
|
|
66
|
-
|
|
67
|
-
### 属性说明
|
|
68
|
-
|
|
69
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
70
|
-
|------|------|--------|------|
|
|
71
|
-
| `chartData` | Array | 默认示例数据 | 图表数据数组,每项包含 `label`(标签)和 `value`(数值) |
|
|
72
|
-
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义字段映射 |
|
|
73
|
-
| `markPoint` | Boolean | false | 是否显示标记点(最大值、最小值) |
|
|
74
|
-
| `unit` | String | '' | Y轴单位名称 |
|
|
75
|
-
| `showZoom` | Boolean | false | 是否显示底部缩放滑动条 |
|
|
76
|
-
| `reverse` | Boolean | false | 是否反转坐标轴(纵向柱 → 横向柱) |
|
|
77
|
-
| `longLable` | Boolean | false | 是否启用长标签换行模式 |
|
|
78
|
-
| `longLableSplitNum` | Number | 1 | 长标签每隔几个字符换行一次 |
|
|
79
|
-
| `longLablePx` | Number | 150 | 长标签模式下左侧/底部预留空间 |
|
|
80
|
-
| `splitNumber` | Number | 5 | Y轴分割数量 |
|
|
81
|
-
| `simpleMode` | Boolean | false | 是否开启极简模式 |
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
## ExLine 折线图
|
|
86
|
-
|
|
87
|
-
::: demo 基础折线图,支持面积区域显示
|
|
88
|
-
```vue
|
|
89
|
-
<template>
|
|
90
|
-
<ExLine :chartData="chartData" :isArea="true" style="height: 400px;" />
|
|
91
|
-
</template>
|
|
92
|
-
|
|
93
|
-
<script>
|
|
94
|
-
export default {
|
|
95
|
-
data() {
|
|
96
|
-
return {
|
|
97
|
-
chartData: [
|
|
98
|
-
{ label: '1月', value: 2450 },
|
|
99
|
-
{ label: '2月', value: 2800 },
|
|
100
|
-
{ label: '3月', value: 3200 },
|
|
101
|
-
{ label: '4月', value: 2950 },
|
|
102
|
-
{ label: '5月', value: 3500 },
|
|
103
|
-
{ label: '6月', value: 3800 },
|
|
104
|
-
{ label: '7月', value: 4200 },
|
|
105
|
-
{ label: '8月', value: 4500 },
|
|
106
|
-
{ label: '9月', value: 4100 },
|
|
107
|
-
{ label: '10月', value: 3800 },
|
|
108
|
-
{ label: '11月', value: 4600 },
|
|
109
|
-
{ label: '12月', value: 5200 }
|
|
110
|
-
]
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
</script>
|
|
115
|
-
```
|
|
116
|
-
:::
|
|
117
|
-
|
|
118
|
-
### 属性说明
|
|
119
|
-
|
|
120
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
121
|
-
|------|------|--------|------|
|
|
122
|
-
| `chartData` | Array | 默认示例数据 | 图表数据数组,每项包含 `label` 和 `value` |
|
|
123
|
-
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义字段映射 |
|
|
124
|
-
| `isArea` | Boolean | false | 是否显示面积区域填充 |
|
|
125
|
-
| `unit` | String | '' | Y轴单位名称 |
|
|
126
|
-
| `intervalvalue` | Number | 0 | X轴标签显示间隔(0表示全部显示) |
|
|
127
|
-
| `simpleMode` | Boolean | false | 是否开启极简模式 |
|
|
128
|
-
|
|
129
|
-
---
|
|
130
|
-
|
|
131
|
-
## ExPie 饼图
|
|
132
|
-
|
|
133
|
-
::: demo 基础饼图,显示总数标题
|
|
134
|
-
```vue
|
|
135
|
-
<template>
|
|
136
|
-
<ExPie :chartData="chartData" style="height: 400px;" />
|
|
137
|
-
</template>
|
|
138
|
-
|
|
139
|
-
<script>
|
|
140
|
-
export default {
|
|
141
|
-
data() {
|
|
142
|
-
return {
|
|
143
|
-
chartData: [
|
|
144
|
-
{ label: '手机端', value: 4520 },
|
|
145
|
-
{ label: 'PC端', value: 3280 },
|
|
146
|
-
{ label: '平板端', value: 1250 },
|
|
147
|
-
{ label: '小程序', value: 2150 },
|
|
148
|
-
{ label: 'H5页面', value: 1800 }
|
|
149
|
-
]
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
}
|
|
153
|
-
</script>
|
|
154
|
-
```
|
|
155
|
-
:::
|
|
156
|
-
|
|
157
|
-
### 属性说明
|
|
158
|
-
|
|
159
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
160
|
-
|------|------|--------|------|
|
|
161
|
-
| `chartData` | Array | 默认示例数据 | 图表数据数组,每项包含 `label` 和 `value` |
|
|
162
|
-
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义字段映射 |
|
|
163
|
-
| `colors` | Array | [] | 自定义饼图颜色数组 |
|
|
164
|
-
| `unit` | String | '' | 数值单位(悬停提示时使用) |
|
|
165
|
-
| `showLegend` | Boolean | true | 是否显示图例 |
|
|
166
|
-
| `roseType` | String | '' | 玫瑰图类型,`'radius'`、`'area'` 等 |
|
|
167
|
-
| `showLabel` | Boolean | true | 是否显示饼图扇区标签及引线 |
|
|
168
|
-
| `totalLabel` | String | '总数' | 饼图中心显示的汇总标题文字 |
|
|
169
|
-
| `simpleMode` | Boolean | false | 是否开启极简模式 |
|
|
170
|
-
| `highlightKey` | String | - | 高亮字段键(用于指定高亮的扇区标识) |
|
|
171
|
-
|
|
172
|
-
### 计算说明
|
|
173
|
-
|
|
174
|
-
- `总数`:饼图中心会自动显示图表中心标题,格式为 `{totalLabel}:{value 之和}`。
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
## ExMulti 多系列组合图
|
|
179
|
-
|
|
180
|
-
多系列组合图,支持多个 series 共存(柱/线任意混合),根据不同 `unit` 自动生成多条 Y 轴。
|
|
181
|
-
|
|
182
|
-
::: demo 多系列数据示例
|
|
183
|
-
```vue
|
|
184
|
-
<template>
|
|
185
|
-
<ExMulti :chartData="chartData" style="height: 400px;" />
|
|
186
|
-
</template>
|
|
187
|
-
|
|
188
|
-
<script>
|
|
189
|
-
export default {
|
|
190
|
-
data() {
|
|
191
|
-
return {
|
|
192
|
-
chartData: [
|
|
193
|
-
{
|
|
194
|
-
label: '入户量',
|
|
195
|
-
unit: '户',
|
|
196
|
-
type: 'bar',
|
|
197
|
-
data: [
|
|
198
|
-
{ label: '01月', value: 980 },
|
|
199
|
-
{ label: '02月', value: 806 },
|
|
200
|
-
{ label: '03月', value: 930 },
|
|
201
|
-
{ label: '04月', value: 804 },
|
|
202
|
-
{ label: '05月', value: 750 },
|
|
203
|
-
{ label: '06月', value: 660 }
|
|
204
|
-
]
|
|
205
|
-
},
|
|
206
|
-
{
|
|
207
|
-
label: '隐患量',
|
|
208
|
-
unit: '个',
|
|
209
|
-
type: 'line',
|
|
210
|
-
data: [
|
|
211
|
-
{ label: '01月', value: 200 },
|
|
212
|
-
{ label: '02月', value: 120 },
|
|
213
|
-
{ label: '03月', value: 110 },
|
|
214
|
-
{ label: '04月', value: 109 },
|
|
215
|
-
{ label: '05月', value: 108 },
|
|
216
|
-
{ label: '06月', value: 150 }
|
|
217
|
-
]
|
|
218
|
-
}
|
|
219
|
-
]
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
</script>
|
|
224
|
-
```
|
|
225
|
-
:::
|
|
226
|
-
|
|
227
|
-
### 属性说明
|
|
228
|
-
|
|
229
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
230
|
-
|------|------|--------|------|
|
|
231
|
-
| `chartData` | Array | 默认示例数据 | 多系列数据,每项外层包含 `label`、`unit`、`type`、`data[]`,内层每项包含 `label`、`value` |
|
|
232
|
-
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义字段映射(外层/内层均生效) |
|
|
233
|
-
| `isDark` | Boolean | false | 是否暗色模式(文字标线为白色) |
|
|
234
|
-
| `colors` | Array | [] | 自定义系列颜色数组 |
|
|
235
|
-
| `energyType` | String / Array | '' | 预留字段,用于扩展类型/单位 |
|
|
236
|
-
| `config` | Object | `{ interval: 0, rotate: 0, gridbottom: 40, isShowthreshold: false }` | 高级配置:`rotate`(X轴标签旋转角度)、`gridbottom`(底部留白) |
|
|
237
|
-
| `simpleMode` | Boolean | false | 是否开启极简模式 |
|
|
238
|
-
| `highlightKey` | String | - | 高亮字段键 |
|
|
239
|
-
|
|
240
|
-
### chartData 结构说明
|
|
241
|
-
|
|
242
|
-
```js
|
|
243
|
-
[
|
|
244
|
-
{
|
|
245
|
-
label: '系列名称', // series 名称(映射 fieldKeys.label)
|
|
246
|
-
unit: '单位', // series 单位,用于分组生成 Y 轴(去重)
|
|
247
|
-
type: 'bar', // 'bar' 或 'line',不填默认 bar
|
|
248
|
-
data: [ // 数据点(映射 fieldKeys.data)
|
|
249
|
-
{ label: '01月', value: 980 } // 内层映射 fieldKeys.label / fieldKeys.value
|
|
250
|
-
]
|
|
251
|
-
}
|
|
252
|
-
]
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
---
|
|
256
|
-
|
|
257
|
-
## ExChart 统一入口
|
|
258
|
-
|
|
259
|
-
`ExChart` 是一个聚合组件,通过 `type` 属性动态选择使用哪个子组件。
|
|
260
|
-
|
|
261
|
-
```vue
|
|
262
|
-
<ExChart type="bar" :chartData="chartData" />
|
|
263
|
-
<ExChart type="line" :chartData="chartData" :isArea="true" />
|
|
264
|
-
<ExChart type="pie" :chartData="chartData" />
|
|
265
|
-
<ExChart type="multi" :chartData="chartData" />
|
|
266
|
-
```
|
|
267
|
-
|
|
268
|
-
| 属性 | 类型 | 默认值 | 说明 |
|
|
269
|
-
|------|------|--------|------|
|
|
270
|
-
| `type` | String | bar | 图表类型:`bar`、`line`、`pie`、`multi` |
|
|
271
|
-
|
|
272
|
-
> 其余属性直接透传给子组件,详见各子组件的属性说明。
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## 极简模式 (simpleMode)
|
|
277
|
-
|
|
278
|
-
极简模式隐藏图例、坐标轴、网格线等装饰元素,仅保留核心数据曲线/柱形,适用于 Dashboard 密集卡片展示场景。
|
|
279
|
-
|
|
280
|
-
::: demo 极简模式示例
|
|
281
|
-
```vue
|
|
282
|
-
<template>
|
|
283
|
-
<ExBar :chart-data="chartData" simple-mode style="height: 200px;" />
|
|
284
|
-
</template>
|
|
285
|
-
|
|
286
|
-
<script>
|
|
287
|
-
export default {
|
|
288
|
-
data() {
|
|
289
|
-
return {
|
|
290
|
-
chartData: [
|
|
291
|
-
{ label: '00:00', value: 53 },
|
|
292
|
-
{ label: '02:00', value: 48 },
|
|
293
|
-
{ label: '04:00', value: 42 },
|
|
294
|
-
{ label: '06:00', value: 55 },
|
|
295
|
-
{ label: '08:00', value: 78 },
|
|
296
|
-
{ label: '10:00', value: 89 },
|
|
297
|
-
{ label: '12:00', value: 95 },
|
|
298
|
-
{ label: '14:00', value: 88 },
|
|
299
|
-
{ label: '16:00', value: 76 },
|
|
300
|
-
{ label: '18:00', value: 65 },
|
|
301
|
-
{ label: '20:00', value: 58 },
|
|
302
|
-
{ label: '22:00', value: 52 }
|
|
303
|
-
]
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
</script>
|
|
308
|
-
```
|
|
309
|
-
:::
|
|
310
|
-
|
|
311
|
-
---
|
|
312
|
-
|
|
313
|
-
## 主题示例
|
|
314
|
-
|
|
315
|
-
::: demo 不同主题样式展示
|
|
316
|
-
```vue
|
|
317
|
-
<template>
|
|
318
|
-
<div style="display: flex; gap: 16px; flex-wrap: wrap;">
|
|
319
|
-
<div style="width: 300px; height: 200px;">
|
|
320
|
-
<ExBar :chartData="chartData" theme="white" style="height: 200px;" />
|
|
321
|
-
</div>
|
|
322
|
-
<div style="width: 300px; height: 200px;">
|
|
323
|
-
<ExBar :chartData="chartData" theme="dark" style="height: 200px;" />
|
|
324
|
-
</div>
|
|
325
|
-
<div style="width: 300px; height: 200px;">
|
|
326
|
-
<ExBar :chartData="chartData" theme="blue" style="height: 200px;" />
|
|
327
|
-
</div>
|
|
328
|
-
<div style="width: 300px; height: 200px;">
|
|
329
|
-
<ExBar :chartData="chartData" theme="orange" style="height: 200px;" />
|
|
330
|
-
</div>
|
|
331
|
-
<div style="width: 300px; height: 200px;">
|
|
332
|
-
<ExBar :chartData="chartData" theme="starry" style="height: 200px;" />
|
|
333
|
-
</div>
|
|
334
|
-
</div>
|
|
335
|
-
</template>
|
|
336
|
-
|
|
337
|
-
<script>
|
|
338
|
-
export default {
|
|
339
|
-
data() {
|
|
340
|
-
return {
|
|
341
|
-
chartData: [
|
|
342
|
-
{ label: '产品A', value: 1250 },
|
|
343
|
-
{ label: '产品B', value: 980 },
|
|
344
|
-
{ label: '产品C', value: 820 },
|
|
345
|
-
{ label: '产品D', value: 750 }
|
|
346
|
-
]
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
</script>
|
|
351
|
-
```
|
|
352
|
-
:::
|
|
353
|
-
|
|
354
|
-
### 主题列表
|
|
355
|
-
|
|
356
|
-
| 主题名称 | 说明 |
|
|
357
|
-
|----------|------|
|
|
358
|
-
| `white` | 白色主题(默认) |
|
|
359
|
-
| `dark` | 暗色主题(深色背景,建议容器设深色) |
|
|
360
|
-
| `blue` | 蓝色主题 |
|
|
361
|
-
| `orange` | 橙色主题 |
|
|
362
|
-
| `starry` | 星空主题 |
|
|
363
|
-
|
|
364
|
-
---
|
|
365
|
-
|
|
366
|
-
## 动态数据
|
|
367
|
-
|
|
368
|
-
::: demo 动态更新图表数据
|
|
369
|
-
```vue
|
|
370
|
-
<template>
|
|
371
|
-
<div>
|
|
372
|
-
<ExLine :chartData="chartData" :isArea="true" style="height: 400px;" />
|
|
373
|
-
<button @click="updateData" style="margin-top: 16px; padding: 8px 16px;">更新数据</button>
|
|
374
|
-
</div>
|
|
375
|
-
</template>
|
|
376
|
-
|
|
377
|
-
<script>
|
|
378
|
-
export default {
|
|
379
|
-
data() {
|
|
380
|
-
return {
|
|
381
|
-
chartData: [
|
|
382
|
-
{ label: '1月', value: 50 },
|
|
383
|
-
{ label: '2月', value: 60 },
|
|
384
|
-
{ label: '3月', value: 70 },
|
|
385
|
-
{ label: '4月', value: 80 }
|
|
386
|
-
]
|
|
387
|
-
}
|
|
388
|
-
},
|
|
389
|
-
methods: {
|
|
390
|
-
updateData() {
|
|
391
|
-
this.chartData = [
|
|
392
|
-
{ label: '1月', value: 55 },
|
|
393
|
-
{ label: '2月', value: 75 },
|
|
394
|
-
{ label: '3月', value: 65 },
|
|
395
|
-
{ label: '4月', value: 90 }
|
|
396
|
-
]
|
|
397
|
-
}
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
</script>
|
|
401
|
-
```
|
|
402
|
-
:::
|
|
403
|
-
|
|
404
|
-
---
|
|
405
|
-
|
|
406
|
-
## 使用自定义字段映射
|
|
407
|
-
|
|
408
|
-
当后端返回数据字段与组件默认字段(`label` / `value` / `data`)不一致时,使用 `fieldKeys` 做一次映射即可,无需在前端转换数据。
|
|
409
|
-
|
|
410
|
-
::: demo 自定义字段映射示例
|
|
411
|
-
```vue
|
|
412
|
-
<template>
|
|
413
|
-
<ExBar
|
|
414
|
-
:chartData="chartData"
|
|
415
|
-
:fieldKeys="{ label: 'areaName', value: 'sales' }"
|
|
416
|
-
style="height: 400px;"
|
|
417
|
-
/>
|
|
418
|
-
</template>
|
|
419
|
-
|
|
420
|
-
<script>
|
|
421
|
-
export default {
|
|
422
|
-
data() {
|
|
423
|
-
return {
|
|
424
|
-
// 后端返回的数据字段不是 label/value
|
|
425
|
-
chartData: [
|
|
426
|
-
{ areaName: '华东区', sales: 1250 },
|
|
427
|
-
{ areaName: '华南区', sales: 980 },
|
|
428
|
-
{ areaName: '华北区', sales: 890 },
|
|
429
|
-
{ areaName: '西南区', sales: 720 }
|
|
430
|
-
]
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
}
|
|
434
|
-
</script>
|
|
435
|
-
```
|
|
436
|
-
:::
|
|
437
|
-
|
|
438
|
-
多系列组合图的双层嵌套场景:
|
|
439
|
-
|
|
440
|
-
```vue
|
|
441
|
-
<ExMulti
|
|
442
|
-
:chartData="chartData"
|
|
443
|
-
:fieldKeys="{ label: 'title', value: 'num', data: 'points' }"
|
|
444
|
-
/>
|
|
445
|
-
<!--
|
|
446
|
-
chartData 结构:
|
|
447
|
-
[
|
|
448
|
-
{ title: '入户量', unit: '户', points: [{ month: '01月', num: 980 }] }
|
|
449
|
-
]
|
|
450
|
-
-->
|
|
451
|
-
```
|
|
452
|
-
|
|
453
|
-
---
|
|
454
|
-
|
|
455
|
-
## 注意事项
|
|
456
|
-
|
|
457
|
-
1. **依赖安装**:使用前必须安装 `echarts` 依赖
|
|
458
|
-
2. **容器尺寸**:确保图表容器有明确的高度(如 `style="height: 400px;"`),否则图表可能无法显示
|
|
459
|
-
3. **数据格式**:
|
|
460
|
-
- `ExBar` / `ExLine` / `ExPie`:扁平数组,每项需包含可映射为 `label` 与 `value` 的字段
|
|
461
|
-
- `ExMulti`:双层嵌套数组,外层需包含 `label`、`unit`、`type`、`data[]`,内层需包含 `label` 与 `value`
|
|
462
|
-
4. **Y轴去重**(ExMulti):自动按外层 `unit` 去重合并生成 Y 轴,相同 unit 的 series 会共用同一条 Y 轴
|
|
463
|
-
5. **fieldKeys 合并**:仅需配置与默认值不同的字段即可,未配置的字段会使用默认值 `{ label: 'label', value: 'value', data: 'data' }`
|
|
1
|
+
## ExChart 图表组件
|
|
2
|
+
|
|
3
|
+
图表组件基于 ECharts 封装,支持多种图表类型和主题样式。**使用前需自行安装 ECharts 依赖**。
|
|
4
|
+
|
|
5
|
+
## 安装依赖
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install echarts --save
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 基础用法
|
|
12
|
+
|
|
13
|
+
图表组件包含五个独立子组件:`ExBar`(柱状图)、`ExLine`(折线图)、`ExPie`(饼图)、`ExMulti`(多系列组合图),以及统一入口组件 `ExChart`(通过 `type` 动态切换图表类型)。所有子组件支持通过 `fieldKeys` 自定义 chartData 中的字段映射。
|
|
14
|
+
|
|
15
|
+
## 全局通用属性
|
|
16
|
+
|
|
17
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
18
|
+
|------|------|--------|------|
|
|
19
|
+
| `theme` | String / Object | - | 主题名称:`white`、`dark` 或自定义主题对象 |
|
|
20
|
+
| `size` | String | medium | 字体大小:`small`、`medium`、`large` |
|
|
21
|
+
| `chartData` | Array | 见各组件默认示例 | 图表数据数组 |
|
|
22
|
+
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义 chartData 中字段名的映射,详见下方「自定义字段映射」 |
|
|
23
|
+
| `simpleMode` | Boolean | false | 是否开启极简模式(隐藏图例、坐标轴等装饰元素) |
|
|
24
|
+
|
|
25
|
+
### 自定义字段映射 (fieldKeys)
|
|
26
|
+
|
|
27
|
+
组件默认从 chartData 中读取 `label`、`value`、`data` 字段。如果后端返回的数据字段名不同,可通过 `fieldKeys` 映射。
|
|
28
|
+
|
|
29
|
+
```js
|
|
30
|
+
// 例如后端返回 { date: '01月', count: 980 }
|
|
31
|
+
fieldKeys: { label: 'date', value: 'count' }
|
|
32
|
+
|
|
33
|
+
// ExMulti 两层嵌套数据可同时配置外层与内层字段
|
|
34
|
+
// 外层: { title: '入户量', points: [...] }
|
|
35
|
+
// 内层: { month: '01月', num: 980 }
|
|
36
|
+
fieldKeys: { label: 'title', value: 'num', data: 'points' }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## ExBar 柱状图
|
|
42
|
+
|
|
43
|
+
::: demo 基础柱状图
|
|
44
|
+
```vue
|
|
45
|
+
<template>
|
|
46
|
+
<ExBar :chartData="chartData" style="height: 400px;" />
|
|
47
|
+
</template>
|
|
48
|
+
|
|
49
|
+
<script>
|
|
50
|
+
export default {
|
|
51
|
+
data() {
|
|
52
|
+
return {
|
|
53
|
+
chartData: [
|
|
54
|
+
{ label: '华东区', value: 1250 },
|
|
55
|
+
{ label: '华南区', value: 980 },
|
|
56
|
+
{ label: '华北区', value: 890 },
|
|
57
|
+
{ label: '西南区', value: 720 },
|
|
58
|
+
{ label: '西北区', value: 560 }
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
</script>
|
|
64
|
+
```
|
|
65
|
+
:::
|
|
66
|
+
|
|
67
|
+
### 属性说明
|
|
68
|
+
|
|
69
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
70
|
+
|------|------|--------|------|
|
|
71
|
+
| `chartData` | Array | 默认示例数据 | 图表数据数组,每项包含 `label`(标签)和 `value`(数值) |
|
|
72
|
+
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义字段映射 |
|
|
73
|
+
| `markPoint` | Boolean | false | 是否显示标记点(最大值、最小值) |
|
|
74
|
+
| `unit` | String | '' | Y轴单位名称 |
|
|
75
|
+
| `showZoom` | Boolean | false | 是否显示底部缩放滑动条 |
|
|
76
|
+
| `reverse` | Boolean | false | 是否反转坐标轴(纵向柱 → 横向柱) |
|
|
77
|
+
| `longLable` | Boolean | false | 是否启用长标签换行模式 |
|
|
78
|
+
| `longLableSplitNum` | Number | 1 | 长标签每隔几个字符换行一次 |
|
|
79
|
+
| `longLablePx` | Number | 150 | 长标签模式下左侧/底部预留空间 |
|
|
80
|
+
| `splitNumber` | Number | 5 | Y轴分割数量 |
|
|
81
|
+
| `simpleMode` | Boolean | false | 是否开启极简模式 |
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
## ExLine 折线图
|
|
86
|
+
|
|
87
|
+
::: demo 基础折线图,支持面积区域显示
|
|
88
|
+
```vue
|
|
89
|
+
<template>
|
|
90
|
+
<ExLine :chartData="chartData" :isArea="true" style="height: 400px;" />
|
|
91
|
+
</template>
|
|
92
|
+
|
|
93
|
+
<script>
|
|
94
|
+
export default {
|
|
95
|
+
data() {
|
|
96
|
+
return {
|
|
97
|
+
chartData: [
|
|
98
|
+
{ label: '1月', value: 2450 },
|
|
99
|
+
{ label: '2月', value: 2800 },
|
|
100
|
+
{ label: '3月', value: 3200 },
|
|
101
|
+
{ label: '4月', value: 2950 },
|
|
102
|
+
{ label: '5月', value: 3500 },
|
|
103
|
+
{ label: '6月', value: 3800 },
|
|
104
|
+
{ label: '7月', value: 4200 },
|
|
105
|
+
{ label: '8月', value: 4500 },
|
|
106
|
+
{ label: '9月', value: 4100 },
|
|
107
|
+
{ label: '10月', value: 3800 },
|
|
108
|
+
{ label: '11月', value: 4600 },
|
|
109
|
+
{ label: '12月', value: 5200 }
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
</script>
|
|
115
|
+
```
|
|
116
|
+
:::
|
|
117
|
+
|
|
118
|
+
### 属性说明
|
|
119
|
+
|
|
120
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
121
|
+
|------|------|--------|------|
|
|
122
|
+
| `chartData` | Array | 默认示例数据 | 图表数据数组,每项包含 `label` 和 `value` |
|
|
123
|
+
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义字段映射 |
|
|
124
|
+
| `isArea` | Boolean | false | 是否显示面积区域填充 |
|
|
125
|
+
| `unit` | String | '' | Y轴单位名称 |
|
|
126
|
+
| `intervalvalue` | Number | 0 | X轴标签显示间隔(0表示全部显示) |
|
|
127
|
+
| `simpleMode` | Boolean | false | 是否开启极简模式 |
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## ExPie 饼图
|
|
132
|
+
|
|
133
|
+
::: demo 基础饼图,显示总数标题
|
|
134
|
+
```vue
|
|
135
|
+
<template>
|
|
136
|
+
<ExPie :chartData="chartData" style="height: 400px;" />
|
|
137
|
+
</template>
|
|
138
|
+
|
|
139
|
+
<script>
|
|
140
|
+
export default {
|
|
141
|
+
data() {
|
|
142
|
+
return {
|
|
143
|
+
chartData: [
|
|
144
|
+
{ label: '手机端', value: 4520 },
|
|
145
|
+
{ label: 'PC端', value: 3280 },
|
|
146
|
+
{ label: '平板端', value: 1250 },
|
|
147
|
+
{ label: '小程序', value: 2150 },
|
|
148
|
+
{ label: 'H5页面', value: 1800 }
|
|
149
|
+
]
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
</script>
|
|
154
|
+
```
|
|
155
|
+
:::
|
|
156
|
+
|
|
157
|
+
### 属性说明
|
|
158
|
+
|
|
159
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
160
|
+
|------|------|--------|------|
|
|
161
|
+
| `chartData` | Array | 默认示例数据 | 图表数据数组,每项包含 `label` 和 `value` |
|
|
162
|
+
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义字段映射 |
|
|
163
|
+
| `colors` | Array | [] | 自定义饼图颜色数组 |
|
|
164
|
+
| `unit` | String | '' | 数值单位(悬停提示时使用) |
|
|
165
|
+
| `showLegend` | Boolean | true | 是否显示图例 |
|
|
166
|
+
| `roseType` | String | '' | 玫瑰图类型,`'radius'`、`'area'` 等 |
|
|
167
|
+
| `showLabel` | Boolean | true | 是否显示饼图扇区标签及引线 |
|
|
168
|
+
| `totalLabel` | String | '总数' | 饼图中心显示的汇总标题文字 |
|
|
169
|
+
| `simpleMode` | Boolean | false | 是否开启极简模式 |
|
|
170
|
+
| `highlightKey` | String | - | 高亮字段键(用于指定高亮的扇区标识) |
|
|
171
|
+
|
|
172
|
+
### 计算说明
|
|
173
|
+
|
|
174
|
+
- `总数`:饼图中心会自动显示图表中心标题,格式为 `{totalLabel}:{value 之和}`。
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
## ExMulti 多系列组合图
|
|
179
|
+
|
|
180
|
+
多系列组合图,支持多个 series 共存(柱/线任意混合),根据不同 `unit` 自动生成多条 Y 轴。
|
|
181
|
+
|
|
182
|
+
::: demo 多系列数据示例
|
|
183
|
+
```vue
|
|
184
|
+
<template>
|
|
185
|
+
<ExMulti :chartData="chartData" style="height: 400px;" />
|
|
186
|
+
</template>
|
|
187
|
+
|
|
188
|
+
<script>
|
|
189
|
+
export default {
|
|
190
|
+
data() {
|
|
191
|
+
return {
|
|
192
|
+
chartData: [
|
|
193
|
+
{
|
|
194
|
+
label: '入户量',
|
|
195
|
+
unit: '户',
|
|
196
|
+
type: 'bar',
|
|
197
|
+
data: [
|
|
198
|
+
{ label: '01月', value: 980 },
|
|
199
|
+
{ label: '02月', value: 806 },
|
|
200
|
+
{ label: '03月', value: 930 },
|
|
201
|
+
{ label: '04月', value: 804 },
|
|
202
|
+
{ label: '05月', value: 750 },
|
|
203
|
+
{ label: '06月', value: 660 }
|
|
204
|
+
]
|
|
205
|
+
},
|
|
206
|
+
{
|
|
207
|
+
label: '隐患量',
|
|
208
|
+
unit: '个',
|
|
209
|
+
type: 'line',
|
|
210
|
+
data: [
|
|
211
|
+
{ label: '01月', value: 200 },
|
|
212
|
+
{ label: '02月', value: 120 },
|
|
213
|
+
{ label: '03月', value: 110 },
|
|
214
|
+
{ label: '04月', value: 109 },
|
|
215
|
+
{ label: '05月', value: 108 },
|
|
216
|
+
{ label: '06月', value: 150 }
|
|
217
|
+
]
|
|
218
|
+
}
|
|
219
|
+
]
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
</script>
|
|
224
|
+
```
|
|
225
|
+
:::
|
|
226
|
+
|
|
227
|
+
### 属性说明
|
|
228
|
+
|
|
229
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
230
|
+
|------|------|--------|------|
|
|
231
|
+
| `chartData` | Array | 默认示例数据 | 多系列数据,每项外层包含 `label`、`unit`、`type`、`data[]`,内层每项包含 `label`、`value` |
|
|
232
|
+
| `fieldKeys` | Object | `{ label: 'label', value: 'value', data: 'data' }` | 自定义字段映射(外层/内层均生效) |
|
|
233
|
+
| `isDark` | Boolean | false | 是否暗色模式(文字标线为白色) |
|
|
234
|
+
| `colors` | Array | [] | 自定义系列颜色数组 |
|
|
235
|
+
| `energyType` | String / Array | '' | 预留字段,用于扩展类型/单位 |
|
|
236
|
+
| `config` | Object | `{ interval: 0, rotate: 0, gridbottom: 40, isShowthreshold: false }` | 高级配置:`rotate`(X轴标签旋转角度)、`gridbottom`(底部留白) |
|
|
237
|
+
| `simpleMode` | Boolean | false | 是否开启极简模式 |
|
|
238
|
+
| `highlightKey` | String | - | 高亮字段键 |
|
|
239
|
+
|
|
240
|
+
### chartData 结构说明
|
|
241
|
+
|
|
242
|
+
```js
|
|
243
|
+
[
|
|
244
|
+
{
|
|
245
|
+
label: '系列名称', // series 名称(映射 fieldKeys.label)
|
|
246
|
+
unit: '单位', // series 单位,用于分组生成 Y 轴(去重)
|
|
247
|
+
type: 'bar', // 'bar' 或 'line',不填默认 bar
|
|
248
|
+
data: [ // 数据点(映射 fieldKeys.data)
|
|
249
|
+
{ label: '01月', value: 980 } // 内层映射 fieldKeys.label / fieldKeys.value
|
|
250
|
+
]
|
|
251
|
+
}
|
|
252
|
+
]
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## ExChart 统一入口
|
|
258
|
+
|
|
259
|
+
`ExChart` 是一个聚合组件,通过 `type` 属性动态选择使用哪个子组件。
|
|
260
|
+
|
|
261
|
+
```vue
|
|
262
|
+
<ExChart type="bar" :chartData="chartData" />
|
|
263
|
+
<ExChart type="line" :chartData="chartData" :isArea="true" />
|
|
264
|
+
<ExChart type="pie" :chartData="chartData" />
|
|
265
|
+
<ExChart type="multi" :chartData="chartData" />
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
| 属性 | 类型 | 默认值 | 说明 |
|
|
269
|
+
|------|------|--------|------|
|
|
270
|
+
| `type` | String | bar | 图表类型:`bar`、`line`、`pie`、`multi` |
|
|
271
|
+
|
|
272
|
+
> 其余属性直接透传给子组件,详见各子组件的属性说明。
|
|
273
|
+
|
|
274
|
+
---
|
|
275
|
+
|
|
276
|
+
## 极简模式 (simpleMode)
|
|
277
|
+
|
|
278
|
+
极简模式隐藏图例、坐标轴、网格线等装饰元素,仅保留核心数据曲线/柱形,适用于 Dashboard 密集卡片展示场景。
|
|
279
|
+
|
|
280
|
+
::: demo 极简模式示例
|
|
281
|
+
```vue
|
|
282
|
+
<template>
|
|
283
|
+
<ExBar :chart-data="chartData" simple-mode style="height: 200px;" />
|
|
284
|
+
</template>
|
|
285
|
+
|
|
286
|
+
<script>
|
|
287
|
+
export default {
|
|
288
|
+
data() {
|
|
289
|
+
return {
|
|
290
|
+
chartData: [
|
|
291
|
+
{ label: '00:00', value: 53 },
|
|
292
|
+
{ label: '02:00', value: 48 },
|
|
293
|
+
{ label: '04:00', value: 42 },
|
|
294
|
+
{ label: '06:00', value: 55 },
|
|
295
|
+
{ label: '08:00', value: 78 },
|
|
296
|
+
{ label: '10:00', value: 89 },
|
|
297
|
+
{ label: '12:00', value: 95 },
|
|
298
|
+
{ label: '14:00', value: 88 },
|
|
299
|
+
{ label: '16:00', value: 76 },
|
|
300
|
+
{ label: '18:00', value: 65 },
|
|
301
|
+
{ label: '20:00', value: 58 },
|
|
302
|
+
{ label: '22:00', value: 52 }
|
|
303
|
+
]
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
</script>
|
|
308
|
+
```
|
|
309
|
+
:::
|
|
310
|
+
|
|
311
|
+
---
|
|
312
|
+
|
|
313
|
+
## 主题示例
|
|
314
|
+
|
|
315
|
+
::: demo 不同主题样式展示
|
|
316
|
+
```vue
|
|
317
|
+
<template>
|
|
318
|
+
<div style="display: flex; gap: 16px; flex-wrap: wrap;">
|
|
319
|
+
<div style="width: 300px; height: 200px;">
|
|
320
|
+
<ExBar :chartData="chartData" theme="white" style="height: 200px;" />
|
|
321
|
+
</div>
|
|
322
|
+
<div style="width: 300px; height: 200px;">
|
|
323
|
+
<ExBar :chartData="chartData" theme="dark" style="height: 200px;" />
|
|
324
|
+
</div>
|
|
325
|
+
<div style="width: 300px; height: 200px;">
|
|
326
|
+
<ExBar :chartData="chartData" theme="blue" style="height: 200px;" />
|
|
327
|
+
</div>
|
|
328
|
+
<div style="width: 300px; height: 200px;">
|
|
329
|
+
<ExBar :chartData="chartData" theme="orange" style="height: 200px;" />
|
|
330
|
+
</div>
|
|
331
|
+
<div style="width: 300px; height: 200px;">
|
|
332
|
+
<ExBar :chartData="chartData" theme="starry" style="height: 200px;" />
|
|
333
|
+
</div>
|
|
334
|
+
</div>
|
|
335
|
+
</template>
|
|
336
|
+
|
|
337
|
+
<script>
|
|
338
|
+
export default {
|
|
339
|
+
data() {
|
|
340
|
+
return {
|
|
341
|
+
chartData: [
|
|
342
|
+
{ label: '产品A', value: 1250 },
|
|
343
|
+
{ label: '产品B', value: 980 },
|
|
344
|
+
{ label: '产品C', value: 820 },
|
|
345
|
+
{ label: '产品D', value: 750 }
|
|
346
|
+
]
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
</script>
|
|
351
|
+
```
|
|
352
|
+
:::
|
|
353
|
+
|
|
354
|
+
### 主题列表
|
|
355
|
+
|
|
356
|
+
| 主题名称 | 说明 |
|
|
357
|
+
|----------|------|
|
|
358
|
+
| `white` | 白色主题(默认) |
|
|
359
|
+
| `dark` | 暗色主题(深色背景,建议容器设深色) |
|
|
360
|
+
| `blue` | 蓝色主题 |
|
|
361
|
+
| `orange` | 橙色主题 |
|
|
362
|
+
| `starry` | 星空主题 |
|
|
363
|
+
|
|
364
|
+
---
|
|
365
|
+
|
|
366
|
+
## 动态数据
|
|
367
|
+
|
|
368
|
+
::: demo 动态更新图表数据
|
|
369
|
+
```vue
|
|
370
|
+
<template>
|
|
371
|
+
<div>
|
|
372
|
+
<ExLine :chartData="chartData" :isArea="true" style="height: 400px;" />
|
|
373
|
+
<button @click="updateData" style="margin-top: 16px; padding: 8px 16px;">更新数据</button>
|
|
374
|
+
</div>
|
|
375
|
+
</template>
|
|
376
|
+
|
|
377
|
+
<script>
|
|
378
|
+
export default {
|
|
379
|
+
data() {
|
|
380
|
+
return {
|
|
381
|
+
chartData: [
|
|
382
|
+
{ label: '1月', value: 50 },
|
|
383
|
+
{ label: '2月', value: 60 },
|
|
384
|
+
{ label: '3月', value: 70 },
|
|
385
|
+
{ label: '4月', value: 80 }
|
|
386
|
+
]
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
methods: {
|
|
390
|
+
updateData() {
|
|
391
|
+
this.chartData = [
|
|
392
|
+
{ label: '1月', value: 55 },
|
|
393
|
+
{ label: '2月', value: 75 },
|
|
394
|
+
{ label: '3月', value: 65 },
|
|
395
|
+
{ label: '4月', value: 90 }
|
|
396
|
+
]
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
</script>
|
|
401
|
+
```
|
|
402
|
+
:::
|
|
403
|
+
|
|
404
|
+
---
|
|
405
|
+
|
|
406
|
+
## 使用自定义字段映射
|
|
407
|
+
|
|
408
|
+
当后端返回数据字段与组件默认字段(`label` / `value` / `data`)不一致时,使用 `fieldKeys` 做一次映射即可,无需在前端转换数据。
|
|
409
|
+
|
|
410
|
+
::: demo 自定义字段映射示例
|
|
411
|
+
```vue
|
|
412
|
+
<template>
|
|
413
|
+
<ExBar
|
|
414
|
+
:chartData="chartData"
|
|
415
|
+
:fieldKeys="{ label: 'areaName', value: 'sales' }"
|
|
416
|
+
style="height: 400px;"
|
|
417
|
+
/>
|
|
418
|
+
</template>
|
|
419
|
+
|
|
420
|
+
<script>
|
|
421
|
+
export default {
|
|
422
|
+
data() {
|
|
423
|
+
return {
|
|
424
|
+
// 后端返回的数据字段不是 label/value
|
|
425
|
+
chartData: [
|
|
426
|
+
{ areaName: '华东区', sales: 1250 },
|
|
427
|
+
{ areaName: '华南区', sales: 980 },
|
|
428
|
+
{ areaName: '华北区', sales: 890 },
|
|
429
|
+
{ areaName: '西南区', sales: 720 }
|
|
430
|
+
]
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
}
|
|
434
|
+
</script>
|
|
435
|
+
```
|
|
436
|
+
:::
|
|
437
|
+
|
|
438
|
+
多系列组合图的双层嵌套场景:
|
|
439
|
+
|
|
440
|
+
```vue
|
|
441
|
+
<ExMulti
|
|
442
|
+
:chartData="chartData"
|
|
443
|
+
:fieldKeys="{ label: 'title', value: 'num', data: 'points' }"
|
|
444
|
+
/>
|
|
445
|
+
<!--
|
|
446
|
+
chartData 结构:
|
|
447
|
+
[
|
|
448
|
+
{ title: '入户量', unit: '户', points: [{ month: '01月', num: 980 }] }
|
|
449
|
+
]
|
|
450
|
+
-->
|
|
451
|
+
```
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## 注意事项
|
|
456
|
+
|
|
457
|
+
1. **依赖安装**:使用前必须安装 `echarts` 依赖
|
|
458
|
+
2. **容器尺寸**:确保图表容器有明确的高度(如 `style="height: 400px;"`),否则图表可能无法显示
|
|
459
|
+
3. **数据格式**:
|
|
460
|
+
- `ExBar` / `ExLine` / `ExPie`:扁平数组,每项需包含可映射为 `label` 与 `value` 的字段
|
|
461
|
+
- `ExMulti`:双层嵌套数组,外层需包含 `label`、`unit`、`type`、`data[]`,内层需包含 `label` 与 `value`
|
|
462
|
+
4. **Y轴去重**(ExMulti):自动按外层 `unit` 去重合并生成 Y 轴,相同 unit 的 series 会共用同一条 Y 轴
|
|
463
|
+
5. **fieldKeys 合并**:仅需配置与默认值不同的字段即可,未配置的字段会使用默认值 `{ label: 'label', value: 'value', data: 'data' }`
|