vxe-pc-ui 4.14.4 → 4.14.6

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 (480) hide show
  1. package/LICENSE +21 -21
  2. package/README.en.md +72 -72
  3. package/README.ja-JP.md +72 -72
  4. package/README.md +364 -364
  5. package/README.zh-TW.md +73 -73
  6. package/es/tree/src/tree.js +31 -2
  7. package/es/tree-select/src/tree-select.js +2 -0
  8. package/es/ui/index.js +1 -1
  9. package/es/ui/src/log.js +1 -1
  10. package/lib/index.umd.js +2359 -2257
  11. package/lib/index.umd.min.js +1 -1
  12. package/lib/tree/src/tree.js +27 -2
  13. package/lib/tree/src/tree.min.js +1 -1
  14. package/lib/tree-select/src/tree-select.js +2 -0
  15. package/lib/tree-select/src/tree-select.min.js +1 -1
  16. package/lib/ui/index.js +1 -1
  17. package/lib/ui/index.min.js +1 -1
  18. package/lib/ui/src/log.js +1 -1
  19. package/lib/ui/src/log.min.js +1 -1
  20. package/package.json +88 -88
  21. package/packages/alert/index.ts +16 -16
  22. package/packages/alert/src/alert.ts +124 -124
  23. package/packages/anchor/index.ts +16 -16
  24. package/packages/anchor/src/anchor-link.ts +121 -121
  25. package/packages/anchor/src/anchor.ts +237 -237
  26. package/packages/anchor/src/util.ts +23 -23
  27. package/packages/anchor-link/index.ts +16 -16
  28. package/packages/avatar/index.ts +16 -16
  29. package/packages/avatar/src/avatar.ts +149 -149
  30. package/packages/backtop/index.ts +16 -16
  31. package/packages/backtop/src/backtop.ts +314 -314
  32. package/packages/badge/index.ts +16 -16
  33. package/packages/badge/src/badge.ts +100 -100
  34. package/packages/breadcrumb/index.ts +16 -16
  35. package/packages/breadcrumb/src/breadcrumb-item.ts +106 -106
  36. package/packages/breadcrumb/src/breadcrumb.ts +92 -92
  37. package/packages/breadcrumb-item/index.ts +16 -16
  38. package/packages/button/index.ts +16 -16
  39. package/packages/button/src/button-group.ts +110 -110
  40. package/packages/button/src/button.ts +841 -841
  41. package/packages/button-group/index.ts +16 -16
  42. package/packages/calendar/index.ts +16 -16
  43. package/packages/calendar/src/calendar.ts +1351 -1351
  44. package/packages/card/index.ts +16 -16
  45. package/packages/card/src/card.ts +175 -175
  46. package/packages/carousel/index.ts +16 -16
  47. package/packages/carousel/src/carousel-item.ts +102 -102
  48. package/packages/carousel/src/carousel.ts +414 -414
  49. package/packages/carousel/src/util.ts +21 -21
  50. package/packages/carousel-item/index.ts +16 -16
  51. package/packages/cascader/index.ts +16 -16
  52. package/packages/cascader/src/cascader.ts +741 -741
  53. package/packages/checkbox/index.ts +16 -16
  54. package/packages/checkbox/src/button.ts +144 -144
  55. package/packages/checkbox/src/checkbox.ts +154 -154
  56. package/packages/checkbox/src/group.ts +222 -222
  57. package/packages/checkbox-button/index.ts +16 -16
  58. package/packages/checkbox-group/index.ts +16 -16
  59. package/packages/col/index.ts +16 -16
  60. package/packages/collapse/index.ts +16 -16
  61. package/packages/collapse/src/collapse-pane.ts +114 -114
  62. package/packages/collapse/src/collapse.ts +284 -284
  63. package/packages/collapse/src/util.ts +21 -21
  64. package/packages/collapse-pane/index.ts +16 -16
  65. package/packages/color-picker/index.ts +16 -16
  66. package/packages/color-picker/src/color-picker.ts +1109 -1109
  67. package/packages/color-picker/src/util.ts +198 -198
  68. package/packages/components.ts +307 -307
  69. package/packages/context-menu/index.ts +54 -54
  70. package/packages/context-menu/src/context-menu.ts +681 -681
  71. package/packages/countdown/index.ts +16 -16
  72. package/packages/countdown/src/countdown.ts +262 -262
  73. package/packages/date-panel/index.ts +16 -16
  74. package/packages/date-panel/src/date-panel.ts +1809 -1809
  75. package/packages/date-panel/src/util.ts +244 -244
  76. package/packages/date-picker/index.ts +16 -16
  77. package/packages/date-picker/src/date-picker.ts +1071 -1071
  78. package/packages/date-range-picker/index.ts +16 -16
  79. package/packages/date-range-picker/src/date-range-picker.ts +1280 -1280
  80. package/packages/drawer/index.ts +77 -77
  81. package/packages/drawer/src/drawer.ts +657 -657
  82. package/packages/dynamics/index.ts +89 -89
  83. package/packages/empty/index.ts +16 -16
  84. package/packages/empty/src/empty.ts +100 -100
  85. package/packages/form/index.ts +16 -16
  86. package/packages/form/render/index.ts +598 -598
  87. package/packages/form/src/form-config-item.ts +72 -72
  88. package/packages/form/src/form-group.ts +86 -86
  89. package/packages/form/src/form-item.ts +174 -174
  90. package/packages/form/src/form.ts +987 -987
  91. package/packages/form/src/itemInfo.ts +80 -80
  92. package/packages/form/src/render.ts +387 -387
  93. package/packages/form/src/util.ts +93 -93
  94. package/packages/form-gather/index.ts +26 -26
  95. package/packages/form-group/index.ts +16 -16
  96. package/packages/form-item/index.ts +16 -16
  97. package/packages/icon/index.ts +16 -16
  98. package/packages/icon/src/icon.ts +75 -75
  99. package/packages/icon-picker/index.ts +16 -16
  100. package/packages/icon-picker/src/icon-picker.ts +626 -626
  101. package/packages/image/index.ts +16 -16
  102. package/packages/image/src/group.ts +153 -153
  103. package/packages/image/src/image.ts +298 -298
  104. package/packages/image/src/preview.ts +672 -672
  105. package/packages/image/src/util.ts +59 -59
  106. package/packages/image-group/index.ts +16 -16
  107. package/packages/image-preview/index.ts +19 -19
  108. package/packages/index.ts +4 -4
  109. package/packages/input/index.ts +16 -16
  110. package/packages/input/src/input.ts +2788 -2788
  111. package/packages/language/ar-EG.ts +840 -840
  112. package/packages/language/de-DE.ts +840 -840
  113. package/packages/language/en-US.ts +840 -840
  114. package/packages/language/es-ES.ts +840 -840
  115. package/packages/language/fr-FR.ts +840 -840
  116. package/packages/language/hu-HU.ts +840 -840
  117. package/packages/language/hy-AM.ts +840 -840
  118. package/packages/language/id-ID.ts +840 -840
  119. package/packages/language/it-IT.ts +840 -840
  120. package/packages/language/ja-JP.ts +840 -840
  121. package/packages/language/ko-KR.ts +840 -840
  122. package/packages/language/ms-MY.ts +840 -840
  123. package/packages/language/nb-NO.ts +840 -840
  124. package/packages/language/pt-BR.ts +840 -840
  125. package/packages/language/ru-RU.ts +840 -840
  126. package/packages/language/th-TH.ts +840 -840
  127. package/packages/language/ug-CN.ts +840 -840
  128. package/packages/language/uk-UA.ts +840 -840
  129. package/packages/language/uz-UZ.ts +840 -840
  130. package/packages/language/vi-VN.ts +840 -840
  131. package/packages/language/zh-CHT.ts +840 -840
  132. package/packages/language/zh-CN.ts +840 -840
  133. package/packages/language/zh-HK.ts +3 -3
  134. package/packages/language/zh-MO.ts +3 -3
  135. package/packages/language/zh-TC.ts +3 -3
  136. package/packages/language/zh-TW.ts +3 -3
  137. package/packages/layout-aside/index.ts +16 -16
  138. package/packages/layout-aside/src/layout-aside.ts +123 -123
  139. package/packages/layout-body/index.ts +16 -16
  140. package/packages/layout-body/src/layout-body.ts +142 -142
  141. package/packages/layout-container/index.ts +16 -16
  142. package/packages/layout-container/src/layout-container.ts +82 -82
  143. package/packages/layout-footer/index.ts +16 -16
  144. package/packages/layout-footer/src/layout-footer.ts +74 -74
  145. package/packages/layout-header/index.ts +16 -16
  146. package/packages/layout-header/src/layout-header.ts +73 -73
  147. package/packages/link/index.ts +16 -16
  148. package/packages/link/src/link.ts +161 -161
  149. package/packages/list/index.ts +16 -16
  150. package/packages/list/src/list.ts +442 -442
  151. package/packages/loading/index.ts +34 -34
  152. package/packages/loading/src/loading.ts +152 -152
  153. package/packages/mention/index.ts +16 -16
  154. package/packages/mention/src/mention.ts +71 -71
  155. package/packages/menu/index.ts +16 -16
  156. package/packages/menu/src/menu.ts +581 -581
  157. package/packages/modal/index.ts +136 -136
  158. package/packages/modal/src/modal.ts +1494 -1494
  159. package/packages/notice-bar/index.ts +16 -16
  160. package/packages/notice-bar/src/notice-bar.ts +181 -181
  161. package/packages/number-input/index.ts +16 -16
  162. package/packages/number-input/src/number-input.ts +1096 -1096
  163. package/packages/number-input/src/util.ts +12 -12
  164. package/packages/optgroup/index.ts +16 -16
  165. package/packages/option/index.ts +16 -16
  166. package/packages/pager/index.ts +16 -16
  167. package/packages/pager/src/pager.ts +769 -769
  168. package/packages/password-input/index.ts +16 -16
  169. package/packages/password-input/src/password-input.ts +378 -378
  170. package/packages/print/index.ts +18 -18
  171. package/packages/print/src/page-break.ts +92 -92
  172. package/packages/print/src/print.ts +272 -272
  173. package/packages/print/src/util.ts +284 -284
  174. package/packages/print-page-break/index.ts +16 -16
  175. package/packages/pulldown/index.ts +16 -16
  176. package/packages/pulldown/src/pulldown.ts +457 -457
  177. package/packages/radio/index.ts +16 -16
  178. package/packages/radio/src/button.ts +173 -173
  179. package/packages/radio/src/group.ts +213 -213
  180. package/packages/radio/src/radio.ts +180 -180
  181. package/packages/radio-button/index.ts +16 -16
  182. package/packages/radio-group/index.ts +16 -16
  183. package/packages/rate/index.ts +16 -16
  184. package/packages/rate/src/rate.ts +192 -192
  185. package/packages/result/index.ts +16 -16
  186. package/packages/result/src/result.ts +112 -112
  187. package/packages/row/index.ts +16 -16
  188. package/packages/row/src/col.ts +136 -136
  189. package/packages/row/src/row.ts +119 -119
  190. package/packages/segmented/index.ts +16 -16
  191. package/packages/segmented/src/segmented.ts +264 -264
  192. package/packages/select/index.ts +16 -16
  193. package/packages/select/src/optgroup.ts +49 -49
  194. package/packages/select/src/option-info.ts +20 -20
  195. package/packages/select/src/option.ts +47 -47
  196. package/packages/select/src/select.ts +1699 -1699
  197. package/packages/select/src/util.ts +47 -47
  198. package/packages/slider/index.ts +16 -16
  199. package/packages/slider/src/slider.ts +304 -304
  200. package/packages/split/index.ts +16 -16
  201. package/packages/split-pane/index.ts +17 -17
  202. package/packages/splitter/index.ts +16 -16
  203. package/packages/splitter/src/splitter-panel.ts +145 -145
  204. package/packages/splitter/src/splitter.ts +1009 -1009
  205. package/packages/splitter/src/util.ts +21 -21
  206. package/packages/splitter-panel/index.ts +16 -16
  207. package/packages/steps/index.ts +16 -16
  208. package/packages/steps/src/steps.ts +68 -68
  209. package/packages/switch/index.ts +16 -16
  210. package/packages/switch/src/switch.ts +237 -237
  211. package/packages/tab-pane/index.ts +16 -16
  212. package/packages/table-select/index.ts +16 -16
  213. package/packages/table-select/src/table-select.ts +800 -800
  214. package/packages/tabs/index.ts +16 -16
  215. package/packages/tabs/src/tab-pane.ts +117 -117
  216. package/packages/tabs/src/tabs.ts +940 -940
  217. package/packages/tabs/src/util.ts +21 -21
  218. package/packages/tag/index.ts +16 -16
  219. package/packages/tag/src/tag.ts +187 -187
  220. package/packages/text/index.ts +16 -16
  221. package/packages/text/src/text.ts +260 -260
  222. package/packages/text-ellipsis/index.ts +16 -16
  223. package/packages/text-ellipsis/src/text-ellipsis.ts +282 -282
  224. package/packages/textarea/index.ts +16 -16
  225. package/packages/textarea/src/textarea.ts +373 -373
  226. package/packages/timeline/index.ts +16 -16
  227. package/packages/timeline/src/timeline-item.ts +67 -67
  228. package/packages/timeline/src/timeline.ts +71 -71
  229. package/packages/timeline-item/index.ts +16 -16
  230. package/packages/tip/index.ts +19 -19
  231. package/packages/tip/src/tip.ts +129 -129
  232. package/packages/tooltip/index.ts +16 -16
  233. package/packages/tooltip/src/tooltip.ts +589 -589
  234. package/packages/tour/index.ts +16 -16
  235. package/packages/tour/src/tour.ts +71 -71
  236. package/packages/tree/index.ts +16 -16
  237. package/packages/tree/src/store.ts +14 -14
  238. package/packages/tree/src/tree.ts +2825 -2795
  239. package/packages/tree/src/util.ts +45 -45
  240. package/packages/tree-select/index.ts +16 -16
  241. package/packages/tree-select/src/tree-select.ts +979 -977
  242. package/packages/ui/index.ts +697 -697
  243. package/packages/ui/src/anime.ts +52 -52
  244. package/packages/ui/src/comp.ts +3 -3
  245. package/packages/ui/src/dom.ts +279 -279
  246. package/packages/ui/src/log.ts +6 -6
  247. package/packages/ui/src/utils.ts +49 -49
  248. package/packages/ui/src/vn.ts +39 -39
  249. package/packages/upload/index.ts +20 -20
  250. package/packages/upload/src/upload.ts +1919 -1919
  251. package/packages/upload/src/util.ts +109 -109
  252. package/packages/watermark/index.ts +31 -31
  253. package/packages/watermark/src/util.ts +176 -176
  254. package/packages/watermark/src/watermark.ts +168 -168
  255. package/styles/all.scss +90 -90
  256. package/styles/base.scss +16 -16
  257. package/styles/components/alert.scss +101 -101
  258. package/styles/components/anchor.scss +44 -44
  259. package/styles/components/avatar.scss +115 -115
  260. package/styles/components/backtop.scss +82 -82
  261. package/styles/components/badge.scss +45 -45
  262. package/styles/components/breadcrumb.scss +29 -29
  263. package/styles/components/button-group.scss +30 -30
  264. package/styles/components/button.scss +415 -415
  265. package/styles/components/calendar.scss +471 -471
  266. package/styles/components/card.scss +121 -121
  267. package/styles/components/carousel.scss +184 -184
  268. package/styles/components/cascader.scss +140 -140
  269. package/styles/components/checkbox-button.scss +57 -57
  270. package/styles/components/checkbox.scss +81 -81
  271. package/styles/components/collapse.scss +56 -56
  272. package/styles/components/color-picker.scss +409 -409
  273. package/styles/components/context-menu.scss +102 -102
  274. package/styles/components/countdown.scss +35 -35
  275. package/styles/components/date-panel.scss +505 -505
  276. package/styles/components/date-picker.scss +247 -247
  277. package/styles/components/date-range-picker.scss +252 -252
  278. package/styles/components/drawer.scss +298 -298
  279. package/styles/components/empty.scss +79 -79
  280. package/styles/components/form.scss +668 -668
  281. package/styles/components/icon-picker.scss +211 -211
  282. package/styles/components/icon.scss +1048 -1048
  283. package/styles/components/image-group.scss +2 -2
  284. package/styles/components/image-preview.scss +215 -215
  285. package/styles/components/image.scss +16 -16
  286. package/styles/components/input.scss +846 -846
  287. package/styles/components/layout-aside.scss +22 -22
  288. package/styles/components/layout-body.scss +14 -14
  289. package/styles/components/layout-container.scss +13 -13
  290. package/styles/components/layout-footer.scss +14 -14
  291. package/styles/components/layout-header.scss +11 -11
  292. package/styles/components/link.scss +115 -115
  293. package/styles/components/list.scss +40 -40
  294. package/styles/components/loading.scss +137 -137
  295. package/styles/components/menu.scss +150 -150
  296. package/styles/components/modal.scss +480 -480
  297. package/styles/components/notice-bar.scss +91 -91
  298. package/styles/components/number-input.scss +283 -283
  299. package/styles/components/old-icon.scss +4 -4
  300. package/styles/components/pager.scss +282 -282
  301. package/styles/components/password-input.scss +374 -374
  302. package/styles/components/print.scss +3 -3
  303. package/styles/components/pulldown.scss +75 -75
  304. package/styles/components/radio-button.scss +57 -57
  305. package/styles/components/radio.scss +79 -79
  306. package/styles/components/rate.scss +76 -76
  307. package/styles/components/result.scss +91 -91
  308. package/styles/components/row.scss +69 -69
  309. package/styles/components/segmented.scss +215 -215
  310. package/styles/components/select.scss +244 -244
  311. package/styles/components/slider.scss +139 -139
  312. package/styles/components/split.scss +1 -1
  313. package/styles/components/splitter.scss +318 -318
  314. package/styles/components/switch.scss +128 -128
  315. package/styles/components/table-select.scss +105 -105
  316. package/styles/components/tabs.scss +745 -745
  317. package/styles/components/tag.scss +184 -184
  318. package/styles/components/text-ellipsis.scss +130 -130
  319. package/styles/components/text.scss +123 -123
  320. package/styles/components/textarea.scss +106 -106
  321. package/styles/components/tip.scss +97 -97
  322. package/styles/components/tooltip.scss +141 -141
  323. package/styles/components/tree-select.scss +166 -166
  324. package/styles/components/tree.scss +294 -294
  325. package/styles/components/upload.scss +497 -497
  326. package/styles/components/watermark.scss +26 -26
  327. package/styles/helpers/baseMixin.scss +95 -95
  328. package/styles/helpers/baseVar.scss +3 -3
  329. package/styles/helpers/placement.scss +38 -38
  330. package/styles/theme/base.scss +214 -214
  331. package/styles/theme/dark.scss +119 -119
  332. package/styles/theme/light.scss +118 -118
  333. package/styles/variable.scss +111 -111
  334. package/types/all.d.ts +327 -327
  335. package/types/components/alert.d.ts +87 -87
  336. package/types/components/anchor-link.d.ts +91 -91
  337. package/types/components/anchor.d.ts +104 -104
  338. package/types/components/avatar.d.ts +88 -88
  339. package/types/components/backtop.d.ts +122 -122
  340. package/types/components/badge.d.ts +76 -76
  341. package/types/components/breadcrumb-item.d.ts +80 -80
  342. package/types/components/breadcrumb.d.ts +87 -87
  343. package/types/components/button-group.d.ts +120 -120
  344. package/types/components/button.d.ts +323 -323
  345. package/types/components/calendar.d.ts +264 -264
  346. package/types/components/card.d.ts +93 -93
  347. package/types/components/carousel-item.d.ts +75 -75
  348. package/types/components/carousel.d.ts +134 -134
  349. package/types/components/cascader.d.ts +263 -263
  350. package/types/components/checkbox-button.d.ts +103 -103
  351. package/types/components/checkbox-group.d.ts +143 -143
  352. package/types/components/checkbox.d.ts +123 -123
  353. package/types/components/col.d.ts +80 -80
  354. package/types/components/colgroup.d.ts +137 -137
  355. package/types/components/collapse-pane.d.ts +89 -89
  356. package/types/components/collapse.d.ts +121 -121
  357. package/types/components/color-picker.d.ts +176 -176
  358. package/types/components/column.d.ts +841 -841
  359. package/types/components/context-menu.d.ts +289 -289
  360. package/types/components/countdown.d.ts +112 -112
  361. package/types/components/date-panel.d.ts +280 -280
  362. package/types/components/date-picker.d.ts +332 -332
  363. package/types/components/date-range-picker.d.ts +352 -352
  364. package/types/components/drawer.d.ts +299 -299
  365. package/types/components/empty.d.ts +78 -78
  366. package/types/components/flow-design.d.ts +85 -85
  367. package/types/components/flow-view.d.ts +85 -85
  368. package/types/components/form-design.d.ts +376 -376
  369. package/types/components/form-gather.d.ts +124 -124
  370. package/types/components/form-group.d.ts +77 -77
  371. package/types/components/form-item.d.ts +411 -411
  372. package/types/components/form-view.d.ts +183 -183
  373. package/types/components/form.d.ts +468 -468
  374. package/types/components/gantt-module/gantt-view.d.ts +177 -177
  375. package/types/components/gantt-module/index.d.ts +1 -1
  376. package/types/components/gantt-plugins/extend-gantt-chart.d.ts +131 -131
  377. package/types/components/gantt-plugins/index.d.ts +1 -1
  378. package/types/components/gantt.d.ts +1194 -1185
  379. package/types/components/grid.d.ts +1040 -1040
  380. package/types/components/icon-picker.d.ts +196 -196
  381. package/types/components/icon.d.ts +87 -87
  382. package/types/components/image-group.d.ts +127 -127
  383. package/types/components/image-preview.d.ts +167 -167
  384. package/types/components/image.d.ts +173 -173
  385. package/types/components/input.d.ts +435 -435
  386. package/types/components/layout-aside.d.ts +80 -80
  387. package/types/components/layout-body.d.ts +91 -91
  388. package/types/components/layout-container.d.ts +73 -73
  389. package/types/components/layout-footer.d.ts +73 -73
  390. package/types/components/layout-header.d.ts +69 -69
  391. package/types/components/link.d.ts +111 -111
  392. package/types/components/list-design.d.ts +190 -190
  393. package/types/components/list-view.d.ts +199 -199
  394. package/types/components/list.d.ts +204 -204
  395. package/types/components/loading.d.ts +103 -103
  396. package/types/components/mention.d.ts +77 -77
  397. package/types/components/menu.d.ts +211 -211
  398. package/types/components/modal.d.ts +542 -542
  399. package/types/components/notice-bar.d.ts +102 -102
  400. package/types/components/number-input.d.ts +309 -309
  401. package/types/components/optgroup.d.ts +88 -88
  402. package/types/components/option.d.ts +103 -103
  403. package/types/components/pager.d.ts +335 -335
  404. package/types/components/password-input.d.ts +142 -142
  405. package/types/components/print-page-break.d.ts +69 -69
  406. package/types/components/print.d.ts +206 -206
  407. package/types/components/pulldown.d.ts +231 -231
  408. package/types/components/radio-button.d.ts +114 -114
  409. package/types/components/radio-group.d.ts +144 -144
  410. package/types/components/radio.d.ts +129 -129
  411. package/types/components/rate.d.ts +88 -88
  412. package/types/components/result.d.ts +84 -84
  413. package/types/components/row.d.ts +79 -79
  414. package/types/components/segmented.d.ts +123 -123
  415. package/types/components/select.d.ts +527 -527
  416. package/types/components/slider.d.ts +126 -126
  417. package/types/components/split-pane.d.ts +133 -133
  418. package/types/components/split.d.ts +312 -312
  419. package/types/components/splitter-panel.d.ts +105 -105
  420. package/types/components/splitter.d.ts +288 -288
  421. package/types/components/steps.d.ts +68 -68
  422. package/types/components/switch.d.ts +133 -133
  423. package/types/components/tab-pane.d.ts +114 -114
  424. package/types/components/table-module/custom.d.ts +123 -123
  425. package/types/components/table-module/edit.d.ts +243 -243
  426. package/types/components/table-module/export.d.ts +96 -96
  427. package/types/components/table-module/filter.d.ts +140 -140
  428. package/types/components/table-module/index.d.ts +7 -7
  429. package/types/components/table-module/keyboard.d.ts +26 -26
  430. package/types/components/table-module/menu.d.ts +28 -28
  431. package/types/components/table-module/validator.d.ts +53 -53
  432. package/types/components/table-plugins/extend-cell-area.d.ts +770 -770
  433. package/types/components/table-plugins/extend-pivot-table.d.ts +58 -58
  434. package/types/components/table-plugins/filters-combination.d.ts +15 -15
  435. package/types/components/table-plugins/filters-complex-input.d.ts +9 -9
  436. package/types/components/table-plugins/index.d.ts +4 -4
  437. package/types/components/table-select.d.ts +219 -219
  438. package/types/components/table.d.ts +7465 -7465
  439. package/types/components/tabs.d.ts +332 -332
  440. package/types/components/tag.d.ts +114 -114
  441. package/types/components/text-ellipsis.d.ts +112 -112
  442. package/types/components/text.d.ts +122 -122
  443. package/types/components/textarea.d.ts +247 -247
  444. package/types/components/timeline-item.d.ts +75 -75
  445. package/types/components/timeline.d.ts +77 -77
  446. package/types/components/tip.d.ts +83 -83
  447. package/types/components/toolbar.d.ts +336 -336
  448. package/types/components/tooltip.d.ts +180 -180
  449. package/types/components/tour.d.ts +77 -77
  450. package/types/components/tree-select.d.ts +310 -310
  451. package/types/components/tree.d.ts +843 -833
  452. package/types/components/upload.d.ts +437 -437
  453. package/types/components/watermark.d.ts +120 -120
  454. package/types/handles/form-design.d.ts +50 -50
  455. package/types/handles/index.d.ts +3 -3
  456. package/types/handles/list-design.d.ts +2 -2
  457. package/types/handles/table.d.ts +15 -15
  458. package/types/index.d.ts +8 -8
  459. package/types/ui/commands.d.ts +57 -57
  460. package/types/ui/formats.d.ts +62 -62
  461. package/types/ui/global-config.d.ts +254 -254
  462. package/types/ui/global-icon.d.ts +292 -292
  463. package/types/ui/hooks.d.ts +13 -13
  464. package/types/ui/index.d.ts +96 -96
  465. package/types/ui/interceptor.d.ts +52 -52
  466. package/types/ui/menus.d.ts +77 -77
  467. package/types/ui/renderer.d.ts +1041 -1041
  468. package/types/ui/validators.d.ts +38 -38
  469. /package/es/icon/{iconfont.1778169084473.ttf → iconfont.1778317220469.ttf} +0 -0
  470. /package/es/icon/{iconfont.1778169084473.woff → iconfont.1778317220469.woff} +0 -0
  471. /package/es/icon/{iconfont.1778169084473.woff2 → iconfont.1778317220469.woff2} +0 -0
  472. /package/es/{iconfont.1778169084473.ttf → iconfont.1778317220469.ttf} +0 -0
  473. /package/es/{iconfont.1778169084473.woff → iconfont.1778317220469.woff} +0 -0
  474. /package/es/{iconfont.1778169084473.woff2 → iconfont.1778317220469.woff2} +0 -0
  475. /package/lib/icon/style/{iconfont.1778169084473.ttf → iconfont.1778317220469.ttf} +0 -0
  476. /package/lib/icon/style/{iconfont.1778169084473.woff → iconfont.1778317220469.woff} +0 -0
  477. /package/lib/icon/style/{iconfont.1778169084473.woff2 → iconfont.1778317220469.woff2} +0 -0
  478. /package/lib/{iconfont.1778169084473.ttf → iconfont.1778317220469.ttf} +0 -0
  479. /package/lib/{iconfont.1778169084473.woff → iconfont.1778317220469.woff} +0 -0
  480. /package/lib/{iconfont.1778169084473.woff2 → iconfont.1778317220469.woff2} +0 -0
