king-design-analyzer 2.1.7 → 2.2.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 (311) hide show
  1. package/components/actions.json +101 -0
  2. package/components/advancedset.json +127 -0
  3. package/components/affix.json +7 -0
  4. package/components/aksk.json +172 -0
  5. package/components/az.json +15 -2
  6. package/components/badge.json +7 -0
  7. package/components/billtypes.json +14 -2
  8. package/components/breadcrumb.json +7 -0
  9. package/components/button.json +191 -0
  10. package/components/buttonlink.json +73 -0
  11. package/components/card.json +8 -1
  12. package/components/cardcol.json +142 -0
  13. package/components/cardcols.json +121 -0
  14. package/components/cardcontent.json +15 -3
  15. package/components/cardtabs.json +172 -0
  16. package/components/carousel.json +7 -0
  17. package/components/cascader.json +520 -368
  18. package/components/checkbox.json +51 -4
  19. package/components/cidrinput.json +140 -0
  20. package/components/code.json +8 -1
  21. package/components/collapse.json +7 -0
  22. package/components/colorpicker.json +217 -0
  23. package/components/copy.json +7 -0
  24. package/components/copyhover.json +111 -0
  25. package/components/copyrow.json +124 -0
  26. package/components/datepicker.json +656 -524
  27. package/components/description.json +98 -0
  28. package/components/dialog.json +522 -455
  29. package/components/divider.json +8 -1
  30. package/components/drawer.json +571 -558
  31. package/components/dropdown.json +464 -384
  32. package/components/duration.json +125 -0
  33. package/components/editable.json +66 -0
  34. package/components/ellipsis.json +34 -1
  35. package/components/filtertablefieldsdialog.json +128 -0
  36. package/components/flex.json +151 -0
  37. package/components/form.json +131 -0
  38. package/components/formiteminput.json +214 -0
  39. package/components/formitemspinner.json +213 -0
  40. package/components/formitemswitch.json +185 -0
  41. package/components/formitemtableconfigs.json +210 -0
  42. package/components/grid.json +7 -0
  43. package/components/header.json +161 -0
  44. package/components/icon.json +13 -1
  45. package/components/icontooltip.json +19 -1
  46. package/components/input.json +188 -4
  47. package/components/instancelist.json +194 -0
  48. package/components/instancenum.json +196 -0
  49. package/components/ipinput.json +117 -0
  50. package/components/kspstatus.json +205 -0
  51. package/components/kvcode.json +120 -0
  52. package/components/layoutcontent.json +15 -3
  53. package/components/layoutlistcontent.json +148 -0
  54. package/components/layoutpermissioncontent.json +155 -0
  55. package/components/layoutstandardlist.json +275 -0
  56. package/components/layouttabs.json +168 -0
  57. package/components/lazymount.json +86 -0
  58. package/components/lazyteleport.json +118 -0
  59. package/components/menu.json +7 -0
  60. package/components/pagination.json +12 -0
  61. package/components/paginationplus.json +30 -3
  62. package/components/password.json +121 -0
  63. package/components/popover.json +457 -437
  64. package/components/projects.json +129 -0
  65. package/components/protable.json +97 -8
  66. package/components/queuevisualrange.json +110 -0
  67. package/components/radio.json +82 -2
  68. package/components/rate.json +199 -0
  69. package/components/region.json +14 -2
  70. package/components/search.json +221 -0
  71. package/components/searchinput.json +132 -0
  72. package/components/searchitems.json +215 -0
  73. package/components/searchselect.json +195 -0
  74. package/components/select.json +686 -666
  75. package/components/sidebar.json +198 -0
  76. package/components/skeleton.json +233 -0
  77. package/components/spin.json +8 -1
  78. package/components/split.json +260 -0
  79. package/components/sshkeys.json +138 -0
  80. package/components/status.json +60 -3
  81. package/components/steps.json +7 -0
  82. package/components/switch.json +8 -1
  83. package/components/table.json +18 -1
  84. package/components/tablecolumnid.json +14 -2
  85. package/components/tabs.json +12 -0
  86. package/components/timeline.json +213 -0
  87. package/components/timepicker.json +147 -3
  88. package/components/timerange.json +262 -0
  89. package/components/tip.json +7 -0
  90. package/components/tooltip.json +484 -395
  91. package/components/tour.json +418 -372
  92. package/components/transfer.json +27 -3
  93. package/components/tree.json +6 -4
  94. package/components/treeselect.json +556 -475
  95. package/components/upload.json +474 -473
  96. package/components/vdialog.json +308 -0
  97. package/components/vdrawer.json +331 -0
  98. package/components/virtuallist.json +7 -0
  99. package/dist/ast/index.d.mts +35 -1
  100. package/dist/ast/index.d.ts +35 -1
  101. package/dist/ast/index.js +5 -3
  102. package/dist/ast/index.mjs +3 -1
  103. package/dist/{chunk-DSWKLUIX.mjs → chunk-3LYQ5XFM.mjs} +1 -1
  104. package/dist/chunk-BI5TIQID.mjs +330 -0
  105. package/dist/{chunk-6QS5IGS6.js → chunk-CJGGFVQJ.js} +8 -8
  106. package/dist/chunk-CR3GC4H3.js +353 -0
  107. package/dist/{chunk-NZ6TLWMD.mjs → chunk-D2SXGGTX.mjs} +28 -17
  108. package/dist/{chunk-D3Y6FGWA.js → chunk-EYKZY2F3.js} +29 -18
  109. package/dist/chunk-JSBRDJBE.js +30 -0
  110. package/dist/chunk-KF5YBEM5.js +143 -0
  111. package/dist/chunk-KMIDURUR.mjs +33324 -0
  112. package/dist/chunk-QC6VTSA3.mjs +117 -0
  113. package/dist/chunk-SZYVGYKK.js +33350 -0
  114. package/dist/{chunk-WYSRJVX4.js → chunk-TA3SV4SP.js} +2 -2
  115. package/dist/chunk-UJCSKKID.mjs +27 -0
  116. package/dist/{chunk-FVSQ6BU6.mjs → chunk-XGPHQHLR.mjs} +4 -4
  117. package/dist/docs/index.js +1 -1
  118. package/dist/docs/index.mjs +1 -1
  119. package/dist/full/index.js +8 -6
  120. package/dist/full/index.mjs +6 -4
  121. package/dist/index.d.mts +1 -0
  122. package/dist/index.d.ts +1 -0
  123. package/dist/index.js +15 -13
  124. package/dist/index.mjs +7 -5
  125. package/dist/metadata/index.d.mts +22 -2
  126. package/dist/metadata/index.d.ts +22 -2
  127. package/dist/metadata/index.js +27 -17
  128. package/dist/metadata/index.mjs +27 -16
  129. package/dist/resolve-BsLBxlBi.d.mts +24 -0
  130. package/dist/resolve-BsLBxlBi.d.ts +24 -0
  131. package/dist/runtime/index.js +5 -4
  132. package/dist/runtime/index.mjs +3 -2
  133. package/dist/shared/index.d.mts +10 -0
  134. package/dist/shared/index.d.ts +10 -0
  135. package/dist/shared/index.js +23 -0
  136. package/dist/shared/index.mjs +2 -0
  137. package/dist/static/index.js +6 -5
  138. package/dist/static/index.mjs +3 -2
  139. package/docs_for_llm/actions.doc.md +77 -0
  140. package/docs_for_llm/advancedset.doc.md +89 -0
  141. package/docs_for_llm/affix.doc.md +15 -7
  142. package/docs_for_llm/aksk.doc.md +111 -0
  143. package/docs_for_llm/az.doc.md +17 -11
  144. package/docs_for_llm/badge.doc.md +6 -5
  145. package/docs_for_llm/billtypes.doc.md +17 -11
  146. package/docs_for_llm/breadcrumb.doc.md +6 -3
  147. package/docs_for_llm/button.doc.md +34 -18
  148. package/docs_for_llm/buttonlink.doc.md +55 -0
  149. package/docs_for_llm/card.doc.md +8 -5
  150. package/docs_for_llm/cardcol.doc.md +78 -0
  151. package/docs_for_llm/cardcols.doc.md +84 -0
  152. package/docs_for_llm/cardcontent.doc.md +10 -10
  153. package/docs_for_llm/cardtabs.doc.md +106 -0
  154. package/docs_for_llm/carousel.doc.md +8 -7
  155. package/docs_for_llm/cascader.doc.md +46 -25
  156. package/docs_for_llm/checkbox.doc.md +25 -13
  157. package/docs_for_llm/cidrinput.doc.md +83 -0
  158. package/docs_for_llm/code.doc.md +22 -11
  159. package/docs_for_llm/collapse.doc.md +9 -6
  160. package/docs_for_llm/colorpicker.doc.md +104 -0
  161. package/docs_for_llm/copy.doc.md +15 -13
  162. package/docs_for_llm/copyhover.doc.md +59 -0
  163. package/docs_for_llm/copyrow.doc.md +71 -0
  164. package/docs_for_llm/datepicker.doc.md +51 -39
  165. package/docs_for_llm/description.doc.md +75 -0
  166. package/docs_for_llm/descriptions.doc.md +9 -6
  167. package/docs_for_llm/dialog.doc.md +48 -77
  168. package/docs_for_llm/divider.doc.md +9 -7
  169. package/docs_for_llm/drawer.doc.md +43 -84
  170. package/docs_for_llm/dropdown.doc.md +52 -21
  171. package/docs_for_llm/duration.doc.md +76 -0
  172. package/docs_for_llm/editable.doc.md +36 -14
  173. package/docs_for_llm/ellipsis.doc.md +10 -5
  174. package/docs_for_llm/filtertablefieldsdialog.doc.md +99 -0
  175. package/docs_for_llm/flex.doc.md +74 -0
  176. package/docs_for_llm/form.doc.md +33 -14
  177. package/docs_for_llm/formiteminput.doc.md +128 -0
  178. package/docs_for_llm/formitemspinner.doc.md +105 -0
  179. package/docs_for_llm/formitemswitch.doc.md +113 -0
  180. package/docs_for_llm/formitemtableconfigs.doc.md +95 -0
  181. package/docs_for_llm/grid.doc.md +7 -5
  182. package/docs_for_llm/header.doc.md +85 -0
  183. package/docs_for_llm/icon.doc.md +12 -8
  184. package/docs_for_llm/icontooltip.doc.md +121 -0
  185. package/docs_for_llm/input.doc.md +90 -39
  186. package/docs_for_llm/instancelist.doc.md +113 -0
  187. package/docs_for_llm/instancenum.doc.md +95 -0
  188. package/docs_for_llm/ipinput.doc.md +77 -0
  189. package/docs_for_llm/kspstatus.doc.md +82 -0
  190. package/docs_for_llm/kvcode.doc.md +76 -0
  191. package/docs_for_llm/layoutcontent.doc.md +17 -17
  192. package/docs_for_llm/layoutlistcontent.doc.md +95 -0
  193. package/docs_for_llm/layoutpermissioncontent.doc.md +84 -0
  194. package/docs_for_llm/layoutstandardlist.doc.md +120 -0
  195. package/docs_for_llm/layouttabs.doc.md +101 -0
  196. package/docs_for_llm/lazymount.doc.md +73 -0
  197. package/docs_for_llm/lazyteleport.doc.md +76 -0
  198. package/docs_for_llm/menu.doc.md +14 -11
  199. package/docs_for_llm/message.doc.md +48 -10
  200. package/docs_for_llm/pagination.doc.md +30 -17
  201. package/docs_for_llm/paginationplus.doc.md +31 -10
  202. package/docs_for_llm/password.doc.md +86 -0
  203. package/docs_for_llm/popover.doc.md +24 -55
  204. package/docs_for_llm/progress.doc.md +13 -10
  205. package/docs_for_llm/projects.doc.md +91 -0
  206. package/docs_for_llm/protable.doc.md +89 -15
  207. package/docs_for_llm/queuevisualrange.doc.md +78 -0
  208. package/docs_for_llm/radio.doc.md +23 -8
  209. package/docs_for_llm/rate.doc.md +122 -0
  210. package/docs_for_llm/region.doc.md +25 -13
  211. package/docs_for_llm/search.doc.md +120 -0
  212. package/docs_for_llm/searchinput.doc.md +111 -0
  213. package/docs_for_llm/searchitems.doc.md +116 -0
  214. package/docs_for_llm/searchselect.doc.md +126 -0
  215. package/docs_for_llm/select.doc.md +40 -55
  216. package/docs_for_llm/sidebar.doc.md +133 -0
  217. package/docs_for_llm/skeleton.doc.md +117 -0
  218. package/docs_for_llm/slider.doc.md +31 -21
  219. package/docs_for_llm/spin.doc.md +8 -5
  220. package/docs_for_llm/spinner.doc.md +28 -18
  221. package/docs_for_llm/split.doc.md +157 -0
  222. package/docs_for_llm/sshkeys.doc.md +88 -0
  223. package/docs_for_llm/status.doc.md +14 -9
  224. package/docs_for_llm/steps.doc.md +10 -7
  225. package/docs_for_llm/switch.doc.md +17 -14
  226. package/docs_for_llm/table.doc.md +118 -51
  227. package/docs_for_llm/tablecolumnid.doc.md +36 -16
  228. package/docs_for_llm/tabs.doc.md +19 -10
  229. package/docs_for_llm/tag.doc.md +19 -10
  230. package/docs_for_llm/timeline.doc.md +109 -0
  231. package/docs_for_llm/timepicker.doc.md +57 -38
  232. package/docs_for_llm/timerange.doc.md +157 -0
  233. package/docs_for_llm/tip.doc.md +20 -11
  234. package/docs_for_llm/tooltip.doc.md +55 -29
  235. package/docs_for_llm/tour.doc.md +48 -29
  236. package/docs_for_llm/transfer.doc.md +40 -29
  237. package/docs_for_llm/tree.doc.md +65 -23
  238. package/docs_for_llm/treeselect.doc.md +37 -48
  239. package/docs_for_llm/upload.doc.md +56 -32
  240. package/docs_for_llm/useCRUD.doc.md +49 -0
  241. package/docs_for_llm/useCountdown.doc.md +43 -0
  242. package/docs_for_llm/useDetail.doc.md +48 -0
  243. package/docs_for_llm/useDialog.doc.md +46 -0
  244. package/docs_for_llm/useEntity.doc.md +45 -0
  245. package/docs_for_llm/useEventListener.doc.md +44 -0
  246. package/docs_for_llm/useFalseUntilTruthy.doc.md +41 -0
  247. package/docs_for_llm/useGetCopyAuthText.doc.md +35 -0
  248. package/docs_for_llm/useGetUserPermission.doc.md +43 -0
  249. package/docs_for_llm/useGroup.doc.md +48 -0
  250. package/docs_for_llm/useIdEntities.doc.md +48 -0
  251. package/docs_for_llm/useIdEntity.doc.md +103 -0
  252. package/docs_for_llm/useInterval.doc.md +43 -0
  253. package/docs_for_llm/useLayoutStandardList.doc.md +38 -0
  254. package/docs_for_llm/useMessage.doc.md +46 -0
  255. package/docs_for_llm/useModifyCache.doc.md +37 -0
  256. package/docs_for_llm/useOpenDialog.doc.md +41 -0
  257. package/docs_for_llm/usePagination.doc.md +60 -0
  258. package/docs_for_llm/usePersist.doc.md +54 -0
  259. package/docs_for_llm/usePoll.doc.md +41 -0
  260. package/docs_for_llm/useRoutePlus.doc.md +34 -0
  261. package/docs_for_llm/useRouterPlus.doc.md +34 -0
  262. package/docs_for_llm/useSearch.doc.md +68 -0
  263. package/docs_for_llm/useShell.doc.md +43 -0
  264. package/docs_for_llm/useSkip.doc.md +41 -0
  265. package/docs_for_llm/useStorageIdEntity.doc.md +46 -0
  266. package/docs_for_llm/useStore.doc.md +34 -0
  267. package/docs_for_llm/useTable.doc.md +57 -0
  268. package/docs_for_llm/useTableGroup.doc.md +47 -0
  269. package/docs_for_llm/useTableSort.doc.md +40 -0
  270. package/docs_for_llm/useToState.doc.md +112 -0
  271. package/docs_for_llm/useUser.doc.md +38 -0
  272. package/docs_for_llm/useValidForm.doc.md +41 -0
  273. package/docs_for_llm/vdialog.doc.md +129 -0
  274. package/docs_for_llm/vdrawer.doc.md +119 -0
  275. package/docs_for_llm/virtuallist.doc.md +6 -3
  276. package/hooks/useCRUD.json +61 -0
  277. package/hooks/useCountdown.json +49 -0
  278. package/hooks/useDetail.json +67 -0
  279. package/hooks/useDialog.json +49 -0
  280. package/hooks/useEntity.json +61 -0
  281. package/hooks/useEventListener.json +61 -0
  282. package/hooks/useFalseUntilTruthy.json +43 -0
  283. package/hooks/useGetCopyAuthText.json +36 -0
  284. package/hooks/useGetUserPermission.json +55 -0
  285. package/hooks/useGroup.json +49 -0
  286. package/hooks/useIdEntities.json +61 -0
  287. package/hooks/useInterval.json +55 -0
  288. package/hooks/useLayoutStandardList.json +36 -0
  289. package/hooks/useMessage.json +73 -0
  290. package/hooks/useModifyCache.json +36 -0
  291. package/hooks/useOpenDialog.json +43 -0
  292. package/hooks/usePagination.json +49 -0
  293. package/hooks/usePersist.json +61 -0
  294. package/hooks/usePoll.json +43 -0
  295. package/hooks/useRoutePlus.json +36 -0
  296. package/hooks/useRouterPlus.json +36 -0
  297. package/hooks/useSearch.json +56 -0
  298. package/hooks/useShell.json +49 -0
  299. package/hooks/useSkip.json +43 -0
  300. package/hooks/useStorageIdEntity.json +67 -0
  301. package/hooks/useStore.json +36 -0
  302. package/hooks/useTable.json +49 -0
  303. package/hooks/useTableGroup.json +43 -0
  304. package/hooks/useTableSort.json +43 -0
  305. package/hooks/useUser.json +36 -0
  306. package/hooks/useValidForm.json +43 -0
  307. package/package.json +12 -6
  308. package/dist/chunk-HDV7ETXE.mjs +0 -1055
  309. package/dist/chunk-HPAUCD5I.js +0 -156
  310. package/dist/chunk-L4DS3EXI.mjs +0 -133
  311. package/dist/chunk-YWY3D4J7.js +0 -1082
