vxe-pc-ui 4.20.24 → 4.20.26

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 (627) hide show
  1. package/dist/all.esm.js +15151 -10366
  2. package/dist/style.css +1 -1
  3. package/dist/style.mini.css +1 -1
  4. package/es/alert/src/alert.js +61 -36
  5. package/es/anchor/src/anchor-link.js +39 -20
  6. package/es/anchor/src/anchor.js +74 -45
  7. package/es/avatar/src/avatar.js +47 -27
  8. package/es/backtop/src/backtop.js +65 -40
  9. package/es/badge/src/badge.js +32 -16
  10. package/es/breadcrumb/src/breadcrumb-item.js +52 -27
  11. package/es/breadcrumb/src/breadcrumb.js +11 -8
  12. package/es/button/src/button-group.js +24 -18
  13. package/es/button/src/button.js +284 -185
  14. package/es/calendar/src/calendar.js +571 -358
  15. package/es/card/src/card.js +123 -68
  16. package/es/carousel/src/carousel-item.js +14 -7
  17. package/es/carousel/src/carousel.js +174 -112
  18. package/es/cascader/src/cascader.js +526 -380
  19. package/es/checkbox/src/button.js +90 -55
  20. package/es/checkbox/src/checkbox.js +60 -40
  21. package/es/checkbox/src/group.js +34 -26
  22. package/es/collapse/src/collapse-pane.js +33 -16
  23. package/es/collapse/src/collapse.js +133 -79
  24. package/es/color-picker/src/color-picker.js +489 -350
  25. package/es/components.d.ts +3 -1
  26. package/es/components.js +3 -2
  27. package/es/context-menu/src/context-menu.js +190 -110
  28. package/es/countdown/src/countdown.js +91 -59
  29. package/es/date-panel/src/date-panel.js +760 -450
  30. package/es/date-picker/src/date-picker.js +331 -228
  31. package/es/date-range-picker/src/date-range-picker.js +366 -265
  32. package/es/divider/src/divider.js +26 -12
  33. package/es/drawer/src/drawer.js +254 -154
  34. package/es/dynamics/index.js +38 -25
  35. package/es/empty/src/empty.js +53 -29
  36. package/es/form/render/index.js +66 -41
  37. package/es/form/src/form-config-item.js +22 -16
  38. package/es/form/src/form-group.js +23 -14
  39. package/es/form/src/form-item.js +23 -17
  40. package/es/form/src/form.js +139 -95
  41. package/es/form/src/itemInfo.js +2 -1
  42. package/es/form/src/render.js +207 -127
  43. package/es/form/src/util.js +8 -4
  44. package/es/icon/src/icon.js +14 -10
  45. package/es/icon/style.css +1 -1
  46. package/es/icon/style.mini.css +1 -1
  47. package/es/icon-picker/src/icon-picker.js +250 -157
  48. package/es/image/src/group.js +26 -20
  49. package/es/image/src/image.js +33 -32
  50. package/es/image/src/preview.js +182 -122
  51. package/es/image/src/util.js +6 -3
  52. package/es/index.d.ts +3 -0
  53. package/es/index.esm.js +12 -0
  54. package/es/index.js +12 -0
  55. package/es/input/src/input.js +820 -507
  56. package/es/layout-aside/src/layout-aside.js +54 -38
  57. package/es/layout-body/src/layout-body.js +39 -27
  58. package/es/layout-container/src/layout-container.js +16 -9
  59. package/es/layout-footer/src/layout-footer.js +16 -7
  60. package/es/layout-header/src/layout-header.js +15 -7
  61. package/es/link/src/link.js +65 -44
  62. package/es/list/src/list.js +453 -333
  63. package/es/loading/index.js +8 -5
  64. package/es/loading/src/loading.js +60 -33
  65. package/es/mention/src/mention.js +2 -1
  66. package/es/menu/src/menu.js +341 -210
  67. package/es/modal/index.js +60 -37
  68. package/es/modal/src/modal.js +303 -205
  69. package/es/notice-bar/src/notice-bar.js +64 -37
  70. package/es/number-input/src/number-input.js +249 -172
  71. package/es/pager/src/pager.js +346 -202
  72. package/es/password-input/src/password-input.js +145 -105
  73. package/es/print/src/page-break.js +2 -1
  74. package/es/print/src/print.js +184 -99
  75. package/es/pulldown/src/pulldown.js +113 -71
  76. package/es/radio/src/button.js +92 -57
  77. package/es/radio/src/group.js +33 -25
  78. package/es/radio/src/radio.js +61 -41
  79. package/es/rate/src/rate.js +48 -36
  80. package/es/result/src/result.js +67 -35
  81. package/es/row/src/col.js +30 -16
  82. package/es/row/src/row.js +21 -14
  83. package/es/scrollbar/src/scrollbar.js +177 -145
  84. package/es/segmented/src/segmented.js +93 -60
  85. package/es/select/src/optgroup.js +7 -3
  86. package/es/select/src/select.js +483 -340
  87. package/es/select/src/util.js +6 -3
  88. package/es/slider/src/slider.js +108 -80
  89. package/es/space/src/space.js +43 -26
  90. package/es/splitter/src/splitter-panel.js +50 -25
  91. package/es/splitter/src/splitter.js +219 -144
  92. package/es/steps/src/steps.js +10 -5
  93. package/es/style.css +1 -1
  94. package/es/style.mini.css +1 -1
  95. package/es/switch/src/switch.js +115 -64
  96. package/es/table-select/src/table-select.js +232 -153
  97. package/es/table-transfer/src/table-transfer.js +10 -5
  98. package/es/tabs/src/tab-pane.js +33 -16
  99. package/es/tabs/src/tabs.js +363 -230
  100. package/es/tag/src/tag.js +61 -43
  101. package/es/text/src/text.js +89 -65
  102. package/es/text-ellipsis/src/text-ellipsis.js +82 -51
  103. package/es/textarea/src/textarea.js +116 -86
  104. package/es/timeline/src/timeline-item.js +2 -1
  105. package/es/timeline/src/timeline.js +2 -1
  106. package/es/tip/src/tip.js +53 -29
  107. package/es/tooltip/src/tooltip.js +114 -74
  108. package/es/tour/src/tour.js +2 -1
  109. package/es/transfer/src/transfer.js +42 -25
  110. package/es/tree/src/tree.js +709 -492
  111. package/es/tree-select/src/tree-select.js +320 -225
  112. package/es/ui/index.d.ts +0 -1
  113. package/es/ui/index.js +46 -3
  114. package/es/ui/src/dom.js +9 -6
  115. package/es/ui/src/log.js +1 -1
  116. package/es/ui/src/utils.d.ts +1 -1
  117. package/es/upload/src/upload.js +614 -398
  118. package/es/vxe-icon/style.css +1 -1
  119. package/es/vxe-icon/style.mini.css +1 -1
  120. package/es/watermark/src/util.js +15 -12
  121. package/es/watermark/src/watermark.js +55 -25
  122. package/lib/alert/src/alert.js +62 -37
  123. package/lib/anchor/src/anchor-link.js +39 -20
  124. package/lib/anchor/src/anchor.js +75 -46
  125. package/lib/avatar/src/avatar.js +52 -32
  126. package/lib/backtop/src/backtop.js +81 -56
  127. package/lib/badge/src/badge.js +35 -19
  128. package/lib/breadcrumb/src/breadcrumb-item.js +52 -27
  129. package/lib/breadcrumb/src/breadcrumb.js +13 -10
  130. package/lib/button/src/button-group.js +27 -21
  131. package/lib/button/src/button.js +306 -207
  132. package/lib/calendar/src/calendar.js +575 -362
  133. package/lib/card/src/card.js +133 -78
  134. package/lib/carousel/src/carousel-item.js +15 -8
  135. package/lib/carousel/src/carousel.js +182 -120
  136. package/lib/cascader/src/cascader.js +555 -409
  137. package/lib/checkbox/src/button.js +93 -58
  138. package/lib/checkbox/src/checkbox.js +63 -43
  139. package/lib/checkbox/src/group.js +37 -29
  140. package/lib/collapse/src/collapse-pane.js +34 -17
  141. package/lib/collapse/src/collapse.js +139 -85
  142. package/lib/color-picker/src/color-picker.js +516 -377
  143. package/lib/components.js +3 -2
  144. package/lib/context-menu/src/context-menu.js +212 -132
  145. package/lib/countdown/src/countdown.js +95 -63
  146. package/lib/date-panel/src/date-panel.js +776 -466
  147. package/lib/date-picker/src/date-picker.js +377 -274
  148. package/lib/date-range-picker/src/date-range-picker.js +401 -300
  149. package/lib/divider/src/divider.js +31 -17
  150. package/lib/drawer/src/drawer.js +255 -155
  151. package/lib/dynamics/index.js +38 -25
  152. package/lib/empty/src/empty.js +55 -31
  153. package/lib/form/render/index.js +68 -43
  154. package/lib/form/src/form-config-item.js +24 -18
  155. package/lib/form/src/form-group.js +25 -16
  156. package/lib/form/src/form-item.js +25 -19
  157. package/lib/form/src/form.js +140 -96
  158. package/lib/form/src/itemInfo.js +4 -3
  159. package/lib/form/src/render.js +214 -134
  160. package/lib/form/src/util.js +9 -5
  161. package/lib/icon/src/icon.js +17 -13
  162. package/lib/icon/style/style.css +1 -1
  163. package/lib/icon/style/style.mini.css +1 -1
  164. package/lib/icon-picker/src/icon-picker.js +251 -158
  165. package/lib/image/src/group.js +26 -20
  166. package/lib/image/src/image.js +41 -40
  167. package/lib/image/src/preview.js +206 -146
  168. package/lib/image/src/util.js +6 -3
  169. package/lib/index.common.js +12 -0
  170. package/lib/index.js +12 -0
  171. package/lib/index.umd.js +15359 -10558
  172. package/lib/index.umd.min.js +3 -3
  173. package/lib/input/src/input.js +878 -565
  174. package/lib/layout-aside/src/layout-aside.js +61 -45
  175. package/lib/layout-body/src/layout-body.js +47 -35
  176. package/lib/layout-container/src/layout-container.js +18 -11
  177. package/lib/layout-footer/src/layout-footer.js +17 -8
  178. package/lib/layout-header/src/layout-header.js +16 -8
  179. package/lib/link/src/link.js +69 -48
  180. package/lib/list/src/list.js +456 -336
  181. package/lib/loading/index.js +8 -5
  182. package/lib/loading/src/loading.js +69 -42
  183. package/lib/mention/src/mention.js +4 -3
  184. package/lib/menu/src/menu.js +351 -220
  185. package/lib/modal/index.js +60 -37
  186. package/lib/modal/src/modal.js +306 -208
  187. package/lib/notice-bar/src/notice-bar.js +70 -43
  188. package/lib/number-input/src/number-input.js +290 -213
  189. package/lib/pager/src/pager.js +347 -203
  190. package/lib/password-input/src/password-input.js +155 -115
  191. package/lib/print/src/page-break.js +3 -2
  192. package/lib/print/src/print.js +193 -108
  193. package/lib/pulldown/src/pulldown.js +128 -86
  194. package/lib/radio/src/button.js +96 -61
  195. package/lib/radio/src/group.js +37 -29
  196. package/lib/radio/src/radio.js +65 -45
  197. package/lib/rate/src/rate.js +50 -38
  198. package/lib/result/src/result.js +68 -36
  199. package/lib/row/src/col.js +32 -18
  200. package/lib/row/src/row.js +25 -18
  201. package/lib/scrollbar/src/scrollbar.js +178 -146
  202. package/lib/segmented/src/segmented.js +97 -64
  203. package/lib/select/src/optgroup.js +7 -3
  204. package/lib/select/src/select.js +486 -343
  205. package/lib/select/src/util.js +6 -3
  206. package/lib/slider/src/slider.js +122 -94
  207. package/lib/space/src/space.js +57 -40
  208. package/lib/splitter/src/splitter-panel.js +51 -26
  209. package/lib/splitter/src/splitter.js +233 -158
  210. package/lib/steps/src/steps.js +11 -6
  211. package/lib/style.css +1 -1
  212. package/lib/style.mini.css +1 -1
  213. package/lib/switch/src/switch.js +116 -65
  214. package/lib/table-select/src/table-select.js +234 -155
  215. package/lib/table-transfer/src/table-transfer.js +12 -7
  216. package/lib/tabs/src/tab-pane.js +34 -17
  217. package/lib/tabs/src/tabs.js +365 -232
  218. package/lib/tag/src/tag.js +67 -49
  219. package/lib/text/src/text.js +100 -76
  220. package/lib/text-ellipsis/src/text-ellipsis.js +86 -55
  221. package/lib/textarea/src/textarea.js +127 -97
  222. package/lib/timeline/src/timeline-item.js +3 -2
  223. package/lib/timeline/src/timeline.js +4 -3
  224. package/lib/tip/src/tip.js +58 -34
  225. package/lib/tooltip/src/tooltip.js +116 -76
  226. package/lib/tour/src/tour.js +4 -3
  227. package/lib/transfer/src/transfer.js +44 -27
  228. package/lib/tree/src/tree.js +717 -500
  229. package/lib/tree-select/src/tree-select.js +351 -256
  230. package/lib/ui/index.js +46 -4
  231. package/lib/ui/src/dom.js +9 -6
  232. package/lib/ui/src/log.js +1 -1
  233. package/lib/upload/src/upload.js +708 -492
  234. package/lib/vxe-icon/style/style.css +1 -1
  235. package/lib/vxe-icon/style/style.mini.css +1 -1
  236. package/lib/watermark/src/util.js +15 -12
  237. package/lib/watermark/src/watermark.js +60 -30
  238. package/package.json +10 -4
  239. package/packages/alert/index.ts +16 -16
  240. package/packages/alert/src/alert.ts +148 -126
  241. package/packages/anchor/index.ts +16 -16
  242. package/packages/anchor/src/anchor-link.ts +139 -121
  243. package/packages/anchor/src/anchor.ts +266 -237
  244. package/packages/anchor/src/util.ts +23 -23
  245. package/packages/anchor-link/index.ts +16 -16
  246. package/packages/avatar/index.ts +16 -16
  247. package/packages/avatar/src/avatar.ts +166 -149
  248. package/packages/backtop/index.ts +16 -16
  249. package/packages/backtop/src/backtop.ts +337 -313
  250. package/packages/badge/index.ts +16 -16
  251. package/packages/badge/src/badge.ts +131 -118
  252. package/packages/breadcrumb/index.ts +16 -16
  253. package/packages/breadcrumb/src/breadcrumb-item.ts +129 -106
  254. package/packages/breadcrumb/src/breadcrumb.ts +94 -92
  255. package/packages/breadcrumb-item/index.ts +16 -16
  256. package/packages/button/index.ts +16 -16
  257. package/packages/button/src/button-group.ts +116 -110
  258. package/packages/button/src/button.ts +975 -855
  259. package/packages/button-group/index.ts +16 -16
  260. package/packages/calendar/index.ts +16 -16
  261. package/packages/calendar/src/calendar.ts +1566 -1352
  262. package/packages/card/index.ts +16 -16
  263. package/packages/card/src/card.ts +285 -236
  264. package/packages/carousel/index.ts +16 -16
  265. package/packages/carousel/src/carousel-item.ts +120 -102
  266. package/packages/carousel/src/carousel.ts +475 -414
  267. package/packages/carousel/src/util.ts +21 -21
  268. package/packages/carousel-item/index.ts +16 -16
  269. package/packages/cascader/index.ts +16 -16
  270. package/packages/cascader/src/cascader.ts +2074 -1896
  271. package/packages/cascader/src/util.ts +9 -9
  272. package/packages/checkbox/index.ts +16 -16
  273. package/packages/checkbox/src/button.ts +267 -221
  274. package/packages/checkbox/src/checkbox.ts +219 -199
  275. package/packages/checkbox/src/group.ts +292 -269
  276. package/packages/checkbox-button/index.ts +16 -16
  277. package/packages/checkbox-group/index.ts +16 -16
  278. package/packages/col/index.ts +16 -16
  279. package/packages/collapse/index.ts +16 -16
  280. package/packages/collapse/src/collapse-pane.ts +142 -114
  281. package/packages/collapse/src/collapse.ts +453 -384
  282. package/packages/collapse/src/util.ts +21 -21
  283. package/packages/collapse-pane/index.ts +16 -16
  284. package/packages/color-picker/index.ts +31 -31
  285. package/packages/color-picker/src/color-picker.ts +1310 -1147
  286. package/packages/color-picker/src/util.ts +436 -423
  287. package/packages/components.ts +350 -349
  288. package/packages/context-menu/index.ts +54 -54
  289. package/packages/context-menu/src/context-menu.ts +773 -681
  290. package/packages/countdown/index.ts +16 -16
  291. package/packages/countdown/src/countdown.ts +295 -262
  292. package/packages/date-panel/index.ts +16 -16
  293. package/packages/date-panel/src/date-panel.ts +2214 -1900
  294. package/packages/date-panel/src/util.ts +354 -326
  295. package/packages/date-picker/index.ts +16 -16
  296. package/packages/date-picker/src/date-picker.ts +1884 -1752
  297. package/packages/date-range-picker/index.ts +16 -16
  298. package/packages/date-range-picker/src/date-range-picker.ts +1728 -1604
  299. package/packages/divider/index.ts +16 -16
  300. package/packages/divider/src/divider.ts +105 -93
  301. package/packages/drawer/index.ts +78 -78
  302. package/packages/drawer/src/drawer.ts +920 -802
  303. package/packages/drawer/src/store.ts +3 -3
  304. package/packages/dynamics/index.ts +124 -117
  305. package/packages/empty/index.ts +16 -16
  306. package/packages/empty/src/empty.ts +124 -103
  307. package/packages/form/index.ts +16 -16
  308. package/packages/form/render/index.ts +646 -614
  309. package/packages/form/src/form-config-item.ts +85 -80
  310. package/packages/form/src/form-group.ts +96 -86
  311. package/packages/form/src/form-item.ts +181 -174
  312. package/packages/form/src/form.ts +1122 -1069
  313. package/packages/form/src/itemInfo.ts +84 -82
  314. package/packages/form/src/render.ts +470 -387
  315. package/packages/form/src/util.ts +98 -93
  316. package/packages/form-gather/index.ts +26 -26
  317. package/packages/form-group/index.ts +16 -16
  318. package/packages/form-item/index.ts +16 -16
  319. package/packages/icon/index.ts +16 -16
  320. package/packages/icon/src/icon.ts +78 -75
  321. package/packages/icon-picker/index.ts +16 -16
  322. package/packages/icon-picker/src/icon-picker.ts +922 -809
  323. package/packages/image/index.ts +16 -16
  324. package/packages/image/src/group.ts +159 -153
  325. package/packages/image/src/image.ts +298 -298
  326. package/packages/image/src/preview.ts +749 -672
  327. package/packages/image/src/util.ts +62 -59
  328. package/packages/image-group/index.ts +16 -16
  329. package/packages/image-preview/index.ts +19 -19
  330. package/packages/index.ts +20 -4
  331. package/packages/input/index.ts +16 -16
  332. package/packages/input/src/input.ts +3201 -2863
  333. package/packages/language/fr-FR.ts +15 -15
  334. package/packages/language/it-IT.ts +4 -4
  335. package/packages/language/uk-UA.ts +1 -1
  336. package/packages/language/uz-UZ.ts +13 -13
  337. package/packages/language/zh-CN.ts +907 -907
  338. package/packages/layout-aside/index.ts +16 -16
  339. package/packages/layout-aside/src/layout-aside.ts +172 -156
  340. package/packages/layout-body/index.ts +16 -16
  341. package/packages/layout-body/src/layout-body.ts +191 -181
  342. package/packages/layout-container/index.ts +16 -16
  343. package/packages/layout-container/src/layout-container.ts +108 -92
  344. package/packages/layout-footer/index.ts +16 -16
  345. package/packages/layout-footer/src/layout-footer.ts +81 -74
  346. package/packages/layout-header/index.ts +16 -16
  347. package/packages/layout-header/src/layout-header.ts +79 -73
  348. package/packages/link/index.ts +16 -16
  349. package/packages/link/src/link.ts +180 -161
  350. package/packages/list/index.ts +16 -16
  351. package/packages/list/src/list.ts +2690 -2564
  352. package/packages/list/src/store.ts +10 -10
  353. package/packages/list/src/util.ts +10 -11
  354. package/packages/loading/index.ts +39 -36
  355. package/packages/loading/src/loading.ts +179 -152
  356. package/packages/mention/index.ts +16 -16
  357. package/packages/mention/src/mention.ts +69 -71
  358. package/packages/menu/index.ts +16 -16
  359. package/packages/menu/src/menu.ts +1000 -857
  360. package/packages/modal/index.ts +164 -141
  361. package/packages/modal/src/modal.ts +1803 -1681
  362. package/packages/modal/src/store.ts +3 -3
  363. package/packages/notice-bar/index.ts +16 -16
  364. package/packages/notice-bar/src/notice-bar.ts +207 -181
  365. package/packages/number-input/index.ts +16 -16
  366. package/packages/number-input/src/number-input.ts +1322 -1242
  367. package/packages/number-input/src/util.ts +25 -25
  368. package/packages/optgroup/index.ts +16 -16
  369. package/packages/option/index.ts +16 -16
  370. package/packages/pager/index.ts +16 -16
  371. package/packages/pager/src/pager.ts +919 -775
  372. package/packages/password-input/index.ts +16 -16
  373. package/packages/password-input/src/password-input.ts +523 -482
  374. package/packages/print/index.ts +18 -18
  375. package/packages/print/src/page-break.ts +104 -92
  376. package/packages/print/src/print.ts +366 -281
  377. package/packages/print/src/util.ts +299 -304
  378. package/packages/print-page-break/index.ts +16 -16
  379. package/packages/pulldown/index.ts +16 -16
  380. package/packages/pulldown/src/pulldown.ts +505 -445
  381. package/packages/radio/index.ts +16 -16
  382. package/packages/radio/src/button.ts +290 -243
  383. package/packages/radio/src/group.ts +275 -252
  384. package/packages/radio/src/radio.ts +237 -218
  385. package/packages/radio-button/index.ts +16 -16
  386. package/packages/radio-group/index.ts +16 -16
  387. package/packages/rate/index.ts +16 -16
  388. package/packages/rate/src/rate.ts +203 -192
  389. package/packages/result/index.ts +16 -16
  390. package/packages/result/src/result.ts +141 -112
  391. package/packages/row/index.ts +16 -16
  392. package/packages/row/src/col.ts +171 -159
  393. package/packages/row/src/row.ts +143 -138
  394. package/packages/scrollbar/index.ts +16 -16
  395. package/packages/scrollbar/src/scrollbar.ts +626 -595
  396. package/packages/segmented/index.ts +16 -16
  397. package/packages/segmented/src/segmented.ts +297 -264
  398. package/packages/select/index.ts +16 -16
  399. package/packages/select/src/optgroup.ts +53 -49
  400. package/packages/select/src/option-info.ts +20 -20
  401. package/packages/select/src/option.ts +47 -47
  402. package/packages/select/src/select.ts +2390 -2214
  403. package/packages/select/src/util.ts +50 -47
  404. package/packages/slider/index.ts +16 -16
  405. package/packages/slider/src/slider.ts +547 -506
  406. package/packages/space/index.ts +16 -16
  407. package/packages/space/src/space.ts +225 -209
  408. package/packages/split/index.ts +16 -16
  409. package/packages/split-pane/index.ts +17 -17
  410. package/packages/splitter/index.ts +16 -16
  411. package/packages/splitter/src/splitter-panel.ts +199 -163
  412. package/packages/splitter/src/splitter.ts +1110 -1020
  413. package/packages/splitter/src/util.ts +21 -21
  414. package/packages/splitter-panel/index.ts +16 -16
  415. package/packages/steps/index.ts +16 -16
  416. package/packages/steps/src/steps.ts +69 -68
  417. package/packages/switch/index.ts +16 -16
  418. package/packages/switch/src/switch.ts +300 -245
  419. package/packages/tab-pane/index.ts +16 -16
  420. package/packages/table-select/index.ts +16 -16
  421. package/packages/table-select/src/table-select.ts +1103 -999
  422. package/packages/table-transfer/index.ts +16 -16
  423. package/packages/table-transfer/src/table-transfer.ts +104 -91
  424. package/packages/tabs/index.ts +16 -16
  425. package/packages/tabs/src/tab-pane.ts +132 -117
  426. package/packages/tabs/src/tabs.ts +1137 -997
  427. package/packages/tabs/src/util.ts +21 -21
  428. package/packages/tag/index.ts +16 -16
  429. package/packages/tag/src/tag.ts +204 -187
  430. package/packages/text/index.ts +16 -16
  431. package/packages/text/src/text.ts +282 -260
  432. package/packages/text-ellipsis/index.ts +16 -16
  433. package/packages/text-ellipsis/src/text-ellipsis.ts +312 -282
  434. package/packages/textarea/index.ts +16 -16
  435. package/packages/textarea/src/textarea.ts +526 -495
  436. package/packages/timeline/index.ts +16 -16
  437. package/packages/timeline/src/timeline-item.ts +65 -67
  438. package/packages/timeline/src/timeline.ts +70 -71
  439. package/packages/timeline-item/index.ts +16 -16
  440. package/packages/tip/index.ts +19 -19
  441. package/packages/tip/src/tip.ts +150 -129
  442. package/packages/tooltip/index.ts +72 -72
  443. package/packages/tooltip/src/tooltip.ts +669 -627
  444. package/packages/tour/index.ts +16 -16
  445. package/packages/tour/src/tour.ts +70 -71
  446. package/packages/transfer/index.ts +16 -16
  447. package/packages/transfer/src/transfer.ts +130 -117
  448. package/packages/tree/index.ts +16 -16
  449. package/packages/tree/src/store.ts +10 -10
  450. package/packages/tree/src/tree.ts +4077 -3852
  451. package/packages/tree/src/util.ts +51 -51
  452. package/packages/tree-select/index.ts +16 -16
  453. package/packages/tree-select/src/tree-select.ts +1217 -1094
  454. package/packages/ui/index.ts +836 -793
  455. package/packages/ui/src/anime.ts +51 -52
  456. package/packages/ui/src/comp.ts +3 -3
  457. package/packages/ui/src/dom.ts +357 -354
  458. package/packages/ui/src/log.ts +19 -19
  459. package/packages/ui/src/utils.ts +79 -79
  460. package/packages/ui/src/vn.ts +39 -39
  461. package/packages/upload/index.ts +20 -20
  462. package/packages/upload/src/upload.ts +2271 -2021
  463. package/packages/upload/src/util.ts +109 -109
  464. package/packages/watermark/index.ts +33 -33
  465. package/packages/watermark/src/util.ts +186 -180
  466. package/packages/watermark/src/watermark.ts +196 -168
  467. package/types/all.d.ts +552 -552
  468. package/types/components/alert.d.ts +83 -87
  469. package/types/components/anchor-link.d.ts +88 -91
  470. package/types/components/anchor.d.ts +97 -104
  471. package/types/components/avatar.d.ts +85 -88
  472. package/types/components/backtop.d.ts +119 -122
  473. package/types/components/badge.d.ts +77 -80
  474. package/types/components/breadcrumb-item.d.ts +77 -80
  475. package/types/components/breadcrumb.d.ts +83 -87
  476. package/types/components/button-group.d.ts +118 -120
  477. package/types/components/button.d.ts +331 -339
  478. package/types/components/calendar.d.ts +247 -264
  479. package/types/components/card.d.ts +111 -113
  480. package/types/components/carousel-item.d.ts +73 -75
  481. package/types/components/carousel.d.ts +130 -134
  482. package/types/components/cascader.d.ts +336 -386
  483. package/types/components/checkbox-button.d.ts +109 -114
  484. package/types/components/checkbox-group.d.ts +152 -154
  485. package/types/components/checkbox.d.ts +123 -128
  486. package/types/components/col.d.ts +77 -80
  487. package/types/components/colgroup.d.ts +64 -69
  488. package/types/components/collapse-pane.d.ts +86 -89
  489. package/types/components/collapse.d.ts +123 -133
  490. package/types/components/color-picker.d.ts +275 -280
  491. package/types/components/column.d.ts +834 -851
  492. package/types/components/context-menu.d.ts +282 -289
  493. package/types/components/countdown.d.ts +108 -112
  494. package/types/components/date-panel.d.ts +319 -331
  495. package/types/components/date-picker.d.ts +361 -384
  496. package/types/components/date-range-picker.d.ts +351 -371
  497. package/types/components/divider.d.ts +72 -75
  498. package/types/components/drawer.d.ts +333 -344
  499. package/types/components/empty.d.ts +75 -78
  500. package/types/components/flow-design.d.ts +73 -85
  501. package/types/components/flow-view.d.ts +73 -85
  502. package/types/components/form-design.d.ts +370 -376
  503. package/types/components/form-gather.d.ts +120 -124
  504. package/types/components/form-group.d.ts +73 -77
  505. package/types/components/form-item.d.ts +395 -413
  506. package/types/components/form-view.d.ts +179 -183
  507. package/types/components/form.d.ts +499 -495
  508. package/types/components/gantt-module/gantt-view.d.ts +195 -200
  509. package/types/components/gantt-module/index.d.ts +1 -1
  510. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +137 -131
  511. package/types/components/gantt-plugins/index.d.ts +1 -1
  512. package/types/components/gantt.d.ts +1248 -1399
  513. package/types/components/grid.d.ts +1289 -1317
  514. package/types/components/icon-picker.d.ts +242 -253
  515. package/types/components/icon.d.ts +332 -87
  516. package/types/components/image-group.d.ts +124 -127
  517. package/types/components/image-preview.d.ts +167 -167
  518. package/types/components/image.d.ts +166 -173
  519. package/types/components/input.d.ts +429 -453
  520. package/types/components/layout-aside.d.ts +123 -123
  521. package/types/components/layout-body.d.ts +110 -113
  522. package/types/components/layout-container.d.ts +73 -75
  523. package/types/components/layout-footer.d.ts +71 -73
  524. package/types/components/layout-header.d.ts +67 -69
  525. package/types/components/link.d.ts +107 -111
  526. package/types/components/list-design.d.ts +189 -190
  527. package/types/components/list-view.d.ts +193 -199
  528. package/types/components/list.d.ts +678 -715
  529. package/types/components/loading.d.ts +98 -103
  530. package/types/components/mention.d.ts +70 -77
  531. package/types/components/menu.d.ts +284 -295
  532. package/types/components/modal.d.ts +567 -584
  533. package/types/components/notice-bar.d.ts +102 -106
  534. package/types/components/number-input.d.ts +359 -365
  535. package/types/components/optgroup.d.ts +85 -88
  536. package/types/components/option.d.ts +94 -103
  537. package/types/components/pager.d.ts +330 -335
  538. package/types/components/password-input.d.ts +143 -156
  539. package/types/components/print-page-break.d.ts +65 -69
  540. package/types/components/print.d.ts +243 -245
  541. package/types/components/pulldown.d.ts +231 -239
  542. package/types/components/radio-button.d.ts +113 -118
  543. package/types/components/radio-group.d.ts +151 -153
  544. package/types/components/radio.d.ts +129 -134
  545. package/types/components/rate.d.ts +83 -88
  546. package/types/components/result.d.ts +81 -84
  547. package/types/components/row.d.ts +77 -81
  548. package/types/components/scrollbar.d.ts +299 -305
  549. package/types/components/segmented.d.ts +119 -123
  550. package/types/components/select.d.ts +598 -616
  551. package/types/components/slider.d.ts +137 -151
  552. package/types/components/space.d.ts +120 -127
  553. package/types/components/split-pane.d.ts +126 -133
  554. package/types/components/split.d.ts +301 -312
  555. package/types/components/splitter-panel.d.ts +123 -130
  556. package/types/components/splitter.d.ts +290 -301
  557. package/types/components/steps.d.ts +63 -68
  558. package/types/components/switch.d.ts +127 -133
  559. package/types/components/tab-pane.d.ts +111 -114
  560. package/types/components/table-module/custom.d.ts +123 -123
  561. package/types/components/table-module/edit.d.ts +297 -276
  562. package/types/components/table-module/export.d.ts +88 -96
  563. package/types/components/table-module/filter.d.ts +144 -144
  564. package/types/components/table-module/index.d.ts +7 -7
  565. package/types/components/table-module/keyboard.d.ts +26 -26
  566. package/types/components/table-module/menu.d.ts +46 -46
  567. package/types/components/table-module/validator.d.ts +53 -53
  568. package/types/components/table-plugins/extend-cell-area.d.ts +781 -781
  569. package/types/components/table-plugins/extend-pivot-table.d.ts +59 -58
  570. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  571. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  572. package/types/components/table-plugins/index.d.ts +4 -4
  573. package/types/components/table-select.d.ts +268 -276
  574. package/types/components/table-transfer.d.ts +80 -84
  575. package/types/components/table.d.ts +7530 -8000
  576. package/types/components/tabs.d.ts +314 -352
  577. package/types/components/tag.d.ts +108 -114
  578. package/types/components/text-ellipsis.d.ts +107 -112
  579. package/types/components/text.d.ts +112 -122
  580. package/types/components/textarea.d.ts +261 -275
  581. package/types/components/timeline-item.d.ts +66 -75
  582. package/types/components/timeline.d.ts +70 -77
  583. package/types/components/tip.d.ts +81 -83
  584. package/types/components/toolbar.d.ts +327 -336
  585. package/types/components/tooltip.d.ts +250 -255
  586. package/types/components/tour.d.ts +70 -77
  587. package/types/components/transfer.d.ts +80 -84
  588. package/types/components/tree-select.d.ts +361 -376
  589. package/types/components/tree.d.ts +994 -1036
  590. package/types/components/upload.d.ts +477 -518
  591. package/types/components/watermark.d.ts +116 -120
  592. package/types/handles/form-design.d.ts +50 -50
  593. package/types/handles/index.d.ts +3 -3
  594. package/types/handles/list-design.d.ts +1 -2
  595. package/types/handles/table.d.ts +15 -15
  596. package/types/index.d.ts +8 -8
  597. package/types/ui/commands.d.ts +57 -57
  598. package/types/ui/formats.d.ts +62 -62
  599. package/types/ui/global-config.d.ts +269 -269
  600. package/types/ui/global-icon.d.ts +315 -315
  601. package/types/ui/hooks.d.ts +13 -13
  602. package/types/ui/index.d.ts +100 -100
  603. package/types/ui/interceptor.d.ts +52 -52
  604. package/types/ui/menus.d.ts +89 -89
  605. package/types/ui/renderer.d.ts +1033 -1047
  606. package/types/ui/validators.d.ts +37 -38
  607. /package/dist/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  608. /package/dist/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  609. /package/dist/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  610. /package/es/icon/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  611. /package/es/icon/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  612. /package/es/icon/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  613. /package/es/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  614. /package/es/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  615. /package/es/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  616. /package/es/vxe-icon/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  617. /package/es/vxe-icon/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  618. /package/es/vxe-icon/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  619. /package/lib/icon/style/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  620. /package/lib/icon/style/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  621. /package/lib/icon/style/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  622. /package/lib/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  623. /package/lib/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  624. /package/lib/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
  625. /package/lib/vxe-icon/style/{iconfont.1792979107495.ttf → iconfont.1793007755017.ttf} +0 -0
  626. /package/lib/vxe-icon/style/{iconfont.1792979107495.woff → iconfont.1793007755017.woff} +0 -0
  627. /package/lib/vxe-icon/style/{iconfont.1792979107495.woff2 → iconfont.1793007755017.woff2} +0 -0
