king-design-analyzer 2.1.9 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (327) hide show
  1. package/components/actions.json +109 -0
  2. package/components/advancedset.json +128 -0
  3. package/components/affix.json +8 -0
  4. package/components/aksk.json +172 -0
  5. package/components/anchor.json +220 -0
  6. package/components/anchorlink.json +111 -0
  7. package/components/az.json +15 -2
  8. package/components/badge.json +8 -0
  9. package/components/billtypes.json +14 -2
  10. package/components/breadcrumb.json +9 -1
  11. package/components/button.json +192 -0
  12. package/components/buttonlink.json +74 -0
  13. package/components/card.json +14 -4
  14. package/components/cardcol.json +142 -0
  15. package/components/cardcols.json +121 -0
  16. package/components/cardcontent.json +20 -3
  17. package/components/cardtabs.json +172 -0
  18. package/components/carousel.json +7 -0
  19. package/components/cascader.json +576 -368
  20. package/components/checkbox.json +51 -4
  21. package/components/cidrinput.json +140 -0
  22. package/components/code.json +8 -1
  23. package/components/collapse.json +335 -341
  24. package/components/colorpicker.json +217 -0
  25. package/components/configprovider.json +96 -0
  26. package/components/copy.json +7 -0
  27. package/components/copyhover.json +111 -0
  28. package/components/copyrow.json +125 -0
  29. package/components/datepicker.json +656 -524
  30. package/components/description.json +98 -0
  31. package/components/descriptions.json +10 -3
  32. package/components/diagram.json +295 -0
  33. package/components/dialog.json +526 -455
  34. package/components/divider.json +9 -1
  35. package/components/drawer.json +603 -558
  36. package/components/dropdown.json +464 -384
  37. package/components/duration.json +125 -0
  38. package/components/editable.json +66 -0
  39. package/components/ellipsis.json +34 -1
  40. package/components/filtertablefieldsdialog.json +128 -0
  41. package/components/flex.json +152 -0
  42. package/components/form.json +143 -3
  43. package/components/formiteminput.json +214 -0
  44. package/components/formitemspinner.json +213 -0
  45. package/components/formitemswitch.json +185 -0
  46. package/components/formitemtableconfigs.json +210 -0
  47. package/components/grid.json +7 -0
  48. package/components/header.json +165 -0
  49. package/components/icon.json +13 -1
  50. package/components/icontooltip.json +19 -1
  51. package/components/input.json +196 -8
  52. package/components/instancelist.json +194 -0
  53. package/components/instancenum.json +196 -0
  54. package/components/ipinput.json +117 -0
  55. package/components/kspstatus.json +205 -0
  56. package/components/kvcode.json +120 -0
  57. package/components/layoutcontent.json +24 -3
  58. package/components/layoutlistcontent.json +157 -0
  59. package/components/layoutpermissioncontent.json +156 -0
  60. package/components/layoutstandardlist.json +276 -0
  61. package/components/layouttabs.json +168 -0
  62. package/components/lazymount.json +87 -0
  63. package/components/lazyteleport.json +119 -0
  64. package/components/menu.json +11 -3
  65. package/components/notification.json +351 -0
  66. package/components/pagination.json +12 -0
  67. package/components/paginationplus.json +30 -3
  68. package/components/password.json +121 -0
  69. package/components/popover.json +457 -437
  70. package/components/projects.json +129 -0
  71. package/components/protable.json +99 -8
  72. package/components/queuevisualrange.json +110 -0
  73. package/components/radio.json +82 -2
  74. package/components/rate.json +200 -0
  75. package/components/region.json +14 -2
  76. package/components/scrollselect.json +140 -0
  77. package/components/search.json +221 -0
  78. package/components/searchinput.json +132 -0
  79. package/components/searchitems.json +215 -0
  80. package/components/searchselect.json +195 -0
  81. package/components/select.json +749 -666
  82. package/components/sidebar.json +198 -0
  83. package/components/skeleton.json +234 -0
  84. package/components/slider.json +12 -2
  85. package/components/spin.json +10 -2
  86. package/components/spinner.json +419 -429
  87. package/components/split.json +263 -0
  88. package/components/sshkeys.json +138 -0
  89. package/components/status.json +60 -3
  90. package/components/steps.json +7 -0
  91. package/components/switch.json +12 -3
  92. package/components/table.json +24 -2
  93. package/components/tablecolumnid.json +14 -2
  94. package/components/tabs.json +14 -2
  95. package/components/tag.json +8 -5
  96. package/components/timeline.json +215 -0
  97. package/components/timepicker.json +147 -3
  98. package/components/timerange.json +262 -0
  99. package/components/tip.json +27 -0
  100. package/components/tooltip.json +492 -395
  101. package/components/tour.json +418 -372
  102. package/components/transfer.json +79 -8
  103. package/components/tree.json +28 -5
  104. package/components/treeselect.json +612 -475
  105. package/components/upload.json +474 -473
  106. package/components/vdialog.json +309 -0
  107. package/components/vdrawer.json +335 -0
  108. package/components/virtuallist.json +7 -0
  109. package/dist/ast/index.d.mts +65 -2
  110. package/dist/ast/index.d.ts +65 -2
  111. package/dist/ast/index.js +4 -3
  112. package/dist/ast/index.mjs +2 -1
  113. package/dist/chunk-4OTQAQ6J.mjs +341 -0
  114. package/dist/{chunk-F26GUCGG.js → chunk-4WXOYU2N.js} +32 -9
  115. package/dist/chunk-6HOIRUQB.mjs +409 -0
  116. package/dist/chunk-DHLWNT53.js +364 -0
  117. package/dist/{chunk-H2ET6MMM.mjs → chunk-IPJJMPOO.mjs} +155 -66
  118. package/dist/{chunk-WYSRJVX4.js → chunk-JJ6AB4ZH.js} +2 -2
  119. package/dist/{chunk-2W6OCG2S.js → chunk-JNRGUR3O.js} +155 -67
  120. package/dist/chunk-KF5YBEM5.js +143 -0
  121. package/dist/{chunk-OJOHB64C.mjs → chunk-LRTDTFFQ.mjs} +28 -5
  122. package/dist/{chunk-DSWKLUIX.mjs → chunk-NZL6T22V.mjs} +1 -1
  123. package/dist/chunk-QC6VTSA3.mjs +117 -0
  124. package/dist/chunk-V5N65MRP.js +411 -0
  125. package/dist/full/index.d.mts +2 -0
  126. package/dist/full/index.d.ts +2 -0
  127. package/dist/full/index.js +7 -6
  128. package/dist/full/index.mjs +5 -4
  129. package/dist/index.d.mts +1 -0
  130. package/dist/index.d.ts +1 -0
  131. package/dist/index.js +14 -13
  132. package/dist/index.mjs +6 -5
  133. package/dist/metadata/index.d.mts +38 -3
  134. package/dist/metadata/index.d.ts +38 -3
  135. package/dist/metadata/index.js +26 -16
  136. package/dist/metadata/index.mjs +26 -15
  137. package/dist/resolve-BsLBxlBi.d.mts +24 -0
  138. package/dist/resolve-BsLBxlBi.d.ts +24 -0
  139. package/dist/runtime/index.d.mts +2 -0
  140. package/dist/runtime/index.d.ts +2 -0
  141. package/dist/runtime/index.js +4 -4
  142. package/dist/runtime/index.mjs +2 -2
  143. package/dist/shared/index.d.mts +10 -0
  144. package/dist/shared/index.d.ts +10 -0
  145. package/dist/shared/index.js +23 -0
  146. package/dist/shared/index.mjs +2 -0
  147. package/dist/static/index.js +5 -5
  148. package/dist/static/index.mjs +2 -2
  149. package/docs_for_llm/actions.doc.md +87 -0
  150. package/docs_for_llm/advancedset.doc.md +98 -0
  151. package/docs_for_llm/affix.doc.md +20 -7
  152. package/docs_for_llm/aksk.doc.md +111 -0
  153. package/docs_for_llm/anchor.doc.md +155 -0
  154. package/docs_for_llm/anchorlink.doc.md +75 -0
  155. package/docs_for_llm/az.doc.md +17 -11
  156. package/docs_for_llm/badge.doc.md +11 -5
  157. package/docs_for_llm/billtypes.doc.md +17 -11
  158. package/docs_for_llm/breadcrumb.doc.md +80 -4
  159. package/docs_for_llm/button.doc.md +91 -18
  160. package/docs_for_llm/buttonlink.doc.md +64 -0
  161. package/docs_for_llm/card.doc.md +58 -8
  162. package/docs_for_llm/cardcol.doc.md +78 -0
  163. package/docs_for_llm/cardcols.doc.md +84 -0
  164. package/docs_for_llm/cardcontent.doc.md +31 -10
  165. package/docs_for_llm/cardtabs.doc.md +106 -0
  166. package/docs_for_llm/carousel.doc.md +79 -7
  167. package/docs_for_llm/cascader.doc.md +106 -23
  168. package/docs_for_llm/checkbox.doc.md +25 -13
  169. package/docs_for_llm/cidrinput.doc.md +83 -0
  170. package/docs_for_llm/code.doc.md +22 -11
  171. package/docs_for_llm/collapse.doc.md +147 -14
  172. package/docs_for_llm/colorpicker.doc.md +104 -0
  173. package/docs_for_llm/configprovider.doc.md +77 -0
  174. package/docs_for_llm/copy.doc.md +15 -13
  175. package/docs_for_llm/copyhover.doc.md +59 -0
  176. package/docs_for_llm/copyrow.doc.md +80 -0
  177. package/docs_for_llm/datepicker.doc.md +66 -35
  178. package/docs_for_llm/description.doc.md +75 -0
  179. package/docs_for_llm/descriptions.doc.md +122 -10
  180. package/docs_for_llm/diagram.doc.md +343 -0
  181. package/docs_for_llm/dialog.doc.md +97 -77
  182. package/docs_for_llm/divider.doc.md +14 -7
  183. package/docs_for_llm/drawer.doc.md +114 -69
  184. package/docs_for_llm/dropdown.doc.md +290 -22
  185. package/docs_for_llm/duration.doc.md +76 -0
  186. package/docs_for_llm/editable.doc.md +36 -14
  187. package/docs_for_llm/ellipsis.doc.md +10 -5
  188. package/docs_for_llm/filtertablefieldsdialog.doc.md +99 -0
  189. package/docs_for_llm/flex.doc.md +83 -0
  190. package/docs_for_llm/form.doc.md +196 -18
  191. package/docs_for_llm/formiteminput.doc.md +128 -0
  192. package/docs_for_llm/formitemspinner.doc.md +105 -0
  193. package/docs_for_llm/formitemswitch.doc.md +113 -0
  194. package/docs_for_llm/formitemtableconfigs.doc.md +95 -0
  195. package/docs_for_llm/grid.doc.md +78 -5
  196. package/docs_for_llm/header.doc.md +114 -0
  197. package/docs_for_llm/icon.doc.md +12 -8
  198. package/docs_for_llm/icontooltip.doc.md +121 -0
  199. package/docs_for_llm/input.doc.md +199 -41
  200. package/docs_for_llm/instancelist.doc.md +113 -0
  201. package/docs_for_llm/instancenum.doc.md +95 -0
  202. package/docs_for_llm/ipinput.doc.md +77 -0
  203. package/docs_for_llm/kspstatus.doc.md +82 -0
  204. package/docs_for_llm/kvcode.doc.md +76 -0
  205. package/docs_for_llm/layoutcontent.doc.md +54 -17
  206. package/docs_for_llm/layoutlistcontent.doc.md +168 -0
  207. package/docs_for_llm/layoutpermissioncontent.doc.md +93 -0
  208. package/docs_for_llm/layoutstandardlist.doc.md +129 -0
  209. package/docs_for_llm/layouttabs.doc.md +101 -0
  210. package/docs_for_llm/lazymount.doc.md +82 -0
  211. package/docs_for_llm/lazyteleport.doc.md +85 -0
  212. package/docs_for_llm/menu.doc.md +139 -14
  213. package/docs_for_llm/message.doc.md +93 -10
  214. package/docs_for_llm/notification.doc.md +214 -0
  215. package/docs_for_llm/pagination.doc.md +30 -17
  216. package/docs_for_llm/paginationplus.doc.md +31 -10
  217. package/docs_for_llm/password.doc.md +86 -0
  218. package/docs_for_llm/popover.doc.md +24 -55
  219. package/docs_for_llm/progress.doc.md +13 -10
  220. package/docs_for_llm/projects.doc.md +91 -0
  221. package/docs_for_llm/protable.doc.md +98 -15
  222. package/docs_for_llm/queuevisualrange.doc.md +78 -0
  223. package/docs_for_llm/radio.doc.md +23 -8
  224. package/docs_for_llm/rate.doc.md +127 -0
  225. package/docs_for_llm/region.doc.md +25 -13
  226. package/docs_for_llm/scrollselect.doc.md +90 -0
  227. package/docs_for_llm/search.doc.md +120 -0
  228. package/docs_for_llm/searchinput.doc.md +111 -0
  229. package/docs_for_llm/searchitems.doc.md +116 -0
  230. package/docs_for_llm/searchselect.doc.md +126 -0
  231. package/docs_for_llm/select.doc.md +208 -49
  232. package/docs_for_llm/sidebar.doc.md +133 -0
  233. package/docs_for_llm/skeleton.doc.md +152 -0
  234. package/docs_for_llm/slider.doc.md +42 -22
  235. package/docs_for_llm/spin.doc.md +18 -6
  236. package/docs_for_llm/spinner.doc.md +28 -18
  237. package/docs_for_llm/split.doc.md +170 -0
  238. package/docs_for_llm/sshkeys.doc.md +88 -0
  239. package/docs_for_llm/status.doc.md +14 -9
  240. package/docs_for_llm/steps.doc.md +81 -7
  241. package/docs_for_llm/switch.doc.md +32 -16
  242. package/docs_for_llm/table.doc.md +317 -55
  243. package/docs_for_llm/tablecolumnid.doc.md +36 -16
  244. package/docs_for_llm/tabs.doc.md +117 -12
  245. package/docs_for_llm/tag.doc.md +167 -15
  246. package/docs_for_llm/timeline.doc.md +187 -0
  247. package/docs_for_llm/timepicker.doc.md +74 -36
  248. package/docs_for_llm/timerange.doc.md +157 -0
  249. package/docs_for_llm/tip.doc.md +50 -11
  250. package/docs_for_llm/tooltip.doc.md +99 -27
  251. package/docs_for_llm/tour.doc.md +125 -28
  252. package/docs_for_llm/transfer.doc.md +99 -33
  253. package/docs_for_llm/tree.doc.md +129 -24
  254. package/docs_for_llm/treeselect.doc.md +101 -44
  255. package/docs_for_llm/upload.doc.md +63 -32
  256. package/docs_for_llm/useCRUD.doc.md +49 -0
  257. package/docs_for_llm/useCountdown.doc.md +43 -0
  258. package/docs_for_llm/useDetail.doc.md +48 -0
  259. package/docs_for_llm/useDialog.doc.md +46 -0
  260. package/docs_for_llm/useEntity.doc.md +45 -0
  261. package/docs_for_llm/useEventListener.doc.md +44 -0
  262. package/docs_for_llm/useFalseUntilTruthy.doc.md +41 -0
  263. package/docs_for_llm/useGetCopyAuthText.doc.md +35 -0
  264. package/docs_for_llm/useGetUserPermission.doc.md +43 -0
  265. package/docs_for_llm/useGroup.doc.md +48 -0
  266. package/docs_for_llm/useIdEntities.doc.md +48 -0
  267. package/docs_for_llm/useIdEntity.doc.md +103 -0
  268. package/docs_for_llm/useInterval.doc.md +43 -0
  269. package/docs_for_llm/useLayoutStandardList.doc.md +38 -0
  270. package/docs_for_llm/useMessage.doc.md +46 -0
  271. package/docs_for_llm/useModifyCache.doc.md +37 -0
  272. package/docs_for_llm/useOpenDialog.doc.md +41 -0
  273. package/docs_for_llm/usePagination.doc.md +60 -0
  274. package/docs_for_llm/usePersist.doc.md +54 -0
  275. package/docs_for_llm/usePoll.doc.md +41 -0
  276. package/docs_for_llm/useRoutePlus.doc.md +34 -0
  277. package/docs_for_llm/useRouterPlus.doc.md +34 -0
  278. package/docs_for_llm/useSearch.doc.md +68 -0
  279. package/docs_for_llm/useShell.doc.md +43 -0
  280. package/docs_for_llm/useSkip.doc.md +41 -0
  281. package/docs_for_llm/useStorageIdEntity.doc.md +46 -0
  282. package/docs_for_llm/useStore.doc.md +34 -0
  283. package/docs_for_llm/useTable.doc.md +57 -0
  284. package/docs_for_llm/useTableGroup.doc.md +47 -0
  285. package/docs_for_llm/useTableSort.doc.md +40 -0
  286. package/docs_for_llm/useToState.doc.md +112 -0
  287. package/docs_for_llm/useUser.doc.md +38 -0
  288. package/docs_for_llm/useValidForm.doc.md +41 -0
  289. package/docs_for_llm/vdialog.doc.md +154 -0
  290. package/docs_for_llm/vdrawer.doc.md +148 -0
  291. package/docs_for_llm/virtuallist.doc.md +157 -3
  292. package/hooks/useCRUD.json +61 -0
  293. package/hooks/useCountdown.json +49 -0
  294. package/hooks/useDetail.json +67 -0
  295. package/hooks/useDialog.json +49 -0
  296. package/hooks/useEntity.json +61 -0
  297. package/hooks/useEventListener.json +61 -0
  298. package/hooks/useFalseUntilTruthy.json +43 -0
  299. package/hooks/useGetCopyAuthText.json +36 -0
  300. package/hooks/useGetUserPermission.json +55 -0
  301. package/hooks/useGroup.json +49 -0
  302. package/hooks/useIdEntities.json +61 -0
  303. package/hooks/useInterval.json +55 -0
  304. package/hooks/useLayoutStandardList.json +36 -0
  305. package/hooks/useMessage.json +73 -0
  306. package/hooks/useModifyCache.json +36 -0
  307. package/hooks/useOpenDialog.json +43 -0
  308. package/hooks/usePagination.json +49 -0
  309. package/hooks/usePersist.json +61 -0
  310. package/hooks/usePoll.json +43 -0
  311. package/hooks/useRoutePlus.json +36 -0
  312. package/hooks/useRouterPlus.json +36 -0
  313. package/hooks/useSearch.json +56 -0
  314. package/hooks/useShell.json +49 -0
  315. package/hooks/useSkip.json +43 -0
  316. package/hooks/useStorageIdEntity.json +67 -0
  317. package/hooks/useStore.json +36 -0
  318. package/hooks/useTable.json +49 -0
  319. package/hooks/useTableGroup.json +43 -0
  320. package/hooks/useTableSort.json +43 -0
  321. package/hooks/useUser.json +36 -0
  322. package/hooks/useValidForm.json +43 -0
  323. package/package.json +14 -8
  324. package/dist/chunk-D3Y6FGWA.js +0 -153
  325. package/dist/chunk-HPAUCD5I.js +0 -156
  326. package/dist/chunk-L4DS3EXI.mjs +0 -133
  327. package/dist/chunk-NZ6TLWMD.mjs +0 -151
