@xq-labs/data-ui-v2 0.1.0

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/README.md ADDED
@@ -0,0 +1,141 @@
1
+ # @xq-labs/data-ui-v2
2
+
3
+ 一套面向 Vue 2 项目的业务图表组件库,当前聚焦 `BaseChart`、`BarLineChart`、`PieChart` 三个公开组件,配套 `playground` 示例库、Rollup 发布构建和本地发版脚本。
4
+
5
+ ## 适用环境
6
+
7
+ - Vue 2.6 / 2.7
8
+ - Node 14
9
+ - ECharts 5
10
+ - ECharts GL 2(仅 3D 饼图需要)
11
+
12
+ ## 安装
13
+
14
+ ```bash
15
+ npm install @xq-labs/data-ui-v2
16
+ ```
17
+
18
+ 组件库将 `vue` 与 `echarts` 作为外部依赖。
19
+
20
+ 只使用 2D 图表时不需要安装 echarts-gl;使用 3D 饼图时需要额外安装 echarts-gl。
21
+ 依赖包名为 `echarts-gl`,例如:
22
+
23
+ ```bash
24
+ npm install echarts echarts-gl
25
+ ```
26
+
27
+ ## 整包注册
28
+
29
+ ```js
30
+ import Vue from 'vue'
31
+ import DataUI from '@xq-labs/data-ui-v2'
32
+
33
+ Vue.use(DataUI)
34
+ ```
35
+
36
+ 整包入口会注册以下公开组件:
37
+
38
+ - `BaseChart`
39
+ - `BarLineChart`
40
+ - `PieChart`
41
+
42
+ ## 按需引入
43
+
44
+ ```js
45
+ import Vue from 'vue'
46
+ import { BaseChart, BarLineChart, PieChart } from '@xq-labs/data-ui-v2'
47
+
48
+ Vue.component(BaseChart.name, BaseChart)
49
+ Vue.component(BarLineChart.name, BarLineChart)
50
+ Vue.component(PieChart.name, PieChart)
51
+ ```
52
+
53
+ 如果你的构建链路需要直接引用发布子路径,也可以按 `lib` / `es` 产物接入:
54
+
55
+ ```js
56
+ import BaseChart from '@xq-labs/data-ui-v2/es/base-chart'
57
+ import BarLineChart from '@xq-labs/data-ui-v2/es/bar-line-chart'
58
+ import PieChart from '@xq-labs/data-ui-v2/es/pie-chart'
59
+ ```
60
+
61
+ ## 样式说明
62
+
63
+ - 发布产物默认通过入口文件关联组件样式
64
+ - 如需显式引入样式,可单独引用 `@xq-labs/data-ui-v2/theme-chalk/index.css`
65
+
66
+ ```js
67
+ import '@xq-labs/data-ui-v2/theme-chalk/index.css'
68
+ ```
69
+
70
+ ## 3D 饼图依赖说明
71
+
72
+ 只使用 2D 图表时不需要安装 echarts-gl。
73
+ 使用 3D 饼图时需要额外安装 echarts-gl,依赖包名为 `echarts-gl`,例如:
74
+
75
+ ```bash
76
+ npm install echarts echarts-gl
77
+ ```
78
+
79
+ 当 `PieChart` 使用 `dimension="3d"` 时,组件会在运行时按需加载 `echarts-gl`。
80
+
81
+ ## 组件能力概览
82
+
83
+ ### BaseChart
84
+
85
+ - 提供 ECharts 实例创建、销毁、尺寸监听与空态处理
86
+ - 作为其他图表组件的通用基础壳
87
+
88
+ ### BarLineChart
89
+
90
+ - 支持基础柱线组合
91
+ - 支持圆柱、方柱、堆叠、双轴、颜色预设与自定义配置
92
+ - 对齐 `playground` 中的正式案例与实验室案例
93
+
94
+ ### PieChart
95
+
96
+ - 支持 2D 饼图、环图、南丁格尔图
97
+ - 支持 3D 饼图、环图、按值映射高度等能力
98
+ - 支持标签、引导线和 `customOption` 扩展
99
+
100
+ ## 示例与文档
101
+
102
+ - API 总览:`docs/api/overview.md`
103
+ - 可运行示例:`playground`
104
+ - 示例说明:`docs/examples/pie-chart.md`
105
+ - 示例说明:`docs/examples/bar-line-chart.md`
106
+ - npm 包内离线文档:`node_modules/@xq-labs/data-ui-v2/docs/api/overview.md`
107
+ - npm 包内示例说明:`node_modules/@xq-labs/data-ui-v2/docs/examples/*.md`
108
+
109
+ ## 常用命令
110
+
111
+ ```bash
112
+ # 启动 playground
113
+ npm run serve
114
+
115
+ # 单元测试
116
+ npm run test:unit
117
+
118
+ # 代码检查
119
+ npm run lint
120
+
121
+ # 代码格式检查
122
+ npm run format:check
123
+
124
+ # 构建发布产物
125
+ npm run build
126
+
127
+ # 检查 .release 发包内容
128
+ npm run pack:check
129
+
130
+ # 本地发版流程
131
+ npm run release
132
+ ```
133
+
134
+ ## 发布说明
135
+
136
+ - `vue-cli` 负责本地开发和单元测试
137
+ - `rollup` 负责正式发布构建
138
+ - 发布产物统一归档到 `.release/`
139
+ - npm 包默认不包含 dist 目录下的 UMD 产物
140
+ - `dist` 会继续构建,供独立制品分发或浏览器直引场景使用
141
+ - 发版前要求工作区干净,发包成功后再执行 release commit、tag 和 push
@@ -0,0 +1,571 @@
1
+ # 组件库 API 总览
2
+
3
+ > 这份文档是当前组件库面向使用方的统一入口。
4
+ > 如果你只想先知道“怎么装、怎么注册、有哪些组件、每个组件怎么传参”,先看这里。
5
+
6
+ > 发包后,如果你希望在本地离线查看文档,可以直接打开
7
+ > `node_modules/@xq-labs/data-ui-v2/docs/api/overview.md`,
8
+ > 示例说明位于 `node_modules/@xq-labs/data-ui-v2/docs/examples/`。
9
+
10
+ ---
11
+
12
+ ## 1. 安装
13
+
14
+ 组件库包名:
15
+
16
+ ```bash
17
+ npm install @xq-labs/data-ui-v2
18
+ ```
19
+
20
+ 宿主项目需要自行安装 `vue` 与 `echarts`。
21
+
22
+ 如果你只使用 2D 图表,不需要安装 `echarts-gl`。
23
+ 如果你要启用 `PieChart` 的 3D 能力,需要额外安装:
24
+
25
+ ```bash
26
+ npm install echarts echarts-gl
27
+ ```
28
+
29
+ ---
30
+
31
+ ## 2. 注册方式
32
+
33
+ ### 2.1 整包注册
34
+
35
+ 适合后台项目快速接入:
36
+
37
+ ```js
38
+ import Vue from 'vue'
39
+ import DataUI from '@xq-labs/data-ui-v2'
40
+
41
+ Vue.use(DataUI)
42
+ ```
43
+
44
+ ### 2.2 按需引入
45
+
46
+ 适合只使用少数组件的业务页面:
47
+
48
+ ```js
49
+ import Vue from 'vue'
50
+ import { BaseChart, BarLineChart, PieChart } from '@xq-labs/data-ui-v2'
51
+
52
+ Vue.component(BaseChart.name, BaseChart)
53
+ Vue.component(BarLineChart.name, BarLineChart)
54
+ Vue.component(PieChart.name, PieChart)
55
+ ```
56
+
57
+ ### 2.3 子路径引入
58
+
59
+ 如果你的工程更偏向显式接入发布产物,可以直接引用 `lib` / `es` 子路径:
60
+
61
+ ```js
62
+ import BaseChart from '@xq-labs/data-ui-v2/es/base-chart'
63
+ import BarLineChart from '@xq-labs/data-ui-v2/es/bar-line-chart'
64
+ import PieChart from '@xq-labs/data-ui-v2/es/pie-chart'
65
+ ```
66
+
67
+ ---
68
+
69
+ ## 3. 样式说明
70
+
71
+ - 默认情况下,整包入口和组件级入口都会关联全量样式。
72
+ - 大多数业务项目 **不需要** 再单独手动引入样式文件。
73
+ - 如果你希望显式控制样式加载,也可以手动引入:
74
+
75
+ ```js
76
+ import '@xq-labs/data-ui-v2/theme-chalk/index.css'
77
+ ```
78
+
79
+ ---
80
+
81
+ ## 4. 组件清单
82
+
83
+ | 组件名 | 作用 | 适用场景 |
84
+ | --- | --- | --- |
85
+ | `BaseChart` | 通用 ECharts 渲染壳 | 已有完整 option,只需要统一渲染、空态、loading |
86
+ | `BarLineChart` | 标准柱线图组件 | 基础柱图、圆柱、方柱、堆叠、双轴、柱线组合 |
87
+ | `PieChart` | 标准饼图组件 | 2D 饼图 / 环图 / 玫瑰图,3D 饼图 / 环图 / 标签引导线 |
88
+
89
+ > 当前公开组件只有 `BaseChart`、`BarLineChart`、`PieChart`。
90
+
91
+ ---
92
+
93
+ ## 5. 版本兼容说明
94
+
95
+ | 项目 | 当前要求 | 说明 |
96
+ | --- | --- | --- |
97
+ | Vue | `^2.6.14 \|\| ^2.7.0` | 组件库面向 Vue 2 项目 |
98
+ | ECharts | `^5.5.0` | 所有图表组件都依赖 |
99
+ | ECharts GL | `^2.0.9` | 仅 `PieChart dimension="3d"` 需要 |
100
+ | Node | `>=14 <15` | 当前仓库开发、构建、测试链路按 Node 14 验证 |
101
+
102
+ 补充说明:
103
+
104
+ - 2D 图表使用方不需要安装 `echarts-gl`。
105
+ - 3D 饼图在运行时会按需加载 `echarts-gl`。
106
+ - 如果启用 3D 但项目未安装 `echarts-gl`,`PieChart` 会进入可读空态,并抛出 `runtime-error` 事件。
107
+
108
+ ---
109
+
110
+ ## 6. `BaseChart` API
111
+
112
+ ### 6.1 组件定位
113
+
114
+ `BaseChart` 是所有业务图表组件的基础渲染壳。
115
+ 如果你的业务侧已经能直接生成 ECharts option,可以直接使用它。
116
+
117
+ ### 6.2 Props
118
+
119
+ | Prop | 类型 | 默认值 | 说明 |
120
+ | --- | --- | --- | --- |
121
+ | `option` | `Object` | `{}` | 已构建完成的 ECharts option |
122
+ | `loading` | `Boolean` | `false` | 是否显示 loading |
123
+ | `empty` | `Boolean` | `false` | 是否显示空态 |
124
+ | `emptyText` | `String` | `'暂无数据'` | 空态文案 |
125
+ | `height` | `String \| Number` | `320` | 容器高度,数字按 px 处理 |
126
+
127
+ ### 6.3 Events
128
+
129
+ | 事件名 | 参数 | 说明 |
130
+ | --- | --- | --- |
131
+ | `ready` | `chart` | ECharts 实例初始化完成 |
132
+ | `chart-click` | `params` | 图表点击事件透出 |
133
+
134
+ ### 6.4 常见场景
135
+
136
+ 1. 你已经有现成的 ECharts option,只需要统一 loading、空态和实例生命周期。
137
+ 2. 你在业务项目里做一个内部定制图表,但仍希望复用统一底层壳。
138
+
139
+ 示例:
140
+
141
+ ```vue
142
+ <BaseChart
143
+ :option="option"
144
+ :loading="loading"
145
+ :empty="!option.series || option.series.length === 0"
146
+ empty-text="暂无可展示数据"
147
+ :height="360"
148
+ />
149
+ ```
150
+
151
+ ---
152
+
153
+ ## 7. `BarLineChart` API
154
+
155
+ ### 7.1 组件定位
156
+
157
+ `BarLineChart` 用于承接大多数柱线组合场景。
158
+ 推荐先通过 `data + xAxisKey + series` 表达业务数据,再用 `variant`、`preset`、`customOption` 做增强。
159
+
160
+ ### 7.2 Props
161
+
162
+ | Prop | 类型 | 默认值 | 说明 |
163
+ | --- | --- | --- | --- |
164
+ | `data` | `Array` | `[]` | 原始业务数据数组 |
165
+ | `xAxisKey` | `String` | `'name'` | 横轴类目字段名 |
166
+ | `series` | `Array` | `[]` | 系列定义数组,推荐包含 `key`、`name`、`kind` |
167
+ | `variant` | `String` | `'flat'` | 图形风格:`flat` / `cylinder` / `cube` |
168
+ | `preset` | `String` | `'compare'` | 预设:`compare` / `trend` / `rank` |
169
+ | `barWidth` | `Number` | `18` | 柱体宽度 |
170
+ | `barGap` | `Number \| String` | `8` | 柱间距 |
171
+ | `customOption` | `Object` | `{}` | 对 ECharts option 的补充覆盖 |
172
+ | `loading` | `Boolean` | `false` | 是否显示 loading |
173
+ | `height` | `String \| Number` | `320` | 容器高度 |
174
+
175
+ ### 7.3 BarLineChart 数据格式
176
+
177
+ `BarLineChart` 的数据通常拆成两部分:
178
+
179
+ 1. `data`:原始业务数据数组。
180
+ 2. `series`:告诉组件“从哪些字段取值、每个字段按什么图形渲染”。
181
+
182
+ 推荐写法:
183
+
184
+ ```js
185
+ const data = [
186
+ {
187
+ month: '1月',
188
+ sales: 120,
189
+ target: 150,
190
+ rate: 0.8
191
+ },
192
+ {
193
+ month: '2月',
194
+ sales: 168,
195
+ target: 180,
196
+ rate: 0.93
197
+ }
198
+ ]
199
+ ```
200
+
201
+ ```js
202
+ const series = [
203
+ {
204
+ key: 'sales',
205
+ name: '销售额',
206
+ kind: 'bar',
207
+ colors: ['#6B98F8']
208
+ },
209
+ {
210
+ key: 'target',
211
+ name: '目标值',
212
+ kind: 'bar',
213
+ colors: ['#A8BEFA', '#6B98F8', '#3EE8FE']
214
+ },
215
+ {
216
+ key: 'rate',
217
+ name: '完成率',
218
+ kind: 'line',
219
+ yAxisIndex: 1,
220
+ colors: ['#FF8A5B']
221
+ }
222
+ ]
223
+ ```
224
+
225
+ 关键规则:
226
+
227
+ - `xAxisKey` 用来告诉组件“哪一个字段是横轴类目”,默认是 `name`。
228
+ - `series[i].key` 必须能在 `data` 的每一项中找到对应字段。
229
+ - `kind` 当前只识别 `bar` / `line`,其他值会回退成 `bar`。
230
+ - `stack` 传字符串时表示堆叠组名;不传或非法值会回退为空字符串。
231
+ - `yAxisIndex` 只接受大于等于 `0` 的整数,非法值会回退到主轴。
232
+
233
+ ### 7.4 `series` 推荐结构
234
+
235
+ ```js
236
+ [
237
+ {
238
+ key: 'sales',
239
+ name: '销售额',
240
+ kind: 'bar',
241
+ colors: ['#6B98F8']
242
+ },
243
+ {
244
+ key: 'rate',
245
+ name: '完成率',
246
+ kind: 'line',
247
+ yAxisIndex: 1
248
+ }
249
+ ]
250
+ ```
251
+
252
+ ### 7.5 `series.colors` 配置规则
253
+
254
+ `series.colors` 是 `BarLineChart` 最重要的配色入口之一,类型要求是 `Array`。
255
+
256
+ 基础规则:
257
+
258
+ - 只接受数组,非数组会被忽略并回退到组件内置色板。
259
+ - 会过滤空值,最多只读取前 `1~3 个色值`。
260
+ - 线图只使用第一个色值。
261
+
262
+ 不同 `variant` 下的含义:
263
+
264
+ #### `flat`
265
+
266
+ - 传 `1` 个色值:自动推导为“顶部 / 主体 / 底部”三段渐变。
267
+ - 传 `2` 个色值:按“顶部 / 主体”解释,底部会基于主体色自动加深。
268
+ - 传 `3` 个色值:按“顶部 / 主体 / 底部”解释。
269
+
270
+ #### `cylinder`
271
+
272
+ - 传 `1` 个色值:作为柱身主色,顶部和底部会自动派生。
273
+ - 传 `2` 个色值:按“顶部 / 柱身”解释,底部会基于柱身色自动加深。
274
+ - 传 `3` 个色值:按“顶部 / 柱身 / 底部”解释。
275
+
276
+ #### `cube`
277
+
278
+ - 传 `1` 个色值:作为主色,左侧面、右侧面会自动派生,顶面使用主色。
279
+ - 传 `2` 个色值:按“左侧面 / 右侧面”解释,顶面自动提亮。
280
+ - 传 `3` 个色值:按“左侧面 / 右侧面 / 顶面”解释。
281
+
282
+ 示例:
283
+
284
+ ```js
285
+ colors: ['#6B98F8']
286
+ colors: ['#A8BEFA', '#6B98F8']
287
+ colors: ['#A8BEFA', '#6B98F8', '#3EE8FE']
288
+ ```
289
+
290
+ ### 7.6 Events
291
+
292
+ | 事件名 | 参数 | 说明 |
293
+ | --- | --- | --- |
294
+ | `ready` | `chart` | 底层 ECharts 实例 |
295
+ | `chart-click` | `params` | 点击图形元素时触发 |
296
+
297
+ ### 7.7 常见场景
298
+
299
+ 1. **基础柱线组合**:销售额 + 完成率双轴。
300
+ 2. **圆柱视觉**:看板类数据强调“柱体感”。
301
+ 3. **方柱视觉**:更偏装饰型、品牌型大屏风格。
302
+ 4. **堆叠柱图**:多个系列共享一组类目。
303
+ 5. **自定义展示细节**:通过 `customOption` 补 tooltip、legend、grid。
304
+
305
+ 推荐查阅:
306
+
307
+ - `docs/examples/bar-line-chart.md`
308
+ - Playground 路由:`/bar-line-chart/basic`
309
+ - Playground 路由:`/bar-line-chart/cylinder`
310
+ - Playground 路由:`/bar-line-chart/cube`
311
+ - Playground 路由:`/bar-line-chart/advanced`
312
+ - Playground 路由:`/bar-line-chart/custom`
313
+
314
+ ---
315
+
316
+ ## 8. `PieChart` API
317
+
318
+ ### 8.1 组件定位
319
+
320
+ `PieChart` 用于承接标准饼图类场景,并统一 2D / 3D、普通 / 环形、普通 / 玫瑰 这些公开能力。
321
+
322
+ ### 8.2 Props
323
+
324
+ | Prop | 类型 | 默认值 | 说明 |
325
+ | --- | --- | --- | --- |
326
+ | `data` | `Array` | `[]` | 饼图数据源,推荐项结构至少包含 `name`、`value` |
327
+ | `variant` | `String` | `'pie'` | 形态:`pie` / `ring` / `rose-pie` / `rose-ring` |
328
+ | `dimension` | `String` | `'2d'` | 维度:`2d` / `3d` |
329
+ | `preset` | `String` | `'ratio'` | 预设:`ratio` / `rank` |
330
+ | `heightMode` | `String` | `'equal'` | 3D 高度:`equal` / `value` |
331
+ | `minHeight` | `Number` | `20` | 3D 最小扇区高度 |
332
+ | `maxHeight` | `Number` | `80` | 3D 最大扇区高度 |
333
+ | `internalDiameterRatio` | `Number` | `0.6` | 环图内径比例 |
334
+ | `roseRadiusRange` | `Array` | `[0.75, 1.15]` | 玫瑰图外半径映射范围 |
335
+ | `showLabelLine` | `Boolean` | `false` | 是否显示标签引导线 |
336
+ | `labelOptions` | `Object` | `{}` | 标签与引导线配置 |
337
+ | `hideZeroValueSlices` | `Boolean` | `true` | 3D 下是否过滤 0 值扇区 |
338
+ | `customOption` | `Object` | `{}` | 对 ECharts option 的补充覆盖 |
339
+ | `loading` | `Boolean` | `false` | 是否显示 loading |
340
+ | `height` | `String \| Number` | `320` | 容器高度 |
341
+
342
+ ### 8.3 PieChart 数据格式
343
+
344
+ `PieChart` 的 `data` 直接传扇区数组即可,每一项至少建议包含:
345
+
346
+ - `name`:扇区名称。
347
+ - `value`:扇区数值。
348
+
349
+ 推荐写法:
350
+
351
+ ```js
352
+ const data = [
353
+ {
354
+ name: '华东',
355
+ value: 120,
356
+ itemStyle: {
357
+ color: '#6B98F8',
358
+ opacity: 0.9
359
+ }
360
+ },
361
+ {
362
+ name: '华南',
363
+ value: 98,
364
+ itemStyle: {
365
+ color: '#36CFC9'
366
+ }
367
+ }
368
+ ]
369
+ ```
370
+
371
+ 关键规则:
372
+
373
+ - `name` 缺失时,组件会自动补成 `数据1`、`数据2` 这类默认名称。
374
+ - `value` 会统一做 `Number(...)` 转换,非法值会回退成 `0`。
375
+ - 除 `name`、`value` 之外,其余字段会保留,方便业务侧自己挂扩展信息。
376
+ - 3D 模式下,如果 `hideZeroValueSlices = true`,值小于等于 `0` 的扇区会被过滤。
377
+
378
+ ### 8.4 PieChart 配色规则
379
+
380
+ `PieChart` 当前没有单独暴露 `colors` prop。
381
+
382
+ 推荐的外部配色方式是:
383
+
384
+ 1. 直接在 `data` 的每一项里写 `itemStyle.color`
385
+ 2. 如有需要,再通过 `itemStyle.opacity` 控制透明度
386
+
387
+ 颜色规则:
388
+
389
+ - `itemStyle.color` 是最直接、最稳定的配色方式。
390
+ - `itemStyle.opacity` 不传时默认是 `0.85`。
391
+ - 如果某一项没有写 `itemStyle.color`,组件会按内置色板顺序自动分配颜色。
392
+
393
+ 示例:
394
+
395
+ ```js
396
+ const data = [
397
+ {
398
+ name: '已完成',
399
+ value: 76,
400
+ itemStyle: {
401
+ color: '#6B98F8'
402
+ }
403
+ },
404
+ {
405
+ name: '处理中',
406
+ value: 18,
407
+ itemStyle: {
408
+ color: '#FF8A5B',
409
+ opacity: 0.75
410
+ }
411
+ }
412
+ ]
413
+ ```
414
+
415
+ ### 8.5 labelOptions 字段说明
416
+
417
+ `labelOptions` 用来控制饼图标签与引导线的展示细节。
418
+
419
+ 它通常和顶层 `showLabelLine` 一起使用:
420
+
421
+ - `showLabelLine = false`:不显示引导线。
422
+ - `showLabelLine = true`:显示引导线,并读取 `labelOptions` 中的线长、颜色、文字等配置。
423
+
424
+ 字段说明:
425
+
426
+ | 字段 | 类型 | 默认值 | 说明 |
427
+ | --- | --- | --- | --- |
428
+ | `show` | `Boolean` | `true` | 是否显示标签文本,主要影响 2D 饼图标签 |
429
+ | `formatter` | `String \| Function` | `'{b}\n{d}%'` | 标签文案格式 |
430
+ | `fontSize` | `Number` | `14` | 标签文字字号 |
431
+ | `color` | `String` | `'#333'` | 标签文字颜色 |
432
+ | `lineColor` | `String \| null` | `null` | 引导线颜色,不传时使用 `color` |
433
+ | `lineWidth` | `Number` | `1` | 引导线宽度 |
434
+ | `lineLength1` | `Number` | `18` | 第一段引导线长度 |
435
+ | `lineLength2` | `Number` | `24` | 第二段引导线长度 |
436
+ | `minShowLabelAngle` | `Number` | `0` | 小于该角度的扇区不显示标签 |
437
+ | `edgePadding` | `Number` | `12` | 标签距离画布左右边缘的最小距离 |
438
+ | `textGap` | `Number` | `6` | 标签文字与引导线末端的间距 |
439
+ | `verticalGap` | `Number` | `8` | 多个标签垂直避让时的最小间距 |
440
+ | `radialOffset` | `Number` | `0.12` | 3D 引导线从扇区外侧向外延伸的径向偏移 |
441
+
442
+ `formatter` 支持字符串模板和函数。
443
+
444
+ 字符串模板支持:
445
+
446
+ - `{b}`:名称,对应 `name`
447
+ - `{c}`:数值,对应 `value`
448
+ - `{d}`:百分比,对应内部计算后的 `percent`
449
+
450
+ 示例:
451
+
452
+ ```js
453
+ const labelOptions = {
454
+ formatter: '{b}:{c}\n占比 {d}%',
455
+ fontSize: 13,
456
+ color: '#1F2937',
457
+ lineColor: '#6B98F8',
458
+ lineWidth: 1,
459
+ lineLength1: 22,
460
+ lineLength2: 32,
461
+ minShowLabelAngle: 5,
462
+ edgePadding: 16,
463
+ textGap: 8,
464
+ verticalGap: 10,
465
+ radialOffset: 0.16
466
+ }
467
+ ```
468
+
469
+ 如果需要更复杂的文案,可以传函数:
470
+
471
+ ```js
472
+ const labelOptions = {
473
+ formatter({ name, value, percent, data }) {
474
+ return `${name}\n${value} / ${percent}%`
475
+ }
476
+ }
477
+ ```
478
+
479
+ 函数参数说明:
480
+
481
+ - `name`:扇区名称。
482
+ - `value`:扇区数值。
483
+ - `percent`:组件内部计算出来的百分比。
484
+ - `data`:当前扇区对应的原始数据项。
485
+
486
+ ### 8.6 Events
487
+
488
+ | 事件名 | 参数 | 说明 |
489
+ | --- | --- | --- |
490
+ | `ready` | `chart` | 底层 ECharts 实例 |
491
+ | `chart-click` | `params` | 点击图形元素时触发 |
492
+ | `runtime-error` | `error` | 3D 运行时缺少 `echarts-gl` 等异常时触发 |
493
+
494
+ ### 8.7 3D 依赖说明
495
+
496
+ - `dimension="2d"` 时,不需要安装 `echarts-gl`。
497
+ - `dimension="3d"` 时,需要安装 `echarts-gl`。
498
+ - 3D 模式会在运行时按需加载 `echarts-gl`。
499
+
500
+ ### 8.8 常见场景
501
+
502
+ 1. **普通饼图**:`variant="pie"`,适合占比展示。
503
+ 2. **环图**:`variant="ring"`,适合中心留白展示关键指标。
504
+ 3. **玫瑰图**:`variant="rose-pie"` 或 `variant="rose-ring"`,适合强调差异。
505
+ 4. **3D 饼图**:`dimension="3d"`,适合大屏或品牌展示。
506
+ 5. **按值映射高度**:`dimension="3d" + heightMode="value"`。
507
+ 6. **标签与引导线**:`showLabelLine + labelOptions`。
508
+ 7. **零值过滤**:3D 下使用 `hideZeroValueSlices` 控制是否过滤 0 值扇区。
509
+
510
+ 推荐查阅:
511
+
512
+ - `docs/examples/pie-chart.md`
513
+ - Playground 路由:`/pie-chart/basic`
514
+ - Playground 路由:`/pie-chart/shape-2d`
515
+ - Playground 路由:`/pie-chart/three-d`
516
+ - Playground 路由:`/pie-chart/label`
517
+ - Playground 路由:`/pie-chart/custom`
518
+
519
+ ---
520
+
521
+ ## 9. 外部配置怎么传
522
+
523
+ 推荐用 `v-bind` 传一个清晰的配置对象,而不是在模板里零散写大量字面量。
524
+
525
+ ### 9.1 `BarLineChart`
526
+
527
+ ```vue
528
+ <BarLineChart
529
+ v-bind="{
530
+ data,
531
+ xAxisKey: 'month',
532
+ series,
533
+ variant: 'cylinder',
534
+ preset: 'compare',
535
+ customOption
536
+ }"
537
+ />
538
+ ```
539
+
540
+ ### 9.2 `PieChart`
541
+
542
+ ```vue
543
+ <PieChart
544
+ v-bind="{
545
+ data,
546
+ variant: 'ring',
547
+ dimension: '3d',
548
+ heightMode: 'value',
549
+ minHeight: 20,
550
+ maxHeight: 80,
551
+ showLabelLine: true,
552
+ labelOptions,
553
+ customOption
554
+ }"
555
+ />
556
+ ```
557
+
558
+ ---
559
+
560
+ ## 10. 文档与示例导航
561
+
562
+ - API 总览:`docs/api/overview.md`
563
+ - 柱线图示例说明:`docs/examples/bar-line-chart.md`
564
+ - 饼图示例说明:`docs/examples/pie-chart.md`
565
+ - 可运行 Demo 库:`playground`
566
+
567
+ 建议阅读顺序:
568
+
569
+ 1. 先看这份 API 总览,确认组件和 props。
570
+ 2. 再看对应的示例说明文档,理解推荐传参方式。
571
+ 3. 最后打开 Playground,对照具体案例调参。