king-design-analyzer 1.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 (92) hide show
  1. package/README.md +151 -0
  2. package/components/affix.json +178 -0
  3. package/components/az.json +86 -0
  4. package/components/badge.json +162 -0
  5. package/components/billtypes.json +90 -0
  6. package/components/breadcrumb.json +220 -0
  7. package/components/button.json +511 -0
  8. package/components/card.json +334 -0
  9. package/components/cardcontent.json +144 -0
  10. package/components/carousel.json +207 -0
  11. package/components/cascader.json +373 -0
  12. package/components/checkbox.json +298 -0
  13. package/components/code.json +318 -0
  14. package/components/collapse.json +358 -0
  15. package/components/copy.json +220 -0
  16. package/components/datepicker.json +529 -0
  17. package/components/descriptions.json +309 -0
  18. package/components/dialog.json +460 -0
  19. package/components/divider.json +287 -0
  20. package/components/drawer.json +563 -0
  21. package/components/dropdown.json +407 -0
  22. package/components/editable.json +331 -0
  23. package/components/ellipsis.json +218 -0
  24. package/components/form.json +638 -0
  25. package/components/grid.json +377 -0
  26. package/components/icon.json +442 -0
  27. package/components/input.json +821 -0
  28. package/components/layoutcontent.json +210 -0
  29. package/components/menu.json +482 -0
  30. package/components/message.json +345 -0
  31. package/components/pagination.json +444 -0
  32. package/components/paginationplus.json +74 -0
  33. package/components/popover.json +456 -0
  34. package/components/progress.json +354 -0
  35. package/components/protable.json +132 -0
  36. package/components/radio.json +246 -0
  37. package/components/region.json +115 -0
  38. package/components/select.json +676 -0
  39. package/components/slider.json +422 -0
  40. package/components/spin.json +232 -0
  41. package/components/spinner.json +441 -0
  42. package/components/status.json +75 -0
  43. package/components/steps.json +292 -0
  44. package/components/switch.json +357 -0
  45. package/components/table.json +1057 -0
  46. package/components/tablecolumnid.json +217 -0
  47. package/components/tabs.json +363 -0
  48. package/components/tag.json +504 -0
  49. package/components/timepicker.json +447 -0
  50. package/components/tip.json +322 -0
  51. package/components/tooltip.json +416 -0
  52. package/components/tour.json +395 -0
  53. package/components/transfer.json +414 -0
  54. package/components/tree.json +480 -0
  55. package/components/treeselect.json +478 -0
  56. package/components/upload.json +499 -0
  57. package/components/virtuallist.json +178 -0
  58. package/dist/ast/index.d.mts +71 -0
  59. package/dist/ast/index.d.ts +71 -0
  60. package/dist/ast/index.js +15 -0
  61. package/dist/ast/index.mjs +2 -0
  62. package/dist/chunk-4BUGNH4F.mjs +62 -0
  63. package/dist/chunk-5H7N2A5X.mjs +1 -0
  64. package/dist/chunk-5IF32MBB.js +603 -0
  65. package/dist/chunk-ARWRNWDW.js +219 -0
  66. package/dist/chunk-C3L4IXJC.mjs +577 -0
  67. package/dist/chunk-GNVCC37B.js +102 -0
  68. package/dist/chunk-N4UIA6DN.js +68 -0
  69. package/dist/chunk-RAMIBZAU.mjs +216 -0
  70. package/dist/chunk-RNQHI7YG.js +64 -0
  71. package/dist/chunk-TB6BF5TJ.mjs +99 -0
  72. package/dist/chunk-UX7KGX45.mjs +66 -0
  73. package/dist/chunk-YTEYDSDW.js +2 -0
  74. package/dist/full/index.d.mts +29 -0
  75. package/dist/full/index.d.ts +29 -0
  76. package/dist/full/index.js +16 -0
  77. package/dist/full/index.mjs +3 -0
  78. package/dist/index.d.mts +5 -0
  79. package/dist/index.d.ts +5 -0
  80. package/dist/index.js +43 -0
  81. package/dist/index.mjs +6 -0
  82. package/dist/runtime/index.d.mts +14 -0
  83. package/dist/runtime/index.d.ts +14 -0
  84. package/dist/runtime/index.js +15 -0
  85. package/dist/runtime/index.mjs +2 -0
  86. package/dist/sfcCompiler-m51JOfWs.d.mts +22 -0
  87. package/dist/sfcCompiler-m51JOfWs.d.ts +22 -0
  88. package/dist/static/index.d.mts +14 -0
  89. package/dist/static/index.d.ts +14 -0
  90. package/dist/static/index.js +19 -0
  91. package/dist/static/index.mjs +2 -0
  92. package/package.json +88 -0