@@ -12,43 +12,63 @@ import { Tour, TourStep } from '@king-design/vue';
12
12
  ```
13
13
 
14
14
  ## 属性 (Props)
15
- | 属性名 | 类型 | 默认值 | 必填 | 说明 | 示例 |
16
- | --- | --- | --- | --- | --- | --- |
17
- | value | `number` | `0` | 否 | 当前显示的步骤索引(从0开始),可用 v-model 双向绑定 | `<Tour v-model="currentStep"></Tour>` |
18
- | visible | `boolean` | `true` | 否 | 是否展示引导组件 | `<Tour :visible="showTour"></Tour>` |
19
- | data | `TourStepData[]` | `undefined` | 否 | 步骤数据数组,用于数据驱动方式 | `<Tour :data="tourData"></Tour>` |
20
- | beforeChange | `(current: number) => boolean | Promise<boolean>` | `undefined` | 否 | 步骤切换前的回调函数,返回 false 可阻止切换,支持异步 | `<Tour :beforeChange="handleBeforeChange"></Tour>` |
21
- | maskClosable | `boolean` | `false` | 否 | 点击遮罩层是否可关闭 | `<Tour maskClosable></Tour>` |
22
- | closable | `boolean` | `true` | 否 | 是否展示关闭图标 | `<Tour :closable="false"></Tour>` |
23
- | doneText | `string` | `"完成"` | 否 | 完成按钮文本 | `<Tour doneText="结束引导"></Tour>` |
15
+ | 属性名 | 类型 | 默认值 | 必填 | 说明 | 标签 | 示例 |
16
+ | --- | --- | --- | --- | --- | --- | --- |
17
+ | value | `number` | `0` | 否 | 当前显示的步骤索引(从0开始),可用 v-model 双向绑定 | - | `<Tour v-model="currentStep">` |
18
+ | theme | `"dark" | "light"` | `"light"` | 否 | 引导浮层主题 | - | `<Tour theme="dark" />` |
19
+ | visible | `boolean` | `true` | 否 | 是否展示引导组件 | - | `<Tour :visible="showTour">` |
20
+ | data | `TourStepData[]` | `undefined` | 否 | 步骤数据数组,用于数据驱动方式 | - | `<Tour :data="tourData">` |
21
+ | beforeChange | `(current: number) => boolean | Promise<boolean>` | `undefined` | 否 | 步骤切换前的回调函数,返回 false 可阻止切换,支持异步 | - | `<Tour :beforeChange="handleBeforeChange">` |
22
+ | maskClosable | `boolean` | `false` | 否 | 点击遮罩层是否可关闭 | - | `<Tour maskClosable>` |
23
+ | closable | `boolean` | `true` | 否 | 是否展示关闭图标 | - | `<Tour :closable="false">` |
24
+ | doneText | `string` | `"完成"` | 否 | 完成按钮文本 | - | `<Tour doneText="结束引导">` |
25
+ | showArrow | `boolean` | `true` | 否 | 是否展示指向目标元素的箭头 | - | `<Tour :showArrow="false" />` |
24
26
 
25
27
  ## 事件 (Events)
26
28
  | 事件名 | Vue事件名 | 说明 | 回调参数 | 示例 |
27
29
  | --- | --- | --- | --- | --- |
28
- | prev | `@prev` | 点击上一步按钮时触发 | `index: number` | `<Tour @prev="handlePrev"></Tour>` |
29
- | next | `@next` | 点击下一步按钮时触发 | `index: number` | `<Tour @next="handleNext"></Tour>` |
30
- | finish | `@finish` | 引导完成或关闭时触发 | `-` | `<Tour @finish="handleFinish"></Tour>` |
30
+ | prev | `@prev` | 点击上一步按钮时触发 | `index: number` | `<Tour @prev="handlePrev">` |
31
+ | next | `@next` | 点击下一步按钮时触发 | `index: number` | `<Tour @next="handleNext">` |
32
+ | finish | `@finish` | 引导完成或关闭时触发 | `-` | `<Tour @finish="handleFinish">` |
33
+ | positioned | `@positioned` | 当前步骤定位完成后触发,可用于读取最终计算位置或做埋点。 | `feedback: Feedback` | `<Tour @positioned="handlePositioned">` |
31
34
 
32
- ### 事件处理函数示例
33
- **prev**:
35
+ ### 事件参数说明
36
+ **prev**
37
+
38
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
39
+ | --- | --- | --- | --- | --- |
40
+ | index | `number` | 是 | - | 当前步骤索引 |
41
+
42
+ 事件处理示例:
34
43
  ```typescript
