xt-element-ui 1.3.4 → 2.0.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.
Files changed (103) 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-card-item.md +12 -12
  7. package/docs/components/base/xt-chart.md +183 -0
  8. package/docs/components/base/xt-date-picker.md +111 -0
  9. package/docs/components/base/xt-icon.md +154 -0
  10. package/docs/components/base/xt-line.md +145 -0
  11. package/docs/components/base/xt-multi.md +278 -0
  12. package/docs/components/base/xt-page.md +84 -0
  13. package/docs/components/base/xt-pie.md +175 -0
  14. package/docs/components/base/xt-progress.md +134 -0
  15. package/docs/components/base/xt-select-tree.md +141 -0
  16. package/docs/components/base/xt-table.md +344 -0
  17. package/docs/components/base/xt-tabs.md +197 -0
  18. package/docs/components/base/xt-upload.md +85 -0
  19. package/lib/index.common.js +885 -828
  20. package/lib/index.css +1 -1
  21. package/lib/index.umd.js +890 -834
  22. package/lib/index.umd.min.js +5 -5
  23. package/package.json +1 -1
  24. package/src/components/index.scss +11 -8
  25. package/src/components/xt-badge/index.js +7 -0
  26. package/src/components/xt-badge/index.vue +71 -0
  27. package/src/components/xt-badge/style/index.scss +88 -0
  28. package/src/components/xt-button/index.js +8 -8
  29. package/src/components/xt-button/index.vue +43 -73
  30. package/src/components/xt-button/style/index.scss +51 -787
  31. package/src/components/xt-card/index.js +7 -8
  32. package/src/components/xt-card/index.vue +61 -21
  33. package/src/components/xt-card/style/index.scss +56 -32
  34. package/src/components/xt-card-item/index.vue +7 -7
  35. package/src/components/xt-chart/index.js +8 -0
  36. package/src/components/{ex-chart → xt-chart}/index.vue +13 -13
  37. package/src/components/{ex-chart → xt-chart}/pieList.vue +1 -1
  38. package/src/components/{ex-chart → xt-chart}/theme/dark.js +4 -1
  39. package/src/components/{ex-chart → xt-chart}/utils.js +1 -1
  40. package/src/components/xt-config-provider/index.vue +1 -1
  41. package/src/components/xt-date-picker/index.js +8 -0
  42. package/src/components/{ex-date-picker → xt-date-picker}/index.vue +1 -1
  43. package/src/components/xt-icon/index.js +8 -0
  44. package/src/components/{ex-icon → xt-icon}/index.vue +4 -4
  45. package/src/components/xt-layout/ExFieldset.vue +1 -1
  46. package/src/components/xt-page/index.js +8 -0
  47. package/src/components/{ex-page → xt-page}/index.vue +1 -1
  48. package/src/components/xt-progress/index.js +7 -0
  49. package/src/components/xt-progress/index.vue +103 -0
  50. package/src/components/xt-progress/style/index.scss +119 -0
  51. package/src/components/xt-select-tree/index.js +8 -0
  52. package/src/components/{ex-select-tree → xt-select-tree}/index.vue +1 -1
  53. package/src/components/{ex-table/ExTableCell.vue → xt-table/XtTableCell.vue} +1 -1
  54. package/src/components/xt-table/index.js +8 -0
  55. package/src/components/{ex-table → xt-table}/index.vue +6 -6
  56. package/src/components/xt-tabs/TabPane.vue +36 -0
  57. package/src/components/xt-tabs/index.js +10 -0
  58. package/src/components/xt-tabs/index.vue +113 -0
  59. package/src/components/xt-tabs/style/index.scss +197 -0
  60. package/src/components/xt-text/index.vue +15 -1
  61. package/src/components/xt-text/style/index.scss +18 -0
  62. package/src/components/xt-upload/index.js +8 -0
  63. package/src/index.js +24 -31
  64. package/src/utils/index.js +1 -1
  65. package/docs/components/extend/ex-bar.md +0 -68
  66. package/docs/components/extend/ex-button.md +0 -62
  67. package/docs/components/extend/ex-card.md +0 -86
  68. package/docs/components/extend/ex-chart.md +0 -463
  69. package/docs/components/extend/ex-date-picker.md +0 -0
  70. package/docs/components/extend/ex-icon.md +0 -189
  71. package/docs/components/extend/ex-line.md +0 -71
  72. package/docs/components/extend/ex-multi.md +0 -156
  73. package/docs/components/extend/ex-page.md +0 -0
  74. package/docs/components/extend/ex-pie.md +0 -70
  75. package/docs/components/extend/ex-select-tree.md +0 -210
  76. package/docs/components/extend/ex-table.md +0 -591
  77. package/docs/components/extend/ex-upload.md +0 -134
  78. package/src/components/ex-button/index.js +0 -8
  79. package/src/components/ex-button/index.vue +0 -67
  80. package/src/components/ex-button/style/index.scss +0 -67
  81. package/src/components/ex-card/index.js +0 -7
  82. package/src/components/ex-card/index.vue +0 -68
  83. package/src/components/ex-card/style/index.scss +0 -73
  84. package/src/components/ex-chart/index.js +0 -8
  85. package/src/components/ex-date-picker/index.js +0 -8
  86. package/src/components/ex-icon/index.js +0 -8
  87. package/src/components/ex-page/index.js +0 -8
  88. package/src/components/ex-select-tree/index.js +0 -8
  89. package/src/components/ex-table/index.js +0 -8
  90. package/src/components/ex-upload/index.js +0 -8
  91. package/src/config/element-registry.js +0 -136
  92. /package/src/components/{ex-chart/ExBar.vue → xt-chart/XtBar.vue} +0 -0
  93. /package/src/components/{ex-chart/ExLine.vue → xt-chart/XtLine.vue} +0 -0
  94. /package/src/components/{ex-chart/ExMulti.vue → xt-chart/XtMulti.vue} +0 -0
  95. /package/src/components/{ex-chart/ExPie.vue → xt-chart/XtPie.vue} +0 -0
  96. /package/src/components/{ex-chart → xt-chart}/theme/white.js +0 -0
  97. /package/src/components/{ex-date-picker → xt-date-picker}/SearchDate.vue +0 -0
  98. /package/src/components/{ex-date-picker → xt-date-picker}/quarter.vue +0 -0
  99. /package/src/components/{ex-icon → xt-icon}/style/index.scss +0 -0
  100. /package/src/components/{ex-table → xt-table}/VirtualElTable.vue +0 -0
  101. /package/src/components/{ex-table → xt-table}/virtualScrollData.js +0 -0
  102. /package/src/components/{ex-upload → xt-upload}/index.vue +0 -0
  103. /package/src/components/{ex-upload → xt-upload}/preview.vue +0 -0