@@ -0,0 +1,217 @@
1
+ {
2
+ "id": "tablecolumnid",
3
+ "name": "TableColumnId",
4
+ "displayName": "表格ID列",
5
+ "category": "data",
6
+ "description": "用于表格中的ID列展示,支持复制功能和禁用状态。",
7
+ "importStatement": "import { TableColumnId } from '@ksyun-internal/versatile';",
8
+ "props": [
9
+ {
10
+ "name": "name",
11
+ "description": "显示的名称",
12
+ "type": {
13
+ "raw": "string",
14
+ "kind": "string"
15
+ },
16
+ "required": false,
17
+ "default": "\"\""
18
+ },
19
+ {
20
+ "name": "id",
21
+ "description": "显示的 id",
22
+ "type": {
23
+ "raw": "string",
24
+ "kind": "string"
25
+ },
26
+ "required": false,
27
+ "default": "\"\""
28
+ },
29
+ {
30
+ "name": "disabled",
31
+ "description": "是否禁止复制功能",
32
+ "type": {
33
+ "raw": "boolean",
34
+ "kind": "boolean"
35
+ },
36
+ "required": false,
37
+ "default": "false"
38
+ },
39
+ {
40
+ "name": "disabledClickName",
41
+ "description": "是否置灰名称",
42
+ "type": {
43
+ "raw": "boolean",
44
+ "kind": "boolean"
45
+ },
46
+ "required": false,
47
+ "default": "false"
48
+ },
49
+ {
50
+ "name": "disabledEditable",
51
+ "description": "是否置灰编辑按钮",
52
+ "type": {
53
+ "raw": "boolean",
54
+ "kind": "boolean"
55
+ },
56
+ "required": false,
57
+ "default": "false"
58
+ },
59
+ {
60
+ "name": "type",
61
+ "description": "样式模式",
62
+ "type": {
63
+ "raw": "\"link\" | \"none\"",
64
+ "kind": "union"
65
+ },
66
+ "required": false,
67
+ "default": "\"link\"",
68
+ "allowedValues": [
69
+ {
70
+ "value": "link",
71
+ "label": "链接样式",
72
+ "isDefault": true
73
+ },
74
+ {
75
+ "value": "none",
76
+ "label": "无样式"
77
+ }
78
+ ]
79
+ },
80
+ {
81
+ "name": "editable",
82
+ "description": "名称是否支持编辑",
83
+ "type": {
84
+ "raw": "boolean",
85
+ "kind": "boolean"
86
+ },
87
+ "required": false,
88
+ "default": "false"
89
+ },
90
+ {
91
+ "name": "editableTip",
92
+ "description": "编辑图标的 tooltip 提示,默认编辑",
93
+ "type": {
94
+ "raw": "string",
95
+ "kind": "string"
96
+ },
97
+ "required": false,
98
+ "default": "\"编辑\""
99
+ },
100
+ {
101
+ "name": "editableProps",
102
+ "description": "Editable 组件支持的属性",
103
+ "type": {
104
+ "raw": "Record<string, any>",
105
+ "kind": "object"
106
+ },
107
+ "required": false,
108
+ "default": "undefined"
109
+ },
110
+ {
111
+ "name": "to",
112
+ "description": "链接跳转路径,当 type 为 'link' 时生效,同 router-link 的 to 属性一致;当使用 to 属性进行跳转时,右键菜单栏才会出现 '在新标签页中打开'",
113
+ "type": {
114
+ "raw": "string | RouteLocationAsRelativeGeneric | RouteLocationAsPathGeneric",
115
+ "kind": "custom"
116
+ },
117
+ "required": false,
118
+ "default": "undefined"
119
+ },
120
+ {
121
+ "name": "target",
122
+ "description": "链接跳转目标,当 type 为 'link' 且使用 to 时生效,同 a 标签的 target 属性一致",
123
+ "type": {
124
+ "raw": "'_blank' | '_self' | '_parent' | '_top'",
125
+ "kind": "union"
126
+ },
127
+ "required": false,
128
+ "default": "'_self'",
129
+ "allowedValues": [
130
+ {
131
+ "value": "_blank",
132
+ "label": "新窗口打开"
133
+ },
134
+ {
135
+ "value": "_self",
136
+ "label": "当前窗口",
137
+ "isDefault": true
138
+ },
139
+ {
140
+ "value": "_parent",
141
+ "label": "父窗口"
142
+ },
143
+ {
144
+ "value": "_top",
145
+ "label": "顶层窗口"
146
+ }
147
+ ]
148
+ },
149
+ {
150
+ "name": "maxLines",
151
+ "description": "名称/ID 展示的最大行数,超出部分会被省略号代替",
152
+ "type": {
153
+ "raw": "number",
154
+ "kind": "number"
155
+ },
156
+ "required": false,
157
+ "default": "1"
158
+ }
159
+ ],
160
+ "events": [
161
+ {
162
+ "name": "click:name",
163
+ "vueEventName": "@click:name",
164
+ "description": "当点击名称时触发",
165
+ "payload": [
166
+ {
167
+ "name": "value",
168
+ "type": "string",
169
+ "description": "名称的值"
170
+ }
171
+ ],
172
+ "usageExample": "<TableColumnId @click:name=\"handleClickName\" />"
173
+ },
174
+ {
175
+ "name": "click:id",
176
+ "vueEventName": "@click:id",
177
+ "description": "当点击 id 时触发",
178
+ "payload": [
179
+ {
180
+ "name": "value",
181
+ "type": "string",
182
+ "description": "id 的值"
183
+ }
184
+ ],
185
+ "usageExample": "<TableColumnId @click:id=\"handleClickId\" />"
186
+ },
187
+ {
188
+ "name": "change:name",
189
+ "vueEventName": "@change:name",
190
+ "description": "当编辑名称,名称内容改变时触发",
191
+ "payload": [
192
+ {
193
+ "name": "newValue",
194
+ "type": "string",
195
+ "description": "新的名称值"
196
+ },
197
+ {
198
+ "name": "oldValue",
199
+ "type": "string",
200
+ "description": "旧的名称值"
201
+ }
202
+ ],
203
+ "usageExample": "<TableColumnId @change:name=\"(newVal, oldVal) => handleNameChange(newVal, oldVal)\" />"
204
+ }
205
+ ],
206
+ "methods": [],
207
+ "examples": [],
208
+ "searchKeywords": [
209
+ "id",
210
+ "column",
211
+ "table",
212
+ "表格列"
213
+ ],
214
+ "useCases": [
215
+ "资源列表ID列展示"
216
+ ]
217
+ }
@@ -0,0 +1,363 @@
1
+ {
2
+ "id": "tabs",
3
+ "name": "Tabs",
4
+ "displayName": "选项卡",
5
+ "category": "navigation",
6
+ "description": "选项卡组件,用于页面内容区域的分组和切换。支持多种样式、可关闭选项卡、切换前拦截等功能。注意:Tabs 仅提供头部样式,内容区域需要使用 v-if 自行切换。",
7
+ "importStatement": "import { Tabs, Tab } from '@king-design/vue';",
8
+ "props": [
9
+ {
10
+ "name": "value",
11
+ "description": "被选中的选项卡,可用 v-model 双向绑定",
12
+ "type": {
13
+ "raw": "any",
14
+ "kind": "custom"
15
+ },
16
+ "required": false,
17
+ "default": "undefined",
18
+ "usageExample": "<Tabs v-model=\"activeTab\">"
19
+ },
20
+ {
21
+ "name": "type",
22
+ "description": "选项卡类型",
23
+ "type": {
24
+ "raw": "\"default\" | \"card\" | \"flat-card\"",
25
+ "kind": "union",
26
+ "unionTypes": [
27
+ "default",
28
+ "card",
29
+ "flat-card"
30
+ ]
31
+ },
32
+ "required": false,
33
+ "default": "\"default\"",
34
+ "allowedValues": [
35
+ {
36
+ "value": "default",
37
+ "label": "默认样式",
38
+ "isDefault": true
39
+ },
40
+ {
41
+ "value": "card",
42
+ "label": "卡片样式"
43
+ },
44
+ {
45
+ "value": "flat-card",
46
+ "label": "扁平卡片样式"
47
+ }
48
+ ],
49
+ "usageExample": "<Tabs type=\"card\">"
50
+ },
51
+ {
52
+ "name": "size",
53
+ "description": "选项卡尺寸",
54
+ "type": {
55
+ "raw": "\"large\" | \"default\" | \"small\" | \"mini\"",
56
+ "kind": "union",
57
+ "unionTypes": [
58
+ "large",
59
+ "default",
60
+ "small",
61
+ "mini"
62
+ ]
63
+ },
64
+ "required": false,
65
+ "default": "\"default\"",
66
+ "allowedValues": [
67
+ {
68
+ "value": "large",
69
+ "label": "大尺寸"
70
+ },
71
+ {
72
+ "value": "default",
73
+ "label": "默认尺寸",
74
+ "isDefault": true
75
+ },
76
+ {
77
+ "value": "small",
78
+ "label": "小尺寸"
79
+ },
80
+ {
81
+ "value": "mini",
82
+ "label": "迷你尺寸"
83
+ }
84
+ ],
85
+ "usageExample": "<Tabs size=\"small\">"
86
+ },
87
+ {
88
+ "name": "vertical",
89
+ "description": "是否垂直排列",
90
+ "type": {
91
+ "raw": "boolean",
92
+ "kind": "boolean"
93
+ },
94
+ "required": false,
95
+ "default": "undefined",
96
+ "usageExample": "<Tabs vertical>"
97
+ },
98
+ {
99
+ "name": "closable",
100
+ "description": "是否展示选项卡关闭按钮",
101
+ "type": {
102
+ "raw": "boolean",
103
+ "kind": "boolean"
104
+ },
105
+ "required": false,
106
+ "default": "false",
107
+ "usageExample": "<Tabs closable @remove=\"handleRemove\">"
108
+ },
109
+ {
110
+ "name": "beforeChange",
111
+ "description": "切换选项卡之前的拦截函数,返回 false 阻止切换,支持异步",
112
+ "type": {
113
+ "raw": "(value: any) => boolean | Promise<boolean>",
114
+ "kind": "function",
115
+ "functionSignature": "(value: any) => boolean | Promise<boolean>"
116
+ },
117
+ "required": false,
118
+ "default": "undefined",
119
+ "usageExample": "<Tabs :beforeChange=\"handleBeforeChange\">"
120
+ }
121
+ ],
122
+ "events": [
123
+ {
124
+ "name": "remove",
125
+ "vueEventName": "@remove",
126
+ "description": "关闭选项卡时触发",
127
+ "payload": [
128
+ {
129
+ "name": "value",
130
+ "type": "any",
131
+ "description": "被关闭选项卡的 value"
132
+ }
133
+ ],
134
+ "usageExample": "<Tabs @remove=\"handleRemove\">",
135
+ "handlerExample": "const handleRemove = (value: string) => {\n const index = tabs.value.indexOf(value);\n tabs.value.splice(index, 1);\n};"
136
+ }
137
+ ],
138
+ "methods": [],
139
+ "subComponents": [
140
+ {
141
+ "name": "Tab",
142
+ "description": "选项卡项组件",
143
+ "props": [
144
+ {
145
+ "name": "value",
146
+ "description": "选项卡的值,用于标识和选中",
147
+ "type": {
148
+ "raw": "any",
149
+ "kind": "custom"
150
+ },
151
+ "required": true,
152
+ "usageExample": "<Tab value=\"home\">首页</Tab>"
153
+ },
154
+ {
155
+ "name": "disabled",
156
+ "description": "是否禁用该选项卡",
157
+ "type": {
158
+ "raw": "boolean",
159
+ "kind": "boolean"
160
+ },
161
+ "required": false,
162
+ "default": "false",
163
+ "usageExample": "<Tab value=\"tab\" disabled>禁用</Tab>"
164
+ },
165
+ {
166
+ "name": "to",
167
+ "description": "点击标签的跳转地址",
168
+ "type": {
169
+ "raw": "string",
170
+ "kind": "string"
171
+ },
172
+ "required": false,
173
+ "default": "undefined",
174
+ "usageExample": "<Tab value=\"home\" to=\"/home\">首页</Tab>"
175
+ },
176
+ {
177
+ "name": "closable",
178
+ "description": "是否展示该选项卡的关闭按钮",
179
+ "type": {
180
+ "raw": "boolean",
181
+ "kind": "boolean"
182
+ },
183
+ "required": false,
184
+ "default": "false",
185
+ "usageExample": "<Tab value=\"tab\" closable>可关闭</Tab>"
186
+ }
187
+ ],
188
+ "events": [
189
+ {
190
+ "name": "click",
191
+ "vueEventName": "@click",
192
+ "description": "Tab 点击事件,发生在 value 改变之后,disabled 状态不触发",
193
+ "payload": [
194
+ {
195
+ "name": "e",
196
+ "type": "MouseEvent",
197
+ "description": "原生鼠标事件"
198
+ }
199
+ ],
200
+ "usageExample": "<Tab @click=\"handleClick\">",
201
+ "handlerExample": "const handleClick = (e: MouseEvent) => {\n console.log('Tab 被点击');\n};"
202
+ }
203
+ ]
204
+ }
205
+ ],
206
+ "examples": [
207
+ {
208
+ "id": "tabs_basic",
209
+ "title": "基础用法",
210
+ "description": "基本的选项卡,配合 v-if 切换内容",
211
+ "difficulty": "easy",
212
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Tabs, Tab } from '@king-design/vue';\n\nconst activeTab = ref('home');\n</script>\n<template>\n <Tabs v-model=\"activeTab\">\n <Tab value=\"home\">首页</Tab>\n <Tab value=\"products\">产品</Tab>\n <Tab value=\"about\">关于</Tab>\n </Tabs>\n \n <div v-if=\"activeTab === 'home'\">首页内容</div>\n <div v-else-if=\"activeTab === 'products'\">产品内容</div>\n <div v-else-if=\"activeTab === 'about'\">关于内容</div>\n</template>",
213
+ "tags": [
214
+ "basic"
215
+ ],
216
+ "usedProps": [
217
+ "value"
218
+ ],
219
+ "usedEvents": [],
220
+ "usedMethods": [],
221
+ "scenario": "创建基本的选项卡导航"
222
+ },
223
+ {
224
+ "id": "tabs_card",
225
+ "title": "卡片式选项卡",
226
+ "description": "卡片样式的选项卡",
227
+ "difficulty": "easy",
228
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Tabs, Tab } from '@king-design/vue';\n\nconst activeTab = ref('tab1');\n</script>\n<template>\n <Tabs v-model=\"activeTab\" type=\"card\">\n <Tab value=\"tab1\">选项卡1</Tab>\n <Tab value=\"tab2\">选项卡2</Tab>\n <Tab value=\"tab3\">选项卡3</Tab>\n </Tabs>\n</template>",
229
+ "tags": [
230
+ "card",
231
+ "type"
232
+ ],
233
+ "usedProps": [
234
+ "value",
235
+ "type"
236
+ ],
237
+ "usedEvents": [],
238
+ "usedMethods": [],
239
+ "scenario": "使用卡片样式的选项卡"
240
+ },
241
+ {
242
+ "id": "tabs_closable",
243
+ "title": "可关闭选项卡",
244
+ "description": "支持关闭选项卡",
245
+ "difficulty": "medium",
246
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Tabs, Tab } from '@king-design/vue';\n\nconst activeTab = ref('tab1');\nconst tabs = ref(['tab1', 'tab2', 'tab3']);\n\nconst handleRemove = (value: string) => {\n const index = tabs.value.indexOf(value);\n tabs.value.splice(index, 1);\n if (activeTab.value === value && tabs.value.length > 0) {\n activeTab.value = tabs.value[0];\n }\n};\n</script>\n<template>\n <Tabs v-model=\"activeTab\" closable @remove=\"handleRemove\">\n <Tab v-for=\"tab in tabs\" :key=\"tab\" :value=\"tab\">{{ tab }}</Tab>\n </Tabs>\n</template>",
247
+ "tags": [
248
+ "closable",
249
+ "remove"
250
+ ],
251
+ "usedProps": [
252
+ "value",
253
+ "closable"
254
+ ],
255
+ "usedEvents": [
256
+ "remove"
257
+ ],
258
+ "usedMethods": [],
259
+ "scenario": "创建可关闭的选项卡"
260
+ },
261
+ {
262
+ "id": "tabs_disabled",
263
+ "title": "禁用选项卡",
264
+ "description": "禁用某个选项卡",
265
+ "difficulty": "easy",
266
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Tabs, Tab } from '@king-design/vue';\n\nconst activeTab = ref('tab1');\n</script>\n<template>\n <Tabs v-model=\"activeTab\">\n <Tab value=\"tab1\">可用</Tab>\n <Tab value=\"tab2\" disabled>禁用</Tab>\n <Tab value=\"tab3\">可用</Tab>\n </Tabs>\n</template>",
267
+ "tags": [
268
+ "disabled"
269
+ ],
270
+ "usedProps": [
271
+ "value",
272
+ "disabled"
273
+ ],
274
+ "usedEvents": [],
275
+ "usedMethods": [],
276
+ "scenario": "禁用某个选项卡"
277
+ },
278
+ {
279
+ "id": "tabs_vertical",
280
+ "title": "垂直选项卡",
281
+ "description": "垂直排列的选项卡",
282
+ "difficulty": "easy",
283
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Tabs, Tab } from '@king-design/vue';\n\nconst activeTab = ref('tab1');\n</script>\n<template>\n <div style=\"display: flex;\">\n <Tabs v-model=\"activeTab\" vertical>\n <Tab value=\"tab1\">选项1</Tab>\n <Tab value=\"tab2\">选项2</Tab>\n <Tab value=\"tab3\">选项3</Tab>\n </Tabs>\n <div style=\"padding: 16px;\">\n 内容区域: {{ activeTab }}\n </div>\n </div>\n</template>",
284
+ "tags": [
285
+ "vertical"
286
+ ],
287
+ "usedProps": [
288
+ "value",
289
+ "vertical"
290
+ ],
291
+ "usedEvents": [],
292
+ "usedMethods": [],
293
+ "scenario": "创建垂直排列的选项卡"
294
+ },
295
+ {
296
+ "id": "tabs_router",
297
+ "title": "路由导航",
298
+ "description": "配合路由使用的选项卡",
299
+ "difficulty": "medium",
300
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Tabs, Tab } from '@king-design/vue';\n\nconst activeTab = ref('home');\n</script>\n<template>\n <Tabs v-model=\"activeTab\">\n <Tab value=\"home\" to=\"/\">首页</Tab>\n <Tab value=\"products\" to=\"/products\">产品</Tab>\n <Tab value=\"docs\" to=\"/docs\">文档</Tab>\n </Tabs>\n</template>",
301
+ "tags": [
302
+ "router",
303
+ "to"
304
+ ],
305
+ "usedProps": [
306
+ "value",
307
+ "to"
308
+ ],
309
+ "usedEvents": [],
310
+ "usedMethods": [],
311
+ "scenario": "使用 to 属性进行路由导航"
312
+ }
313
+ ],
314
+ "commonMistakes": [
315
+ {
316
+ "id": "tabs_no_content",
317
+ "description": "期望 Tabs 自动切换内容",
318
+ "wrongCode": "<Tabs v-model=\"activeTab\">\n <Tab value=\"home\">首页内容</Tab> <!-- 期望显示内容 -->\n</Tabs>",
319
+ "correctCode": "<Tabs v-model=\"activeTab\">\n <Tab value=\"home\">首页</Tab>\n</Tabs>\n<div v-if=\"activeTab === 'home'\">首页内容</div>",
320
+ "explanation": "Tabs 仅提供头部样式,内容区域需要使用 v-if 自行切换",
321
+ "relatedProps": []
322
+ },
323
+ {
324
+ "id": "tabs_missing_value",
325
+ "description": "Tab 未设置 value",
326
+ "wrongCode": "<Tab>选项卡</Tab>",
327
+ "correctCode": "<Tab value=\"tab1\">选项卡</Tab>",
328
+ "explanation": "每个 Tab 必须设置 value 用于标识",
329
+ "relatedProps": [
330
+ "value"
331
+ ]
332
+ },
333
+ {
334
+ "id": "tabs_closable_remove",
335
+ "description": "使用 closable 但未处理 remove 事件",
336
+ "wrongCode": "<Tabs closable> <!-- 点击关闭不会真正移除 -->",
337
+ "correctCode": "<Tabs closable @remove=\"handleRemove\">",
338
+ "explanation": "closable 只显示关闭按钮,需要监听 remove 事件手动移除选项卡",
339
+ "relatedProps": [
340
+ "closable"
341
+ ]
342
+ }
343
+ ],
344
+ "searchKeywords": [
345
+ "选项卡",
346
+ "tabs",
347
+ "标签页",
348
+ "导航",
349
+ "切换",
350
+ "tab"
351
+ ],
352
+ "useCases": [
353
+ "页面内容分区",
354
+ "表单分步",
355
+ "配置项分组",
356
+ "数据视图切换",
357
+ "详情页多维度展示"
358
+ ],
359
+ "relatedComponents": [
360
+ "Tab",
361
+ "Menu"
362
+ ]
363
+ }