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,499 +1,500 @@
1
1
  {
2
- "id": "upload",
3
- "name": "Upload",
4
- "displayName": "上传",
5
- "category": "form",
6
- "description": "文件上传组件,支持点击、拖拽、照片墙等多种风格。支持文件大小/数量限制、上传前验证、自定义请求头和数据等功能。",
7
- "importStatement": "import { Upload } from '@king-design/vue';",
8
- "props": [
9
- {
10
- "name": "action",
11
- "description": "上传地址",
12
- "type": {
13
- "raw": "string",
14
- "kind": "string"
15
- },
16
- "required": true,
17
- "usageExample": "<Upload action=\"/api/upload\" />"
18
- },
19
- {
20
- "name": "files",
21
- "description": "已上传和待上传的文件列表,可用 v-model:files 双向绑定",
22
- "type": {
23
- "raw": "UploadFile[]",
24
- "kind": "array"
25
- },
26
- "required": false,
27
- "default": "[]",
28
- "usageExample": "<Upload v-model:files=\"fileList\" />"
29
- },
30
- {
31
- "name": "type",
32
- "description": "组件风格",
33
- "type": {
34
- "raw": "\"select\" | \"drag\" | \"gallery\"",
35
- "kind": "union",
36
- "unionTypes": [
37
- "select",
38
- "drag",
39
- "gallery"
40
- ]
41
- },
42
- "required": false,
43
- "default": "\"select\"",
44
- "allowedValues": [
45
- {
46
- "value": "select",
47
- "label": "点击选择",
48
- "isDefault": true
2
+ "id": "upload",
3
+ "name": "Upload",
4
+ "displayName": "上传",
5
+ "category": "form",
6
+ "description": "文件上传组件,支持点击、拖拽、照片墙等多种风格。支持文件大小/数量限制、上传前验证、自定义请求头和数据等功能。",
7
+ "importStatement": "import { Upload } from '@king-design/vue';",
8
+ "props": [
9
+ {
10
+ "name": "action",
11
+ "description": "上传地址",
12
+ "type": {
13
+ "raw": "string",
14
+ "kind": "string"
15
+ },
16
+ "required": true,
17
+ "usageExample": "<Upload action=\"/api/upload\" />"
18
+ },
19
+ {
20
+ "name": "files",
21
+ "description": "已上传和待上传的文件列表,可用 v-model:files 双向绑定",
22
+ "type": {
23
+ "raw": "UploadFile[]",
24
+ "kind": "array"
25
+ },
26
+ "required": false,
27
+ "default": "[]",
28
+ "usageExample": "<Upload v-model:files=\"fileList\" />"
29
+ },
30
+ {
31
+ "name": "defaultFiles",
32
+ "description": "默认文件列表,用于初始化已上传文件,不与 files 双向绑定",
33
+ "type": {
34
+ "raw": "(Partial<UploadFile> & Pick<UploadFile, 'name' | 'url'>)[]",
35
+ "kind": "array"
36
+ },
37
+ "required": false,
38
+ "default": "[]",
39
+ "usageExample": "<Upload :defaultFiles=\"[{ name: 'demo.png', url: 'https://example.com/demo.png' }]\" />"
40
+ },
41
+ {
42
+ "name": "type",
43
+ "description": "组件风格",
44
+ "type": {
45
+ "raw": "\"select\" | \"drag\" | \"gallery\"",
46
+ "kind": "union",
47
+ "unionTypes": [
48
+ "select",
49
+ "drag",
50
+ "gallery"
51
+ ]
52
+ },
53
+ "required": false,
54
+ "default": "\"select\"",
55
+ "allowedValues": [
56
+ {
57
+ "value": "select",
58
+ "label": "点击选择",
59
+ "isDefault": true
60
+ },
61
+ {
62
+ "value": "drag",
63
+ "label": "拖拽上传"
64
+ },
65
+ {
66
+ "value": "gallery",
67
+ "label": "照片墙风格"
68
+ }
69
+ ],
70
+ "usageExample": "<Upload type=\"drag\" />"
71
+ },
72
+ {
73
+ "name": "accept",
74
+ "description": "支持上传的文件类型",
75
+ "type": {
76
+ "raw": "string",
77
+ "kind": "string"
78
+ },
79
+ "required": false,
80
+ "default": "undefined",
81
+ "usageExample": "<Upload accept=\".jpg, .png, .gif\" />"
82
+ },
83
+ {
84
+ "name": "multiple",
85
+ "description": "是否支持多选文件",
86
+ "type": {
87
+ "raw": "boolean",
88
+ "kind": "boolean"
89
+ },
90
+ "required": false,
91
+ "default": "false",
92
+ "usageExample": "<Upload multiple />"
93
+ },
94
+ {
95
+ "name": "maxSize",
96
+ "description": "最大上传文件大小限制(kb)",
97
+ "type": {
98
+ "raw": "number",
99
+ "kind": "number"
100
+ },
101
+ "required": false,
102
+ "default": "undefined",
103
+ "usageExample": "<Upload :maxSize=\"500\" />"
104
+ },
105
+ {
106
+ "name": "limit",
107
+ "description": "最大上传文件数量限制",
108
+ "type": {
109
+ "raw": "number",
110
+ "kind": "number"
111
+ },
112
+ "required": false,
113
+ "default": "undefined",
114
+ "usageExample": "<Upload :limit=\"5\" />"
115
+ },
116
+ {
117
+ "name": "autoUpload",
118
+ "description": "是否选择文件后自动上传",
119
+ "type": {
120
+ "raw": "boolean",
121
+ "kind": "boolean"
122
+ },
123
+ "required": false,
124
+ "default": "true",
125
+ "usageExample": "<Upload :autoUpload=\"false\" />"
126
+ },
127
+ {
128
+ "name": "beforeUpload",
129
+ "description": "上传前的回调函数,返回 false 取消上传,支持异步",
130
+ "type": {
131
+ "raw": "(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>",
132
+ "kind": "function",
133
+ "functionSignature": "(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>"
134
+ },
135
+ "required": false,
136
+ "default": "undefined",
137
+ "usageExample": "<Upload :beforeUpload=\"handleBeforeUpload\" />"
138
+ },
139
+ {
140
+ "name": "beforeRemove",
141
+ "description": "删除前的回调函数,返回 false 取消删除,支持异步",
142
+ "type": {
143
+ "raw": "(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>",
144
+ "kind": "function",
145
+ "functionSignature": "(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>"
146
+ },
147
+ "required": false,
148
+ "default": "undefined",
149
+ "usageExample": "<Upload :beforeRemove=\"handleBeforeRemove\" />"
150
+ },
151
+ {
152
+ "name": "data",
153
+ "description": "上传附加的请求数据,可以是对象或函数",
154
+ "type": {
155
+ "raw": "object | ((file: UploadFile) => object)",
156
+ "kind": "union"
157
+ },
158
+ "required": false,
159
+ "default": "undefined",
160
+ "usageExample": "<Upload :data=\"{userId: '123'}\" />"
161
+ },
162
+ {
163
+ "name": "headers",
164
+ "description": "上传的请求头",
165
+ "type": {
166
+ "raw": "Record<string, string>",
167
+ "kind": "object"
168
+ },
169
+ "required": false,
170
+ "default": "undefined",
171
+ "usageExample": "<Upload :headers=\"{Authorization: 'Bearer token'}\" />"
49
172
  },
50
173
  {
51
- "value": "drag",
52
- "label": "拖拽上传"
174
+ "name": "name",
175
+ "description": "上传文件字段名",
176
+ "type": {
177
+ "raw": "string",
178
+ "kind": "string"
179
+ },
180
+ "required": false,
181
+ "default": "undefined",
182
+ "usageExample": "<Upload name=\"file\" />"
53
183
  },
54
184
  {
55
- "value": "gallery",
56
- "label": "照片墙风格"
185
+ "name": "withCredentials",
186
+ "description": "跨域请求是否允许传送 cookie",
187
+ "type": {
188
+ "raw": "boolean",
189
+ "kind": "boolean"
190
+ },
191
+ "required": false,
192
+ "default": "false",
193
+ "usageExample": "<Upload withCredentials />"
194
+ },
195
+ {
196
+ "name": "directory",
197
+ "description": "是否支持上传文件夹",
198
+ "type": {
199
+ "raw": "boolean",
200
+ "kind": "boolean"
201
+ },
202
+ "required": false,
203
+ "default": "false",
204
+ "usageExample": "<Upload directory />"
205
+ },
206
+ {
207
+ "name": "disabled",
208
+ "description": "是否禁用上传",
209
+ "type": {
210
+ "raw": "boolean",
211
+ "kind": "boolean"
212
+ },
213
+ "required": false,
214
+ "default": "false",
215
+ "usageExample": "<Upload disabled />"
57
216
  }
58
- ],
59
- "usageExample": "<Upload type=\"drag\" />"
60
- },
61
- {
62
- "name": "accept",
63
- "description": "支持上传的文件类型",
64
- "type": {
65
- "raw": "string",
66
- "kind": "string"
67
- },
68
- "required": false,
69
- "default": "undefined",
70
- "usageExample": "<Upload accept=\".jpg, .png, .gif\" />"
71
- },
72
- {
73
- "name": "multiple",
74
- "description": "是否支持多选文件",
75
- "type": {
76
- "raw": "boolean",
77
- "kind": "boolean"
78
- },
79
- "required": false,
80
- "default": "false",
81
- "usageExample": "<Upload multiple />"
82
- },
83
- {
84
- "name": "maxSize",
85
- "description": "最大上传文件大小限制(kb)",
86
- "type": {
87
- "raw": "number",
88
- "kind": "number"
89
- },
90
- "required": false,
91
- "default": "undefined",
92
- "usageExample": "<Upload :maxSize=\"500\" />"
93
- },
94
- {
95
- "name": "limit",
96
- "description": "最大上传文件数量限制",
97
- "type": {
98
- "raw": "number",
99
- "kind": "number"
100
- },
101
- "required": false,
102
- "default": "undefined",
103
- "usageExample": "<Upload :limit=\"5\" />"
104
- },
105
- {
106
- "name": "autoUpload",
107
- "description": "是否选择文件后自动上传",
108
- "type": {
109
- "raw": "boolean",
110
- "kind": "boolean"
111
- },
112
- "required": false,
113
- "default": "true",
114
- "usageExample": "<Upload :autoUpload=\"false\" />"
115
- },
116
- {
117
- "name": "beforeUpload",
118
- "description": "上传前的回调函数,返回 false 取消上传,支持异步",
119
- "type": {
120
- "raw": "(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>",
121
- "kind": "function",
122
- "functionSignature": "(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>"
123
- },
124
- "required": false,
125
- "default": "undefined",
126
- "usageExample": "<Upload :beforeUpload=\"handleBeforeUpload\" />"
127
- },
128
- {
129
- "name": "beforeRemove",
130
- "description": "删除前的回调函数,返回 false 取消删除,支持异步",
131
- "type": {
132
- "raw": "(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>",
133
- "kind": "function",
134
- "functionSignature": "(file: UploadFile, files: UploadFile[]) => boolean | Promise<boolean>"
135
- },
136
- "required": false,
137
- "default": "undefined",
138
- "usageExample": "<Upload :beforeRemove=\"handleBeforeRemove\" />"
139
- },
140
- {
141
- "name": "data",
142
- "description": "上传附加的请求数据,可以是对象或函数",
143
- "type": {
144
- "raw": "object | ((file: UploadFile) => object)",
145
- "kind": "union"
146
- },
147
- "required": false,
148
- "default": "undefined",
149
- "usageExample": "<Upload :data=\"{userId: '123'}\" />"
150
- },
151
- {
152
- "name": "headers",
153
- "description": "上传的请求头",
154
- "type": {
155
- "raw": "Record<string, string>",
156
- "kind": "object"
157
- },
158
- "required": false,
159
- "default": "undefined",
160
- "usageExample": "<Upload :headers=\"{Authorization: 'Bearer token'}\" />"
161
- },
162
- {
163
- "name": "name",
164
- "description": "上传文件字段名",
165
- "type": {
166
- "raw": "string",
167
- "kind": "string"
168
- },
169
- "required": false,
170
- "default": "undefined",
171
- "usageExample": "<Upload name=\"file\" />"
172
- },
173
- {
174
- "name": "withCredentials",
175
- "description": "跨域请求是否允许传送 cookie",
176
- "type": {
177
- "raw": "boolean",
178
- "kind": "boolean"
179
- },
180
- "required": false,
181
- "default": "false",
182
- "usageExample": "<Upload withCredentials />"
183
- },
184
- {
185
- "name": "directory",
186
- "description": "是否支持上传文件夹",
187
- "type": {
188
- "raw": "boolean",
189
- "kind": "boolean"
190
- },
191
- "required": false,
192
- "default": "false",
193
- "usageExample": "<Upload directory />"
194
- },
195
- {
196
- "name": "disabled",
197
- "description": "是否禁用上传",
198
- "type": {
199
- "raw": "boolean",
200
- "kind": "boolean"
201
- },
202
- "required": false,
203
- "default": "false",
204
- "usageExample": "<Upload disabled />"
205
- }
206
- ],
207
- "events": [
208
- {
209
- "name": "progress",
210
- "vueEventName": "@progress",
211
- "description": "文件上传过程中触发",
212
- "payload": [
213
- {
214
- "name": "event",
215
- "type": "ProgressEvent",
216
- "description": "进度事件"
217
+ ],
218
+ "events": [
219
+ {
220
+ "name": "progress",
221
+ "vueEventName": "@progress",
222
+ "description": "文件上传过程中触发",
223
+ "payload": [
224
+ {
225
+ "name": "event",
226
+ "type": "ProgressEvent",
227
+ "description": "进度事件"
228
+ },
229
+ {
230
+ "name": "xhr",
231
+ "type": "XMLHttpRequest",
232
+ "description": "请求对象"
233
+ },
234
+ {
235
+ "name": "file",
236
+ "type": "UploadFile",
237
+ "description": "当前文件"
238
+ },
239
+ {
240
+ "name": "files",
241
+ "type": "UploadFile[]",
242
+ "description": "所有文件列表"
243
+ }
244
+ ],
245
+ "usageExample": "<Upload @progress=\"handleProgress\">",
246
+ "handlerExample": "const handleProgress = (e, xhr, file, files) => {\n console.log('进度:', file.percent);\n};"
217
247
  },
218
248
  {
219
- "name": "xhr",
220
- "type": "XMLHttpRequest",
221
- "description": "请求对象"
249
+ "name": "success",
250
+ "vueEventName": "@success",
251
+ "description": "文件上传成功时触发",
252
+ "payload": [
253
+ {
254
+ "name": "res",
255
+ "type": "any",
256
+ "description": "服务器响应"
257
+ },
258
+ {
259
+ "name": "xhr",
260
+ "type": "XMLHttpRequest",
261
+ "description": "请求对象"
262
+ },
263
+ {
264
+ "name": "file",
265
+ "type": "UploadFile",
266
+ "description": "当前文件"
267
+ },
268
+ {
269
+ "name": "files",
270
+ "type": "UploadFile[]",
271
+ "description": "所有文件列表"
272
+ }
273
+ ],
274
+ "usageExample": "<Upload @success=\"handleSuccess\">",
275
+ "handlerExample": "const handleSuccess = (res, xhr, file, files) => {\n console.log('上传成功:', res);\n};"
222
276
  },
223
277
  {
224
- "name": "file",
225
- "type": "UploadFile",
226
- "description": "当前文件"
278
+ "name": "error",
279
+ "vueEventName": "@error",
280
+ "description": "文件超出限制或上传失败时触发",
281
+ "payload": [
282
+ {
283
+ "name": "err",
284
+ "type": "Error | RequestError",
285
+ "description": "错误信息"
286
+ },
287
+ {
288
+ "name": "file",
289
+ "type": "File | File[] | UploadFile",
290
+ "description": "相关文件"
291
+ },
292
+ {
293
+ "name": "files",
294
+ "type": "UploadFile[]",
295
+ "description": "所有文件列表"
296
+ }
297
+ ],
298
+ "usageExample": "<Upload @error=\"handleError\">",
299
+ "handlerExample": "const handleError = (err, file, files) => {\n Message.error(err.message);\n};"
300
+ }
301
+ ],
302
+ "methods": [
303
+ {
304
+ "name": "submit",
305
+ "description": "手动上传时,调用该方法开始上传",
306
+ "returnType": "void",
307
+ "usageExample": "uploadRef.value?.submit();"
308
+ }
309
+ ],
310
+ "typeDefinitions": [
311
+ {
312
+ "name": "UploadFile",
313
+ "definition": "type UploadFile = {\n name: string\n url?: string\n status?: UploadFileStatus\n type?: string\n size?: number\n percent?: number\n uid?: number\n raw?: File\n}",
314
+ "description": "上传文件对象类型"
227
315
  },
228
316
  {
229
- "name": "files",
230
- "type": "UploadFile[]",
231
- "description": "所有文件列表"
317
+ "name": "UploadFileStatus",
318
+ "definition": "enum UploadFileStatus {\n Done,\n Ready,\n NotReady,\n Uploading,\n Error\n}",
319
+ "description": "文件上传状态"
232
320
  }
233
- ],
234
- "usageExample": "<Upload @progress=\"handleProgress\"></Upload>",
235
- "handlerExample": "const handleProgress = (e, xhr, file, files) => {\n console.log('进度:', file.percent);\n};"
236
- },
237
- {
238
- "name": "success",
239
- "vueEventName": "@success",
240
- "description": "文件上传成功时触发",
241
- "payload": [
242
- {
243
- "name": "res",
244
- "type": "any",
245
- "description": "服务器响应"
321
+ ],
322
+ "examples": [
323
+ {
324
+ "id": "upload_basic",
325
+ "title": "基础用法",
326
+ "description": "基本的文件上传",
327
+ "difficulty": "easy",
328
+ "code": "<script setup lang=\"ts\">\nimport { Upload, Message } from '@king-design/vue';\n\nconst handleError = (err: any) => {\n Message.error(err.message);\n};\n\nconst handleSuccess = (res: any) => {\n Message.success('上传成功');\n};\n</script>\n<template>\n <Upload \n action=\"/api/upload\"\n @error=\"handleError\"\n @success=\"handleSuccess\"\n />\n</template>",
329
+ "tags": [
330
+ "basic"
331
+ ],
332
+ "usedProps": [
333
+ "action"
334
+ ],
335
+ "usedEvents": [
336
+ "success",
337
+ "error"
338
+ ],
339
+ "usedMethods": [],
340
+ "scenario": "创建一个基本的文件上传"
246
341
  },
247
342
  {
248
- "name": "xhr",
249
- "type": "XMLHttpRequest",
250
- "description": "请求对象"
343
+ "id": "upload_drag",
344
+ "title": "拖拽上传",
345
+ "description": "拖拽风格的上传区域",
346
+ "difficulty": "easy",
347
+ "code": "<script setup lang=\"ts\">\nimport { Upload } from '@king-design/vue';\n</script>\n<template>\n <Upload \n type=\"drag\"\n action=\"/api/upload\"\n multiple\n />\n</template>",
348
+ "tags": [
349
+ "drag",
350
+ "type"
351
+ ],
352
+ "usedProps": [
353
+ "action",
354
+ "type",
355
+ "multiple"
356
+ ],
357
+ "usedEvents": [],
358
+ "usedMethods": [],
359
+ "scenario": "创建拖拽上传区域"
251
360
  },
252
361
  {
253
- "name": "file",
254
- "type": "UploadFile",
255
- "description": "当前文件"
362
+ "id": "upload_gallery",
363
+ "title": "照片墙风格",
364
+ "description": "照片墙风格的图片上传",
365
+ "difficulty": "easy",
366
+ "code": "<script setup lang=\"ts\">\nimport { Upload, Message } from '@king-design/vue';\n\nconst handleError = (err: any) => {\n Message.error(err.message);\n};\n</script>\n<template>\n <Upload \n type=\"gallery\"\n action=\"/api/upload\"\n multiple\n accept=\".jpg, .png, .gif\"\n :limit=\"5\"\n @error=\"handleError\"\n />\n</template>",
367
+ "tags": [
368
+ "gallery",
369
+ "image"
370
+ ],
371
+ "usedProps": [
372
+ "action",
373
+ "type",
374
+ "multiple",
375
+ "accept",
376
+ "limit"
377
+ ],
378
+ "usedEvents": [
379
+ "error"
380
+ ],
381
+ "usedMethods": [],
382
+ "scenario": "创建照片墙风格的图片上传"
256
383
  },
257
384
  {
258
- "name": "files",
259
- "type": "UploadFile[]",
260
- "description": "所有文件列表"
385
+ "id": "upload_limit",
386
+ "title": "限制文件",
387
+ "description": "限制文件类型、大小和数量",
388
+ "difficulty": "easy",
389
+ "code": "<script setup lang=\"ts\">\nimport { Upload, Message } from '@king-design/vue';\n\nconst handleError = (err: any) => {\n Message.error(err.message);\n};\n</script>\n<template>\n <Upload \n action=\"/api/upload\"\n accept=\".jpg, .png\"\n :maxSize=\"500\"\n :limit=\"3\"\n multiple\n @error=\"handleError\"\n >\n <template #tip>只能上传 JPG/PNG 格式,不超过 500KB,最多 3 个文件</template>\n </Upload>\n</template>",
390
+ "tags": [
391
+ "limit",
392
+ "maxSize",
393
+ "accept"
394
+ ],
395
+ "usedProps": [
396
+ "action",
397
+ "accept",
398
+ "maxSize",
399
+ "limit",
400
+ "multiple"
401
+ ],
402
+ "usedEvents": [
403
+ "error"
404
+ ],
405
+ "usedMethods": [],
406
+ "scenario": "限制文件类型、大小和数量"
407
+ },
408
+ {
409
+ "id": "upload_manual",
410
+ "title": "手动上传",
411
+ "description": "手动控制上传时机",
412
+ "difficulty": "medium",
413
+ "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Upload, Button } from '@king-design/vue';\n\nconst upload = ref<InstanceType<typeof Upload>>();\n\nconst handleUpload = () => {\n upload.value?.submit();\n};\n</script>\n<template>\n <div>\n <Upload \n ref=\"upload\"\n action=\"/api/upload\"\n :autoUpload=\"false\"\n multiple\n >\n <Button type=\"primary\">选择文件</Button>\n </Upload>\n <Button @click=\"handleUpload\">开始上传</Button>\n </div>\n</template>",
414
+ "tags": [
415
+ "manual",
416
+ "autoUpload",
417
+ "submit"
418
+ ],
419
+ "usedProps": [
420
+ "action",
421
+ "autoUpload",
422
+ "multiple"
423
+ ],
424
+ "usedEvents": [],
425
+ "usedMethods": [
426
+ "submit"
427
+ ],
428
+ "scenario": "手动控制上传时机"
429
+ },
430
+ {
431
+ "id": "upload_before",
432
+ "title": "上传前验证",
433
+ "description": "上传前进行文件验证",
434
+ "difficulty": "medium",
435
+ "code": "<script setup lang=\"ts\">\nimport { Upload, Message } from '@king-design/vue';\nimport type { UploadFile } from '@king-design/vue';\n\nconst beforeUpload = (file: UploadFile): boolean => {\n if (!file.name.endsWith('.jpg') && !file.name.endsWith('.png')) {\n Message.error('只能上传 JPG/PNG 格式的文件');\n return false;\n }\n if (file.size && file.size > 1024 * 1024) {\n Message.error('文件大小不能超过 1MB');\n return false;\n }\n return true;\n};\n</script>\n<template>\n <Upload \n action=\"/api/upload\"\n :beforeUpload=\"beforeUpload\"\n />\n</template>",
436
+ "tags": [
437
+ "beforeUpload",
438
+ "validate"
439
+ ],
440
+ "usedProps": [
441
+ "action",
442
+ "beforeUpload"
443
+ ],
444
+ "usedEvents": [],
445
+ "usedMethods": [],
446
+ "scenario": "上传前进行文件验证"
261
447
  }
262
- ],
263
- "usageExample": "<Upload @success=\"handleSuccess\"></Upload>",
264
- "handlerExample": "const handleSuccess = (res, xhr, file, files) => {\n console.log('上传成功:', res);\n};"
265
- },
266
- {
267
- "name": "error",
268
- "vueEventName": "@error",
269
- "description": "文件超出限制或上传失败时触发",
270
- "payload": [
271
- {
272
- "name": "err",
273
- "type": "Error | RequestError",
274
- "description": "错误信息"
448
+ ],
449
+ "commonMistakes": [
450
+ {
451
+ "id": "upload_missing_action",
452
+ "description": "未设置 action 属性",
453
+ "wrongCode": "<Upload /> <!-- 缺少上传地址 -->",
454
+ "correctCode": "<Upload action=\"/api/upload\" />",
455
+ "explanation": "必须设置 action 属性指定上传地址",
456
+ "relatedProps": [
457
+ "action"
458
+ ]
275
459
  },
276
460
  {
277
- "name": "file",
278
- "type": "File | File[] | UploadFile",
279
- "description": "相关文件"
461
+ "id": "upload_max_size_unit",
462
+ "description": "maxSize 单位理解错误",
463
+ "wrongCode": "<Upload :maxSize=\"1024 * 1024\" /> <!-- 期望 1MB,实际是 1GB -->",
464
+ "correctCode": "<Upload :maxSize=\"1024\" /> <!-- 1MB = 1024KB -->",
465
+ "explanation": "maxSize 单位是 KB,1MB = 1024KB",
466
+ "relatedProps": [
467
+ "maxSize"
468
+ ]
280
469
  },
281
470
  {
282
- "name": "files",
283
- "type": "UploadFile[]",
284
- "description": "所有文件列表"
471
+ "id": "upload_auto_upload_submit",
472
+ "description": "设置 autoUpload 为 false 但忘记调用 submit",
473
+ "wrongCode": "<Upload :autoUpload=\"false\" /> <!-- 文件不会自动上传 -->",
474
+ "correctCode": "<Upload ref=\"upload\" :autoUpload=\"false\" />\n// 需要手动调用 upload.value?.submit()",
475
+ "explanation": "设置 autoUpload 为 false 后需要手动调用 submit 方法上传",
476
+ "relatedProps": [
477
+ "autoUpload"
478
+ ]
285
479
  }
286
- ],
287
- "usageExample": "<Upload @error=\"handleError\"></Upload>",
288
- "handlerExample": "const handleError = (err, file, files) => {\n Message.error(err.message);\n};"
289
- }
290
- ],
291
- "methods": [
292
- {
293
- "name": "submit",
294
- "description": "手动上传时,调用该方法开始上传",
295
- "returnType": "void",
296
- "usageExample": "uploadRef.value?.submit();"
297
- }
298
- ],
299
- "slots": [
300
- {
301
- "name": "content",
302
- "description": "组件展示的内容,当没有子元素时,默认会根据type展示不同的内容"
303
- },
304
- {
305
- "name": "tip",
306
- "description": "组件展示的提示信息"
307
- }
308
- ],
309
- "typeDefinitions": [
310
- {
311
- "name": "UploadFile",
312
- "definition": "type UploadFile = {\n name: string\n url?: string\n status?: UploadFileStatus\n type?: string\n size?: number\n percent?: number\n uid?: number\n raw?: File\n}",
313
- "description": "上传文件对象类型"
314
- },
315
- {
316
- "name": "UploadFileStatus",
317
- "definition": "enum UploadFileStatus {\n Done,\n Ready,\n NotReady,\n Uploading,\n Error\n}",
318
- "description": "文件上传状态"
319
- }
320
- ],
321
- "examples": [
322
- {
323
- "id": "upload_basic",
324
- "title": "基础用法",
325
- "description": "基本的文件上传",
326
- "difficulty": "easy",
327
- "code": "<script setup lang=\"ts\">\nimport { Upload, Message } from '@king-design/vue';\n\nconst handleError = (err: any) => {\n Message.error(err.message);\n};\n\nconst handleSuccess = (res: any) => {\n Message.success('上传成功');\n};\n</script>\n<template>\n <Upload \n action=\"/api/upload\"\n @error=\"handleError\"\n @success=\"handleSuccess\"\n />\n</template>",
328
- "tags": [
329
- "basic"
330
- ],
331
- "usedProps": [
332
- "action"
333
- ],
334
- "usedEvents": [
335
- "success",
336
- "error"
337
- ],
338
- "usedMethods": [],
339
- "scenario": "创建一个基本的文件上传"
340
- },
341
- {
342
- "id": "upload_drag",
343
- "title": "拖拽上传",
344
- "description": "拖拽风格的上传区域",
345
- "difficulty": "easy",
346
- "code": "<script setup lang=\"ts\">\nimport { Upload } from '@king-design/vue';\n</script>\n<template>\n <Upload \n type=\"drag\"\n action=\"/api/upload\"\n multiple\n />\n</template>",
347
- "tags": [
348
- "drag",
349
- "type"
350
- ],
351
- "usedProps": [
352
- "action",
353
- "type",
354
- "multiple"
355
- ],
356
- "usedEvents": [],
357
- "usedMethods": [],
358
- "scenario": "创建拖拽上传区域"
359
- },
360
- {
361
- "id": "upload_gallery",
362
- "title": "照片墙风格",
363
- "description": "照片墙风格的图片上传",
364
- "difficulty": "easy",
365
- "code": "<script setup lang=\"ts\">\nimport { Upload, Message } from '@king-design/vue';\n\nconst handleError = (err: any) => {\n Message.error(err.message);\n};\n</script>\n<template>\n <Upload \n type=\"gallery\"\n action=\"/api/upload\"\n multiple\n accept=\".jpg, .png, .gif\"\n :limit=\"5\"\n @error=\"handleError\"\n />\n</template>",
366
- "tags": [
367
- "gallery",
368
- "image"
369
- ],
370
- "usedProps": [
371
- "action",
372
- "type",
373
- "multiple",
374
- "accept",
375
- "limit"
376
- ],
377
- "usedEvents": [
378
- "error"
379
- ],
380
- "usedMethods": [],
381
- "scenario": "创建照片墙风格的图片上传"
382
- },
383
- {
384
- "id": "upload_limit",
385
- "title": "限制文件",
386
- "description": "限制文件类型、大小和数量",
387
- "difficulty": "easy",
388
- "code": "<script setup lang=\"ts\">\nimport { Upload, Message } from '@king-design/vue';\n\nconst handleError = (err: any) => {\n Message.error(err.message);\n};\n</script>\n<template>\n <Upload \n action=\"/api/upload\"\n accept=\".jpg, .png\"\n :maxSize=\"500\"\n :limit=\"3\"\n multiple\n @error=\"handleError\"\n >\n <template #tip>只能上传 JPG/PNG 格式,不超过 500KB,最多 3 个文件</template>\n </Upload>\n</template>",
389
- "tags": [
390
- "limit",
391
- "maxSize",
392
- "accept"
393
- ],
394
- "usedProps": [
395
- "action",
396
- "accept",
397
- "maxSize",
398
- "limit",
399
- "multiple"
400
- ],
401
- "usedEvents": [
402
- "error"
403
- ],
404
- "usedMethods": [],
405
- "scenario": "限制文件类型、大小和数量"
406
- },
407
- {
408
- "id": "upload_manual",
409
- "title": "手动上传",
410
- "description": "手动控制上传时机",
411
- "difficulty": "medium",
412
- "code": "<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Upload, Button } from '@king-design/vue';\n\nconst upload = ref<InstanceType<typeof Upload>>();\n\nconst handleUpload = () => {\n upload.value?.submit();\n};\n</script>\n<template>\n <div>\n <Upload \n ref=\"upload\"\n action=\"/api/upload\"\n :autoUpload=\"false\"\n multiple\n >\n <Button type=\"primary\">选择文件</Button>\n </Upload>\n <Button @click=\"handleUpload\">开始上传</Button>\n </div>\n</template>",
413
- "tags": [
414
- "manual",
415
- "autoUpload",
416
- "submit"
417
- ],
418
- "usedProps": [
419
- "action",
420
- "autoUpload",
421
- "multiple"
422
- ],
423
- "usedEvents": [],
424
- "usedMethods": [
425
- "submit"
426
- ],
427
- "scenario": "手动控制上传时机"
428
- },
429
- {
430
- "id": "upload_before",
431
- "title": "上传前验证",
432
- "description": "上传前进行文件验证",
433
- "difficulty": "medium",
434
- "code": "<script setup lang=\"ts\">\nimport { Upload, Message } from '@king-design/vue';\nimport type { UploadFile } from '@king-design/vue';\n\nconst beforeUpload = (file: UploadFile): boolean => {\n if (!file.name.endsWith('.jpg') && !file.name.endsWith('.png')) {\n Message.error('只能上传 JPG/PNG 格式的文件');\n return false;\n }\n if (file.size && file.size > 1024 * 1024) {\n Message.error('文件大小不能超过 1MB');\n return false;\n }\n return true;\n};\n</script>\n<template>\n <Upload \n action=\"/api/upload\"\n :beforeUpload=\"beforeUpload\"\n />\n</template>",
435
- "tags": [
436
- "beforeUpload",
437
- "validate"
438
- ],
439
- "usedProps": [
440
- "action",
441
- "beforeUpload"
442
- ],
443
- "usedEvents": [],
444
- "usedMethods": [],
445
- "scenario": "上传前进行文件验证"
446
- }
447
- ],
448
- "commonMistakes": [
449
- {
450
- "id": "upload_missing_action",
451
- "description": "未设置 action 属性",
452
- "wrongCode": "<Upload /> <!-- 缺少上传地址 -->",
453
- "correctCode": "<Upload action=\"/api/upload\" />",
454
- "explanation": "必须设置 action 属性指定上传地址",
455
- "relatedProps": [
456
- "action"
457
- ]
458
- },
459
- {
460
- "id": "upload_max_size_unit",
461
- "description": "maxSize 单位理解错误",
462
- "wrongCode": "<Upload :maxSize=\"1024 * 1024\" /> <!-- 期望 1MB,实际是 1GB -->",
463
- "correctCode": "<Upload :maxSize=\"1024\" /> <!-- 1MB = 1024KB -->",
464
- "explanation": "maxSize 单位是 KB,1MB = 1024KB",
465
- "relatedProps": [
466
- "maxSize"
467
- ]
468
- },
469
- {
470
- "id": "upload_auto_upload_submit",
471
- "description": "设置 autoUpload 为 false 但忘记调用 submit",
472
- "wrongCode": "<Upload :autoUpload=\"false\" /> <!-- 文件不会自动上传 -->",
473
- "correctCode": "<Upload ref=\"upload\" :autoUpload=\"false\" />\n// 需要手动调用 upload.value?.submit()",
474
- "explanation": "设置 autoUpload 为 false 后需要手动调用 submit 方法上传",
475
- "relatedProps": [
476
- "autoUpload"
477
- ]
478
- }
479
- ],
480
- "searchKeywords": [
481
- "上传",
482
- "upload",
483
- "文件上传",
484
- "拖拽上传",
485
- "图片上传",
486
- "附件"
487
- ],
488
- "useCases": [
489
- "图片上传",
490
- "文档上传",
491
- "头像上传",
492
- "附件上传",
493
- "批量文件上传"
494
- ],
495
- "relatedComponents": [
496
- "Button",
497
- "Progress"
498
- ]
480
+ ],
481
+ "searchKeywords": [
482
+ "上传",
483
+ "upload",
484
+ "文件上传",
485
+ "拖拽上传",
486
+ "图片上传",
487
+ "附件"
488
+ ],
489
+ "useCases": [
490
+ "图片上传",
491
+ "文档上传",
492
+ "头像上传",
493
+ "附件上传",
494
+ "批量文件上传"
495
+ ],
496
+ "relatedComponents": [
497
+ "Button",
498
+ "Progress"
499
+ ]
499
500
  }