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,480 @@
1
+ {
2
+ "id": "tree",
3
+ "name": "Tree",
4
+ "displayName": "树形控件",
5
+ "category": "data-display",
6
+ "description": "树形控件组件,用于展示多层级数据结构。支持节点展开/收起、复选框选择、节点拖拽、异步加载、节点过滤等功能。",
7
+ "importStatement": "import { Tree } from '@king-design/vue';",
8
+ "props": [
9
+ {
10
+ "name": "data",
11
+ "description": "要渲染的树形数据",
12
+ "type": {
13
+ "raw": "TreeDataItem[]",
14
+ "kind": "array"
15
+ },
16
+ "required": true,
17
+ "usageExample": "<Tree :data=\"treeData\">"
18
+ },
19
+ {
20
+ "name": "expandedKeys",
21
+ "description": "指定展开的节点 key 数组,可用 v-model:expandedKeys",
22
+ "type": {
23
+ "raw": "K[]",
24
+ "kind": "array"
25
+ },
26
+ "required": false,
27
+ "default": "undefined",
28
+ "usageExample": "<Tree v-model:expandedKeys=\"expandedKeys\">"
29
+ },
30
+ {
31
+ "name": "defaultExpandAll",
32
+ "description": "是否默认展开所有节点",
33
+ "type": {
34
+ "raw": "boolean",
35
+ "kind": "boolean"
36
+ },
37
+ "required": false,
38
+ "default": "false",
39
+ "usageExample": "<Tree defaultExpandAll>"
40
+ },
41
+ {
42
+ "name": "checkbox",
43
+ "description": "是否展示复选框",
44
+ "type": {
45
+ "raw": "boolean",
46
+ "kind": "boolean"
47
+ },
48
+ "required": false,
49
+ "default": "false",
50
+ "usageExample": "<Tree checkbox>"
51
+ },
52
+ {
53
+ "name": "checkedKeys",
54
+ "description": "指定勾选的节点 key 数组,可用 v-model:checkedKeys",
55
+ "type": {
56
+ "raw": "K[]",
57
+ "kind": "array"
58
+ },
59
+ "required": false,
60
+ "default": "undefined",
61
+ "usageExample": "<Tree checkbox v-model:checkedKeys=\"checkedKeys\">"
62
+ },
63
+ {
64
+ "name": "uncorrelated",
65
+ "description": "父子 checkbox 选中状态是否互不关联",
66
+ "type": {
67
+ "raw": "boolean",
68
+ "kind": "boolean"
69
+ },
70
+ "required": false,
71
+ "default": "false",
72
+ "usageExample": "<Tree checkbox uncorrelated>"
73
+ },
74
+ {
75
+ "name": "selectable",
76
+ "description": "节点是否可选中",
77
+ "type": {
78
+ "raw": "boolean",
79
+ "kind": "boolean"
80
+ },
81
+ "required": false,
82
+ "default": "true",
83
+ "usageExample": "<Tree :selectable=\"false\">"
84
+ },
85
+ {
86
+ "name": "selectedKeys",
87
+ "description": "指定选中的节点 key 数组,可用 v-model:selectedKeys",
88
+ "type": {
89
+ "raw": "K[]",
90
+ "kind": "array"
91
+ },
92
+ "required": false,
93
+ "default": "undefined",
94
+ "usageExample": "<Tree v-model:selectedKeys=\"selectedKeys\">"
95
+ },
96
+ {
97
+ "name": "multiple",
98
+ "description": "selectedKeys 是否支持多选",
99
+ "type": {
100
+ "raw": "boolean",
101
+ "kind": "boolean"
102
+ },
103
+ "required": false,
104
+ "default": "false",
105
+ "usageExample": "<Tree multiple>"
106
+ },
107
+ {
108
+ "name": "filter",
109
+ "description": "节点过滤函数,返回 true 则展示,否则过滤掉",
110
+ "type": {
111
+ "raw": "(data: TreeDataItem, node: TreeNode) => boolean",
112
+ "kind": "function",
113
+ "functionSignature": "(data: TreeDataItem, node: TreeNode) => boolean"
114
+ },
115
+ "required": false,
116
+ "default": "undefined",
117
+ "usageExample": "<Tree :filter=\"filterFn\">"
118
+ },
119
+ {
120
+ "name": "load",
121
+ "description": "异步加载节点数据的函数",
122
+ "type": {
123
+ "raw": "(node: TreeNode) => Promise<void> | void",
124
+ "kind": "function",
125
+ "functionSignature": "(node: TreeNode) => Promise<void> | void"
126
+ },
127
+ "required": false,
128
+ "default": "undefined",
129
+ "usageExample": "<Tree :load=\"loadData\">"
130
+ },
131
+ {
132
+ "name": "showLine",
133
+ "description": "是否展示左侧对齐线",
134
+ "type": {
135
+ "raw": "boolean",
136
+ "kind": "boolean"
137
+ },
138
+ "required": false,
139
+ "default": "true",
140
+ "usageExample": "<Tree :showLine=\"false\">"
141
+ },
142
+ {
143
+ "name": "draggable",
144
+ "description": "是否支持拖拽",
145
+ "type": {
146
+ "raw": "boolean",
147
+ "kind": "boolean"
148
+ },
149
+ "required": false,
150
+ "default": "false",
151
+ "usageExample": "<Tree draggable>"
152
+ },
153
+ {
154
+ "name": "allowDrag",
155
+ "description": "指定哪些节点可拖拽",
156
+ "type": {
157
+ "raw": "(node: TreeNode) => boolean",
158
+ "kind": "function",
159
+ "functionSignature": "(node: TreeNode) => boolean"
160
+ },
161
+ "required": false,
162
+ "default": "undefined",
163
+ "usageExample": "<Tree draggable :allowDrag=\"allowDragFn\">"
164
+ },
165
+ {
166
+ "name": "allowDrop",
167
+ "description": "指定哪些节点可以插入子节点",
168
+ "type": {
169
+ "raw": "(node: TreeNode, srcNode: TreeNode) => boolean",
170
+ "kind": "function",
171
+ "functionSignature": "(node: TreeNode, srcNode: TreeNode) => boolean"
172
+ },
173
+ "required": false,
174
+ "default": "undefined",
175
+ "usageExample": "<Tree draggable :allowDrop=\"allowDropFn\">"
176
+ }
177
+ ],
178
+ "events": [
179
+ {
180
+ "name": "dragend",
181
+ "vueEventName": "@dragend",
182
+ "description": "拖拽完成时触发",
183
+ "payload": [
184
+ {
185
+ "name": "data",
186
+ "type": "DragEndData",
187
+ "description": "拖拽数据,包含 srcNode、toNode、mode"
188
+ }
189
+ ],
190
+ "usageExample": "<Tree @dragend=\"handleDragEnd\">",
191
+ "handlerExample": "const handleDragEnd = (data) => {\n console.log(`${data.srcNode.data.label} -> ${data.toNode.data.label}`);\n};"
192
+ },
193
+ {
194
+ "name": "denydrag",
195
+ "vueEventName": "@denydrag",
196
+ "description": "拖拽不允许拖拽的节点时触发",
197
+ "payload": [
198
+ {
199
+ "name": "node",
200
+ "type": "TreeNode",
201
+ "description": "被拒绝拖拽的节点"
202
+ }
203
+ ],
204
+ "usageExample": "<Tree @denydrag=\"handleDenyDrag\">"
205
+ },
206
+ {
207
+ "name": "denydrop",
208
+ "vueEventName": "@denydrop",
209
+ "description": "插入到不允许插入的节点时触发",
210
+ "payload": [
211
+ {
212
+ "name": "node",
213
+ "type": "TreeNode",
214
+ "description": "目标节点"
215
+ },
216
+ {
217
+ "name": "srcNode",
218
+ "type": "TreeNode",
219
+ "description": "源节点"
220
+ },
221
+ {
222
+ "name": "mode",
223
+ "type": "TreeMode",
224
+ "description": "插入模式"
225
+ }
226
+ ],
227
+ "usageExample": "<Tree @denydrop=\"handleDenyDrop\">"
228
+ }
229
+ ],
230
+ "methods": [
231
+ {
232
+ "name": "getCheckedData",
233
+ "description": "获取勾选的节点数据",
234
+ "arguments": [
235
+ {
236
+ "name": "leafOnly",
237
+ "type": "boolean",
238
+ "description": "是否只返回叶子节点,默认 false"
239
+ }
240
+ ],
241
+ "returnType": "TreeDataItem[]",
242
+ "usageExample": "const checkedData = treeRef.value?.getCheckedData();"
243
+ },
244
+ {
245
+ "name": "getSelectedData",
246
+ "description": "获取选中的节点数据",
247
+ "returnType": "TreeDataItem[]",
248
+ "usageExample": "const selectedData = treeRef.value?.getSelectedData();"
249
+ },
250
+ {
251
+ "name": "expand",
252
+ "description": "展开指定节点",
253
+ "arguments": [
254
+ {
255
+ "name": "key",
256
+ "type": "K",
257
+ "description": "要展开的节点 key"
258
+ }
259
+ ],
260
+ "returnType": "void",
261
+ "usageExample": "treeRef.value?.expand('node1');"
262
+ },
263
+ {
264
+ "name": "shrink",
265
+ "description": "收起指定节点",
266
+ "arguments": [
267
+ {
268
+ "name": "key",
269
+ "type": "K",
270
+ "description": "要收起的节点 key"
271
+ }
272
+ ],
273
+ "returnType": "void",
274
+ "usageExample": "treeRef.value?.shrink('node1');"
275
+ },
276
+ {
277
+ "name": "expandAll",
278
+ "description": "展开所有节点",
279
+ "returnType": "void",
280
+ "usageExample": "treeRef.value?.expandAll();"
281
+ },
282
+ {
283
+ "name": "getNodes",
284
+ "description": "返回一级节点数组",
285
+ "returnType": "TreeNode[]",
286
+ "usageExample": "const nodes = treeRef.value?.getNodes();"
287
+ }
288
+ ],
289
+ "slots": [
290
+ {
291
+ "name": "label",
292
+ "description": "自定义节点渲染内容"
293
+ }
294
+ ],
295
+ "typeDefinitions": [
296
+ {
297
+ "name": "TreeDataItem",
298
+ "definition": "type TreeDataItem<K> = {\n label?: string | VNode\n key?: K\n disabled?: boolean\n loaded?: boolean\n children?: TreeDataItem<K>[]\n}",
299
+ "description": "树节点数据项类型"
300
+ },
301
+ {
302
+ "name": "TreeNode",
303
+ "definition": "class TreeNode<K> {\n data: TreeDataItem<K>\n parent: TreeNode<K> | null\n key: K\n checked: boolean\n indeterminate: boolean\n children: TreeNode<K>[] | null\n loaded: boolean | null | undefined\n filter: boolean\n}",
304
+ "description": "树节点对象类型"
305
+ },
306
+ {
307
+ "name": "TreeMode",
308
+ "definition": "enum TreeMode {\n Before,\n After,\n Inner\n}",
309
+ "description": "拖拽插入模式"
310
+ }
311
+ ],
312
+ "examples": [
313
+ {
314
+ "id": "tree_basic",
315
+ "title": "基础用法",
316
+ "description": "基本的树形控件",
317
+ "difficulty": "easy",
318
+ "code": "<script setup lang=\"ts\">\nimport { reactive } from 'vue';\nimport { Tree } from '@king-design/vue';\n\nconst data = reactive([\n {\n label: '一级节点-1',\n key: '1',\n children: [\n {\n label: '二级节点-1.1',\n key: '1-1',\n children: [{ label: '三级节点-1.1.1', key: '1-1-1' }]\n }\n ]\n },\n {\n label: '一级节点-2',\n key: '2',\n children: [\n { label: '二级节点-2.1', key: '2-1' },\n { label: '二级节点-2.2', key: '2-2', disabled: true }\n ]\n }\n]);\n</script>\n<template>\n <Tree :data=\"data\" :expandedKeys=\"['1', '2']\" />\n</template>",
319
+ "tags": [
320
+ "basic"
321
+ ],
322
+ "usedProps": [
323
+ "data",
324
+ "expandedKeys"
325
+ ],
326
+ "usedEvents": [],
327
+ "usedMethods": [],
328
+ "scenario": "创建一个基本的树形控件"
329
+ },
330
+ {
331
+ "id": "tree_checkbox",
332
+ "title": "带复选框",
333
+ "description": "带复选框的树形控件",
334
+ "difficulty": "medium",
335
+ "code": "<script setup lang=\"ts\">\nimport { ref, reactive } from 'vue';\nimport { Tree, Button } from '@king-design/vue';\n\nconst data = reactive([\n {\n label: '父节点',\n key: 'parent',\n children: [\n { label: '子节点1', key: 'child1' },\n { label: '子节点2', key: 'child2' },\n { label: '子节点3', key: 'child3' }\n ]\n }\n]);\nconst checkedKeys = ref<string[]>(['child1']);\nconst tree = ref<InstanceType<typeof Tree>>();\n\nconst getChecked = () => {\n console.log(tree.value?.getCheckedData());\n};\n</script>\n<template>\n <div>\n <Button @click=\"getChecked\">获取选中数据</Button>\n <Tree ref=\"tree\" :data=\"data\" checkbox v-model:checkedKeys=\"checkedKeys\" :expandedKeys=\"['parent']\" />\n </div>\n</template>",
336
+ "tags": [
337
+ "checkbox",
338
+ "checked"
339
+ ],
340
+ "usedProps": [
341
+ "data",
342
+ "checkbox",
343
+ "checkedKeys",
344
+ "expandedKeys"
345
+ ],
346
+ "usedEvents": [],
347
+ "usedMethods": [
348
+ "getCheckedData"
349
+ ],
350
+ "scenario": "创建带复选框的树形控件"
351
+ },
352
+ {
353
+ "id": "tree_expand_all",
354
+ "title": "默认展开全部",
355
+ "description": "默认展开所有节点",
356
+ "difficulty": "easy",
357
+ "code": "<script setup lang=\"ts\">\nimport { reactive } from 'vue';\nimport { Tree } from '@king-design/vue';\n\nconst data = reactive([\n {\n label: '一级节点',\n key: '1',\n children: [\n {\n label: '二级节点',\n key: '1-1',\n children: [{ label: '三级节点', key: '1-1-1' }]\n }\n ]\n }\n]);\n</script>\n<template>\n <Tree :data=\"data\" defaultExpandAll />\n</template>",
358
+ "tags": [
359
+ "defaultExpandAll"
360
+ ],
361
+ "usedProps": [
362
+ "data",
363
+ "defaultExpandAll"
364
+ ],
365
+ "usedEvents": [],
366
+ "usedMethods": [],
367
+ "scenario": "默认展开所有节点"
368
+ },
369
+ {
370
+ "id": "tree_async_load",
371
+ "title": "异步加载",
372
+ "description": "异步加载子节点",
373
+ "difficulty": "medium",
374
+ "code": "<script setup lang=\"ts\">\nimport { reactive } from 'vue';\nimport { Tree } from '@king-design/vue';\nimport type { TreeNode } from '@king-design/vue';\n\nconst data = reactive([\n { label: '父节点', key: 'parent', children: [] }\n]);\n\nconst loadData = (node: TreeNode<string>) => {\n return new Promise<void>(resolve => {\n setTimeout(() => {\n node.data.children = [\n { label: '异步加载的节点1', key: 'async1' },\n { label: '异步加载的节点2', key: 'async2', children: [] }\n ];\n resolve();\n }, 1000);\n });\n};\n</script>\n<template>\n <Tree :data=\"data\" :load=\"loadData\" />\n</template>",
375
+ "tags": [
376
+ "load",
377
+ "async"
378
+ ],
379
+ "usedProps": [
380
+ "data",
381
+ "load"
382
+ ],
383
+ "usedEvents": [],
384
+ "usedMethods": [],
385
+ "scenario": "异步加载子节点数据"
386
+ },
387
+ {
388
+ "id": "tree_filter",
389
+ "title": "节点过滤",
390
+ "description": "搜索过滤节点",
391
+ "difficulty": "medium",
392
+ "code": "<script setup lang=\"ts\">\nimport { ref, reactive } from 'vue';\nimport { Tree, Input } from '@king-design/vue';\nimport type { TreeDataItem } from '@king-design/vue';\n\nconst keywords = ref('');\nconst data = reactive([\n {\n label: '文档',\n key: '1',\n children: [\n { label: '产品介绍', key: '1-1' },\n { label: '使用指南', key: '1-2' }\n ]\n },\n {\n label: '代码',\n key: '2',\n children: [\n { label: '组件代码', key: '2-1' },\n { label: '工具函数', key: '2-2' }\n ]\n }\n]);\n\nconst filter = (item: TreeDataItem<string>) => {\n if (!keywords.value) return true;\n return item.label?.toString().includes(keywords.value);\n};\n</script>\n<template>\n <div>\n <Input v-model=\"keywords\" placeholder=\"输入关键字过滤\" />\n <Tree :data=\"data\" :filter=\"filter\" defaultExpandAll />\n </div>\n</template>",
393
+ "tags": [
394
+ "filter",
395
+ "search"
396
+ ],
397
+ "usedProps": [
398
+ "data",
399
+ "filter",
400
+ "defaultExpandAll"
401
+ ],
402
+ "usedEvents": [],
403
+ "usedMethods": [],
404
+ "scenario": "搜索过滤树节点"
405
+ },
406
+ {
407
+ "id": "tree_draggable",
408
+ "title": "可拖拽",
409
+ "description": "支持拖拽的树形控件",
410
+ "difficulty": "hard",
411
+ "code": "<script setup lang=\"ts\">\nimport { reactive } from 'vue';\nimport { Tree, Message } from '@king-design/vue';\nimport type { TreeNode, TreeDragEndData } from '@king-design/vue';\n\nconst data = reactive([\n { label: '节点1', key: 'node1' },\n { label: '节点2', key: 'node2', children: [{ label: '子节点', key: 'child' }] },\n { label: '节点3', key: 'node3' }\n]);\nconst expandedKeys = reactive<string[]>(['node2']);\n\nconst onDragEnd = (dragData: TreeDragEndData<string>) => {\n Message.success(`拖拽完成: ${dragData.srcNode.data.label} -> ${dragData.toNode.data.label}`);\n};\n\nconst allowDrag = (node: TreeNode<string>) => node.key !== 'node1';\n</script>\n<template>\n <Tree \n v-model:data=\"data\" \n v-model:expandedKeys=\"expandedKeys\"\n draggable \n :allowDrag=\"allowDrag\" \n @dragend=\"onDragEnd\" \n />\n</template>",
412
+ "tags": [
413
+ "draggable",
414
+ "drag"
415
+ ],
416
+ "usedProps": [
417
+ "data",
418
+ "expandedKeys",
419
+ "draggable",
420
+ "allowDrag"
421
+ ],
422
+ "usedEvents": [
423
+ "dragend"
424
+ ],
425
+ "usedMethods": [],
426
+ "scenario": "创建可拖拽的树形控件"
427
+ }
428
+ ],
429
+ "commonMistakes": [
430
+ {
431
+ "id": "tree_data_key",
432
+ "description": "data 中缺少 key 属性",
433
+ "wrongCode": "const data = [{ label: '节点1' }]; // 缺少 key",
434
+ "correctCode": "const data = [{ label: '节点1', key: 'node1' }];",
435
+ "explanation": "每个节点必须有唯一的 key 属性",
436
+ "relatedProps": [
437
+ "data"
438
+ ]
439
+ },
440
+ {
441
+ "id": "tree_async_children",
442
+ "description": "异步加载时未设置 children 为空数组",
443
+ "wrongCode": "const data = [{ label: '父节点', key: 'parent' }]; // 无 children,不会显示展开箭头",
444
+ "correctCode": "const data = [{ label: '父节点', key: 'parent', children: [] }];",
445
+ "explanation": "异步加载节点需要设置 children 为空数组,才会显示展开箭头",
446
+ "relatedProps": [
447
+ "data",
448
+ "load"
449
+ ]
450
+ },
451
+ {
452
+ "id": "tree_checkbox_keys",
453
+ "description": "checkbox 模式下 checkedKeys 类型错误",
454
+ "wrongCode": "const checkedKeys = ref('node1'); // 应该是数组",
455
+ "correctCode": "const checkedKeys = ref<string[]>(['node1']);",
456
+ "explanation": "checkedKeys 必须是数组类型",
457
+ "relatedProps": [
458
+ "checkedKeys"
459
+ ]
460
+ }
461
+ ],
462
+ "searchKeywords": [
463
+ "树形",
464
+ "tree",
465
+ "树控件",
466
+ "层级",
467
+ "目录",
468
+ "文件树"
469
+ ],
470
+ "useCases": [
471
+ "文件目录",
472
+ "组织架构",
473
+ "分类导航",
474
+ "菜单目录",
475
+ "权限树"
476
+ ],
477
+ "relatedComponents": [
478
+ "TreeSelect"
479
+ ]
480
+ }