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
@@ -70,874 +70,853 @@ function createInternalData() {
70
70
  hpTimeout: void 0
71
71
  };
72
72
  }
73
- var select_default = defineVxeComponent({
74
- name: "VxeSelect",
75
- props: {
76
- modelValue: [String, Number, Boolean, Array],
77
- defaultConfig: Object,
78
- emptyValue: {
79
- type: [String, Number, Boolean, Array],
80
- default: () => getConfig().select.emptyValue
81
- },
82
- clearable: {
83
- type: Boolean,
84
- default: () => getConfig().select.clearable
85
- },
86
- placeholder: String,
87
- readonly: {
88
- type: Boolean,
89
- default: null
90
- },
91
- loading: Boolean,
92
- disabled: {
93
- type: Boolean,
94
- default: null
95
- },
96
- multiple: Boolean,
97
- multiCharOverflow: {
98
- type: [Number, String],
99
- default: () => getConfig().select.multiCharOverflow
100
- },
101
- prefixIcon: String,
102
- allowCreate: {
103
- type: Boolean,
104
- default: () => getConfig().select.allowCreate
105
- },
106
- placement: String,
107
- lazyOptions: Array,
108
- options: Array,
109
- optionProps: Object,
110
- optionGroups: Array,
111
- optionGroupProps: Object,
112
- optionConfig: Object,
113
- className: [String, Function],
114
- /**
115
- * 已废弃,请使用 popupConfig.className
116
- * @deprecated
117
- */
118
- popupClassName: [String, Function],
119
- width: [String, Number],
120
- max: {
121
- type: [String, Number],
122
- default: null
123
- },
124
- showRadio: {
125
- type: Boolean,
126
- default: () => getConfig().select.showRadio
127
- },
128
- radioConfig: Object,
129
- showCheckbox: {
130
- type: Boolean,
131
- default: () => getConfig().select.showCheckedButton
132
- },
133
- checkboxConfig: Object,
134
- /**
135
- * 已废弃,请使用 popupConfig.zIndex
136
- * @deprecated
137
- */
138
- zIndex: Number,
139
- size: {
140
- type: String,
141
- default: () => getConfig().select.size || getConfig().size
142
- },
143
- filterable: Boolean,
144
- /**
145
- * 已废弃,被 filter-config.filterMethod 替换
146
- * @deprecated
147
- */
148
- filterMethod: Function,
149
- filterConfig: Object,
150
- remote: Boolean,
151
- remoteConfig: Object,
152
- showBadge: Boolean,
153
- badgeConfig: Object,
154
- emptyText: String,
155
- checkedClosable: {
156
- type: Boolean,
157
- default: () => getConfig().select.checkedClosable
158
- },
159
- clearClosable: {
160
- type: Boolean,
161
- default: () => getConfig().select.clearClosable
162
- },
163
- showCloseButton: {
164
- type: Boolean,
165
- default: () => getConfig().select.showCloseButton
166
- },
167
- showTotalButton: {
168
- type: Boolean,
169
- default: () => getConfig().select.showTotalButton
170
- },
171
- showCheckedButton: {
172
- type: Boolean,
173
- default: () => getConfig().select.showCheckedButton
174
- },
175
- showClearButton: {
176
- type: Boolean,
177
- default: () => getConfig().select.showClearButton
178
- },
179
- transfer: {
180
- type: Boolean,
181
- default: null
182
- },
183
- popupConfig: Object,
184
- virtualYConfig: Object,
185
- scrollY: Object,
186
- useScrollbar: {
187
- type: Boolean,
188
- default: () => getDefVal(getConfig().select.useScrollbar, getConfig().useScrollbar)
189
- },
190
- scrollbarConfig: Object,
191
- /**
192
- * 已废弃,被 remote-config.queryMethod 替换
193
- * @deprecated
194
- */
195
- remoteMethod: Function,
196
- /**
197
- * 已废弃,被 option-config.keyField 替换
198
- * @deprecated
199
- */
200
- optionId: {
201
- type: String,
202
- default: () => getConfig().select.optionId
73
+ var select_default = (
74
+ /* define-vxe-component start */
75
+ defineVxeComponent({
76
+ name: "VxeSelect",
77
+ props: {
78
+ modelValue: [String, Number, Boolean, Array],
79
+ defaultConfig: Object,
80
+ emptyValue: {
81
+ type: [String, Number, Boolean, Array],
82
+ default: () => getConfig().select.emptyValue
83
+ },
84
+ clearable: {
85
+ type: Boolean,
86
+ default: () => getConfig().select.clearable
87
+ },
88
+ placeholder: String,
89
+ readonly: {
90
+ type: Boolean,
91
+ default: null
92
+ },
93
+ loading: Boolean,
94
+ disabled: {
95
+ type: Boolean,
96
+ default: null
97
+ },
98
+ multiple: Boolean,
99
+ multiCharOverflow: {
100
+ type: [Number, String],
101
+ default: () => getConfig().select.multiCharOverflow
102
+ },
103
+ prefixIcon: String,
104
+ allowCreate: {
105
+ type: Boolean,
106
+ default: () => getConfig().select.allowCreate
107
+ },
108
+ placement: String,
109
+ lazyOptions: Array,
110
+ options: Array,
111
+ optionProps: Object,
112
+ optionGroups: Array,
113
+ optionGroupProps: Object,
114
+ optionConfig: Object,
115
+ className: [String, Function],
116
+ /**
117
+ * 已废弃,请使用 popupConfig.className
118
+ * @deprecated
119
+ */
120
+ popupClassName: [String, Function],
121
+ width: [String, Number],
122
+ max: {
123
+ type: [String, Number],
124
+ default: null
125
+ },
126
+ showRadio: {
127
+ type: Boolean,
128
+ default: () => getConfig().select.showRadio
129
+ },
130
+ radioConfig: Object,
131
+ showCheckbox: {
132
+ type: Boolean,
133
+ default: () => getConfig().select.showCheckedButton
134
+ },
135
+ checkboxConfig: Object,
136
+ /**
137
+ * 已废弃,请使用 popupConfig.zIndex
138
+ * @deprecated
139
+ */
140
+ zIndex: Number,
141
+ size: {
142
+ type: String,
143
+ default: () => getConfig().select.size || getConfig().size
144
+ },
145
+ filterable: Boolean,
146
+ /**
147
+ * 已废弃,被 filter-config.filterMethod 替换
148
+ * @deprecated
149
+ */
150
+ filterMethod: Function,
151
+ filterConfig: Object,
152
+ remote: Boolean,
153
+ remoteConfig: Object,
154
+ showBadge: Boolean,
155
+ badgeConfig: Object,
156
+ emptyText: String,
157
+ checkedClosable: {
158
+ type: Boolean,
159
+ default: () => getConfig().select.checkedClosable
160
+ },
161
+ clearClosable: {
162
+ type: Boolean,
163
+ default: () => getConfig().select.clearClosable
164
+ },
165
+ showCloseButton: {
166
+ type: Boolean,
167
+ default: () => getConfig().select.showCloseButton
168
+ },
169
+ showTotalButton: {
170
+ type: Boolean,
171
+ default: () => getConfig().select.showTotalButton
172
+ },
173
+ showCheckedButton: {
174
+ type: Boolean,
175
+ default: () => getConfig().select.showCheckedButton
176
+ },
177
+ showClearButton: {
178
+ type: Boolean,
179
+ default: () => getConfig().select.showClearButton
180
+ },
181
+ transfer: {
182
+ type: Boolean,
183
+ default: null
184
+ },
185
+ popupConfig: Object,
186
+ virtualYConfig: Object,
187
+ scrollY: Object,
188
+ useScrollbar: {
189
+ type: Boolean,
190
+ default: () => getDefVal(getConfig().select.useScrollbar, getConfig().useScrollbar)
191
+ },
192
+ scrollbarConfig: Object,
193
+ /**
194
+ * 已废弃,被 remote-config.queryMethod 替换
195
+ * @deprecated
196
+ */
197
+ remoteMethod: Function,
198
+ /**
199
+ * 已废弃,被 option-config.keyField 替换
200
+ * @deprecated
201
+ */
202
+ optionId: {
203
+ type: String,
204
+ default: () => getConfig().select.optionId
205
+ },
206
+ /**
207
+ * 已废弃,被 option-config.useKey 替换
208
+ * @deprecated
209
+ */
210
+ optionKey: Boolean
203
211
  },
204
- /**
205
- * 已废弃,被 option-config.useKey 替换
206
- * @deprecated
207
- */
208
- optionKey: Boolean
209
- },
210
- emits: ["update:modelValue", "change", "default-change", "all-change", "clear", "blur", "focus", "click", "scroll", "visible-change"],
211
- setup(props, context) {
212
- const { slots, emit } = context;
213
- const $xeModal = inject("$xeModal", null);
214
- const $xeDrawer = inject("$xeDrawer", null);
215
- const $xeTable = inject("$xeTable", null);
216
- const $xeCard = inject("$xeCard", null);
217
- const $xeForm = inject("$xeForm", null);
218
- const formItemInfo = inject("xeFormItemInfo", null);
219
- const xID = XEUtils.uniqueId();
220
- const refElem = ref();
221
- const refInput = ref();
222
- const refInpSearch = ref();
223
- const refVirtualWrapper = ref();
224
- const refOptionPanel = ref();
225
- const refVirtualSpaceElem = ref();
226
- const refVirtualBody = ref();
227
- const { computeSize } = useFns.useSize(props);
228
- const { computeIsVScrollbar } = useFns.useVScrollbar(props);
229
- const reactData = reactive(createReactData());
230
- const internalData = createInternalData();
231
- const refMaps = {
232
- refElem
233
- };
234
- const $xeSelect = {
235
- xID,
236
- props,
237
- context,
238
- reactData,
239
- internalData,
240
- getRefMaps: () => refMaps
241
- };
242
- const { refTrackXElem, refTrackYElem, refThumbXElem, refThumbYElem, updateThumbSize, updateThumbOffset, clickTrackXEvent, clickTrackYEvent, pointerdownThumbXEvent, pointermoveThumbXEvent, cleatPointerThumbEvent, pointerdownThumbYEvent, pointermoveThumbYEvent } = useFns.useInitVScrollbar($xeSelect);
243
- const computeFormReadonly = computed(() => {
244
- const { readonly } = props;
245
- if (readonly === null) {
246
- if ($xeForm) {
247
- return $xeForm.props.readonly;
212
+ emits: ["update:modelValue", "change", "default-change", "all-change", "clear", "blur", "focus", "click", "scroll", "visible-change"],
213
+ setup(props, context) {
214
+ const { slots, emit } = context;
215
+ const $xeModal = inject("$xeModal", null);
216
+ const $xeDrawer = inject("$xeDrawer", null);
217
+ const $xeTable = inject("$xeTable", null);
218
+ const $xeCard = inject("$xeCard", null);
219
+ const $xeForm = inject("$xeForm", null);
220
+ const formItemInfo = inject("xeFormItemInfo", null);
221
+ const xID = XEUtils.uniqueId();
222
+ const refElem = ref();
223
+ const refInput = ref();
224
+ const refInpSearch = ref();
225
+ const refVirtualWrapper = ref();
226
+ const refOptionPanel = ref();
227
+ const refVirtualSpaceElem = ref();
228
+ const refVirtualBody = ref();
229
+ const { computeSize } = useFns.useSize(props);
230
+ const { computeIsVScrollbar } = useFns.useVScrollbar(props);
231
+ const reactData = reactive(createReactData());
232
+ const internalData = createInternalData();
233
+ const refMaps = {
234
+ refElem
235
+ };
236
+ const $xeSelect = {
237
+ xID,
238
+ props,
239
+ context,
240
+ reactData,
241
+ internalData,
242
+ getRefMaps: () => refMaps
243
+ };
244
+ const { refTrackXElem, refTrackYElem, refThumbXElem, refThumbYElem, updateThumbSize, updateThumbOffset, clickTrackXEvent, clickTrackYEvent, pointerdownThumbXEvent, pointermoveThumbXEvent, cleatPointerThumbEvent, pointerdownThumbYEvent, pointermoveThumbYEvent } = useFns.useInitVScrollbar($xeSelect);
245
+ const computeFormReadonly = computed(() => {
246
+ const { readonly } = props;
247
+ if (readonly === null) {
248
+ if ($xeForm) {
249
+ return $xeForm.props.readonly;
250
+ }
251
+ return false;
248
252
  }
249
- return false;
250
- }
251
- return readonly;
252
- });
253
- const computeIsDisabled = computed(() => {
254
- const { disabled } = props;
255
- if (disabled === null) {
256
- if ($xeForm) {
257
- return $xeForm.props.disabled;
253
+ return readonly;
254
+ });
255
+ const computeIsDisabled = computed(() => {
256
+ const { disabled } = props;
257
+ if (disabled === null) {
258
+ if ($xeForm) {
259
+ return $xeForm.props.disabled;
260
+ }
261
+ return false;
258
262
  }
259
- return false;
260
- }
261
- return disabled;
262
- });
263
- const computeBtnTransfer = computed(() => {
264
- const { transfer } = props;
265
- const popupOpts = computePopupOpts.value;
266
- if (XEUtils.isBoolean(popupOpts.transfer)) {
267
- return popupOpts.transfer;
268
- }
269
- if (transfer === null) {
270
- const globalTransfer = getConfig().select.transfer;
271
- if (XEUtils.isBoolean(globalTransfer)) {
272
- return globalTransfer;
273
- }
274
- if ($xeTable || $xeModal || $xeDrawer || $xeCard || $xeForm) {
275
- return true;
263
+ return disabled;
264
+ });
265
+ const computeBtnTransfer = computed(() => {
266
+ const { transfer } = props;
267
+ const popupOpts = computePopupOpts.value;
268
+ if (XEUtils.isBoolean(popupOpts.transfer)) {
269
+ return popupOpts.transfer;
276
270
  }
277
- }
278
- return transfer;
279
- });
280
- const computeInpPlaceholder = computed(() => {
281
- const { placeholder } = props;
282
- if (placeholder) {
283
- return getFuncText(placeholder);
284
- }
285
- const globalPlaceholder = getConfig().select.placeholder;
286
- if (globalPlaceholder) {
287
- return getFuncText(globalPlaceholder);
288
- }
289
- return getI18n("vxe.base.pleaseSelect");
290
- });
291
- const computeDefaultOpts = computed(() => {
292
- return Object.assign({}, props.defaultConfig);
293
- });
294
- const computePropsOpts = computed(() => {
295
- return Object.assign({}, getConfig().select.optionProps, props.optionProps);
296
- });
297
- const computeGroupPropsOpts = computed(() => {
298
- return Object.assign({}, getConfig().select.optionGroupProps, props.optionGroupProps);
299
- });
300
- const computeLabelField = computed(() => {
301
- const propsOpts = computePropsOpts.value;
302
- return propsOpts.label || "label";
303
- });
304
- const computeValueField = computed(() => {
305
- const propsOpts = computePropsOpts.value;
306
- return propsOpts.value || "value";
307
- });
308
- const computeGroupLabelField = computed(() => {
309
- const groupPropsOpts = computeGroupPropsOpts.value;
310
- return groupPropsOpts.label || "label";
311
- });
312
- const computeGroupOptionsField = computed(() => {
313
- const groupPropsOpts = computeGroupPropsOpts.value;
314
- return groupPropsOpts.options || "options";
315
- });
316
- const computeIsMaximize = computed(() => {
317
- const selectVals = computeSelectVals.value;
318
- return checkMaxLimit(selectVals);
319
- });
320
- const computePopupOpts = computed(() => {
321
- return Object.assign({}, getConfig().select.popupConfig, props.popupConfig);
322
- });
323
- const computeVirtualYOpts = computed(() => {
324
- return Object.assign({}, getConfig().select.virtualYConfig || getConfig().select.scrollY, props.virtualYConfig || props.scrollY);
325
- });
326
- const computeRemoteOpts = computed(() => {
327
- return Object.assign({}, getConfig().select.remoteConfig, props.remoteConfig);
328
- });
329
- const computeBadgeOpts = computed(() => {
330
- return Object.assign({}, getConfig().select.badgeConfig, props.badgeConfig);
331
- });
332
- const computeBadgeCountNum = computed(() => {
333
- const { showBadge } = props;
334
- if (!showBadge) {
335
- return 0;
336
- }
337
- const badgeOpts = computeBadgeOpts.value;
338
- const { count } = badgeOpts;
339
- return count ? XEUtils.toNumber(count) : 0;
340
- });
341
- const computeBadgeLabel = computed(() => {
342
- const { showBadge } = props;
343
- if (!showBadge) {
344
- return "";
345
- }
346
- const badgeOpts = computeBadgeOpts.value;
347
- const { dot, text, max } = badgeOpts;
348
- if (dot) {
349
- return "";
350
- }
351
- if (text) {
352
- return `${text}`;
353
- }
354
- const countNum = computeBadgeCountNum.value;
355
- if (countNum) {
356
- const maxNum = max ? XEUtils.toNumber(max) : 99;
357
- return countNum > maxNum ? `${maxNum}+` : `${countNum}`;
358
- }
359
- return "";
360
- });
361
- const computeFilterOpts = computed(() => {
362
- return Object.assign({}, getConfig().select.filterConfig, props.filterConfig);
363
- });
364
- const computeOptionOpts = computed(() => {
365
- return Object.assign({}, getConfig().select.optionConfig, props.optionConfig);
366
- });
367
- const computeRadioOpts = computed(() => {
368
- return Object.assign({}, getConfig().select.radioConfig, props.radioConfig);
369
- });
370
- const computeCheckboxOpts = computed(() => {
371
- return Object.assign({}, getConfig().select.checkboxConfig, props.checkboxConfig);
372
- });
373
- const computeMultiMaxCharNum = computed(() => {
374
- return XEUtils.toNumber(props.multiCharOverflow);
375
- });
376
- const computeCurrStyle = computed(() => {
377
- const { width } = props;
378
- const stys = {};
379
- if (width) {
380
- stys.width = toCssUnit(width);
381
- }
382
- return stys;
383
- });
384
- const computePopupWrapperStyle = computed(() => {
385
- const popupOpts = computePopupOpts.value;
386
- const { height, width } = popupOpts;
387
- const stys = {};
388
- if (width) {
389
- stys.width = toCssUnit(width);
390
- }
391
- if (height) {
392
- stys.height = toCssUnit(height);
393
- stys.maxHeight = toCssUnit(height);
394
- }
395
- return stys;
396
- });
397
- const computeSelectVals = computed(() => {
398
- const { modelValue, multiple } = props;
399
- let vals = [];
400
- if (XEUtils.isArray(modelValue)) {
401
- vals = modelValue;
402
- } else {
403
- if (multiple) {
404
- if (!eqEmptyValue(modelValue)) {
405
- vals = `${modelValue}`.indexOf(",") > -1 ? `${modelValue}`.split(",") : [modelValue];
271
+ if (transfer === null) {
272
+ const globalTransfer = getConfig().select.transfer;
273
+ if (XEUtils.isBoolean(globalTransfer)) {
274
+ return globalTransfer;
406
275
  }
407
- } else {
408
- vals = modelValue === null || modelValue === void 0 ? [] : [modelValue];
409
- }
410
- }
411
- return vals;
412
- });
413
- const computeFullLabel = computed(() => {
414
- const { remote } = props;
415
- const { reactFlag } = reactData;
416
- const selectVals = computeSelectVals.value;
417
- if (remote && reactFlag) {
418
- return selectVals.map((val) => getRemoteSelectLabel(val)).join(", ");
419
- }
420
- return selectVals.map((val) => getSelectLabel(val)).join(", ");
421
- });
422
- const computeSelectLabel = computed(() => {
423
- const { remote, multiple } = props;
424
- const { reactFlag } = reactData;
425
- const multiMaxCharNum = computeMultiMaxCharNum.value;
426
- const selectVals = computeSelectVals.value;
427
- if (remote && reactFlag) {
428
- return selectVals.map((val) => getRemoteSelectLabel(val)).join(", ");
429
- }
430
- const labels = selectVals.map((val) => getSelectLabel(val));
431
- if (multiple && multiMaxCharNum > 0 && labels.length > multiMaxCharNum) {
432
- return `${labels.slice(0, multiMaxCharNum)}...`;
433
- }
434
- return labels.join(", ");
435
- });
436
- const computeScrollbarOpts = computed(() => {
437
- return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
438
- });
439
- const computeScrollbarXOpts = computed(() => {
440
- const scrollbarOpts = computeScrollbarOpts.value;
441
- return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
442
- visible: false
276
+ if ($xeTable || $xeModal || $xeDrawer || $xeCard || $xeForm) {
277
+ return true;
278
+ }
279
+ }
280
+ return transfer;
443
281
  });
444
- });
445
- const computeScrollbarYOpts = computed(() => {
446
- const scrollbarOpts = computeScrollbarOpts.value;
447
- return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
448
- });
449
- const computeScrollXHeight = computed(() => {
450
- const scrollbarOpts = computeScrollbarOpts.value;
451
- const scrollbarXOpts = computeScrollbarXOpts.value;
452
- return getDefVal(getDefVal(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
453
- });
454
- const computeScrollYWidth = computed(() => {
455
- const scrollbarOpts = computeScrollbarOpts.value;
456
- const scrollbarYOpts = computeScrollbarYOpts.value;
457
- return getDefVal(getDefVal(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
458
- });
459
- const computeScrollXVisible = computed(() => {
460
- const scrollbarOpts = computeScrollbarOpts.value;
461
- const scrollbarXOpts = computeScrollbarXOpts.value;
462
- return getDefVal(scrollbarXOpts.visible, scrollbarOpts.visible);
463
- });
464
- const computeScrollYVisible = computed(() => {
465
- const scrollbarOpts = computeScrollbarOpts.value;
466
- const scrollbarYOpts = computeScrollbarYOpts.value;
467
- return getDefVal(scrollbarYOpts.visible, scrollbarOpts.visible);
468
- });
469
- const computeScrollXAutoHide = computed(() => {
470
- const scrollbarOpts = computeScrollbarOpts.value;
471
- const scrollbarXOpts = computeScrollbarXOpts.value;
472
- return getDefVal(getDefVal(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
473
- });
474
- const computeScrollYAutoHide = computed(() => {
475
- const scrollbarOpts = computeScrollbarOpts.value;
476
- const scrollbarYOpts = computeScrollbarYOpts.value;
477
- return getDefVal(getDefVal(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
478
- });
479
- const computeScrollbarWrapperClss = computed(() => {
480
- const { yThumbHeight, xThumbWidth } = reactData;
481
- const scrollbarOpts = computeScrollbarOpts.value;
482
- const scrollbarXToTop = computeScrollbarXToTop.value;
483
- const scrollbarYToLeft = computeScrollbarYToLeft.value;
484
- const scrollXVisible = computeScrollXVisible.value;
485
- const scrollYVisible = computeScrollYVisible.value;
486
- return domUtils.buildClass(
487
- [
488
- "vxe-scrollbar is--virtual",
489
- scrollbarOpts.fluentOverlay ? "is--fluent-overlay" : "is--default-mode",
490
- `ov-x--${scrollXVisible === false ? "hidden" : "visible"}`,
491
- `ov-y--${scrollYVisible === false ? "hidden" : "visible"}`,
492
- `sx-pos--${scrollbarXToTop ? "top" : "bottom"}`,
493
- `sy-pos--${scrollbarYToLeft ? "left" : "right"}`
494
- ],
495
- {
496
- "overflow-y": yThumbHeight,
497
- "overflow-x": xThumbWidth
282
+ const computeInpPlaceholder = computed(() => {
283
+ const { placeholder } = props;
284
+ if (placeholder) {
285
+ return getFuncText(placeholder);
498
286
  }
499
- );
500
- });
501
- const computeScrollbarXToTop = computed(() => {
502
- const scrollbarXOpts = computeScrollbarXOpts.value;
503
- return scrollbarXOpts.position === "top";
504
- });
505
- const computeScrollbarYToLeft = computed(() => {
506
- const scrollbarYOpts = computeScrollbarYOpts.value;
507
- return scrollbarYOpts.position === "left";
508
- });
509
- const callSlot = (slotFunc, params) => {
510
- if (slotFunc) {
511
- if (XEUtils.isString(slotFunc)) {
512
- slotFunc = slots[slotFunc] || null;
513
- }
514
- if (XEUtils.isFunction(slotFunc)) {
515
- return getSlotVNs(slotFunc(params));
516
- }
517
- }
518
- return [];
519
- };
520
- const dispatchEvent = (type, params, evnt) => {
521
- emit(type, createEvent(evnt, { $select: $xeSelect }, params));
522
- };
523
- const emitModel = (value) => {
524
- emit("update:modelValue", value);
525
- };
526
- const emitDefaultValue = (value) => {
527
- emitModel(value);
528
- dispatchEvent("default-change", { value }, null);
529
- };
530
- const getOptKey = () => {
531
- const optionOpts = computeOptionOpts.value;
532
- return optionOpts.keyField || props.optionId || "_X_OPTION_KEY";
533
- };
534
- const getOptId = (option) => {
535
- const optid = option[getOptKey()];
536
- return optid ? encodeURIComponent(optid) : "";
537
- };
538
- const checkMaxLimit = (selectVals) => {
539
- const { multiple, max } = props;
540
- if (multiple && max) {
541
- return selectVals.length >= XEUtils.toNumber(max);
542
- }
543
- return false;
544
- };
545
- const getRemoteSelectLabel = (value) => {
546
- const { lazyOptions } = props;
547
- const { remoteValMaps, optFullValMaps } = internalData;
548
- const valueField = computeValueField.value;
549
- const labelField = computeLabelField.value;
550
- const remoteItem = remoteValMaps[value] || optFullValMaps[value];
551
- const item = remoteItem ? remoteItem.item : null;
552
- if (item) {
553
- return XEUtils.toValueString(item[labelField]);
554
- }
555
- if (lazyOptions) {
556
- const lazyItem = lazyOptions.find((item2) => item2[valueField] === value);
557
- if (lazyItem) {
558
- return lazyItem[labelField];
559
- }
560
- }
561
- return value;
562
- };
563
- const getSelectLabel = (value) => {
564
- const { lazyOptions } = props;
565
- const { optFullValMaps } = internalData;
566
- const valueField = computeValueField.value;
567
- const labelField = computeLabelField.value;
568
- const cacheItem = reactData.reactFlag ? optFullValMaps[value] : null;
569
- if (cacheItem) {
570
- return cacheItem.item[labelField];
571
- }
572
- if (lazyOptions) {
573
- const lazyItem = lazyOptions.find((item) => item[valueField] === value);
574
- if (lazyItem) {
575
- return lazyItem[labelField];
576
- }
577
- }
578
- return value;
579
- };
580
- const cacheItemMap = (datas) => {
581
- const groupOptionsField = computeGroupOptionsField.value;
582
- const valueField = computeValueField.value;
583
- const key = getOptKey();
584
- const groupKeyMaps = {};
585
- const fullKeyMaps = {};
586
- const list = [];
587
- const handleOptItem = (item) => {
588
- list.push(item);
589
- let optid = getOptId(item);
590
- if (!optid) {
591
- optid = getOptUniqueId();
592
- item[key] = optid;
593
- }
594
- fullKeyMaps[item[valueField]] = {
595
- key: optid,
596
- item,
597
- _index: -1
598
- };
599
- };
600
- datas.forEach((group) => {
601
- handleOptItem(group);
602
- if (group[groupOptionsField]) {
603
- groupKeyMaps[group[key]] = group;
604
- group[groupOptionsField].forEach(handleOptItem);
287
+ const globalPlaceholder = getConfig().select.placeholder;
288
+ if (globalPlaceholder) {
289
+ return getFuncText(globalPlaceholder);
605
290
  }
291
+ return getI18n("vxe.base.pleaseSelect");
606
292
  });
607
- internalData.fullData = list;
608
- internalData.optGroupKeyMaps = groupKeyMaps;
609
- internalData.optFullValMaps = fullKeyMaps;
610
- reactData.reactFlag++;
611
- handleOption();
612
- };
613
- const handleOption = () => {
614
- const { remote, modelValue, filterable } = props;
615
- const { searchValue } = reactData;
616
- const { fullData, optFullValMaps } = internalData;
617
- const labelField = computeLabelField.value;
618
- const valueField = computeValueField.value;
619
- const filterOpts = computeFilterOpts.value;
620
- const frMethod = filterOpts.filterMethod || props.filterMethod;
621
- const searchStr = `${searchValue || ""}`.toLowerCase();
622
- let avList = [];
623
- if (remote) {
624
- avList = fullData.filter(isOptionVisible);
625
- } else {
626
- if (filterable && frMethod) {
627
- avList = searchValue ? fullData.filter((option) => {
628
- return isOptionVisible(option) && frMethod({
629
- $select: $xeSelect,
630
- group: null,
631
- option,
632
- filterValue: searchValue,
633
- searchValue,
634
- value: modelValue
635
- });
636
- }) : fullData;
637
- } else if (filterable) {
638
- avList = searchStr ? fullData.filter((option) => isOptionVisible(option) && `${option[labelField] || option[valueField]}`.toLowerCase().indexOf(searchStr) > -1) : fullData;
293
+ const computeDefaultOpts = computed(() => {
294
+ return Object.assign({}, props.defaultConfig);
295
+ });
296
+ const computePropsOpts = computed(() => {
297
+ return Object.assign({}, getConfig().select.optionProps, props.optionProps);
298
+ });
299
+ const computeGroupPropsOpts = computed(() => {
300
+ return Object.assign({}, getConfig().select.optionGroupProps, props.optionGroupProps);
301
+ });
302
+ const computeLabelField = computed(() => {
303
+ const propsOpts = computePropsOpts.value;
304
+ return propsOpts.label || "label";
305
+ });
306
+ const computeValueField = computed(() => {
307
+ const propsOpts = computePropsOpts.value;
308
+ return propsOpts.value || "value";
309
+ });
310
+ const computeGroupLabelField = computed(() => {
311
+ const groupPropsOpts = computeGroupPropsOpts.value;
312
+ return groupPropsOpts.label || "label";
313
+ });
314
+ const computeGroupOptionsField = computed(() => {
315
+ const groupPropsOpts = computeGroupPropsOpts.value;
316
+ return groupPropsOpts.options || "options";
317
+ });
318
+ const computeIsMaximize = computed(() => {
319
+ const selectVals = computeSelectVals.value;
320
+ return checkMaxLimit(selectVals);
321
+ });
322
+ const computePopupOpts = computed(() => {
323
+ return Object.assign({}, getConfig().select.popupConfig, props.popupConfig);
324
+ });
325
+ const computeVirtualYOpts = computed(() => {
326
+ return Object.assign({}, getConfig().select.virtualYConfig || getConfig().select.scrollY, props.virtualYConfig || props.scrollY);
327
+ });
328
+ const computeRemoteOpts = computed(() => {
329
+ return Object.assign({}, getConfig().select.remoteConfig, props.remoteConfig);
330
+ });
331
+ const computeBadgeOpts = computed(() => {
332
+ return Object.assign({}, getConfig().select.badgeConfig, props.badgeConfig);
333
+ });
334
+ const computeBadgeCountNum = computed(() => {
335
+ const { showBadge } = props;
336
+ if (!showBadge) {
337
+ return 0;
338
+ }
339
+ const badgeOpts = computeBadgeOpts.value;
340
+ const { count } = badgeOpts;
341
+ return count ? XEUtils.toNumber(count) : 0;
342
+ });
343
+ const computeBadgeLabel = computed(() => {
344
+ const { showBadge } = props;
345
+ if (!showBadge) {
346
+ return "";
347
+ }
348
+ const badgeOpts = computeBadgeOpts.value;
349
+ const { dot, text, max } = badgeOpts;
350
+ if (dot) {
351
+ return "";
352
+ }
353
+ if (text) {
354
+ return `${text}`;
355
+ }
356
+ const countNum = computeBadgeCountNum.value;
357
+ if (countNum) {
358
+ const maxNum = max ? XEUtils.toNumber(max) : 99;
359
+ return countNum > maxNum ? `${maxNum}+` : `${countNum}`;
360
+ }
361
+ return "";
362
+ });
363
+ const computeFilterOpts = computed(() => {
364
+ return Object.assign({}, getConfig().select.filterConfig, props.filterConfig);
365
+ });
366
+ const computeOptionOpts = computed(() => {
367
+ return Object.assign({}, getConfig().select.optionConfig, props.optionConfig);
368
+ });
369
+ const computeRadioOpts = computed(() => {
370
+ return Object.assign({}, getConfig().select.radioConfig, props.radioConfig);
371
+ });
372
+ const computeCheckboxOpts = computed(() => {
373
+ return Object.assign({}, getConfig().select.checkboxConfig, props.checkboxConfig);
374
+ });
375
+ const computeMultiMaxCharNum = computed(() => {
376
+ return XEUtils.toNumber(props.multiCharOverflow);
377
+ });
378
+ const computeCurrStyle = computed(() => {
379
+ const { width } = props;
380
+ const stys = {};
381
+ if (width) {
382
+ stys.width = toCssUnit(width);
383
+ }
384
+ return stys;
385
+ });
386
+ const computePopupWrapperStyle = computed(() => {
387
+ const popupOpts = computePopupOpts.value;
388
+ const { height, width } = popupOpts;
389
+ const stys = {};
390
+ if (width) {
391
+ stys.width = toCssUnit(width);
392
+ }
393
+ if (height) {
394
+ stys.height = toCssUnit(height);
395
+ stys.maxHeight = toCssUnit(height);
396
+ }
397
+ return stys;
398
+ });
399
+ const computeSelectVals = computed(() => {
400
+ const { modelValue, multiple } = props;
401
+ let vals = [];
402
+ if (XEUtils.isArray(modelValue)) {
403
+ vals = modelValue;
639
404
  } else {
640
- avList = fullData.filter(isOptionVisible);
405
+ if (multiple) {
406
+ if (!eqEmptyValue(modelValue)) {
407
+ vals = `${modelValue}`.indexOf(",") > -1 ? `${modelValue}`.split(",") : [modelValue];
408
+ }
409
+ } else {
410
+ vals = modelValue === null || modelValue === void 0 ? [] : [modelValue];
411
+ }
641
412
  }
642
- }
643
- avList.forEach((item, index) => {
644
- const cacheItem = optFullValMaps[item[valueField]];
645
- if (cacheItem) {
646
- cacheItem._index = index;
413
+ return vals;
414
+ });
415
+ const computeFullLabel = computed(() => {
416
+ const { remote } = props;
417
+ const { reactFlag } = reactData;
418
+ const selectVals = computeSelectVals.value;
419
+ if (remote && reactFlag) {
420
+ return selectVals.map((val) => getRemoteSelectLabel(val)).join(", ");
647
421
  }
422
+ return selectVals.map((val) => getSelectLabel(val)).join(", ");
648
423
  });
649
- internalData.afterVisibleList = avList;
650
- return nextTick();
651
- };
652
- const setCurrentOption = (option) => {
653
- if (option) {
654
- reactData.currentOption = option;
655
- }
656
- };
657
- const updateZIndex = () => {
658
- const popupOpts = computePopupOpts.value;
659
- const customZIndex = popupOpts.zIndex || props.zIndex;
660
- if (customZIndex) {
661
- reactData.panelIndex = XEUtils.toNumber(customZIndex);
662
- } else if (reactData.panelIndex < getLastZIndex()) {
663
- reactData.panelIndex = nextZIndex();
664
- }
665
- };
666
- const updatePlacement = () => {
667
- const { placement } = props;
668
- const { panelIndex } = reactData;
669
- const targetElem = refElem.value;
670
- const panelElem = refOptionPanel.value;
671
- const btnTransfer = computeBtnTransfer.value;
672
- const popupOpts = computePopupOpts.value;
673
- const handleStyle = () => {
674
- const ppObj = updatePanelPlacement(targetElem, panelElem, {
675
- placement: popupOpts.placement || placement,
676
- defaultPlacement: popupOpts.defaultPlacement,
677
- appendTo: popupOpts.appendTo,
678
- teleportTo: btnTransfer
679
- });
680
- const panelStyle = Object.assign(ppObj.style, {
681
- zIndex: panelIndex
682
- });
683
- reactData.panelStyle = panelStyle;
684
- reactData.panelPlacement = ppObj.placement;
685
- };
686
- handleStyle();
687
- return nextTick().then(handleStyle);
688
- };
689
- const handleScrollSelect = () => {
690
- nextTick(() => {
691
- const { isAniVisible, visiblePanel } = reactData;
692
- const { optFullValMaps } = internalData;
424
+ const computeSelectLabel = computed(() => {
425
+ const { remote, multiple } = props;
426
+ const { reactFlag } = reactData;
427
+ const multiMaxCharNum = computeMultiMaxCharNum.value;
693
428
  const selectVals = computeSelectVals.value;
694
- if (selectVals.length && isAniVisible && visiblePanel) {
695
- const cacheItem = reactData.reactFlag ? optFullValMaps[`${selectVals[0]}`] : null;
696
- if (cacheItem) {
697
- reactData.currentOption = cacheItem.item;
698
- handleScrollToOption(cacheItem.item);
699
- }
429
+ if (remote && reactFlag) {
430
+ return selectVals.map((val) => getRemoteSelectLabel(val)).join(", ");
431
+ }
432
+ const labels = selectVals.map((val) => getSelectLabel(val));
433
+ if (multiple && multiMaxCharNum > 0 && labels.length > multiMaxCharNum) {
434
+ return `${labels.slice(0, multiMaxCharNum)}...`;
700
435
  }
436
+ return labels.join(", ");
701
437
  });
702
- };
703
- const showOptionPanel = () => {
704
- const { loading, filterable, remote } = props;
705
- const { fullData, hpTimeout } = internalData;
706
- const isDisabled = computeIsDisabled.value;
707
- const remoteOpts = computeRemoteOpts.value;
708
- const selectVals = computeSelectVals.value;
709
- if (!loading && !isDisabled) {
710
- if (hpTimeout) {
711
- clearTimeout(hpTimeout);
712
- internalData.hpTimeout = void 0;
713
- }
714
- if (!reactData.initialized) {
715
- reactData.initialized = true;
716
- nextTick(() => {
717
- bindScrollbarResize();
718
- });
438
+ const computeScrollbarOpts = computed(() => {
439
+ return Object.assign({}, getConfig().tree.scrollbarConfig, props.scrollbarConfig);
440
+ });
441
+ const computeScrollbarXOpts = computed(() => {
442
+ const scrollbarOpts = computeScrollbarOpts.value;
443
+ return Object.assign({}, getConfig().scrollbar.xConfig, scrollbarOpts.xConfig, {
444
+ visible: false
445
+ });
446
+ });
447
+ const computeScrollbarYOpts = computed(() => {
448
+ const scrollbarOpts = computeScrollbarOpts.value;
449
+ return Object.assign({}, getConfig().scrollbar.yConfig, scrollbarOpts.yConfig);
450
+ });
451
+ const computeScrollXHeight = computed(() => {
452
+ const scrollbarOpts = computeScrollbarOpts.value;
453
+ const scrollbarXOpts = computeScrollbarXOpts.value;
454
+ return getDefVal(getDefVal(scrollbarXOpts.height, scrollbarOpts.height), getConfig().scrollbar.height);
455
+ });
456
+ const computeScrollYWidth = computed(() => {
457
+ const scrollbarOpts = computeScrollbarOpts.value;
458
+ const scrollbarYOpts = computeScrollbarYOpts.value;
459
+ return getDefVal(getDefVal(scrollbarYOpts.width, scrollbarOpts.width), getConfig().scrollbar.width);
460
+ });
461
+ const computeScrollXVisible = computed(() => {
462
+ const scrollbarOpts = computeScrollbarOpts.value;
463
+ const scrollbarXOpts = computeScrollbarXOpts.value;
464
+ return getDefVal(scrollbarXOpts.visible, scrollbarOpts.visible);
465
+ });
466
+ const computeScrollYVisible = computed(() => {
467
+ const scrollbarOpts = computeScrollbarOpts.value;
468
+ const scrollbarYOpts = computeScrollbarYOpts.value;
469
+ return getDefVal(scrollbarYOpts.visible, scrollbarOpts.visible);
470
+ });
471
+ const computeScrollXAutoHide = computed(() => {
472
+ const scrollbarOpts = computeScrollbarOpts.value;
473
+ const scrollbarXOpts = computeScrollbarXOpts.value;
474
+ return getDefVal(getDefVal(scrollbarXOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
475
+ });
476
+ const computeScrollYAutoHide = computed(() => {
477
+ const scrollbarOpts = computeScrollbarOpts.value;
478
+ const scrollbarYOpts = computeScrollbarYOpts.value;
479
+ return getDefVal(getDefVal(scrollbarYOpts.autoHide, scrollbarOpts.autoHide), getConfig().scrollbar.autoHide);
480
+ });
481
+ const computeScrollbarWrapperClss = computed(() => {
482
+ const { yThumbHeight, xThumbWidth } = reactData;
483
+ const scrollbarOpts = computeScrollbarOpts.value;
484
+ const scrollbarXToTop = computeScrollbarXToTop.value;
485
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
486
+ const scrollXVisible = computeScrollXVisible.value;
487
+ const scrollYVisible = computeScrollYVisible.value;
488
+ return domUtils.buildClass(
489
+ [
490
+ "vxe-scrollbar is--virtual",
491
+ scrollbarOpts.fluentOverlay ? "is--fluent-overlay" : "is--default-mode",
492
+ `ov-x--${scrollXVisible === false ? "hidden" : "visible"}`,
493
+ `ov-y--${scrollYVisible === false ? "hidden" : "visible"}`,
494
+ `sx-pos--${scrollbarXToTop ? "top" : "bottom"}`,
495
+ `sy-pos--${scrollbarYToLeft ? "left" : "right"}`
496
+ ],
497
+ {
498
+ "overflow-y": yThumbHeight,
499
+ "overflow-x": xThumbWidth
500
+ }
501
+ );
502
+ });
503
+ const computeScrollbarXToTop = computed(() => {
504
+ const scrollbarXOpts = computeScrollbarXOpts.value;
505
+ return scrollbarXOpts.position === "top";
506
+ });
507
+ const computeScrollbarYToLeft = computed(() => {
508
+ const scrollbarYOpts = computeScrollbarYOpts.value;
509
+ return scrollbarYOpts.position === "left";
510
+ });
511
+ const callSlot = (slotFunc, params) => {
512
+ if (slotFunc) {
513
+ if (XEUtils.isString(slotFunc)) {
514
+ slotFunc = slots[slotFunc] || null;
515
+ }
516
+ if (XEUtils.isFunction(slotFunc)) {
517
+ return getSlotVNs(slotFunc(params));
518
+ }
719
519
  }
720
- reactData.isActivated = true;
721
- reactData.isAniVisible = true;
722
- if (filterable) {
723
- if (remote && remoteOpts.enabled && (remoteOpts.autoLoad && !fullData.length || fullData.length && remoteOpts.clearOnClose)) {
724
- handleSearchEvent();
520
+ return [];
521
+ };
522
+ const dispatchEvent = (type, params, evnt) => {
523
+ emit(type, createEvent(evnt, { $select: $xeSelect }, params));
524
+ };
525
+ const emitModel = (value) => {
526
+ emit("update:modelValue", value);
527
+ };
528
+ const emitDefaultValue = (value) => {
529
+ emitModel(value);
530
+ dispatchEvent("default-change", { value }, null);
531
+ };
532
+ const getOptKey = () => {
533
+ const optionOpts = computeOptionOpts.value;
534
+ return optionOpts.keyField || props.optionId || "_X_OPTION_KEY";
535
+ };
536
+ const getOptId = (option) => {
537
+ const optid = option[getOptKey()];
538
+ return optid ? encodeURIComponent(optid) : "";
539
+ };
540
+ const checkMaxLimit = (selectVals) => {
541
+ const { multiple, max } = props;
542
+ if (multiple && max) {
543
+ return selectVals.length >= XEUtils.toNumber(max);
544
+ }
545
+ return false;
546
+ };
547
+ const getRemoteSelectLabel = (value) => {
548
+ const { lazyOptions } = props;
549
+ const { remoteValMaps, optFullValMaps } = internalData;
550
+ const valueField = computeValueField.value;
551
+ const labelField = computeLabelField.value;
552
+ const remoteItem = remoteValMaps[value] || optFullValMaps[value];
553
+ const item = remoteItem ? remoteItem.item : null;
554
+ if (item) {
555
+ return XEUtils.toValueString(item[labelField]);
556
+ }
557
+ if (lazyOptions) {
558
+ const lazyItem = lazyOptions.find((item2) => item2[valueField] === value);
559
+ if (lazyItem) {
560
+ return lazyItem[labelField];
561
+ }
562
+ }
563
+ return value;
564
+ };
565
+ const getSelectLabel = (value) => {
566
+ const { lazyOptions } = props;
567
+ const { optFullValMaps } = internalData;
568
+ const valueField = computeValueField.value;
569
+ const labelField = computeLabelField.value;
570
+ const cacheItem = reactData.reactFlag ? optFullValMaps[value] : null;
571
+ if (cacheItem) {
572
+ return cacheItem.item[labelField];
573
+ }
574
+ if (lazyOptions) {
575
+ const lazyItem = lazyOptions.find((item) => item[valueField] === value);
576
+ if (lazyItem) {
577
+ return lazyItem[labelField];
578
+ }
579
+ }
580
+ return value;
581
+ };
582
+ const cacheItemMap = (datas) => {
583
+ const groupOptionsField = computeGroupOptionsField.value;
584
+ const valueField = computeValueField.value;
585
+ const key = getOptKey();
586
+ const groupKeyMaps = {};
587
+ const fullKeyMaps = {};
588
+ const list = [];
589
+ const handleOptItem = (item) => {
590
+ list.push(item);
591
+ let optid = getOptId(item);
592
+ if (!optid) {
593
+ optid = getOptUniqueId();
594
+ item[key] = optid;
595
+ }
596
+ fullKeyMaps[item[valueField]] = {
597
+ key: optid,
598
+ item,
599
+ _index: -1
600
+ };
601
+ };
602
+ datas.forEach((group) => {
603
+ handleOptItem(group);
604
+ if (group[groupOptionsField]) {
605
+ groupKeyMaps[group[key]] = group;
606
+ group[groupOptionsField].forEach(handleOptItem);
607
+ }
608
+ });
609
+ internalData.fullData = list;
610
+ internalData.optGroupKeyMaps = groupKeyMaps;
611
+ internalData.optFullValMaps = fullKeyMaps;
612
+ reactData.reactFlag++;
613
+ handleOption();
614
+ };
615
+ const handleOption = () => {
616
+ const { remote, modelValue, filterable } = props;
617
+ const { searchValue } = reactData;
618
+ const { fullData, optFullValMaps } = internalData;
619
+ const labelField = computeLabelField.value;
620
+ const valueField = computeValueField.value;
621
+ const filterOpts = computeFilterOpts.value;
622
+ const frMethod = filterOpts.filterMethod || props.filterMethod;
623
+ const searchStr = `${searchValue || ""}`.toLowerCase();
624
+ let avList = [];
625
+ if (remote) {
626
+ avList = fullData.filter(isOptionVisible);
627
+ } else {
628
+ if (filterable && frMethod) {
629
+ avList = searchValue ? fullData.filter((option) => {
630
+ return isOptionVisible(option) && frMethod({
631
+ $select: $xeSelect,
632
+ group: null,
633
+ option,
634
+ filterValue: searchValue,
635
+ searchValue,
636
+ value: modelValue
637
+ });
638
+ }) : fullData;
639
+ } else if (filterable) {
640
+ avList = searchStr ? fullData.filter((option) => isOptionVisible(option) && `${option[labelField] || option[valueField]}`.toLowerCase().indexOf(searchStr) > -1) : fullData;
725
641
  } else {
726
- handleOption();
727
- updateYData();
642
+ avList = fullData.filter(isOptionVisible);
728
643
  }
729
644
  }
730
- setTimeout(() => {
731
- reactData.visiblePanel = true;
732
- handleFocusSearch();
733
- recalculate().then(() => {
734
- if (selectVals && selectVals.length) {
735
- handleScrollSelect();
645
+ avList.forEach((item, index) => {
646
+ const cacheItem = optFullValMaps[item[valueField]];
647
+ if (cacheItem) {
648
+ cacheItem._index = index;
649
+ }
650
+ });
651
+ internalData.afterVisibleList = avList;
652
+ return nextTick();
653
+ };
654
+ const setCurrentOption = (option) => {
655
+ if (option) {
656
+ reactData.currentOption = option;
657
+ }
658
+ };
659
+ const updateZIndex = () => {
660
+ const popupOpts = computePopupOpts.value;
661
+ const customZIndex = popupOpts.zIndex || props.zIndex;
662
+ if (customZIndex) {
663
+ reactData.panelIndex = XEUtils.toNumber(customZIndex);
664
+ } else if (reactData.panelIndex < getLastZIndex()) {
665
+ reactData.panelIndex = nextZIndex();
666
+ }
667
+ };
668
+ const updatePlacement = () => {
669
+ const { placement } = props;
670
+ const { panelIndex } = reactData;
671
+ const targetElem = refElem.value;
672
+ const panelElem = refOptionPanel.value;
673
+ const btnTransfer = computeBtnTransfer.value;
674
+ const popupOpts = computePopupOpts.value;
675
+ const handleStyle = () => {
676
+ const ppObj = updatePanelPlacement(targetElem, panelElem, {
677
+ placement: popupOpts.placement || placement,
678
+ defaultPlacement: popupOpts.defaultPlacement,
679
+ appendTo: popupOpts.appendTo,
680
+ teleportTo: btnTransfer
681
+ });
682
+ const panelStyle = Object.assign(ppObj.style, {
683
+ zIndex: panelIndex
684
+ });
685
+ reactData.panelStyle = panelStyle;
686
+ reactData.panelPlacement = ppObj.placement;
687
+ };
688
+ handleStyle();
689
+ return nextTick().then(handleStyle);
690
+ };
691
+ const handleScrollSelect = () => {
692
+ nextTick(() => {
693
+ const { isAniVisible, visiblePanel } = reactData;
694
+ const { optFullValMaps } = internalData;
695
+ const selectVals = computeSelectVals.value;
696
+ if (selectVals.length && isAniVisible && visiblePanel) {
697
+ const cacheItem = reactData.reactFlag ? optFullValMaps[`${selectVals[0]}`] : null;
698
+ if (cacheItem) {
699
+ reactData.currentOption = cacheItem.item;
700
+ handleScrollToOption(cacheItem.item);
701
+ }
702
+ }
703
+ });
704
+ };
705
+ const showOptionPanel = () => {
706
+ const { loading, filterable, remote } = props;
707
+ const { fullData, hpTimeout } = internalData;
708
+ const isDisabled = computeIsDisabled.value;
709
+ const remoteOpts = computeRemoteOpts.value;
710
+ const selectVals = computeSelectVals.value;
711
+ if (!loading && !isDisabled) {
712
+ if (hpTimeout) {
713
+ clearTimeout(hpTimeout);
714
+ internalData.hpTimeout = void 0;
715
+ }
716
+ if (!reactData.initialized) {
717
+ reactData.initialized = true;
718
+ nextTick(() => {
719
+ bindScrollbarResize();
720
+ });
721
+ }
722
+ reactData.isActivated = true;
723
+ reactData.isAniVisible = true;
724
+ if (filterable) {
725
+ if (remote && remoteOpts.enabled && (remoteOpts.autoLoad && !fullData.length || fullData.length && remoteOpts.clearOnClose)) {
726
+ handleSearchEvent();
736
727
  } else {
737
- refreshScroll();
728
+ handleOption();
729
+ updateYData();
738
730
  }
739
- });
731
+ }
732
+ setTimeout(() => {
733
+ reactData.visiblePanel = true;
734
+ handleFocusSearch();
735
+ recalculate().then(() => {
736
+ if (selectVals && selectVals.length) {
737
+ handleScrollSelect();
738
+ } else {
739
+ refreshScroll();
740
+ }
741
+ });
742
+ updatePlacement();
743
+ }, 10);
744
+ setTimeout(() => {
745
+ recalculate().then(() => refreshScroll());
746
+ }, 100);
747
+ updateZIndex();
740
748
  updatePlacement();
741
- }, 10);
742
- setTimeout(() => {
743
- recalculate().then(() => refreshScroll());
744
- }, 100);
745
- updateZIndex();
746
- updatePlacement();
747
- dispatchEvent("visible-change", { visible: true }, null);
748
- }
749
- };
750
- const hideOptionPanel = (evnt) => {
751
- const { filterable, remote } = props;
752
- const filterOpts = computeFilterOpts.value;
753
- const remoteOpts = computeRemoteOpts.value;
754
- if (remote) {
755
- if (remoteOpts.clearOnClose) {
756
- reactData.searchValue = "";
749
+ dispatchEvent("visible-change", { visible: true }, null);
757
750
  }
758
- } else if (filterable) {
759
- if (filterOpts.clearOnClose) {
751
+ };
752
+ const hideOptionPanel = (evnt) => {
753
+ const { filterable, remote } = props;
754
+ const filterOpts = computeFilterOpts.value;
755
+ const remoteOpts = computeRemoteOpts.value;
756
+ if (remote) {
757
+ if (remoteOpts.clearOnClose) {
758
+ reactData.searchValue = "";
759
+ }
760
+ } else if (filterable) {
761
+ if (filterOpts.clearOnClose) {
762
+ reactData.searchValue = "";
763
+ }
764
+ } else {
760
765
  reactData.searchValue = "";
761
766
  }
762
- } else {
763
- reactData.searchValue = "";
764
- }
765
- reactData.searchLoading = false;
766
- reactData.visiblePanel = false;
767
- internalData.hpTimeout = setTimeout(() => {
768
- reactData.isAniVisible = false;
769
- }, 350);
770
- dispatchEvent("visible-change", { visible: false }, evnt || null);
771
- };
772
- const changeEvent = (evnt, selectValue, option) => {
773
- emitModel(selectValue);
774
- if (selectValue !== props.modelValue) {
775
- dispatchEvent("change", { value: selectValue, option }, evnt);
776
- if ($xeForm && formItemInfo) {
777
- $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, selectValue);
778
- }
779
- }
780
- };
781
- const clearValueEvent = (evnt, selectValue) => {
782
- internalData.remoteValMaps = {};
783
- changeEvent(evnt, selectValue, null);
784
- dispatchEvent("clear", { value: selectValue }, evnt);
785
- };
786
- const clearEvent = (params) => {
787
- const { emptyValue } = props;
788
- const { $event } = params;
789
- clearValueEvent($event, emptyValue);
790
- hideOptionPanel($event);
791
- };
792
- const allCheckedPanelEvent = (params) => {
793
- const { $event } = params;
794
- const { multiple, max, checkedClosable } = props;
795
- const { optList } = reactData;
796
- const valueField = computeValueField.value;
797
- if (multiple) {
798
- const selectVals = computeSelectVals.value;
799
- const currVlas = selectVals.slice(0);
800
- for (let i = 0; i < optList.length; i++) {
801
- const option = optList[i];
802
- const selectValue = option[valueField];
803
- if (checkMaxLimit(currVlas)) {
804
- if (VxeUI) {
805
- VxeUI.modal.message({
806
- content: getI18n("vxe.select.overSizeErr", [max]),
807
- status: "warning"
808
- });
767
+ reactData.searchLoading = false;
768
+ reactData.visiblePanel = false;
769
+ internalData.hpTimeout = setTimeout(() => {
770
+ reactData.isAniVisible = false;
771
+ }, 350);
772
+ dispatchEvent("visible-change", { visible: false }, evnt || null);
773
+ };
774
+ const changeEvent = (evnt, selectValue, option) => {
775
+ emitModel(selectValue);
776
+ if (selectValue !== props.modelValue) {
777
+ dispatchEvent("change", { value: selectValue, option }, evnt);
778
+ if ($xeForm && formItemInfo) {
779
+ $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, selectValue);
780
+ }
781
+ }
782
+ };
783
+ const clearValueEvent = (evnt, selectValue) => {
784
+ internalData.remoteValMaps = {};
785
+ changeEvent(evnt, selectValue, null);
786
+ dispatchEvent("clear", { value: selectValue }, evnt);
787
+ };
788
+ const clearEvent = (params) => {
789
+ const { emptyValue } = props;
790
+ const { $event } = params;
791
+ clearValueEvent($event, emptyValue);
792
+ hideOptionPanel($event);
793
+ };
794
+ const allCheckedPanelEvent = (params) => {
795
+ const { $event } = params;
796
+ const { multiple, max, checkedClosable } = props;
797
+ const { optList } = reactData;
798
+ const valueField = computeValueField.value;
799
+ if (multiple) {
800
+ const selectVals = computeSelectVals.value;
801
+ const currVlas = selectVals.slice(0);
802
+ for (let i = 0; i < optList.length; i++) {
803
+ const option = optList[i];
804
+ const selectValue = option[valueField];
805
+ if (checkMaxLimit(currVlas)) {
806
+ if (VxeUI) {
807
+ VxeUI.modal.message({
808
+ content: getI18n("vxe.select.overSizeErr", [max]),
809
+ status: "warning"
810
+ });
811
+ }
812
+ break;
813
+ }
814
+ if (!currVlas.some((val) => val === selectValue)) {
815
+ currVlas.push(selectValue);
809
816
  }
810
- break;
811
817
  }
812
- if (!currVlas.some((val) => val === selectValue)) {
813
- currVlas.push(selectValue);
818
+ changeEvent($event, currVlas, optList[0]);
819
+ if (checkedClosable) {
820
+ hideOptionPanel($event);
814
821
  }
822
+ dispatchEvent("all-change", { value: currVlas }, $event);
815
823
  }
816
- changeEvent($event, currVlas, optList[0]);
817
- if (checkedClosable) {
824
+ };
825
+ const clearCheckedPanelEvent = (params) => {
826
+ const { emptyValue, clearClosable } = props;
827
+ const { $event } = params;
828
+ clearValueEvent($event, emptyValue);
829
+ if (clearClosable) {
818
830
  hideOptionPanel($event);
819
831
  }
820
- dispatchEvent("all-change", { value: currVlas }, $event);
821
- }
822
- };
823
- const clearCheckedPanelEvent = (params) => {
824
- const { emptyValue, clearClosable } = props;
825
- const { $event } = params;
826
- clearValueEvent($event, emptyValue);
827
- if (clearClosable) {
832
+ };
833
+ const closePanelEvent = (params) => {
834
+ const { $event } = params;
828
835
  hideOptionPanel($event);
829
- }
830
- };
831
- const closePanelEvent = (params) => {
832
- const { $event } = params;
833
- hideOptionPanel($event);
834
- };
835
- const changeOptionEvent = (evnt, option) => {
836
- const { multiple } = props;
837
- const { remoteValMaps } = internalData;
838
- const valueField = computeValueField.value;
839
- const selectValue = option[valueField];
840
- const remoteItem = remoteValMaps[selectValue];
841
- if (!reactData.visiblePanel) {
842
- return;
843
- }
844
- if (remoteItem) {
845
- remoteItem.item = option;
846
- } else {
847
- remoteValMaps[selectValue] = {
848
- key: getOptId(option),
849
- item: option,
850
- _index: -1
851
- };
852
- }
853
- if (multiple) {
854
- let multipleValue = [];
855
- const selectVals = computeSelectVals.value;
856
- const index = XEUtils.findIndexOf(selectVals, (val) => val === selectValue);
857
- if (index === -1) {
858
- multipleValue = selectVals.concat([selectValue]);
836
+ };
837
+ const changeOptionEvent = (evnt, option) => {
838
+ const { multiple } = props;
839
+ const { remoteValMaps } = internalData;
840
+ const valueField = computeValueField.value;
841
+ const selectValue = option[valueField];
842
+ const remoteItem = remoteValMaps[selectValue];
843
+ if (!reactData.visiblePanel) {
844
+ return;
845
+ }
846
+ if (remoteItem) {
847
+ remoteItem.item = option;
859
848
  } else {
860
- multipleValue = selectVals.filter((val) => val !== selectValue);
861
- }
862
- changeEvent(evnt, multipleValue, option);
863
- } else {
864
- changeEvent(evnt, selectValue, option);
865
- hideOptionPanel(evnt);
866
- }
867
- reactData.reactFlag++;
868
- };
869
- const handleGlobalMousedownEvent = (evnt) => {
870
- const { visiblePanel } = reactData;
871
- const isDisabled = computeIsDisabled.value;
872
- const popupOpts = computePopupOpts.value;
873
- const { trigger } = popupOpts;
874
- if (!isDisabled) {
875
- const el = refElem.value;
876
- const panelElem = refOptionPanel.value;
877
- reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag;
878
- if (visiblePanel && !reactData.isActivated) {
879
- if (trigger !== "manual") {
880
- hideOptionPanel(evnt);
881
- }
849
+ remoteValMaps[selectValue] = {
850
+ key: getOptId(option),
851
+ item: option,
852
+ _index: -1
853
+ };
882
854
  }
883
- }
884
- };
885
- const validOffsetOption = (option) => {
886
- const isDisabled = option.disabled;
887
- const optid = getOptId(option);
888
- if (!isDisabled && !hasOptGroupById(optid)) {
889
- return true;
890
- }
891
- return false;
892
- };
893
- const findOffsetOption = (option, isDwArrow) => {
894
- const { allowCreate } = props;
895
- const { optList } = reactData;
896
- const { optFullValMaps, optAddMaps, afterVisibleList } = internalData;
897
- const valueField = computeValueField.value;
898
- let fullList = afterVisibleList;
899
- let offsetAddIndex = 0;
900
- if (allowCreate && optList.length) {
901
- const firstItem = optList[0];
902
- const optid = getOptId(firstItem);
903
- if (optAddMaps[optid]) {
904
- offsetAddIndex = 1;
905
- fullList = [optAddMaps[optid]].concat(fullList);
906
- }
907
- }
908
- if (!option) {
909
- if (isDwArrow) {
910
- for (let i = 0; i < fullList.length; i++) {
911
- const item = fullList[i];
912
- if (validOffsetOption(item)) {
913
- return item;
914
- }
855
+ if (multiple) {
856
+ let multipleValue = [];
857
+ const selectVals = computeSelectVals.value;
858
+ const index = XEUtils.findIndexOf(selectVals, (val) => val === selectValue);
859
+ if (index === -1) {
860
+ multipleValue = selectVals.concat([selectValue]);
861
+ } else {
862
+ multipleValue = selectVals.filter((val) => val !== selectValue);
915
863
  }
864
+ changeEvent(evnt, multipleValue, option);
916
865
  } else {
917
- for (let len = fullList.length - 1; len >= 0; len--) {
918
- const item = fullList[len];
919
- if (validOffsetOption(item)) {
920
- return item;
866
+ changeEvent(evnt, selectValue, option);
867
+ hideOptionPanel(evnt);
868
+ }
869
+ reactData.reactFlag++;
870
+ };
871
+ const handleGlobalMousedownEvent = (evnt) => {
872
+ const { visiblePanel } = reactData;
873
+ const isDisabled = computeIsDisabled.value;
874
+ const popupOpts = computePopupOpts.value;
875
+ const { trigger } = popupOpts;
876
+ if (!isDisabled) {
877
+ const el = refElem.value;
878
+ const panelElem = refOptionPanel.value;
879
+ reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag;
880
+ if (visiblePanel && !reactData.isActivated) {
881
+ if (trigger !== "manual") {
882
+ hideOptionPanel(evnt);
921
883
  }
922
884
  }
923
885
  }
924
- }
925
- let avIndex = 0;
926
- const cacheItem = option ? optFullValMaps[option[valueField]] : null;
927
- if (cacheItem) {
928
- avIndex = cacheItem._index + offsetAddIndex;
929
- }
930
- if (avIndex > -1) {
931
- if (isDwArrow) {
932
- for (let i = avIndex + 1; i <= fullList.length - 1; i++) {
933
- const item = fullList[i];
934
- if (validOffsetOption(item)) {
935
- return item;
936
- }
886
+ };
887
+ const validOffsetOption = (option) => {
888
+ const isDisabled = option.disabled;
889
+ const optid = getOptId(option);
890
+ if (!isDisabled && !hasOptGroupById(optid)) {
891
+ return true;
892
+ }
893
+ return false;
894
+ };
895
+ const findOffsetOption = (option, isDwArrow) => {
896
+ const { allowCreate } = props;
897
+ const { optList } = reactData;
898
+ const { optFullValMaps, optAddMaps, afterVisibleList } = internalData;
899
+ const valueField = computeValueField.value;
900
+ let fullList = afterVisibleList;
901
+ let offsetAddIndex = 0;
902
+ if (allowCreate && optList.length) {
903
+ const firstItem = optList[0];
904
+ const optid = getOptId(firstItem);
905
+ if (optAddMaps[optid]) {
906
+ offsetAddIndex = 1;
907
+ fullList = [optAddMaps[optid]].concat(fullList);
937
908
  }
938
- } else {
939
- if (avIndex > 0) {
940
- for (let len = avIndex - 1; len >= 0; len--) {
909
+ }
910
+ if (!option) {
911
+ if (isDwArrow) {
912
+ for (let i = 0; i < fullList.length; i++) {
913
+ const item = fullList[i];
914
+ if (validOffsetOption(item)) {
915
+ return item;
916
+ }
917
+ }
918
+ } else {
919
+ for (let len = fullList.length - 1; len >= 0; len--) {
941
920
  const item = fullList[len];
942
921
  if (validOffsetOption(item)) {
943
922
  return item;
@@ -945,767 +924,854 @@ var select_default = defineVxeComponent({
945
924
  }
946
925
  }
947
926
  }
948
- }
949
- return null;
950
- };
951
- const handleGlobalKeydownEvent = (evnt) => {
952
- const { emptyValue, clearable } = props;
953
- const { visiblePanel, currentOption } = reactData;
954
- const isDisabled = computeIsDisabled.value;
955
- const popupOpts = computePopupOpts.value;
956
- const { trigger } = popupOpts;
957
- if (!isDisabled) {
958
- const isTab = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.TAB);
959
- const isEnter = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ENTER);
960
- const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE);
961
- const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP);
962
- const isDwArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN);
963
- const isDel = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.DELETE);
964
- if (isTab) {
965
- reactData.isActivated = false;
927
+ let avIndex = 0;
928
+ const cacheItem = option ? optFullValMaps[option[valueField]] : null;
929
+ if (cacheItem) {
930
+ avIndex = cacheItem._index + offsetAddIndex;
966
931
  }
967
- if (visiblePanel) {
968
- if (isEsc || isTab) {
969
- if (trigger !== "manual") {
970
- hideOptionPanel(evnt);
932
+ if (avIndex > -1) {
933
+ if (isDwArrow) {
934
+ for (let i = avIndex + 1; i <= fullList.length - 1; i++) {
935
+ const item = fullList[i];
936
+ if (validOffsetOption(item)) {
937
+ return item;
938
+ }
939
+ }
940
+ } else {
941
+ if (avIndex > 0) {
942
+ for (let len = avIndex - 1; len >= 0; len--) {
943
+ const item = fullList[len];
944
+ if (validOffsetOption(item)) {
945
+ return item;
946
+ }
947
+ }
971
948
  }
972
- } else if (isEnter) {
973
- if (currentOption) {
949
+ }
950
+ }
951
+ return null;
952
+ };
953
+ const handleGlobalKeydownEvent = (evnt) => {
954
+ const { emptyValue, clearable } = props;
955
+ const { visiblePanel, currentOption } = reactData;
956
+ const isDisabled = computeIsDisabled.value;
957
+ const popupOpts = computePopupOpts.value;
958
+ const { trigger } = popupOpts;
959
+ if (!isDisabled) {
960
+ const isTab = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.TAB);
961
+ const isEnter = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ENTER);
962
+ const isEsc = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ESCAPE);
963
+ const isUpArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_UP);
964
+ const isDwArrow = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.ARROW_DOWN);
965
+ const isDel = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.DELETE);
966
+ if (isTab) {
967
+ reactData.isActivated = false;
968
+ }
969
+ if (visiblePanel) {
970
+ if (isEsc || isTab) {
971
+ if (trigger !== "manual") {
972
+ hideOptionPanel(evnt);
973
+ }
974
+ } else if (isEnter) {
975
+ if (currentOption) {
976
+ evnt.preventDefault();
977
+ evnt.stopPropagation();
978
+ changeOptionEvent(evnt, currentOption);
979
+ }
980
+ } else if (isUpArrow || isDwArrow) {
974
981
  evnt.preventDefault();
975
- evnt.stopPropagation();
976
- changeOptionEvent(evnt, currentOption);
982
+ let offsetOption = findOffsetOption(currentOption, isDwArrow);
983
+ if (!offsetOption) {
984
+ offsetOption = findOffsetOption(null, isDwArrow);
985
+ }
986
+ if (offsetOption) {
987
+ setCurrentOption(offsetOption);
988
+ handleScrollToOption(offsetOption, isDwArrow);
989
+ }
977
990
  }
978
- } else if (isUpArrow || isDwArrow) {
991
+ } else if ((isUpArrow || isDwArrow || isEnter) && reactData.isActivated) {
979
992
  evnt.preventDefault();
980
- let offsetOption = findOffsetOption(currentOption, isDwArrow);
981
- if (!offsetOption) {
982
- offsetOption = findOffsetOption(null, isDwArrow);
983
- }
984
- if (offsetOption) {
985
- setCurrentOption(offsetOption);
986
- handleScrollToOption(offsetOption, isDwArrow);
993
+ showOptionPanel();
994
+ }
995
+ if (reactData.isActivated) {
996
+ if (isDel && clearable) {
997
+ clearValueEvent(evnt, emptyValue);
987
998
  }
988
999
  }
989
- } else if ((isUpArrow || isDwArrow || isEnter) && reactData.isActivated) {
990
- evnt.preventDefault();
991
- showOptionPanel();
992
1000
  }
993
- if (reactData.isActivated) {
994
- if (isDel && clearable) {
995
- clearValueEvent(evnt, emptyValue);
1001
+ };
1002
+ const handleGlobalBlurEvent = (evnt) => {
1003
+ const { visiblePanel, isActivated } = reactData;
1004
+ const popupOpts = computePopupOpts.value;
1005
+ const { trigger } = popupOpts;
1006
+ if (visiblePanel) {
1007
+ if (trigger !== "manual") {
1008
+ hideOptionPanel(evnt);
996
1009
  }
997
1010
  }
998
- }
999
- };
1000
- const handleGlobalBlurEvent = (evnt) => {
1001
- const { visiblePanel, isActivated } = reactData;
1002
- const popupOpts = computePopupOpts.value;
1003
- const { trigger } = popupOpts;
1004
- if (visiblePanel) {
1005
- if (trigger !== "manual") {
1006
- hideOptionPanel(evnt);
1011
+ if (isActivated) {
1012
+ reactData.isActivated = false;
1007
1013
  }
1008
- }
1009
- if (isActivated) {
1010
- reactData.isActivated = false;
1011
- }
1012
- if (visiblePanel || isActivated) {
1013
- const $input = refInput.value;
1014
- if ($input) {
1015
- $input.blur();
1016
- }
1017
- }
1018
- };
1019
- const handleGlobalResizeEvent = () => {
1020
- const { visiblePanel } = reactData;
1021
- if (visiblePanel) {
1022
- updatePlacement();
1023
- }
1024
- };
1025
- const handleGlobalScrollEvent = () => {
1026
- const { visiblePanel } = reactData;
1027
- if (visiblePanel) {
1028
- updatePlacement();
1029
- }
1030
- };
1031
- const handleFocusSearch = () => {
1032
- if (props.filterable) {
1033
- nextTick(() => {
1034
- const inpSearch = refInpSearch.value;
1035
- if (inpSearch) {
1036
- inpSearch.focus();
1014
+ if (visiblePanel || isActivated) {
1015
+ const $input = refInput.value;
1016
+ if ($input) {
1017
+ $input.blur();
1037
1018
  }
1038
- });
1039
- }
1040
- };
1041
- const focusEvent = (evnt) => {
1042
- const isDisabled = computeIsDisabled.value;
1043
- const popupOpts = computePopupOpts.value;
1044
- const { trigger } = popupOpts;
1045
- if (!isDisabled) {
1046
- if (!reactData.visiblePanel) {
1047
- if (!trigger || trigger === "default") {
1048
- reactData.triggerFocusPanel = true;
1049
- showOptionPanel();
1050
- setTimeout(() => {
1051
- reactData.triggerFocusPanel = false;
1052
- }, 500);
1019
+ }
1020
+ };
1021
+ const handleGlobalResizeEvent = () => {
1022
+ const { visiblePanel } = reactData;
1023
+ if (visiblePanel) {
1024
+ updatePlacement();
1025
+ }
1026
+ };
1027
+ const handleGlobalScrollEvent = () => {
1028
+ const { visiblePanel } = reactData;
1029
+ if (visiblePanel) {
1030
+ updatePlacement();
1031
+ }
1032
+ };
1033
+ const handleFocusSearch = () => {
1034
+ if (props.filterable) {
1035
+ nextTick(() => {
1036
+ const inpSearch = refInpSearch.value;
1037
+ if (inpSearch) {
1038
+ inpSearch.focus();
1039
+ }
1040
+ });
1041
+ }
1042
+ };
1043
+ const focusEvent = (evnt) => {
1044
+ const isDisabled = computeIsDisabled.value;
1045
+ const popupOpts = computePopupOpts.value;
1046
+ const { trigger } = popupOpts;
1047
+ if (!isDisabled) {
1048
+ if (!reactData.visiblePanel) {
1049
+ if (!trigger || trigger === "default") {
1050
+ reactData.triggerFocusPanel = true;
1051
+ showOptionPanel();
1052
+ setTimeout(() => {
1053
+ reactData.triggerFocusPanel = false;
1054
+ }, 500);
1055
+ }
1053
1056
  }
1054
1057
  }
1055
- }
1056
- dispatchEvent("focus", {}, evnt);
1057
- };
1058
- const clickEvent = (evnt) => {
1059
- const popupOpts = computePopupOpts.value;
1060
- const { trigger } = popupOpts;
1061
- if (!trigger || trigger === "default") {
1062
- togglePanelEvent(evnt);
1063
- }
1064
- dispatchEvent("click", { triggerButton: false, visible: reactData.visiblePanel }, evnt);
1065
- };
1066
- const blurEvent = (evnt) => {
1067
- reactData.isActivated = false;
1068
- dispatchEvent("blur", {}, evnt);
1069
- };
1070
- const suffixClickEvent = (evnt) => {
1071
- const popupOpts = computePopupOpts.value;
1072
- const { trigger } = popupOpts;
1073
- if (!trigger || trigger === "default" || trigger === "icon") {
1074
- togglePanelEvent(evnt);
1075
- }
1076
- dispatchEvent("click", { triggerButton: true, visible: reactData.visiblePanel }, evnt);
1077
- };
1078
- const modelSearchEvent = (value) => {
1079
- reactData.searchValue = value;
1080
- };
1081
- const focusSearchEvent = () => {
1082
- reactData.isActivated = true;
1083
- };
1084
- const handleSearchEvent = () => {
1085
- const { modelValue, remote } = props;
1086
- const { searchValue } = reactData;
1087
- const remoteOpts = computeRemoteOpts.value;
1088
- const qyMethod = remoteOpts.queryMethod || props.remoteMethod;
1089
- if (remote && qyMethod && remoteOpts.enabled) {
1090
- reactData.searchLoading = true;
1091
- Promise.resolve(qyMethod({ $select: $xeSelect, searchValue, value: modelValue })).then(() => nextTick()).catch(() => nextTick()).finally(() => {
1092
- reactData.searchLoading = false;
1058
+ dispatchEvent("focus", {}, evnt);
1059
+ };
1060
+ const clickEvent = (evnt) => {
1061
+ const popupOpts = computePopupOpts.value;
1062
+ const { trigger } = popupOpts;
1063
+ if (!trigger || trigger === "default") {
1064
+ togglePanelEvent(evnt);
1065
+ }
1066
+ dispatchEvent("click", { triggerButton: false, visible: reactData.visiblePanel }, evnt);
1067
+ };
1068
+ const blurEvent = (evnt) => {
1069
+ reactData.isActivated = false;
1070
+ dispatchEvent("blur", {}, evnt);
1071
+ };
1072
+ const suffixClickEvent = (evnt) => {
1073
+ const popupOpts = computePopupOpts.value;
1074
+ const { trigger } = popupOpts;
1075
+ if (!trigger || trigger === "default" || trigger === "icon") {
1076
+ togglePanelEvent(evnt);
1077
+ }
1078
+ dispatchEvent("click", { triggerButton: true, visible: reactData.visiblePanel }, evnt);
1079
+ };
1080
+ const modelSearchEvent = (value) => {
1081
+ reactData.searchValue = value;
1082
+ };
1083
+ const focusSearchEvent = () => {
1084
+ reactData.isActivated = true;
1085
+ };
1086
+ const handleSearchEvent = () => {
1087
+ const { modelValue, remote } = props;
1088
+ const { searchValue } = reactData;
1089
+ const remoteOpts = computeRemoteOpts.value;
1090
+ const qyMethod = remoteOpts.queryMethod || props.remoteMethod;
1091
+ if (remote && qyMethod && remoteOpts.enabled) {
1092
+ reactData.searchLoading = true;
1093
+ Promise.resolve(qyMethod({ $select: $xeSelect, searchValue, value: modelValue })).then(() => nextTick()).catch(() => nextTick()).finally(() => {
1094
+ reactData.searchLoading = false;
1095
+ handleOption();
1096
+ updateYData();
1097
+ });
1098
+ } else {
1093
1099
  handleOption();
1094
1100
  updateYData();
1095
- });
1096
- } else {
1097
- handleOption();
1098
- updateYData();
1099
- }
1100
- };
1101
- const triggerSearchEvent = XEUtils.debounce(handleSearchEvent, 350, { trailing: true });
1102
- const togglePanelEvent = (params) => {
1103
- const { $event } = params;
1104
- $event.preventDefault();
1105
- if (reactData.triggerFocusPanel) {
1106
- reactData.triggerFocusPanel = false;
1107
- } else {
1108
- if (reactData.visiblePanel) {
1109
- hideOptionPanel($event);
1101
+ }
1102
+ };
1103
+ const triggerSearchEvent = XEUtils.debounce(handleSearchEvent, 350, { trailing: true });
1104
+ const togglePanelEvent = (params) => {
1105
+ const { $event } = params;
1106
+ $event.preventDefault();
1107
+ if (reactData.triggerFocusPanel) {
1108
+ reactData.triggerFocusPanel = false;
1110
1109
  } else {
1111
- showOptionPanel();
1112
- }
1113
- }
1114
- };
1115
- const checkOptionDisabled = (isSelected, option) => {
1116
- if (option.disabled) {
1117
- return true;
1118
- }
1119
- const isMaximize = computeIsMaximize.value;
1120
- if (isMaximize && !isSelected) {
1121
- return true;
1122
- }
1123
- return false;
1124
- };
1125
- const updateYSpace = () => {
1126
- const { scrollYLoad } = reactData;
1127
- const { scrollYStore, afterVisibleList } = internalData;
1128
- reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0;
1129
- reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0;
1130
- };
1131
- const handleData = () => {
1132
- const { filterable, allowCreate } = props;
1133
- const { scrollYLoad, searchValue } = reactData;
1134
- const { optAddMaps, scrollYStore, afterVisibleList } = internalData;
1135
- const labelField = computeLabelField.value;
1136
- const valueField = computeValueField.value;
1137
- const restList = scrollYLoad ? afterVisibleList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : afterVisibleList.slice(0);
1138
- if (filterable && allowCreate && searchValue) {
1139
- if (!restList.some((option) => option[labelField] === searchValue)) {
1140
- const addItem = optAddMaps[searchValue] || reactive({
1141
- [getOptKey()]: searchValue,
1142
- [labelField]: searchValue,
1143
- [valueField]: searchValue
1144
- });
1145
- optAddMaps[searchValue] = addItem;
1146
- restList.unshift(addItem);
1147
- }
1148
- }
1149
- reactData.optList = restList;
1150
- return nextTick();
1151
- };
1152
- const updateYData = () => {
1153
- handleData();
1154
- updateYSpace();
1155
- };
1156
- const computeScrollLoad = () => {
1157
- return nextTick().then(() => {
1158
- const { scrollYLoad } = reactData;
1159
- const { scrollYStore } = internalData;
1160
- const virtualBodyElem = refVirtualBody.value;
1161
- const virtualYOpts = computeVirtualYOpts.value;
1162
- let rowHeight = 0;
1163
- let firstItemElem;
1164
- if (virtualBodyElem) {
1165
- if (!firstItemElem) {
1166
- firstItemElem = virtualBodyElem.children[0];
1110
+ if (reactData.visiblePanel) {
1111
+ hideOptionPanel($event);
1112
+ } else {
1113
+ showOptionPanel();
1167
1114
  }
1168
1115
  }
1169
- if (firstItemElem) {
1170
- rowHeight = firstItemElem.offsetHeight;
1171
- }
1172
- rowHeight = Math.max(20, rowHeight);
1173
- scrollYStore.rowHeight = rowHeight;
1174
- if (scrollYLoad) {
1175
- const scrollBodyElem = refVirtualWrapper.value;
1176
- const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0);
1177
- const offsetYSize = Math.max(0, Math.min(2, XEUtils.toNumber(virtualYOpts.oSize)));
1178
- scrollYStore.offsetSize = offsetYSize;
1179
- scrollYStore.visibleSize = visibleYSize;
1180
- scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex);
1181
- updateYData();
1182
- } else {
1183
- updateYSpace();
1116
+ };
1117
+ const checkOptionDisabled = (isSelected, option) => {
1118
+ if (option.disabled) {
1119
+ return true;
1184
1120
  }
1185
- });
1186
- };
1187
- const handleScrollToOption = (option, isDwArrow) => {
1188
- const { optFullValMaps, scrollYStore } = internalData;
1189
- const valueField = computeValueField.value;
1190
- const cacheItem = optFullValMaps[option[valueField]];
1191
- if (cacheItem) {
1192
- const optid = cacheItem.key;
1193
- const avIndex = cacheItem._index;
1194
- if (avIndex > -1) {
1195
- const optWrapperElem = refVirtualWrapper.value;
1196
- const panelElem = refOptionPanel.value;
1197
- if (!panelElem) {
1198
- return;
1121
+ const isMaximize = computeIsMaximize.value;
1122
+ if (isMaximize && !isSelected) {
1123
+ return true;
1124
+ }
1125
+ return false;
1126
+ };
1127
+ const updateYSpace = () => {
1128
+ const { scrollYLoad } = reactData;
1129
+ const { scrollYStore, afterVisibleList } = internalData;
1130
+ reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0;
1131
+ reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0;
1132
+ };
1133
+ const handleData = () => {
1134
+ const { filterable, allowCreate } = props;
1135
+ const { scrollYLoad, searchValue } = reactData;
1136
+ const { optAddMaps, scrollYStore, afterVisibleList } = internalData;
1137
+ const labelField = computeLabelField.value;
1138
+ const valueField = computeValueField.value;
1139
+ const restList = scrollYLoad ? afterVisibleList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : afterVisibleList.slice(0);
1140
+ if (filterable && allowCreate && searchValue) {
1141
+ if (!restList.some((option) => option[labelField] === searchValue)) {
1142
+ const addItem = optAddMaps[searchValue] || reactive({
1143
+ [getOptKey()]: searchValue,
1144
+ [labelField]: searchValue,
1145
+ [valueField]: searchValue
1146
+ });
1147
+ optAddMaps[searchValue] = addItem;
1148
+ restList.unshift(addItem);
1199
1149
  }
1200
- const optElem = panelElem.querySelector(`[optid='${optid}']`);
1201
- if (optWrapperElem) {
1202
- if (optElem) {
1203
- const wrapperHeight = optWrapperElem.offsetHeight;
1204
- const offsetPadding = 1;
1205
- if (isDwArrow) {
1206
- if (Math.ceil(optElem.offsetTop + optElem.offsetHeight - optWrapperElem.scrollTop) >= wrapperHeight) {
1207
- optWrapperElem.scrollTop = optElem.offsetTop + optElem.offsetHeight - wrapperHeight;
1208
- } else if (optElem.offsetTop + offsetPadding < optWrapperElem.scrollTop || optElem.offsetTop + offsetPadding > optWrapperElem.scrollTop + optWrapperElem.clientHeight) {
1209
- optWrapperElem.scrollTop = optElem.offsetTop - offsetPadding;
1150
+ }
1151
+ reactData.optList = restList;
1152
+ return nextTick();
1153
+ };
1154
+ const updateYData = () => {
1155
+ handleData();
1156
+ updateYSpace();
1157
+ };
1158
+ const computeScrollLoad = () => {
1159
+ return nextTick().then(() => {
1160
+ const { scrollYLoad } = reactData;
1161
+ const { scrollYStore } = internalData;
1162
+ const virtualBodyElem = refVirtualBody.value;
1163
+ const virtualYOpts = computeVirtualYOpts.value;
1164
+ let rowHeight = 0;
1165
+ let firstItemElem;
1166
+ if (virtualBodyElem) {
1167
+ if (!firstItemElem) {
1168
+ firstItemElem = virtualBodyElem.children[0];
1169
+ }
1170
+ }
1171
+ if (firstItemElem) {
1172
+ rowHeight = firstItemElem.offsetHeight;
1173
+ }
1174
+ rowHeight = Math.max(20, rowHeight);
1175
+ scrollYStore.rowHeight = rowHeight;
1176
+ if (scrollYLoad) {
1177
+ const scrollBodyElem = refVirtualWrapper.value;
1178
+ const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0);
1179
+ const offsetYSize = Math.max(0, Math.min(2, XEUtils.toNumber(virtualYOpts.oSize)));
1180
+ scrollYStore.offsetSize = offsetYSize;
1181
+ scrollYStore.visibleSize = visibleYSize;
1182
+ scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex);
1183
+ updateYData();
1184
+ } else {
1185
+ updateYSpace();
1186
+ }
1187
+ });
1188
+ };
1189
+ const handleScrollToOption = (option, isDwArrow) => {
1190
+ const { optFullValMaps, scrollYStore } = internalData;
1191
+ const valueField = computeValueField.value;
1192
+ const cacheItem = optFullValMaps[option[valueField]];
1193
+ if (cacheItem) {
1194
+ const optid = cacheItem.key;
1195
+ const avIndex = cacheItem._index;
1196
+ if (avIndex > -1) {
1197
+ const optWrapperElem = refVirtualWrapper.value;
1198
+ const panelElem = refOptionPanel.value;
1199
+ if (!panelElem) {
1200
+ return;
1201
+ }
1202
+ const optElem = panelElem.querySelector(`[optid='${optid}']`);
1203
+ if (optWrapperElem) {
1204
+ if (optElem) {
1205
+ const wrapperHeight = optWrapperElem.offsetHeight;
1206
+ const offsetPadding = 1;
1207
+ if (isDwArrow) {
1208
+ if (Math.ceil(optElem.offsetTop + optElem.offsetHeight - optWrapperElem.scrollTop) >= wrapperHeight) {
1209
+ optWrapperElem.scrollTop = optElem.offsetTop + optElem.offsetHeight - wrapperHeight;
1210
+ } else if (optElem.offsetTop + offsetPadding < optWrapperElem.scrollTop || optElem.offsetTop + offsetPadding > optWrapperElem.scrollTop + optWrapperElem.clientHeight) {
1211
+ optWrapperElem.scrollTop = optElem.offsetTop - offsetPadding;
1212
+ }
1213
+ } else {
1214
+ if (optElem.offsetTop + offsetPadding < optWrapperElem.scrollTop || optElem.offsetTop + offsetPadding > optWrapperElem.scrollTop + optWrapperElem.clientHeight) {
1215
+ optWrapperElem.scrollTop = optElem.offsetTop - offsetPadding;
1216
+ } else if (optElem.offsetTop + optElem.offsetHeight - optWrapperElem.scrollTop > wrapperHeight) {
1217
+ optWrapperElem.scrollTop = optElem.offsetTop + optElem.offsetHeight - wrapperHeight;
1218
+ }
1210
1219
  }
1211
1220
  } else {
1212
- if (optElem.offsetTop + offsetPadding < optWrapperElem.scrollTop || optElem.offsetTop + offsetPadding > optWrapperElem.scrollTop + optWrapperElem.clientHeight) {
1213
- optWrapperElem.scrollTop = optElem.offsetTop - offsetPadding;
1214
- } else if (optElem.offsetTop + optElem.offsetHeight - optWrapperElem.scrollTop > wrapperHeight) {
1215
- optWrapperElem.scrollTop = optElem.offsetTop + optElem.offsetHeight - wrapperHeight;
1221
+ if (isDwArrow) {
1222
+ optWrapperElem.scrollTop = avIndex * scrollYStore.rowHeight - optWrapperElem.clientHeight + scrollYStore.rowHeight;
1223
+ } else {
1224
+ optWrapperElem.scrollTop = avIndex * scrollYStore.rowHeight;
1216
1225
  }
1217
1226
  }
1218
- } else {
1219
- if (isDwArrow) {
1220
- optWrapperElem.scrollTop = avIndex * scrollYStore.rowHeight - optWrapperElem.clientHeight + scrollYStore.rowHeight;
1221
- } else {
1222
- optWrapperElem.scrollTop = avIndex * scrollYStore.rowHeight;
1223
- }
1224
1227
  }
1225
1228
  }
1226
1229
  }
1227
- }
1228
- };
1229
- const scrollTo = (scrollLeft, scrollTop) => {
1230
- const scrollBodyElem = refVirtualWrapper.value;
1231
- if (scrollBodyElem) {
1232
- if (XEUtils.isNumber(scrollLeft)) {
1233
- scrollBodyElem.scrollLeft = scrollLeft;
1234
- }
1235
- if (XEUtils.isNumber(scrollTop)) {
1236
- scrollBodyElem.scrollTop = scrollTop;
1237
- }
1238
- }
1239
- if (reactData.scrollYLoad) {
1240
- return new Promise((resolve) => {
1241
- setTimeout(() => {
1242
- nextTick(() => {
1243
- resolve();
1244
- });
1245
- }, 50);
1246
- });
1247
- }
1248
- return nextTick();
1249
- };
1250
- const refreshScroll = () => {
1251
- const { lastScrollLeft, lastScrollTop } = internalData;
1252
- return clearScroll().then(() => {
1253
- if (lastScrollLeft || lastScrollTop) {
1254
- internalData.lastScrollLeft = 0;
1255
- internalData.lastScrollTop = 0;
1256
- return scrollTo(lastScrollLeft, lastScrollTop);
1257
- }
1258
- });
1259
- };
1260
- const updateScrollbar = () => {
1261
- const isVScrollbar = computeIsVScrollbar.value;
1262
- if (isVScrollbar) {
1263
- return nextTick().then(() => {
1264
- updateThumbSize();
1265
- updateThumbOffset();
1266
- });
1267
- }
1268
- return Promise.resolve();
1269
- };
1270
- const recalculate = () => {
1271
- const el = refElem.value;
1272
- if (el && el.clientWidth && el.clientHeight) {
1273
- return computeScrollLoad().then(() => {
1274
- return updateScrollbar();
1275
- });
1276
- }
1277
- return Promise.resolve();
1278
- };
1279
- const loadYData = (evnt) => {
1280
- const { scrollYStore } = internalData;
1281
- const { startIndex, endIndex, visibleSize, offsetSize, rowHeight } = scrollYStore;
1282
- const scrollBodyElem = evnt.target;
1283
- const scrollTop = scrollBodyElem.scrollTop;
1284
- const toVisibleIndex = Math.floor(scrollTop / rowHeight);
1285
- const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
1286
- const offsetEndIndex = toVisibleIndex + visibleSize + offsetSize;
1287
- if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
1288
- if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
1289
- scrollYStore.startIndex = offsetStartIndex;
1290
- scrollYStore.endIndex = offsetEndIndex;
1291
- updateYData();
1230
+ };
1231
+ const scrollTo = (scrollLeft, scrollTop) => {
1232
+ const scrollBodyElem = refVirtualWrapper.value;
1233
+ if (scrollBodyElem) {
1234
+ if (XEUtils.isNumber(scrollLeft)) {
1235
+ scrollBodyElem.scrollLeft = scrollLeft;
1236
+ }
1237
+ if (XEUtils.isNumber(scrollTop)) {
1238
+ scrollBodyElem.scrollTop = scrollTop;
1239
+ }
1292
1240
  }
1293
- }
1294
- };
1295
- const isVMScrollProcess = () => {
1296
- const delayHover = 250;
1297
- const { lastScrollTime } = internalData;
1298
- return !!(lastScrollTime && Date.now() < lastScrollTime + delayHover);
1299
- };
1300
- const scrollEvent = (evnt) => {
1301
- const scrollBodyElem = evnt.target;
1302
- const scrollTop = scrollBodyElem.scrollTop;
1303
- const scrollLeft = scrollBodyElem.scrollLeft;
1304
- const isX = scrollLeft !== internalData.lastScrollLeft;
1305
- const isY = scrollTop !== internalData.lastScrollTop;
1306
- const isVScrollbar = computeIsVScrollbar.value;
1307
- if (isVScrollbar) {
1308
- updateThumbOffset();
1309
- }
1310
- internalData.lastScrollTop = scrollTop;
1311
- internalData.lastScrollLeft = scrollLeft;
1312
- if (reactData.scrollYLoad) {
1313
- loadYData(evnt);
1314
- }
1315
- internalData.lastScrollTime = Date.now();
1316
- dispatchEvent("scroll", { scrollLeft, scrollTop, isX, isY }, evnt);
1317
- };
1318
- const loadData = (datas) => {
1319
- cacheItemMap(datas || []);
1320
- const { multiple } = props;
1321
- const { isLoaded, fullData, scrollYStore } = internalData;
1322
- const defaultOpts = computeDefaultOpts.value;
1323
- const virtualYOpts = computeVirtualYOpts.value;
1324
- const valueField = computeValueField.value;
1325
- Object.assign(scrollYStore, {
1326
- startIndex: 0,
1327
- endIndex: 1,
1328
- visibleSize: 0
1329
- });
1330
- internalData.synchData = datas || [];
1331
- reactData.scrollYLoad = !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt <= fullData.length);
1332
- handleData();
1333
- if (!isLoaded) {
1334
- const { selectMode } = defaultOpts;
1335
- if (datas.length > 0 && XEUtils.eqNull(props.modelValue)) {
1336
- if (selectMode === "all") {
1337
- if (multiple) {
1338
- nextTick(() => {
1339
- emitDefaultValue(datas.map((item) => item[valueField]));
1340
- });
1341
- } else {
1342
- errLog("vxe.error.notConflictProp", ["default-config.selectMode=all", "multiple=true"]);
1343
- }
1344
- } else if (selectMode === "first" || selectMode === "last") {
1345
- const selectItem = XEUtils[selectMode](datas);
1346
- if (selectItem) {
1241
+ if (reactData.scrollYLoad) {
1242
+ return new Promise((resolve) => {
1243
+ setTimeout(() => {
1347
1244
  nextTick(() => {
1348
- if (XEUtils.eqNull(props.modelValue)) {
1349
- emitDefaultValue(selectItem[valueField]);
1350
- }
1245
+ resolve();
1351
1246
  });
1352
- }
1247
+ }, 50);
1248
+ });
1249
+ }
1250
+ return nextTick();
1251
+ };
1252
+ const refreshScroll = () => {
1253
+ const { lastScrollLeft, lastScrollTop } = internalData;
1254
+ return clearScroll().then(() => {
1255
+ if (lastScrollLeft || lastScrollTop) {
1256
+ internalData.lastScrollLeft = 0;
1257
+ internalData.lastScrollTop = 0;
1258
+ return scrollTo(lastScrollLeft, lastScrollTop);
1353
1259
  }
1354
- internalData.isLoaded = true;
1260
+ });
1261
+ };
1262
+ const updateScrollbar = () => {
1263
+ const isVScrollbar = computeIsVScrollbar.value;
1264
+ if (isVScrollbar) {
1265
+ return nextTick().then(() => {
1266
+ updateThumbSize();
1267
+ updateThumbOffset();
1268
+ });
1355
1269
  }
1356
- }
1357
- return computeScrollLoad().then(() => {
1358
- refreshScroll();
1359
- });
1360
- };
1361
- const clearScroll = () => {
1362
- const scrollBodyElem = refVirtualWrapper.value;
1363
- if (scrollBodyElem) {
1364
- scrollBodyElem.scrollTop = 0;
1365
- scrollBodyElem.scrollLeft = 0;
1366
- }
1367
- internalData.lastScrollTop = 0;
1368
- internalData.lastScrollLeft = 0;
1369
- return nextTick();
1370
- };
1371
- const hasOptGroupById = (optid) => {
1372
- const { optGroupKeyMaps } = internalData;
1373
- return !!optGroupKeyMaps[optid];
1374
- };
1375
- const selectMethods = {
1376
- dispatchEvent,
1377
- getScrollViewElem() {
1378
- const viewEl = refVirtualWrapper.value;
1379
- return viewEl || null;
1380
- },
1381
- loadData,
1382
- reloadData(datas) {
1383
- internalData.isLoaded = false;
1384
- clearScroll();
1385
- return loadData(datas);
1386
- },
1387
- isPanelVisible() {
1388
- return reactData.visiblePanel;
1389
- },
1390
- togglePanel() {
1391
- if (reactData.visiblePanel) {
1392
- hideOptionPanel();
1393
- } else {
1394
- showOptionPanel();
1270
+ return Promise.resolve();
1271
+ };
1272
+ const recalculate = () => {
1273
+ const el = refElem.value;
1274
+ if (el && el.clientWidth && el.clientHeight) {
1275
+ return computeScrollLoad().then(() => {
1276
+ return updateScrollbar();
1277
+ });
1395
1278
  }
1396
- return nextTick();
1397
- },
1398
- hidePanel() {
1399
- if (reactData.visiblePanel) {
1400
- hideOptionPanel();
1279
+ return Promise.resolve();
1280
+ };
1281
+ const loadYData = (evnt) => {
1282
+ const { scrollYStore } = internalData;
1283
+ const { startIndex, endIndex, visibleSize, offsetSize, rowHeight } = scrollYStore;
1284
+ const scrollBodyElem = evnt.target;
1285
+ const scrollTop = scrollBodyElem.scrollTop;
1286
+ const toVisibleIndex = Math.floor(scrollTop / rowHeight);
1287
+ const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
1288
+ const offsetEndIndex = toVisibleIndex + visibleSize + offsetSize;
1289
+ if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
1290
+ if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
1291
+ scrollYStore.startIndex = offsetStartIndex;
1292
+ scrollYStore.endIndex = offsetEndIndex;
1293
+ updateYData();
1294
+ }
1401
1295
  }
1402
- return nextTick();
1403
- },
1404
- showPanel() {
1405
- if (!reactData.visiblePanel) {
1406
- showOptionPanel();
1296
+ };
1297
+ const isVMScrollProcess = () => {
1298
+ const delayHover = 250;
1299
+ const { lastScrollTime } = internalData;
1300
+ return !!(lastScrollTime && Date.now() < lastScrollTime + delayHover);
1301
+ };
1302
+ const scrollEvent = (evnt) => {
1303
+ const scrollBodyElem = evnt.target;
1304
+ const scrollTop = scrollBodyElem.scrollTop;
1305
+ const scrollLeft = scrollBodyElem.scrollLeft;
1306
+ const isX = scrollLeft !== internalData.lastScrollLeft;
1307
+ const isY = scrollTop !== internalData.lastScrollTop;
1308
+ const isVScrollbar = computeIsVScrollbar.value;
1309
+ if (isVScrollbar) {
1310
+ updateThumbOffset();
1407
1311
  }
1408
- return nextTick();
1409
- },
1410
- refreshOption() {
1411
- handleOption();
1412
- updateYData();
1413
- return nextTick();
1414
- },
1415
- focus() {
1416
- const $input = refInput.value;
1417
- if ($input) {
1418
- $input.blur();
1312
+ internalData.lastScrollTop = scrollTop;
1313
+ internalData.lastScrollLeft = scrollLeft;
1314
+ if (reactData.scrollYLoad) {
1315
+ loadYData(evnt);
1419
1316
  }
1420
- reactData.isActivated = true;
1421
- return nextTick();
1422
- },
1423
- blur() {
1424
- const $input = refInput.value;
1425
- if ($input) {
1426
- $input.blur();
1317
+ internalData.lastScrollTime = Date.now();
1318
+ dispatchEvent("scroll", { scrollLeft, scrollTop, isX, isY }, evnt);
1319
+ };
1320
+ const loadData = (datas) => {
1321
+ cacheItemMap(datas || []);
1322
+ const { multiple } = props;
1323
+ const { isLoaded, fullData, scrollYStore } = internalData;
1324
+ const defaultOpts = computeDefaultOpts.value;
1325
+ const virtualYOpts = computeVirtualYOpts.value;
1326
+ const valueField = computeValueField.value;
1327
+ Object.assign(scrollYStore, {
1328
+ startIndex: 0,
1329
+ endIndex: 1,
1330
+ visibleSize: 0
1331
+ });
1332
+ internalData.synchData = datas || [];
1333
+ reactData.scrollYLoad = !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt <= fullData.length);
1334
+ handleData();
1335
+ if (!isLoaded) {
1336
+ const { selectMode } = defaultOpts;
1337
+ if (datas.length > 0 && XEUtils.eqNull(props.modelValue)) {
1338
+ if (selectMode === "all") {
1339
+ if (multiple) {
1340
+ nextTick(() => {
1341
+ emitDefaultValue(datas.map((item) => item[valueField]));
1342
+ });
1343
+ } else {
1344
+ errLog("vxe.error.notConflictProp", ["default-config.selectMode=all", "multiple=true"]);
1345
+ }
1346
+ } else if (selectMode === "first" || selectMode === "last") {
1347
+ const selectItem = XEUtils[selectMode](datas);
1348
+ if (selectItem) {
1349
+ nextTick(() => {
1350
+ if (XEUtils.eqNull(props.modelValue)) {
1351
+ emitDefaultValue(selectItem[valueField]);
1352
+ }
1353
+ });
1354
+ }
1355
+ }
1356
+ internalData.isLoaded = true;
1357
+ }
1427
1358
  }
1428
- reactData.isActivated = false;
1359
+ return computeScrollLoad().then(() => {
1360
+ refreshScroll();
1361
+ });
1362
+ };
1363
+ const clearScroll = () => {
1364
+ const scrollBodyElem = refVirtualWrapper.value;
1365
+ if (scrollBodyElem) {
1366
+ scrollBodyElem.scrollTop = 0;
1367
+ scrollBodyElem.scrollLeft = 0;
1368
+ }
1369
+ internalData.lastScrollTop = 0;
1370
+ internalData.lastScrollLeft = 0;
1429
1371
  return nextTick();
1430
- },
1431
- recalculate,
1432
- clearScroll
1433
- };
1434
- const bindScrollbarResize = () => {
1435
- const isVScrollbar = computeIsVScrollbar.value;
1436
- const { scrollObserver } = internalData;
1437
- if (isVScrollbar) {
1438
- if (!scrollObserver) {
1439
- const el = refElem.value;
1440
- const viewSpaceEl = refVirtualSpaceElem.value;
1441
- const viewInnerEl = refVirtualBody.value;
1442
- const scrollObserver2 = globalResize.create(() => {
1443
- reScrollFlag.value++;
1444
- });
1445
- if (el) {
1446
- scrollObserver2.observe(el);
1372
+ };
1373
+ const hasOptGroupById = (optid) => {
1374
+ const { optGroupKeyMaps } = internalData;
1375
+ return !!optGroupKeyMaps[optid];
1376
+ };
1377
+ const selectMethods = {
1378
+ dispatchEvent,
1379
+ getScrollViewElem() {
1380
+ const viewEl = refVirtualWrapper.value;
1381
+ return viewEl || null;
1382
+ },
1383
+ loadData,
1384
+ reloadData(datas) {
1385
+ internalData.isLoaded = false;
1386
+ clearScroll();
1387
+ return loadData(datas);
1388
+ },
1389
+ isPanelVisible() {
1390
+ return reactData.visiblePanel;
1391
+ },
1392
+ togglePanel() {
1393
+ if (reactData.visiblePanel) {
1394
+ hideOptionPanel();
1395
+ } else {
1396
+ showOptionPanel();
1447
1397
  }
1448
- if (viewSpaceEl) {
1449
- scrollObserver2.observe(viewSpaceEl);
1398
+ return nextTick();
1399
+ },
1400
+ hidePanel() {
1401
+ if (reactData.visiblePanel) {
1402
+ hideOptionPanel();
1450
1403
  }
1451
- if (viewInnerEl) {
1452
- scrollObserver2.observe(viewInnerEl);
1404
+ return nextTick();
1405
+ },
1406
+ showPanel() {
1407
+ if (!reactData.visiblePanel) {
1408
+ showOptionPanel();
1453
1409
  }
1454
- internalData.scrollObserver = scrollObserver2;
1455
- }
1456
- }
1457
- };
1458
- Object.assign($xeSelect, selectMethods);
1459
- const renderRadio = (option, isOptGroup, isChecked, isDisabled) => {
1460
- const radioOpts = computeRadioOpts.value;
1461
- const { showIcon, trigger } = radioOpts;
1462
- if (isOptGroup || showIcon === false) {
1463
- return renderEmptyElement($xeSelect);
1464
- }
1465
- const ons = {};
1466
- if (!trigger || trigger === "default") {
1467
- ons.onClick = (evnt) => {
1468
- if (!isDisabled && !isOptGroup) {
1469
- changeOptionEvent(evnt, option);
1410
+ return nextTick();
1411
+ },
1412
+ refreshOption() {
1413
+ handleOption();
1414
+ updateYData();
1415
+ return nextTick();
1416
+ },
1417
+ focus() {
1418
+ const $input = refInput.value;
1419
+ if ($input) {
1420
+ $input.blur();
1470
1421
  }
1471
- };
1472
- }
1473
- return h(
1474
- "div",
1475
- {
1476
- key: 2,
1477
- class: [
1478
- "vxe-select-option--radio",
1479
- {
1480
- "is--checked": isChecked,
1481
- "is--disabled": isDisabled
1482
- }
1483
- ],
1484
- ...ons
1422
+ reactData.isActivated = true;
1423
+ return nextTick();
1485
1424
  },
1486
- [
1487
- h("span", {
1488
- class: ["vxe-radio--icon", isChecked ? getIcon().RADIO_CHECKED : isDisabled ? getIcon().RADIO_DISABLED_UNCHECKED : getIcon().RADIO_UNCHECKED]
1489
- })
1490
- ]
1491
- );
1492
- };
1493
- const renderCheckbox = (option, isOptGroup, isChecked, isDisabled) => {
1494
- const checkboxOpts = computeCheckboxOpts.value;
1495
- const { showIcon, trigger } = checkboxOpts;
1496
- if (isOptGroup || showIcon === false) {
1497
- return renderEmptyElement($xeSelect);
1498
- }
1499
- const ons = {};
1500
- if (!trigger || trigger === "default") {
1501
- ons.onClick = (evnt) => {
1502
- if (!isDisabled && !isOptGroup) {
1503
- changeOptionEvent(evnt, option);
1425
+ blur() {
1426
+ const $input = refInput.value;
1427
+ if ($input) {
1428
+ $input.blur();
1504
1429
  }
1505
- };
1506
- }
1507
- return h(
1508
- "div",
1509
- {
1510
- key: 3,
1511
- class: [
1512
- "vxe-select-option--checkbox",
1513
- {
1514
- "is--checked": isChecked,
1515
- "is--disabled": isDisabled
1516
- }
1517
- ],
1518
- ...ons
1430
+ reactData.isActivated = false;
1431
+ return nextTick();
1519
1432
  },
1520
- [
1521
- h("span", {
1522
- class: ["vxe-checkbox--icon", isChecked ? getIcon().CHECKBOX_CHECKED : isDisabled ? getIcon().CHECKBOX_DISABLED_UNCHECKED : getIcon().CHECKBOX_UNCHECKED]
1523
- })
1524
- ]
1525
- );
1526
- };
1527
- const renderOption = (list) => {
1528
- const { allowCreate, optionKey, multiple, showRadio, showCheckbox } = props;
1529
- const { currentOption } = reactData;
1530
- const { optAddMaps } = internalData;
1531
- const optionOpts = computeOptionOpts.value;
1532
- const labelField = computeLabelField.value;
1533
- const valueField = computeValueField.value;
1534
- const groupLabelField = computeGroupLabelField.value;
1535
- const selectVals = computeSelectVals.value;
1536
- const radioOpts = computeRadioOpts.value;
1537
- const checkboxOpts = computeCheckboxOpts.value;
1538
- const { useKey, height } = optionOpts;
1539
- const optionSlot = slots.option;
1540
- const isCheckboxMode = showCheckbox && multiple;
1541
- const isRadioMode = showRadio && !multiple;
1542
- return list.map((option, cIndex) => {
1543
- const { slots: slots2, className } = option;
1544
- const optid = getOptId(option);
1545
- const optionValue = option[valueField];
1546
- const isOptGroup = hasOptGroupById(optid);
1547
- const isAdd = !!(allowCreate && optAddMaps[optid]);
1548
- const isSelected = !isAdd && selectVals.indexOf(optionValue) > -1;
1549
- const isVisible = isAdd || !isOptGroup || isOptionVisible(option);
1550
- const isDisabled = !isAdd && checkOptionDisabled(isSelected, option);
1551
- const defaultSlot = slots2 ? slots2.default : null;
1552
- const optSlot = defaultSlot || optionSlot;
1553
- const optParams = { option, group: isOptGroup ? option : null, $select: $xeSelect };
1554
- let optLabel = "";
1555
- const optVNs = [];
1556
- if (isCheckboxMode) {
1557
- optVNs.push(renderCheckbox(option, isOptGroup, isSelected, isDisabled));
1558
- } else if (isRadioMode) {
1559
- optVNs.push(renderRadio(option, isOptGroup, isSelected, isDisabled));
1560
- }
1561
- let otlbVNs = [];
1562
- if (optSlot) {
1563
- otlbVNs = callSlot(optSlot, optParams);
1564
- } else {
1565
- optLabel = getFuncText(option[isOptGroup ? groupLabelField : labelField] || optionValue);
1566
- otlbVNs = [optLabel];
1567
- }
1568
- optVNs.push(
1569
- h(
1570
- "div",
1571
- {
1572
- key: 1,
1573
- class: "vxe-select-option--label"
1574
- },
1575
- otlbVNs
1576
- )
1577
- );
1578
- const ons = {
1579
- onMousedown: (evnt) => {
1580
- const isLeftBtn = evnt.button === 0;
1581
- if (isLeftBtn) {
1582
- evnt.stopPropagation();
1433
+ recalculate,
1434
+ clearScroll
1435
+ };
1436
+ const bindScrollbarResize = () => {
1437
+ const isVScrollbar = computeIsVScrollbar.value;
1438
+ const { scrollObserver } = internalData;
1439
+ if (isVScrollbar) {
1440
+ if (!scrollObserver) {
1441
+ const el = refElem.value;
1442
+ const viewSpaceEl = refVirtualSpaceElem.value;
1443
+ const viewInnerEl = refVirtualBody.value;
1444
+ const scrollObserver2 = globalResize.create(() => {
1445
+ reScrollFlag.value++;
1446
+ });
1447
+ if (el) {
1448
+ scrollObserver2.observe(el);
1583
1449
  }
1584
- },
1585
- onMouseenter: () => {
1586
- if (!isDisabled && !isOptGroup && !isVMScrollProcess()) {
1587
- setCurrentOption(option);
1450
+ if (viewSpaceEl) {
1451
+ scrollObserver2.observe(viewSpaceEl);
1588
1452
  }
1453
+ if (viewInnerEl) {
1454
+ scrollObserver2.observe(viewInnerEl);
1455
+ }
1456
+ internalData.scrollObserver = scrollObserver2;
1589
1457
  }
1590
- };
1591
- if (isCheckboxMode ? checkboxOpts.trigger === "option" : isRadioMode ? radioOpts.trigger === "option" : true) {
1458
+ }
1459
+ };
1460
+ Object.assign($xeSelect, selectMethods);
1461
+ const renderRadio = (option, isOptGroup, isChecked, isDisabled) => {
1462
+ const radioOpts = computeRadioOpts.value;
1463
+ const { showIcon, trigger } = radioOpts;
1464
+ if (isOptGroup || showIcon === false) {
1465
+ return renderEmptyElement($xeSelect);
1466
+ }
1467
+ const ons = {};
1468
+ if (!trigger || trigger === "default") {
1592
1469
  ons.onClick = (evnt) => {
1593
1470
  if (!isDisabled && !isOptGroup) {
1594
1471
  changeOptionEvent(evnt, option);
1595
1472
  }
1596
1473
  };
1597
1474
  }
1598
- return isVisible ? h(
1475
+ return h(
1599
1476
  "div",
1600
1477
  {
1601
- key: useKey || optionKey ? optid : cIndex,
1478
+ key: 2,
1602
1479
  class: [
1603
- "vxe-select-option",
1604
- className ? XEUtils.isFunction(className) ? className(optParams) : className : "",
1480
+ "vxe-select-option--radio",
1605
1481
  {
1606
- "vxe-select-optgroup": isOptGroup,
1607
- "is--disabled": isDisabled,
1608
- "is--selected": isSelected,
1609
- "is--add": isAdd,
1610
- "is--hover": currentOption && getOptId(currentOption) === optid
1482
+ "is--checked": isChecked,
1483
+ "is--disabled": isDisabled
1484
+ }
1485
+ ],
1486
+ ...ons
1487
+ },
1488
+ [
1489
+ h("span", {
1490
+ class: ["vxe-radio--icon", isChecked ? getIcon().RADIO_CHECKED : isDisabled ? getIcon().RADIO_DISABLED_UNCHECKED : getIcon().RADIO_UNCHECKED]
1491
+ })
1492
+ ]
1493
+ );
1494
+ };
1495
+ const renderCheckbox = (option, isOptGroup, isChecked, isDisabled) => {
1496
+ const checkboxOpts = computeCheckboxOpts.value;
1497
+ const { showIcon, trigger } = checkboxOpts;
1498
+ if (isOptGroup || showIcon === false) {
1499
+ return renderEmptyElement($xeSelect);
1500
+ }
1501
+ const ons = {};
1502
+ if (!trigger || trigger === "default") {
1503
+ ons.onClick = (evnt) => {
1504
+ if (!isDisabled && !isOptGroup) {
1505
+ changeOptionEvent(evnt, option);
1506
+ }
1507
+ };
1508
+ }
1509
+ return h(
1510
+ "div",
1511
+ {
1512
+ key: 3,
1513
+ class: [
1514
+ "vxe-select-option--checkbox",
1515
+ {
1516
+ "is--checked": isChecked,
1517
+ "is--disabled": isDisabled
1611
1518
  }
1612
1519
  ],
1613
- optid,
1614
- title: optLabel || null,
1615
- style: height ? {
1616
- height: toCssUnit(height)
1617
- } : void 0,
1618
1520
  ...ons
1619
1521
  },
1620
- allowCreate ? [
1522
+ [
1523
+ h("span", {
1524
+ class: ["vxe-checkbox--icon", isChecked ? getIcon().CHECKBOX_CHECKED : isDisabled ? getIcon().CHECKBOX_DISABLED_UNCHECKED : getIcon().CHECKBOX_UNCHECKED]
1525
+ })
1526
+ ]
1527
+ );
1528
+ };
1529
+ const renderOption = (list) => {
1530
+ const { allowCreate, optionKey, multiple, showRadio, showCheckbox } = props;
1531
+ const { currentOption } = reactData;
1532
+ const { optAddMaps } = internalData;
1533
+ const optionOpts = computeOptionOpts.value;
1534
+ const labelField = computeLabelField.value;
1535
+ const valueField = computeValueField.value;
1536
+ const groupLabelField = computeGroupLabelField.value;
1537
+ const selectVals = computeSelectVals.value;
1538
+ const radioOpts = computeRadioOpts.value;
1539
+ const checkboxOpts = computeCheckboxOpts.value;
1540
+ const { useKey, height } = optionOpts;
1541
+ const optionSlot = slots.option;
1542
+ const isCheckboxMode = showCheckbox && multiple;
1543
+ const isRadioMode = showRadio && !multiple;
1544
+ return list.map((option, cIndex) => {
1545
+ const { slots: slots2, className } = option;
1546
+ const optid = getOptId(option);
1547
+ const optionValue = option[valueField];
1548
+ const isOptGroup = hasOptGroupById(optid);
1549
+ const isAdd = !!(allowCreate && optAddMaps[optid]);
1550
+ const isSelected = !isAdd && selectVals.indexOf(optionValue) > -1;
1551
+ const isVisible = isAdd || !isOptGroup || isOptionVisible(option);
1552
+ const isDisabled = !isAdd && checkOptionDisabled(isSelected, option);
1553
+ const defaultSlot = slots2 ? slots2.default : null;
1554
+ const optSlot = defaultSlot || optionSlot;
1555
+ const optParams = { option, group: isOptGroup ? option : null, $select: $xeSelect };
1556
+ let optLabel = "";
1557
+ const optVNs = [];
1558
+ if (isCheckboxMode) {
1559
+ optVNs.push(renderCheckbox(option, isOptGroup, isSelected, isDisabled));
1560
+ } else if (isRadioMode) {
1561
+ optVNs.push(renderRadio(option, isOptGroup, isSelected, isDisabled));
1562
+ }
1563
+ let otlbVNs = [];
1564
+ if (optSlot) {
1565
+ otlbVNs = callSlot(optSlot, optParams);
1566
+ } else {
1567
+ optLabel = getFuncText(option[isOptGroup ? groupLabelField : labelField] || optionValue);
1568
+ otlbVNs = [optLabel];
1569
+ }
1570
+ optVNs.push(
1621
1571
  h(
1622
1572
  "div",
1623
1573
  {
1624
1574
  key: 1,
1625
- class: "vxe-select-option--add-label"
1575
+ class: "vxe-select-option--label"
1626
1576
  },
1627
- optVNs
1628
- ),
1629
- isAdd ? h(
1577
+ otlbVNs
1578
+ )
1579
+ );
1580
+ const ons = {
1581
+ onMousedown: (evnt) => {
1582
+ const isLeftBtn = evnt.button === 0;
1583
+ if (isLeftBtn) {
1584
+ evnt.stopPropagation();
1585
+ }
1586
+ },
1587
+ onMouseenter: () => {
1588
+ if (!isDisabled && !isOptGroup && !isVMScrollProcess()) {
1589
+ setCurrentOption(option);
1590
+ }
1591
+ }
1592
+ };
1593
+ if (isCheckboxMode ? checkboxOpts.trigger === "option" : isRadioMode ? radioOpts.trigger === "option" : true) {
1594
+ ons.onClick = (evnt) => {
1595
+ if (!isDisabled && !isOptGroup) {
1596
+ changeOptionEvent(evnt, option);
1597
+ }
1598
+ };
1599
+ }
1600
+ return isVisible ? h(
1601
+ "div",
1602
+ {
1603
+ key: useKey || optionKey ? optid : cIndex,
1604
+ class: [
1605
+ "vxe-select-option",
1606
+ className ? XEUtils.isFunction(className) ? className(optParams) : className : "",
1607
+ {
1608
+ "vxe-select-optgroup": isOptGroup,
1609
+ "is--disabled": isDisabled,
1610
+ "is--selected": isSelected,
1611
+ "is--add": isAdd,
1612
+ "is--hover": currentOption && getOptId(currentOption) === optid
1613
+ }
1614
+ ],
1615
+ optid,
1616
+ title: optLabel || null,
1617
+ style: height ? {
1618
+ height: toCssUnit(height)
1619
+ } : void 0,
1620
+ ...ons
1621
+ },
1622
+ allowCreate ? [
1623
+ h(
1624
+ "div",
1625
+ {
1626
+ key: 1,
1627
+ class: "vxe-select-option--add-label"
1628
+ },
1629
+ optVNs
1630
+ ),
1631
+ isAdd ? h(
1632
+ "div",
1633
+ {
1634
+ key: 2,
1635
+ class: "vxe-select-option--add-icon"
1636
+ },
1637
+ [
1638
+ h("i", {
1639
+ class: getIcon().SELECT_ADD_OPTION
1640
+ })
1641
+ ]
1642
+ ) : renderEmptyElement($xeSelect)
1643
+ ] : optVNs
1644
+ ) : renderEmptyElement($xeSelect);
1645
+ });
1646
+ };
1647
+ const renderOpts = () => {
1648
+ const { optList, searchLoading } = reactData;
1649
+ if (searchLoading) {
1650
+ return [
1651
+ h(
1630
1652
  "div",
1631
1653
  {
1632
- key: 2,
1633
- class: "vxe-select-option--add-icon"
1654
+ class: "vxe-select--search-loading"
1634
1655
  },
1635
1656
  [
1636
1657
  h("i", {
1637
- class: getIcon().SELECT_ADD_OPTION
1638
- })
1658
+ class: ["vxe-select--search-icon", getIcon().SELECT_LOADED]
1659
+ }),
1660
+ h(
1661
+ "span",
1662
+ {
1663
+ class: "vxe-select--search-text"
1664
+ },
1665
+ getI18n("vxe.select.loadingText")
1666
+ )
1639
1667
  ]
1640
- ) : renderEmptyElement($xeSelect)
1641
- ] : optVNs
1642
- ) : renderEmptyElement($xeSelect);
1643
- });
1644
- };
1645
- const renderOpts = () => {
1646
- const { optList, searchLoading } = reactData;
1647
- if (searchLoading) {
1668
+ )
1669
+ ];
1670
+ }
1671
+ if (optList.length) {
1672
+ return renderOption(optList);
1673
+ }
1648
1674
  return [
1649
1675
  h(
1650
1676
  "div",
1651
1677
  {
1652
- class: "vxe-select--search-loading"
1678
+ class: "vxe-select--empty-placeholder"
1679
+ },
1680
+ props.emptyText || getI18n("vxe.select.emptyText")
1681
+ )
1682
+ ];
1683
+ };
1684
+ const renderVN = () => {
1685
+ const { className, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton, showCloseButton, showBadge } = props;
1686
+ const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight, xThumbWidth, yThumbHeight } = reactData;
1687
+ const vSize = computeSize.value;
1688
+ const isVScrollbar = computeIsVScrollbar.value;
1689
+ const isDisabled = computeIsDisabled.value;
1690
+ const selectLabel = computeSelectLabel.value;
1691
+ const fullLabel = computeFullLabel.value;
1692
+ const btnTransfer = computeBtnTransfer.value;
1693
+ const formReadonly = computeFormReadonly.value;
1694
+ const inpPlaceholder = computeInpPlaceholder.value;
1695
+ const badgeOpts = computeBadgeOpts.value;
1696
+ const badgeLabel = computeBadgeLabel.value;
1697
+ const defaultSlot = slots.default;
1698
+ if (formReadonly) {
1699
+ return h(
1700
+ "div",
1701
+ {
1702
+ ref: refElem,
1703
+ class: [
1704
+ "vxe-select--readonly",
1705
+ className,
1706
+ {
1707
+ "is--badge": showBadge && badgeLabel,
1708
+ "is--badge-dot": showBadge && badgeOpts.dot
1709
+ }
1710
+ ]
1653
1711
  },
1654
1712
  [
1655
- h("i", {
1656
- class: ["vxe-select--search-icon", getIcon().SELECT_LOADED]
1657
- }),
1713
+ h(
1714
+ "div",
1715
+ {
1716
+ class: "vxe-select-slots",
1717
+ ref: "hideOption"
1718
+ },
1719
+ defaultSlot ? defaultSlot({}) : []
1720
+ ),
1658
1721
  h(
1659
1722
  "span",
1660
1723
  {
1661
- class: "vxe-select--search-text"
1724
+ class: "vxe-select-label",
1725
+ title: fullLabel
1726
+ },
1727
+ selectLabel
1728
+ ),
1729
+ showBadge && badgeLabel ? h(
1730
+ "div",
1731
+ {
1732
+ class: "vxe-badge--label"
1662
1733
  },
1663
- getI18n("vxe.select.loadingText")
1664
- )
1734
+ badgeLabel
1735
+ ) : renderEmptyElement($xeSelect)
1665
1736
  ]
1666
- )
1667
- ];
1668
- }
1669
- if (optList.length) {
1670
- return renderOption(optList);
1671
- }
1672
- return [
1673
- h(
1674
- "div",
1675
- {
1676
- class: "vxe-select--empty-placeholder"
1677
- },
1678
- props.emptyText || getI18n("vxe.select.emptyText")
1679
- )
1680
- ];
1681
- };
1682
- const renderVN = () => {
1683
- const { className, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton, showCloseButton, showBadge } = props;
1684
- const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight, xThumbWidth, yThumbHeight } = reactData;
1685
- const vSize = computeSize.value;
1686
- const isVScrollbar = computeIsVScrollbar.value;
1687
- const isDisabled = computeIsDisabled.value;
1688
- const selectLabel = computeSelectLabel.value;
1689
- const fullLabel = computeFullLabel.value;
1690
- const btnTransfer = computeBtnTransfer.value;
1691
- const formReadonly = computeFormReadonly.value;
1692
- const inpPlaceholder = computeInpPlaceholder.value;
1693
- const badgeOpts = computeBadgeOpts.value;
1694
- const badgeLabel = computeBadgeLabel.value;
1695
- const defaultSlot = slots.default;
1696
- if (formReadonly) {
1737
+ );
1738
+ }
1739
+ const currStyle = computeCurrStyle.value;
1740
+ const selectVals = computeSelectVals.value;
1741
+ const popupWrapperStyle = computePopupWrapperStyle.value;
1742
+ const popupOpts = computePopupOpts.value;
1743
+ const headerSlot = slots.header;
1744
+ const footerSlot = slots.footer;
1745
+ const prefixSlot = slots.prefix;
1746
+ const { appendTo } = popupOpts;
1747
+ const ppClassName = popupOpts.className || props.popupClassName;
1748
+ const scrollbarOpts = computeScrollbarOpts.value;
1749
+ const scrollXVisible = computeScrollXVisible.value;
1750
+ const scrollYVisible = computeScrollYVisible.value;
1751
+ const scrollbarXToTop = computeScrollbarXToTop.value;
1752
+ const scrollbarYToLeft = computeScrollbarYToLeft.value;
1753
+ const scrollXAutoHide = computeScrollXAutoHide.value;
1754
+ const scrollYAutoHide = computeScrollYAutoHide.value;
1755
+ const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
1697
1756
  return h(
1698
1757
  "div",
1699
1758
  {
1700
1759
  ref: refElem,
1701
1760
  class: [
1702
- "vxe-select--readonly",
1703
- className,
1761
+ "vxe-select",
1762
+ className ? XEUtils.isFunction(className) ? className({ $select: $xeSelect }) : className : "",
1704
1763
  {
1764
+ [`size--${vSize}`]: vSize,
1705
1765
  "is--badge": showBadge && badgeLabel,
1706
- "is--badge-dot": showBadge && badgeOpts.dot
1766
+ "is--badge-dot": showBadge && badgeOpts.dot,
1767
+ "is--visible": visiblePanel,
1768
+ "is--disabled": isDisabled,
1769
+ "is--filter": filterable,
1770
+ "is--loading": loading,
1771
+ "is--active": isActivated
1707
1772
  }
1708
- ]
1773
+ ],
1774
+ style: currStyle
1709
1775
  },
1710
1776
  [
1711
1777
  h(
@@ -1717,12 +1783,28 @@ var select_default = defineVxeComponent({
1717
1783
  defaultSlot ? defaultSlot({}) : []
1718
1784
  ),
1719
1785
  h(
1720
- "span",
1786
+ VxeInputComponent,
1721
1787
  {
1722
- class: "vxe-select-label",
1723
- title: fullLabel
1788
+ ref: refInput,
1789
+ clearable: props.clearable,
1790
+ placeholder: inpPlaceholder,
1791
+ editable: false,
1792
+ disabled: isDisabled,
1793
+ type: "text",
1794
+ prefixIcon: props.prefixIcon,
1795
+ suffixIcon: loading ? getIcon().SELECT_LOADED : visiblePanel ? getIcon().SELECT_OPEN : getIcon().SELECT_CLOSE,
1796
+ autoFocus: false,
1797
+ title: fullLabel,
1798
+ modelValue: selectLabel,
1799
+ onClear: clearEvent,
1800
+ onClick: clickEvent,
1801
+ onFocus: focusEvent,
1802
+ onBlur: blurEvent,
1803
+ onSuffixClick: suffixClickEvent
1724
1804
  },
1725
- selectLabel
1805
+ prefixSlot ? {
1806
+ prefix: () => prefixSlot({})
1807
+ } : {}
1726
1808
  ),
1727
1809
  showBadge && badgeLabel ? h(
1728
1810
  "div",
@@ -1730,418 +1812,354 @@ var select_default = defineVxeComponent({
1730
1812
  class: "vxe-badge--label"
1731
1813
  },
1732
1814
  badgeLabel
1733
- ) : renderEmptyElement($xeSelect)
1734
- ]
1735
- );
1736
- }
1737
- const currStyle = computeCurrStyle.value;
1738
- const selectVals = computeSelectVals.value;
1739
- const popupWrapperStyle = computePopupWrapperStyle.value;
1740
- const popupOpts = computePopupOpts.value;
1741
- const headerSlot = slots.header;
1742
- const footerSlot = slots.footer;
1743
- const prefixSlot = slots.prefix;
1744
- const { appendTo } = popupOpts;
1745
- const ppClassName = popupOpts.className || props.popupClassName;
1746
- const scrollbarOpts = computeScrollbarOpts.value;
1747
- const scrollXVisible = computeScrollXVisible.value;
1748
- const scrollYVisible = computeScrollYVisible.value;
1749
- const scrollbarXToTop = computeScrollbarXToTop.value;
1750
- const scrollbarYToLeft = computeScrollbarYToLeft.value;
1751
- const scrollXAutoHide = computeScrollXAutoHide.value;
1752
- const scrollYAutoHide = computeScrollYAutoHide.value;
1753
- const scrollbarWrapperClss = computeScrollbarWrapperClss.value;
1754
- return h(
1755
- "div",
1756
- {
1757
- ref: refElem,
1758
- class: [
1759
- "vxe-select",
1760
- className ? XEUtils.isFunction(className) ? className({ $select: $xeSelect }) : className : "",
1761
- {
1762
- [`size--${vSize}`]: vSize,
1763
- "is--badge": showBadge && badgeLabel,
1764
- "is--badge-dot": showBadge && badgeOpts.dot,
1765
- "is--visible": visiblePanel,
1766
- "is--disabled": isDisabled,
1767
- "is--filter": filterable,
1768
- "is--loading": loading,
1769
- "is--active": isActivated
1770
- }
1771
- ],
1772
- style: currStyle
1773
- },
1774
- [
1775
- h(
1776
- "div",
1777
- {
1778
- class: "vxe-select-slots",
1779
- ref: "hideOption"
1780
- },
1781
- defaultSlot ? defaultSlot({}) : []
1782
- ),
1783
- h(
1784
- VxeInputComponent,
1785
- {
1786
- ref: refInput,
1787
- clearable: props.clearable,
1788
- placeholder: inpPlaceholder,
1789
- editable: false,
1790
- disabled: isDisabled,
1791
- type: "text",
1792
- prefixIcon: props.prefixIcon,
1793
- suffixIcon: loading ? getIcon().SELECT_LOADED : visiblePanel ? getIcon().SELECT_OPEN : getIcon().SELECT_CLOSE,
1794
- autoFocus: false,
1795
- title: fullLabel,
1796
- modelValue: selectLabel,
1797
- onClear: clearEvent,
1798
- onClick: clickEvent,
1799
- onFocus: focusEvent,
1800
- onBlur: blurEvent,
1801
- onSuffixClick: suffixClickEvent
1802
- },
1803
- prefixSlot ? {
1804
- prefix: () => prefixSlot({})
1805
- } : {}
1806
- ),
1807
- showBadge && badgeLabel ? h(
1808
- "div",
1809
- {
1810
- class: "vxe-badge--label"
1811
- },
1812
- badgeLabel
1813
- ) : renderEmptyElement($xeSelect),
1814
- h(
1815
- Teleport,
1816
- {
1817
- to: getPopupContainer(appendTo),
1818
- disabled: btnTransfer ? !initialized : true
1819
- },
1820
- [
1821
- h(
1822
- "div",
1823
- {
1824
- ref: refOptionPanel,
1825
- class: [
1826
- "vxe-table--ignore-clear vxe-select--panel",
1827
- ppClassName ? XEUtils.isFunction(ppClassName) ? ppClassName({ $select: $xeSelect }) : ppClassName : "",
1828
- {
1829
- [`size--${vSize}`]: vSize,
1830
- "is--transfer": btnTransfer,
1831
- "ani--leave": !loading && isAniVisible,
1832
- "ani--enter": !loading && visiblePanel
1833
- }
1834
- ],
1835
- placement: reactData.panelPlacement,
1836
- style: reactData.panelStyle
1837
- },
1838
- initialized && (visiblePanel || isAniVisible) ? [
1839
- h(
1840
- "div",
1841
- {
1842
- class: "vxe-select--panel-wrapper",
1843
- style: popupWrapperStyle
1844
- },
1845
- [
1846
- filterable ? h(
1847
- "div",
1848
- {
1849
- class: "vxe-select--panel-search"
1850
- },
1851
- [
1852
- h(VxeInputComponent, {
1853
- ref: refInpSearch,
1854
- class: "vxe-select-search--input",
1855
- modelValue: reactData.searchValue,
1856
- type: "text",
1857
- clearable: true,
1858
- disabled: false,
1859
- readonly: false,
1860
- placeholder: getI18n("vxe.select.search"),
1861
- prefixIcon: getIcon().INPUT_SEARCH,
1862
- "onUpdate:modelValue": modelSearchEvent,
1863
- onFocus: focusSearchEvent,
1864
- onChange: triggerSearchEvent,
1865
- onSearch: triggerSearchEvent
1866
- })
1867
- ]
1868
- ) : renderEmptyElement($xeSelect),
1869
- showCheckedButton && multiple || showClearButton || headerSlot ? h(
1870
- "div",
1871
- {
1872
- class: "vxe-select--panel-header"
1873
- },
1874
- headerSlot ? callSlot(headerSlot, {}) : [
1875
- h(
1876
- "div",
1877
- {
1878
- class: "vxe-select--header-button"
1879
- },
1880
- [
1881
- h(
1882
- "div",
1883
- {
1884
- class: "vxe-select--header-btns"
1885
- },
1886
- [
1887
- showCheckedButton && multiple ? h(VxeButtonComponent, {
1888
- content: getI18n("vxe.select.allChecked"),
1889
- mode: "text",
1890
- onClick: allCheckedPanelEvent
1891
- }) : renderEmptyElement($xeSelect),
1892
- showClearButton ? h(VxeButtonComponent, {
1893
- content: getI18n("vxe.select.clear"),
1894
- mode: "text",
1895
- onClick: clearCheckedPanelEvent
1896
- }) : renderEmptyElement($xeSelect)
1897
- ]
1898
- )
1899
- ]
1900
- )
1901
- ]
1902
- ) : renderEmptyElement($xeSelect),
1903
- h(
1904
- "div",
1905
- {
1906
- class: [
1907
- "vxe-select--panel-body",
1908
- isVScrollbar ? `ov-x--${scrollXVisible === false ? "hidden" : "visible"}` : "",
1909
- isVScrollbar ? `ov-y--${scrollYVisible === false ? "hidden" : "visible"}` : "",
1910
- isVScrollbar ? `sx-pos--${scrollbarXToTop ? "top" : "bottom"}` : "",
1911
- isVScrollbar ? `sy-pos--${scrollbarYToLeft ? "left" : "right"}` : "",
1912
- {
1913
- "is--virtual-scrollbar": isVScrollbar,
1914
- "ov-padding": isVScrollbar && scrollbarOpts.padding,
1915
- "ov-x--auto-hide": isVScrollbar && scrollXAutoHide,
1916
- "ov-y--auto-hide": isVScrollbar && scrollYAutoHide,
1917
- "overflow-y": yThumbHeight,
1918
- "overflow-x": xThumbWidth
1919
- }
1815
+ ) : renderEmptyElement($xeSelect),
1816
+ h(
1817
+ Teleport,
1818
+ {
1819
+ to: getPopupContainer(appendTo),
1820
+ disabled: btnTransfer ? !initialized : true
1821
+ },
1822
+ [
1823
+ h(
1824
+ "div",
1825
+ {
1826
+ ref: refOptionPanel,
1827
+ class: [
1828
+ "vxe-table--ignore-clear vxe-select--panel",
1829
+ ppClassName ? XEUtils.isFunction(ppClassName) ? ppClassName({ $select: $xeSelect }) : ppClassName : "",
1830
+ {
1831
+ [`size--${vSize}`]: vSize,
1832
+ "is--transfer": btnTransfer,
1833
+ "ani--leave": !loading && isAniVisible,
1834
+ "ani--enter": !loading && visiblePanel
1835
+ }
1836
+ ],
1837
+ placement: reactData.panelPlacement,
1838
+ style: reactData.panelStyle
1839
+ },
1840
+ initialized && (visiblePanel || isAniVisible) ? [
1841
+ h(
1842
+ "div",
1843
+ {
1844
+ class: "vxe-select--panel-wrapper",
1845
+ style: popupWrapperStyle
1846
+ },
1847
+ [
1848
+ filterable ? h(
1849
+ "div",
1850
+ {
1851
+ class: "vxe-select--panel-search"
1852
+ },
1853
+ [
1854
+ h(VxeInputComponent, {
1855
+ ref: refInpSearch,
1856
+ class: "vxe-select-search--input",
1857
+ modelValue: reactData.searchValue,
1858
+ type: "text",
1859
+ clearable: true,
1860
+ disabled: false,
1861
+ readonly: false,
1862
+ placeholder: getI18n("vxe.select.search"),
1863
+ prefixIcon: getIcon().INPUT_SEARCH,
1864
+ "onUpdate:modelValue": modelSearchEvent,
1865
+ onFocus: focusSearchEvent,
1866
+ onChange: triggerSearchEvent,
1867
+ onSearch: triggerSearchEvent
1868
+ })
1920
1869
  ]
1921
- },
1922
- [
1923
- h(
1924
- "div",
1925
- {
1926
- ref: refVirtualWrapper,
1927
- class: "vxe-select-option--wrapper",
1928
- onScroll: scrollEvent
1929
- },
1930
- [
1931
- h("div", {
1932
- ref: refVirtualSpaceElem,
1933
- class: "vxe-select--y-space",
1934
- style: {
1935
- height: bodyHeight ? `${bodyHeight}px` : ""
1936
- }
1937
- }),
1938
- h(
1939
- "div",
1940
- {
1941
- ref: refVirtualBody,
1942
- class: "vxe-select--body",
1870
+ ) : renderEmptyElement($xeSelect),
1871
+ showCheckedButton && multiple || showClearButton || headerSlot ? h(
1872
+ "div",
1873
+ {
1874
+ class: "vxe-select--panel-header"
1875
+ },
1876
+ headerSlot ? callSlot(headerSlot, {}) : [
1877
+ h(
1878
+ "div",
1879
+ {
1880
+ class: "vxe-select--header-button"
1881
+ },
1882
+ [
1883
+ h(
1884
+ "div",
1885
+ {
1886
+ class: "vxe-select--header-btns"
1887
+ },
1888
+ [
1889
+ showCheckedButton && multiple ? h(VxeButtonComponent, {
1890
+ content: getI18n("vxe.select.allChecked"),
1891
+ mode: "text",
1892
+ onClick: allCheckedPanelEvent
1893
+ }) : renderEmptyElement($xeSelect),
1894
+ showClearButton ? h(VxeButtonComponent, {
1895
+ content: getI18n("vxe.select.clear"),
1896
+ mode: "text",
1897
+ onClick: clearCheckedPanelEvent
1898
+ }) : renderEmptyElement($xeSelect)
1899
+ ]
1900
+ )
1901
+ ]
1902
+ )
1903
+ ]
1904
+ ) : renderEmptyElement($xeSelect),
1905
+ h(
1906
+ "div",
1907
+ {
1908
+ class: [
1909
+ "vxe-select--panel-body",
1910
+ isVScrollbar ? `ov-x--${scrollXVisible === false ? "hidden" : "visible"}` : "",
1911
+ isVScrollbar ? `ov-y--${scrollYVisible === false ? "hidden" : "visible"}` : "",
1912
+ isVScrollbar ? `sx-pos--${scrollbarXToTop ? "top" : "bottom"}` : "",
1913
+ isVScrollbar ? `sy-pos--${scrollbarYToLeft ? "left" : "right"}` : "",
1914
+ {
1915
+ "is--virtual-scrollbar": isVScrollbar,
1916
+ "ov-padding": isVScrollbar && scrollbarOpts.padding,
1917
+ "ov-x--auto-hide": isVScrollbar && scrollXAutoHide,
1918
+ "ov-y--auto-hide": isVScrollbar && scrollYAutoHide,
1919
+ "overflow-y": yThumbHeight,
1920
+ "overflow-x": xThumbWidth
1921
+ }
1922
+ ]
1923
+ },
1924
+ [
1925
+ h(
1926
+ "div",
1927
+ {
1928
+ ref: refVirtualWrapper,
1929
+ class: "vxe-select-option--wrapper",
1930
+ onScroll: scrollEvent
1931
+ },
1932
+ [
1933
+ h("div", {
1934
+ ref: refVirtualSpaceElem,
1935
+ class: "vxe-select--y-space",
1943
1936
  style: {
1944
- marginTop: `${topSpaceHeight}px`
1937
+ height: bodyHeight ? `${bodyHeight}px` : ""
1945
1938
  }
1946
- },
1947
- renderOpts()
1948
- )
1949
- ]
1950
- ),
1951
- /**
1952
- * 滚动条
1953
- */
1954
- isVScrollbar ? h(
1955
- "div",
1956
- {
1957
- class: scrollbarWrapperClss
1958
- },
1959
- [
1960
- scrollXVisible === false ? renderEmptyElement($xeSelect) : h(
1961
- "div",
1962
- {
1963
- ref: refTrackXElem,
1964
- class: "vxe-scrollbar--track-x",
1965
- onClick: clickTrackXEvent
1966
- },
1967
- [
1968
- h("div", {
1969
- ref: refThumbXElem,
1970
- class: "vxe-scrollbar--thumb-x",
1971
- onPointerdown: pointerdownThumbXEvent,
1972
- onPointermove: pointermoveThumbXEvent,
1973
- onPointerup: cleatPointerThumbEvent,
1974
- onPointercancel: cleatPointerThumbEvent,
1975
- onLostpointercapture: cleatPointerThumbEvent
1976
- })
1977
- ]
1978
- ),
1979
- scrollYVisible === false ? renderEmptyElement($xeSelect) : h(
1980
- "div",
1981
- {
1982
- ref: refTrackYElem,
1983
- class: "vxe-scrollbar--track-y",
1984
- onClick: clickTrackYEvent
1985
- },
1986
- [
1987
- h("div", {
1988
- ref: refThumbYElem,
1989
- class: "vxe-scrollbar--thumb-y",
1990
- onPointerdown: pointerdownThumbYEvent,
1991
- onPointermove: pointermoveThumbYEvent,
1992
- onPointerup: cleatPointerThumbEvent,
1993
- onPointercancel: cleatPointerThumbEvent,
1994
- onLostpointercapture: cleatPointerThumbEvent
1995
- })
1996
- ]
1997
- )
1998
- ]
1999
- ) : renderEmptyElement($xeSelect)
2000
- ]
2001
- ),
2002
- footerSlot || showTotalButton || showCloseButton && multiple ? h(
2003
- "div",
2004
- {
2005
- class: "vxe-select--panel-footer"
2006
- },
2007
- footerSlot ? callSlot(footerSlot, {}) : [
2008
- h(
2009
- "div",
2010
- {
2011
- class: "vxe-select--footer-button"
2012
- },
2013
- [
2014
- showTotalButton ? h(
2015
- "div",
2016
- {
2017
- class: "vxe-select--total-btns"
2018
- },
2019
- getI18n("vxe.select.total", [selectVals.length, optList.length])
2020
- ) : renderEmptyElement($xeSelect),
2021
- showCloseButton && multiple ? h(
2022
- "div",
2023
- {
2024
- class: "vxe-select--oper-btns"
2025
- },
2026
- [
2027
- h(VxeButtonComponent, {
2028
- content: getI18n("vxe.select.close"),
2029
- mode: "text",
2030
- onClick: closePanelEvent
2031
- })
2032
- ]
2033
- ) : renderEmptyElement($xeSelect)
2034
- ]
2035
- )
2036
- ]
2037
- ) : renderEmptyElement($xeSelect)
2038
- ]
2039
- )
2040
- ] : []
2041
- )
2042
- ]
2043
- )
2044
- ]
1939
+ }),
1940
+ h(
1941
+ "div",
1942
+ {
1943
+ ref: refVirtualBody,
1944
+ class: "vxe-select--body",
1945
+ style: {
1946
+ marginTop: `${topSpaceHeight}px`
1947
+ }
1948
+ },
1949
+ renderOpts()
1950
+ )
1951
+ ]
1952
+ ),
1953
+ /**
1954
+ * 滚动条
1955
+ */
1956
+ isVScrollbar ? h(
1957
+ "div",
1958
+ {
1959
+ class: scrollbarWrapperClss
1960
+ },
1961
+ [
1962
+ scrollXVisible === false ? renderEmptyElement($xeSelect) : h(
1963
+ "div",
1964
+ {
1965
+ ref: refTrackXElem,
1966
+ class: "vxe-scrollbar--track-x",
1967
+ onClick: clickTrackXEvent
1968
+ },
1969
+ [
1970
+ h("div", {
1971
+ ref: refThumbXElem,
1972
+ class: "vxe-scrollbar--thumb-x",
1973
+ onPointerdown: pointerdownThumbXEvent,
1974
+ onPointermove: pointermoveThumbXEvent,
1975
+ onPointerup: cleatPointerThumbEvent,
1976
+ onPointercancel: cleatPointerThumbEvent,
1977
+ onLostpointercapture: cleatPointerThumbEvent
1978
+ })
1979
+ ]
1980
+ ),
1981
+ scrollYVisible === false ? renderEmptyElement($xeSelect) : h(
1982
+ "div",
1983
+ {
1984
+ ref: refTrackYElem,
1985
+ class: "vxe-scrollbar--track-y",
1986
+ onClick: clickTrackYEvent
1987
+ },
1988
+ [
1989
+ h("div", {
1990
+ ref: refThumbYElem,
1991
+ class: "vxe-scrollbar--thumb-y",
1992
+ onPointerdown: pointerdownThumbYEvent,
1993
+ onPointermove: pointermoveThumbYEvent,
1994
+ onPointerup: cleatPointerThumbEvent,
1995
+ onPointercancel: cleatPointerThumbEvent,
1996
+ onLostpointercapture: cleatPointerThumbEvent
1997
+ })
1998
+ ]
1999
+ )
2000
+ ]
2001
+ ) : renderEmptyElement($xeSelect)
2002
+ ]
2003
+ ),
2004
+ footerSlot || showTotalButton || showCloseButton && multiple ? h(
2005
+ "div",
2006
+ {
2007
+ class: "vxe-select--panel-footer"
2008
+ },
2009
+ footerSlot ? callSlot(footerSlot, {}) : [
2010
+ h(
2011
+ "div",
2012
+ {
2013
+ class: "vxe-select--footer-button"
2014
+ },
2015
+ [
2016
+ showTotalButton ? h(
2017
+ "div",
2018
+ {
2019
+ class: "vxe-select--total-btns"
2020
+ },
2021
+ getI18n("vxe.select.total", [selectVals.length, optList.length])
2022
+ ) : renderEmptyElement($xeSelect),
2023
+ showCloseButton && multiple ? h(
2024
+ "div",
2025
+ {
2026
+ class: "vxe-select--oper-btns"
2027
+ },
2028
+ [
2029
+ h(VxeButtonComponent, {
2030
+ content: getI18n("vxe.select.close"),
2031
+ mode: "text",
2032
+ onClick: closePanelEvent
2033
+ })
2034
+ ]
2035
+ ) : renderEmptyElement($xeSelect)
2036
+ ]
2037
+ )
2038
+ ]
2039
+ ) : renderEmptyElement($xeSelect)
2040
+ ]
2041
+ )
2042
+ ] : []
2043
+ )
2044
+ ]
2045
+ )
2046
+ ]
2047
+ );
2048
+ };
2049
+ watch(
2050
+ () => reactData.staticOptions,
2051
+ (val) => {
2052
+ loadData(val);
2053
+ }
2054
+ );
2055
+ const refOptsFlag = ref(0);
2056
+ watch(
2057
+ () => props.options,
2058
+ () => {
2059
+ refOptsFlag.value++;
2060
+ }
2061
+ );
2062
+ watch(
2063
+ () => props.options ? props.options.length : -1,
2064
+ () => {
2065
+ refOptsFlag.value++;
2066
+ }
2067
+ );
2068
+ watch(refOptsFlag, () => {
2069
+ loadData(props.options || []);
2070
+ });
2071
+ const refOptGrpsFlag = ref(0);
2072
+ watch(
2073
+ () => props.optionGroups,
2074
+ () => {
2075
+ refOptGrpsFlag.value++;
2076
+ }
2077
+ );
2078
+ watch(
2079
+ () => props.optionGroups ? props.optionGroups.length : -1,
2080
+ () => {
2081
+ refOptGrpsFlag.value++;
2082
+ }
2045
2083
  );
2046
- };
2047
- watch(() => reactData.staticOptions, (val) => {
2048
- loadData(val);
2049
- });
2050
- const refOptsFlag = ref(0);
2051
- watch(() => props.options, () => {
2052
- refOptsFlag.value++;
2053
- });
2054
- watch(() => props.options ? props.options.length : -1, () => {
2055
- refOptsFlag.value++;
2056
- });
2057
- watch(refOptsFlag, () => {
2058
- loadData(props.options || []);
2059
- });
2060
- const refOptGrpsFlag = ref(0);
2061
- watch(() => props.optionGroups, () => {
2062
- refOptGrpsFlag.value++;
2063
- });
2064
- watch(() => props.optionGroups ? props.optionGroups.length : -1, () => {
2065
- refOptGrpsFlag.value++;
2066
- });
2067
- watch(refOptGrpsFlag, () => {
2068
- loadData(props.optionGroups || []);
2069
- });
2070
- const reScrollFlag = ref(0);
2071
- const reLayoutFlag = ref(0);
2072
- watch(computeIsVScrollbar, () => {
2073
- nextTick(() => {
2074
- bindScrollbarResize();
2084
+ watch(refOptGrpsFlag, () => {
2085
+ loadData(props.optionGroups || []);
2086
+ });
2087
+ const reScrollFlag = ref(0);
2088
+ const reLayoutFlag = ref(0);
2089
+ watch(computeIsVScrollbar, () => {
2075
2090
  nextTick(() => {
2076
- reLayoutFlag.value++;
2091
+ bindScrollbarResize();
2092
+ nextTick(() => {
2093
+ reLayoutFlag.value++;
2094
+ });
2077
2095
  });
2078
2096
  });
2079
- });
2080
- watch(computeScrollYWidth, () => {
2081
- reLayoutFlag.value++;
2082
- });
2083
- watch(computeScrollXHeight, () => {
2084
- reLayoutFlag.value++;
2085
- });
2086
- watch(computeScrollXVisible, () => {
2087
- nextTick(() => {
2097
+ watch(computeScrollYWidth, () => {
2088
2098
  reLayoutFlag.value++;
2089
2099
  });
2090
- });
2091
- watch(computeScrollYVisible, () => {
2092
- nextTick(() => {
2100
+ watch(computeScrollXHeight, () => {
2093
2101
  reLayoutFlag.value++;
2094
2102
  });
2095
- });
2096
- watch(reLayoutFlag, () => {
2097
- recalculate().then(() => {
2098
- recalculate();
2103
+ watch(computeScrollXVisible, () => {
2104
+ nextTick(() => {
2105
+ reLayoutFlag.value++;
2106
+ });
2107
+ });
2108
+ watch(computeScrollYVisible, () => {
2109
+ nextTick(() => {
2110
+ reLayoutFlag.value++;
2111
+ });
2112
+ });
2113
+ watch(reLayoutFlag, () => {
2114
+ recalculate().then(() => {
2115
+ recalculate();
2116
+ });
2117
+ });
2118
+ watch(reScrollFlag, () => {
2119
+ updateScrollbar().then(() => {
2120
+ updateScrollbar();
2121
+ });
2099
2122
  });
2100
- });
2101
- watch(reScrollFlag, () => {
2102
- updateScrollbar().then(() => {
2103
- updateScrollbar();
2123
+ onMounted(() => {
2124
+ nextTick(() => {
2125
+ const { options, optionGroups } = props;
2126
+ if (optionGroups) {
2127
+ loadData(optionGroups);
2128
+ } else if (options) {
2129
+ loadData(options);
2130
+ }
2131
+ });
2132
+ reLayoutFlag.value++;
2133
+ globalEvents.on($xeSelect, "mousedown", handleGlobalMousedownEvent);
2134
+ globalEvents.on($xeSelect, "keydown", handleGlobalKeydownEvent);
2135
+ globalEvents.on($xeSelect, "blur", handleGlobalBlurEvent);
2136
+ globalEvents.on($xeSelect, "resize", handleGlobalResizeEvent);
2137
+ globalEvents.on($xeSelect, "scroll", handleGlobalScrollEvent);
2104
2138
  });
2105
- });
2106
- onMounted(() => {
2107
- nextTick(() => {
2108
- const { options, optionGroups } = props;
2109
- if (optionGroups) {
2110
- loadData(optionGroups);
2111
- } else if (options) {
2112
- loadData(options);
2139
+ onBeforeUnmount(() => {
2140
+ const { scrollObserver } = internalData;
2141
+ if (scrollObserver) {
2142
+ scrollObserver.disconnect();
2113
2143
  }
2114
2144
  });
2115
- reLayoutFlag.value++;
2116
- globalEvents.on($xeSelect, "mousedown", handleGlobalMousedownEvent);
2117
- globalEvents.on($xeSelect, "keydown", handleGlobalKeydownEvent);
2118
- globalEvents.on($xeSelect, "blur", handleGlobalBlurEvent);
2119
- globalEvents.on($xeSelect, "resize", handleGlobalResizeEvent);
2120
- globalEvents.on($xeSelect, "scroll", handleGlobalScrollEvent);
2121
- });
2122
- onBeforeUnmount(() => {
2123
- const { scrollObserver } = internalData;
2124
- if (scrollObserver) {
2125
- scrollObserver.disconnect();
2126
- }
2127
- });
2128
- onUnmounted(() => {
2129
- globalEvents.off($xeSelect, "mousedown");
2130
- globalEvents.off($xeSelect, "keydown");
2131
- globalEvents.off($xeSelect, "blur");
2132
- globalEvents.off($xeSelect, "resize");
2133
- globalEvents.off($xeSelect, "scroll");
2134
- XEUtils.assign(reactData, createReactData());
2135
- XEUtils.assign(internalData, createInternalData());
2136
- });
2137
- provide("$xeSelect", $xeSelect);
2138
- $xeSelect.renderVN = renderVN;
2139
- return $xeSelect;
2140
- },
2141
- render() {
2142
- return this.renderVN();
2143
- }
2144
- });
2145
+ onUnmounted(() => {
2146
+ globalEvents.off($xeSelect, "mousedown");
2147
+ globalEvents.off($xeSelect, "keydown");
2148
+ globalEvents.off($xeSelect, "blur");
2149
+ globalEvents.off($xeSelect, "resize");
2150
+ globalEvents.off($xeSelect, "scroll");
2151
+ XEUtils.assign(reactData, createReactData());
2152
+ XEUtils.assign(internalData, createInternalData());
2153
+ });
2154
+ provide("$xeSelect", $xeSelect);
2155
+ $xeSelect.renderVN = renderVN;
2156
+ return $xeSelect;
2157
+ },
2158
+ render() {
2159
+ return this.renderVN();
2160
+ }
2161
+ })
2162
+ );
2145
2163
  export {
2146
2164
  select_default as default
2147
2165
  };