vxe-pc-ui 4.20.34 → 4.20.35

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 (367) hide show
  1. package/dist/all.esm.js +45718 -45038
  2. package/dist/all.esm.min.js +3 -3
  3. package/dist/style.css +307 -1
  4. package/dist/style.mini.css +1 -1
  5. package/es/alert/src/alert.js +117 -114
  6. package/es/anchor/src/anchor-link.js +110 -107
  7. package/es/anchor/src/anchor.js +212 -209
  8. package/es/avatar/src/avatar.js +132 -129
  9. package/es/backtop/src/backtop.js +267 -264
  10. package/es/badge/src/badge.js +102 -99
  11. package/es/breadcrumb/src/breadcrumb-item.js +104 -101
  12. package/es/breadcrumb/src/breadcrumb.js +70 -67
  13. package/es/button/src/button-group.js +88 -85
  14. package/es/calendar/src/calendar.js +1371 -1368
  15. package/es/card/src/card.js +235 -232
  16. package/es/carousel/src/carousel-item.js +78 -75
  17. package/es/carousel/src/carousel.js +392 -389
  18. package/es/cascader/src/cascader.js +1667 -1664
  19. package/es/checkbox/src/button.js +198 -195
  20. package/es/checkbox/src/checkbox.js +181 -178
  21. package/es/checkbox/src/group.js +210 -207
  22. package/es/collapse/src/collapse-pane.js +98 -95
  23. package/es/collapse/src/collapse.js +340 -337
  24. package/es/color-picker/src/color-picker.js +1116 -1113
  25. package/es/components.d.ts +1 -0
  26. package/es/components.js +3 -0
  27. package/es/context-menu/src/context-menu.js +601 -598
  28. package/es/countdown/src/countdown.js +224 -221
  29. package/es/date-panel/src/date-panel.js +1905 -1902
  30. package/es/date-picker/src/date-picker.js +1537 -1534
  31. package/es/date-range-picker/src/date-range-picker.js +1412 -1409
  32. package/es/divider/src/divider.js +80 -77
  33. package/es/drawer/src/drawer.js +778 -775
  34. package/es/empty/src/empty.js +100 -97
  35. package/es/form/src/form-group.js +74 -71
  36. package/es/form/src/form-item.js +76 -73
  37. package/es/form/src/form.js +789 -786
  38. package/es/icon/src/icon.js +59 -56
  39. package/es/icon/style.css +1 -1
  40. package/es/icon/style.mini.css +1 -1
  41. package/es/icon-picker/src/icon-picker.js +719 -716
  42. package/es/image/src/group.js +130 -127
  43. package/es/image/src/image.js +243 -240
  44. package/es/image/src/preview.js +627 -624
  45. package/es/index.esm.js +2 -0
  46. package/es/index.js +2 -0
  47. package/es/input/src/input.js +2700 -2697
  48. package/es/layout-aside/src/layout-aside.js +138 -135
  49. package/es/layout-body/src/layout-body.js +145 -142
  50. package/es/layout-container/src/layout-container.js +71 -68
  51. package/es/layout-footer/src/layout-footer.js +60 -57
  52. package/es/layout-header/src/layout-header.js +58 -55
  53. package/es/link/src/link.js +131 -128
  54. package/es/list/src/list.js +2174 -2171
  55. package/es/loading/src/loading.js +141 -138
  56. package/es/mention/src/mention.js +49 -46
  57. package/es/menu/src/menu.js +799 -796
  58. package/es/modal/src/modal.js +1519 -1527
  59. package/es/notice-bar/src/notice-bar.js +168 -165
  60. package/es/number-input/src/number-input.js +1094 -1091
  61. package/es/pager/src/pager.js +767 -764
  62. package/es/password-input/src/password-input.js +431 -428
  63. package/es/print/src/page-break.js +63 -60
  64. package/es/print/src/print.js +303 -300
  65. package/es/pulldown/src/pulldown.js +403 -400
  66. package/es/radio/src/button.js +214 -211
  67. package/es/radio/src/group.js +195 -192
  68. package/es/radio/src/radio.js +194 -191
  69. package/es/rate/src/rate.js +164 -161
  70. package/es/result/src/result.js +116 -113
  71. package/es/row/src/col.js +133 -130
  72. package/es/row/src/row.js +111 -108
  73. package/es/scrollbar/src/scrollbar.js +518 -515
  74. package/es/segmented/src/segmented.js +240 -237
  75. package/es/select/src/optgroup.js +44 -41
  76. package/es/select/src/option.js +39 -36
  77. package/es/select/src/select.js +1914 -1896
  78. package/es/slider/src/slider.js +419 -416
  79. package/es/space/src/space.js +190 -187
  80. package/es/splitter/src/splitter-panel.js +146 -143
  81. package/es/splitter/src/splitter.js +917 -914
  82. package/es/step-item/index.d.ts +76 -0
  83. package/es/step-item/index.js +17 -0
  84. package/es/steps/index.d.ts +288 -34
  85. package/es/steps/src/step-info.d.ts +6 -0
  86. package/es/steps/src/step-info.js +20 -0
  87. package/es/steps/src/step-item.d.ts +14 -0
  88. package/es/steps/src/step-item.js +39 -0
  89. package/es/steps/src/steps.d.ts +68 -8
  90. package/es/steps/src/steps.js +299 -47
  91. package/es/steps/src/util.d.ts +7 -0
  92. package/es/steps/src/util.js +44 -0
  93. package/es/steps/style.css +297 -0
  94. package/es/steps/style.mini.css +1 -0
  95. package/es/style.css +307 -1
  96. package/es/style.mini.css +1 -1
  97. package/es/switch/src/switch.js +228 -225
  98. package/es/table-select/src/table-select.js +865 -862
  99. package/es/table-transfer/src/table-transfer.js +61 -58
  100. package/es/tabs/src/tab-pane.js +102 -99
  101. package/es/tabs/src/tabs.js +936 -933
  102. package/es/tag/src/tag.js +163 -160
  103. package/es/text/src/text.js +232 -229
  104. package/es/text-ellipsis/src/text-ellipsis.js +252 -249
  105. package/es/textarea/src/textarea.js +434 -431
  106. package/es/timeline/src/timeline.js +74 -36
  107. package/es/timeline/src/util.js +7 -4
  108. package/es/tip/src/tip.js +117 -114
  109. package/es/tooltip/src/tooltip.js +552 -549
  110. package/es/tour/src/tour.js +49 -46
  111. package/es/transfer/src/transfer.js +95 -92
  112. package/es/tree/src/tree.js +3379 -3376
  113. package/es/tree-select/src/tree-select.js +969 -966
  114. package/es/ui/index.js +8 -2
  115. package/es/ui/src/log.js +1 -1
  116. package/es/upload/src/upload.js +1791 -1788
  117. package/es/vxe-icon/style.css +1 -1
  118. package/es/vxe-icon/style.mini.css +1 -1
  119. package/es/vxe-steps/style.css +297 -0
  120. package/es/vxe-steps/style.mini.css +1 -0
  121. package/es/watermark/src/watermark.js +158 -155
  122. package/lib/alert/src/alert.js +117 -114
  123. package/lib/anchor/src/anchor-link.js +110 -107
  124. package/lib/anchor/src/anchor.js +212 -209
  125. package/lib/avatar/src/avatar.js +132 -129
  126. package/lib/backtop/src/backtop.js +267 -264
  127. package/lib/badge/src/badge.js +102 -99
  128. package/lib/breadcrumb/src/breadcrumb-item.js +104 -101
  129. package/lib/breadcrumb/src/breadcrumb.js +70 -67
  130. package/lib/button/src/button-group.js +88 -85
  131. package/lib/calendar/src/calendar.js +1371 -1368
  132. package/lib/card/src/card.js +235 -232
  133. package/lib/carousel/src/carousel-item.js +78 -75
  134. package/lib/carousel/src/carousel.js +392 -389
  135. package/lib/cascader/src/cascader.js +1665 -1662
  136. package/lib/checkbox/src/button.js +198 -195
  137. package/lib/checkbox/src/checkbox.js +181 -178
  138. package/lib/checkbox/src/group.js +210 -207
  139. package/lib/collapse/src/collapse-pane.js +98 -95
  140. package/lib/collapse/src/collapse.js +340 -337
  141. package/lib/color-picker/src/color-picker.js +1116 -1113
  142. package/lib/components.js +3 -0
  143. package/lib/context-menu/src/context-menu.js +601 -598
  144. package/lib/countdown/src/countdown.js +224 -221
  145. package/lib/date-panel/src/date-panel.js +1905 -1902
  146. package/lib/date-picker/src/date-picker.js +1537 -1534
  147. package/lib/date-range-picker/src/date-range-picker.js +1412 -1409
  148. package/lib/divider/src/divider.js +80 -77
  149. package/lib/drawer/src/drawer.js +778 -775
  150. package/lib/empty/src/empty.js +100 -97
  151. package/lib/form/src/form-group.js +74 -71
  152. package/lib/form/src/form-item.js +76 -73
  153. package/lib/form/src/form.js +789 -786
  154. package/lib/icon/src/icon.js +59 -56
  155. package/lib/icon/style/style.css +1 -1
  156. package/lib/icon/style/style.mini.css +1 -1
  157. package/lib/icon-picker/src/icon-picker.js +719 -716
  158. package/lib/image/src/group.js +130 -127
  159. package/lib/image/src/image.js +243 -240
  160. package/lib/image/src/preview.js +627 -624
  161. package/lib/index.common.js +2 -0
  162. package/lib/index.js +2 -0
  163. package/lib/index.umd.js +47411 -46732
  164. package/lib/index.umd.min.js +3 -3
  165. package/lib/input/src/input.js +2700 -2697
  166. package/lib/layout-aside/src/layout-aside.js +138 -135
  167. package/lib/layout-body/src/layout-body.js +145 -142
  168. package/lib/layout-container/src/layout-container.js +71 -68
  169. package/lib/layout-footer/src/layout-footer.js +60 -57
  170. package/lib/layout-header/src/layout-header.js +58 -55
  171. package/lib/link/src/link.js +131 -128
  172. package/lib/list/src/list.js +2173 -2170
  173. package/lib/loading/src/loading.js +141 -138
  174. package/lib/mention/src/mention.js +49 -46
  175. package/lib/menu/src/menu.js +799 -796
  176. package/lib/modal/src/modal.js +1519 -1527
  177. package/lib/notice-bar/src/notice-bar.js +168 -165
  178. package/lib/number-input/src/number-input.js +1094 -1091
  179. package/lib/pager/src/pager.js +767 -764
  180. package/lib/password-input/src/password-input.js +431 -428
  181. package/lib/print/src/page-break.js +63 -60
  182. package/lib/print/src/print.js +303 -300
  183. package/lib/pulldown/src/pulldown.js +403 -400
  184. package/lib/radio/src/button.js +214 -211
  185. package/lib/radio/src/group.js +195 -192
  186. package/lib/radio/src/radio.js +194 -191
  187. package/lib/rate/src/rate.js +164 -161
  188. package/lib/result/src/result.js +116 -113
  189. package/lib/row/src/col.js +133 -130
  190. package/lib/row/src/row.js +111 -108
  191. package/lib/scrollbar/src/scrollbar.js +518 -515
  192. package/lib/segmented/src/segmented.js +240 -237
  193. package/lib/select/src/optgroup.js +44 -41
  194. package/lib/select/src/option.js +39 -36
  195. package/lib/select/src/select.js +1915 -1897
  196. package/lib/slider/src/slider.js +419 -416
  197. package/lib/space/src/space.js +190 -187
  198. package/lib/splitter/src/splitter-panel.js +146 -143
  199. package/lib/splitter/src/splitter.js +917 -914
  200. package/lib/step-item/index.js +47 -0
  201. package/lib/steps/src/step-info.js +49 -0
  202. package/lib/steps/src/step-item.js +59 -0
  203. package/lib/steps/src/steps.js +298 -46
  204. package/lib/steps/src/util.js +74 -0
  205. package/lib/steps/style/style.css +297 -0
  206. package/lib/steps/style/style.mini.css +1 -0
  207. package/lib/style.css +307 -1
  208. package/lib/style.mini.css +1 -1
  209. package/lib/switch/src/switch.js +228 -225
  210. package/lib/table-select/src/table-select.js +865 -862
  211. package/lib/table-transfer/src/table-transfer.js +61 -58
  212. package/lib/tabs/src/tab-pane.js +102 -99
  213. package/lib/tabs/src/tabs.js +936 -933
  214. package/lib/tag/src/tag.js +163 -160
  215. package/lib/text/src/text.js +232 -229
  216. package/lib/text-ellipsis/src/text-ellipsis.js +252 -249
  217. package/lib/textarea/src/textarea.js +434 -431
  218. package/lib/timeline/src/timeline.js +74 -36
  219. package/lib/timeline/src/util.js +7 -4
  220. package/lib/tip/src/tip.js +117 -114
  221. package/lib/tooltip/src/tooltip.js +552 -549
  222. package/lib/tour/src/tour.js +49 -46
  223. package/lib/transfer/src/transfer.js +95 -92
  224. package/lib/tree/src/tree.js +3379 -3376
  225. package/lib/tree-select/src/tree-select.js +969 -966
  226. package/lib/ui/index.js +8 -2
  227. package/lib/ui/src/log.js +1 -1
  228. package/lib/upload/src/upload.js +1788 -1785
  229. package/lib/vxe-icon/style/style.css +1 -1
  230. package/lib/vxe-icon/style/style.mini.css +1 -1
  231. package/lib/vxe-steps/style/style.css +297 -0
  232. package/lib/vxe-steps/style/style.mini.css +1 -0
  233. package/lib/watermark/src/watermark.js +158 -155
  234. package/package.json +1 -1
  235. package/packages/alert/src/alert.ts +2 -2
  236. package/packages/anchor/src/anchor-link.ts +2 -2
  237. package/packages/anchor/src/anchor.ts +2 -2
  238. package/packages/avatar/src/avatar.ts +2 -2
  239. package/packages/backtop/src/backtop.ts +2 -2
  240. package/packages/badge/src/badge.ts +2 -2
  241. package/packages/breadcrumb/src/breadcrumb-item.ts +2 -2
  242. package/packages/breadcrumb/src/breadcrumb.ts +2 -2
  243. package/packages/button/src/button-group.ts +2 -2
  244. package/packages/calendar/src/calendar.ts +2 -2
  245. package/packages/card/src/card.ts +2 -2
  246. package/packages/carousel/src/carousel-item.ts +2 -2
  247. package/packages/carousel/src/carousel.ts +2 -2
  248. package/packages/cascader/src/cascader.ts +2 -2
  249. package/packages/checkbox/src/button.ts +3 -15
  250. package/packages/checkbox/src/checkbox.ts +2 -2
  251. package/packages/checkbox/src/group.ts +2 -2
  252. package/packages/collapse/src/collapse-pane.ts +2 -2
  253. package/packages/collapse/src/collapse.ts +2 -2
  254. package/packages/color-picker/src/color-picker.ts +2 -2
  255. package/packages/components.ts +3 -0
  256. package/packages/context-menu/src/context-menu.ts +3 -16
  257. package/packages/countdown/src/countdown.ts +2 -2
  258. package/packages/date-panel/src/date-panel.ts +2 -2
  259. package/packages/date-picker/src/date-picker.ts +2 -2
  260. package/packages/date-range-picker/src/date-range-picker.ts +2 -2
  261. package/packages/divider/src/divider.ts +2 -2
  262. package/packages/drawer/src/drawer.ts +2 -2
  263. package/packages/empty/src/empty.ts +2 -2
  264. package/packages/form/src/form-group.ts +2 -2
  265. package/packages/form/src/form-item.ts +2 -2
  266. package/packages/form/src/form.ts +2 -2
  267. package/packages/icon/src/icon.ts +2 -2
  268. package/packages/icon-picker/src/icon-picker.ts +2 -2
  269. package/packages/image/src/group.ts +2 -2
  270. package/packages/image/src/image.ts +2 -2
  271. package/packages/image/src/preview.ts +3 -16
  272. package/packages/index.ts +2 -2
  273. package/packages/input/src/input.ts +2 -2
  274. package/packages/layout-aside/src/layout-aside.ts +2 -2
  275. package/packages/layout-body/src/layout-body.ts +2 -2
  276. package/packages/layout-container/src/layout-container.ts +3 -14
  277. package/packages/layout-footer/src/layout-footer.ts +2 -2
  278. package/packages/layout-header/src/layout-header.ts +2 -2
  279. package/packages/link/src/link.ts +2 -2
  280. package/packages/list/src/list.ts +2 -2
  281. package/packages/loading/src/loading.ts +2 -2
  282. package/packages/mention/src/mention.ts +2 -2
  283. package/packages/menu/src/menu.ts +2 -2
  284. package/packages/modal/src/modal.ts +5 -20
  285. package/packages/notice-bar/src/notice-bar.ts +2 -2
  286. package/packages/number-input/src/number-input.ts +3 -17
  287. package/packages/pager/src/pager.ts +2 -2
  288. package/packages/password-input/src/password-input.ts +2 -2
  289. package/packages/print/src/page-break.ts +2 -2
  290. package/packages/print/src/print.ts +2 -2
  291. package/packages/pulldown/src/pulldown.ts +2 -2
  292. package/packages/radio/src/button.ts +3 -16
  293. package/packages/radio/src/group.ts +3 -17
  294. package/packages/radio/src/radio.ts +2 -2
  295. package/packages/rate/src/rate.ts +2 -2
  296. package/packages/result/src/result.ts +2 -2
  297. package/packages/row/src/col.ts +2 -2
  298. package/packages/row/src/row.ts +2 -2
  299. package/packages/scrollbar/src/scrollbar.ts +3 -4
  300. package/packages/segmented/src/segmented.ts +2 -2
  301. package/packages/select/src/optgroup.ts +2 -2
  302. package/packages/select/src/option.ts +2 -2
  303. package/packages/select/src/select.ts +33 -19
  304. package/packages/slider/src/slider.ts +2 -2
  305. package/packages/space/src/space.ts +2 -2
  306. package/packages/splitter/src/splitter-panel.ts +2 -2
  307. package/packages/splitter/src/splitter.ts +2 -2
  308. package/packages/step-item/index.ts +16 -0
  309. package/packages/steps/src/step-info.ts +18 -0
  310. package/packages/steps/src/step-item.ts +41 -0
  311. package/packages/steps/src/steps.ts +273 -13
  312. package/packages/steps/src/util.ts +44 -0
  313. package/packages/switch/src/switch.ts +2 -2
  314. package/packages/table-select/src/table-select.ts +2 -2
  315. package/packages/table-transfer/src/table-transfer.ts +3 -15
  316. package/packages/tabs/src/tab-pane.ts +2 -2
  317. package/packages/tabs/src/tabs.ts +2 -2
  318. package/packages/tag/src/tag.ts +2 -2
  319. package/packages/text/src/text.ts +2 -2
  320. package/packages/text-ellipsis/src/text-ellipsis.ts +2 -2
  321. package/packages/textarea/src/textarea.ts +2 -2
  322. package/packages/timeline/src/timeline-info.ts +17 -17
  323. package/packages/timeline/src/timeline.ts +93 -49
  324. package/packages/timeline/src/util.ts +44 -41
  325. package/packages/tip/src/tip.ts +2 -2
  326. package/packages/tooltip/src/tooltip.ts +2 -2
  327. package/packages/tour/src/tour.ts +2 -2
  328. package/packages/transfer/src/transfer.ts +2 -2
  329. package/packages/tree/src/tree.ts +2 -2
  330. package/packages/tree-select/src/tree-select.ts +2 -2
  331. package/packages/ui/index.ts +8 -1
  332. package/packages/upload/src/upload.ts +2 -2
  333. package/packages/watermark/src/watermark.ts +2 -2
  334. package/styles/all.scss +1 -0
  335. package/styles/components/step-item.scss +0 -0
  336. package/styles/components/steps.scss +354 -0
  337. package/styles/theme/base.scss +9 -0
  338. package/types/all.d.ts +3 -0
  339. package/types/components/gantt.d.ts +1 -3
  340. package/types/components/select.d.ts +1 -13
  341. package/types/components/step-item.d.ts +72 -0
  342. package/types/components/steps.d.ts +67 -8
  343. package/types/components/table.d.ts +7 -66
  344. package/types/handles/form-design.d.ts +1 -4
  345. package/types/ui/global-config.d.ts +2 -0
  346. package/types/ui/global-icon.d.ts +7 -0
  347. /package/dist/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
  348. /package/dist/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
  349. /package/dist/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
  350. /package/es/icon/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
  351. /package/es/icon/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
  352. /package/es/icon/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
  353. /package/es/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
  354. /package/es/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
  355. /package/es/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
  356. /package/es/vxe-icon/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
  357. /package/es/vxe-icon/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
  358. /package/es/vxe-icon/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
  359. /package/lib/icon/style/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
  360. /package/lib/icon/style/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
  361. /package/lib/icon/style/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
  362. /package/lib/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
  363. /package/lib/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
  364. /package/lib/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
  365. /package/lib/vxe-icon/style/{iconfont.1793330162657.ttf → iconfont.1793359478136.ttf} +0 -0
  366. /package/lib/vxe-icon/style/{iconfont.1793330162657.woff → iconfont.1793359478136.woff} +0 -0
  367. /package/lib/vxe-icon/style/{iconfont.1793330162657.woff2 → iconfont.1793359478136.woff2} +0 -0