35
44
  const handlePrev = (index: number) => {
36
45
  console.log(`从步骤 ${index} 返回`);
37
46
  };
38
47
  ```
39
48
 
40
- **next**:
49
+ **next**
50
+
51
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
52
+ | --- | --- | --- | --- | --- |
53
+ | index | `number` | 是 | - | 当前步骤索引 |
54
+
55
+ 事件处理示例:
41
56
  ```typescript
42
57
  const handleNext = (index: number) => {
43
58
  console.log(`从步骤 ${index} 前进`);
44
59
  };
45
60
  ```
46
61
 
47
- **finish**:
62
+ **positioned**
63
+
64
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
65
+ | --- | --- | --- | --- | --- |
66
+ | feedback | `Feedback` | 是 | - | 定位反馈对象,包含当前步骤最终落位信息。 |
67
+
68
+ 事件处理示例:
48
69
  ```typescript
49
- const handleFinish = () => {
50
- showTour.value = false;
51
- console.log('引导完成');
70
+ const handlePositioned = (feedback: Feedback) => {
71
+ console.log('当前定位结果', feedback.placement);
52
72
  };
53
73
  ```
54
74
 
@@ -56,28 +76,105 @@ const handleFinish = () => {
56
76
  ### TourStep
57
77
  引导步骤组件,用于定义每个引导步骤的内容
58
78
 
79
+ #### 属性 (Props)
59
80
  | 属性名 | 类型 | 说明 | 示例 |
60
81
  | --- | --- | --- | --- |
61
- | target | `string | HTMLElement` | 目标元素,可以是 CSS 选择器或 DOM 元素。不指定则居中显示 | `<TourStep target="#btn1"></TourStep>` |
62
- | title | `string | VNode` | 步骤标题 | `<TourStep title="第一步"></TourStep>` |
63
- | content | `string | VNode` | 步骤内容 | `<TourStep content="这是引导说明"></TourStep>` |
64
- | position | `"top" | "right" | "bottom" | "left"` | 弹出位置 | `<TourStep position="top"></TourStep>` |
65
- | nextText | `string` | 下一步按钮文本 | `<TourStep nextText="继续"></TourStep>` |
66
- | prevText | `string` | 上一步按钮文本 | `<TourStep prevText="返回"></TourStep>` |
82
+ | target | `string | HTMLElement` | 目标元素,可以是 CSS 选择器或 DOM 元素。不指定则居中显示 | `<TourStep target="#btn1">` |
83
+ | title | `string | VNode` | 步骤标题 | `<TourStep title="第一步">` |
84
+ | content | `string | VNode` | 步骤内容 | `<TourStep content="这是引导说明">` |
85
+ | position | `"top" | "right" | "bottom" | "left"` | 弹出位置 | `<TourStep position="top">` |
86
+ | nextText | `string` | 下一步按钮文本 | `<TourStep nextText="继续">` |
87
+ | prevText | `string` | 上一步按钮文本 | `<TourStep prevText="返回">` |
88
+
89
+ #### 组合示例
90
+ ##### 声明式步骤
91
+ **场景**: 使用声明式方式定义引导步骤
92
+
93
+ 使用 TourStep 子组件定义步骤
94
+
95
+ **命中的子组件 API**: 属性: target, title, content, position
96
+
97
+ ```vue
98
+ <script setup lang="ts">
99
+ import { ref } from 'vue';
100
+ import { Tour, TourStep, Button } from '@king-design/vue';
67
101
 
68
- **插槽**:
69
- - `undefined`: 自定义标题内容
70
- - `undefined`: 自定义底部内容
102
+ const currentStep = ref(0);
103
+ const showTour = ref(false);
104
+
105
+ const startTour = () => {
106
+ showTour.value = true;
107
+ currentStep.value = 0;
108
+ };
109
+
110
+ const closeTour = () => {
111
+ showTour.value = false;
112
+ };
113
+ </script>
114
+ <template>
115
+ <div>
116
+ <Button id="btn1">元素1</Button>
117
+ <Button id="btn2" style="margin-left: 20px;">元素2</Button>
118
+ <Tour v-model="currentStep" :visible="showTour" @finish="closeTour">
119
+ <TourStep target="#btn1" title="第一步" content="第一步说明" position="left" />
120
+ <TourStep target="#btn2" title="第二步" position="top">第二步说明</TourStep>
121
+ </Tour>
122
+ <Button @click="startTour">启动引导</Button>
123
+ </div>
124
+ </template>
125
+ ```
126
+
127
+ ##### 居中引导
128
+ **场景**: 无目标元素的居中显示引导
129
+
130
+ 无目标元素的居中显示
131
+
132
+ **命中的子组件 API**: 属性: title
133
+
134
+ ```vue
135
+ <script setup lang="ts">
136
+ import { ref } from 'vue';
137
+ import { Tour, TourStep, Button } from '@king-design/vue';
138
+
139
+ const currentStep = ref(0);
140
+ const showTour = ref(false);
141
+
142
+ const startTour = () => {
143
+ showTour.value = true;
144
+ currentStep.value = 0;
145
+ };
146
+
147
+ const closeTour = () => {
148
+ showTour.value = false;
149
+ };
150
+ </script>
151
+ <template>
152
+ <div>
153
+ <Tour v-model="currentStep" :visible="showTour" @finish="closeTour">
154
+ <TourStep title="欢迎页面">
155
+ <span>没有指定目标元素时,引导弹窗会居中显示。</span>
156
+ </TourStep>
157
+ <TourStep title="功能介绍">
158
+ <span>适合用于展示全局性的引导说明。</span>
159
+ </TourStep>
160
+ </Tour>
161
+ <Button @click="startTour">启动无目标引导</Button>
162
+ </div>
163
+ </template>
164
+ ```
71
165
 
72
166
  ## 常见错误与正确用法 (Anti-Hallucination)
167
+ ### target 选择器未匹配到元素
73
168
  > **错误用法**: `<TourStep target="btn1" /> <!-- 缺少 # -->`
74
169
  > **正确写法**: `<TourStep target="#btn1" />`
75
170
  > **说明**: target 使用 CSS 选择器,ID 选择器需要加 # 前缀
76
171
 
172
+ ### 未正确控制 visible 状态
77
173
  > **错误用法**: `<Tour :visible="true" /> <!-- 无法关闭 -->`
78
174
  > **正确写法**: `<Tour :visible="showTour" @finish="showTour = false" />`
79
175
  > **说明**: 需要通过响应式变量和 finish 事件控制显示隐藏
80
176
 
177
+ ### 步骤索引从 1 开始
81
178
  > **错误用法**: `const currentStep = ref(1); // 期望从第一步开始`
82
179
  > **正确写法**: `const currentStep = ref(0); // 第一步索引为 0`
83
180
  > **说明**: 步骤索引从 0 开始,0 表示第一步
@@ -12,68 +12,134 @@ import { Transfer } from '@king-design/vue';
12
12
  ```
13
13
 
14
14
  ## 属性 (Props)
15
- | 属性名 | 类型 | 默认值 | 必填 | 说明 | 示例 |
16
- | --- | --- | --- | --- | --- | --- |
17
- | data | `TransferDataItem[]` | `undefined` | 是 | 需要展示的列表数据,包含 label、key、disabled 属性 | `<Transfer :data="data"></Transfer>` |
18
- | value | `string[]` | `[]` | 否 | 已选择的 key 数组,可用 v-model 双向绑定 | `<Transfer v-model="selectedKeys"></Transfer>` |
19
- | keyName | `string` | `"key"` | 否 | 指定数据的 key 属性名 | `<Transfer keyName="id"></Transfer>` |
20
- | labelName | `string` | `"label"` | 否 | 指定数据的 label 属性名 | `<Transfer labelName="name"></Transfer>` |
21
- | leftCheckedKeys | `string[]` | `[]` | 否 | 左侧勾选的节点 key 数组,可用 v-model:leftCheckedKeys | `<Transfer v-model:leftCheckedKeys="leftChecked"></Transfer>` |
22
- | rightCheckedKeys | `string[]` | `[]` | 否 | 右侧勾选的节点 key 数组,可用 v-model:rightCheckedKeys | `<Transfer v-model:rightCheckedKeys="rightChecked"></Transfer>` |
23
- | filterable | `boolean` | `false` | 否 | 是否启用过滤功能 | `<Transfer filterable></Transfer>` |
24
- | filter | `(data: TransferDataItem, keywords: string) => boolean` | `(data, keywords) => data.label.includes(keywords)` | 否 | 自定义过滤函数 | `<Transfer :filter="customFilter"></Transfer>` |
25
- | placeholder | `string` | `"请输入"` | 否 | 过滤输入框的占位文案 | `<Transfer placeholder="搜索..."></Transfer>` |
26
- | leftKeywords | `string` | `undefined` | 否 | 左侧筛选关键字 | `<Transfer v-model:leftKeywords="leftSearch"></Transfer>` |
27
- | rightKeywords | `string` | `undefined` | 否 | 右侧筛选关键字 | `<Transfer v-model:rightKeywords="rightSearch"></Transfer>` |
28
- | leftTitle | `string | VNode` | `"请选择"` | 否 | 左侧标题 | `<Transfer leftTitle="待选列表"></Transfer>` |
29
- | rightTitle | `string | VNode` | `"已选择"` | 否 | 右侧标题 | `<Transfer rightTitle="已选列表"></Transfer>` |
30
- | enableAdd | `() => boolean` | `undefined` | 否 | 控制右箭头按钮的可用状态 | `<Transfer :enableAdd="canAdd"></Transfer>` |
31
- | enableRemove | `() => boolean` | `undefined` | 否 | 控制左箭头按钮的可用状态 | `<Transfer :enableRemove="canRemove"></Transfer>` |
15
+ | 属性名 | 类型 | 默认值 | 必填 | 说明 | 标签 | 示例 |
16
+ | --- | --- | --- | --- | --- | --- | --- |
17
+ | data | `TransferDataItem[]` | `undefined` | 是 | 需要展示的列表数据,包含 label、key、disabled 属性 | - | `<Transfer :data="data"></Transfer>` |
18
+ | value | `string[]` | `[]` | 否 | 已选择的 key 数组,可用 v-model 双向绑定 | - | `<Transfer v-model="selectedKeys"></Transfer>` |
19
+ | keyName | `string` | `"key"` | 否 | 指定数据的 key 属性名 | - | `<Transfer keyName="id"></Transfer>` |
20
+ | labelName | `string` | `"label"` | 否 | 指定数据的 label 属性名 | - | `<Transfer labelName="name"></Transfer>` |
21
+ | leftCheckedKeys | `string[]` | `[]` | 否 | 左侧勾选的节点 key 数组,可用 v-model:leftCheckedKeys | - | `<Transfer v-model:leftCheckedKeys="leftChecked"></Transfer>` |
22
+ | rightCheckedKeys | `string[]` | `[]` | 否 | 右侧勾选的节点 key 数组,可用 v-model:rightCheckedKeys | - | `<Transfer v-model:rightCheckedKeys="rightChecked"></Transfer>` |
23
+ | filterable | `boolean` | `false` | 否 | 是否启用过滤功能 | - | `<Transfer filterable></Transfer>` |
24
+ | filter | `(data: TransferDataItem, keywords: string) => boolean` | `(data, keywords) => data.label.includes(keywords)` | 否 | 自定义过滤函数 | - | `<Transfer :filter="customFilter"></Transfer>` |
25
+ | placeholder | `string` | `"请输入"` | 否 | 过滤输入框的占位文案 | - | `<Transfer placeholder="搜索..."></Transfer>` |
26
+ | leftKeywords | `string` | `undefined` | 否 | 左侧筛选关键字 | - | `<Transfer v-model:leftKeywords="leftSearch"></Transfer>` |
27
+ | rightKeywords | `string` | `undefined` | 否 | 右侧筛选关键字 | - | `<Transfer v-model:rightKeywords="rightSearch"></Transfer>` |
28
+ | leftTitle | `string | VNode` | `"请选择"` | 否 | 左侧标题 | - | `<Transfer leftTitle="待选列表"></Transfer>` |
29
+ | rightTitle | `string | VNode` | `"已选择"` | 否 | 右侧标题 | - | `<Transfer rightTitle="已选列表"></Transfer>` |
30
+ | enableAdd | `() => boolean` | `undefined` | 否 | 控制右箭头按钮的可用状态 | - | `<Transfer :enableAdd="canAdd"></Transfer>` |
31
+ | enableRemove | `() => boolean` | `undefined` | 否 | 控制左箭头按钮的可用状态 | - | `<Transfer :enableRemove="canRemove"></Transfer>` |
32
32
 
33
33
  ## 事件 (Events)
34
34
  | 事件名 | Vue事件名 | 说明 | 回调参数 | 示例 |
35
35
  | --- | --- | --- | --- | --- |
36
36
  | add | `@add` | 点击右箭头按钮时触发 | `-` | `<Transfer @add="handleAdd"></Transfer>` |
37
37
  | remove | `@remove` | 点击左箭头按钮时触发 | `-` | `<Transfer @remove="handleRemove"></Transfer>` |
38
+ | page | `@page` | 启用分页时,左右面板任一侧翻页后触发。 | `model: 'left' | 'right', data: PaginationChangeData` | `<Transfer :pagination="true" @page="handlePage"></Transfer>` |
38
39
 
39
- ### 事件处理函数示例
40
- **add**:
41
- ```typescript
42
- const handleAdd = () => {
43
- console.log('数据已添加到右侧');
44
- };
45
- ```
40
+ ### 事件参数说明
41
+ **page**
42
+
43
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
44
+ | --- | --- | --- | --- | --- |
45
+ | model | `'left' | 'right'` | 是 | - | 触发翻页的面板标识,`left` 表示候选列表,`right` 表示已选列表。 |
46
+ | data | `PaginationChangeData` | 是 | - | 当前分页变更数据,通常包含页码和每页数量。 |
46
47
 
47
- **remove**:
48
+ 事件处理示例:
48
49
  ```typescript
49
- const handleRemove = () => {
50
- console.log('数据已移回左侧');
50
+ const handlePage = (model: 'left' | 'right', data: { value: number; limit: number }) => {
51
+ console.log(model, data.value, data.limit);
51
52
  };
52
53
  ```
53
54
 
54
55
  ## 插槽 (Slots)
55
56
  | 插槽名 | 说明 | 模板写法 | 示例 |
56
57
  | --- | --- | --- | --- |
57
- | header | 自定义整个头部内容 | `undefined` | - |
58
- | filter | 自定义检索内容 | `undefined` | - |
59
- | list | 自定义整个列表内容 | `undefined` | - |
60
- | label | 自定义每一项的渲染函数,类似于label属性 | `undefined` | - |
58
+ | header | 自定义整个头部内容 | `#header="type"` | `<Transfer :data="data">
59
+ <template #header="type">
60
+ <span>{{ type === 'left' ? '待选列表' : '已选列表' }}</span>
61
+ </template>
62
+ </Transfer>` |
63
+ | filter | 自定义检索内容 | `#filter="type"` | `<Transfer :data="data">
64
+ <template #filter="type">
65
+ <span>{{ type === 'left' ? '搜索左侧' : '搜索右侧' }}</span>
66
+ </template>
67
+ </Transfer>` |
68
+ | list | 自定义整个列表内容 | `#list="type"` | `<Transfer :data="data">
69
+ <template #list="type">
70
+ <div>当前面板: {{ type }}</div>
71
+ </template>
72
+ </Transfer>` |
73
+ | label | 自定义每一项的渲染函数,类似于 label 属性 | `#label="[data, key, type]"` | `<Transfer :data="data">
74
+ <template #label="[data, key, type]">
75
+ <span>{{ data.label }} - {{ type }} - {{ key }}</span>
76
+ </template>
77
+ </Transfer>` |
78
+
79
+ ### 插槽参数说明
80
+ **header**
81
+
82
+ - 参数结构: #header="type"
83
+ - 参数列表: `type: 'left' | 'right'`
84
+
85
+ **filter**
86
+
87
+ - 参数结构: #filter="type"
88
+ - 参数列表: `type: 'left' | 'right'`
89
+
90
+ **list**
91
+
92
+ - 参数结构: #list="type"
93
+ - 参数列表: `type: 'left' | 'right'`
94
+
95
+ **label**
96
+
97
+ - 参数结构: #label="[data, key, type]"
98
+ - 参数列表: `data: TransferDataItem`、`key: string | number`、`type: 'left' | 'right'`
61
99
 
62
100
  ## 方法 (Methods)
63
101
  | 方法名 | 说明 | 参数 | 返回值 |
64
102
  | --- | --- | --- | --- |
65
103
  | getData | 获取右侧已选择的节点数据 | `-` | `TransferDataItem[]` |
66
- | getCheckedData | 获取勾选的节点数据 | `-` | `TransferDataItem[]` |
104
+ | getCheckedData | 获取勾选的节点数据 | `model: 'left' | 'right'` | `TransferDataItem[]` |
105
+
106
+ ### 方法参数说明
107
+ **getCheckedData**
108
+
109
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
110
+ | --- | --- | --- | --- | --- |
111
+ | model | `'left' | 'right'` | 是 | - | 指定读取左侧候选列表或右侧已选列表中的勾选数据。 |
112
+
113
+ 调用示例:
114
+ ```typescript
115
+ const leftChecked = transferRef.value?.getCheckedData('left');
116
+ ```
117
+
118
+ ### 方法调用示例
119
+ **getData**
120
+
121
+ ```typescript
122
+ const rightData = transferRef.value?.getData();
123
+ ```
124
+
125
+ **getCheckedData**
126
+
127
+ ```typescript
128
+ const leftChecked = transferRef.value?.getCheckedData('left');
129
+ ```
67
130
 
68
131
  ## 常见错误与正确用法 (Anti-Hallucination)
132
+ ### data 中缺少 key 属性
69
133
  > **错误用法**: `const data = [{ label: '选项1' }]; // 缺少 key`
70
134
  > **正确写法**: `const data = [{ label: '选项1', key: 1 }];`
71
135
  > **说明**: 每个数据项必须有 key 属性(或通过 keyName 指定的属性)
72
136
 
137
+ ### value 类型错误
73
138
  > **错误用法**: `const value = ref(0); // 应该是数组`
74
139
  > **正确写法**: `const value = ref<number[]>([]);`
75
140
  > **说明**: value 必须是数组类型
76
141
 
142
+ ### keyName 与实际属性名不匹配
77
143
  > **错误用法**: `const data = [{ id: 1, name: '张三' }];
78
144
  <Transfer :data="data" /> <!-- 默认使用 key,但数据中是 id -->`
79
145
  > **正确写法**: `const data = [{ id: 1, name: '张三' }];
@@ -222,7 +288,7 @@ const value = ref<string[]>([]);
222
288
 
223
289
  使用方法获取穿梭框数据
224
290
 
225
- **使用的 API**: 属性: data, value
291
+ **使用的 API**: 属性: data, value | 方法: getData
226
292
 
227
293
  ```vue
228
294
  <script setup lang="ts">
@@ -12,23 +12,23 @@ import { Tree } from '@king-design/vue';
12
12
  ```
13
13
 
14
14
  ## 属性 (Props)
15
- | 属性名 | 类型 | 默认值 | 必填 | 说明 | 示例 |
16
- | --- | --- | --- | --- | --- | --- |
17
- | data | `TreeDataItem[]` | `undefined` | 是 | 要渲染的树形数据 | `<Tree :data="treeData"></Tree>` |
18
- | expandedKeys | `K[]` | `undefined` | 否 | 指定展开的节点 key 数组,可用 v-model:expandedKeys | `<Tree v-model:expandedKeys="expandedKeys"></Tree>` |
19
- | defaultExpandAll | `boolean` | `false` | 否 | 是否默认展开所有节点 | `<Tree defaultExpandAll></Tree>` |
20
- | checkbox | `boolean` | `false` | 否 | 是否展示复选框 | `<Tree checkbox></Tree>` |
21
- | checkedKeys | `K[]` | `undefined` | 否 | 指定勾选的节点 key 数组,可用 v-model:checkedKeys | `<Tree checkbox v-model:checkedKeys="checkedKeys"></Tree>` |
22
- | uncorrelated | `boolean` | `false` | 否 | 父子 checkbox 选中状态是否互不关联 | `<Tree checkbox uncorrelated></Tree>` |
23
- | selectable | `boolean` | `true` | 否 | 节点是否可选中 | `<Tree :selectable="false"></Tree>` |
24
- | selectedKeys | `K[]` | `undefined` | 否 | 指定选中的节点 key 数组,可用 v-model:selectedKeys | `<Tree v-model:selectedKeys="selectedKeys"></Tree>` |
25
- | multiple | `boolean` | `false` | 否 | selectedKeys 是否支持多选 | `<Tree multiple></Tree>` |
26
- | filter | `(data: TreeDataItem, node: TreeNode) => boolean` | `undefined` | 否 | 节点过滤函数,返回 true 则展示,否则过滤掉 | `<Tree :filter="filterFn"></Tree>` |
27
- | load | `(node: TreeNode) => Promise<void> | void` | `undefined` | 否 | 异步加载节点数据的函数 | `<Tree :load="loadData"></Tree>` |
28
- | showLine | `boolean` | `true` | 否 | 是否展示左侧对齐线 | `<Tree :showLine="false"></Tree>` |
29
- | draggable | `boolean` | `false` | 否 | 是否支持拖拽 | `<Tree draggable></Tree>` |
30
- | allowDrag | `(node: TreeNode) => boolean` | `undefined` | 否 | 指定哪些节点可拖拽 | `<Tree draggable :allowDrag="allowDragFn"></Tree>` |
31
- | allowDrop | `(node: TreeNode, srcNode: TreeNode) => boolean` | `undefined` | 否 | 指定哪些节点可以插入子节点 | `<Tree draggable :allowDrop="allowDropFn"></Tree>` |
15
+ | 属性名 | 类型 | 默认值 | 必填 | 说明 | 标签 | 示例 |
16
+ | --- | --- | --- | --- | --- | --- | --- |
17
+ | data | `TreeDataItem[]` | `undefined` | 是 | 要渲染的树形数据 | - | `<Tree :data="treeData"></Tree>` |
18
+ | expandedKeys | `K[]` | `undefined` | 否 | 指定展开的节点 key 数组,可用 v-model:expandedKeys | - | `<Tree v-model:expandedKeys="expandedKeys"></Tree>` |
19
+ | defaultExpandAll | `boolean` | `false` | 否 | 是否默认展开所有节点 | - | `<Tree defaultExpandAll></Tree>` |
20
+ | checkbox | `boolean` | `false` | 否 | 是否展示复选框 | - | `<Tree checkbox></Tree>` |
21
+ | checkedKeys | `K[]` | `undefined` | 否 | 指定勾选的节点 key 数组,可用 v-model:checkedKeys | - | `<Tree checkbox v-model:checkedKeys="checkedKeys"></Tree>` |
22
+ | uncorrelated | `boolean` | `false` | 否 | 父子 checkbox 选中状态是否互不关联 | - | `<Tree checkbox uncorrelated></Tree>` |
23
+ | selectable | `boolean` | `true` | 否 | 节点是否可选中 | - | `<Tree :selectable="false"></Tree>` |
24
+ | selectedKeys | `K[]` | `undefined` | 否 | 指定选中的节点 key 数组,可用 v-model:selectedKeys | - | `<Tree v-model:selectedKeys="selectedKeys"></Tree>` |
25
+ | multiple | `boolean` | `false` | 否 | selectedKeys 是否支持多选 | - | `<Tree multiple></Tree>` |
26
+ | filter | `(data: TreeDataItem, node: TreeNode) => boolean` | `undefined` | 否 | 节点过滤函数,返回 true 则展示,否则过滤掉 | - | `<Tree :filter="filterFn"></Tree>` |
27
+ | load | `(node: TreeNode) => Promise<void> | void` | `undefined` | 否 | 异步加载节点数据的函数 | - | `<Tree :load="loadData"></Tree>` |
28
+ | showLine | `boolean` | `true` | 否 | 是否展示左侧对齐线 | - | `<Tree :showLine="false"></Tree>` |
29
+ | draggable | `boolean` | `false` | 否 | 是否支持拖拽 | - | `<Tree draggable></Tree>` |
30
+ | allowDrag | `(node: TreeNode) => boolean` | `undefined` | 否 | 指定哪些节点可拖拽 | - | `<Tree draggable :allowDrag="allowDragFn"></Tree>` |
31
+ | allowDrop | `(node: TreeNode, srcNode: TreeNode) => boolean` | `undefined` | 否 | 指定哪些节点可以插入子节点 | - | `<Tree draggable :allowDrop="allowDropFn"></Tree>` |
32
32
 
33
33
  ## 事件 (Events)
34
34
  | 事件名 | Vue事件名 | 说明 | 回调参数 | 示例 |
@@ -37,38 +37,143 @@ import { Tree } from '@king-design/vue';
37
37
  | denydrag | `@denydrag` | 拖拽不允许拖拽的节点时触发 | `node: TreeNode` | `<Tree @denydrag="handleDenyDrag"></Tree>` |
38
38
  | denydrop | `@denydrop` | 插入到不允许插入的节点时触发 | `node: TreeNode, srcNode: TreeNode, mode: TreeMode` | `<Tree @denydrop="handleDenyDrop"></Tree>` |
39
39
 
40
- ### 事件处理函数示例
41
- **dragend**:
40
+ ### 事件参数说明
41
+ **dragend**
42
+
43
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
44
+ | --- | --- | --- | --- | --- |
45
+ | data | `DragEndData` | 是 | - | 拖拽数据,包含 srcNode、toNode、mode |
46
+
47
+ 事件处理示例:
42
48
  ```typescript
43
49
  const handleDragEnd = (data) => {
44
50
  console.log(`${data.srcNode.data.label} -> ${data.toNode.data.label}`);
45
51
  };
46
52
  ```
47
53
 
54
+ **denydrag**
55
+
56
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
57
+ | --- | --- | --- | --- | --- |
58
+ | node | `TreeNode` | 是 | - | 被拒绝拖拽的节点 |
59
+
60
+ **denydrop**
61
+
62
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
63
+ | --- | --- | --- | --- | --- |
64
+ | node | `TreeNode` | 是 | - | 目标节点 |
65
+ | srcNode | `TreeNode` | 是 | - | 源节点 |
66
+ | mode | `TreeMode` | 是 | - | 插入模式 |
67
+
48
68
  ## 插槽 (Slots)
49
69
  | 插槽名 | 说明 | 模板写法 | 示例 |
50
70
  | --- | --- | --- | --- |
51
- | label | 自定义节点渲染内容 | `undefined` | - |
71
+ | label | 自定义节点渲染内容 | `#label="[data, node, index]"` | `<Tree :data="treeData">
72
+ <template #label="[data, node]">
73
+ <span>{{ data.label }}</span>
74
+ <em v-if="node.isLeaf">叶子</em>
75
+ </template>
76
+ </Tree>` |
77
+
78
+ ### 插槽参数说明
79
+ **label**
80
+
81
+ - 参数结构: #label="[data, node, index]"
82
+ - 参数列表: `data: TreeDataItem`、`node: TreeNode`、`index: number`
52
83
 
53
84
  ## 方法 (Methods)
54
85
  | 方法名 | 说明 | 参数 | 返回值 |
55
86
  | --- | --- | --- | --- |
56
- | getCheckedData | 获取勾选的节点数据 | `-` | `TreeDataItem[]` |
87
+ | getCheckedData | 获取勾选的节点数据 | `leafOnly?: boolean` | `TreeDataItem[]` |
57
88
  | getSelectedData | 获取选中的节点数据 | `-` | `TreeDataItem[]` |
58
- | expand | 展开指定节点 | `-` | `void` |
59
- | shrink | 收起指定节点 | `-` | `void` |
89
+ | expand | 展开指定节点 | `key: K` | `void` |
90
+ | shrink | 收起指定节点 | `key: K` | `void` |
60
91
  | expandAll | 展开所有节点 | `-` | `void` |
61
92
  | getNodes | 返回一级节点数组 | `-` | `TreeNode[]` |
62
93
 
94
+ ### 方法参数说明
95
+ **getCheckedData**
96
+
97
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
98
+ | --- | --- | --- | --- | --- |
99
+ | leafOnly | `boolean` | 否 | `false` | 是否只返回叶子节点;传 `true` 时会过滤掉父级节点。 |
100
+
101
+ 调用示例:
102
+ ```typescript
103
+ const checkedData = treeRef.value?.getCheckedData();
104
+ ```
105
+
106
+ **expand**
107
+
108
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
109
+ | --- | --- | --- | --- | --- |
110
+ | key | `K` | 是 | - | 要展开的节点 key |
111
+
112
+ 调用示例:
113
+ ```typescript
114
+ treeRef.value?.expand('node1');
115
+ ```
116
+
117
+ **shrink**
118
+
119
+ | 参数 | 类型 | 必填 | 默认值 | 说明 |
120
+ | --- | --- | --- | --- | --- |
121
+ | key | `K` | 是 | - | 要收起的节点 key |
122
+
123
+ 调用示例:
124
+ ```typescript
125
+ treeRef.value?.shrink('node1');
126
+ ```
127
+
128
+ ### 方法调用示例
129
+ **getCheckedData**
130
+
131
+ ```typescript
132
+ const checkedData = treeRef.value?.getCheckedData();
133
+ ```
134
+
135
+ **getSelectedData**
136
+
137
+ ```typescript
138
+ const selectedData = treeRef.value?.getSelectedData();
139
+ ```
140
+
141
+ **expand**
142
+
143
+ ```typescript
144
+ treeRef.value?.expand('node1');
145
+ ```
146
+
147
+ **shrink**
148
+
149
+ ```typescript
150
+ treeRef.value?.shrink('node1');
151
+ ```
152
+
153
+ **expandAll**
154
+
155
+ ```typescript
156
+ treeRef.value?.expandAll();
157
+ ```
158
+
159
+ **getNodes**
160
+
161
+ ```typescript
162
+ const nodes = treeRef.value?.getNodes();
163
+ ```
164
+
63
165
  ## 常见错误与正确用法 (Anti-Hallucination)
166
+ ### data 中缺少 key 属性
64
167
  > **错误用法**: `const data = [{ label: '节点1' }]; // 缺少 key`
65
168
  > **正确写法**: `const data = [{ label: '节点1', key: 'node1' }];`
66
169
  > **说明**: 每个节点必须有唯一的 key 属性
67
170
 
171
+ ### 异步加载时未设置 children 为空数组
68
172
  > **错误用法**: `const data = [{ label: '父节点', key: 'parent' }]; // 无 children,不会显示展开箭头`
69
173
  > **正确写法**: `const data = [{ label: '父节点', key: 'parent', children: [] }];`
70
174
  > **说明**: 异步加载节点需要设置 children 为空数组,才会显示展开箭头
71
175
 
176
+ ### checkbox 模式下 checkedKeys 类型错误
72
177
  > **错误用法**: `const checkedKeys = ref('node1'); // 应该是数组`
73
178
  > **正确写法**: `const checkedKeys = ref<string[]>(['node1']);`
74
179
  > **说明**: checkedKeys 必须是数组类型
@@ -118,7 +223,7 @@ const data = reactive([
118
223
 
119
224
  带复选框的树形控件
120
225
 
121
- **使用的 API**: 属性: data, checkbox, checkedKeys, expandedKeys
226
+ **使用的 API**: 属性: data, checkbox, checkedKeys, expandedKeys | 方法: getCheckedData
122
227
 
123
228
  ```vue
124
229
  <script setup lang="ts">