xt-element-ui 1.4.0 → 2.0.1

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.
Files changed (93) hide show
  1. package/CHANGELOG.md +37 -20
  2. package/README.md +39 -35
  3. package/docs/README.md +25 -15
  4. package/docs/components/base/xt-badge.md +139 -0
  5. package/docs/components/base/xt-bar.md +182 -0
  6. package/docs/components/base/xt-chart.md +183 -0
  7. package/docs/components/base/xt-date-picker.md +111 -0
  8. package/docs/components/base/xt-icon.md +154 -0
  9. package/docs/components/base/xt-line.md +145 -0
  10. package/docs/components/base/xt-multi.md +278 -0
  11. package/docs/components/base/xt-page.md +84 -0
  12. package/docs/components/base/xt-pie.md +175 -0
  13. package/docs/components/base/xt-progress.md +134 -0
  14. package/docs/components/base/xt-select-tree.md +141 -0
  15. package/docs/components/base/xt-table.md +344 -0
  16. package/docs/components/base/xt-tabs.md +197 -0
  17. package/docs/components/base/xt-upload.md +85 -0
  18. package/lib/index.common.js +604 -824
  19. package/lib/index.css +1 -1
  20. package/lib/index.umd.js +609 -830
  21. package/lib/index.umd.min.js +4 -4
  22. package/package.json +1 -1
  23. package/src/components/index.scss +2 -8
  24. package/src/components/xt-button/index.js +1 -1
  25. package/src/components/xt-button/index.vue +43 -73
  26. package/src/components/xt-button/style/index.scss +51 -787
  27. package/src/components/xt-card/index.js +1 -2
  28. package/src/components/xt-card/index.vue +61 -21
  29. package/src/components/xt-card/style/index.scss +56 -32
  30. package/src/components/xt-card-item/index.vue +3 -3
  31. package/src/components/xt-chart/index.js +8 -0
  32. package/src/components/{ex-chart → xt-chart}/index.vue +13 -13
  33. package/src/components/{ex-chart → xt-chart}/pieList.vue +1 -1
  34. package/src/components/{ex-chart → xt-chart}/utils.js +1 -1
  35. package/src/components/xt-config-provider/index.vue +1 -1
  36. package/src/components/xt-date-picker/index.js +8 -0
  37. package/src/components/{ex-date-picker → xt-date-picker}/index.vue +1 -1
  38. package/src/components/xt-icon/index.js +8 -0
  39. package/src/components/{ex-icon → xt-icon}/index.vue +4 -4
  40. package/src/components/xt-layout/ExFieldset.vue +1 -1
  41. package/src/components/xt-page/index.js +8 -0
  42. package/src/components/{ex-page → xt-page}/index.vue +1 -1
  43. package/src/components/xt-select-tree/index.js +8 -0
  44. package/src/components/{ex-select-tree → xt-select-tree}/index.vue +1 -1
  45. package/src/components/xt-step-price/index.vue +13 -3
  46. package/src/components/xt-step-price-item/index.vue +8 -3
  47. package/src/components/{ex-table/ExTableCell.vue → xt-table/XtTableCell.vue} +1 -1
  48. package/src/components/xt-table/index.js +8 -0
  49. package/src/components/{ex-table → xt-table}/index.vue +6 -6
  50. package/src/components/xt-text/index.vue +130 -0
  51. package/src/components/xt-upload/index.js +8 -0
  52. package/src/index.js +15 -29
  53. package/src/utils/index.js +1 -1
  54. package/docs/components/extend/ex-bar.md +0 -68
  55. package/docs/components/extend/ex-button.md +0 -62
  56. package/docs/components/extend/ex-card.md +0 -86
  57. package/docs/components/extend/ex-chart.md +0 -463
  58. package/docs/components/extend/ex-date-picker.md +0 -0
  59. package/docs/components/extend/ex-icon.md +0 -189
  60. package/docs/components/extend/ex-line.md +0 -71
  61. package/docs/components/extend/ex-multi.md +0 -156
  62. package/docs/components/extend/ex-page.md +0 -0
  63. package/docs/components/extend/ex-pie.md +0 -70
  64. package/docs/components/extend/ex-select-tree.md +0 -210
  65. package/docs/components/extend/ex-table.md +0 -591
  66. package/docs/components/extend/ex-upload.md +0 -134
  67. package/src/components/ex-button/index.js +0 -8
  68. package/src/components/ex-button/index.vue +0 -67
  69. package/src/components/ex-button/style/index.scss +0 -67
  70. package/src/components/ex-card/index.js +0 -7
  71. package/src/components/ex-card/index.vue +0 -68
  72. package/src/components/ex-card/style/index.scss +0 -73
  73. package/src/components/ex-chart/index.js +0 -8
  74. package/src/components/ex-date-picker/index.js +0 -8
  75. package/src/components/ex-icon/index.js +0 -8
  76. package/src/components/ex-page/index.js +0 -8
  77. package/src/components/ex-select-tree/index.js +0 -8
  78. package/src/components/ex-table/index.js +0 -8
  79. package/src/components/ex-upload/index.js +0 -8
  80. package/src/config/element-registry.js +0 -136
  81. /package/src/components/{ex-chart/ExBar.vue → xt-chart/XtBar.vue} +0 -0
  82. /package/src/components/{ex-chart/ExLine.vue → xt-chart/XtLine.vue} +0 -0
  83. /package/src/components/{ex-chart/ExMulti.vue → xt-chart/XtMulti.vue} +0 -0
  84. /package/src/components/{ex-chart/ExPie.vue → xt-chart/XtPie.vue} +0 -0
  85. /package/src/components/{ex-chart → xt-chart}/theme/dark.js +0 -0
  86. /package/src/components/{ex-chart → xt-chart}/theme/white.js +0 -0
  87. /package/src/components/{ex-date-picker → xt-date-picker}/SearchDate.vue +0 -0
  88. /package/src/components/{ex-date-picker → xt-date-picker}/quarter.vue +0 -0
  89. /package/src/components/{ex-icon → xt-icon}/style/index.scss +0 -0
  90. /package/src/components/{ex-table → xt-table}/VirtualElTable.vue +0 -0
  91. /package/src/components/{ex-table → xt-table}/virtualScrollData.js +0 -0
  92. /package/src/components/{ex-upload → xt-upload}/index.vue +0 -0
  93. /package/src/components/{ex-upload → xt-upload}/preview.vue +0 -0