@@ -12,1011 +12,1014 @@ const { baseUtils, useFns, createEvent, getConfig, getIcon, globalEvents, permis
12
12
  const { getDefVal } = baseUtils;
13
13
  const { warnLog, errLog } = createComponentLog("tabs");
14
14
  const scrollbarOffsetSize = 20;
15
- var tabs_default = defineVxeComponent({
16
- name: "VxeTabs",
17
- props: {
18
- modelValue: [String, Number, Boolean],
19
- options: Array,
20
- width: [String, Number],
21
- height: [String, Number],
22
- destroyOnClose: {
23
- type: Boolean,
24
- default: () => getConfig().tabs.destroyOnClose
25
- },
26
- titleWidth: [String, Number],
27
- titleAlign: [String, Number],
28
- type: {
29
- type: String,
30
- default: () => getConfig().tabs.type
31
- },
32
- position: {
33
- type: String,
34
- default: () => getConfig().tabs.position
35
- },
36
- showClose: Boolean,
37
- showBody: {
38
- type: Boolean,
39
- default: true
40
- },
41
- padding: {
42
- type: Boolean,
43
- default: () => getConfig().tabs.padding
44
- },
45
- trigger: String,
46
- beforeChangeMethod: Function,
47
- closeConfig: Object,
48
- refreshConfig: Object,
49
- size: {
50
- type: String,
51
- default: () => getConfig().tabs.size || getConfig().size
52
- },
53
- useScrollbar: {
54
- type: Boolean,
55
- default: () => getDefVal(getConfig().tabs.useScrollbar, getConfig().useScrollbar)
15
+ var tabs_default = (
16
+ /* define-vxe-component start */
17
+ defineVxeComponent({
18
+ name: "VxeTabs",
19
+ props: {
20
+ modelValue: [String, Number, Boolean],
21
+ options: Array,
22
+ width: [String, Number],
23
+ height: [String, Number],
24
+ destroyOnClose: {
25
+ type: Boolean,
26
+ default: () => getConfig().tabs.destroyOnClose
27
+ },
28
+ titleWidth: [String, Number],
29
+ titleAlign: [String, Number],
30
+ type: {
31
+ type: String,
32
+ default: () => getConfig().tabs.type
33
+ },
34
+ position: {
35
+ type: String,
36
+ default: () => getConfig().tabs.position
37
+ },
38
+ showClose: Boolean,
39
+ showBody: {
40
+ type: Boolean,
41
+ default: true
42
+ },
43
+ padding: {
44
+ type: Boolean,
45
+ default: () => getConfig().tabs.padding
46
+ },
47
+ trigger: String,
48
+ beforeChangeMethod: Function,
49
+ closeConfig: Object,
50
+ refreshConfig: Object,
51
+ size: {
52
+ type: String,
53
+ default: () => getConfig().tabs.size || getConfig().size
54
+ },
55
+ useScrollbar: {
56
+ type: Boolean,
57
+ default: () => getDefVal(getConfig().tabs.useScrollbar, getConfig().useScrollbar)
58
+ },
59
+ scrollbarConfig: Object,
60
+ // 已废弃
61
+ beforeCloseMethod: Function
56
62
  },
57
- scrollbarConfig: Object,
58
- // 已废弃
59
- beforeCloseMethod: Function
60
- },
61
- emits: ["update:modelValue", "change", "tab-change", "tab-change-fail", "tab-close", "tab-close-fail", "tab-click", "tab-load"],
62
- setup(props, context) {
63
- const { slots, emit } = context;
64
- const xID = XEUtils.uniqueId();
65
- const $xeParentTabs = inject("$xeTabs", null);
66
- const { computeSize } = useFns.useSize(props);
67
- const { computeIsVScrollbar } = useFns.useVScrollbar(props);
68
- const refElem = ref();
69
- const refHeadWrapperElem = ref();
70
- const refHeadPrevElem = ref();
71
- const refHeadNextElem = ref();
72
- const reactData = reactive({
73
- staticTabs: [],
74
- activeName: null,
75
- initNames: [],
76
- lintLeft: 0,
77
- lintTop: 0,
78
- lintWidth: 0,
79
- lintHeight: 0,
80
- scrollbarWidth: 0,
81
- scrollbarHeight: 0,
82
- isTabOver: false,
83
- resizeFlag: 1,
84
- cacheTabMaps: {}
85
- });
86
- const internalData = {
87
- slTimeout: void 0
88
- };
89
- const refMaps = {
90
- refElem
91
- };
92
- const computeTabType = computed(() => {
93
- const { type } = props;
94
- return type || "default";
95
- });
96
- const computeTabPosition = computed(() => {
97
- const { position } = props;
98
- return position || "top";
99
- });
100
- const computeLrPosition = computed(() => {
101
- const tabPosition = computeTabPosition.value;
102
- return tabPosition === "left" || tabPosition === "right";
103
- });
104
- const computeLineStyle = computed(() => {
105
- const { lintLeft, lintTop, lintWidth, lintHeight } = reactData;
106
- const lrPosition = computeLrPosition.value;
107
- return lrPosition ? {
108
- top: `${lintTop}px`,
109
- height: `${lintHeight}px`
110
- } : {
111
- left: `${lintLeft}px`,
112
- width: `${lintWidth}px`
63
+ emits: ["update:modelValue", "change", "tab-change", "tab-change-fail", "tab-close", "tab-close-fail", "tab-click", "tab-load"],
64
+ setup(props, context) {
65
+ const { slots, emit } = context;
66
+ const xID = XEUtils.uniqueId();
67
+ const $xeParentTabs = inject("$xeTabs", null);
68
+ const { computeSize } = useFns.useSize(props);
69
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props);
70
+ const refElem = ref();
71
+ const refHeadWrapperElem = ref();
72
+ const refHeadPrevElem = ref();
73
+ const refHeadNextElem = ref();
74
+ const reactData = reactive({
75
+ staticTabs: [],
76
+ activeName: null,
77
+ initNames: [],
78
+ lintLeft: 0,
79
+ lintTop: 0,
80
+ lintWidth: 0,
81
+ lintHeight: 0,
82
+ scrollbarWidth: 0,
83
+ scrollbarHeight: 0,
84
+ isTabOver: false,
85
+ resizeFlag: 1,
86
+ cacheTabMaps: {}
87
+ });
88
+ const internalData = {
89
+ slTimeout: void 0
113
90
  };
114
- });
115
- const computeWrapperStyle = computed(() => {
116
- const { width, height } = props;
117
- const stys = {};
118
- if (width) {
119
- stys.width = toCssUnit(width);
120
- }
121
- if (height) {
122
- stys.height = height === "auto" ? "100%" : toCssUnit(height);
123
- }
124
- return stys;
125
- });
126
- const computeCloseOpts = computed(() => {
127
- return Object.assign({}, getConfig().tabs.closeConfig, props.closeConfig);
128
- });
129
- const computeRefreshOpts = computed(() => {
130
- return Object.assign({}, getConfig().tabs.refreshConfig, props.refreshConfig);
131
- });
132
- const computeTabOptions = computed(() => {
133
- const { options } = props;
134
- return (options || []).filter((item) => handleFilterTab(item));
135
- });
136
- const computeTabStaticOptions = computed(() => {
137
- const { staticTabs } = reactData;
138
- return staticTabs.filter((item) => handleFilterTab(item));
139
- });
140
- const computeParentTabsResizeFlag = computed(() => {
141
- return $xeParentTabs ? $xeParentTabs.reactData.resizeFlag : null;
142
- });
143
- const computeScrollbarOpts = computed(() => {
144
- return Object.assign({}, getConfig().tabs.scrollbarConfig, props.scrollbarConfig);
145
- });
146
- const computeScrollbarProps = computed(() => {
147
- const scrollbarOpts = computeScrollbarOpts.value;
148
- const { viewClassName, viewInnerClassName } = scrollbarOpts;
149
- return {
150
- width: scrollbarOpts.width,
151
- height: scrollbarOpts.height,
152
- autoHide: scrollbarOpts.autoHide,
153
- visible: scrollbarOpts.visible,
154
- xConfig: scrollbarOpts.xConfig,
155
- yConfig: scrollbarOpts.yConfig,
156
- className: scrollbarOpts.className,
157
- viewAttrs: scrollbarOpts.viewAttrs,
158
- viewClassName: "vxe-tabs-pane--scrollbar-item-view" + (viewClassName ? " " + viewClassName : ""),
159
- viewInnerClassName: "vxe-tabs-pane--scrollbar-item-inner" + (viewClassName ? " " + viewInnerClassName : "")
91
+ const refMaps = {
92
+ refElem
160
93
  };
161
- });
162
- const computeMaps = {};
163
- const $xeTabs = {
164
- xID,
165
- props,
166
- context,
167
- reactData,
168
- getRefMaps: () => refMaps,
169
- getComputeMaps: () => computeMaps
170
- };
171
- const handleFilterTab = (item) => {
172
- const { permissionCode } = item;
173
- if (permissionCode) {
174
- if (!permission.checkVisible(permissionCode)) {
175
- return false;
176
- }
177
- }
178
- return true;
179
- };
180
- const callSlot = (slotFunc, params) => {
181
- if (slotFunc) {
182
- if (XEUtils.isString(slotFunc)) {
183
- slotFunc = slots[slotFunc] || null;
94
+ const computeTabType = computed(() => {
95
+ const { type } = props;
96
+ return type || "default";
97
+ });
98
+ const computeTabPosition = computed(() => {
99
+ const { position } = props;
100
+ return position || "top";
101
+ });
102
+ const computeLrPosition = computed(() => {
103
+ const tabPosition = computeTabPosition.value;
104
+ return tabPosition === "left" || tabPosition === "right";
105
+ });
106
+ const computeLineStyle = computed(() => {
107
+ const { lintLeft, lintTop, lintWidth, lintHeight } = reactData;
108
+ const lrPosition = computeLrPosition.value;
109
+ return lrPosition ? {
110
+ top: `${lintTop}px`,
111
+ height: `${lintHeight}px`
112
+ } : {
113
+ left: `${lintLeft}px`,
114
+ width: `${lintWidth}px`
115
+ };
116
+ });
117
+ const computeWrapperStyle = computed(() => {
118
+ const { width, height } = props;
119
+ const stys = {};
120
+ if (width) {
121
+ stys.width = toCssUnit(width);
184
122
  }
185
- if (XEUtils.isFunction(slotFunc)) {
186
- return getSlotVNs(slotFunc(params));
123
+ if (height) {
124
+ stys.height = height === "auto" ? "100%" : toCssUnit(height);
187
125
  }
188
- }
189
- return [];
190
- };
191
- const checkScrolling = () => {
192
- const lrPosition = computeLrPosition.value;
193
- const headerWrapperEl = refHeadWrapperElem.value;
194
- const headPrevEl = refHeadPrevElem.value;
195
- const headNextEl = refHeadNextElem.value;
196
- if (headerWrapperEl) {
197
- const { scrollLeft, scrollTop, clientWidth, clientHeight, scrollWidth, scrollHeight } = headerWrapperEl;
198
- if (headPrevEl) {
199
- if ((lrPosition ? scrollTop : scrollLeft) > 0) {
200
- addClass(headPrevEl, "scrolling--middle");
201
- } else {
202
- removeClass(headPrevEl, "scrolling--middle");
126
+ return stys;
127
+ });
128
+ const computeCloseOpts = computed(() => {
129
+ return Object.assign({}, getConfig().tabs.closeConfig, props.closeConfig);
130
+ });
131
+ const computeRefreshOpts = computed(() => {
132
+ return Object.assign({}, getConfig().tabs.refreshConfig, props.refreshConfig);
133
+ });
134
+ const computeTabOptions = computed(() => {
135
+ const { options } = props;
136
+ return (options || []).filter((item) => handleFilterTab(item));
137
+ });
138
+ const computeTabStaticOptions = computed(() => {
139
+ const { staticTabs } = reactData;
140
+ return staticTabs.filter((item) => handleFilterTab(item));
141
+ });
142
+ const computeParentTabsResizeFlag = computed(() => {
143
+ return $xeParentTabs ? $xeParentTabs.reactData.resizeFlag : null;
144
+ });
145
+ const computeScrollbarOpts = computed(() => {
146
+ return Object.assign({}, getConfig().tabs.scrollbarConfig, props.scrollbarConfig);
147
+ });
148
+ const computeScrollbarProps = computed(() => {
149
+ const scrollbarOpts = computeScrollbarOpts.value;
150
+ const { viewClassName, viewInnerClassName } = scrollbarOpts;
151
+ return {
152
+ width: scrollbarOpts.width,
153
+ height: scrollbarOpts.height,
154
+ autoHide: scrollbarOpts.autoHide,
155
+ visible: scrollbarOpts.visible,
156
+ xConfig: scrollbarOpts.xConfig,
157
+ yConfig: scrollbarOpts.yConfig,
158
+ className: scrollbarOpts.className,
159
+ viewAttrs: scrollbarOpts.viewAttrs,
160
+ viewClassName: "vxe-tabs-pane--scrollbar-item-view" + (viewClassName ? " " + viewClassName : ""),
161
+ viewInnerClassName: "vxe-tabs-pane--scrollbar-item-inner" + (viewClassName ? " " + viewInnerClassName : "")
162
+ };
163
+ });
164
+ const computeMaps = {};
165
+ const $xeTabs = {
166
+ xID,
167
+ props,
168
+ context,
169
+ reactData,
170
+ getRefMaps: () => refMaps,
171
+ getComputeMaps: () => computeMaps
172
+ };
173
+ const handleFilterTab = (item) => {
174
+ const { permissionCode } = item;
175
+ if (permissionCode) {
176
+ if (!permission.checkVisible(permissionCode)) {
177
+ return false;
203
178
  }
204
179
  }
205
- if (headNextEl) {
206
- if (lrPosition ? clientHeight < scrollHeight - Math.ceil(scrollTop) : clientWidth < scrollWidth - Math.ceil(scrollLeft)) {
207
- addClass(headNextEl, "scrolling--middle");
208
- } else {
209
- removeClass(headNextEl, "scrolling--middle");
180
+ return true;
181
+ };
182
+ const callSlot = (slotFunc, params) => {
183
+ if (slotFunc) {
184
+ if (XEUtils.isString(slotFunc)) {
185
+ slotFunc = slots[slotFunc] || null;
186
+ }
187
+ if (XEUtils.isFunction(slotFunc)) {
188
+ return getSlotVNs(slotFunc(params));
210
189
  }
211
190
  }
212
- }
213
- };
214
- const updateTabStyle = () => {
215
- const handleStyle = () => {
216
- const { activeName } = reactData;
217
- const tabType = computeTabType.value;
218
- const tabOptions = computeTabOptions.value;
219
- const tabStaticOptions = computeTabStaticOptions.value;
220
- const headerWrapperEl = refHeadWrapperElem.value;
191
+ return [];
192
+ };
193
+ const checkScrolling = () => {
221
194
  const lrPosition = computeLrPosition.value;
222
- let lintWidth = 0;
223
- let lintHeight = 0;
224
- let lintLeft = 0;
225
- let lintTop = 0;
226
- let sBarWidth = 0;
227
- let sBarHeight = 0;
228
- let isOver = false;
195
+ const headerWrapperEl = refHeadWrapperElem.value;
196
+ const headPrevEl = refHeadPrevElem.value;
197
+ const headNextEl = refHeadNextElem.value;
229
198
  if (headerWrapperEl) {
230
- const index = XEUtils.findIndexOf(tabStaticOptions.length ? tabStaticOptions : tabOptions, (item) => item.name === activeName);
231
- const { children, offsetWidth, scrollWidth, offsetHeight, scrollHeight, clientWidth, clientHeight } = headerWrapperEl;
232
- sBarWidth = offsetWidth - clientWidth;
233
- sBarHeight = offsetHeight - clientHeight;
234
- if (lrPosition) {
235
- isOver = scrollHeight !== clientHeight;
236
- if (index > -1) {
237
- const tabEl = children[index];
238
- if (tabEl) {
239
- let tabHeight = tabEl.clientHeight;
240
- const tabWidth = tabEl.clientWidth;
241
- if (tabType === "card") {
242
- lintWidth = tabWidth;
243
- lintHeight = tabHeight;
244
- lintTop = tabEl.offsetTop;
245
- } else if (tabType === "border-card") {
246
- lintWidth = tabWidth;
247
- lintHeight = tabHeight;
248
- lintTop = tabEl.offsetTop - 1;
249
- } else {
250
- const tabStyle = getComputedStyle(tabEl);
251
- const paddingTop = XEUtils.toNumber(tabStyle.paddingTop);
252
- const paddingBottom = XEUtils.toNumber(tabStyle.paddingBottom);
253
- tabHeight -= paddingTop + paddingBottom;
254
- lintHeight = Math.max(4, tabHeight);
255
- lintTop = tabEl.offsetTop + paddingTop + Math.floor((tabHeight - lintHeight) / 2);
199
+ const { scrollLeft, scrollTop, clientWidth, clientHeight, scrollWidth, scrollHeight } = headerWrapperEl;
200
+ if (headPrevEl) {
201
+ if ((lrPosition ? scrollTop : scrollLeft) > 0) {
202
+ addClass(headPrevEl, "scrolling--middle");
203
+ } else {
204
+ removeClass(headPrevEl, "scrolling--middle");
205
+ }
206
+ }
207
+ if (headNextEl) {
208
+ if (lrPosition ? clientHeight < scrollHeight - Math.ceil(scrollTop) : clientWidth < scrollWidth - Math.ceil(scrollLeft)) {
209
+ addClass(headNextEl, "scrolling--middle");
210
+ } else {
211
+ removeClass(headNextEl, "scrolling--middle");
212
+ }
213
+ }
214
+ }
215
+ };
216
+ const updateTabStyle = () => {
217
+ const handleStyle = () => {
218
+ const { activeName } = reactData;
219
+ const tabType = computeTabType.value;
220
+ const tabOptions = computeTabOptions.value;
221
+ const tabStaticOptions = computeTabStaticOptions.value;
222
+ const headerWrapperEl = refHeadWrapperElem.value;
223
+ const lrPosition = computeLrPosition.value;
224
+ let lintWidth = 0;
225
+ let lintHeight = 0;
226
+ let lintLeft = 0;
227
+ let lintTop = 0;
228
+ let sBarWidth = 0;
229
+ let sBarHeight = 0;
230
+ let isOver = false;
231
+ if (headerWrapperEl) {
232
+ const index = XEUtils.findIndexOf(tabStaticOptions.length ? tabStaticOptions : tabOptions, (item) => item.name === activeName);
233
+ const { children, offsetWidth, scrollWidth, offsetHeight, scrollHeight, clientWidth, clientHeight } = headerWrapperEl;
234
+ sBarWidth = offsetWidth - clientWidth;
235
+ sBarHeight = offsetHeight - clientHeight;
236
+ if (lrPosition) {
237
+ isOver = scrollHeight !== clientHeight;
238
+ if (index > -1) {
239
+ const tabEl = children[index];
240
+ if (tabEl) {
241
+ let tabHeight = tabEl.clientHeight;
242
+ const tabWidth = tabEl.clientWidth;
243
+ if (tabType === "card") {
244
+ lintWidth = tabWidth;
245
+ lintHeight = tabHeight;
246
+ lintTop = tabEl.offsetTop;
247
+ } else if (tabType === "border-card") {
248
+ lintWidth = tabWidth;
249
+ lintHeight = tabHeight;
250
+ lintTop = tabEl.offsetTop - 1;
251
+ } else {
252
+ const tabStyle = getComputedStyle(tabEl);
253
+ const paddingTop = XEUtils.toNumber(tabStyle.paddingTop);
254
+ const paddingBottom = XEUtils.toNumber(tabStyle.paddingBottom);
255
+ tabHeight -= paddingTop + paddingBottom;
256
+ lintHeight = Math.max(4, tabHeight);
257
+ lintTop = tabEl.offsetTop + paddingTop + Math.floor((tabHeight - lintHeight) / 2);
258
+ }
256
259
  }
257
260
  }
258
- }
259
- } else {
260
- isOver = scrollWidth !== clientWidth;
261
- if (index > -1) {
262
- const tabEl = children[index];
263
- if (tabEl) {
264
- let tabWidth = tabEl.clientWidth;
265
- if (tabType === "card") {
266
- lintWidth = tabWidth + 1;
267
- lintLeft = tabEl.offsetLeft;
268
- } else if (tabType === "border-card") {
269
- lintWidth = tabWidth;
270
- lintLeft = tabEl.offsetLeft - 1;
271
- } else {
272
- const tabStyle = getComputedStyle(tabEl);
273
- const paddingLeft = XEUtils.toNumber(tabStyle.paddingLeft);
274
- const paddingRight = XEUtils.toNumber(tabStyle.paddingRight);
275
- tabWidth -= paddingLeft + paddingRight;
276
- lintWidth = Math.max(4, tabWidth);
277
- lintLeft = tabEl.offsetLeft + paddingLeft + Math.floor((tabWidth - lintWidth) / 2);
261
+ } else {
262
+ isOver = scrollWidth !== clientWidth;
263
+ if (index > -1) {
264
+ const tabEl = children[index];
265
+ if (tabEl) {
266
+ let tabWidth = tabEl.clientWidth;
267
+ if (tabType === "card") {
268
+ lintWidth = tabWidth + 1;
269
+ lintLeft = tabEl.offsetLeft;
270
+ } else if (tabType === "border-card") {
271
+ lintWidth = tabWidth;
272
+ lintLeft = tabEl.offsetLeft - 1;
273
+ } else {
274
+ const tabStyle = getComputedStyle(tabEl);
275
+ const paddingLeft = XEUtils.toNumber(tabStyle.paddingLeft);
276
+ const paddingRight = XEUtils.toNumber(tabStyle.paddingRight);
277
+ tabWidth -= paddingLeft + paddingRight;
278
+ lintWidth = Math.max(4, tabWidth);
279
+ lintLeft = tabEl.offsetLeft + paddingLeft + Math.floor((tabWidth - lintWidth) / 2);
280
+ }
278
281
  }
279
282
  }
280
283
  }
281
284
  }
285
+ reactData.scrollbarWidth = sBarWidth;
286
+ reactData.scrollbarHeight = sBarHeight;
287
+ reactData.lintLeft = lintLeft;
288
+ reactData.lintTop = lintTop;
289
+ reactData.lintWidth = lintWidth;
290
+ reactData.lintHeight = lintHeight;
291
+ reactData.isTabOver = isOver;
292
+ checkScrolling();
293
+ };
294
+ handleStyle();
295
+ nextTick(handleStyle);
296
+ };
297
+ const dispatchEvent = (type, params, evnt) => {
298
+ emit(type, createEvent(evnt, { $tabs: $xeTabs }, params));
299
+ };
300
+ const emitModel = (value) => {
301
+ emit("update:modelValue", value);
302
+ };
303
+ const addInitName = (name, evnt) => {
304
+ const { initNames } = reactData;
305
+ if (name && !initNames.includes(name)) {
306
+ dispatchEvent("tab-load", { name }, evnt);
307
+ initNames.push(name);
308
+ return true;
282
309
  }
283
- reactData.scrollbarWidth = sBarWidth;
284
- reactData.scrollbarHeight = sBarHeight;
285
- reactData.lintLeft = lintLeft;
286
- reactData.lintTop = lintTop;
287
- reactData.lintWidth = lintWidth;
288
- reactData.lintHeight = lintHeight;
289
- reactData.isTabOver = isOver;
290
- checkScrolling();
310
+ return false;
291
311
  };
292
- handleStyle();
293
- nextTick(handleStyle);
294
- };
295
- const dispatchEvent = (type, params, evnt) => {
296
- emit(type, createEvent(evnt, { $tabs: $xeTabs }, params));
297
- };
298
- const emitModel = (value) => {
299
- emit("update:modelValue", value);
300
- };
301
- const addInitName = (name, evnt) => {
302
- const { initNames } = reactData;
303
- if (name && !initNames.includes(name)) {
304
- dispatchEvent("tab-load", { name }, evnt);
305
- initNames.push(name);
306
- return true;
307
- }
308
- return false;
309
- };
310
- const initDefaultName = (list) => {
311
- let activeName = null;
312
- const nameMaps = {};
313
- if (list && list.length) {
314
- let validVal = false;
315
- activeName = props.modelValue;
316
- list.forEach((item) => {
317
- const { name, preload } = item || {};
318
- if (name) {
319
- nameMaps[`${name}`] = {
320
- loading: false
321
- };
322
- if (activeName === name) {
323
- validVal = true;
312
+ const initDefaultName = (list) => {
313
+ let activeName = null;
314
+ const nameMaps = {};
315
+ if (list && list.length) {
316
+ let validVal = false;
317
+ activeName = props.modelValue;
318
+ list.forEach((item) => {
319
+ const { name, preload } = item || {};
320
+ if (name) {
321
+ nameMaps[`${name}`] = {
322
+ loading: false
323
+ };
324
+ if (activeName === name) {
325
+ validVal = true;
326
+ }
327
+ if (preload) {
328
+ addInitName(name, null);
329
+ }
324
330
  }
325
- if (preload) {
326
- addInitName(name, null);
331
+ });
332
+ if (!validVal) {
333
+ activeName = list[0].name;
334
+ addInitName(activeName, null);
335
+ emitModel(activeName);
336
+ }
337
+ }
338
+ reactData.activeName = activeName;
339
+ reactData.cacheTabMaps = nameMaps;
340
+ };
341
+ const clickEvent = (evnt, item) => {
342
+ const { trigger } = props;
343
+ const beforeMethod = props.beforeChangeMethod || getConfig().tabs.beforeChangeMethod;
344
+ const { activeName } = reactData;
345
+ const { name } = item;
346
+ const value = name;
347
+ dispatchEvent("tab-click", { name }, evnt);
348
+ if (trigger === "manual") {
349
+ return;
350
+ }
351
+ if (name !== activeName) {
352
+ Promise.resolve(!beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name, option: item })).then((status) => {
353
+ if (status) {
354
+ reactData.activeName = name;
355
+ emitModel(value);
356
+ addInitName(name, evnt);
357
+ dispatchEvent("change", { value, name, oldName: activeName, newName: name, option: item }, evnt);
358
+ dispatchEvent("tab-change", { value, name, oldName: activeName, newName: name, option: item }, evnt);
359
+ } else {
360
+ dispatchEvent("tab-change-fail", { value, name, oldName: activeName, newName: name, option: item }, evnt);
327
361
  }
362
+ }).catch(() => {
363
+ dispatchEvent("tab-change-fail", { value, name, oldName: activeName, newName: name, option: item }, evnt);
364
+ });
365
+ }
366
+ };
367
+ const handleRefreshTabEvent = (evnt, item) => {
368
+ evnt.stopPropagation();
369
+ const { activeName, cacheTabMaps } = reactData;
370
+ const { name } = item;
371
+ const refreshOpts = computeRefreshOpts.value;
372
+ const { queryMethod } = refreshOpts;
373
+ const cacheItem = name ? cacheTabMaps[`${name}`] : null;
374
+ if (cacheItem) {
375
+ if (queryMethod) {
376
+ if (cacheItem.loading) {
377
+ return;
378
+ }
379
+ cacheItem.loading = true;
380
+ Promise.resolve(queryMethod({ $tabs: $xeTabs, value: activeName, name, option: item })).finally(() => {
381
+ cacheItem.loading = false;
382
+ });
383
+ } else {
384
+ errLog("vxe.error.notFunc", ["refresh-config.queryMethod"]);
328
385
  }
329
- });
330
- if (!validVal) {
331
- activeName = list[0].name;
332
- addInitName(activeName, null);
333
- emitModel(activeName);
334
386
  }
335
- }
336
- reactData.activeName = activeName;
337
- reactData.cacheTabMaps = nameMaps;
338
- };
339
- const clickEvent = (evnt, item) => {
340
- const { trigger } = props;
341
- const beforeMethod = props.beforeChangeMethod || getConfig().tabs.beforeChangeMethod;
342
- const { activeName } = reactData;
343
- const { name } = item;
344
- const value = name;
345
- dispatchEvent("tab-click", { name }, evnt);
346
- if (trigger === "manual") {
347
- return;
348
- }
349
- if (name !== activeName) {
350
- Promise.resolve(!beforeMethod || beforeMethod({ $tabs: $xeTabs, name, oldName: activeName, newName: name, option: item })).then((status) => {
387
+ };
388
+ const handleCloseTabEvent = (evnt, item, index, list) => {
389
+ evnt.stopPropagation();
390
+ const { activeName } = reactData;
391
+ const closeOpts = computeCloseOpts.value;
392
+ const beforeMethod = closeOpts.beforeMethod || props.beforeCloseMethod || getConfig().tabs.beforeCloseMethod;
393
+ const { name } = item;
394
+ const value = activeName;
395
+ let nextName = value;
396
+ if (activeName === name) {
397
+ const nextItem = index < list.length - 1 ? list[index + 1] : list[index - 1];
398
+ nextName = nextItem ? nextItem.name : null;
399
+ }
400
+ Promise.resolve(!beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName, option: item })).then((status) => {
351
401
  if (status) {
352
- reactData.activeName = name;
353
- emitModel(value);
354
- addInitName(name, evnt);
355
- dispatchEvent("change", { value, name, oldName: activeName, newName: name, option: item }, evnt);
356
- dispatchEvent("tab-change", { value, name, oldName: activeName, newName: name, option: item }, evnt);
402
+ dispatchEvent("tab-close", { value, name, nextName }, evnt);
357
403
  } else {
358
- dispatchEvent("tab-change-fail", { value, name, oldName: activeName, newName: name, option: item }, evnt);
404
+ dispatchEvent("tab-close-fail", { value, name, nextName }, evnt);
359
405
  }
360
406
  }).catch(() => {
361
- dispatchEvent("tab-change-fail", { value, name, oldName: activeName, newName: name, option: item }, evnt);
362
- });
363
- }
364
- };
365
- const handleRefreshTabEvent = (evnt, item) => {
366
- evnt.stopPropagation();
367
- const { activeName, cacheTabMaps } = reactData;
368
- const { name } = item;
369
- const refreshOpts = computeRefreshOpts.value;
370
- const { queryMethod } = refreshOpts;
371
- const cacheItem = name ? cacheTabMaps[`${name}`] : null;
372
- if (cacheItem) {
373
- if (queryMethod) {
374
- if (cacheItem.loading) {
375
- return;
376
- }
377
- cacheItem.loading = true;
378
- Promise.resolve(queryMethod({ $tabs: $xeTabs, value: activeName, name, option: item })).finally(() => {
379
- cacheItem.loading = false;
380
- });
381
- } else {
382
- errLog("vxe.error.notFunc", ["refresh-config.queryMethod"]);
383
- }
384
- }
385
- };
386
- const handleCloseTabEvent = (evnt, item, index, list) => {
387
- evnt.stopPropagation();
388
- const { activeName } = reactData;
389
- const closeOpts = computeCloseOpts.value;
390
- const beforeMethod = closeOpts.beforeMethod || props.beforeCloseMethod || getConfig().tabs.beforeCloseMethod;
391
- const { name } = item;
392
- const value = activeName;
393
- let nextName = value;
394
- if (activeName === name) {
395
- const nextItem = index < list.length - 1 ? list[index + 1] : list[index - 1];
396
- nextName = nextItem ? nextItem.name : null;
397
- }
398
- Promise.resolve(!beforeMethod || beforeMethod({ $tabs: $xeTabs, value, name, nextName, option: item })).then((status) => {
399
- if (status) {
400
- dispatchEvent("tab-close", { value, name, nextName }, evnt);
401
- } else {
402
407
  dispatchEvent("tab-close-fail", { value, name, nextName }, evnt);
408
+ });
409
+ };
410
+ const startScrollAnimation = (offsetPos, offsetSize) => {
411
+ const { slTimeout } = internalData;
412
+ const lrPosition = computeLrPosition.value;
413
+ let offsetLeft = lrPosition ? 0 : offsetSize;
414
+ let offsetTop = lrPosition ? offsetSize : 0;
415
+ let scrollCount = 6;
416
+ let delayNum = 35;
417
+ if (slTimeout) {
418
+ clearTimeout(slTimeout);
419
+ internalData.slTimeout = void 0;
403
420
  }
404
- }).catch(() => {
405
- dispatchEvent("tab-close-fail", { value, name, nextName }, evnt);
406
- });
407
- };
408
- const startScrollAnimation = (offsetPos, offsetSize) => {
409
- const { slTimeout } = internalData;
410
- const lrPosition = computeLrPosition.value;
411
- let offsetLeft = lrPosition ? 0 : offsetSize;
412
- let offsetTop = lrPosition ? offsetSize : 0;
413
- let scrollCount = 6;
414
- let delayNum = 35;
415
- if (slTimeout) {
416
- clearTimeout(slTimeout);
417
- internalData.slTimeout = void 0;
418
- }
419
- const scrollAnimate = () => {
420
- const headerWrapperEl = refHeadWrapperElem.value;
421
- if (scrollCount > 0) {
422
- scrollCount--;
423
- if (headerWrapperEl) {
424
- const { clientWidth, clientHeight, scrollWidth, scrollHeight, scrollLeft, scrollTop } = headerWrapperEl;
425
- if (lrPosition) {
426
- offsetTop = Math.floor(offsetTop / 2);
427
- if (offsetPos > 0) {
428
- if (clientHeight + scrollTop < scrollHeight) {
429
- headerWrapperEl.scrollTop += offsetTop;
430
- delayNum -= 4;
431
- internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
432
- }
433
- } else {
434
- if (scrollTop > 0) {
435
- headerWrapperEl.scrollTop -= offsetTop;
436
- delayNum -= 4;
437
- internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
438
- }
439
- }
440
- } else {
441
- offsetLeft = Math.floor(offsetLeft / 2);
442
- if (offsetPos > 0) {
443
- if (clientWidth + scrollLeft < scrollWidth) {
444
- headerWrapperEl.scrollLeft += offsetLeft;
445
- delayNum -= 4;
446
- internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
421
+ const scrollAnimate = () => {
422
+ const headerWrapperEl = refHeadWrapperElem.value;
423
+ if (scrollCount > 0) {
424
+ scrollCount--;
425
+ if (headerWrapperEl) {
426
+ const { clientWidth, clientHeight, scrollWidth, scrollHeight, scrollLeft, scrollTop } = headerWrapperEl;
427
+ if (lrPosition) {
428
+ offsetTop = Math.floor(offsetTop / 2);
429
+ if (offsetPos > 0) {
430
+ if (clientHeight + scrollTop < scrollHeight) {
431
+ headerWrapperEl.scrollTop += offsetTop;
432
+ delayNum -= 4;
433
+ internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
434
+ }
435
+ } else {
436
+ if (scrollTop > 0) {
437
+ headerWrapperEl.scrollTop -= offsetTop;
438
+ delayNum -= 4;
439
+ internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
440
+ }
447
441
  }
448
442
  } else {
449
- if (scrollLeft > 0) {
450
- headerWrapperEl.scrollLeft -= offsetLeft;
451
- delayNum -= 4;
452
- internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
443
+ offsetLeft = Math.floor(offsetLeft / 2);
444
+ if (offsetPos > 0) {
445
+ if (clientWidth + scrollLeft < scrollWidth) {
446
+ headerWrapperEl.scrollLeft += offsetLeft;
447
+ delayNum -= 4;
448
+ internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
449
+ }
450
+ } else {
451
+ if (scrollLeft > 0) {
452
+ headerWrapperEl.scrollLeft -= offsetLeft;
453
+ delayNum -= 4;
454
+ internalData.slTimeout = setTimeout(scrollAnimate, delayNum);
455
+ }
453
456
  }
454
457
  }
458
+ updateTabStyle();
455
459
  }
456
- updateTabStyle();
457
460
  }
458
- }
461
+ };
462
+ scrollAnimate();
459
463
  };
460
- scrollAnimate();
461
- };
462
- const handleScrollToLeft = (offsetPos) => {
463
- const lrPosition = computeLrPosition.value;
464
- const headerWrapperEl = refHeadWrapperElem.value;
465
- if (headerWrapperEl) {
466
- const { clientWidth, clientHeight } = headerWrapperEl;
467
- const offsetSize = Math.floor((lrPosition ? clientHeight : clientWidth) * 0.75);
468
- startScrollAnimation(offsetPos, offsetSize);
469
- }
470
- };
471
- const scrollLeftEvent = () => {
472
- handleScrollToLeft(-1);
473
- };
474
- const scrollRightEvent = () => {
475
- handleScrollToLeft(1);
476
- };
477
- const scrollToTab = (name) => {
478
- const tabOptions = computeTabOptions.value;
479
- const tabStaticOptions = computeTabStaticOptions.value;
480
- const lrPosition = computeLrPosition.value;
481
- return nextTick().then(() => {
464
+ const handleScrollToLeft = (offsetPos) => {
465
+ const lrPosition = computeLrPosition.value;
482
466
  const headerWrapperEl = refHeadWrapperElem.value;
483
467
  if (headerWrapperEl) {
484
- const index = XEUtils.findIndexOf(tabStaticOptions.length ? tabStaticOptions : tabOptions, (item) => item.name === name);
485
- if (index > -1) {
486
- const { scrollLeft, scrollTop, clientWidth, clientHeight, children } = headerWrapperEl;
487
- const tabEl = children[index];
488
- if (tabEl) {
489
- if (lrPosition) {
490
- const tabOffsetTop = tabEl.offsetTop;
491
- const tabClientHeight = tabEl.clientHeight;
492
- const overSize = tabOffsetTop + tabClientHeight - (scrollTop + clientHeight);
493
- if (overSize > 0) {
494
- headerWrapperEl.scrollTop += overSize;
495
- }
496
- if (tabOffsetTop < scrollTop) {
497
- headerWrapperEl.scrollTop = tabOffsetTop;
498
- }
499
- } else {
500
- const tabOffsetLeft = tabEl.offsetLeft;
501
- const tabClientWidth = tabEl.clientWidth;
502
- const overSize = tabOffsetLeft + tabClientWidth - (scrollLeft + clientWidth);
503
- if (overSize > 0) {
504
- headerWrapperEl.scrollLeft += overSize;
505
- }
506
- if (tabOffsetLeft < scrollLeft) {
507
- headerWrapperEl.scrollLeft = tabOffsetLeft;
468
+ const { clientWidth, clientHeight } = headerWrapperEl;
469
+ const offsetSize = Math.floor((lrPosition ? clientHeight : clientWidth) * 0.75);
470
+ startScrollAnimation(offsetPos, offsetSize);
471
+ }
472
+ };
473
+ const scrollLeftEvent = () => {
474
+ handleScrollToLeft(-1);
475
+ };
476
+ const scrollRightEvent = () => {
477
+ handleScrollToLeft(1);
478
+ };
479
+ const scrollToTab = (name) => {
480
+ const tabOptions = computeTabOptions.value;
481
+ const tabStaticOptions = computeTabStaticOptions.value;
482
+ const lrPosition = computeLrPosition.value;
483
+ return nextTick().then(() => {
484
+ const headerWrapperEl = refHeadWrapperElem.value;
485
+ if (headerWrapperEl) {
486
+ const index = XEUtils.findIndexOf(tabStaticOptions.length ? tabStaticOptions : tabOptions, (item) => item.name === name);
487
+ if (index > -1) {
488
+ const { scrollLeft, scrollTop, clientWidth, clientHeight, children } = headerWrapperEl;
489
+ const tabEl = children[index];
490
+ if (tabEl) {
491
+ if (lrPosition) {
492
+ const tabOffsetTop = tabEl.offsetTop;
493
+ const tabClientHeight = tabEl.clientHeight;
494
+ const overSize = tabOffsetTop + tabClientHeight - (scrollTop + clientHeight);
495
+ if (overSize > 0) {
496
+ headerWrapperEl.scrollTop += overSize;
497
+ }
498
+ if (tabOffsetTop < scrollTop) {
499
+ headerWrapperEl.scrollTop = tabOffsetTop;
500
+ }
501
+ } else {
502
+ const tabOffsetLeft = tabEl.offsetLeft;
503
+ const tabClientWidth = tabEl.clientWidth;
504
+ const overSize = tabOffsetLeft + tabClientWidth - (scrollLeft + clientWidth);
505
+ if (overSize > 0) {
506
+ headerWrapperEl.scrollLeft += overSize;
507
+ }
508
+ if (tabOffsetLeft < scrollLeft) {
509
+ headerWrapperEl.scrollLeft = tabOffsetLeft;
510
+ }
508
511
  }
509
512
  }
510
513
  }
514
+ updateTabStyle();
511
515
  }
512
- updateTabStyle();
513
- }
514
- });
515
- };
516
- const handlePrevNext = (isNext) => {
517
- const { activeName } = reactData;
518
- const tabOptions = computeTabOptions.value;
519
- const tabStaticOptions = computeTabStaticOptions.value;
520
- const list = tabStaticOptions.length ? tabStaticOptions : tabOptions;
521
- const index = XEUtils.findIndexOf(list, (item) => item.name === activeName);
522
- if (index > -1) {
523
- let item = null;
524
- if (isNext) {
525
- if (index < list.length - 1) {
526
- item = list[index + 1];
516
+ });
517
+ };
518
+ const handlePrevNext = (isNext) => {
519
+ const { activeName } = reactData;
520
+ const tabOptions = computeTabOptions.value;
521
+ const tabStaticOptions = computeTabStaticOptions.value;
522
+ const list = tabStaticOptions.length ? tabStaticOptions : tabOptions;
523
+ const index = XEUtils.findIndexOf(list, (item) => item.name === activeName);
524
+ if (index > -1) {
525
+ let item = null;
526
+ if (isNext) {
527
+ if (index < list.length - 1) {
528
+ item = list[index + 1];
529
+ }
530
+ } else {
531
+ if (index > 0) {
532
+ item = list[index - 1];
533
+ }
527
534
  }
528
- } else {
529
- if (index > 0) {
530
- item = list[index - 1];
535
+ if (item) {
536
+ const name = item.name;
537
+ const value = name;
538
+ reactData.activeName = name;
539
+ emitModel(value);
540
+ addInitName(name, null);
531
541
  }
532
542
  }
533
- if (item) {
534
- const name = item.name;
535
- const value = name;
536
- reactData.activeName = name;
537
- emitModel(value);
538
- addInitName(name, null);
539
- }
540
- }
541
- return nextTick();
542
- };
543
- const tabsMethods = {
544
- dispatchEvent,
545
- scrollToTab,
546
- prev() {
547
- return handlePrevNext(false);
548
- },
549
- next() {
550
- return handlePrevNext(true);
551
- },
552
- prevTab() {
553
- warnLog("vxe.error.delFunc", ["prevTab", "prev"]);
554
- return tabsMethods.prev();
555
- },
556
- nextTab() {
557
- warnLog("vxe.error.delFunc", ["nextTab", "next"]);
558
- return tabsMethods.next();
559
- }
560
- };
561
- const tabsPrivateMethods = {};
562
- Object.assign($xeTabs, tabsMethods, tabsPrivateMethods);
563
- const renderTabHeader = (tabList) => {
564
- const { titleWidth: allTitleWidth, titleAlign: allTitleAlign, showClose, closeConfig, refreshConfig } = props;
565
- const { activeName, scrollbarWidth, scrollbarHeight, isTabOver, cacheTabMaps } = reactData;
566
- const tabType = computeTabType.value;
567
- const tabPosition = computeTabPosition.value;
568
- const lrPosition = computeLrPosition.value;
569
- const lineStyle = computeLineStyle.value;
570
- const tabPrefixSlot = slots.tabPrefix || slots["tab-prefix"] || slots.prefix;
571
- const tabSuffixSlot = slots.tabSuffix || slots["tab-suffix"] || slots.suffix || slots.extra;
572
- const closeOpts = computeCloseOpts.value;
573
- const closeVisibleMethod = closeOpts.visibleMethod;
574
- const refreshOpts = computeRefreshOpts.value;
575
- const refreshVisibleMethod = refreshOpts.visibleMethod;
576
- return h(
577
- "div",
578
- {
579
- key: "th",
580
- class: ["vxe-tabs-header", `type--${tabType}`, `pos--${tabPosition}`]
543
+ return nextTick();
544
+ };
545
+ const tabsMethods = {
546
+ dispatchEvent,
547
+ scrollToTab,
548
+ prev() {
549
+ return handlePrevNext(false);
581
550
  },
582
- [
583
- tabPrefixSlot ? h(
584
- "div",
585
- {
586
- class: ["vxe-tabs-header--prefix", `type--${tabType}`, `pos--${tabPosition}`]
587
- },
588
- callSlot(tabPrefixSlot, { name: activeName })
589
- ) : renderEmptyElement($xeTabs),
590
- isTabOver ? h(
591
- "div",
592
- {
593
- ref: refHeadPrevElem,
594
- class: ["vxe-tabs-header--bar vxe-tabs-header--prev-bar", `type--${tabType}`, `pos--${tabPosition}`],
595
- onClick: scrollLeftEvent
596
- },
597
- [
598
- h("span", {
599
- class: lrPosition ? getIcon().TABS_TAB_BUTTON_TOP : getIcon().TABS_TAB_BUTTON_LEFT
600
- })
601
- ]
602
- ) : renderEmptyElement($xeTabs),
603
- h(
604
- "div",
605
- {
606
- class: ["vxe-tabs-header--wrapper", `type--${tabType}`, `pos--${tabPosition}`]
607
- },
608
- [
609
- h(
610
- "div",
611
- {
612
- ref: refHeadWrapperElem,
613
- class: "vxe-tabs-header--item-wrapper",
614
- style: lrPosition ? {
615
- marginRight: `-${scrollbarWidth + scrollbarOffsetSize}px`,
616
- paddingRight: `${scrollbarOffsetSize}px`
617
- } : {
618
- marginBottom: `-${scrollbarHeight + scrollbarOffsetSize}px`,
619
- paddingBottom: `${scrollbarOffsetSize}px`
551
+ next() {
552
+ return handlePrevNext(true);
553
+ },
554
+ prevTab() {
555
+ warnLog("vxe.error.delFunc", ["prevTab", "prev"]);
556
+ return tabsMethods.prev();
557
+ },
558
+ nextTab() {
559
+ warnLog("vxe.error.delFunc", ["nextTab", "next"]);
560
+ return tabsMethods.next();
561
+ }
562
+ };
563
+ const tabsPrivateMethods = {};
564
+ Object.assign($xeTabs, tabsMethods, tabsPrivateMethods);
565
+ const renderTabHeader = (tabList) => {
566
+ const { titleWidth: allTitleWidth, titleAlign: allTitleAlign, showClose, closeConfig, refreshConfig } = props;
567
+ const { activeName, scrollbarWidth, scrollbarHeight, isTabOver, cacheTabMaps } = reactData;
568
+ const tabType = computeTabType.value;
569
+ const tabPosition = computeTabPosition.value;
570
+ const lrPosition = computeLrPosition.value;
571
+ const lineStyle = computeLineStyle.value;
572
+ const tabPrefixSlot = slots.tabPrefix || slots["tab-prefix"] || slots.prefix;
573
+ const tabSuffixSlot = slots.tabSuffix || slots["tab-suffix"] || slots.suffix || slots.extra;
574
+ const closeOpts = computeCloseOpts.value;
575
+ const closeVisibleMethod = closeOpts.visibleMethod;
576
+ const refreshOpts = computeRefreshOpts.value;
577
+ const refreshVisibleMethod = refreshOpts.visibleMethod;
578
+ return h(
579
+ "div",
580
+ {
581
+ key: "th",
582
+ class: ["vxe-tabs-header", `type--${tabType}`, `pos--${tabPosition}`]
583
+ },
584
+ [
585
+ tabPrefixSlot ? h(
586
+ "div",
587
+ {
588
+ class: ["vxe-tabs-header--prefix", `type--${tabType}`, `pos--${tabPosition}`]
589
+ },
590
+ callSlot(tabPrefixSlot, { name: activeName })
591
+ ) : renderEmptyElement($xeTabs),
592
+ isTabOver ? h(
593
+ "div",
594
+ {
595
+ ref: refHeadPrevElem,
596
+ class: ["vxe-tabs-header--bar vxe-tabs-header--prev-bar", `type--${tabType}`, `pos--${tabPosition}`],
597
+ onClick: scrollLeftEvent
598
+ },
599
+ [
600
+ h("span", {
601
+ class: lrPosition ? getIcon().TABS_TAB_BUTTON_TOP : getIcon().TABS_TAB_BUTTON_LEFT
602
+ })
603
+ ]
604
+ ) : renderEmptyElement($xeTabs),
605
+ h(
606
+ "div",
607
+ {
608
+ class: ["vxe-tabs-header--wrapper", `type--${tabType}`, `pos--${tabPosition}`]
609
+ },
610
+ [
611
+ h(
612
+ "div",
613
+ {
614
+ ref: refHeadWrapperElem,
615
+ class: "vxe-tabs-header--item-wrapper",
616
+ style: lrPosition ? {
617
+ marginRight: `-${scrollbarWidth + scrollbarOffsetSize}px`,
618
+ paddingRight: `${scrollbarOffsetSize}px`
619
+ } : {
620
+ marginBottom: `-${scrollbarHeight + scrollbarOffsetSize}px`,
621
+ paddingBottom: `${scrollbarOffsetSize}px`
622
+ },
623
+ onScroll: checkScrolling
620
624
  },
621
- onScroll: checkScrolling
622
- },
623
- tabList.map((item, index) => {
624
- const { title, titleWidth, titleAlign, icon, name } = item;
625
- const itemSlots = item.slots || {};
626
- const titleSlot = itemSlots.title || itemSlots.tab;
627
- const titlePrefixSlot = itemSlots.titlePrefix || itemSlots["title-prefix"];
628
- const titleSuffixSlot = itemSlots.titleSuffix || itemSlots["title-suffix"];
629
- const itemWidth = titleWidth || allTitleWidth;
630
- const itemAlign = titleAlign || allTitleAlign;
631
- const params = { $tabs: $xeTabs, value: activeName, name, option: item };
632
- const isActive = activeName === name;
633
- const cacheItem = name ? cacheTabMaps[`${name}`] : null;
634
- const isLoading = cacheItem ? cacheItem.loading : false;
635
- return h(
636
- "div",
637
- {
638
- key: `${name}`,
639
- class: [
640
- "vxe-tabs-header--item",
641
- `type--${tabType}`,
642
- `pos--${tabPosition}`,
643
- itemAlign ? `align--${itemAlign}` : "",
644
- {
645
- "is--active": isActive
625
+ tabList.map((item, index) => {
626
+ const { title, titleWidth, titleAlign, icon, name } = item;
627
+ const itemSlots = item.slots || {};
628
+ const titleSlot = itemSlots.title || itemSlots.tab;
629
+ const titlePrefixSlot = itemSlots.titlePrefix || itemSlots["title-prefix"];
630
+ const titleSuffixSlot = itemSlots.titleSuffix || itemSlots["title-suffix"];
631
+ const itemWidth = titleWidth || allTitleWidth;
632
+ const itemAlign = titleAlign || allTitleAlign;
633
+ const params = { $tabs: $xeTabs, value: activeName, name, option: item };
634
+ const isActive = activeName === name;
635
+ const cacheItem = name ? cacheTabMaps[`${name}`] : null;
636
+ const isLoading = cacheItem ? cacheItem.loading : false;
637
+ return h(
638
+ "div",
639
+ {
640
+ key: `${name}`,
641
+ class: [
642
+ "vxe-tabs-header--item",
643
+ `type--${tabType}`,
644
+ `pos--${tabPosition}`,
645
+ itemAlign ? `align--${itemAlign}` : "",
646
+ {
647
+ "is--active": isActive
648
+ }
649
+ ],
650
+ style: itemWidth ? {
651
+ width: toCssUnit(itemWidth)
652
+ } : void 0,
653
+ onClick(evnt) {
654
+ clickEvent(evnt, item);
646
655
  }
647
- ],
648
- style: itemWidth ? {
649
- width: toCssUnit(itemWidth)
650
- } : void 0,
651
- onClick(evnt) {
652
- clickEvent(evnt, item);
653
- }
654
- },
655
- [
656
- h(
657
- "div",
658
- {
659
- class: "vxe-tabs-header--item-inner"
660
- },
661
- [
662
- h(
663
- "div",
664
- {
665
- class: "vxe-tabs-header--item-content"
666
- },
667
- [
668
- icon ? h(
669
- "span",
670
- {
671
- class: "vxe-tabs-header--item-icon"
672
- },
673
- [
674
- h("i", {
675
- class: icon
676
- })
677
- ]
678
- ) : renderEmptyElement($xeTabs),
679
- titlePrefixSlot ? h(
680
- "span",
681
- {
682
- class: "vxe-tabs-header--item-prefix"
683
- },
684
- callSlot(titlePrefixSlot, { name, title })
685
- ) : renderEmptyElement($xeTabs),
686
- h(
687
- "span",
688
- {
689
- class: "vxe-tabs-header--item-name"
690
- },
691
- titleSlot ? callSlot(titleSlot, { name, title }) : `${title}`
692
- ),
693
- titleSuffixSlot ? h(
694
- "span",
695
- {
696
- class: "vxe-tabs-header--item-suffix"
697
- },
698
- callSlot(titleSuffixSlot, { name, title })
699
- ) : renderEmptyElement($xeTabs)
700
- ]
701
- ),
702
- (isEnableConf(refreshConfig) || refreshOpts.enabled) && (refreshVisibleMethod ? refreshVisibleMethod(params) : true) ? h(
703
- "div",
704
- {
705
- class: [
706
- "vxe-tabs-header--refresh-btn",
707
- {
708
- "is--active": isActive,
709
- "is--loading": isLoading,
710
- "is--disabled": isLoading
656
+ },
657
+ [
658
+ h(
659
+ "div",
660
+ {
661
+ class: "vxe-tabs-header--item-inner"
662
+ },
663
+ [
664
+ h(
665
+ "div",
666
+ {
667
+ class: "vxe-tabs-header--item-content"
668
+ },
669
+ [
670
+ icon ? h(
671
+ "span",
672
+ {
673
+ class: "vxe-tabs-header--item-icon"
674
+ },
675
+ [
676
+ h("i", {
677
+ class: icon
678
+ })
679
+ ]
680
+ ) : renderEmptyElement($xeTabs),
681
+ titlePrefixSlot ? h(
682
+ "span",
683
+ {
684
+ class: "vxe-tabs-header--item-prefix"
685
+ },
686
+ callSlot(titlePrefixSlot, { name, title })
687
+ ) : renderEmptyElement($xeTabs),
688
+ h(
689
+ "span",
690
+ {
691
+ class: "vxe-tabs-header--item-name"
692
+ },
693
+ titleSlot ? callSlot(titleSlot, { name, title }) : `${title}`
694
+ ),
695
+ titleSuffixSlot ? h(
696
+ "span",
697
+ {
698
+ class: "vxe-tabs-header--item-suffix"
699
+ },
700
+ callSlot(titleSuffixSlot, { name, title })
701
+ ) : renderEmptyElement($xeTabs)
702
+ ]
703
+ ),
704
+ (isEnableConf(refreshConfig) || refreshOpts.enabled) && (refreshVisibleMethod ? refreshVisibleMethod(params) : true) ? h(
705
+ "div",
706
+ {
707
+ class: [
708
+ "vxe-tabs-header--refresh-btn",
709
+ {
710
+ "is--active": isActive,
711
+ "is--loading": isLoading,
712
+ "is--disabled": isLoading
713
+ }
714
+ ],
715
+ onClick(evnt) {
716
+ handleRefreshTabEvent(evnt, item);
711
717
  }
712
- ],
713
- onClick(evnt) {
714
- handleRefreshTabEvent(evnt, item);
715
- }
716
- },
717
- [
718
- h("i", {
719
- class: isLoading ? getIcon().TABS_TAB_REFRESH_LOADING : getIcon().TABS_TAB_REFRESH
720
- })
721
- ]
722
- ) : renderEmptyElement($xeTabs),
723
- (showClose || isEnableConf(closeConfig) || closeOpts.enabled) && (!closeVisibleMethod || closeVisibleMethod(params)) ? h(
724
- "div",
725
- {
726
- class: [
727
- "vxe-tabs-header--close-btn",
728
- {
729
- "is--active": isActive
718
+ },
719
+ [
720
+ h("i", {
721
+ class: isLoading ? getIcon().TABS_TAB_REFRESH_LOADING : getIcon().TABS_TAB_REFRESH
722
+ })
723
+ ]
724
+ ) : renderEmptyElement($xeTabs),
725
+ (showClose || isEnableConf(closeConfig) || closeOpts.enabled) && (!closeVisibleMethod || closeVisibleMethod(params)) ? h(
726
+ "div",
727
+ {
728
+ class: [
729
+ "vxe-tabs-header--close-btn",
730
+ {
731
+ "is--active": isActive
732
+ }
733
+ ],
734
+ onClick(evnt) {
735
+ handleCloseTabEvent(evnt, item, index, tabList);
730
736
  }
731
- ],
732
- onClick(evnt) {
733
- handleCloseTabEvent(evnt, item, index, tabList);
734
- }
735
- },
736
- [
737
- h("i", {
738
- class: getIcon().TABS_TAB_CLOSE
739
- })
740
- ]
741
- ) : renderEmptyElement($xeTabs)
742
- ]
743
- )
744
- ]
745
- );
746
- }).concat([
747
- h("span", {
748
- key: "line",
749
- class: ["vxe-tabs-header--active-line", `type--${tabType}`, `pos--${tabPosition}`],
750
- style: lineStyle
751
- })
752
- ])
753
- )
754
- ]
755
- ),
756
- isTabOver ? h(
757
- "div",
737
+ },
738
+ [
739
+ h("i", {
740
+ class: getIcon().TABS_TAB_CLOSE
741
+ })
742
+ ]
743
+ ) : renderEmptyElement($xeTabs)
744
+ ]
745
+ )
746
+ ]
747
+ );
748
+ }).concat([
749
+ h("span", {
750
+ key: "line",
751
+ class: ["vxe-tabs-header--active-line", `type--${tabType}`, `pos--${tabPosition}`],
752
+ style: lineStyle
753
+ })
754
+ ])
755
+ )
756
+ ]
757
+ ),
758
+ isTabOver ? h(
759
+ "div",
760
+ {
761
+ ref: refHeadNextElem,
762
+ class: ["vxe-tabs-header--bar vxe-tabs-header--next-bar", `type--${tabType}`, `pos--${tabPosition}`],
763
+ onClick: scrollRightEvent
764
+ },
765
+ [
766
+ h("span", {
767
+ class: lrPosition ? getIcon().TABS_TAB_BUTTON_BOTTOM : getIcon().TABS_TAB_BUTTON_RIGHT
768
+ })
769
+ ]
770
+ ) : renderEmptyElement($xeTabs),
771
+ tabSuffixSlot ? h(
772
+ "div",
773
+ {
774
+ class: ["vxe-tabs-header--suffix", `type--${tabType}`, `pos--${tabPosition}`]
775
+ },
776
+ callSlot(tabSuffixSlot, { name: activeName })
777
+ ) : renderEmptyElement($xeTabs)
778
+ ]
779
+ );
780
+ };
781
+ const renderTabPane = (item) => {
782
+ const { initNames, activeName } = reactData;
783
+ const { name, slots: slots2 } = item;
784
+ const defaultSlot = slots2 ? slots2.default : null;
785
+ const scrollbarProps = computeScrollbarProps.value;
786
+ const isVScrollbar = computeIsVScrollbar.value;
787
+ if (name && initNames.includes(name)) {
788
+ return isVScrollbar ? h(
789
+ VxeScrollbarComponent,
758
790
  {
759
- ref: refHeadNextElem,
760
- class: ["vxe-tabs-header--bar vxe-tabs-header--next-bar", `type--${tabType}`, `pos--${tabPosition}`],
761
- onClick: scrollRightEvent
791
+ key: `${name}`,
792
+ class: [
793
+ "vxe-tabs-pane--scrollbar-item",
794
+ {
795
+ "is--visible": activeName === name
796
+ }
797
+ ],
798
+ ...scrollbarProps
762
799
  },
763
- [
764
- h("span", {
765
- class: lrPosition ? getIcon().TABS_TAB_BUTTON_BOTTOM : getIcon().TABS_TAB_BUTTON_RIGHT
766
- })
767
- ]
768
- ) : renderEmptyElement($xeTabs),
769
- tabSuffixSlot ? h(
800
+ {
801
+ default: () => defaultSlot ? callSlot(defaultSlot, { name }) : []
802
+ }
803
+ ) : h(
770
804
  "div",
771
805
  {
772
- class: ["vxe-tabs-header--suffix", `type--${tabType}`, `pos--${tabPosition}`]
806
+ key: `${name}`,
807
+ class: [
808
+ "vxe-tabs-pane--item",
809
+ {
810
+ "is--visible": activeName === name
811
+ }
812
+ ]
773
813
  },
774
- callSlot(tabSuffixSlot, { name: activeName })
775
- ) : renderEmptyElement($xeTabs)
776
- ]
777
- );
778
- };
779
- const renderTabPane = (item) => {
780
- const { initNames, activeName } = reactData;
781
- const { name, slots: slots2 } = item;
782
- const defaultSlot = slots2 ? slots2.default : null;
783
- const scrollbarProps = computeScrollbarProps.value;
784
- const isVScrollbar = computeIsVScrollbar.value;
785
- if (name && initNames.includes(name)) {
786
- return isVScrollbar ? h(
787
- VxeScrollbarComponent,
788
- {
789
- key: `${name}`,
790
- class: [
791
- "vxe-tabs-pane--scrollbar-item",
792
- {
793
- "is--visible": activeName === name
794
- }
795
- ],
796
- ...scrollbarProps
797
- },
798
- {
799
- default: () => defaultSlot ? callSlot(defaultSlot, { name }) : []
800
- }
801
- ) : h(
814
+ defaultSlot ? callSlot(defaultSlot, { name }) : []
815
+ );
816
+ }
817
+ return renderEmptyElement($xeTabs);
818
+ };
819
+ const renderTabContent = (tabList) => {
820
+ const { destroyOnClose } = props;
821
+ const { activeName } = reactData;
822
+ if (destroyOnClose) {
823
+ const activeTab = tabList.find((item) => item.name === activeName);
824
+ return [activeTab ? renderTabPane(activeTab) : renderEmptyElement($xeTabs)];
825
+ }
826
+ return tabList.map((item) => renderTabPane(item));
827
+ };
828
+ const rendetTabBody = (tabList) => {
829
+ const { height, padding, showBody } = props;
830
+ const { activeName, cacheTabMaps } = reactData;
831
+ const vSize = computeSize.value;
832
+ const tabType = computeTabType.value;
833
+ const tabPosition = computeTabPosition.value;
834
+ const refreshOpts = computeRefreshOpts.value;
835
+ const { showLoading } = refreshOpts;
836
+ const headerpSlot = slots.header;
837
+ const footerSlot = slots.footer;
838
+ if (!showBody) {
839
+ return renderEmptyElement($xeTabs);
840
+ }
841
+ const cacheItem = activeName ? cacheTabMaps[`${activeName}`] : null;
842
+ const isLoading = cacheItem ? cacheItem.loading : false;
843
+ const defParams = { name: activeName };
844
+ return h(
802
845
  "div",
803
846
  {
804
- key: `${name}`,
847
+ key: "tb",
805
848
  class: [
806
- "vxe-tabs-pane--item",
849
+ "vxe-tabs-pane--wrapper",
850
+ `type--${tabType}`,
851
+ `pos--${tabPosition}`,
807
852
  {
808
- "is--visible": activeName === name
853
+ "is--content": showBody
809
854
  }
810
855
  ]
811
856
  },
812
- defaultSlot ? callSlot(defaultSlot, { name }) : []
813
- );
814
- }
815
- return renderEmptyElement($xeTabs);
816
- };
817
- const renderTabContent = (tabList) => {
818
- const { destroyOnClose } = props;
819
- const { activeName } = reactData;
820
- if (destroyOnClose) {
821
- const activeTab = tabList.find((item) => item.name === activeName);
822
- return [activeTab ? renderTabPane(activeTab) : renderEmptyElement($xeTabs)];
823
- }
824
- return tabList.map((item) => renderTabPane(item));
825
- };
826
- const rendetTabBody = (tabList) => {
827
- const { height, padding, showBody } = props;
828
- const { activeName, cacheTabMaps } = reactData;
829
- const vSize = computeSize.value;
830
- const tabType = computeTabType.value;
831
- const tabPosition = computeTabPosition.value;
832
- const refreshOpts = computeRefreshOpts.value;
833
- const { showLoading } = refreshOpts;
834
- const headerpSlot = slots.header;
835
- const footerSlot = slots.footer;
836
- if (!showBody) {
837
- return renderEmptyElement($xeTabs);
838
- }
839
- const cacheItem = activeName ? cacheTabMaps[`${activeName}`] : null;
840
- const isLoading = cacheItem ? cacheItem.loading : false;
841
- const defParams = { name: activeName };
842
- return h(
843
- "div",
844
- {
845
- key: "tb",
846
- class: [
847
- "vxe-tabs-pane--wrapper",
848
- `type--${tabType}`,
849
- `pos--${tabPosition}`,
850
- {
851
- "is--content": showBody
852
- }
857
+ [
858
+ headerpSlot ? h(
859
+ "div",
860
+ {
861
+ class: "vxe-tabs-pane--header"
862
+ },
863
+ callSlot(headerpSlot, defParams)
864
+ ) : renderEmptyElement($xeTabs),
865
+ h(
866
+ "div",
867
+ {
868
+ class: [
869
+ "vxe-tabs-pane--body",
870
+ `type--${tabType}`,
871
+ `pos--${tabPosition}`,
872
+ {
873
+ [`size--${vSize}`]: vSize,
874
+ "is--padding": padding,
875
+ "is--height": height
876
+ }
877
+ ]
878
+ },
879
+ renderTabContent(tabList)
880
+ ),
881
+ footerSlot ? h(
882
+ "div",
883
+ {
884
+ class: "vxe-tabs-pane--footer"
885
+ },
886
+ callSlot(footerSlot, defParams)
887
+ ) : renderEmptyElement($xeTabs),
888
+ showLoading && isLoading ? renderEmptyElement($xeTabs) : h(VxeLoadingComponent, {
889
+ class: "vxe-tabs--loading",
890
+ modelValue: isLoading
891
+ })
853
892
  ]
854
- },
855
- [
856
- headerpSlot ? h(
857
- "div",
858
- {
859
- class: "vxe-tabs-pane--header"
860
- },
861
- callSlot(headerpSlot, defParams)
862
- ) : renderEmptyElement($xeTabs),
893
+ );
894
+ };
895
+ const renderVN = () => {
896
+ const { height, padding, trigger } = props;
897
+ const { activeName } = reactData;
898
+ const vSize = computeSize.value;
899
+ const tabOptions = computeTabOptions.value;
900
+ const tabStaticOptions = computeTabStaticOptions.value;
901
+ const tabType = computeTabType.value;
902
+ const tabPosition = computeTabPosition.value;
903
+ const wrapperStyle = computeWrapperStyle.value;
904
+ const defaultSlot = slots.default;
905
+ const tabList = defaultSlot ? tabStaticOptions : tabOptions;
906
+ const vns = [
863
907
  h(
864
908
  "div",
865
909
  {
866
- class: [
867
- "vxe-tabs-pane--body",
868
- `type--${tabType}`,
869
- `pos--${tabPosition}`,
870
- {
871
- [`size--${vSize}`]: vSize,
872
- "is--padding": padding,
873
- "is--height": height
874
- }
875
- ]
876
- },
877
- renderTabContent(tabList)
878
- ),
879
- footerSlot ? h(
880
- "div",
881
- {
882
- class: "vxe-tabs-pane--footer"
910
+ key: "ts",
911
+ class: "vxe-tabs-slots"
883
912
  },
884
- callSlot(footerSlot, defParams)
885
- ) : renderEmptyElement($xeTabs),
886
- showLoading && isLoading ? renderEmptyElement($xeTabs) : h(VxeLoadingComponent, {
887
- class: "vxe-tabs--loading",
888
- modelValue: isLoading
889
- })
890
- ]
891
- );
892
- };
893
- const renderVN = () => {
894
- const { height, padding, trigger } = props;
895
- const { activeName } = reactData;
896
- const vSize = computeSize.value;
897
- const tabOptions = computeTabOptions.value;
898
- const tabStaticOptions = computeTabStaticOptions.value;
899
- const tabType = computeTabType.value;
900
- const tabPosition = computeTabPosition.value;
901
- const wrapperStyle = computeWrapperStyle.value;
902
- const defaultSlot = slots.default;
903
- const tabList = defaultSlot ? tabStaticOptions : tabOptions;
904
- const vns = [
905
- h(
913
+ defaultSlot ? defaultSlot({ name: activeName }) : []
914
+ )
915
+ ];
916
+ if (tabPosition === "right" || tabPosition === "bottom") {
917
+ vns.push(rendetTabBody(tabList), renderTabHeader(tabList));
918
+ } else {
919
+ vns.push(renderTabHeader(tabList), rendetTabBody(tabList));
920
+ }
921
+ return h(
906
922
  "div",
907
923
  {
908
- key: "ts",
909
- class: "vxe-tabs-slots"
924
+ ref: refElem,
925
+ class: [
926
+ "vxe-tabs",
927
+ `pos--${tabPosition}`,
928
+ `vxe-tabs--${tabType}`,
929
+ `trigger--${trigger === "manual" ? "trigger" : "default"}`,
930
+ {
931
+ [`size--${vSize}`]: vSize,
932
+ "is--padding": padding,
933
+ "is--height": height
934
+ }
935
+ ],
936
+ style: wrapperStyle
910
937
  },
911
- defaultSlot ? defaultSlot({ name: activeName }) : []
912
- )
913
- ];
914
- if (tabPosition === "right" || tabPosition === "bottom") {
915
- vns.push(rendetTabBody(tabList), renderTabHeader(tabList));
916
- } else {
917
- vns.push(renderTabHeader(tabList), rendetTabBody(tabList));
918
- }
919
- return h(
920
- "div",
921
- {
922
- ref: refElem,
923
- class: [
924
- "vxe-tabs",
925
- `pos--${tabPosition}`,
926
- `vxe-tabs--${tabType}`,
927
- `trigger--${trigger === "manual" ? "trigger" : "default"}`,
928
- {
929
- [`size--${vSize}`]: vSize,
930
- "is--padding": padding,
931
- "is--height": height
932
- }
933
- ],
934
- style: wrapperStyle
935
- },
936
- vns
938
+ vns
939
+ );
940
+ };
941
+ watch(
942
+ () => props.position,
943
+ () => {
944
+ reactData.resizeFlag++;
945
+ }
946
+ );
947
+ watch(
948
+ () => props.modelValue,
949
+ (val) => {
950
+ addInitName(val, null);
951
+ reactData.activeName = val;
952
+ }
953
+ );
954
+ watch(
955
+ () => reactData.activeName,
956
+ (val) => {
957
+ scrollToTab(val);
958
+ }
959
+ );
960
+ const optsFlag = ref(0);
961
+ watch(
962
+ () => props.options ? props.options.length : -1,
963
+ () => {
964
+ optsFlag.value++;
965
+ }
966
+ );
967
+ watch(
968
+ () => props.options,
969
+ () => {
970
+ optsFlag.value++;
971
+ }
937
972
  );
938
- };
939
- watch(
940
- () => props.position,
941
- () => {
973
+ watch(optsFlag, () => {
974
+ initDefaultName(props.options);
942
975
  reactData.resizeFlag++;
943
- }
944
- );
945
- watch(
946
- () => props.modelValue,
947
- (val) => {
948
- addInitName(val, null);
949
- reactData.activeName = val;
950
- }
951
- );
952
- watch(
953
- () => reactData.activeName,
954
- (val) => {
955
- scrollToTab(val);
956
- }
957
- );
958
- const optsFlag = ref(0);
959
- watch(
960
- () => props.options ? props.options.length : -1,
961
- () => {
962
- optsFlag.value++;
963
- }
964
- );
965
- watch(
966
- () => props.options,
967
- () => {
968
- optsFlag.value++;
969
- }
970
- );
971
- watch(optsFlag, () => {
972
- initDefaultName(props.options);
973
- reactData.resizeFlag++;
974
- });
975
- const stFlag = ref(0);
976
- watch(
977
- () => reactData.staticTabs ? reactData.staticTabs.length : -1,
978
- () => {
979
- stFlag.value++;
980
- }
981
- );
982
- watch(
983
- () => reactData.staticTabs,
984
- () => {
985
- stFlag.value++;
986
- }
987
- );
988
- watch(stFlag, () => {
989
- initDefaultName(reactData.staticTabs);
990
- reactData.resizeFlag++;
991
- });
992
- watch(computeParentTabsResizeFlag, () => {
993
- reactData.resizeFlag++;
994
- });
995
- watch(
996
- () => reactData.resizeFlag,
997
- () => {
998
- nextTick(() => {
999
- updateTabStyle();
1000
- });
1001
- }
1002
- );
1003
- onMounted(() => {
1004
- updateTabStyle();
1005
- globalEvents.on($xeTabs, "resize", updateTabStyle);
1006
- });
1007
- onUnmounted(() => {
1008
- globalEvents.off($xeTabs, "resize");
1009
- });
1010
- provide("$xeTabs", $xeTabs);
1011
- addInitName(props.modelValue, null);
1012
- initDefaultName(reactData.staticTabs.length ? reactData.staticTabs : props.options);
1013
- $xeTabs.renderVN = renderVN;
1014
- return $xeTabs;
1015
- },
1016
- render() {
1017
- return this.renderVN();
1018
- }
1019
- });
976
+ });
977
+ const stFlag = ref(0);
978
+ watch(
979
+ () => reactData.staticTabs ? reactData.staticTabs.length : -1,
980
+ () => {
981
+ stFlag.value++;
982
+ }
983
+ );
984
+ watch(
985
+ () => reactData.staticTabs,
986
+ () => {
987
+ stFlag.value++;
988
+ }
989
+ );
990
+ watch(stFlag, () => {
991
+ initDefaultName(reactData.staticTabs);
992
+ reactData.resizeFlag++;
993
+ });
994
+ watch(computeParentTabsResizeFlag, () => {
995
+ reactData.resizeFlag++;
996
+ });
997
+ watch(
998
+ () => reactData.resizeFlag,
999
+ () => {
1000
+ nextTick(() => {
1001
+ updateTabStyle();
1002
+ });
1003
+ }
1004
+ );
1005
+ onMounted(() => {
1006
+ updateTabStyle();
1007
+ globalEvents.on($xeTabs, "resize", updateTabStyle);
1008
+ });
1009
+ onUnmounted(() => {
1010
+ globalEvents.off($xeTabs, "resize");
1011
+ });
1012
+ provide("$xeTabs", $xeTabs);
1013
+ addInitName(props.modelValue, null);
1014
+ initDefaultName(reactData.staticTabs.length ? reactData.staticTabs : props.options);
1015
+ $xeTabs.renderVN = renderVN;
1016
+ return $xeTabs;
1017
+ },
1018
+ render() {
1019
+ return this.renderVN();
1020
+ }
1021
+ })
1022
+ );
1020
1023
  export {
1021
1024
  tabs_default as default
1022
1025
  };