@@ -1,407 +1,487 @@
1
1
  {
2
- "id": "dropdown",
3
- "name": "Dropdown",
4
- "displayName": "下拉菜单",
5
- "category": "navigation",
6
- "description": "下拉菜单组件,用于展示可操作的下拉菜单列表。支持多种触发方式、嵌套菜单、右键菜单等功能。配合 DropdownMenu 和 DropdownItem 子组件使用。",
7
- "importStatement": "import { Dropdown, DropdownMenu, DropdownItem } from '@king-design/vue';",
8
- "props": [
9
- {
10
- "name": "trigger",
11
- "description": "触发方式",
12
- "type": {
13
- "raw": "\"hover\" | \"click\" | \"contextmenu\" | \"focus\"",
14
- "kind": "union",
15
- "unionTypes": [
16
- "hover",
17
- "click",
18
- "contextmenu",
19
- "focus"
20
- ]
21
- },
22
- "required": false,
23
- "default": "\"hover\"",
24
- "allowedValues": [
2
+ "id": "dropdown",
3
+ "name": "Dropdown",
4
+ "displayName": "下拉菜单",
5
+ "category": "navigation",
6
+ "description": "下拉菜单组件,用于展示可操作的下拉菜单列表。支持多种触发方式、嵌套菜单、右键菜单等功能。配合 DropdownMenu 和 DropdownItem 子组件使用。",
7
+ "importStatement": "import { Dropdown, DropdownMenu, DropdownItem } from '@king-design/vue';",
8
+ "props": [
25
9
  {
26
- "value": "hover",
27
- "label": "悬停触发",
28
- "isDefault": true
10
+ "name": "trigger",
11
+ "description": "触发方式",
12
+ "type": {
13
+ "raw": "\"hover\" | \"click\" | \"contextmenu\" | \"focus\"",
14
+ "kind": "union",
15
+ "unionTypes": [
16
+ "hover",
17
+ "click",
18
+ "contextmenu",
19
+ "focus"
20
+ ]
21
+ },
22
+ "required": false,
23
+ "default": "\"hover\"",
24
+ "allowedValues": [
25
+ {
26
+ "value": "hover",
27
+ "label": "悬停触发",
28
+ "isDefault": true
29
+ },
30
+ {
31
+ "value": "click",
32
+ "label": "点击触发"
33
+ },
34
+ {
35
+ "value": "contextmenu",
36
+ "label": "右键触发"
37
+ },
38
+ {
39
+ "value": "focus",
40
+ "label": "聚焦触发"
41
+ }
42
+ ],
43
+ "usageExample": "<Dropdown trigger=\"click\">"
29
44
  },
30
45
  {
31
- "value": "click",
32
- "label": "点击触发"
46
+ "name": "value",
47
+ "description": "是否展示菜单,可用 v-model 双向绑定",
48
+ "type": {
49
+ "raw": "boolean",
50
+ "kind": "boolean"
51
+ },
52
+ "required": false,
53
+ "default": "false",
54
+ "usageExample": "<Dropdown v-model=\"visible\">"
33
55
  },
34
56
  {
35
- "value": "contextmenu",
36
- "label": "右键触发"
57
+ "name": "disabled",
58
+ "description": "是否禁用整个菜单",
59
+ "type": {
60
+ "raw": "boolean",
61
+ "kind": "boolean"
62
+ },
63
+ "required": false,
64
+ "default": "false",
65
+ "usageExample": "<Dropdown disabled>"
37
66
  },
38
67
  {
39
- "value": "focus",
40
- "label": "聚焦触发"
68
+ "name": "position",
69
+ "description": "菜单弹出的位置",
70
+ "type": {
71
+ "raw": "Position | \"left\" | \"bottom\" | \"right\" | \"top\"",
72
+ "kind": "union",
73
+ "unionTypes": [
74
+ "left",
75
+ "bottom",
76
+ "right",
77
+ "top"
78
+ ]
79
+ },
80
+ "required": false,
81
+ "default": "{my: 'left top+8', at: 'left bottom'}",
82
+ "usageExample": "<Dropdown position=\"right\">"
83
+ },
84
+ {
85
+ "name": "collison",
86
+ "description": "碰撞检测策略,控制弹层超出边界时的处理方式。注意源码字段名拼写为 collison。",
87
+ "type": {
88
+ "raw": "Collision | [Collision, Collision]",
89
+ "kind": "union"
90
+ },
91
+ "required": false,
92
+ "default": "undefined",
93
+ "usageExample": "<Dropdown :collison=\"'flipfit'\">"
94
+ },
95
+ {
96
+ "name": "of",
97
+ "description": "弹出菜单的位置是相对当前触发元素还是触发元素所在的菜单元素",
98
+ "type": {
99
+ "raw": "\"self\" | \"parent\" | Event",
100
+ "kind": "union",
101
+ "unionTypes": [
102
+ "self",
103
+ "parent"
104
+ ]
105
+ },
106
+ "required": false,
107
+ "default": "\"self\"",
108
+ "allowedValues": [
109
+ {
110
+ "value": "self",
111
+ "label": "相对当前触发元素",
112
+ "isDefault": true
113
+ },
114
+ {
115
+ "value": "parent",
116
+ "label": "相对父菜单元素"
117
+ }
118
+ ],
119
+ "usageExample": "<Dropdown of=\"parent\">"
120
+ },
121
+ {
122
+ "name": "container",
123
+ "description": "指定弹出菜单追加的位置,默认追加到 body",
124
+ "type": {
125
+ "raw": "string | ((parentDom: Element, anchor: Node | null) => Element)",
126
+ "kind": "union"
127
+ },
128
+ "required": false,
129
+ "default": "undefined",
130
+ "usageExample": "<Dropdown :container=\"() => document.body\">"
131
+ },
132
+ {
133
+ "name": "alwaysShowOnClick",
134
+ "description": "不管什么触发方式,重复点击触发器都不隐藏弹层",
135
+ "type": {
136
+ "raw": "boolean",
137
+ "kind": "boolean"
138
+ },
139
+ "required": false,
140
+ "default": "false",
141
+ "usageExample": "<Dropdown alwaysShowOnClick>"
41
142
  }
42
- ],
43
- "usageExample": "<Dropdown trigger=\"click\"></Dropdown>"
44
- },
45
- {
46
- "name": "value",
47
- "description": "是否展示菜单,可用 v-model 双向绑定",
48
- "type": {
49
- "raw": "boolean",
50
- "kind": "boolean"
51
- },
52
- "required": false,
53
- "default": "false",
54
- "usageExample": "<Dropdown v-model=\"visible\"></Dropdown>"
55
- },
56
- {
57
- "name": "disabled",
58
- "description": "是否禁用整个菜单",
59
- "type": {
60
- "raw": "boolean",
61
- "kind": "boolean"
62
- },
63
- "required": false,
64
- "default": "false",
65
- "usageExample": "<Dropdown disabled></Dropdown>"
66
- },
67
- {
68
- "name": "position",
69
- "description": "菜单弹出的位置",
70
- "type": {
71
- "raw": "Position | \"left\" | \"bottom\" | \"right\" | \"top\"",
72
- "kind": "union",
73
- "unionTypes": [
74
- "left",
75
- "bottom",
76
- "right",
77
- "top"
78
- ]
79
- },
80
- "required": false,
81
- "default": "{my: 'left top+8', at: 'left bottom'}",
82
- "usageExample": "<Dropdown position=\"right\"></Dropdown>"
83
- },
84
- {
85
- "name": "of",
86
- "description": "弹出菜单的位置是相对当前触发元素还是触发元素所在的菜单元素",
87
- "type": {
88
- "raw": "\"self\" | \"parent\" | Event",
89
- "kind": "union",
90
- "unionTypes": [
91
- "self",
92
- "parent"
93
- ]
94
- },
95
- "required": false,
96
- "default": "\"self\"",
97
- "allowedValues": [
143
+ ],
144
+ "events": [
98
145
  {
99
- "value": "self",
100
- "label": "相对当前触发元素",
101
- "isDefault": true
146
+ "name": "show",
147
+ "vueEventName": "@show",
148
+ "description": "菜单展示时触发",
149
+ "payload": [],
150
+ "usageExample": "<Dropdown @show=\"handleShow\">",
151
+ "handlerExample": "const handleShow = () => {\n console.log('菜单已展示');\n};"
102
152
  },
103
153
  {
104
- "value": "parent",
105
- "label": "相对父菜单元素"
154
+ "name": "hide",
155
+ "vueEventName": "@hide",
156
+ "description": "菜单隐藏时触发",
157
+ "payload": [],
158
+ "usageExample": "<Dropdown @hide=\"handleHide\">",
159
+ "handlerExample": "const handleHide = () => {\n console.log('菜单已隐藏');\n};"
160
+ },
161
+ {
162
+ "name": "positioned",
163
+ "vueEventName": "@positioned",
164
+ "description": "下拉菜单完成定位计算后触发,可用于读取最终落位方向和坐标。",
165
+ "payload": [
166
+ {
167
+ "name": "feedback",
168
+ "type": "Feedback",
169
+ "description": "定位反馈对象,描述当前菜单的最终 placement 和坐标信息。"
170
+ }
171
+ ],
172
+ "usageExample": "<Dropdown @positioned=\"handlePositioned\">",
173
+ "handlerExample": "const handlePositioned = (feedback: Feedback) => {\n console.log('最终位置', feedback.placement);\n};"
106
174
  }
107
- ],
108
- "usageExample": "<Dropdown of=\"parent\"></Dropdown>"
109
- },
110
- {
111
- "name": "container",
112
- "description": "指定弹出菜单追加的位置,默认追加到 body",
113
- "type": {
114
- "raw": "string | ((parentDom: Element, anchor: Node | null) => Element)",
115
- "kind": "union"
116
- },
117
- "required": false,
118
- "default": "undefined",
119
- "usageExample": "<Dropdown :container=\"() => document.body\"></Dropdown>"
120
- },
121
- {
122
- "name": "alwaysShowOnClick",
123
- "description": "不管什么触发方式,重复点击触发器都不隐藏弹层",
124
- "type": {
125
- "raw": "boolean",
126
- "kind": "boolean"
127
- },
128
- "required": false,
129
- "default": "false",
130
- "usageExample": "<Dropdown alwaysShowOnClick></Dropdown>"
131
- }
132
- ],
133
- "events": [
134
- {
135
- "name": "show",
136
- "vueEventName": "@show",
137
- "description": "菜单展示时触发",
138
- "payload": [],
139
- "usageExample": "<Dropdown @show=\"handleShow\"></Dropdown>",
140
- "handlerExample": "const handleShow = () => {\n console.log('菜单已展示');\n};"
141
- },
142
- {
143
- "name": "hide",
144
- "vueEventName": "@hide",
145
- "description": "菜单隐藏时触发",
146
- "payload": [],
147
- "usageExample": "<Dropdown @hide=\"handleHide\"></Dropdown>",
148
- "handlerExample": "const handleHide = () => {\n console.log('菜单已隐藏');\n};"
149
- }
150
- ],
151
- "methods": [],
152
- "subComponents": [
153
- {
154
- "name": "DropdownMenu",
155
- "description": "下拉菜单容器,用于包裹菜单项",
156
- "props": []
157
- },
158
- {
159
- "name": "DropdownItem",
160
- "description": "下拉菜单项组件",
161
- "props": [
175
+ ],
176
+ "methods": [
177
+ {
178
+ "name": "show",
179
+ "description": "主动展开下拉菜单。",
180
+ "params": [
181
+ {
182
+ "name": "shouldFocus",
183
+ "type": "boolean",
184
+ "description": "展开后是否尝试把焦点移动到菜单内容,用于键盘可访问性场景。",
185
+ "optional": true
186
+ }
187
+ ],
188
+ "returnType": "void",
189
+ "usageExample": "dropdownRef.value?.show(true);"
190
+ },
191
+ {
192
+ "name": "hide",
193
+ "description": "主动隐藏下拉菜单。",
194
+ "params": [
195
+ {
196
+ "name": "immediately",
197
+ "type": "boolean",
198
+ "description": "是否立即隐藏并跳过延迟关闭逻辑。",
199
+ "optional": true
200
+ }
201
+ ],
202
+ "returnType": "void",
203
+ "usageExample": "dropdownRef.value?.hide(true);"
204
+ },
162
205
  {
163
- "name": "disabled",
164
- "description": "是否禁用该菜单项",
165
- "type": {
166
- "raw": "boolean",
167
- "kind": "boolean"
168
- },
169
- "required": false,
170
- "default": "false",
171
- "usageExample": "<DropdownItem disabled>禁用项</DropdownItem>"
206
+ "name": "focusFirst",
207
+ "description": "把焦点移动到菜单中的第一个可聚焦项。",
208
+ "params": [],
209
+ "returnType": "void",
210
+ "usageExample": "dropdownRef.value?.focusFirst();"
172
211
  },
173
212
  {
174
- "name": "hideOnSelect",
175
- "description": "选中该菜单后是否隐藏整个菜单",
176
- "type": {
177
- "raw": "boolean",
178
- "kind": "boolean"
179
- },
180
- "required": false,
181
- "default": "true",
182
- "usageExample": "<DropdownItem :hideOnSelect=\"false\">选中不关闭</DropdownItem>"
213
+ "name": "position",
214
+ "description": "重新计算当前下拉菜单的位置。",
215
+ "params": [
216
+ {
217
+ "name": "callback",
218
+ "type": "(feedback: Feedback) => void",
219
+ "description": "定位完成后的回调,可读取最终 placement 和坐标。",
220
+ "optional": true
221
+ }
222
+ ],
223
+ "returnType": "void",
224
+ "usageExample": "dropdownRef.value?.position((feedback) => console.log(feedback.placement));"
183
225
  }
184
- ],
185
- "events": [
226
+ ],
227
+ "subComponents": [
186
228
  {
187
- "name": "select",
188
- "vueEventName": "@select",
189
- "description": "菜单项被选中时触发(点击或键盘操作)",
190
- "payload": [
191
- {
192
- "name": "item",
193
- "type": "DropdownItem",
194
- "description": "被选中的菜单项实例"
195
- }
196
- ],
197
- "usageExample": "<DropdownItem @select=\"handleSelect\"></DropdownItem>",
198
- "handlerExample": "const handleSelect = (item) => {\n console.log('选中了:', item);\n};"
229
+ "name": "DropdownMenu",
230
+ "description": "下拉菜单容器,用于包裹菜单项",
231
+ "props": []
199
232
  },
200
233
  {
201
- "name": "click",
202
- "vueEventName": "@click",
203
- "description": "菜单项被点击时触发",
204
- "payload": [
205
- {
206
- "name": "e",
207
- "type": "MouseEvent",
208
- "description": "原生鼠标事件"
209
- }
210
- ],
211
- "usageExample": "<DropdownItem @click=\"handleClick\"></DropdownItem>",
212
- "handlerExample": "const handleClick = (e: MouseEvent) => {\n console.log('点击了菜单项');\n};"
234
+ "name": "DropdownItem",
235
+ "description": "下拉菜单项组件",
236
+ "props": [
237
+ {
238
+ "name": "disabled",
239
+ "description": "是否禁用该菜单项",
240
+ "type": {
241
+ "raw": "boolean",
242
+ "kind": "boolean"
243
+ },
244
+ "required": false,
245
+ "default": "false",
246
+ "usageExample": "<DropdownItem disabled>禁用项</DropdownItem>"
247
+ },
248
+ {
249
+ "name": "hideOnSelect",
250
+ "description": "选中该菜单后是否隐藏整个菜单",
251
+ "type": {
252
+ "raw": "boolean",
253
+ "kind": "boolean"
254
+ },
255
+ "required": false,
256
+ "default": "true",
257
+ "usageExample": "<DropdownItem :hideOnSelect=\"false\">选中不关闭</DropdownItem>"
258
+ }
259
+ ],
260
+ "events": [
261
+ {
262
+ "name": "select",
263
+ "vueEventName": "@select",
264
+ "description": "菜单项被选中时触发(点击或键盘操作)",
265
+ "payload": [
266
+ {
267
+ "name": "item",
268
+ "type": "DropdownItem",
269
+ "description": "被选中的菜单项实例"
270
+ }
271
+ ],
272
+ "usageExample": "<DropdownItem @select=\"handleSelect\">",
273
+ "handlerExample": "const handleSelect = (item) => {\n console.log('选中了:', item);\n};"
274
+ },
275
+ {
276
+ "name": "click",
277
+ "vueEventName": "@click",
278
+ "description": "菜单项被点击时触发",
279
+ "payload": [
280
+ {
281
+ "name": "e",
282
+ "type": "MouseEvent",
283
+ "description": "原生鼠标事件"
284
+ }
285
+ ],
286
+ "usageExample": "<DropdownItem @click=\"handleClick\">",
287
+ "handlerExample": "const handleClick = (e: MouseEvent) => {\n console.log('点击了菜单项');\n};"
288
+ }
289
+ ]
213
290
  }
214
- ]
215
- }
216
- ],
217
- "typeDefinitions": [
218
- {
219
- "name": "Position",
220
- "definition": "type Position = {\n my?: string | [string, string]\n at?: string | [string, string]\n collision?: Collision | [Collision, Collision]\n collisionDirection?: ['left'] | ['top'] | ['left', 'top']\n}",
221
- "description": "菜单弹出位置配置"
222
- },
223
- {
224
- "name": "Collision",
225
- "definition": "type Collision = 'fit' | 'flip' | 'flipfit' | 'none'",
226
- "description": "碰撞检测行为"
227
- },
228
- {
229
- "name": "Container",
230
- "definition": "type Container = string | ((parentDom: Element, anchor: Node | null) => Element)",
231
- "description": "容器类型"
232
- }
233
- ],
234
- "examples": [
235
- {
236
- "id": "dropdown_basic",
237
- "title": "基础用法",
238
- "description": "基本的下拉菜单,悬停触发",
239
- "difficulty": "easy",
240
- "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button } from '@king-design/vue';\n</script>\n<template>\n <Dropdown>\n <Button>下拉菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>菜单项1</DropdownItem>\n <DropdownItem>菜单项2</DropdownItem>\n <DropdownItem>菜单项3</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
241
- "tags": [
242
- "basic",
243
- "hover"
244
- ],
245
- "usedProps": [],
246
- "usedEvents": [],
247
- "usedMethods": [],
248
- "scenario": "创建一个悬停触发的下拉菜单"
249
- },
250
- {
251
- "id": "dropdown_click",
252
- "title": "点击触发",
253
- "description": "点击触发的下拉菜单",
254
- "difficulty": "easy",
255
- "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button } from '@king-design/vue';\n</script>\n<template>\n <Dropdown trigger=\"click\">\n <Button>点击展开</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>菜单项1</DropdownItem>\n <DropdownItem>菜单项2</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
256
- "tags": [
257
- "click",
258
- "trigger"
259
- ],
260
- "usedProps": [
261
- "trigger"
262
- ],
263
- "usedEvents": [],
264
- "usedMethods": [],
265
- "scenario": "创建点击触发的下拉菜单"
266
- },
267
- {
268
- "id": "dropdown_disabled_item",
269
- "title": "禁用菜单项",
270
- "description": "禁用特定的菜单项",
271
- "difficulty": "easy",
272
- "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button } from '@king-design/vue';\n</script>\n<template>\n <Dropdown>\n <Button>下拉菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>可用项</DropdownItem>\n <DropdownItem disabled>禁用项</DropdownItem>\n <DropdownItem>可用项</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
273
- "tags": [
274
- "disabled"
275
- ],
276
- "usedProps": [
277
- "disabled"
278
- ],
279
- "usedEvents": [],
280
- "usedMethods": [],
281
- "scenario": "禁用特定的菜单项"
282
- },
283
- {
284
- "id": "dropdown_contextmenu",
285
- "title": "右键菜单",
286
- "description": "右键触发的上下文菜单",
287
- "difficulty": "medium",
288
- "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem } from '@king-design/vue';\n</script>\n<template>\n <Dropdown trigger=\"contextmenu\">\n <div style=\"width: 200px; height: 100px; background: #f0f0f0; display: flex; align-items: center; justify-content: center;\">\n 右键点击此区域\n </div>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>复制</DropdownItem>\n <DropdownItem>粘贴</DropdownItem>\n <DropdownItem>删除</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
289
- "tags": [
291
+ ],
292
+ "typeDefinitions": [
293
+ {
294
+ "name": "Position",
295
+ "definition": "type Position = {\n my?: string | [string, string]\n at?: string | [string, string]\n collision?: Collision | [Collision, Collision]\n collisionDirection?: ['left'] | ['top'] | ['left', 'top']\n}",
296
+ "description": "菜单弹出位置配置"
297
+ },
298
+ {
299
+ "name": "Collision",
300
+ "definition": "type Collision = 'fit' | 'flip' | 'flipfit' | 'none'",
301
+ "description": "碰撞检测行为"
302
+ },
303
+ {
304
+ "name": "Container",
305
+ "definition": "type Container = string | ((parentDom: Element, anchor: Node | null) => Element)",
306
+ "description": "容器类型"
307
+ },
308
+ {
309
+ "name": "Feedback",
310
+ "definition": "type Feedback = {\n placement?: string\n left?: number\n top?: number\n}",
311
+ "description": "定位反馈结果,描述菜单最终落位方向和坐标信息。"
312
+ }
313
+ ],
314
+ "examples": [
315
+ {
316
+ "id": "dropdown_basic",
317
+ "title": "基础用法",
318
+ "description": "基本的下拉菜单,悬停触发",
319
+ "difficulty": "easy",
320
+ "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button } from '@king-design/vue';\n</script>\n<template>\n <Dropdown>\n <Button>下拉菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>菜单项1</DropdownItem>\n <DropdownItem>菜单项2</DropdownItem>\n <DropdownItem>菜单项3</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
321
+ "tags": [
322
+ "basic",
323
+ "hover"
324
+ ],
325
+ "usedProps": [],
326
+ "usedEvents": [],
327
+ "usedMethods": [],
328
+ "scenario": "创建一个悬停触发的下拉菜单"
329
+ },
330
+ {
331
+ "id": "dropdown_click",
332
+ "title": "点击触发",
333
+ "description": "点击触发的下拉菜单",
334
+ "difficulty": "easy",
335
+ "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button } from '@king-design/vue';\n</script>\n<template>\n <Dropdown trigger=\"click\">\n <Button>点击展开</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>菜单项1</DropdownItem>\n <DropdownItem>菜单项2</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
336
+ "tags": [
337
+ "click",
338
+ "trigger"
339
+ ],
340
+ "usedProps": [
341
+ "trigger"
342
+ ],
343
+ "usedEvents": [],
344
+ "usedMethods": [],
345
+ "scenario": "创建点击触发的下拉菜单"
346
+ },
347
+ {
348
+ "id": "dropdown_disabled_item",
349
+ "title": "禁用菜单项",
350
+ "description": "禁用特定的菜单项",
351
+ "difficulty": "easy",
352
+ "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button } from '@king-design/vue';\n</script>\n<template>\n <Dropdown>\n <Button>下拉菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>可用项</DropdownItem>\n <DropdownItem disabled>禁用项</DropdownItem>\n <DropdownItem>可用项</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
353
+ "tags": [
354
+ "disabled"
355
+ ],
356
+ "usedProps": [
357
+ "disabled"
358
+ ],
359
+ "usedEvents": [],
360
+ "usedMethods": [],
361
+ "scenario": "禁用特定的菜单项"
362
+ },
363
+ {
364
+ "id": "dropdown_contextmenu",
365
+ "title": "右键菜单",
366
+ "description": "右键触发的上下文菜单",
367
+ "difficulty": "medium",
368
+ "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem } from '@king-design/vue';\n</script>\n<template>\n <Dropdown trigger=\"contextmenu\">\n <div style=\"width: 200px; height: 100px; background: #f0f0f0; display: flex; align-items: center; justify-content: center;\">\n 右键点击此区域\n </div>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>复制</DropdownItem>\n <DropdownItem>粘贴</DropdownItem>\n <DropdownItem>删除</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
369
+ "tags": [
370
+ "contextmenu",
371
+ "right-click"
372
+ ],
373
+ "usedProps": [
374
+ "trigger"
375
+ ],
376
+ "usedEvents": [],
377
+ "usedMethods": [],
378
+ "scenario": "创建右键上下文菜单"
379
+ },
380
+ {
381
+ "id": "dropdown_select_event",
382
+ "title": "监听选择事件",
383
+ "description": "监听菜单项的选择",
384
+ "difficulty": "easy",
385
+ "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button, Message } from '@king-design/vue';\n\nconst handleClick = (action: string) => {\n Message.info(`选择了: ${action}`);\n};\n</script>\n<template>\n <Dropdown>\n <Button>操作</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem @click=\"handleClick('编辑')\">编辑</DropdownItem>\n <DropdownItem @click=\"handleClick('复制')\">复制</DropdownItem>\n <DropdownItem @click=\"handleClick('删除')\">删除</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
386
+ "tags": [
387
+ "select",
388
+ "click",
389
+ "event"
390
+ ],
391
+ "usedProps": [],
392
+ "usedEvents": [
393
+ "click"
394
+ ],
395
+ "usedMethods": [],
396
+ "scenario": "监听菜单项点击并执行操作"
397
+ },
398
+ {
399
+ "id": "dropdown_nested",
400
+ "title": "嵌套菜单",
401
+ "description": "多级嵌套的下拉菜单",
402
+ "difficulty": "medium",
403
+ "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button } from '@king-design/vue';\n</script>\n<template>\n <Dropdown>\n <Button>嵌套菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>菜单项1</DropdownItem>\n <Dropdown position=\"right\">\n <DropdownItem>更多 ></DropdownItem>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>子菜单1</DropdownItem>\n <DropdownItem>子菜单2</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
404
+ "tags": [
405
+ "nested",
406
+ "submenu"
407
+ ],
408
+ "usedProps": [
409
+ "position"
410
+ ],
411
+ "usedEvents": [],
412
+ "usedMethods": [],
413
+ "scenario": "创建多级嵌套的下拉菜单"
414
+ },
415
+ {
416
+ "id": "dropdown_table_action",
417
+ "title": "表格操作列",
418
+ "description": "在表格中使用下拉菜单作为操作列",
419
+ "difficulty": "medium",
420
+ "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button, Message } from '@king-design/vue';\n\nconst handleAction = (action: string, id: number) => {\n Message.info(`对 ID=${id} 执行 ${action}`);\n};\n</script>\n<template>\n <!-- 假设在表格的操作列中 -->\n <Dropdown trigger=\"click\">\n <Button type=\"link\" size=\"small\">操作</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem @click=\"handleAction('查看', 1)\">查看</DropdownItem>\n <DropdownItem @click=\"handleAction('编辑', 1)\">编辑</DropdownItem>\n <DropdownItem @click=\"handleAction('删除', 1)\">删除</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
421
+ "tags": [
422
+ "table",
423
+ "action",
424
+ "operation"
425
+ ],
426
+ "usedProps": [
427
+ "trigger"
428
+ ],
429
+ "usedEvents": [
430
+ "click"
431
+ ],
432
+ "usedMethods": [],
433
+ "scenario": "在表格操作列中使用下拉菜单"
434
+ }
435
+ ],
436
+ "commonMistakes": [
437
+ {
438
+ "id": "dropdown_missing_menu_slot",
439
+ "description": "未使用 #menu 插槽",
440
+ "wrongCode": "<Dropdown>\n <Button>菜单</Button>\n <DropdownMenu>\n <DropdownItem>项目</DropdownItem>\n </DropdownMenu>\n</Dropdown>",
441
+ "correctCode": "<Dropdown>\n <Button>菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>项目</DropdownItem>\n </DropdownMenu>\n </template>\n</Dropdown>",
442
+ "explanation": "DropdownMenu 必须放在 #menu 插槽中",
443
+ "relatedProps": []
444
+ },
445
+ {
446
+ "id": "dropdown_trigger_typo",
447
+ "description": "trigger 值拼写错误",
448
+ "wrongCode": "<Dropdown trigger=\"rightclick\">",
449
+ "correctCode": "<Dropdown trigger=\"contextmenu\">",
450
+ "explanation": "右键触发应使用 contextmenu,不是 rightclick",
451
+ "relatedProps": [
452
+ "trigger"
453
+ ]
454
+ },
455
+ {
456
+ "id": "dropdown_missing_dropdownmenu",
457
+ "description": "DropdownItem 未放在 DropdownMenu 中",
458
+ "wrongCode": "<Dropdown>\n <Button>菜单</Button>\n <template #menu>\n <DropdownItem>项目</DropdownItem>\n </template>\n</Dropdown>",
459
+ "correctCode": "<Dropdown>\n <Button>菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>项目</DropdownItem>\n </DropdownMenu>\n </template>\n</Dropdown>",
460
+ "explanation": "DropdownItem 必须包裹在 DropdownMenu 中",
461
+ "relatedProps": []
462
+ }
463
+ ],
464
+ "searchKeywords": [
465
+ "下拉菜单",
466
+ "dropdown",
467
+ "菜单",
468
+ "menu",
469
+ "右键",
290
470
  "contextmenu",
291
- "right-click"
292
- ],
293
- "usedProps": [
294
- "trigger"
295
- ],
296
- "usedEvents": [],
297
- "usedMethods": [],
298
- "scenario": "创建右键上下文菜单"
299
- },
300
- {
301
- "id": "dropdown_select_event",
302
- "title": "监听选择事件",
303
- "description": "监听菜单项的选择",
304
- "difficulty": "easy",
305
- "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button, Message } from '@king-design/vue';\n\nconst handleClick = (action: string) => {\n Message.info(`选择了: ${action}`);\n};\n</script>\n<template>\n <Dropdown>\n <Button>操作</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem @click=\"handleClick('编辑')\">编辑</DropdownItem>\n <DropdownItem @click=\"handleClick('复制')\">复制</DropdownItem>\n <DropdownItem @click=\"handleClick('删除')\">删除</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
306
- "tags": [
307
- "select",
308
- "click",
309
- "event"
310
- ],
311
- "usedProps": [],
312
- "usedEvents": [
313
- "click"
314
- ],
315
- "usedMethods": [],
316
- "scenario": "监听菜单项点击并执行操作"
317
- },
318
- {
319
- "id": "dropdown_nested",
320
- "title": "嵌套菜单",
321
- "description": "多级嵌套的下拉菜单",
322
- "difficulty": "medium",
323
- "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button } from '@king-design/vue';\n</script>\n<template>\n <Dropdown>\n <Button>嵌套菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>菜单项1</DropdownItem>\n <Dropdown position=\"right\">\n <DropdownItem>更多 ></DropdownItem>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>子菜单1</DropdownItem>\n <DropdownItem>子菜单2</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
324
- "tags": [
325
- "nested",
326
- "submenu"
327
- ],
328
- "usedProps": [
329
- "position"
330
- ],
331
- "usedEvents": [],
332
- "usedMethods": [],
333
- "scenario": "创建多级嵌套的下拉菜单"
334
- },
335
- {
336
- "id": "dropdown_table_action",
337
- "title": "表格操作列",
338
- "description": "在表格中使用下拉菜单作为操作列",
339
- "difficulty": "medium",
340
- "code": "<script setup lang=\"ts\">\nimport { Dropdown, DropdownMenu, DropdownItem, Button, Message } from '@king-design/vue';\n\nconst handleAction = (action: string, id: number) => {\n Message.info(`对 ID=${id} 执行 ${action}`);\n};\n</script>\n<template>\n <!-- 假设在表格的操作列中 -->\n <Dropdown trigger=\"click\">\n <Button type=\"link\" size=\"small\">操作</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem @click=\"handleAction('查看', 1)\">查看</DropdownItem>\n <DropdownItem @click=\"handleAction('编辑', 1)\">编辑</DropdownItem>\n <DropdownItem @click=\"handleAction('删除', 1)\">删除</DropdownItem>\n </DropdownMenu>\n </template>\n </Dropdown>\n</template>",
341
- "tags": [
342
- "table",
343
- "action",
344
- "operation"
345
- ],
346
- "usedProps": [
347
- "trigger"
348
- ],
349
- "usedEvents": [
350
- "click"
351
- ],
352
- "usedMethods": [],
353
- "scenario": "在表格操作列中使用下拉菜单"
354
- }
355
- ],
356
- "commonMistakes": [
357
- {
358
- "id": "dropdown_missing_menu_slot",
359
- "description": "未使用 #menu 插槽",
360
- "wrongCode": "<Dropdown>\n <Button>菜单</Button>\n <DropdownMenu>\n <DropdownItem>项目</DropdownItem>\n </DropdownMenu>\n</Dropdown>",
361
- "correctCode": "<Dropdown>\n <Button>菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>项目</DropdownItem>\n </DropdownMenu>\n </template>\n</Dropdown>",
362
- "explanation": "DropdownMenu 必须放在 #menu 插槽中",
363
- "relatedProps": []
364
- },
365
- {
366
- "id": "dropdown_trigger_typo",
367
- "description": "trigger 值拼写错误",
368
- "wrongCode": "<Dropdown trigger=\"rightclick\">",
369
- "correctCode": "<Dropdown trigger=\"contextmenu\">",
370
- "explanation": "右键触发应使用 contextmenu,不是 rightclick",
371
- "relatedProps": [
372
- "trigger"
373
- ]
374
- },
375
- {
376
- "id": "dropdown_missing_dropdownmenu",
377
- "description": "DropdownItem 未放在 DropdownMenu 中",
378
- "wrongCode": "<Dropdown>\n <Button>菜单</Button>\n <template #menu>\n <DropdownItem>项目</DropdownItem>\n </template>\n</Dropdown>",
379
- "correctCode": "<Dropdown>\n <Button>菜单</Button>\n <template #menu>\n <DropdownMenu>\n <DropdownItem>项目</DropdownItem>\n </DropdownMenu>\n </template>\n</Dropdown>",
380
- "explanation": "DropdownItem 必须包裹在 DropdownMenu 中",
381
- "relatedProps": []
382
- }
383
- ],
384
- "searchKeywords": [
385
- "下拉菜单",
386
- "dropdown",
387
- "菜单",
388
- "menu",
389
- "右键",
390
- "contextmenu",
391
- "悬停",
392
- "hover"
393
- ],
394
- "useCases": [
395
- "导航下拉菜单",
396
- "表格操作列",
397
- "右键上下文菜单",
398
- "更多操作按钮",
399
- "用户头像下拉菜单"
400
- ],
401
- "relatedComponents": [
402
- "DropdownMenu",
403
- "DropdownItem",
404
- "Menu",
405
- "Select"
406
- ]
471
+ "悬停",
472
+ "hover"
473
+ ],
474
+ "useCases": [
475
+ "导航下拉菜单",
476
+ "表格操作列",
477
+ "右键上下文菜单",
478
+ "更多操作按钮",
479
+ "用户头像下拉菜单"
480
+ ],
481
+ "relatedComponents": [
482
+ "DropdownMenu",
483
+ "DropdownItem",
484
+ "Menu",
485
+ "Select"
486
+ ]
407
487
  }