@@ -0,0 +1,141 @@
1
+ ## XtSelectTree 下拉选择树组件
2
+
3
+ 下拉选择树组件,基于 ElementUI Tree 封装,支持单选、多选、懒加载等功能。
4
+
5
+ ## 基本用法
6
+
7
+ ::: demo 基本用法
8
+ ```vue
9
+ <template>
10
+ <XtSelectTree v-model="selectedValue" :data="treeData" />
11
+ </template>
12
+
13
+ <script>
14
+ export default {
15
+ data() {
16
+ return {
17
+ selectedValue: '',
18
+ treeData: [
19
+ {
20
+ label: '一级菜单',
21
+ value: 1,
22
+ children: [
23
+ { label: '二级菜单1', value: 11 },
24
+ { label: '二级菜单2', value: 12 }
25
+ ]
26
+ },
27
+ { label: '二级菜单', value: 2 }
28
+ ]
29
+ }
30
+ }
31
+ }
32
+ </script>
33
+ ```
34
+ :::
35
+
36
+ ## 属性说明
37
+
38
+ | 属性 | 类型 | 默认值 | 说明 |
39
+ |------|------|--------|------|
40
+ | `value` / `v-model` | String / Number / Array | - | 选中值,多选时为数组 |
41
+ | `data` | Array | `[]` | 树数据 |
42
+ | `props` | Object | `{ value: 'value', label: 'label', children: 'children' }` | 数据属性映射 |
43
+ | `multiple` | Boolean | `false` | 是否多选 |
44
+ | `filterable` | Boolean | `true` | 是否可搜索 |
45
+ | `clearable` | Boolean | `false` | 是否可清空 |
46
+ | `disabled` | Boolean | `false` | 是否禁用 |
47
+ | `checkStrictly` | Boolean | `false` | 是否严格父子节点选择 |
48
+ | `defaultExpandAll` | Boolean | `false` | 是否默认展开所有节点 |
49
+ | `lazy` | Boolean | `false` | 是否懒加载 |
50
+ | `load` | Function | - | 懒加载函数 |
51
+ | `placement` | String | `bottom-start` | 弹出位置 |
52
+ | `placeholder` | String | `请选择` | 占位提示 |
53
+
54
+ ## 示例
55
+
56
+ ### 多选模式
57
+
58
+ ::: demo 多选模式
59
+ ```vue
60
+ <template>
61
+ <XtSelectTree v-model="selectedValues" :data="treeData" multiple />
62
+ </template>
63
+
64
+ <script>
65
+ export default {
66
+ data() {
67
+ return {
68
+ selectedValues: [],
69
+ treeData: [
70
+ {
71
+ label: '部门A',
72
+ value: 1,
73
+ children: [
74
+ { label: '员工1', value: 11 },
75
+ { label: '员工2', value: 12 }
76
+ ]
77
+ },
78
+ { label: '部门B', value: 2 }
79
+ ]
80
+ }
81
+ }
82
+ }
83
+ </script>
84
+ ```
85
+ :::
86
+
87
+ ### 可搜索
88
+
89
+ ::: demo 可搜索
90
+ ```vue
91
+ <template>
92
+ <XtSelectTree v-model="selectedValue" :data="treeData" filterable />
93
+ </template>
94
+
95
+ <script>
96
+ export default {
97
+ data() {
98
+ return {
99
+ selectedValue: '',
100
+ treeData: [
101
+ { label: '张三', value: 1 },
102
+ { label: '李四', value: 2 },
103
+ { label: '王五', value: 3 }
104
+ ]
105
+ }
106
+ }
107
+ }
108
+ </script>
109
+ ```
110
+ :::
111
+
112
+ ### 可清空
113
+
114
+ ::: demo 可清空
115
+ ```vue
116
+ <template>
117
+ <XtSelectTree v-model="selectedValue" :data="treeData" clearable />
118
+ </template>
119
+
120
+ <script>
121
+ export default {
122
+ data() {
123
+ return {
124
+ selectedValue: '',
125
+ treeData: [
126
+ { label: '选项1', value: 1 },
127
+ { label: '选项2', value: 2 }
128
+ ]
129
+ }
130
+ }
131
+ }
132
+ </script>
133
+ ```
134
+ :::
135
+
136
+ ## 事件
137
+
138
+ | 事件名 | 说明 | 参数 |
139
+ |--------|------|------|
140
+ | `change` | 选中值改变时触发 | `value`, `node` |
141
+ | `clear` | 清空时触发 | - |
@@ -0,0 +1,344 @@
1
+ ## XtTable 扩展表格组件
2
+
3
+ 基于 ElementUI Table 封装的扩展表格组件,支持虚拟滚动、小计/总计、合并单元格等高级功能。
4
+
5
+ ## 基本用法
6
+
7
+ ::: demo 基本用法
8
+ ```vue
9
+ <template>
10
+ <XtTable
11
+ :table-data="tableData"
12
+ :columns="columns"
13
+ title="用户列表"
14
+ />
15
+ </template>
16
+
17
+ <script>
18
+ export default {
19
+ data() {
20
+ return {
21
+ tableData: [
22
+ { name: '张三', age: 25, city: '北京' },
23
+ { name: '李四', age: 30, city: '上海' },
24
+ { name: '王五', age: 28, city: '广州' }
25
+ ],
26
+ columns: [
27
+ { prop: 'name', label: '姓名' },
28
+ { prop: 'age', label: '年龄' },
29
+ { prop: 'city', label: '城市' }
30
+ ]
31
+ }
32
+ }
33
+ }
34
+ </script>
35
+ ```
36
+ :::
37
+
38
+ ## 属性说明
39
+
40
+ ### 基础属性
41
+
42
+ | 属性 | 类型 | 默认值 | 说明 |
43
+ |------|------|--------|------|
44
+ | `tableData` | Array | `[]` | 表格数据 |
45
+ | `columns` | Array | `[]` | 列配置 |
46
+ | `title` | String | `''` | 表格标题 |
47
+ | `height` | Number / String | - | 表格高度 |
48
+ | `maxHeight` | Number / String | - | 最大高度 |
49
+ | `showIndex` | Boolean | `false` | 是否显示序号列 |
50
+ | `selection` | Boolean | `false` | 是否显示选择列 |
51
+ | `selectionFixed` | Boolean / String | `false` | 选择列是否固定 |
52
+ | `indexFixed` | Boolean / String | `false` | 序号列是否固定 |
53
+ | `loading` | Boolean | `false` | 是否加载中 |
54
+ | `emptyText` | String | `暂无数据` | 空数据提示 |
55
+
56
+ ### 虚拟滚动
57
+
58
+ | 属性 | 类型 | 默认值 | 说明 |
59
+ |------|------|--------|------|
60
+ | `virtualScroll` | Boolean | `false` | 是否启用虚拟滚动 |
61
+ | `rowInitHeight` | Number | `48` | 行初始高度 |
62
+ | `bufferSize` | Number | `5` | 缓冲区行数 |
63
+
64
+ ### 小计/总计
65
+
66
+ | 属性 | 类型 | 默认值 | 说明 |
67
+ |------|------|--------|------|
68
+ | `groupColumns` | Array | `[]` | 合并单元格的列字段 |
69
+ | `subtotalConfig` | Object | `{ enabled: false }` | 小计配置 |
70
+ | `totalConfig` | Object | `{ enabled: false }` | 总计配置 |
71
+
72
+ ### 分页
73
+
74
+ | 属性 | 类型 | 默认值 | 说明 |
75
+ |------|------|--------|------|
76
+ | `pagination` | Object | `null` | 分页配置 |
77
+ | `total` | Number | `0` | 数据总数 |
78
+
79
+ ## 列配置说明
80
+
81
+ ```javascript
82
+ {
83
+ prop: 'name', // 字段名
84
+ label: '姓名', // 列标题
85
+ width: 100, // 宽度
86
+ fixed: true, // 是否固定
87
+ align: 'center', // 对齐方式
88
+ sortable: true, // 是否可排序
89
+ render: (scope) => {}, // 自定义渲染函数
90
+ formatter: (row, col) => {}, // 格式化函数
91
+ slot: 'custom-slot', // 自定义插槽名
92
+ children: [] // 多级表头
93
+ }
94
+ ```
95
+
96
+ ## 示例
97
+
98
+ ### 虚拟滚动
99
+
100
+ ::: demo 虚拟滚动
101
+ ```vue
102
+ <template>
103
+ <XtTable
104
+ :table-data="largeData"
105
+ :columns="columns"
106
+ :height="400"
107
+ virtual-scroll
108
+ title="大数据量表格"
109
+ />
110
+ </template>
111
+
112
+ <script>
113
+ export default {
114
+ data() {
115
+ return {
116
+ largeData: Array.from({ length: 10000 }, (_, i) => ({
117
+ id: i + 1,
118
+ name: `用户${i + 1}`,
119
+ age: Math.floor(Math.random() * 50) + 20,
120
+ city: ['北京', '上海', '广州', '深圳'][Math.floor(Math.random() * 4)]
121
+ })),
122
+ columns: [
123
+ { prop: 'id', label: 'ID', width: 80 },
124
+ { prop: 'name', label: '姓名', width: 120 },
125
+ { prop: 'age', label: '年龄', width: 80 },
126
+ { prop: 'city', label: '城市', width: 100 }
127
+ ]
128
+ }
129
+ }
130
+ }
131
+ </script>
132
+ ```
133
+ :::
134
+
135
+ ### 合并单元格
136
+
137
+ ::: demo 合并单元格
138
+ ```vue
139
+ <template>
140
+ <XtTable
141
+ :table-data="tableData"
142
+ :columns="columns"
143
+ :group-columns="['city']"
144
+ title="按城市分组"
145
+ />
146
+ </template>
147
+
148
+ <script>
149
+ export default {
150
+ data() {
151
+ return {
152
+ tableData: [
153
+ { city: '北京', name: '张三', age: 25 },
154
+ { city: '北京', name: '李四', age: 30 },
155
+ { city: '上海', name: '王五', age: 28 },
156
+ { city: '上海', name: '赵六', age: 32 }
157
+ ],
158
+ columns: [
159
+ { prop: 'city', label: '城市' },
160
+ { prop: 'name', label: '姓名' },
161
+ { prop: 'age', label: '年龄' }
162
+ ]
163
+ }
164
+ }
165
+ }
166
+ </script>
167
+ ```
168
+ :::
169
+
170
+ ### 小计和总计
171
+
172
+ ::: demo 小计和总计
173
+ ```vue
174
+ <template>
175
+ <XtTable
176
+ :table-data="tableData"
177
+ :columns="columns"
178
+ :group-columns="['category']"
179
+ :subtotal-config="subtotalConfig"
180
+ :total-config="totalConfig"
181
+ title="销售统计"
182
+ />
183
+ </template>
184
+
185
+ <script>
186
+ export default {
187
+ data() {
188
+ return {
189
+ tableData: [
190
+ { category: '电子产品', name: '手机', price: 5999, count: 10 },
191
+ { category: '电子产品', name: '电脑', price: 8999, count: 5 },
192
+ { category: '日用品', name: '牙刷', price: 20, count: 100 },
193
+ { category: '日用品', name: '毛巾', price: 30, count: 50 }
194
+ ],
195
+ columns: [
196
+ { prop: 'category', label: '分类' },
197
+ { prop: 'name', label: '名称' },
198
+ { prop: 'price', label: '单价' },
199
+ { prop: 'count', label: '数量' }
200
+ ],
201
+ subtotalConfig: {
202
+ enabled: true,
203
+ groupBy: ['category'],
204
+ labelText: '小计',
205
+ columns: {
206
+ price: 'sum',
207
+ count: 'sum'
208
+ }
209
+ },
210
+ totalConfig: {
211
+ enabled: true,
212
+ labelText: '总计',
213
+ columns: {
214
+ price: 'sum',
215
+ count: 'sum'
216
+ }
217
+ }
218
+ }
219
+ }
220
+ }
221
+ </script>
222
+ ```
223
+ :::
224
+
225
+ ### 分页
226
+
227
+ ::: demo 分页
228
+ ```vue
229
+ <template>
230
+ <XtTable
231
+ :table-data="tableData"
232
+ :columns="columns"
233
+ :pagination="pagination"
234
+ :total="100"
235
+ title="带分页表格"
236
+ @size-change="handleSizeChange"
237
+ @page-change="handlePageChange"
238
+ />
239
+ </template>
240
+
241
+ <script>
242
+ export default {
243
+ data() {
244
+ return {
245
+ tableData: [
246
+ { name: '张三', age: 25, city: '北京' },
247
+ { name: '李四', age: 30, city: '上海' }
248
+ ],
249
+ columns: [
250
+ { prop: 'name', label: '姓名' },
251
+ { prop: 'age', label: '年龄' },
252
+ { prop: 'city', label: '城市' }
253
+ ],
254
+ pagination: {
255
+ pageNum: 1,
256
+ pageSize: 20,
257
+ pageSizes: [10, 20, 50, 100]
258
+ }
259
+ }
260
+ },
261
+ methods: {
262
+ handleSizeChange(size) {
263
+ this.pagination.pageSize = size
264
+ },
265
+ handlePageChange(page) {
266
+ this.pagination.pageNum = page
267
+ }
268
+ }
269
+ }
270
+ </script>
271
+ ```
272
+ :::
273
+
274
+ ### 自定义渲染
275
+
276
+ ::: demo 自定义渲染
277
+ ```vue
278
+ <template>
279
+ <XtTable :table-data="tableData" :columns="columns">
280
+ <template #action="{ row }">
281
+ <XtButton size="small" @click="edit(row)">编辑</XtButton>
282
+ <XtButton size="small" type="danger" @click="del(row)">删除</XtButton>
283
+ </template>
284
+ </XtTable>
285
+ </template>
286
+
287
+ <script>
288
+ export default {
289
+ data() {
290
+ return {
291
+ tableData: [
292
+ { id: 1, name: '张三', status: 1 },
293
+ { id: 2, name: '李四', status: 0 }
294
+ ],
295
+ columns: [
296
+ { prop: 'id', label: 'ID' },
297
+ { prop: 'name', label: '姓名' },
298
+ {
299
+ prop: 'status',
300
+ label: '状态',
301
+ formatter: (row) => row.status === 1 ? '正常' : '禁用'
302
+ },
303
+ { label: '操作', slot: 'action' }
304
+ ]
305
+ }
306
+ },
307
+ methods: {
308
+ edit(row) {
309
+ console.log('编辑', row)
310
+ },
311
+ del(row) {
312
+ console.log('删除', row)
313
+ }
314
+ }
315
+ }
316
+ </script>
317
+ ```
318
+ :::
319
+
320
+ ## 事件
321
+
322
+ | 事件名 | 说明 | 参数 |
323
+ |--------|------|------|
324
+ | `selection-change` | 选择项变化 | `selectedRows` |
325
+ | `sort-change` | 排序变化 | `sortInfo` |
326
+ | `size-change` | 每页条数变化 | `size` |
327
+ | `page-change` | 当前页变化 | `page` |
328
+
329
+ ## 方法
330
+
331
+ | 方法名 | 说明 | 参数 |
332
+ |--------|------|------|
333
+ | `getSelection` | 获取选中行 | - |
334
+ | `clearSelection` | 清除选中 | - |
335
+ | `toggleRowSelection` | 切换行选中状态 | `row`, `selected` |
336
+ | `toggleRowsSelection` | 批量切换行选中状态 | `rows`, `selected` |
337
+ | `doLayout` | 重新计算布局 | - |
338
+
339
+ ## 插槽
340
+
341
+ | 插槽名 | 说明 |
342
+ |--------|------|
343
+ | `toolbar` | 工具栏区域(标题右侧) |
344
+ | `{slotName}` | 自定义列插槽(通过 column.slot 配置) |
@@ -0,0 +1,197 @@
1
+ ## XtTabs 标签页组件
2
+
3
+ 标签页组件,用于切换不同内容区域。
4
+
5
+ ## 基本用法
6
+
7
+ ::: demo 基本用法
8
+ ```vue
9
+ <template>
10
+ <XtTabs v-model="activeName">
11
+ <XtTabPane label="用户管理" name="first">用户管理内容</XtTabPane>
12
+ <XtTabPane label="配置管理" name="second">配置管理内容</XtTabPane>
13
+ <XtTabPane label="角色管理" name="third">角色管理内容</XtTabPane>
14
+ </XtTabs>
15
+ </template>
16
+
17
+ <script>
18
+ export default {
19
+ data() {
20
+ return {
21
+ activeName: 'first'
22
+ }
23
+ }
24
+ }
25
+ </script>
26
+ ```
27
+ :::
28
+
29
+ ## 属性说明
30
+
31
+ | 属性 | 类型 | 默认值 | 可选值 | 说明 |
32
+ |------|------|--------|--------|------|
33
+ | `value` / `v-model` | String | - | - | 绑定值,选中标签的 name |
34
+ | `type` | String | `card` | `card`、`border-card` | 标签页类型 |
35
+ | `tabPosition` | String | `top` | `top`、`right`、`bottom`、`left` | 标签位置 |
36
+ | `closable` | Boolean | `false` | - | 是否可关闭 |
37
+ | `addable` | Boolean | `false` | - | 是否可新增 |
38
+ | `editable` | Boolean | `false` | - | 是否可编辑(新增+关闭) |
39
+
40
+ ## 事件
41
+
42
+ | 事件名 | 说明 | 参数 |
43
+ |--------|------|------|
44
+ | `tab-click` | 点击标签时触发 | `tab` |
45
+ | `tab-remove` | 移除标签时触发 | `name` |
46
+ | `tab-add` | 添加标签时触发 | - |
47
+ | `edit` | 点击新增或删除按钮时触发 | `(targetName, action)` |
48
+
49
+ ## XtTabPane 子组件属性
50
+
51
+ | 属性 | 类型 | 默认值 | 说明 |
52
+ |------|------|--------|------|
53
+ | `label` | String | - | 标签页标题 |
54
+ | `name` | String / Number | - | 标签页名称,对应 value |
55
+ | `disabled` | Boolean | `false` | 是否禁用 |
56
+ | `closable` | Boolean | `true` | 是否可关闭 |
57
+
58
+ ## 示例
59
+
60
+ ### 不同类型
61
+
62
+ ::: demo 不同类型
63
+ ```vue
64
+ <template>
65
+ <div style="display: flex; flex-direction: column; gap: 16px;">
66
+ <XtTabs v-model="activeName">
67
+ <XtTabPane label="卡片式" name="first">卡片式标签页</XtTabPane>
68
+ <XtTabPane label="配置管理" name="second">配置管理内容</XtTabPane>
69
+ </XtTabs>
70
+ <XtTabs type="border-card" v-model="activeName">
71
+ <XtTabPane label="边框卡片" name="first">边框卡片式标签页</XtTabPane>
72
+ <XtTabPane label="配置管理" name="second">配置管理内容</XtTabPane>
73
+ </XtTabs>
74
+ </div>
75
+ </template>
76
+
77
+ <script>
78
+ export default {
79
+ data() {
80
+ return {
81
+ activeName: 'first'
82
+ }
83
+ }
84
+ }
85
+ </script>
86
+ ```
87
+ :::
88
+
89
+ ### 标签位置
90
+
91
+ ::: demo 标签位置
92
+ ```vue
93
+ <template>
94
+ <XtTabs v-model="activeName" tab-position="left">
95
+ <XtTabPane label="用户管理" name="first">用户管理内容</XtTabPane>
96
+ <XtTabPane label="配置管理" name="second">配置管理内容</XtTabPane>
97
+ <XtTabPane label="角色管理" name="third">角色管理内容</XtTabPane>
98
+ </XtTabs>
99
+ </template>
100
+
101
+ <script>
102
+ export default {
103
+ data() {
104
+ return {
105
+ activeName: 'first'
106
+ }
107
+ }
108
+ }
109
+ </script>
110
+ ```
111
+ :::
112
+
113
+ ### 可关闭
114
+
115
+ ::: demo 可关闭
116
+ ```vue
117
+ <template>
118
+ <XtTabs v-model="activeName" closable @tab-remove="handleRemove">
119
+ <XtTabPane label="用户管理" name="first">用户管理内容</XtTabPane>
120
+ <XtTabPane label="配置管理" name="second">配置管理内容</XtTabPane>
121
+ <XtTabPane label="角色管理" name="third">角色管理内容</XtTabPane>
122
+ </XtTabs>
123
+ </template>
124
+
125
+ <script>
126
+ export default {
127
+ data() {
128
+ return {
129
+ activeName: 'first'
130
+ }
131
+ },
132
+ methods: {
133
+ handleRemove(name) {
134
+ console.log('移除标签:', name)
135
+ }
136
+ }
137
+ }
138
+ </script>
139
+ ```
140
+ :::
141
+
142
+ ### 可编辑
143
+
144
+ ::: demo 可编辑
145
+ ```vue
146
+ <template>
147
+ <XtTabs v-model="activeName" editable @edit="handleEdit">
148
+ <XtTabPane label="用户管理" name="first">用户管理内容</XtTabPane>
149
+ <XtTabPane label="配置管理" name="second">配置管理内容</XtTabPane>
150
+ </XtTabs>
151
+ </template>
152
+
153
+ <script>
154
+ export default {
155
+ data() {
156
+ return {
157
+ activeName: 'first'
158
+ }
159
+ },
160
+ methods: {
161
+ handleEdit(targetName, action) {
162
+ console.log('操作:', action, '目标:', targetName)
163
+ }
164
+ }
165
+ }
166
+ </script>
167
+ ```
168
+ :::
169
+
170
+ ### 禁用标签
171
+
172
+ ::: demo 禁用标签
173
+ ```vue
174
+ <template>
175
+ <XtTabs v-model="activeName">
176
+ <XtTabPane label="用户管理" name="first">用户管理内容</XtTabPane>
177
+ <XtTabPane label="配置管理" name="second" disabled>配置管理内容</XtTabPane>
178
+ <XtTabPane label="角色管理" name="third">角色管理内容</XtTabPane>
179
+ </XtTabs>
180
+ </template>
181
+
182
+ <script>
183
+ export default {
184
+ data() {
185
+ return {
186
+ activeName: 'first'
187
+ }
188
+ }
189
+ }
190
+ </script>
191
+ ```
192
+ :::
193
+
194
+ ## 注意事项
195
+
196
+ - 每个 `XtTabPane` 必须设置 `name` 属性
197
+ - `v-model` 绑定的值必须与某个 `XtTabPane` 的 `name` 匹配