@@ -1,463 +0,0 @@
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' }`
File without changes
@@ -1,189 +0,0 @@
1
- ## ExIcon 图标
2
-
3
- 统一图标组件,支持 ElementUI 字体图标(el-icon)、SVG Sprite 图标、内联 SVG,以及可扩展的自定义字体图标。
4
-
5
- ## 基础用法:ElementUI 字体图标
6
-
7
- `name` 以 `el-icon-` 开头时,自动识别为 ElementUI 字体图标:
8
-
9
- ::: demo ElementUI 字体图标示例
10
- ```vue
11
- <template>
12
- <div style="font-size: 24px">
13
- <ex-icon name="el-icon-edit" style="margin-right: 16px" />
14
- <ex-icon name="el-icon-delete" style="margin-right: 16px" />
15
- <ex-icon name="el-icon-search" style="margin-right: 16px" />
16
- <ex-icon name="el-icon-share" style="margin-right: 16px" />
17
- <ex-icon name="el-icon-setting" />
18
- </div>
19
- </template>
20
- ```
21
- :::
22
-
23
- ## SVG Sprite 图标
24
-
25
- `name` 以 `#` 或 `svg:` 开头时,自动识别为 SVG Sprite(通过 `<use>` 引用)。使用前请确保项目已通过 `svg-sprite-loader` 等方式注册了对应的 SVG 图标:
26
-
27
- ::: demo SVG Sprite 图标示例
28
- ```vue
29
- <template>
30
- <div style="font-size: 24px; color: #1890ff">
31
- <ex-icon name="#icon-user" style="margin-right: 16px" />
32
- <ex-icon name="svg:icon-home" style="margin-right: 16px" />
33
- <ex-icon name="#icon-star" />
34
- </div>
35
- </template>
36
- ```
37
- :::
38
-
39
- ## 内联 SVG 图标
40
-
41
- `name` 传入完整的 `<svg>` 字符串时,将作为内联 SVG 渲染:
42
-
43
- ::: demo 内联 SVG 示例
44
- ```vue
45
- <template>
46
- <ex-icon
47
- :size="32"
48
- color="#f56c6c"
49
- :name="'<svg viewBox=&quot;0 0 1024 1024&quot;><path d=&quot;M512 938.666667L85.333333 512l170.666667-170.666667 256 256 256-256L938.666667 512 512 938.666667z&quot; fill=&quot;currentColor&quot;></path></svg>'"
50
- />
51
- </template>
52
- ```
53
- :::
54
-
55
- ## 自定义字体图标(本地扩展)
56
-
57
- 除 `el-icon-` 前缀外,其它自定义前缀会自动作为自定义字体图标渲染(需在项目中自行准备 @font-face 字体文件及对应 class)。例如使用 `my-icon-star`:
58
-
59
- ```scss
60
- // 项目中准备好字体文件及 class
61
- @font-face {
62
- font-family: 'my-icon';
63
- src: url('./fonts/my-icon.ttf') format('truetype');
64
- }
65
- .my-icon {
66
- font-family: 'my-icon' !important;
67
- }
68
- .my-icon-star::before {
69
- content: '\e001';
70
- }
71
- ```
72
-
73
- ::: demo 自定义字体图标示例
74
- ```vue
75
- <template>
76
- <div style="font-size: 24px">
77
- <ex-icon name="my-icon-star" style="margin-right: 16px" />
78
- <ex-icon name="my-icon-heart" />
79
- </div>
80
- </template>
81
-
82
- <script>
83
- export default {
84
- created() {
85
- // 注册自定义前缀,避免自动添加 ex-icon 前缀
86
- ExIcon.registerPrefix('my-icon-')
87
- }
88
- }
89
- </script>
90
- ```
91
- :::
92
-
93
- 未注册自定义前缀时,组件会自动为其添加 `ex-icon` 作为基础 class,方便与项目本地的 @font-face 配合:
94
-
95
- ```scss
96
- .ex-icon {
97
- font-family: 'ex-iconfont' !important;
98
- font-size: 16px;
99
- font-style: normal;
100
- }
101
- .ex-icon-star::before { content: '\e001'; }
102
- ```
103
-
104
- ## 尺寸与颜色
105
-
106
- 通过 `size` 和 `color` 属性控制图标大小与颜色:
107
-
108
- ::: demo 图标尺寸颜色示例
109
- ```vue
110
- <template>
111
- <div>
112
- <ex-icon name="el-icon-star-on" :size="16" color="#909399" style="margin-right: 16px" />
113
- <ex-icon name="el-icon-star-on" :size="24" color="#e6a23c" style="margin-right: 16px" />
114
- <ex-icon name="el-icon-star-on" :size="32" color="#f56c6c" style="margin-right: 16px" />
115
- <ex-icon name="el-icon-star-on" :size="48" color="#67c23a" style="margin-right: 16px" />
116
- <ex-icon name="el-icon-star-on" size="2em" color="#409eff" />
117
- </div>
118
- </template>
119
- ```
120
- :::
121
-
122
- ## 旋转动画
123
-
124
- 设置 `spin` 让图标持续旋转(常用于加载状态):
125
-
126
- ::: demo 图标旋转示例
127
- ```vue
128
- <template>
129
- <div style="font-size: 24px">
130
- <ex-icon name="el-icon-loading" spin style="margin-right: 16px" />
131
- <ex-icon name="el-icon-refresh" spin />
132
- </div>
133
- </template>
134
- ```
135
- :::
136
-
137
- ## 点击事件
138
-
139
- 支持 `@click` 事件:
140
-
141
- ::: demo 图标点击示例
142
- ```vue
143
- <template>
144
- <div style="font-size: 24px">
145
- <ex-icon
146
- name="el-icon-favorite"
147
- color="#f56c6c"
148
- @click="handleClick"
149
- style="cursor: pointer"
150
- />
151
- <span style="margin-left: 8px; font-size: 14px">点击次数:{{ count }}</span>
152
- </div>
153
- </template>
154
-
155
- <script>
156
- export default {
157
- data() {
158
- return { count: 0 }
159
- },
160
- methods: {
161
- handleClick() {
162
- this.count++
163
- }
164
- }
165
- }
166
- </script>
167
- ```
168
- :::
169
-
170
- ## Attributes
171
-
172
- | 参数 | 说明 | 类型 | 可选值 | 默认值 |
173
- |------|------|------|--------|--------|
174
- | name | 图标名称(支持 el-icon-xxx 自定义前缀) | string | — | '' |
175
- | size | 图标尺寸(数字单位 px,也可传入如 '2em' 的字符串) | string / number | — | '' |
176
- | color | 图标颜色(CSS color 值) | string | — | '' |
177
- | spin | 是否持续旋转 | boolean | — | false |
178
-
179
- ## Events
180
-
181
- | 事件名 | 说明 | 回调参数 |
182
- |--------|------|----------|
183
- | click | 点击图标时触发 | event |
184
-
185
- ## 静态方法
186
-
187
- | 方法名 | 说明 | 参数 |
188
- |--------|------|------|
189
- | ExIcon.registerPrefix(prefix) | 注册自定义字体图标前缀,注册后该前缀的图标不会自动添加 `ex-icon` 基础 class | prefix: string |