@@ -1,769 +1,769 @@
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 { getIcon, getConfig, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize } from '../../ui'
5
- import { warnLog, errLog } from '../../ui/src/log'
6
- import VxeSelectComponent from '../../select/src/select'
7
- import VxeNumberInputComponent from '../../number-input/src/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
- export default defineVxeComponent({
13
- name: 'VxePager',
14
- props: {
15
- size: {
16
- type: String as PropType<VxePagerPropTypes.Size>,
17
- default: () => getConfig().pager.size || getConfig().size
18
- },
19
- // 自定义布局
20
- layouts: {
21
- type: Array as PropType<VxePagerPropTypes.Layouts>,
22
- default: () => getConfig().pager.layouts || ['PrevJump', 'PrevPage', 'Jump', 'PageCount', 'NextPage', 'NextJump', 'Sizes', 'Total']
23
- },
24
- // 当前页
25
- currentPage: {
26
- type: Number as PropType<VxePagerPropTypes.CurrentPage>,
27
- default: 1
28
- },
29
- // 加载中
30
- loading: Boolean as PropType<VxePagerPropTypes.Loading>,
31
- // 每页大小
32
- pageSize: {
33
- type: Number as PropType<VxePagerPropTypes.PageSize>,
34
- default: () => getConfig().pager.pageSize || 10
35
- },
36
- // 总条数
37
- total: { type: Number as PropType<VxePagerPropTypes.Total>, default: 0 },
38
- // 显示页码按钮的数量
39
- pagerCount: {
40
- type: Number as PropType<VxePagerPropTypes.PagerCount>,
41
- default: () => getConfig().pager.pagerCount || 7
42
- },
43
- // 每页大小选项列表
44
- pageSizes: {
45
- type: Array as PropType<VxePagerPropTypes.PageSizes>,
46
- default: () => getConfig().pager.pageSizes || [10, 15, 20, 50, 100]
47
- },
48
- // 列对齐方式
49
- align: {
50
- type: String as PropType<VxePagerPropTypes.Align>,
51
- default: () => getConfig().pager.align
52
- },
53
- // 带边框
54
- border: {
55
- type: Boolean as PropType<VxePagerPropTypes.Border>,
56
- default: () => getConfig().pager.border
57
- },
58
- // 带背景颜色
59
- background: {
60
- type: Boolean as PropType<VxePagerPropTypes.Background>,
61
- default: () => getConfig().pager.background
62
- },
63
- // 配套的样式
64
- perfect: {
65
- type: Boolean as PropType<VxePagerPropTypes.Perfect>,
66
- default: () => getConfig().pager.perfect
67
- },
68
- // 当只有一页时隐藏
69
- autoHidden: {
70
- type: Boolean as PropType<VxePagerPropTypes.AutoHidden>,
71
- default: () => getConfig().pager.autoHidden
72
- },
73
- transfer: {
74
- type: Boolean as PropType<VxePagerPropTypes.Transfer>,
75
- default: () => getConfig().pager.transfer
76
- },
77
- className: [String, Function] as PropType<VxePagerPropTypes.ClassName>,
78
- pageSizePlacement: {
79
- type: String as PropType<VxePagerPropTypes.PageSizePlacement>,
80
- default: () => getConfig().pager.pageSizePlacement
81
- },
82
- // 自定义图标
83
- iconPrevPage: String as PropType<VxePagerPropTypes.IconPrevPage>,
84
- iconJumpPrev: String as PropType<VxePagerPropTypes.IconJumpPrev>,
85
- iconJumpNext: String as PropType<VxePagerPropTypes.IconJumpNext>,
86
- iconNextPage: String as PropType<VxePagerPropTypes.IconNextPage>,
87
- iconJumpMore: String as PropType<VxePagerPropTypes.IconJumpMore>,
88
- iconHomePage: String as PropType<VxePagerPropTypes.IconHomePage>,
89
- iconEndPage: String as PropType<VxePagerPropTypes.IconEndPage>
90
- },
91
- emits: [
92
- 'update:pageSize',
93
- 'update:currentPage',
94
- 'page-change'
95
- ] as VxePagerEmits,
96
- setup (props, context) {
97
- const { slots, emit } = context
98
-
99
- const xID = XEUtils.uniqueId()
100
-
101
- const { computeSize } = 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('span', {
264
- class: 'vxe-pager--custom-home-btn'
265
- }, homeSlot({ $pager: $xePager, total, currentPage, pageCount }))
266
- }
267
- return h('button', {
268
- class: ['vxe-pager--home-btn', {
269
- 'is--disabled': currentPage <= 1
270
- }],
271
- type: 'button',
272
- title: getI18n('vxe.pager.homePageTitle'),
273
- onClick: handleHomePage
274
- }, [
275
- h('i', {
276
- class: ['vxe-pager--btn-icon', props.iconHomePage || getIcon().PAGER_HOME]
277
- })
278
- ])
279
- }
280
-
281
- // 上一页
282
- const renderPrevPage = () => {
283
- const { currentPage, total } = props
284
- const prevPageSlot = slots.prevPage || slots['prev-page']
285
- const pageCount = computePageCount.value
286
- if (prevPageSlot) {
287
- return h('span', {
288
- class: 'vxe-pager--custom-prev-btn'
289
- }, prevPageSlot({ $pager: $xePager, total, currentPage, pageCount }))
290
- }
291
- return h('button', {
292
- class: ['vxe-pager--prev-btn', {
293
- 'is--disabled': currentPage <= 1
294
- }],
295
- type: 'button',
296
- title: getI18n('vxe.pager.prevPageTitle'),
297
- onClick: handlePrevPage
298
- }, [
299
- h('i', {
300
- class: ['vxe-pager--btn-icon', props.iconPrevPage || getIcon().PAGER_PREV_PAGE]
301
- })
302
- ])
303
- }
304
-
305
- // 向上翻页
306
- const renderPrevJump = (tagName?: string) => {
307
- const { currentPage, total } = props
308
- const prevJumpSlot = slots.prevJump || slots['prev-jump']
309
- const pageCount = computePageCount.value
310
- if (prevJumpSlot) {
311
- return h('span', {
312
- class: 'vxe-pager--custom-jump-prev'
313
- }, prevJumpSlot({ $pager: $xePager, total, currentPage, pageCount }))
314
- }
315
- return h(tagName || 'button', {
316
- class: ['vxe-pager--jump-prev', {
317
- 'is--fixed': !tagName,
318
- 'is--disabled': currentPage <= 1
319
- }],
320
- type: 'button',
321
- title: getI18n('vxe.pager.prevJumpTitle'),
322
- onClick: handlePrevJump
323
- }, [
324
- tagName
325
- ? h('i', {
326
- class: ['vxe-pager--jump-more-icon', props.iconJumpMore || getIcon().PAGER_JUMP_MORE]
327
- })
328
- : null,
329
- h('i', {
330
- class: ['vxe-pager--jump-icon', props.iconJumpPrev || getIcon().PAGER_JUMP_PREV]
331
- })
332
- ])
333
- }
334
-
335
- // 向下翻页
336
- const renderNextJump = (tagName?: string) => {
337
- const { currentPage, total } = props
338
- const nextJumpSlot = slots.nextJump || slots['next-jump']
339
- const pageCount = computePageCount.value
340
- if (nextJumpSlot) {
341
- return h('span', {
342
- class: 'vxe-pager--custom-jump-next'
343
- }, nextJumpSlot({ $pager: $xePager, total, currentPage, pageCount }))
344
- }
345
- return h(tagName || 'button', {
346
- class: ['vxe-pager--jump-next', {
347
- 'is--fixed': !tagName,
348
- 'is--disabled': currentPage >= pageCount
349
- }],
350
- type: 'button',
351
- title: getI18n('vxe.pager.nextJumpTitle'),
352
- onClick: handleNextJump
353
- }, [
354
- tagName
355
- ? h('i', {
356
- class: ['vxe-pager--jump-more-icon', props.iconJumpMore || getIcon().PAGER_JUMP_MORE]
357
- })
358
- : null,
359
- h('i', {
360
- class: ['vxe-pager--jump-icon', props.iconJumpNext || getIcon().PAGER_JUMP_NEXT]
361
- })
362
- ])
363
- }
364
-
365
- // 下一页
366
- const renderNextPage = () => {
367
- const { currentPage, total } = props
368
- const nextPageSlot = slots.nextPage || slots['next-page']
369
- const pageCount = computePageCount.value
370
- if (nextPageSlot) {
371
- return h('span', {
372
- class: 'vxe-pager--custom-next-btn'
373
- }, nextPageSlot({ $pager: $xePager, total, currentPage, pageCount }))
374
- }
375
- return h('button', {
376
- class: ['vxe-pager--next-btn', {
377
- 'is--disabled': currentPage >= pageCount
378
- }],
379
- type: 'button',
380
- title: getI18n('vxe.pager.nextPageTitle'),
381
- onClick: handleNextPage
382
- }, [
383
- h('i', {
384
- class: ['vxe-pager--btn-icon', props.iconNextPage || getIcon().PAGER_NEXT_PAGE]
385
- })
386
- ])
387
- }
388
-
389
- // 最后一页
390
- const renderEndPage = () => {
391
- const { currentPage, total } = props
392
- const endSlot = slots.end
393
- const pageCount = computePageCount.value
394
- if (endSlot) {
395
- return h('span', {
396
- class: 'vxe-pager--custom-end-btn'
397
- }, endSlot({ $pager: $xePager, total, currentPage, pageCount }))
398
- }
399
- return h('button', {
400
- class: ['vxe-pager--end-btn', {
401
- 'is--disabled': currentPage >= pageCount
402
- }],
403
- type: 'button',
404
- title: getI18n('vxe.pager.endPageTitle'),
405
- onClick: handleEndPage
406
- }, [
407
- h('i', {
408
- class: ['vxe-pager--btn-icon', props.iconEndPage || getIcon().PAGER_END]
409
- })
410
- ])
411
- }
412
-
413
- // 页数
414
- const renderNumber = (showJump?: boolean) => {
415
- const { currentPage, total, pagerCount } = props
416
- const numberSlot = showJump ? (slots.numberJump || slots['number-jump']) : slots.number
417
- const nums = []
418
- const pageCount = computePageCount.value
419
- const numList = computeNumList.value
420
- const offsetNumber = computeOffsetNumber.value
421
- const isOv = pageCount > pagerCount
422
- const isLt = isOv && currentPage > offsetNumber + 1
423
- const isGt = isOv && currentPage < pageCount - offsetNumber
424
- const restList: number[] = []
425
- let startNumber = 1
426
-
427
- if (isOv) {
428
- if (currentPage >= pageCount - offsetNumber) {
429
- startNumber = Math.max(pageCount - numList.length + 1, 1)
430
- } else {
431
- startNumber = Math.max(currentPage - offsetNumber, 1)
432
- }
433
- }
434
-
435
- if (showJump && isLt) {
436
- restList.push(1)
437
- nums.push(
438
- h('button', {
439
- class: 'vxe-pager--num-btn',
440
- type: 'button',
441
- onClick: (evnt: Event) => handleJumpPageEvent(evnt, 1)
442
- }, '1'),
443
- renderPrevJump('span')
444
- )
445
- }
446
- numList.forEach((item, index) => {
447
- const number = startNumber + index
448
- if (number <= pageCount) {
449
- restList.push(number)
450
- nums.push(
451
- h('button', {
452
- key: number,
453
- class: ['vxe-pager--num-btn', {
454
- 'is--active': currentPage === number
455
- }],
456
- type: 'button',
457
- onClick: (evnt: Event) => handleJumpPageEvent(evnt, number)
458
- }, `${number}`)
459
- )
460
- }
461
- })
462
- if (showJump && isGt) {
463
- restList.push(pageCount)
464
- nums.push(
465
- renderNextJump('button'),
466
- h('button', {
467
- class: 'vxe-pager--num-btn',
468
- type: 'button',
469
- onClick: (evnt: Event) => handleJumpPageEvent(evnt, pageCount)
470
- }, pageCount)
471
- )
472
- }
473
- if (numberSlot) {
474
- return h('span', {
475
- class: 'vxe-pager--custom-btn-wrapper'
476
- }, numberSlot({ $pager: $xePager, total, numList: restList, currentPage, pageCount }))
477
- }
478
- return h('span', {
479
- class: 'vxe-pager--btn-wrapper'
480
- }, nums)
481
- }
482
-
483
- // jumpNumber
484
- const renderJumpNumber = () => {
485
- return renderNumber(true)
486
- }
487
-
488
- // sizes
489
- const renderSizes = () => {
490
- const { total, currentPage, pageSize, pageSizePlacement, transfer } = props
491
- const sizesSlot = slots.sizes
492
- const sizeList = computeSizeList.value
493
- const pageCount = computePageCount.value
494
- if (sizesSlot) {
495
- return h('span', {
496
- class: 'vxe-pager--custom-sizes'
497
- }, sizesSlot({ $pager: $xePager, total, currentPage, pageCount, pageSize, options: sizeList }))
498
- }
499
- return h(VxeSelectComponent, {
500
- class: 'vxe-pager--sizes',
501
- modelValue: pageSize,
502
- placement: pageSizePlacement,
503
- transfer: transfer,
504
- options: sizeList,
505
- onChange: pageSizeEvent
506
- })
507
- }
508
-
509
- // Jump
510
- const renderJump = (isFull?: boolean) => {
511
- const { total } = props
512
- const { inpCurrPage } = reactData
513
- const jumpSlot = isFull ? (slots.fullJump || slots['full-jump']) : slots.jump
514
- const pageCount = computePageCount.value
515
- if (jumpSlot) {
516
- return h('span', {
517
- class: 'vxe-pager--custom-jump'
518
- }, jumpSlot({ $pager: $xePager, total, currentPage: inpCurrPage, pageCount }))
519
- }
520
- return h('span', {
521
- class: 'vxe-pager--jump'
522
- }, [
523
- isFull
524
- ? h('span', {
525
- class: 'vxe-pager--goto-text'
526
- }, getI18n('vxe.pager.goto'))
527
- : null,
528
- h(VxeNumberInputComponent, {
529
- class: 'vxe-pager--goto',
530
- modelValue: reactData.inpCurrPage,
531
- placeholder: getI18n('vxe.pager.gotoTitle'),
532
- align: 'center',
533
- type: 'integer',
534
- max: pageCount,
535
- min: 1,
536
- controls: false,
537
- onKeydown: jumpKeydownEvent,
538
- onBlur: triggerJumpEvent,
539
- 'onUpdate:modelValue' (val) {
540
- reactData.inpCurrPage = val
541
- }
542
- }),
543
- isFull
544
- ? h('span', {
545
- class: 'vxe-pager--classifier-text'
546
- }, getI18n('vxe.pager.pageClassifier'))
547
- : null
548
- ])
549
- }
550
-
551
- // FullJump
552
- const renderFullJump = () => {
553
- return renderJump(true)
554
- }
555
-
556
- // PageCount
557
- const renderPageCount = () => {
558
- const { currentPage, total } = props
559
- const pageCountSlot = slots.pageCount || slots['page-count']
560
- const pageCount = computePageCount.value
561
- if (pageCountSlot) {
562
- return h('span', {
563
- class: 'vxe-pager--custom-count'
564
- }, pageCountSlot({ $pager: $xePager, total, currentPage, pageCount }))
565
- }
566
- return h('span', {
567
- class: 'vxe-pager--count'
568
- }, [
569
- h('span', {
570
- class: 'vxe-pager--separator'
571
- }),
572
- h('span', pageCount)
573
- ])
574
- }
575
-
576
- // total
577
- const renderTotal = () => {
578
- const { currentPage, total } = props
579
- const totalSlot = slots.total
580
- const pageCount = computePageCount.value
581
- if (totalSlot) {
582
- return h('span', {
583
- class: 'vxe-pager--custom-total'
584
- }, totalSlot({ $pager: $xePager, total, currentPage, pageCount }))
585
- }
586
- return h('span', {
587
- class: 'vxe-pager--total'
588
- }, getI18n('vxe.pager.total', [total]))
589
- }
590
-
591
- const pagerMethods: PagerMethods & { jumpPage: any } = {
592
- dispatchEvent,
593
- setPageSize (num) {
594
- pageSizeEvent({ value: num } as VxeSelectDefines.ChangeEventParams)
595
- return nextTick()
596
- },
597
- setPageSizeByEvent (evnt, num) {
598
- pageSizeEvent({ value: num, $event: evnt } as VxeSelectDefines.ChangeEventParams)
599
- },
600
- homePage () {
601
- handleHomePage()
602
- return nextTick()
603
- },
604
- homePageByEvent (evnt) {
605
- handleHomePage(evnt)
606
- },
607
- endPage () {
608
- handleEndPage()
609
- return nextTick()
610
- },
611
- endPageByEvent (evnt) {
612
- handleEndPage(evnt)
613
- },
614
- prevPage () {
615
- handlePrevPage()
616
- return nextTick()
617
- },
618
- prevPageByEvent (evnt) {
619
- handlePrevPage(evnt)
620
- },
621
- nextPage () {
622
- handleNextPage()
623
- return nextTick()
624
- },
625
- nextPageByEvent (evnt) {
626
- handleNextPage(evnt)
627
- },
628
- prevJump () {
629
- handlePrevJump()
630
- return nextTick()
631
- },
632
- prevJumpByEvent (evnt) {
633
- handlePrevJump(evnt)
634
- },
635
- nextJump () {
636
- handleNextJump()
637
- return nextTick()
638
- },
639
- nextJumpByEvent (evnt) {
640
- handleNextJump(evnt)
641
- },
642
- setCurrentPage (currentPage) {
643
- const current = XEUtils.toNumber(currentPage) || 1
644
- reactData.inpCurrPage = current
645
- handleChangeCurrentPage(current)
646
- return nextTick()
647
- },
648
- setCurrentPageByEvent (evnt, currentPage) {
649
- const current = XEUtils.toNumber(currentPage) || 1
650
- reactData.inpCurrPage = current
651
- handleChangeCurrentPage(current, evnt)
652
- },
653
- /**
654
- * 已废弃,被 setCurrentPage 替换
655
- * @deprecated
656
- */
657
- jumpPage (currentPage: number) {
658
- warnLog('vxe.error.delFunc', ['[pager] jumpPage', 'setCurrentPage'])
659
- return $xePager.setCurrentPage(currentPage)
660
- }
661
- }
662
-
663
- const pagerPrivateMethods: PagerPrivateMethods = {
664
- handlePrevPage,
665
- handleNextPage,
666
- handlePrevJump,
667
- handleNextJump
668
- }
669
-
670
- Object.assign($xePager, pagerMethods, pagerPrivateMethods)
671
-
672
- watch(() => props.currentPage, (value) => {
673
- reactData.inpCurrPage = value
674
- })
675
-
676
- const renderVN = () => {
677
- const { align, layouts, className } = props
678
- const childNodes = []
679
- const vSize = computeSize.value
680
- const pageCount = computePageCount.value
681
- if (slots.left) {
682
- childNodes.push(
683
- h('span', {
684
- class: 'vxe-pager--left-wrapper'
685
- }, slots.left({ $grid: $xeGrid }))
686
- )
687
- }
688
- layouts.forEach((name) => {
689
- let renderFn
690
- switch (name) {
691
- case 'Home':
692
- renderFn = renderHomePage
693
- break
694
- case 'PrevJump':
695
- renderFn = renderPrevJump
696
- break
697
- case 'PrevPage':
698
- renderFn = renderPrevPage
699
- break
700
- case 'Number':
701
- renderFn = renderNumber
702
- break
703
- case 'JumpNumber':
704
- renderFn = renderJumpNumber
705
- break
706
- case 'NextPage':
707
- renderFn = renderNextPage
708
- break
709
- case 'NextJump':
710
- renderFn = renderNextJump
711
- break
712
- case 'End':
713
- renderFn = renderEndPage
714
- break
715
- case 'Sizes':
716
- renderFn = renderSizes
717
- break
718
- case 'FullJump':
719
- renderFn = renderFullJump
720
- break
721
- case 'Jump':
722
- renderFn = renderJump
723
- break
724
- case 'PageCount':
725
- renderFn = renderPageCount
726
- break
727
- case 'Total':
728
- renderFn = renderTotal
729
- break
730
- }
731
- if (renderFn) {
732
- childNodes.push(renderFn())
733
- } else {
734
- errLog('vxe.error.notProp', [`[pager] layouts -> ${name}`])
735
- }
736
- })
737
- if (slots.right) {
738
- childNodes.push(
739
- h('span', {
740
- class: 'vxe-pager--right-wrapper'
741
- }, slots.right({ $grid: $xeGrid }))
742
- )
743
- }
744
- return h('div', {
745
- ref: refElem,
746
- class: ['vxe-pager', className ? (XEUtils.isFunction(className) ? className({ $pager: $xePager }) : className) : '', {
747
- [`size--${vSize}`]: vSize,
748
- [`align--${align}`]: align,
749
- 'is--border': props.border,
750
- 'is--background': props.background,
751
- 'is--perfect': props.perfect,
752
- 'is--hidden': props.autoHidden && pageCount === 1,
753
- 'is--loading': props.loading
754
- }]
755
- }, [
756
- h('div', {
757
- class: 'vxe-pager--wrapper'
758
- }, childNodes)
759
- ])
760
- }
761
-
762
- $xePager.renderVN = renderVN
763
-
764
- return $xePager
765
- },
766
- render () {
767
- return this.renderVN()
768
- }
769
- })
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 { getIcon, getConfig, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize } from '../../ui'
5
+ import { warnLog, errLog } from '../../ui/src/log'
6
+ import VxeSelectComponent from '../../select/src/select'
7
+ import VxeNumberInputComponent from '../../number-input/src/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
+ export default defineVxeComponent({
13
+ name: 'VxePager',
14
+ props: {
15
+ size: {
16
+ type: String as PropType<VxePagerPropTypes.Size>,
17
+ default: () => getConfig().pager.size || getConfig().size
18
+ },
19
+ // 自定义布局
20
+ layouts: {
21
+ type: Array as PropType<VxePagerPropTypes.Layouts>,
22
+ default: () => getConfig().pager.layouts || ['PrevJump', 'PrevPage', 'Jump', 'PageCount', 'NextPage', 'NextJump', 'Sizes', 'Total']
23
+ },
24
+ // 当前页
25
+ currentPage: {
26
+ type: Number as PropType<VxePagerPropTypes.CurrentPage>,
27
+ default: 1
28
+ },
29
+ // 加载中
30
+ loading: Boolean as PropType<VxePagerPropTypes.Loading>,
31
+ // 每页大小
32
+ pageSize: {
33
+ type: Number as PropType<VxePagerPropTypes.PageSize>,
34
+ default: () => getConfig().pager.pageSize || 10
35
+ },
36
+ // 总条数
37
+ total: { type: Number as PropType<VxePagerPropTypes.Total>, default: 0 },
38
+ // 显示页码按钮的数量
39
+ pagerCount: {
40
+ type: Number as PropType<VxePagerPropTypes.PagerCount>,
41
+ default: () => getConfig().pager.pagerCount || 7
42
+ },
43
+ // 每页大小选项列表
44
+ pageSizes: {
45
+ type: Array as PropType<VxePagerPropTypes.PageSizes>,
46
+ default: () => getConfig().pager.pageSizes || [10, 15, 20, 50, 100]
47
+ },
48
+ // 列对齐方式
49
+ align: {
50
+ type: String as PropType<VxePagerPropTypes.Align>,
51
+ default: () => getConfig().pager.align
52
+ },
53
+ // 带边框
54
+ border: {
55
+ type: Boolean as PropType<VxePagerPropTypes.Border>,
56
+ default: () => getConfig().pager.border
57
+ },
58
+ // 带背景颜色
59
+ background: {
60
+ type: Boolean as PropType<VxePagerPropTypes.Background>,
61
+ default: () => getConfig().pager.background
62
+ },
63
+ // 配套的样式
64
+ perfect: {
65
+ type: Boolean as PropType<VxePagerPropTypes.Perfect>,
66
+ default: () => getConfig().pager.perfect
67
+ },
68
+ // 当只有一页时隐藏
69
+ autoHidden: {
70
+ type: Boolean as PropType<VxePagerPropTypes.AutoHidden>,
71
+ default: () => getConfig().pager.autoHidden
72
+ },
73
+ transfer: {
74
+ type: Boolean as PropType<VxePagerPropTypes.Transfer>,
75
+ default: () => getConfig().pager.transfer
76
+ },
77
+ className: [String, Function] as PropType<VxePagerPropTypes.ClassName>,
78
+ pageSizePlacement: {
79
+ type: String as PropType<VxePagerPropTypes.PageSizePlacement>,
80
+ default: () => getConfig().pager.pageSizePlacement
81
+ },
82
+ // 自定义图标
83
+ iconPrevPage: String as PropType<VxePagerPropTypes.IconPrevPage>,
84
+ iconJumpPrev: String as PropType<VxePagerPropTypes.IconJumpPrev>,
85
+ iconJumpNext: String as PropType<VxePagerPropTypes.IconJumpNext>,
86
+ iconNextPage: String as PropType<VxePagerPropTypes.IconNextPage>,
87
+ iconJumpMore: String as PropType<VxePagerPropTypes.IconJumpMore>,
88
+ iconHomePage: String as PropType<VxePagerPropTypes.IconHomePage>,
89
+ iconEndPage: String as PropType<VxePagerPropTypes.IconEndPage>
90
+ },
91
+ emits: [
92
+ 'update:pageSize',
93
+ 'update:currentPage',
94
+ 'page-change'
95
+ ] as VxePagerEmits,
96
+ setup (props, context) {
97
+ const { slots, emit } = context
98
+
99
+ const xID = XEUtils.uniqueId()
100
+
101
+ const { computeSize } = 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('span', {
264
+ class: 'vxe-pager--custom-home-btn'
265
+ }, homeSlot({ $pager: $xePager, total, currentPage, pageCount }))
266
+ }
267
+ return h('button', {
268
+ class: ['vxe-pager--home-btn', {
269
+ 'is--disabled': currentPage <= 1
270
+ }],
271
+ type: 'button',
272
+ title: getI18n('vxe.pager.homePageTitle'),
273
+ onClick: handleHomePage
274
+ }, [
275
+ h('i', {
276
+ class: ['vxe-pager--btn-icon', props.iconHomePage || getIcon().PAGER_HOME]
277
+ })
278
+ ])
279
+ }
280
+
281
+ // 上一页
282
+ const renderPrevPage = () => {
283
+ const { currentPage, total } = props
284
+ const prevPageSlot = slots.prevPage || slots['prev-page']
285
+ const pageCount = computePageCount.value
286
+ if (prevPageSlot) {
287
+ return h('span', {
288
+ class: 'vxe-pager--custom-prev-btn'
289
+ }, prevPageSlot({ $pager: $xePager, total, currentPage, pageCount }))
290
+ }
291
+ return h('button', {
292
+ class: ['vxe-pager--prev-btn', {
293
+ 'is--disabled': currentPage <= 1
294
+ }],
295
+ type: 'button',
296
+ title: getI18n('vxe.pager.prevPageTitle'),
297
+ onClick: handlePrevPage
298
+ }, [
299
+ h('i', {
300
+ class: ['vxe-pager--btn-icon', props.iconPrevPage || getIcon().PAGER_PREV_PAGE]
301
+ })
302
+ ])
303
+ }
304
+
305
+ // 向上翻页
306
+ const renderPrevJump = (tagName?: string) => {
307
+ const { currentPage, total } = props
308
+ const prevJumpSlot = slots.prevJump || slots['prev-jump']
309
+ const pageCount = computePageCount.value
310
+ if (prevJumpSlot) {
311
+ return h('span', {
312
+ class: 'vxe-pager--custom-jump-prev'
313
+ }, prevJumpSlot({ $pager: $xePager, total, currentPage, pageCount }))
314
+ }
315
+ return h(tagName || 'button', {
316
+ class: ['vxe-pager--jump-prev', {
317
+ 'is--fixed': !tagName,
318
+ 'is--disabled': currentPage <= 1
319
+ }],
320
+ type: 'button',
321
+ title: getI18n('vxe.pager.prevJumpTitle'),
322
+ onClick: handlePrevJump
323
+ }, [
324
+ tagName
325
+ ? h('i', {
326
+ class: ['vxe-pager--jump-more-icon', props.iconJumpMore || getIcon().PAGER_JUMP_MORE]
327
+ })
328
+ : null,
329
+ h('i', {
330
+ class: ['vxe-pager--jump-icon', props.iconJumpPrev || getIcon().PAGER_JUMP_PREV]
331
+ })
332
+ ])
333
+ }
334
+
335
+ // 向下翻页
336
+ const renderNextJump = (tagName?: string) => {
337
+ const { currentPage, total } = props
338
+ const nextJumpSlot = slots.nextJump || slots['next-jump']
339
+ const pageCount = computePageCount.value
340
+ if (nextJumpSlot) {
341
+ return h('span', {
342
+ class: 'vxe-pager--custom-jump-next'
343
+ }, nextJumpSlot({ $pager: $xePager, total, currentPage, pageCount }))
344
+ }
345
+ return h(tagName || 'button', {
346
+ class: ['vxe-pager--jump-next', {
347
+ 'is--fixed': !tagName,
348
+ 'is--disabled': currentPage >= pageCount
349
+ }],
350
+ type: 'button',
351
+ title: getI18n('vxe.pager.nextJumpTitle'),
352
+ onClick: handleNextJump
353
+ }, [
354
+ tagName
355
+ ? h('i', {
356
+ class: ['vxe-pager--jump-more-icon', props.iconJumpMore || getIcon().PAGER_JUMP_MORE]
357
+ })
358
+ : null,
359
+ h('i', {
360
+ class: ['vxe-pager--jump-icon', props.iconJumpNext || getIcon().PAGER_JUMP_NEXT]
361
+ })
362
+ ])
363
+ }
364
+
365
+ // 下一页
366
+ const renderNextPage = () => {
367
+ const { currentPage, total } = props
368
+ const nextPageSlot = slots.nextPage || slots['next-page']
369
+ const pageCount = computePageCount.value
370
+ if (nextPageSlot) {
371
+ return h('span', {
372
+ class: 'vxe-pager--custom-next-btn'
373
+ }, nextPageSlot({ $pager: $xePager, total, currentPage, pageCount }))
374
+ }
375
+ return h('button', {
376
+ class: ['vxe-pager--next-btn', {
377
+ 'is--disabled': currentPage >= pageCount
378
+ }],
379
+ type: 'button',
380
+ title: getI18n('vxe.pager.nextPageTitle'),
381
+ onClick: handleNextPage
382
+ }, [
383
+ h('i', {
384
+ class: ['vxe-pager--btn-icon', props.iconNextPage || getIcon().PAGER_NEXT_PAGE]
385
+ })
386
+ ])
387
+ }
388
+
389
+ // 最后一页
390
+ const renderEndPage = () => {
391
+ const { currentPage, total } = props
392
+ const endSlot = slots.end
393
+ const pageCount = computePageCount.value
394
+ if (endSlot) {
395
+ return h('span', {
396
+ class: 'vxe-pager--custom-end-btn'
397
+ }, endSlot({ $pager: $xePager, total, currentPage, pageCount }))
398
+ }
399
+ return h('button', {
400
+ class: ['vxe-pager--end-btn', {
401
+ 'is--disabled': currentPage >= pageCount
402
+ }],
403
+ type: 'button',
404
+ title: getI18n('vxe.pager.endPageTitle'),
405
+ onClick: handleEndPage
406
+ }, [
407
+ h('i', {
408
+ class: ['vxe-pager--btn-icon', props.iconEndPage || getIcon().PAGER_END]
409
+ })
410
+ ])
411
+ }
412
+
413
+ // 页数
414
+ const renderNumber = (showJump?: boolean) => {
415
+ const { currentPage, total, pagerCount } = props
416
+ const numberSlot = showJump ? (slots.numberJump || slots['number-jump']) : slots.number
417
+ const nums = []
418
+ const pageCount = computePageCount.value
419
+ const numList = computeNumList.value
420
+ const offsetNumber = computeOffsetNumber.value
421
+ const isOv = pageCount > pagerCount
422
+ const isLt = isOv && currentPage > offsetNumber + 1
423
+ const isGt = isOv && currentPage < pageCount - offsetNumber
424
+ const restList: number[] = []
425
+ let startNumber = 1
426
+
427
+ if (isOv) {
428
+ if (currentPage >= pageCount - offsetNumber) {
429
+ startNumber = Math.max(pageCount - numList.length + 1, 1)
430
+ } else {
431
+ startNumber = Math.max(currentPage - offsetNumber, 1)
432
+ }
433
+ }
434
+
435
+ if (showJump && isLt) {
436
+ restList.push(1)
437
+ nums.push(
438
+ h('button', {
439
+ class: 'vxe-pager--num-btn',
440
+ type: 'button',
441
+ onClick: (evnt: Event) => handleJumpPageEvent(evnt, 1)
442
+ }, '1'),
443
+ renderPrevJump('span')
444
+ )
445
+ }
446
+ numList.forEach((item, index) => {
447
+ const number = startNumber + index
448
+ if (number <= pageCount) {
449
+ restList.push(number)
450
+ nums.push(
451
+ h('button', {
452
+ key: number,
453
+ class: ['vxe-pager--num-btn', {
454
+ 'is--active': currentPage === number
455
+ }],
456
+ type: 'button',
457
+ onClick: (evnt: Event) => handleJumpPageEvent(evnt, number)
458
+ }, `${number}`)
459
+ )
460
+ }
461
+ })
462
+ if (showJump && isGt) {
463
+ restList.push(pageCount)
464
+ nums.push(
465
+ renderNextJump('button'),
466
+ h('button', {
467
+ class: 'vxe-pager--num-btn',
468
+ type: 'button',
469
+ onClick: (evnt: Event) => handleJumpPageEvent(evnt, pageCount)
470
+ }, pageCount)
471
+ )
472
+ }
473
+ if (numberSlot) {
474
+ return h('span', {
475
+ class: 'vxe-pager--custom-btn-wrapper'
476
+ }, numberSlot({ $pager: $xePager, total, numList: restList, currentPage, pageCount }))
477
+ }
478
+ return h('span', {
479
+ class: 'vxe-pager--btn-wrapper'
480
+ }, nums)
481
+ }
482
+
483
+ // jumpNumber
484
+ const renderJumpNumber = () => {
485
+ return renderNumber(true)
486
+ }
487
+
488
+ // sizes
489
+ const renderSizes = () => {
490
+ const { total, currentPage, pageSize, pageSizePlacement, transfer } = props
491
+ const sizesSlot = slots.sizes
492
+ const sizeList = computeSizeList.value
493
+ const pageCount = computePageCount.value
494
+ if (sizesSlot) {
495
+ return h('span', {
496
+ class: 'vxe-pager--custom-sizes'
497
+ }, sizesSlot({ $pager: $xePager, total, currentPage, pageCount, pageSize, options: sizeList }))
498
+ }
499
+ return h(VxeSelectComponent, {
500
+ class: 'vxe-pager--sizes',
501
+ modelValue: pageSize,
502
+ placement: pageSizePlacement,
503
+ transfer: transfer,
504
+ options: sizeList,
505
+ onChange: pageSizeEvent
506
+ })
507
+ }
508
+
509
+ // Jump
510
+ const renderJump = (isFull?: boolean) => {
511
+ const { total } = props
512
+ const { inpCurrPage } = reactData
513
+ const jumpSlot = isFull ? (slots.fullJump || slots['full-jump']) : slots.jump
514
+ const pageCount = computePageCount.value
515
+ if (jumpSlot) {
516
+ return h('span', {
517
+ class: 'vxe-pager--custom-jump'
518
+ }, jumpSlot({ $pager: $xePager, total, currentPage: inpCurrPage, pageCount }))
519
+ }
520
+ return h('span', {
521
+ class: 'vxe-pager--jump'
522
+ }, [
523
+ isFull
524
+ ? h('span', {
525
+ class: 'vxe-pager--goto-text'
526
+ }, getI18n('vxe.pager.goto'))
527
+ : null,
528
+ h(VxeNumberInputComponent, {
529
+ class: 'vxe-pager--goto',
530
+ modelValue: reactData.inpCurrPage,
531
+ placeholder: getI18n('vxe.pager.gotoTitle'),
532
+ align: 'center',
533
+ type: 'integer',
534
+ max: pageCount,
535
+ min: 1,
536
+ controls: false,
537
+ onKeydown: jumpKeydownEvent,
538
+ onBlur: triggerJumpEvent,
539
+ 'onUpdate:modelValue' (val) {
540
+ reactData.inpCurrPage = val
541
+ }
542
+ }),
543
+ isFull
544
+ ? h('span', {
545
+ class: 'vxe-pager--classifier-text'
546
+ }, getI18n('vxe.pager.pageClassifier'))
547
+ : null
548
+ ])
549
+ }
550
+
551
+ // FullJump
552
+ const renderFullJump = () => {
553
+ return renderJump(true)
554
+ }
555
+
556
+ // PageCount
557
+ const renderPageCount = () => {
558
+ const { currentPage, total } = props
559
+ const pageCountSlot = slots.pageCount || slots['page-count']
560
+ const pageCount = computePageCount.value
561
+ if (pageCountSlot) {
562
+ return h('span', {
563
+ class: 'vxe-pager--custom-count'
564
+ }, pageCountSlot({ $pager: $xePager, total, currentPage, pageCount }))
565
+ }
566
+ return h('span', {
567
+ class: 'vxe-pager--count'
568
+ }, [
569
+ h('span', {
570
+ class: 'vxe-pager--separator'
571
+ }),
572
+ h('span', pageCount)
573
+ ])
574
+ }
575
+
576
+ // total
577
+ const renderTotal = () => {
578
+ const { currentPage, total } = props
579
+ const totalSlot = slots.total
580
+ const pageCount = computePageCount.value
581
+ if (totalSlot) {
582
+ return h('span', {
583
+ class: 'vxe-pager--custom-total'
584
+ }, totalSlot({ $pager: $xePager, total, currentPage, pageCount }))
585
+ }
586
+ return h('span', {
587
+ class: 'vxe-pager--total'
588
+ }, getI18n('vxe.pager.total', [total]))
589
+ }
590
+
591
+ const pagerMethods: PagerMethods & { jumpPage: any } = {
592
+ dispatchEvent,
593
+ setPageSize (num) {
594
+ pageSizeEvent({ value: num } as VxeSelectDefines.ChangeEventParams)
595
+ return nextTick()
596
+ },
597
+ setPageSizeByEvent (evnt, num) {
598
+ pageSizeEvent({ value: num, $event: evnt } as VxeSelectDefines.ChangeEventParams)
599
+ },
600
+ homePage () {
601
+ handleHomePage()
602
+ return nextTick()
603
+ },
604
+ homePageByEvent (evnt) {
605
+ handleHomePage(evnt)
606
+ },
607
+ endPage () {
608
+ handleEndPage()
609
+ return nextTick()
610
+ },
611
+ endPageByEvent (evnt) {
612
+ handleEndPage(evnt)
613
+ },
614
+ prevPage () {
615
+ handlePrevPage()
616
+ return nextTick()
617
+ },
618
+ prevPageByEvent (evnt) {
619
+ handlePrevPage(evnt)
620
+ },
621
+ nextPage () {
622
+ handleNextPage()
623
+ return nextTick()
624
+ },
625
+ nextPageByEvent (evnt) {
626
+ handleNextPage(evnt)
627
+ },
628
+ prevJump () {
629
+ handlePrevJump()
630
+ return nextTick()
631
+ },
632
+ prevJumpByEvent (evnt) {
633
+ handlePrevJump(evnt)
634
+ },
635
+ nextJump () {
636
+ handleNextJump()
637
+ return nextTick()
638
+ },
639
+ nextJumpByEvent (evnt) {
640
+ handleNextJump(evnt)
641
+ },
642
+ setCurrentPage (currentPage) {
643
+ const current = XEUtils.toNumber(currentPage) || 1
644
+ reactData.inpCurrPage = current
645
+ handleChangeCurrentPage(current)
646
+ return nextTick()
647
+ },
648
+ setCurrentPageByEvent (evnt, currentPage) {
649
+ const current = XEUtils.toNumber(currentPage) || 1
650
+ reactData.inpCurrPage = current
651
+ handleChangeCurrentPage(current, evnt)
652
+ },
653
+ /**
654
+ * 已废弃,被 setCurrentPage 替换
655
+ * @deprecated
656
+ */
657
+ jumpPage (currentPage: number) {
658
+ warnLog('vxe.error.delFunc', ['[pager] jumpPage', 'setCurrentPage'])
659
+ return $xePager.setCurrentPage(currentPage)
660
+ }
661
+ }
662
+
663
+ const pagerPrivateMethods: PagerPrivateMethods = {
664
+ handlePrevPage,
665
+ handleNextPage,
666
+ handlePrevJump,
667
+ handleNextJump
668
+ }
669
+
670
+ Object.assign($xePager, pagerMethods, pagerPrivateMethods)
671
+
672
+ watch(() => props.currentPage, (value) => {
673
+ reactData.inpCurrPage = value
674
+ })
675
+
676
+ const renderVN = () => {
677
+ const { align, layouts, className } = props
678
+ const childNodes = []
679
+ const vSize = computeSize.value
680
+ const pageCount = computePageCount.value
681
+ if (slots.left) {
682
+ childNodes.push(
683
+ h('span', {
684
+ class: 'vxe-pager--left-wrapper'
685
+ }, slots.left({ $grid: $xeGrid }))
686
+ )
687
+ }
688
+ layouts.forEach((name) => {
689
+ let renderFn
690
+ switch (name) {
691
+ case 'Home':
692
+ renderFn = renderHomePage
693
+ break
694
+ case 'PrevJump':
695
+ renderFn = renderPrevJump
696
+ break
697
+ case 'PrevPage':
698
+ renderFn = renderPrevPage
699
+ break
700
+ case 'Number':
701
+ renderFn = renderNumber
702
+ break
703
+ case 'JumpNumber':
704
+ renderFn = renderJumpNumber
705
+ break
706
+ case 'NextPage':
707
+ renderFn = renderNextPage
708
+ break
709
+ case 'NextJump':
710
+ renderFn = renderNextJump
711
+ break
712
+ case 'End':
713
+ renderFn = renderEndPage
714
+ break
715
+ case 'Sizes':
716
+ renderFn = renderSizes
717
+ break
718
+ case 'FullJump':
719
+ renderFn = renderFullJump
720
+ break
721
+ case 'Jump':
722
+ renderFn = renderJump
723
+ break
724
+ case 'PageCount':
725
+ renderFn = renderPageCount
726
+ break
727
+ case 'Total':
728
+ renderFn = renderTotal
729
+ break
730
+ }
731
+ if (renderFn) {
732
+ childNodes.push(renderFn())
733
+ } else {
734
+ errLog('vxe.error.notProp', [`[pager] layouts -> ${name}`])
735
+ }
736
+ })
737
+ if (slots.right) {
738
+ childNodes.push(
739
+ h('span', {
740
+ class: 'vxe-pager--right-wrapper'
741
+ }, slots.right({ $grid: $xeGrid }))
742
+ )
743
+ }
744
+ return h('div', {
745
+ ref: refElem,
746
+ class: ['vxe-pager', className ? (XEUtils.isFunction(className) ? className({ $pager: $xePager }) : className) : '', {
747
+ [`size--${vSize}`]: vSize,
748
+ [`align--${align}`]: align,
749
+ 'is--border': props.border,
750
+ 'is--background': props.background,
751
+ 'is--perfect': props.perfect,
752
+ 'is--hidden': props.autoHidden && pageCount === 1,
753
+ 'is--loading': props.loading
754
+ }]
755
+ }, [
756
+ h('div', {
757
+ class: 'vxe-pager--wrapper'
758
+ }, childNodes)
759
+ ])
760
+ }
761
+
762
+ $xePager.renderVN = renderVN
763
+
764
+ return $xePager
765
+ },
766
+ render () {
767
+ return this.renderVN()
768
+ }
769
+ })