@@ -1,775 +1,919 @@
1
- import { h, PropType, computed, inject, ref, Ref, reactive, nextTick, watch } from 'vue'
2
- import { defineVxeComponent } from '../../ui/src/comp'
3
- import XEUtils from 'xe-utils'
4
- import { VxeUI } from '../../ui'
5
- import { createComponentLog } from '../../ui/src/log'
6
- import VxeSelectComponent from '../../select'
7
- import VxeNumberInputComponent from '../../number-input'
8
-
9
- import type { VxePagerPropTypes, VxePagerConstructor, VxePagerEmits, VxeSelectEvents, ValueOf, PagerPrivateRef, PagerMethods, PagerPrivateMethods, VxePagerPrivateMethods, PagerReactData, VxeInputEvents, VxeSelectDefines } from '../../../types'
10
- import type { VxeGridConstructor, VxeGridPrivateMethods } from '../../../types/components/grid'
11
-
12
- const { getIcon, getConfig, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useFns } = VxeUI
13
-
14
- const { warnLog, errLog } = createComponentLog('pager')
15
-
16
- export default defineVxeComponent({
17
- name: 'VxePager',
18
- props: {
19
- size: {
20
- type: String as PropType<VxePagerPropTypes.Size>,
21
- default: () => getConfig().pager.size || getConfig().size
22
- },
23
- // 自定义布局
24
- layouts: {
25
- type: Array as PropType<VxePagerPropTypes.Layouts>,
26
- default: () => getConfig().pager.layouts || ['PrevJump', 'PrevPage', 'Jump', 'PageCount', 'NextPage', 'NextJump', 'Sizes', 'Total']
27
- },
28
- // 当前页
29
- currentPage: {
30
- type: Number as PropType<VxePagerPropTypes.CurrentPage>,
31
- default: 1
32
- },
33
- // 加载中
34
- loading: Boolean as PropType<VxePagerPropTypes.Loading>,
35
- // 每页大小
36
- pageSize: {
37
- type: Number as PropType<VxePagerPropTypes.PageSize>,
38
- default: () => getConfig().pager.pageSize || 10
39
- },
40
- // 总条数
41
- total: { type: Number as PropType<VxePagerPropTypes.Total>, default: 0 },
42
- // 显示页码按钮的数量
43
- pagerCount: {
44
- type: Number as PropType<VxePagerPropTypes.PagerCount>,
45
- default: () => getConfig().pager.pagerCount || 7
46
- },
47
- // 每页大小选项列表
48
- pageSizes: {
49
- type: Array as PropType<VxePagerPropTypes.PageSizes>,
50
- default: () => getConfig().pager.pageSizes || [10, 15, 20, 50, 100]
51
- },
52
- // 列对齐方式
53
- align: {
54
- type: String as PropType<VxePagerPropTypes.Align>,
55
- default: () => getConfig().pager.align
56
- },
57
- // 带边框
58
- border: {
59
- type: Boolean as PropType<VxePagerPropTypes.Border>,
60
- default: () => getConfig().pager.border
61
- },
62
- // 带背景颜色
63
- background: {
64
- type: Boolean as PropType<VxePagerPropTypes.Background>,
65
- default: () => getConfig().pager.background
66
- },
67
- // 配套的样式
68
- perfect: {
69
- type: Boolean as PropType<VxePagerPropTypes.Perfect>,
70
- default: () => getConfig().pager.perfect
71
- },
72
- // 当只有一页时隐藏
73
- autoHidden: {
74
- type: Boolean as PropType<VxePagerPropTypes.AutoHidden>,
75
- default: () => getConfig().pager.autoHidden
76
- },
77
- transfer: {
78
- type: Boolean as PropType<VxePagerPropTypes.Transfer>,
79
- default: () => getConfig().pager.transfer
80
- },
81
- className: [String, Function] as PropType<VxePagerPropTypes.ClassName>,
82
- pageSizePlacement: {
83
- type: String as PropType<VxePagerPropTypes.PageSizePlacement>,
84
- default: () => getConfig().pager.pageSizePlacement
85
- },
86
- // 自定义图标
87
- iconPrevPage: String as PropType<VxePagerPropTypes.IconPrevPage>,
88
- iconJumpPrev: String as PropType<VxePagerPropTypes.IconJumpPrev>,
89
- iconJumpNext: String as PropType<VxePagerPropTypes.IconJumpNext>,
90
- iconNextPage: String as PropType<VxePagerPropTypes.IconNextPage>,
91
- iconJumpMore: String as PropType<VxePagerPropTypes.IconJumpMore>,
92
- iconHomePage: String as PropType<VxePagerPropTypes.IconHomePage>,
93
- iconEndPage: String as PropType<VxePagerPropTypes.IconEndPage>
94
- },
95
- emits: [
96
- 'update:pageSize',
97
- 'update:currentPage',
98
- 'page-change'
99
- ] as VxePagerEmits,
100
- setup (props, context) {
101
- const { slots, emit } = context
102
-
103
- const xID = XEUtils.uniqueId()
104
-
105
- const { computeSize } = useFns.useSize(props)
106
-
107
- const $xeGrid = inject<(VxeGridConstructor & VxeGridPrivateMethods) | null>('$xeGrid', null)
108
-
109
- const reactData = reactive<PagerReactData>({
110
- inpCurrPage: props.currentPage
111
- })
112
-
113
- const refElem = ref() as Ref<HTMLDivElement>
114
-
115
- const refMaps: PagerPrivateRef = {
116
- refElem
117
- }
118
-
119
- const computePageCount = computed(() => {
120
- return getPageCount(props.total, props.pageSize)
121
- })
122
-
123
- const computeNumList = computed(() => {
124
- const { pagerCount } = props
125
- const pageCount = computePageCount.value
126
- const len = pageCount > pagerCount ? pagerCount - 2 : pagerCount
127
- const rest = []
128
- for (let index = 0; index < len; index++) {
129
- rest.push(index)
130
- }
131
- return rest
132
- })
133
-
134
- const computeOffsetNumber = computed(() => {
135
- return Math.floor((props.pagerCount - 2) / 2)
136
- })
137
-
138
- const computeSizeList = computed(() => {
139
- return props.pageSizes.map((item) => {
140
- if (XEUtils.isNumber(item)) {
141
- return {
142
- value: item,
143
- label: `${getI18n('vxe.pager.pagesize', [item])}`
144
- }
145
- }
146
- return { value: '', label: '', ...item }
147
- })
148
- })
149
-
150
- const $xePager = {
151
- xID,
152
- props,
153
- context,
154
- getRefMaps: () => refMaps
155
- } as unknown as VxePagerConstructor & VxePagerPrivateMethods
156
-
157
- const dispatchEvent = (type: ValueOf<VxePagerEmits>, params: Record<string, any>, evnt: Event | null) => {
158
- emit(type, createEvent(evnt, { $pager: $xePager }, params))
159
- }
160
-
161
- const getPageCount = (total: number, size: number) => {
162
- return Math.max(Math.ceil(total / size), 1)
163
- }
164
-
165
- const handleJumpPageEvent = (evnt: Event, currentPage: number) => {
166
- emit('update:currentPage', currentPage)
167
- if (evnt && currentPage !== props.currentPage) {
168
- dispatchEvent('page-change', { type: 'current', pageSize: props.pageSize, currentPage }, evnt)
169
- }
170
- }
171
-
172
- const handleChangeCurrentPage = (currentPage: number, evnt?: Event) => {
173
- emit('update:currentPage', currentPage)
174
- if (evnt && currentPage !== props.currentPage) {
175
- dispatchEvent('page-change', { type: 'current', pageSize: props.pageSize, currentPage }, evnt)
176
- }
177
- }
178
-
179
- const triggerJumpEvent: VxeInputEvents.Blur = (params) => {
180
- const { $event } = params
181
- const inputElem: HTMLInputElement = $event.target as HTMLInputElement
182
- const inpValue = XEUtils.toInteger(inputElem.value)
183
- const pageCount = computePageCount.value
184
- const current = inpValue <= 0 ? 1 : inpValue >= pageCount ? pageCount : inpValue
185
- const currPage = XEUtils.toValueString(current)
186
- inputElem.value = currPage
187
- reactData.inpCurrPage = currPage
188
- handleChangeCurrentPage(current, $event)
189
- }
190
-
191
- const handleHomePage = (evnt?: Event) => {
192
- const { currentPage } = props
193
- if (currentPage > 1) {
194
- handleChangeCurrentPage(1, evnt)
195
- }
196
- }
197
-
198
- const handleEndPage = (evnt?: Event) => {
199
- const { currentPage } = props
200
- const pageCount = computePageCount.value
201
- if (currentPage < pageCount) {
202
- handleChangeCurrentPage(pageCount, evnt)
203
- }
204
- }
205
-
206
- const handlePrevPage = (evnt?: Event) => {
207
- const { currentPage } = props
208
- const pageCount = computePageCount.value
209
- if (currentPage > 1) {
210
- handleChangeCurrentPage(Math.min(pageCount, Math.max(currentPage - 1, 1)), evnt)
211
- }
212
- }
213
-
214
- const handleNextPage = (evnt?: Event) => {
215
- const { currentPage } = props
216
- const pageCount = computePageCount.value
217
- if (currentPage < pageCount) {
218
- handleChangeCurrentPage(Math.min(pageCount, currentPage + 1), evnt)
219
- }
220
- }
221
-
222
- const handlePrevJump = (evnt?: Event) => {
223
- const numList = computeNumList.value
224
- handleChangeCurrentPage(Math.max(props.currentPage - numList.length, 1), evnt)
225
- }
226
-
227
- const handleNextJump = (evnt?: Event) => {
228
- const pageCount = computePageCount.value
229
- const numList = computeNumList.value
230
- handleChangeCurrentPage(Math.min(props.currentPage + numList.length, pageCount), evnt)
231
- }
232
-
233
- const pageSizeEvent: VxeSelectEvents.Change = (params) => {
234
- const { value, $event } = params
235
- const pageSize = XEUtils.toNumber(value)
236
- const pageCount = getPageCount(props.total, pageSize)
237
- let currentPage = props.currentPage
238
- if (currentPage > pageCount) {
239
- currentPage = pageCount
240
- emit('update:currentPage', pageCount)
241
- }
242
- emit('update:pageSize', pageSize)
243
- if ($event) {
244
- dispatchEvent('page-change', { type: 'size', pageSize, currentPage }, $event)
245
- }
246
- }
247
-
248
- const jumpKeydownEvent: VxeInputEvents.Keydown = (params) => {
249
- const { $event } = params
250
- if (globalEvents.hasKey($event, GLOBAL_EVENT_KEYS.ENTER)) {
251
- triggerJumpEvent(params)
252
- } else if (globalEvents.hasKey($event, GLOBAL_EVENT_KEYS.ARROW_UP)) {
253
- $event.preventDefault()
254
- handleNextPage($event)
255
- } else if (globalEvents.hasKey($event, GLOBAL_EVENT_KEYS.ARROW_DOWN)) {
256
- $event.preventDefault()
257
- handlePrevPage($event)
258
- }
259
- }
260
-
261
- // 第一页
262
- const renderHomePage = () => {
263
- const { currentPage, total } = props
264
- const homeSlot = slots.home
265
- const pageCount = computePageCount.value
266
- if (homeSlot) {
267
- return h('span', {
268
- class: 'vxe-pager--custom-home-btn'
269
- }, homeSlot({ $pager: $xePager, total, currentPage, pageCount }))
270
- }
271
- return h('button', {
272
- class: ['vxe-pager--home-btn', {
273
- 'is--disabled': currentPage <= 1
274
- }],
275
- type: 'button',
276
- title: getI18n('vxe.pager.homePageTitle'),
277
- onClick: handleHomePage
278
- }, [
279
- h('i', {
280
- class: ['vxe-pager--btn-icon', props.iconHomePage || getIcon().PAGER_HOME]
281
- })
282
- ])
283
- }
284
-
285
- // 上一页
286
- const renderPrevPage = () => {
287
- const { currentPage, total } = props
288
- const prevPageSlot = slots.prevPage || slots['prev-page']
289
- const pageCount = computePageCount.value
290
- if (prevPageSlot) {
291
- return h('span', {
292
- class: 'vxe-pager--custom-prev-btn'
293
- }, prevPageSlot({ $pager: $xePager, total, currentPage, pageCount }))
294
- }
295
- return h('button', {
296
- class: ['vxe-pager--prev-btn', {
297
- 'is--disabled': currentPage <= 1
298
- }],
299
- type: 'button',
300
- title: getI18n('vxe.pager.prevPageTitle'),
301
- onClick: handlePrevPage
302
- }, [
303
- h('i', {
304
- class: ['vxe-pager--btn-icon', props.iconPrevPage || getIcon().PAGER_PREV_PAGE]
305
- })
306
- ])
307
- }
308
-
309
- // 向上翻页
310
- const renderPrevJump = (tagName?: string) => {
311
- const { currentPage, total } = props
312
- const prevJumpSlot = slots.prevJump || slots['prev-jump']
313
- const pageCount = computePageCount.value
314
- if (prevJumpSlot) {
315
- return h('span', {
316
- class: 'vxe-pager--custom-jump-prev'
317
- }, prevJumpSlot({ $pager: $xePager, total, currentPage, pageCount }))
318
- }
319
- return h(tagName || 'button', {
320
- class: ['vxe-pager--jump-prev', {
321
- 'is--fixed': !tagName,
322
- 'is--disabled': currentPage <= 1
323
- }],
324
- type: 'button',
325
- title: getI18n('vxe.pager.prevJumpTitle'),
326
- onClick: handlePrevJump
327
- }, [
328
- tagName
329
- ? h('i', {
330
- class: ['vxe-pager--jump-more-icon', props.iconJumpMore || getIcon().PAGER_JUMP_MORE]
331
- })
332
- : null,
333
- h('i', {
334
- class: ['vxe-pager--jump-icon', props.iconJumpPrev || getIcon().PAGER_JUMP_PREV]
335
- })
336
- ])
337
- }
338
-
339
- // 向下翻页
340
- const renderNextJump = (tagName?: string) => {
341
- const { currentPage, total } = props
342
- const nextJumpSlot = slots.nextJump || slots['next-jump']
343
- const pageCount = computePageCount.value
344
- if (nextJumpSlot) {
345
- return h('span', {
346
- class: 'vxe-pager--custom-jump-next'
347
- }, nextJumpSlot({ $pager: $xePager, total, currentPage, pageCount }))
348
- }
349
- return h(tagName || 'button', {
350
- class: ['vxe-pager--jump-next', {
351
- 'is--fixed': !tagName,
352
- 'is--disabled': currentPage >= pageCount
353
- }],
354
- type: 'button',
355
- title: getI18n('vxe.pager.nextJumpTitle'),
356
- onClick: handleNextJump
357
- }, [
358
- tagName
359
- ? h('i', {
360
- class: ['vxe-pager--jump-more-icon', props.iconJumpMore || getIcon().PAGER_JUMP_MORE]
361
- })
362
- : null,
363
- h('i', {
364
- class: ['vxe-pager--jump-icon', props.iconJumpNext || getIcon().PAGER_JUMP_NEXT]
365
- })
366
- ])
367
- }
368
-
369
- // 下一页
370
- const renderNextPage = () => {
371
- const { currentPage, total } = props
372
- const nextPageSlot = slots.nextPage || slots['next-page']
373
- const pageCount = computePageCount.value
374
- if (nextPageSlot) {
375
- return h('span', {
376
- class: 'vxe-pager--custom-next-btn'
377
- }, nextPageSlot({ $pager: $xePager, total, currentPage, pageCount }))
378
- }
379
- return h('button', {
380
- class: ['vxe-pager--next-btn', {
381
- 'is--disabled': currentPage >= pageCount
382
- }],
383
- type: 'button',
384
- title: getI18n('vxe.pager.nextPageTitle'),
385
- onClick: handleNextPage
386
- }, [
387
- h('i', {
388
- class: ['vxe-pager--btn-icon', props.iconNextPage || getIcon().PAGER_NEXT_PAGE]
389
- })
390
- ])
391
- }
392
-
393
- // 最后一页
394
- const renderEndPage = () => {
395
- const { currentPage, total } = props
396
- const endSlot = slots.end
397
- const pageCount = computePageCount.value
398
- if (endSlot) {
399
- return h('span', {
400
- class: 'vxe-pager--custom-end-btn'
401
- }, endSlot({ $pager: $xePager, total, currentPage, pageCount }))
402
- }
403
- return h('button', {
404
- class: ['vxe-pager--end-btn', {
405
- 'is--disabled': currentPage >= pageCount
406
- }],
407
- type: 'button',
408
- title: getI18n('vxe.pager.endPageTitle'),
409
- onClick: handleEndPage
410
- }, [
411
- h('i', {
412
- class: ['vxe-pager--btn-icon', props.iconEndPage || getIcon().PAGER_END]
413
- })
414
- ])
415
- }
416
-
417
- // 页数
418
- const renderNumber = (showJump?: boolean) => {
419
- const { currentPage, total, pagerCount } = props
420
- const numberSlot = showJump ? (slots.numberJump || slots['number-jump']) : slots.number
421
- const nums = []
422
- const pageCount = computePageCount.value
423
- const numList = computeNumList.value
424
- const offsetNumber = computeOffsetNumber.value
425
- const isOv = pageCount > pagerCount
426
- const isLt = isOv && currentPage > offsetNumber + 1
427
- const isGt = isOv && currentPage < pageCount - offsetNumber
428
- const restList: number[] = []
429
- let startNumber = 1
430
-
431
- if (isOv) {
432
- if (currentPage >= pageCount - offsetNumber) {
433
- startNumber = Math.max(pageCount - numList.length + 1, 1)
434
- } else {
435
- startNumber = Math.max(currentPage - offsetNumber, 1)
436
- }
437
- }
438
-
439
- if (showJump && isLt) {
440
- restList.push(1)
441
- nums.push(
442
- h('button', {
443
- class: 'vxe-pager--num-btn',
444
- type: 'button',
445
- onClick: (evnt: Event) => handleJumpPageEvent(evnt, 1)
446
- }, '1'),
447
- renderPrevJump('span')
448
- )
449
- }
450
- numList.forEach((item, index) => {
451
- const number = startNumber + index
452
- if (number <= pageCount) {
453
- restList.push(number)
454
- nums.push(
455
- h('button', {
456
- key: number,
457
- class: ['vxe-pager--num-btn', {
458
- 'is--active': currentPage === number
459
- }],
460
- type: 'button',
461
- onClick: (evnt: Event) => handleJumpPageEvent(evnt, number)
462
- }, `${number}`)
463
- )
464
- }
465
- })
466
- if (showJump && isGt) {
467
- restList.push(pageCount)
468
- nums.push(
469
- renderNextJump('button'),
470
- h('button', {
471
- class: 'vxe-pager--num-btn',
472
- type: 'button',
473
- onClick: (evnt: Event) => handleJumpPageEvent(evnt, pageCount)
474
- }, pageCount)
475
- )
476
- }
477
- if (numberSlot) {
478
- return h('span', {
479
- class: 'vxe-pager--custom-btn-wrapper'
480
- }, numberSlot({ $pager: $xePager, total, numList: restList, currentPage, pageCount }))
481
- }
482
- return h('span', {
483
- class: 'vxe-pager--btn-wrapper'
484
- }, nums)
485
- }
486
-
487
- // jumpNumber
488
- const renderJumpNumber = () => {
489
- return renderNumber(true)
490
- }
491
-
492
- // sizes
493
- const renderSizes = () => {
494
- const { total, currentPage, pageSize, pageSizePlacement, transfer } = props
495
- const sizesSlot = slots.sizes
496
- const sizeList = computeSizeList.value
497
- const pageCount = computePageCount.value
498
- if (sizesSlot) {
499
- return h('span', {
500
- class: 'vxe-pager--custom-sizes'
501
- }, sizesSlot({ $pager: $xePager, total, currentPage, pageCount, pageSize, options: sizeList }))
502
- }
503
- return h(VxeSelectComponent, {
504
- class: 'vxe-pager--sizes',
505
- modelValue: pageSize,
506
- placement: pageSizePlacement,
507
- transfer: transfer,
508
- options: sizeList,
509
- clearable: false,
510
- onChange: pageSizeEvent
511
- })
512
- }
513
-
514
- // Jump
515
- const renderJump = (isFull?: boolean) => {
516
- const { total } = props
517
- const { inpCurrPage } = reactData
518
- const jumpSlot = isFull ? (slots.fullJump || slots['full-jump']) : slots.jump
519
- const pageCount = computePageCount.value
520
- if (jumpSlot) {
521
- return h('span', {
522
- class: 'vxe-pager--custom-jump'
523
- }, jumpSlot({ $pager: $xePager, total, currentPage: inpCurrPage, pageCount }))
524
- }
525
- return h('span', {
526
- class: 'vxe-pager--jump'
527
- }, [
528
- isFull
529
- ? h('span', {
530
- class: 'vxe-pager--goto-text'
531
- }, getI18n('vxe.pager.goto'))
532
- : null,
533
- h(VxeNumberInputComponent, {
534
- class: 'vxe-pager--goto',
535
- modelValue: reactData.inpCurrPage,
536
- placeholder: getI18n('vxe.pager.gotoTitle'),
537
- align: 'center',
538
- type: 'integer',
539
- max: pageCount,
540
- min: 1,
541
- controls: false,
542
- clearable: false,
543
- onKeydown: jumpKeydownEvent,
544
- onBlur: triggerJumpEvent,
545
- 'onUpdate:modelValue' (val) {
546
- reactData.inpCurrPage = val
547
- }
548
- }),
549
- isFull
550
- ? h('span', {
551
- class: 'vxe-pager--classifier-text'
552
- }, getI18n('vxe.pager.pageClassifier'))
553
- : null
554
- ])
555
- }
556
-
557
- // FullJump
558
- const renderFullJump = () => {
559
- return renderJump(true)
560
- }
561
-
562
- // PageCount
563
- const renderPageCount = () => {
564
- const { currentPage, total } = props
565
- const pageCountSlot = slots.pageCount || slots['page-count']
566
- const pageCount = computePageCount.value
567
- if (pageCountSlot) {
568
- return h('span', {
569
- class: 'vxe-pager--custom-count'
570
- }, pageCountSlot({ $pager: $xePager, total, currentPage, pageCount }))
571
- }
572
- return h('span', {
573
- class: 'vxe-pager--count'
574
- }, [
575
- h('span', {
576
- class: 'vxe-pager--separator'
577
- }),
578
- h('span', pageCount)
579
- ])
580
- }
581
-
582
- // total
583
- const renderTotal = () => {
584
- const { currentPage, total } = props
585
- const totalSlot = slots.total
586
- const pageCount = computePageCount.value
587
- if (totalSlot) {
588
- return h('span', {
589
- class: 'vxe-pager--custom-total'
590
- }, totalSlot({ $pager: $xePager, total, currentPage, pageCount }))
591
- }
592
- return h('span', {
593
- class: 'vxe-pager--total'
594
- }, getI18n('vxe.pager.total', [total]))
595
- }
596
-
597
- const pagerMethods: PagerMethods & { jumpPage: any } = {
598
- dispatchEvent,
599
- setPageSize (num) {
600
- pageSizeEvent({ value: num } as VxeSelectDefines.ChangeEventParams)
601
- return nextTick()
602
- },
603
- setPageSizeByEvent (evnt, num) {
604
- pageSizeEvent({ value: num, $event: evnt } as VxeSelectDefines.ChangeEventParams)
605
- },
606
- homePage () {
607
- handleHomePage()
608
- return nextTick()
609
- },
610
- homePageByEvent (evnt) {
611
- handleHomePage(evnt)
612
- },
613
- endPage () {
614
- handleEndPage()
615
- return nextTick()
616
- },
617
- endPageByEvent (evnt) {
618
- handleEndPage(evnt)
619
- },
620
- prevPage () {
621
- handlePrevPage()
622
- return nextTick()
623
- },
624
- prevPageByEvent (evnt) {
625
- handlePrevPage(evnt)
626
- },
627
- nextPage () {
628
- handleNextPage()
629
- return nextTick()
630
- },
631
- nextPageByEvent (evnt) {
632
- handleNextPage(evnt)
633
- },
634
- prevJump () {
635
- handlePrevJump()
636
- return nextTick()
637
- },
638
- prevJumpByEvent (evnt) {
639
- handlePrevJump(evnt)
640
- },
641
- nextJump () {
642
- handleNextJump()
643
- return nextTick()
644
- },
645
- nextJumpByEvent (evnt) {
646
- handleNextJump(evnt)
647
- },
648
- setCurrentPage (currentPage) {
649
- const current = XEUtils.toNumber(currentPage) || 1
650
- reactData.inpCurrPage = current
651
- handleChangeCurrentPage(current)
652
- return nextTick()
653
- },
654
- setCurrentPageByEvent (evnt, currentPage) {
655
- const current = XEUtils.toNumber(currentPage) || 1
656
- reactData.inpCurrPage = current
657
- handleChangeCurrentPage(current, evnt)
658
- },
659
- /**
660
- * 已废弃,被 setCurrentPage 替换
661
- * @deprecated
662
- */
663
- jumpPage (currentPage: number) {
664
- warnLog('vxe.error.delFunc', ['jumpPage', 'setCurrentPage'])
665
- return $xePager.setCurrentPage(currentPage)
666
- }
667
- }
668
-
669
- const pagerPrivateMethods: PagerPrivateMethods = {
670
- handlePrevPage,
671
- handleNextPage,
672
- handlePrevJump,
673
- handleNextJump
674
- }
675
-
676
- Object.assign($xePager, pagerMethods, pagerPrivateMethods)
677
-
678
- watch(() => props.currentPage, (value) => {
679
- reactData.inpCurrPage = value
680
- })
681
-
682
- const renderVN = () => {
683
- const { align, layouts, className } = props
684
- const childNodes = []
685
- const vSize = computeSize.value
686
- const pageCount = computePageCount.value
687
- if (slots.left) {
688
- childNodes.push(
689
- h('span', {
690
- class: 'vxe-pager--left-wrapper'
691
- }, slots.left({ $grid: $xeGrid }))
692
- )
693
- }
694
- layouts.forEach((name) => {
695
- let renderFn
696
- switch (name) {
697
- case 'Home':
698
- renderFn = renderHomePage
699
- break
700
- case 'PrevJump':
701
- renderFn = renderPrevJump
702
- break
703
- case 'PrevPage':
704
- renderFn = renderPrevPage
705
- break
706
- case 'Number':
707
- renderFn = renderNumber
708
- break
709
- case 'JumpNumber':
710
- renderFn = renderJumpNumber
711
- break
712
- case 'NextPage':
713
- renderFn = renderNextPage
714
- break
715
- case 'NextJump':
716
- renderFn = renderNextJump
717
- break
718
- case 'End':
719
- renderFn = renderEndPage
720
- break
721
- case 'Sizes':
722
- renderFn = renderSizes
723
- break
724
- case 'FullJump':
725
- renderFn = renderFullJump
726
- break
727
- case 'Jump':
728
- renderFn = renderJump
729
- break
730
- case 'PageCount':
731
- renderFn = renderPageCount
732
- break
733
- case 'Total':
734
- renderFn = renderTotal
735
- break
736
- }
737
- if (renderFn) {
738
- childNodes.push(renderFn())
739
- } else {
740
- errLog('vxe.error.notProp', [`layouts -> ${name}`])
741
- }
742
- })
743
- if (slots.right) {
744
- childNodes.push(
745
- h('span', {
746
- class: 'vxe-pager--right-wrapper'
747
- }, slots.right({ $grid: $xeGrid }))
748
- )
749
- }
750
- return h('div', {
751
- ref: refElem,
752
- class: ['vxe-pager', className ? (XEUtils.isFunction(className) ? className({ $pager: $xePager }) : className) : '', {
753
- [`size--${vSize}`]: vSize,
754
- [`align--${align}`]: align,
755
- 'is--border': props.border,
756
- 'is--background': props.background,
757
- 'is--perfect': props.perfect,
758
- 'is--hidden': props.autoHidden && pageCount === 1,
759
- 'is--loading': props.loading
760
- }]
761
- }, [
762
- h('div', {
763
- class: 'vxe-pager--wrapper'
764
- }, childNodes)
765
- ])
766
- }
767
-
768
- $xePager.renderVN = renderVN
769
-
770
- return $xePager
771
- },
772
- render () {
773
- return this.renderVN()
774
- }
775
- })
1
+ import { h, PropType, computed, inject, ref, Ref, reactive, nextTick, watch } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { VxeUI } from '@vxe-ui/core'
5
+ import { createComponentLog } from '../../ui/src/log'
6
+ import VxeSelectComponent from '../../select'
7
+ import VxeNumberInputComponent from '../../number-input'
8
+
9
+ import type { VxePagerPropTypes, VxePagerConstructor, VxePagerEmits, VxeSelectEvents, ValueOf, PagerPrivateRef, PagerMethods, PagerPrivateMethods, VxePagerPrivateMethods, PagerReactData, VxeInputEvents, VxeSelectDefines } from '../../../types'
10
+ import type { VxeGridConstructor, VxeGridPrivateMethods } from '../../../types/components/grid'
11
+
12
+ const { getIcon, getConfig, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useFns } = VxeUI
13
+
14
+ const { warnLog, errLog } = createComponentLog('pager')
15
+
16
+ export default defineVxeComponent({
17
+ name: 'VxePager',
18
+ props: {
19
+ size: {
20
+ type: String as PropType<VxePagerPropTypes.Size>,
21
+ default: () => getConfig().pager.size || getConfig().size
22
+ },
23
+ // 自定义布局
24
+ layouts: {
25
+ type: Array as PropType<VxePagerPropTypes.Layouts>,
26
+ default: () => getConfig().pager.layouts || ['PrevJump', 'PrevPage', 'Jump', 'PageCount', 'NextPage', 'NextJump', 'Sizes', 'Total']
27
+ },
28
+ // 当前页
29
+ currentPage: {
30
+ type: Number as PropType<VxePagerPropTypes.CurrentPage>,
31
+ default: 1
32
+ },
33
+ // 加载中
34
+ loading: Boolean as PropType<VxePagerPropTypes.Loading>,
35
+ // 每页大小
36
+ pageSize: {
37
+ type: Number as PropType<VxePagerPropTypes.PageSize>,
38
+ default: () => getConfig().pager.pageSize || 10
39
+ },
40
+ // 总条数
41
+ total: { type: Number as PropType<VxePagerPropTypes.Total>, default: 0 },
42
+ // 显示页码按钮的数量
43
+ pagerCount: {
44
+ type: Number as PropType<VxePagerPropTypes.PagerCount>,
45
+ default: () => getConfig().pager.pagerCount || 7
46
+ },
47
+ // 每页大小选项列表
48
+ pageSizes: {
49
+ type: Array as PropType<VxePagerPropTypes.PageSizes>,
50
+ default: () => getConfig().pager.pageSizes || [10, 15, 20, 50, 100]
51
+ },
52
+ // 列对齐方式
53
+ align: {
54
+ type: String as PropType<VxePagerPropTypes.Align>,
55
+ default: () => getConfig().pager.align
56
+ },
57
+ // 带边框
58
+ border: {
59
+ type: Boolean as PropType<VxePagerPropTypes.Border>,
60
+ default: () => getConfig().pager.border
61
+ },
62
+ // 带背景颜色
63
+ background: {
64
+ type: Boolean as PropType<VxePagerPropTypes.Background>,
65
+ default: () => getConfig().pager.background
66
+ },
67
+ // 配套的样式
68
+ perfect: {
69
+ type: Boolean as PropType<VxePagerPropTypes.Perfect>,
70
+ default: () => getConfig().pager.perfect
71
+ },
72
+ // 当只有一页时隐藏
73
+ autoHidden: {
74
+ type: Boolean as PropType<VxePagerPropTypes.AutoHidden>,
75
+ default: () => getConfig().pager.autoHidden
76
+ },
77
+ transfer: {
78
+ type: Boolean as PropType<VxePagerPropTypes.Transfer>,
79
+ default: () => getConfig().pager.transfer
80
+ },
81
+ className: [String, Function] as PropType<VxePagerPropTypes.ClassName>,
82
+ pageSizePlacement: {
83
+ type: String as PropType<VxePagerPropTypes.PageSizePlacement>,
84
+ default: () => getConfig().pager.pageSizePlacement
85
+ },
86
+ // 自定义图标
87
+ iconPrevPage: String as PropType<VxePagerPropTypes.IconPrevPage>,
88
+ iconJumpPrev: String as PropType<VxePagerPropTypes.IconJumpPrev>,
89
+ iconJumpNext: String as PropType<VxePagerPropTypes.IconJumpNext>,
90
+ iconNextPage: String as PropType<VxePagerPropTypes.IconNextPage>,
91
+ iconJumpMore: String as PropType<VxePagerPropTypes.IconJumpMore>,
92
+ iconHomePage: String as PropType<VxePagerPropTypes.IconHomePage>,
93
+ iconEndPage: String as PropType<VxePagerPropTypes.IconEndPage>
94
+ },
95
+ emits: ['update:pageSize', 'update:currentPage', 'page-change'] as VxePagerEmits,
96
+ setup(props, context) {
97
+ const { slots, emit } = context
98
+
99
+ const xID = XEUtils.uniqueId()
100
+
101
+ const { computeSize } = useFns.useSize(props)
102
+
103
+ const $xeGrid = inject<(VxeGridConstructor & VxeGridPrivateMethods) | null>('$xeGrid', null)
104
+
105
+ const reactData = reactive<PagerReactData>({
106
+ inpCurrPage: props.currentPage
107
+ })
108
+
109
+ const refElem = ref() as Ref<HTMLDivElement>
110
+
111
+ const refMaps: PagerPrivateRef = {
112
+ refElem
113
+ }
114
+
115
+ const computePageCount = computed(() => {
116
+ return getPageCount(props.total, props.pageSize)
117
+ })
118
+
119
+ const computeNumList = computed(() => {
120
+ const { pagerCount } = props
121
+ const pageCount = computePageCount.value
122
+ const len = pageCount > pagerCount ? pagerCount - 2 : pagerCount
123
+ const rest = []
124
+ for (let index = 0; index < len; index++) {
125
+ rest.push(index)
126
+ }
127
+ return rest
128
+ })
129
+
130
+ const computeOffsetNumber = computed(() => {
131
+ return Math.floor((props.pagerCount - 2) / 2)
132
+ })
133
+
134
+ const computeSizeList = computed(() => {
135
+ return props.pageSizes.map((item) => {
136
+ if (XEUtils.isNumber(item)) {
137
+ return {
138
+ value: item,
139
+ label: `${getI18n('vxe.pager.pagesize', [item])}`
140
+ }
141
+ }
142
+ return { value: '', label: '', ...item }
143
+ })
144
+ })
145
+
146
+ const $xePager = {
147
+ xID,
148
+ props,
149
+ context,
150
+ getRefMaps: () => refMaps
151
+ } as unknown as VxePagerConstructor & VxePagerPrivateMethods
152
+
153
+ const dispatchEvent = (type: ValueOf<VxePagerEmits>, params: Record<string, any>, evnt: Event | null) => {
154
+ emit(type, createEvent(evnt, { $pager: $xePager }, params))
155
+ }
156
+
157
+ const getPageCount = (total: number, size: number) => {
158
+ return Math.max(Math.ceil(total / size), 1)
159
+ }
160
+
161
+ const handleJumpPageEvent = (evnt: Event, currentPage: number) => {
162
+ emit('update:currentPage', currentPage)
163
+ if (evnt && currentPage !== props.currentPage) {
164
+ dispatchEvent('page-change', { type: 'current', pageSize: props.pageSize, currentPage }, evnt)
165
+ }
166
+ }
167
+
168
+ const handleChangeCurrentPage = (currentPage: number, evnt?: Event) => {
169
+ emit('update:currentPage', currentPage)
170
+ if (evnt && currentPage !== props.currentPage) {
171
+ dispatchEvent('page-change', { type: 'current', pageSize: props.pageSize, currentPage }, evnt)
172
+ }
173
+ }
174
+
175
+ const triggerJumpEvent: VxeInputEvents.Blur = (params) => {
176
+ const { $event } = params
177
+ const inputElem: HTMLInputElement = $event.target as HTMLInputElement
178
+ const inpValue = XEUtils.toInteger(inputElem.value)
179
+ const pageCount = computePageCount.value
180
+ const current = inpValue <= 0 ? 1 : inpValue >= pageCount ? pageCount : inpValue
181
+ const currPage = XEUtils.toValueString(current)
182
+ inputElem.value = currPage
183
+ reactData.inpCurrPage = currPage
184
+ handleChangeCurrentPage(current, $event)
185
+ }
186
+
187
+ const handleHomePage = (evnt?: Event) => {
188
+ const { currentPage } = props
189
+ if (currentPage > 1) {
190
+ handleChangeCurrentPage(1, evnt)
191
+ }
192
+ }
193
+
194
+ const handleEndPage = (evnt?: Event) => {
195
+ const { currentPage } = props
196
+ const pageCount = computePageCount.value
197
+ if (currentPage < pageCount) {
198
+ handleChangeCurrentPage(pageCount, evnt)
199
+ }
200
+ }
201
+
202
+ const handlePrevPage = (evnt?: Event) => {
203
+ const { currentPage } = props
204
+ const pageCount = computePageCount.value
205
+ if (currentPage > 1) {
206
+ handleChangeCurrentPage(Math.min(pageCount, Math.max(currentPage - 1, 1)), evnt)
207
+ }
208
+ }
209
+
210
+ const handleNextPage = (evnt?: Event) => {
211
+ const { currentPage } = props
212
+ const pageCount = computePageCount.value
213
+ if (currentPage < pageCount) {
214
+ handleChangeCurrentPage(Math.min(pageCount, currentPage + 1), evnt)
215
+ }
216
+ }
217
+
218
+ const handlePrevJump = (evnt?: Event) => {
219
+ const numList = computeNumList.value
220
+ handleChangeCurrentPage(Math.max(props.currentPage - numList.length, 1), evnt)
221
+ }
222
+
223
+ const handleNextJump = (evnt?: Event) => {
224
+ const pageCount = computePageCount.value
225
+ const numList = computeNumList.value
226
+ handleChangeCurrentPage(Math.min(props.currentPage + numList.length, pageCount), evnt)
227
+ }
228
+
229
+ const pageSizeEvent: VxeSelectEvents.Change = (params) => {
230
+ const { value, $event } = params
231
+ const pageSize = XEUtils.toNumber(value)
232
+ const pageCount = getPageCount(props.total, pageSize)
233
+ let currentPage = props.currentPage
234
+ if (currentPage > pageCount) {
235
+ currentPage = pageCount
236
+ emit('update:currentPage', pageCount)
237
+ }
238
+ emit('update:pageSize', pageSize)
239
+ if ($event) {
240
+ dispatchEvent('page-change', { type: 'size', pageSize, currentPage }, $event)
241
+ }
242
+ }
243
+
244
+ const jumpKeydownEvent: VxeInputEvents.Keydown = (params) => {
245
+ const { $event } = params
246
+ if (globalEvents.hasKey($event, GLOBAL_EVENT_KEYS.ENTER)) {
247
+ triggerJumpEvent(params)
248
+ } else if (globalEvents.hasKey($event, GLOBAL_EVENT_KEYS.ARROW_UP)) {
249
+ $event.preventDefault()
250
+ handleNextPage($event)
251
+ } else if (globalEvents.hasKey($event, GLOBAL_EVENT_KEYS.ARROW_DOWN)) {
252
+ $event.preventDefault()
253
+ handlePrevPage($event)
254
+ }
255
+ }
256
+
257
+ // 第一页
258
+ const renderHomePage = () => {
259
+ const { currentPage, total } = props
260
+ const homeSlot = slots.home
261
+ const pageCount = computePageCount.value
262
+ if (homeSlot) {
263
+ return h(
264
+ 'span',
265
+ {
266
+ class: 'vxe-pager--custom-home-btn'
267
+ },
268
+ homeSlot({ $pager: $xePager, total, currentPage, pageCount })
269
+ )
270
+ }
271
+ return h(
272
+ 'button',
273
+ {
274
+ class: [
275
+ 'vxe-pager--home-btn',
276
+ {
277
+ 'is--disabled': currentPage <= 1
278
+ }
279
+ ],
280
+ type: 'button',
281
+ title: getI18n('vxe.pager.homePageTitle'),
282
+ onClick: handleHomePage
283
+ },
284
+ [
285
+ h('i', {
286
+ class: ['vxe-pager--btn-icon', props.iconHomePage || getIcon().PAGER_HOME]
287
+ })
288
+ ]
289
+ )
290
+ }
291
+
292
+ // 上一页
293
+ const renderPrevPage = () => {
294
+ const { currentPage, total } = props
295
+ const prevPageSlot = slots.prevPage || slots['prev-page']
296
+ const pageCount = computePageCount.value
297
+ if (prevPageSlot) {
298
+ return h(
299
+ 'span',
300
+ {
301
+ class: 'vxe-pager--custom-prev-btn'
302
+ },
303
+ prevPageSlot({ $pager: $xePager, total, currentPage, pageCount })
304
+ )
305
+ }
306
+ return h(
307
+ 'button',
308
+ {
309
+ class: [
310
+ 'vxe-pager--prev-btn',
311
+ {
312
+ 'is--disabled': currentPage <= 1
313
+ }
314
+ ],
315
+ type: 'button',
316
+ title: getI18n('vxe.pager.prevPageTitle'),
317
+ onClick: handlePrevPage
318
+ },
319
+ [
320
+ h('i', {
321
+ class: ['vxe-pager--btn-icon', props.iconPrevPage || getIcon().PAGER_PREV_PAGE]
322
+ })
323
+ ]
324
+ )
325
+ }
326
+
327
+ // 向上翻页
328
+ const renderPrevJump = (tagName?: string) => {
329
+ const { currentPage, total } = props
330
+ const prevJumpSlot = slots.prevJump || slots['prev-jump']
331
+ const pageCount = computePageCount.value
332
+ if (prevJumpSlot) {
333
+ return h(
334
+ 'span',
335
+ {
336
+ class: 'vxe-pager--custom-jump-prev'
337
+ },
338
+ prevJumpSlot({ $pager: $xePager, total, currentPage, pageCount })
339
+ )
340
+ }
341
+ return h(
342
+ tagName || 'button',
343
+ {
344
+ class: [
345
+ 'vxe-pager--jump-prev',
346
+ {
347
+ 'is--fixed': !tagName,
348
+ 'is--disabled': currentPage <= 1
349
+ }
350
+ ],
351
+ type: 'button',
352
+ title: getI18n('vxe.pager.prevJumpTitle'),
353
+ onClick: handlePrevJump
354
+ },
355
+ [
356
+ tagName
357
+ ? h('i', {
358
+ class: ['vxe-pager--jump-more-icon', props.iconJumpMore || getIcon().PAGER_JUMP_MORE]
359
+ })
360
+ : null,
361
+ h('i', {
362
+ class: ['vxe-pager--jump-icon', props.iconJumpPrev || getIcon().PAGER_JUMP_PREV]
363
+ })
364
+ ]
365
+ )
366
+ }
367
+
368
+ // 向下翻页
369
+ const renderNextJump = (tagName?: string) => {
370
+ const { currentPage, total } = props
371
+ const nextJumpSlot = slots.nextJump || slots['next-jump']
372
+ const pageCount = computePageCount.value
373
+ if (nextJumpSlot) {
374
+ return h(
375
+ 'span',
376
+ {
377
+ class: 'vxe-pager--custom-jump-next'
378
+ },
379
+ nextJumpSlot({ $pager: $xePager, total, currentPage, pageCount })
380
+ )
381
+ }
382
+ return h(
383
+ tagName || 'button',
384
+ {
385
+ class: [
386
+ 'vxe-pager--jump-next',
387
+ {
388
+ 'is--fixed': !tagName,
389
+ 'is--disabled': currentPage >= pageCount
390
+ }
391
+ ],
392
+ type: 'button',
393
+ title: getI18n('vxe.pager.nextJumpTitle'),
394
+ onClick: handleNextJump
395
+ },
396
+ [
397
+ tagName
398
+ ? h('i', {
399
+ class: ['vxe-pager--jump-more-icon', props.iconJumpMore || getIcon().PAGER_JUMP_MORE]
400
+ })
401
+ : null,
402
+ h('i', {
403
+ class: ['vxe-pager--jump-icon', props.iconJumpNext || getIcon().PAGER_JUMP_NEXT]
404
+ })
405
+ ]
406
+ )
407
+ }
408
+
409
+ // 下一页
410
+ const renderNextPage = () => {
411
+ const { currentPage, total } = props
412
+ const nextPageSlot = slots.nextPage || slots['next-page']
413
+ const pageCount = computePageCount.value
414
+ if (nextPageSlot) {
415
+ return h(
416
+ 'span',
417
+ {
418
+ class: 'vxe-pager--custom-next-btn'
419
+ },
420
+ nextPageSlot({ $pager: $xePager, total, currentPage, pageCount })
421
+ )
422
+ }
423
+ return h(
424
+ 'button',
425
+ {
426
+ class: [
427
+ 'vxe-pager--next-btn',
428
+ {
429
+ 'is--disabled': currentPage >= pageCount
430
+ }
431
+ ],
432
+ type: 'button',
433
+ title: getI18n('vxe.pager.nextPageTitle'),
434
+ onClick: handleNextPage
435
+ },
436
+ [
437
+ h('i', {
438
+ class: ['vxe-pager--btn-icon', props.iconNextPage || getIcon().PAGER_NEXT_PAGE]
439
+ })
440
+ ]
441
+ )
442
+ }
443
+
444
+ // 最后一页
445
+ const renderEndPage = () => {
446
+ const { currentPage, total } = props
447
+ const endSlot = slots.end
448
+ const pageCount = computePageCount.value
449
+ if (endSlot) {
450
+ return h(
451
+ 'span',
452
+ {
453
+ class: 'vxe-pager--custom-end-btn'
454
+ },
455
+ endSlot({ $pager: $xePager, total, currentPage, pageCount })
456
+ )
457
+ }
458
+ return h(
459
+ 'button',
460
+ {
461
+ class: [
462
+ 'vxe-pager--end-btn',
463
+ {
464
+ 'is--disabled': currentPage >= pageCount
465
+ }
466
+ ],
467
+ type: 'button',
468
+ title: getI18n('vxe.pager.endPageTitle'),
469
+ onClick: handleEndPage
470
+ },
471
+ [
472
+ h('i', {
473
+ class: ['vxe-pager--btn-icon', props.iconEndPage || getIcon().PAGER_END]
474
+ })
475
+ ]
476
+ )
477
+ }
478
+
479
+ // 页数
480
+ const renderNumber = (showJump?: boolean) => {
481
+ const { currentPage, total, pagerCount } = props
482
+ const numberSlot = showJump ? slots.numberJump || slots['number-jump'] : slots.number
483
+ const nums = []
484
+ const pageCount = computePageCount.value
485
+ const numList = computeNumList.value
486
+ const offsetNumber = computeOffsetNumber.value
487
+ const isOv = pageCount > pagerCount
488
+ const isLt = isOv && currentPage > offsetNumber + 1
489
+ const isGt = isOv && currentPage < pageCount - offsetNumber
490
+ const restList: number[] = []
491
+ let startNumber = 1
492
+
493
+ if (isOv) {
494
+ if (currentPage >= pageCount - offsetNumber) {
495
+ startNumber = Math.max(pageCount - numList.length + 1, 1)
496
+ } else {
497
+ startNumber = Math.max(currentPage - offsetNumber, 1)
498
+ }
499
+ }
500
+
501
+ if (showJump && isLt) {
502
+ restList.push(1)
503
+ nums.push(
504
+ h(
505
+ 'button',
506
+ {
507
+ class: 'vxe-pager--num-btn',
508
+ type: 'button',
509
+ onClick: (evnt: Event) => handleJumpPageEvent(evnt, 1)
510
+ },
511
+ '1'
512
+ ),
513
+ renderPrevJump('span')
514
+ )
515
+ }
516
+ numList.forEach((item, index) => {
517
+ const number = startNumber + index
518
+ if (number <= pageCount) {
519
+ restList.push(number)
520
+ nums.push(
521
+ h(
522
+ 'button',
523
+ {
524
+ key: number,
525
+ class: [
526
+ 'vxe-pager--num-btn',
527
+ {
528
+ 'is--active': currentPage === number
529
+ }
530
+ ],
531
+ type: 'button',
532
+ onClick: (evnt: Event) => handleJumpPageEvent(evnt, number)
533
+ },
534
+ `${number}`
535
+ )
536
+ )
537
+ }
538
+ })
539
+ if (showJump && isGt) {
540
+ restList.push(pageCount)
541
+ nums.push(
542
+ renderNextJump('button'),
543
+ h(
544
+ 'button',
545
+ {
546
+ class: 'vxe-pager--num-btn',
547
+ type: 'button',
548
+ onClick: (evnt: Event) => handleJumpPageEvent(evnt, pageCount)
549
+ },
550
+ pageCount
551
+ )
552
+ )
553
+ }
554
+ if (numberSlot) {
555
+ return h(
556
+ 'span',
557
+ {
558
+ class: 'vxe-pager--custom-btn-wrapper'
559
+ },
560
+ numberSlot({ $pager: $xePager, total, numList: restList, currentPage, pageCount })
561
+ )
562
+ }
563
+ return h(
564
+ 'span',
565
+ {
566
+ class: 'vxe-pager--btn-wrapper'
567
+ },
568
+ nums
569
+ )
570
+ }
571
+
572
+ // jumpNumber
573
+ const renderJumpNumber = () => {
574
+ return renderNumber(true)
575
+ }
576
+
577
+ // sizes
578
+ const renderSizes = () => {
579
+ const { total, currentPage, pageSize, pageSizePlacement, transfer } = props
580
+ const sizesSlot = slots.sizes
581
+ const sizeList = computeSizeList.value
582
+ const pageCount = computePageCount.value
583
+ if (sizesSlot) {
584
+ return h(
585
+ 'span',
586
+ {
587
+ class: 'vxe-pager--custom-sizes'
588
+ },
589
+ sizesSlot({ $pager: $xePager, total, currentPage, pageCount, pageSize, options: sizeList })
590
+ )
591
+ }
592
+ return h(VxeSelectComponent, {
593
+ class: 'vxe-pager--sizes',
594
+ modelValue: pageSize,
595
+ placement: pageSizePlacement,
596
+ transfer: transfer,
597
+ options: sizeList,
598
+ clearable: false,
599
+ onChange: pageSizeEvent
600
+ })
601
+ }
602
+
603
+ // Jump
604
+ const renderJump = (isFull?: boolean) => {
605
+ const { total } = props
606
+ const { inpCurrPage } = reactData
607
+ const jumpSlot = isFull ? slots.fullJump || slots['full-jump'] : slots.jump
608
+ const pageCount = computePageCount.value
609
+ if (jumpSlot) {
610
+ return h(
611
+ 'span',
612
+ {
613
+ class: 'vxe-pager--custom-jump'
614
+ },
615
+ jumpSlot({ $pager: $xePager, total, currentPage: inpCurrPage, pageCount })
616
+ )
617
+ }
618
+ return h(
619
+ 'span',
620
+ {
621
+ class: 'vxe-pager--jump'
622
+ },
623
+ [
624
+ isFull
625
+ ? h(
626
+ 'span',
627
+ {
628
+ class: 'vxe-pager--goto-text'
629
+ },
630
+ getI18n('vxe.pager.goto')
631
+ )
632
+ : null,
633
+ h(VxeNumberInputComponent, {
634
+ class: 'vxe-pager--goto',
635
+ modelValue: reactData.inpCurrPage,
636
+ placeholder: getI18n('vxe.pager.gotoTitle'),
637
+ align: 'center',
638
+ type: 'integer',
639
+ max: pageCount,
640
+ min: 1,
641
+ controls: false,
642
+ clearable: false,
643
+ onKeydown: jumpKeydownEvent,
644
+ onBlur: triggerJumpEvent,
645
+ 'onUpdate:modelValue'(val) {
646
+ reactData.inpCurrPage = val
647
+ }
648
+ }),
649
+ isFull
650
+ ? h(
651
+ 'span',
652
+ {
653
+ class: 'vxe-pager--classifier-text'
654
+ },
655
+ getI18n('vxe.pager.pageClassifier')
656
+ )
657
+ : null
658
+ ]
659
+ )
660
+ }
661
+
662
+ // FullJump
663
+ const renderFullJump = () => {
664
+ return renderJump(true)
665
+ }
666
+
667
+ // PageCount
668
+ const renderPageCount = () => {
669
+ const { currentPage, total } = props
670
+ const pageCountSlot = slots.pageCount || slots['page-count']
671
+ const pageCount = computePageCount.value
672
+ if (pageCountSlot) {
673
+ return h(
674
+ 'span',
675
+ {
676
+ class: 'vxe-pager--custom-count'
677
+ },
678
+ pageCountSlot({ $pager: $xePager, total, currentPage, pageCount })
679
+ )
680
+ }
681
+ return h(
682
+ 'span',
683
+ {
684
+ class: 'vxe-pager--count'
685
+ },
686
+ [
687
+ h('span', {
688
+ class: 'vxe-pager--separator'
689
+ }),
690
+ h('span', pageCount)
691
+ ]
692
+ )
693
+ }
694
+
695
+ // total
696
+ const renderTotal = () => {
697
+ const { currentPage, total } = props
698
+ const totalSlot = slots.total
699
+ const pageCount = computePageCount.value
700
+ if (totalSlot) {
701
+ return h(
702
+ 'span',
703
+ {
704
+ class: 'vxe-pager--custom-total'
705
+ },
706
+ totalSlot({ $pager: $xePager, total, currentPage, pageCount })
707
+ )
708
+ }
709
+ return h(
710
+ 'span',
711
+ {
712
+ class: 'vxe-pager--total'
713
+ },
714
+ getI18n('vxe.pager.total', [total])
715
+ )
716
+ }
717
+
718
+ const pagerMethods: PagerMethods & { jumpPage: any } = {
719
+ dispatchEvent,
720
+ setPageSize(num) {
721
+ pageSizeEvent({ value: num } as VxeSelectDefines.ChangeEventParams)
722
+ return nextTick()
723
+ },
724
+ setPageSizeByEvent(evnt, num) {
725
+ pageSizeEvent({ value: num, $event: evnt } as VxeSelectDefines.ChangeEventParams)
726
+ },
727
+ homePage() {
728
+ handleHomePage()
729
+ return nextTick()
730
+ },
731
+ homePageByEvent(evnt) {
732
+ handleHomePage(evnt)
733
+ },
734
+ endPage() {
735
+ handleEndPage()
736
+ return nextTick()
737
+ },
738
+ endPageByEvent(evnt) {
739
+ handleEndPage(evnt)
740
+ },
741
+ prevPage() {
742
+ handlePrevPage()
743
+ return nextTick()
744
+ },
745
+ prevPageByEvent(evnt) {
746
+ handlePrevPage(evnt)
747
+ },
748
+ nextPage() {
749
+ handleNextPage()
750
+ return nextTick()
751
+ },
752
+ nextPageByEvent(evnt) {
753
+ handleNextPage(evnt)
754
+ },
755
+ prevJump() {
756
+ handlePrevJump()
757
+ return nextTick()
758
+ },
759
+ prevJumpByEvent(evnt) {
760
+ handlePrevJump(evnt)
761
+ },
762
+ nextJump() {
763
+ handleNextJump()
764
+ return nextTick()
765
+ },
766
+ nextJumpByEvent(evnt) {
767
+ handleNextJump(evnt)
768
+ },
769
+ setCurrentPage(currentPage) {
770
+ const current = XEUtils.toNumber(currentPage) || 1
771
+ reactData.inpCurrPage = current
772
+ handleChangeCurrentPage(current)
773
+ return nextTick()
774
+ },
775
+ setCurrentPageByEvent(evnt, currentPage) {
776
+ const current = XEUtils.toNumber(currentPage) || 1
777
+ reactData.inpCurrPage = current
778
+ handleChangeCurrentPage(current, evnt)
779
+ },
780
+ /**
781
+ * 已废弃,被 setCurrentPage 替换
782
+ * @deprecated
783
+ */
784
+ jumpPage(currentPage: number) {
785
+ warnLog('vxe.error.delFunc', ['jumpPage', 'setCurrentPage'])
786
+ return $xePager.setCurrentPage(currentPage)
787
+ }
788
+ }
789
+
790
+ const pagerPrivateMethods: PagerPrivateMethods = {
791
+ handlePrevPage,
792
+ handleNextPage,
793
+ handlePrevJump,
794
+ handleNextJump
795
+ }
796
+
797
+ Object.assign($xePager, pagerMethods, pagerPrivateMethods)
798
+
799
+ watch(
800
+ () => props.currentPage,
801
+ (value) => {
802
+ reactData.inpCurrPage = value
803
+ }
804
+ )
805
+
806
+ const renderVN = () => {
807
+ const { align, layouts, className } = props
808
+ const childNodes = []
809
+ const vSize = computeSize.value
810
+ const pageCount = computePageCount.value
811
+ if (slots.left) {
812
+ childNodes.push(
813
+ h(
814
+ 'span',
815
+ {
816
+ class: 'vxe-pager--left-wrapper'
817
+ },
818
+ slots.left({ $grid: $xeGrid })
819
+ )
820
+ )
821
+ }
822
+ layouts.forEach((name) => {
823
+ let renderFn
824
+ switch (name) {
825
+ case 'Home':
826
+ renderFn = renderHomePage
827
+ break
828
+ case 'PrevJump':
829
+ renderFn = renderPrevJump
830
+ break
831
+ case 'PrevPage':
832
+ renderFn = renderPrevPage
833
+ break
834
+ case 'Number':
835
+ renderFn = renderNumber
836
+ break
837
+ case 'JumpNumber':
838
+ renderFn = renderJumpNumber
839
+ break
840
+ case 'NextPage':
841
+ renderFn = renderNextPage
842
+ break
843
+ case 'NextJump':
844
+ renderFn = renderNextJump
845
+ break
846
+ case 'End':
847
+ renderFn = renderEndPage
848
+ break
849
+ case 'Sizes':
850
+ renderFn = renderSizes
851
+ break
852
+ case 'FullJump':
853
+ renderFn = renderFullJump
854
+ break
855
+ case 'Jump':
856
+ renderFn = renderJump
857
+ break
858
+ case 'PageCount':
859
+ renderFn = renderPageCount
860
+ break
861
+ case 'Total':
862
+ renderFn = renderTotal
863
+ break
864
+ }
865
+ if (renderFn) {
866
+ childNodes.push(renderFn())
867
+ } else {
868
+ errLog('vxe.error.notProp', [`layouts -> ${name}`])
869
+ }
870
+ })
871
+ if (slots.right) {
872
+ childNodes.push(
873
+ h(
874
+ 'span',
875
+ {
876
+ class: 'vxe-pager--right-wrapper'
877
+ },
878
+ slots.right({ $grid: $xeGrid })
879
+ )
880
+ )
881
+ }
882
+ return h(
883
+ 'div',
884
+ {
885
+ ref: refElem,
886
+ class: [
887
+ 'vxe-pager',
888
+ className ? (XEUtils.isFunction(className) ? className({ $pager: $xePager }) : className) : '',
889
+ {
890
+ [`size--${vSize}`]: vSize,
891
+ [`align--${align}`]: align,
892
+ 'is--border': props.border,
893
+ 'is--background': props.background,
894
+ 'is--perfect': props.perfect,
895
+ 'is--hidden': props.autoHidden && pageCount === 1,
896
+ 'is--loading': props.loading
897
+ }
898
+ ]
899
+ },
900
+ [
901
+ h(
902
+ 'div',
903
+ {
904
+ class: 'vxe-pager--wrapper'
905
+ },
906
+ childNodes
907
+ )
908
+ ]
909
+ )
910
+ }
911
+
912
+ $xePager.renderVN = renderVN
913
+
914
+ return $xePager
915
+ },
916
+ render() {
917
+ return this.renderVN()
918
+ }
919
+ })