vxe-pc-ui 3.0.1 → 3.0.2

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/README.md +23 -25
  2. package/es/calendar/index.js +12 -0
  3. package/es/calendar/src/calendar.js +1227 -0
  4. package/es/calendar/style.css +247 -0
  5. package/es/calendar/style.min.css +1 -0
  6. package/es/checkbox/src/checkbox.js +6 -1
  7. package/es/checkbox/src/group.js +6 -1
  8. package/es/collapse/index.js +12 -0
  9. package/es/collapse/src/collapse-pane.js +39 -0
  10. package/es/collapse/src/collapse.js +39 -0
  11. package/es/collapse/style.css +0 -0
  12. package/es/collapse/style.min.css +0 -0
  13. package/es/collapse-pane/index.js +12 -0
  14. package/es/collapse-pane/style.css +0 -0
  15. package/es/collapse-pane/style.min.css +0 -0
  16. package/es/components.js +27 -27
  17. package/es/date-picker/src/date-picker.js +17 -13
  18. package/es/drawer/src/drawer.js +17 -12
  19. package/es/form/index.js +13 -0
  20. package/es/form/render/index.js +461 -0
  21. package/es/form/src/form-config-item.js +201 -0
  22. package/es/form/src/form-gather.js +87 -0
  23. package/es/form/src/form-item.js +291 -0
  24. package/es/form/src/form.js +762 -0
  25. package/es/form/src/itemInfo.js +43 -0
  26. package/es/form/src/render.js +78 -0
  27. package/es/form/src/util.js +66 -0
  28. package/es/form/style.css +470 -0
  29. package/es/form/style.min.css +1 -0
  30. package/es/form-gather/index.js +12 -0
  31. package/es/form-gather/style.css +0 -0
  32. package/es/form-gather/style.min.css +0 -0
  33. package/es/form-item/index.js +12 -0
  34. package/es/form-item/style.css +0 -0
  35. package/es/form-item/style.min.css +0 -0
  36. package/es/icon/style.css +1 -1
  37. package/es/icon-picker/src/icon-picker.js +5 -1
  38. package/es/image/src/preview.js +1 -2
  39. package/es/input/src/input.js +19 -15
  40. package/es/list/index.js +12 -0
  41. package/es/list/src/list.js +373 -0
  42. package/es/list/style.css +28 -0
  43. package/es/list/style.min.css +1 -0
  44. package/es/loading/src/loading.js +5 -0
  45. package/es/menu/src/menu.js +6 -2
  46. package/es/modal/src/modal.js +7 -4
  47. package/es/number-input/src/number-input.js +11 -7
  48. package/es/pager/style.css +303 -0
  49. package/es/pager/style.min.css +1 -0
  50. package/es/password-input/src/password-input.js +7 -3
  51. package/es/pulldown/src/pulldown.js +6 -2
  52. package/es/radio/src/button.js +6 -2
  53. package/es/radio/src/group.js +6 -2
  54. package/es/radio/src/radio.js +6 -2
  55. package/es/select/src/select.js +16 -1
  56. package/es/select/src/util.js +2 -1
  57. package/es/style.css +1 -1
  58. package/es/style.min.css +1 -1
  59. package/es/switch/src/switch.js +6 -2
  60. package/es/tabs/src/tabs.js +8 -3
  61. package/es/textarea/src/textarea.js +9 -5
  62. package/es/tooltip/src/tooltip.js +6 -1
  63. package/es/tree/index.js +12 -0
  64. package/es/tree/src/tree.js +1216 -0
  65. package/es/tree/style.css +219 -0
  66. package/es/tree/style.min.css +1 -0
  67. package/es/tree-select/index.js +12 -0
  68. package/es/tree-select/src/tree-select.js +685 -0
  69. package/es/tree-select/style.css +129 -0
  70. package/es/tree-select/style.min.css +1 -0
  71. package/es/ui/index.js +1 -1
  72. package/es/ui/src/log.js +1 -1
  73. package/es/ui/src/vn.js +1 -1
  74. package/es/upload/src/upload.js +9 -5
  75. package/es/vxe-calendar/index.js +3 -0
  76. package/es/vxe-calendar/style.css +247 -0
  77. package/es/vxe-calendar/style.min.css +1 -0
  78. package/es/vxe-collapse/index.js +3 -0
  79. package/es/vxe-collapse/style.css +0 -0
  80. package/es/vxe-collapse/style.min.css +0 -0
  81. package/es/vxe-collapse-pane/index.js +3 -0
  82. package/es/vxe-collapse-pane/style.css +0 -0
  83. package/es/vxe-collapse-pane/style.min.css +0 -0
  84. package/es/vxe-form/index.js +3 -0
  85. package/es/vxe-form/style.css +470 -0
  86. package/es/vxe-form/style.min.css +1 -0
  87. package/es/vxe-form-gather/index.js +3 -0
  88. package/es/vxe-form-gather/style.css +0 -0
  89. package/es/vxe-form-gather/style.min.css +0 -0
  90. package/es/vxe-form-item/index.js +3 -0
  91. package/es/vxe-form-item/style.css +0 -0
  92. package/es/vxe-form-item/style.min.css +0 -0
  93. package/es/vxe-list/index.js +3 -0
  94. package/es/vxe-list/style.css +28 -0
  95. package/es/vxe-list/style.min.css +1 -0
  96. package/es/vxe-pager/index.js +3 -0
  97. package/es/vxe-pager/style.css +303 -0
  98. package/es/vxe-pager/style.min.css +1 -0
  99. package/es/vxe-tree/index.js +3 -0
  100. package/es/vxe-tree/style.css +219 -0
  101. package/es/vxe-tree/style.min.css +1 -0
  102. package/es/vxe-tree-select/index.js +3 -0
  103. package/es/vxe-tree-select/style.css +129 -0
  104. package/es/vxe-tree-select/style.min.css +1 -0
  105. package/lib/calendar/index.js +19 -0
  106. package/lib/calendar/index.min.js +1 -0
  107. package/lib/calendar/src/calendar.js +1286 -0
  108. package/lib/calendar/src/calendar.min.js +1 -0
  109. package/lib/calendar/style/index.js +1 -0
  110. package/lib/calendar/style/style.css +247 -0
  111. package/lib/calendar/style/style.min.css +1 -0
  112. package/lib/checkbox/src/checkbox.js +6 -1
  113. package/lib/checkbox/src/checkbox.min.js +1 -1
  114. package/lib/checkbox/src/group.js +6 -1
  115. package/lib/checkbox/src/group.min.js +1 -1
  116. package/lib/collapse/index.js +19 -0
  117. package/lib/collapse/index.min.js +1 -0
  118. package/lib/collapse/src/collapse-pane.js +48 -0
  119. package/lib/collapse/src/collapse-pane.min.js +1 -0
  120. package/lib/collapse/src/collapse.js +48 -0
  121. package/lib/collapse/src/collapse.min.js +1 -0
  122. package/lib/collapse/style/index.js +1 -0
  123. package/lib/collapse/style/style.css +0 -0
  124. package/lib/collapse/style/style.min.css +0 -0
  125. package/lib/collapse-pane/index.js +19 -0
  126. package/lib/collapse-pane/index.min.js +1 -0
  127. package/lib/collapse-pane/style/index.js +1 -0
  128. package/lib/collapse-pane/style/style.css +0 -0
  129. package/lib/collapse-pane/style/style.min.css +0 -0
  130. package/lib/components.js +114 -39
  131. package/lib/components.min.js +1 -1
  132. package/lib/date-picker/src/date-picker.js +17 -13
  133. package/lib/date-picker/src/date-picker.min.js +1 -1
  134. package/lib/drawer/src/drawer.js +17 -12
  135. package/lib/drawer/src/drawer.min.js +1 -1
  136. package/lib/form/index.js +20 -0
  137. package/lib/form/index.min.js +1 -0
  138. package/lib/form/render/index.js +509 -0
  139. package/lib/form/render/index.min.js +1 -0
  140. package/lib/form/src/form-config-item.js +210 -0
  141. package/lib/form/src/form-config-item.min.js +1 -0
  142. package/lib/form/src/form-gather.js +99 -0
  143. package/lib/form/src/form-gather.min.js +1 -0
  144. package/lib/form/src/form-item.js +299 -0
  145. package/lib/form/src/form-item.min.js +1 -0
  146. package/lib/form/src/form.js +856 -0
  147. package/lib/form/src/form.min.js +1 -0
  148. package/lib/form/src/itemInfo.js +60 -0
  149. package/lib/form/src/itemInfo.min.js +1 -0
  150. package/lib/form/src/render.js +94 -0
  151. package/lib/form/src/render.min.js +1 -0
  152. package/lib/form/src/util.js +93 -0
  153. package/lib/form/src/util.min.js +1 -0
  154. package/lib/form/style/index.js +1 -0
  155. package/lib/form/style/style.css +470 -0
  156. package/lib/form/style/style.min.css +1 -0
  157. package/lib/form-gather/index.js +19 -0
  158. package/lib/form-gather/index.min.js +1 -0
  159. package/lib/form-gather/style/index.js +1 -0
  160. package/lib/form-gather/style/style.css +0 -0
  161. package/lib/form-gather/style/style.min.css +0 -0
  162. package/lib/form-item/index.js +19 -0
  163. package/lib/form-item/index.min.js +1 -0
  164. package/lib/form-item/style/index.js +1 -0
  165. package/lib/form-item/style/style.css +0 -0
  166. package/lib/form-item/style/style.min.css +0 -0
  167. package/lib/icon/style/style.css +1 -1
  168. package/lib/icon/style/style.min.css +1 -1
  169. package/lib/icon-picker/src/icon-picker.js +5 -1
  170. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  171. package/lib/image/src/preview.js +1 -2
  172. package/lib/image/src/preview.min.js +1 -1
  173. package/lib/index.umd.js +11284 -5009
  174. package/lib/index.umd.min.js +1 -1
  175. package/lib/input/src/input.js +19 -15
  176. package/lib/input/src/input.min.js +1 -1
  177. package/lib/list/index.js +19 -0
  178. package/lib/list/index.min.js +1 -0
  179. package/lib/list/src/list.js +415 -0
  180. package/lib/list/src/list.min.js +1 -0
  181. package/lib/list/style/index.js +1 -0
  182. package/lib/list/style/style.css +28 -0
  183. package/lib/list/style/style.min.css +1 -0
  184. package/lib/loading/src/loading.js +5 -0
  185. package/lib/loading/src/loading.min.js +1 -1
  186. package/lib/menu/src/menu.js +6 -2
  187. package/lib/menu/src/menu.min.js +1 -1
  188. package/lib/modal/src/modal.js +7 -4
  189. package/lib/modal/src/modal.min.js +1 -1
  190. package/lib/number-input/src/number-input.js +11 -7
  191. package/lib/number-input/src/number-input.min.js +1 -1
  192. package/lib/pager/style/index.js +1 -0
  193. package/lib/pager/style/style.css +303 -0
  194. package/lib/pager/style/style.min.css +1 -0
  195. package/lib/password-input/src/password-input.js +7 -3
  196. package/lib/password-input/src/password-input.min.js +1 -1
  197. package/lib/pulldown/src/pulldown.js +6 -2
  198. package/lib/pulldown/src/pulldown.min.js +1 -1
  199. package/lib/radio/src/button.js +6 -2
  200. package/lib/radio/src/button.min.js +1 -1
  201. package/lib/radio/src/group.js +6 -2
  202. package/lib/radio/src/group.min.js +1 -1
  203. package/lib/radio/src/radio.js +6 -2
  204. package/lib/radio/src/radio.min.js +1 -1
  205. package/lib/select/src/select.js +16 -1
  206. package/lib/select/src/select.min.js +1 -1
  207. package/lib/select/src/util.js +2 -1
  208. package/lib/style.css +1 -1
  209. package/lib/style.min.css +1 -1
  210. package/lib/switch/src/switch.js +6 -2
  211. package/lib/switch/src/switch.min.js +1 -1
  212. package/lib/tabs/src/tabs.js +8 -3
  213. package/lib/tabs/src/tabs.min.js +1 -1
  214. package/lib/textarea/src/textarea.js +9 -5
  215. package/lib/textarea/src/textarea.min.js +1 -1
  216. package/lib/tooltip/src/tooltip.js +6 -1
  217. package/lib/tooltip/src/tooltip.min.js +1 -1
  218. package/lib/tree/index.js +19 -0
  219. package/lib/tree/index.min.js +1 -0
  220. package/lib/tree/src/tree.js +1324 -0
  221. package/lib/tree/src/tree.min.js +1 -0
  222. package/lib/tree/style/index.js +1 -0
  223. package/lib/tree/style/style.css +219 -0
  224. package/lib/tree/style/style.min.css +1 -0
  225. package/lib/tree-select/index.js +19 -0
  226. package/lib/tree-select/index.min.js +1 -0
  227. package/lib/tree-select/src/tree-select.js +695 -0
  228. package/lib/tree-select/src/tree-select.min.js +1 -0
  229. package/lib/tree-select/style/index.js +1 -0
  230. package/lib/tree-select/style/style.css +129 -0
  231. package/lib/tree-select/style/style.min.css +1 -0
  232. package/lib/ui/index.js +1 -1
  233. package/lib/ui/index.min.js +1 -1
  234. package/lib/ui/src/log.js +1 -1
  235. package/lib/ui/src/log.min.js +1 -1
  236. package/lib/ui/src/vn.js +1 -1
  237. package/lib/ui/src/vn.min.js +1 -1
  238. package/lib/upload/src/upload.js +9 -5
  239. package/lib/upload/src/upload.min.js +1 -1
  240. package/lib/vxe-calendar/index.js +23 -0
  241. package/lib/vxe-calendar/index.min.js +1 -0
  242. package/lib/vxe-calendar/style/index.js +1 -0
  243. package/lib/vxe-calendar/style/style.css +247 -0
  244. package/lib/vxe-calendar/style/style.min.css +1 -0
  245. package/lib/vxe-collapse/index.js +23 -0
  246. package/lib/vxe-collapse/index.min.js +1 -0
  247. package/lib/vxe-collapse/style/index.js +1 -0
  248. package/lib/vxe-collapse/style/style.css +0 -0
  249. package/lib/vxe-collapse/style/style.min.css +0 -0
  250. package/lib/vxe-collapse-pane/index.js +23 -0
  251. package/lib/vxe-collapse-pane/index.min.js +1 -0
  252. package/lib/vxe-collapse-pane/style/index.js +1 -0
  253. package/lib/vxe-collapse-pane/style/style.css +0 -0
  254. package/lib/vxe-collapse-pane/style/style.min.css +0 -0
  255. package/lib/vxe-form/index.js +23 -0
  256. package/lib/vxe-form/index.min.js +1 -0
  257. package/lib/vxe-form/style/index.js +1 -0
  258. package/lib/vxe-form/style/style.css +470 -0
  259. package/lib/vxe-form/style/style.min.css +1 -0
  260. package/lib/vxe-form-gather/index.js +23 -0
  261. package/lib/vxe-form-gather/index.min.js +1 -0
  262. package/lib/vxe-form-gather/style/index.js +1 -0
  263. package/lib/vxe-form-gather/style/style.css +0 -0
  264. package/lib/vxe-form-gather/style/style.min.css +0 -0
  265. package/lib/vxe-form-item/index.js +23 -0
  266. package/lib/vxe-form-item/index.min.js +1 -0
  267. package/lib/vxe-form-item/style/index.js +1 -0
  268. package/lib/vxe-form-item/style/style.css +0 -0
  269. package/lib/vxe-form-item/style/style.min.css +0 -0
  270. package/lib/vxe-list/index.js +23 -0
  271. package/lib/vxe-list/index.min.js +1 -0
  272. package/lib/vxe-list/style/index.js +1 -0
  273. package/lib/vxe-list/style/style.css +28 -0
  274. package/lib/vxe-list/style/style.min.css +1 -0
  275. package/lib/vxe-pager/index.js +23 -0
  276. package/lib/vxe-pager/index.min.js +1 -0
  277. package/lib/vxe-pager/style/index.js +1 -0
  278. package/lib/vxe-pager/style/style.css +303 -0
  279. package/lib/vxe-pager/style/style.min.css +1 -0
  280. package/lib/vxe-tree/index.js +23 -0
  281. package/lib/vxe-tree/index.min.js +1 -0
  282. package/lib/vxe-tree/style/index.js +1 -0
  283. package/lib/vxe-tree/style/style.css +219 -0
  284. package/lib/vxe-tree/style/style.min.css +1 -0
  285. package/lib/vxe-tree-select/index.js +23 -0
  286. package/lib/vxe-tree-select/index.min.js +1 -0
  287. package/lib/vxe-tree-select/style/index.js +1 -0
  288. package/lib/vxe-tree-select/style/style.css +129 -0
  289. package/lib/vxe-tree-select/style/style.min.css +1 -0
  290. package/package.json +1 -1
  291. package/packages/calendar/index.ts +16 -0
  292. package/packages/calendar/src/calendar.ts +1281 -0
  293. package/packages/checkbox/src/checkbox.ts +7 -1
  294. package/packages/checkbox/src/group.ts +8 -2
  295. package/packages/collapse/index.ts +16 -0
  296. package/packages/collapse/src/collapse-pane.ts +47 -0
  297. package/packages/collapse/src/collapse.ts +47 -0
  298. package/packages/collapse-pane/index.ts +16 -0
  299. package/packages/components.ts +27 -27
  300. package/packages/date-picker/src/date-picker.ts +18 -13
  301. package/packages/drawer/src/drawer.ts +18 -12
  302. package/packages/form/index.ts +17 -0
  303. package/packages/form/render/index.ts +499 -0
  304. package/packages/form/src/form-config-item.ts +219 -0
  305. package/packages/form/src/form-gather.ts +104 -0
  306. package/packages/form/src/form-item.ts +322 -0
  307. package/packages/form/src/form.ts +809 -0
  308. package/packages/form/src/itemInfo.ts +47 -0
  309. package/packages/form/src/render.ts +98 -0
  310. package/packages/form/src/util.ts +80 -0
  311. package/packages/form-gather/index.ts +16 -0
  312. package/packages/form-item/index.ts +16 -0
  313. package/packages/icon-picker/src/icon-picker.ts +6 -1
  314. package/packages/image/src/preview.ts +1 -2
  315. package/packages/input/src/input.ts +20 -15
  316. package/packages/layout-footer/src/layout-footer.ts +1 -0
  317. package/packages/list/index.ts +16 -0
  318. package/packages/list/src/list.ts +403 -0
  319. package/packages/loading/src/loading.ts +6 -0
  320. package/packages/menu/src/menu.ts +7 -2
  321. package/packages/modal/src/modal.ts +8 -4
  322. package/packages/number-input/src/number-input.ts +12 -7
  323. package/packages/password-input/src/password-input.ts +8 -3
  324. package/packages/pulldown/src/pulldown.ts +7 -2
  325. package/packages/radio/src/button.ts +7 -2
  326. package/packages/radio/src/group.ts +7 -2
  327. package/packages/radio/src/radio.ts +7 -2
  328. package/packages/select/src/select.ts +17 -1
  329. package/packages/select/src/util.ts +4 -3
  330. package/packages/switch/src/switch.ts +7 -2
  331. package/packages/tabs/src/tabs.ts +9 -3
  332. package/packages/textarea/src/textarea.ts +10 -5
  333. package/packages/tooltip/src/tooltip.ts +7 -1
  334. package/packages/tree/index.ts +16 -0
  335. package/packages/tree/src/tree.ts +1292 -0
  336. package/packages/tree-select/index.ts +16 -0
  337. package/packages/tree-select/src/tree-select.ts +743 -0
  338. package/packages/ui/src/vn.ts +1 -1
  339. package/packages/upload/src/upload.ts +10 -5
  340. package/types/components/calendar.d.ts +6 -0
  341. package/types/components/colgroup.d.ts +1 -0
  342. package/types/components/column.d.ts +1 -0
  343. package/types/components/drawer.d.ts +11 -10
  344. package/types/components/form-item.d.ts +1 -1
  345. package/types/components/form.d.ts +8 -1
  346. package/types/components/list.d.ts +1 -0
  347. package/types/components/table.d.ts +43 -4
  348. package/types/components/toolbar.d.ts +5 -0
  349. package/types/components/tree-select.d.ts +4 -0
  350. package/types/ui/index.d.ts +0 -5
  351. package/types/ui/renderer.d.ts +37 -36
  352. package/types/handles/form-design.d.ts +0 -4
  353. package/types/handles/index.d.ts +0 -3
  354. package/types/handles/list-design.d.ts +0 -4
  355. package/types/handles/table.d.ts +0 -4
  356. /package/es/icon/style/{iconfont.1725723159302.ttf → iconfont.1725869586078.ttf} +0 -0
  357. /package/es/icon/style/{iconfont.1725723159302.woff → iconfont.1725869586078.woff} +0 -0
  358. /package/es/icon/style/{iconfont.1725723159302.woff2 → iconfont.1725869586078.woff2} +0 -0
  359. /package/es/{iconfont.1725723159302.ttf → iconfont.1725869586078.ttf} +0 -0
  360. /package/es/{iconfont.1725723159302.woff → iconfont.1725869586078.woff} +0 -0
  361. /package/es/{iconfont.1725723159302.woff2 → iconfont.1725869586078.woff2} +0 -0
  362. /package/lib/icon/style/{iconfont.1725723159302.ttf → iconfont.1725869586078.ttf} +0 -0
  363. /package/lib/icon/style/{iconfont.1725723159302.woff → iconfont.1725869586078.woff} +0 -0
  364. /package/lib/icon/style/{iconfont.1725723159302.woff2 → iconfont.1725869586078.woff2} +0 -0
  365. /package/lib/{iconfont.1725723159302.ttf → iconfont.1725869586078.ttf} +0 -0
  366. /package/lib/{iconfont.1725723159302.woff → iconfont.1725869586078.woff} +0 -0
  367. /package/lib/{iconfont.1725723159302.woff2 → iconfont.1725869586078.woff2} +0 -0
@@ -0,0 +1,743 @@
1
+ import { PropType, CreateElement, VNode } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { getConfig, getI18n, getIcon, globalEvents, createEvent, globalMixins, renderEmptyElement } from '../../ui'
5
+ import { getEventTargetNode, getAbsolutePos } from '../../ui/src/dom'
6
+ import { getLastZIndex, nextZIndex } from '../../ui/src/utils'
7
+
8
+ import VxeInputComponent from '../../input/src/input'
9
+ import VxeTreeComponent from '../../tree/src/tree'
10
+
11
+ import type { TreeSelectReactData, VxeTreeSelectEmits, TreeSelectInternalData, VxeComponentSizeType, ValueOf, VxeTreeSelectPropTypes, VxeFormDefines, VxeDrawerConstructor, VxeDrawerMethods, VxeTableConstructor, VxeTablePrivateMethods, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods } from '../../../types'
12
+
13
+ function getOptUniqueId () {
14
+ return XEUtils.uniqueId('node_')
15
+ }
16
+
17
+ export default defineVxeComponent({
18
+ name: 'VxeTreeSelect',
19
+ mixins: [
20
+ globalMixins.sizeMixin
21
+ ],
22
+ props: {
23
+ value: [String, Number, Array] as PropType<VxeTreeSelectPropTypes.ModelValue>,
24
+ clearable: Boolean as PropType<VxeTreeSelectPropTypes.Clearable>,
25
+ placeholder: {
26
+ type: String as PropType<VxeTreeSelectPropTypes.Placeholder>,
27
+ default: () => XEUtils.eqNull(getConfig().select.placeholder) ? getI18n('vxe.base.pleaseSelect') : getConfig().select.placeholder
28
+ },
29
+ readonly: {
30
+ type: Boolean as PropType<VxeTreeSelectPropTypes.Readonly>,
31
+ default: null
32
+ },
33
+ loading: Boolean as PropType<VxeTreeSelectPropTypes.Loading>,
34
+ disabled: {
35
+ type: Boolean as PropType<VxeTreeSelectPropTypes.Disabled>,
36
+ default: null
37
+ },
38
+ multiple: Boolean as PropType<VxeTreeSelectPropTypes.Multiple>,
39
+ className: [String, Function] as PropType<VxeTreeSelectPropTypes.ClassName>,
40
+ popupClassName: [String, Function] as PropType<VxeTreeSelectPropTypes.PopupClassName>,
41
+ prefixIcon: String as PropType<VxeTreeSelectPropTypes.PrefixIcon>,
42
+ placement: String as PropType<VxeTreeSelectPropTypes.Placement>,
43
+ options: Array as PropType<VxeTreeSelectPropTypes.Options>,
44
+ optionProps: Object as PropType<VxeTreeSelectPropTypes.OptionProps>,
45
+ size: {
46
+ type: String as PropType<VxeTreeSelectPropTypes.Size>,
47
+ default: () => getConfig().select.size || getConfig().size
48
+ },
49
+ remote: Boolean as PropType<VxeTreeSelectPropTypes.Remote>,
50
+ remoteMethod: Function as PropType<VxeTreeSelectPropTypes.RemoteMethod>,
51
+ treeConfig: Object as PropType<VxeTreeSelectPropTypes.TreeConfig>,
52
+ transfer: {
53
+ type: Boolean as PropType<VxeTreeSelectPropTypes.Transfer>,
54
+ default: null
55
+ }
56
+ },
57
+ inject: {
58
+ $xeModal: {
59
+ default: null
60
+ },
61
+ $xeDrawer: {
62
+ default: null
63
+ },
64
+ $xeTable: {
65
+ default: null
66
+ },
67
+ $xeForm: {
68
+ default: null
69
+ },
70
+ formItemInfo: {
71
+ from: 'xeFormItemInfo',
72
+ default: null
73
+ }
74
+ },
75
+ provide () {
76
+ const $xeTreeSelect = this
77
+ return {
78
+ $xeTreeSelect
79
+ }
80
+ },
81
+ data () {
82
+ const xID = XEUtils.uniqueId()
83
+ const reactData: TreeSelectReactData = {
84
+ initialized: false,
85
+ fullOptionList: [],
86
+ fullNodeMaps: {},
87
+ visibleOptionList: [],
88
+ panelIndex: 0,
89
+ panelStyle: {},
90
+ panelPlacement: null,
91
+ triggerFocusPanel: false,
92
+ visiblePanel: false,
93
+ visibleAnimate: false,
94
+ isActivated: false
95
+ }
96
+ const internalData: TreeSelectInternalData = {
97
+ hpTimeout: undefined
98
+ }
99
+ return {
100
+ xID,
101
+ reactData,
102
+ internalData
103
+ }
104
+ },
105
+ computed: {
106
+ ...({} as {
107
+ computeSize(): VxeComponentSizeType
108
+ $xeModal(): (VxeModalConstructor & VxeModalMethods) | null
109
+ $xeDrawer(): (VxeDrawerConstructor & VxeDrawerMethods) | null
110
+ $xeTable(): (VxeTableConstructor & VxeTablePrivateMethods) | null
111
+ $xeForm(): (VxeFormConstructor & VxeFormPrivateMethods) | null
112
+ formItemInfo(): VxeFormDefines.ProvideItemInfo | null
113
+ }),
114
+ computeFormReadonly () {
115
+ const $xeTreeSelect = this
116
+ const props = $xeTreeSelect
117
+ const $xeForm = $xeTreeSelect.$xeForm
118
+
119
+ const { readonly } = props
120
+ if (readonly === null) {
121
+ if ($xeForm) {
122
+ return $xeForm.readonly
123
+ }
124
+ return false
125
+ }
126
+ return readonly
127
+ },
128
+ computeIsDisabled () {
129
+ const $xeTreeSelect = this
130
+ const props = $xeTreeSelect
131
+ const $xeForm = $xeTreeSelect.$xeForm
132
+
133
+ const { disabled } = props
134
+ if (disabled === null) {
135
+ if ($xeForm) {
136
+ return $xeForm.disabled
137
+ }
138
+ return false
139
+ }
140
+ return disabled
141
+ },
142
+ computeBtnTransfer () {
143
+ const $xeTreeSelect = this
144
+ const props = $xeTreeSelect
145
+ const $xeTable = $xeTreeSelect.$xeTable
146
+ const $xeModal = $xeTreeSelect.$xeModal
147
+ const $xeDrawer = $xeTreeSelect.$xeDrawer
148
+ const $xeForm = $xeTreeSelect.$xeForm
149
+
150
+ const { transfer } = props
151
+ if (transfer === null) {
152
+ const globalTransfer = getConfig().select.transfer
153
+ if (XEUtils.isBoolean(globalTransfer)) {
154
+ return globalTransfer
155
+ }
156
+ if ($xeTable || $xeModal || $xeDrawer || $xeForm) {
157
+ return true
158
+ }
159
+ }
160
+ return transfer
161
+ },
162
+ computeTreeOpts () {
163
+ const $xeTreeSelect = this
164
+ const props = $xeTreeSelect
165
+
166
+ return Object.assign({}, getConfig().treeSelect.treeConfig, props.treeConfig)
167
+ },
168
+ computeTreeNodeOpts () {
169
+ const $xeTreeSelect = this
170
+
171
+ const treeOpts = $xeTreeSelect.computeTreeOpts as VxeTreeSelectPropTypes.TreeConfig
172
+ return Object.assign({ isHover: true }, treeOpts.nodeConfig)
173
+ },
174
+ computeTreeCheckboxOpts () {
175
+ const $xeTreeSelect = this
176
+
177
+ const treeOpts = $xeTreeSelect.computeTreeOpts as VxeTreeSelectPropTypes.TreeConfig
178
+ return Object.assign({
179
+ showIcon: !!treeOpts.showCheckbox
180
+ }, treeOpts.checkboxConfig, {
181
+ trigger: 'node'
182
+ })
183
+ },
184
+ computeTreeRadioOpts () {
185
+ const $xeTreeSelect = this
186
+
187
+ const treeOpts = $xeTreeSelect.computeTreeOpts as VxeTreeSelectPropTypes.TreeConfig
188
+ return Object.assign({
189
+ showIcon: !!treeOpts.showRadio
190
+ }, treeOpts.radioConfig, {
191
+ trigger: 'node'
192
+ })
193
+ },
194
+ computePropsOpts () {
195
+ const $xeTreeSelect = this
196
+ const props = $xeTreeSelect
197
+
198
+ return Object.assign({}, props.optionProps)
199
+ },
200
+ computeLabelField () {
201
+ const $xeTreeSelect = this
202
+
203
+ const propsOpts = $xeTreeSelect.computePropsOpts as VxeTreeSelectPropTypes.OptionProps
204
+ return propsOpts.label || 'label'
205
+ },
206
+ computeValueField () {
207
+ const $xeTreeSelect = this
208
+
209
+ const propsOpts = $xeTreeSelect.computePropsOpts as VxeTreeSelectPropTypes.OptionProps
210
+ return propsOpts.value || 'value'
211
+ },
212
+ computeChildrenField () {
213
+ const $xeTreeSelect = this
214
+
215
+ const propsOpts = $xeTreeSelect.computePropsOpts as VxeTreeSelectPropTypes.OptionProps
216
+ return propsOpts.children || 'children'
217
+ },
218
+ computeParentField () {
219
+ const $xeTreeSelect = this
220
+
221
+ const propsOpts = $xeTreeSelect.computePropsOpts as VxeTreeSelectPropTypes.OptionProps
222
+ return propsOpts.parent || 'parentField'
223
+ },
224
+ computeHasChildField () {
225
+ const $xeTreeSelect = this
226
+
227
+ const propsOpts = $xeTreeSelect.computePropsOpts as VxeTreeSelectPropTypes.OptionProps
228
+ return propsOpts.hasChild || 'hasChild'
229
+ },
230
+ computeSelectLabel (this: any) {
231
+ const $xeTreeSelect = this
232
+ const props = $xeTreeSelect
233
+ const reactData = $xeTreeSelect.reactData
234
+
235
+ const { value } = props
236
+ const { fullNodeMaps } = reactData
237
+ const labelField = $xeTreeSelect.computeLabelField
238
+ return (XEUtils.isArray(value) ? value : [value]).map(value => {
239
+ const cacheItem = fullNodeMaps[value]
240
+ return cacheItem ? cacheItem.item[labelField] : value
241
+ }).join(', ')
242
+ }
243
+ },
244
+ methods: {
245
+ //
246
+ // Method
247
+ //
248
+ dispatchEvent (type: ValueOf<VxeTreeSelectEmits>, params: Record<string, any>, evnt: Event | null) {
249
+ const $xeTreeSelect = this
250
+ $xeTreeSelect.$emit(type, createEvent(evnt, { $treeSelect: $xeTreeSelect }, params))
251
+ },
252
+ emitModel (value: any) {
253
+ const $xeTreeSelect = this
254
+
255
+ $xeTreeSelect.$emit('input', value)
256
+ $xeTreeSelect.$emit('modelValue', value)
257
+ },
258
+ getOptid (option: any) {
259
+ const $xeTreeSelect = this
260
+
261
+ const valueField = $xeTreeSelect.computeValueField
262
+ const optid = option[valueField]
263
+ return optid ? encodeURIComponent(optid) : ''
264
+ },
265
+ /**
266
+ * 刷新选项,当选项被动态显示/隐藏时可能会用到
267
+ */
268
+ refreshOption () {
269
+ const $xeTreeSelect = this
270
+
271
+ return $xeTreeSelect.$nextTick()
272
+ },
273
+ cacheItemMap () {
274
+ const $xeTreeSelect = this
275
+ const props = $xeTreeSelect
276
+ const reactData = $xeTreeSelect.reactData
277
+
278
+ const { options } = props
279
+ const valueField = $xeTreeSelect.computeValueField
280
+ const childrenField = $xeTreeSelect.computeChildrenField
281
+ const nodeMaps: Record<string, {
282
+ item: any
283
+ index: number
284
+ items: any[]
285
+ parent: any
286
+ nodes: any[]
287
+ }> = {}
288
+ XEUtils.eachTree(options, (item, index, items, path, parent, nodes) => {
289
+ let nodeid = $xeTreeSelect.getOptid(item)
290
+ if (!nodeid) {
291
+ nodeid = getOptUniqueId()
292
+ item[valueField] = nodeid
293
+ }
294
+ nodeMaps[nodeid] = { item, index, items, parent, nodes }
295
+ }, { children: childrenField })
296
+ reactData.fullOptionList = options || []
297
+ reactData.fullNodeMaps = nodeMaps
298
+ $xeTreeSelect.refreshOption()
299
+ },
300
+ updateZindex () {
301
+ const $xeTreeSelect = this
302
+ const reactData = $xeTreeSelect.reactData
303
+
304
+ if (reactData.panelIndex < getLastZIndex()) {
305
+ reactData.panelIndex = nextZIndex()
306
+ }
307
+ },
308
+ updatePlacement () {
309
+ const $xeTreeSelect = this
310
+ const props = $xeTreeSelect
311
+ const reactData = $xeTreeSelect.reactData
312
+
313
+ return $xeTreeSelect.$nextTick().then(() => {
314
+ const { placement } = props
315
+ const { panelIndex } = reactData
316
+ const el = $xeTreeSelect.$refs.refElem as HTMLElement
317
+ const panelElem = $xeTreeSelect.$refs.refOptionPanel as HTMLDivElement
318
+ const btnTransfer = $xeTreeSelect.computeBtnTransfer
319
+ if (panelElem && el) {
320
+ const targetHeight = el.offsetHeight
321
+ const targetWidth = el.offsetWidth
322
+ const panelHeight = panelElem.offsetHeight
323
+ const panelWidth = panelElem.offsetWidth
324
+ const marginSize = 5
325
+ const panelStyle: { [key: string]: any } = {
326
+ zIndex: panelIndex
327
+ }
328
+ const { boundingTop, boundingLeft, visibleHeight, visibleWidth } = getAbsolutePos(el)
329
+ let panelPlacement = 'bottom'
330
+ if (btnTransfer) {
331
+ let left = boundingLeft
332
+ let top = boundingTop + targetHeight
333
+ if (placement === 'top') {
334
+ panelPlacement = 'top'
335
+ top = boundingTop - panelHeight
336
+ } else if (!placement) {
337
+ // 如果下面不够放,则向上
338
+ if (top + panelHeight + marginSize > visibleHeight) {
339
+ panelPlacement = 'top'
340
+ top = boundingTop - panelHeight
341
+ }
342
+ // 如果上面不够放,则向下(优先)
343
+ if (top < marginSize) {
344
+ panelPlacement = 'bottom'
345
+ top = boundingTop + targetHeight
346
+ }
347
+ }
348
+ // 如果溢出右边
349
+ if (left + panelWidth + marginSize > visibleWidth) {
350
+ left -= left + panelWidth + marginSize - visibleWidth
351
+ }
352
+ // 如果溢出左边
353
+ if (left < marginSize) {
354
+ left = marginSize
355
+ }
356
+ Object.assign(panelStyle, {
357
+ left: `${left}px`,
358
+ top: `${top}px`,
359
+ minWidth: `${targetWidth}px`
360
+ })
361
+ } else {
362
+ if (placement === 'top') {
363
+ panelPlacement = 'top'
364
+ panelStyle.bottom = `${targetHeight}px`
365
+ } else if (!placement) {
366
+ // 如果下面不够放,则向上
367
+ if (boundingTop + targetHeight + panelHeight > visibleHeight) {
368
+ // 如果上面不够放,则向下(优先)
369
+ if (boundingTop - targetHeight - panelHeight > marginSize) {
370
+ panelPlacement = 'top'
371
+ panelStyle.bottom = `${targetHeight}px`
372
+ }
373
+ }
374
+ }
375
+ }
376
+ reactData.panelStyle = panelStyle
377
+ reactData.panelPlacement = panelPlacement
378
+ return $xeTreeSelect.$nextTick()
379
+ }
380
+ })
381
+ },
382
+ showOptionPanel () {
383
+ const $xeTreeSelect = this
384
+ const props = $xeTreeSelect
385
+ const reactData = $xeTreeSelect.reactData
386
+ const internalData = $xeTreeSelect.internalData
387
+
388
+ const { loading } = props
389
+ const isDisabled = $xeTreeSelect.computeIsDisabled
390
+ if (!loading && !isDisabled) {
391
+ clearTimeout(internalData.hpTimeout)
392
+ if (!reactData.initialized) {
393
+ reactData.initialized = true
394
+ const btnTransfer = $xeTreeSelect.computeBtnTransfer
395
+ const panelElem = $xeTreeSelect.$refs.refOptionPanel as HTMLElement
396
+ if (btnTransfer) {
397
+ if (panelElem) {
398
+ document.body.appendChild(panelElem)
399
+ }
400
+ }
401
+ }
402
+ reactData.isActivated = true
403
+ reactData.visibleAnimate = true
404
+ setTimeout(() => {
405
+ reactData.visiblePanel = true
406
+ }, 10)
407
+ $xeTreeSelect.updateZindex()
408
+ $xeTreeSelect.updatePlacement()
409
+ }
410
+ },
411
+ hideOptionPanel () {
412
+ const $xeTreeSelect = this
413
+ const reactData = $xeTreeSelect.reactData
414
+ const internalData = $xeTreeSelect.internalData
415
+
416
+ reactData.visiblePanel = false
417
+ internalData.hpTimeout = window.setTimeout(() => {
418
+ reactData.visibleAnimate = false
419
+ }, 350)
420
+ },
421
+ changeEvent (evnt: Event, selectValue: any) {
422
+ const $xeTreeSelect = this
423
+ const props = $xeTreeSelect
424
+ const reactData = $xeTreeSelect.reactData
425
+ const $xeForm = $xeTreeSelect.$xeForm
426
+ const formItemInfo = $xeTreeSelect.formItemInfo
427
+
428
+ const { fullNodeMaps } = reactData
429
+ $xeTreeSelect.emitModel(selectValue)
430
+ if (selectValue !== props.value) {
431
+ const cacheItem = fullNodeMaps[selectValue]
432
+ $xeTreeSelect.dispatchEvent('change', { value: selectValue, option: cacheItem ? cacheItem.item : null }, evnt)
433
+ // 自动更新校验状态
434
+ if ($xeForm && formItemInfo) {
435
+ $xeForm.triggerItemEvent(evnt, formItemInfo.itemConfig.field, selectValue)
436
+ }
437
+ }
438
+ },
439
+ clearValueEvent (evnt: Event, selectValue: any) {
440
+ const $xeTreeSelect = this
441
+
442
+ $xeTreeSelect.changeEvent(evnt, selectValue)
443
+ $xeTreeSelect.dispatchEvent('clear', { value: selectValue }, evnt)
444
+ },
445
+ clearEvent (params: any, evnt: Event) {
446
+ const $xeTreeSelect = this
447
+
448
+ $xeTreeSelect.clearValueEvent(evnt, null)
449
+ $xeTreeSelect.hideOptionPanel()
450
+ },
451
+ handleGlobalMousewheelEvent (evnt: MouseEvent) {
452
+ const $xeTreeSelect = this
453
+ const reactData = $xeTreeSelect.reactData
454
+
455
+ const { visiblePanel } = reactData
456
+ const isDisabled = $xeTreeSelect.computeIsDisabled
457
+ if (!isDisabled) {
458
+ if (visiblePanel) {
459
+ const panelElem = $xeTreeSelect.$refs.refOptionPanel as HTMLElement
460
+ if (getEventTargetNode(evnt, panelElem).flag) {
461
+ $xeTreeSelect.updatePlacement()
462
+ } else {
463
+ $xeTreeSelect.hideOptionPanel()
464
+ }
465
+ }
466
+ }
467
+ },
468
+ handleGlobalMousedownEvent (evnt: MouseEvent) {
469
+ const $xeTreeSelect = this
470
+ const reactData = $xeTreeSelect.reactData
471
+
472
+ const { visiblePanel } = reactData
473
+ const isDisabled = $xeTreeSelect.computeIsDisabled
474
+ if (!isDisabled) {
475
+ const el = $xeTreeSelect.$refs.refElem as HTMLElement
476
+ const panelElem = $xeTreeSelect.$refs.refOptionPanel as HTMLElement
477
+ reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag
478
+ if (visiblePanel && !reactData.isActivated) {
479
+ $xeTreeSelect.hideOptionPanel()
480
+ }
481
+ }
482
+ },
483
+ handleGlobalBlurEvent () {
484
+ const $xeTreeSelect = this
485
+
486
+ $xeTreeSelect.hideOptionPanel()
487
+ },
488
+ focusEvent (evnt: FocusEvent) {
489
+ const $xeTreeSelect = this
490
+ const reactData = $xeTreeSelect.reactData
491
+
492
+ const isDisabled = $xeTreeSelect.computeIsDisabled
493
+ if (!isDisabled) {
494
+ if (!reactData.visiblePanel) {
495
+ reactData.triggerFocusPanel = true
496
+ $xeTreeSelect.showOptionPanel()
497
+ setTimeout(() => {
498
+ reactData.triggerFocusPanel = false
499
+ }, 150)
500
+ }
501
+ }
502
+ $xeTreeSelect.dispatchEvent('focus', {}, evnt)
503
+ },
504
+ clickEvent (evnt: MouseEvent) {
505
+ const $xeTreeSelect = this
506
+
507
+ $xeTreeSelect.togglePanelEvent(evnt)
508
+ $xeTreeSelect.dispatchEvent('click', {}, evnt)
509
+ },
510
+ blurEvent (evnt: FocusEvent) {
511
+ const $xeTreeSelect = this
512
+ const reactData = $xeTreeSelect.reactData
513
+
514
+ reactData.isActivated = false
515
+ $xeTreeSelect.dispatchEvent('blur', {}, evnt)
516
+ },
517
+ togglePanelEvent (params: any) {
518
+ const $xeTreeSelect = this
519
+ const reactData = $xeTreeSelect.reactData
520
+
521
+ const { $event } = params
522
+ $event.preventDefault()
523
+ if (reactData.triggerFocusPanel) {
524
+ reactData.triggerFocusPanel = false
525
+ } else {
526
+ if (reactData.visiblePanel) {
527
+ $xeTreeSelect.hideOptionPanel()
528
+ } else {
529
+ $xeTreeSelect.showOptionPanel()
530
+ }
531
+ }
532
+ },
533
+ nodeClickEvent (params: any) {
534
+ const $xeTreeSelect = this
535
+
536
+ const { $event } = params
537
+ $xeTreeSelect.dispatchEvent('node-click', params, $event)
538
+ },
539
+ radioChangeEvent (params: any) {
540
+ const $xeTreeSelect = this
541
+
542
+ const { value, $event } = params
543
+ $xeTreeSelect.changeEvent($event, value)
544
+ $xeTreeSelect.hideOptionPanel()
545
+ },
546
+ checkboxChangeEvent (params: any) {
547
+ const $xeTreeSelect = this
548
+
549
+ const { value, $event } = params
550
+ $xeTreeSelect.changeEvent($event, value)
551
+ },
552
+
553
+ //
554
+ // Render
555
+ //
556
+ renderVN (h: CreateElement): VNode {
557
+ const $xeTreeSelect = this
558
+ const props = $xeTreeSelect
559
+ const slots = $xeTreeSelect.$scopedSlots
560
+ const reactData = $xeTreeSelect.reactData
561
+
562
+ const { className, value, multiple, options, popupClassName, loading } = props
563
+ const { initialized, isActivated, visiblePanel } = reactData
564
+ const vSize = $xeTreeSelect.computeSize
565
+ const isDisabled = $xeTreeSelect.computeIsDisabled
566
+ const selectLabel = $xeTreeSelect.computeSelectLabel
567
+ const btnTransfer = $xeTreeSelect.computeBtnTransfer
568
+ const formReadonly = $xeTreeSelect.computeFormReadonly
569
+ const defaultSlot = slots.default
570
+ const headerSlot = slots.header
571
+ const footerSlot = slots.footer
572
+ const prefixSlot = slots.prefix
573
+ const treeOpts = $xeTreeSelect.computeTreeOpts
574
+ const treeNodeOpts = $xeTreeSelect.computeTreeNodeOpts
575
+ const treeCheckboxOpts = $xeTreeSelect.computeTreeCheckboxOpts
576
+ const treeRadioOpts = $xeTreeSelect.computeTreeRadioOpts
577
+ const labelField = $xeTreeSelect.computeLabelField
578
+ const valueField = $xeTreeSelect.computeValueField
579
+ const childrenField = $xeTreeSelect.computeChildrenField
580
+ const parentField = $xeTreeSelect.computeParentField
581
+ const hasChildField = $xeTreeSelect.computeHasChildField
582
+
583
+ if (formReadonly) {
584
+ return h('div', {
585
+ ref: 'refElem',
586
+ class: ['vxe-tree-select--readonly', className]
587
+ }, [
588
+ h('div', {
589
+ class: 'vxe-tree-select-slots',
590
+ ref: 'hideOption'
591
+ }, defaultSlot ? defaultSlot({}) : []),
592
+ h('span', {
593
+ class: 'vxe-tree-select-label'
594
+ }, selectLabel)
595
+ ])
596
+ }
597
+ return h('div', {
598
+ ref: 'refElem',
599
+ class: ['vxe-tree-select', className ? (XEUtils.isFunction(className) ? className({ $treeSelect: $xeTreeSelect }) : className) : '', {
600
+ [`size--${vSize}`]: vSize,
601
+ 'is--visible': visiblePanel,
602
+ 'is--disabled': isDisabled,
603
+ 'is--loading': loading,
604
+ 'is--active': isActivated
605
+ }]
606
+ }, [
607
+ h(VxeInputComponent, {
608
+ ref: 'refInput',
609
+ props: {
610
+ clearable: props.clearable,
611
+ placeholder: props.placeholder,
612
+ readonly: true,
613
+ disabled: isDisabled,
614
+ type: 'text',
615
+ prefixIcon: props.prefixIcon,
616
+ suffixIcon: loading ? getIcon().TREE_SELECT_LOADED : (visiblePanel ? getIcon().TREE_SELECT_OPEN : getIcon().TREE_SELECT_CLOSE),
617
+ value: selectLabel
618
+ },
619
+ on: {
620
+ clear: $xeTreeSelect.clearEvent,
621
+ click: $xeTreeSelect.clickEvent,
622
+ focus: $xeTreeSelect.focusEvent,
623
+ blur: $xeTreeSelect.blurEvent,
624
+ suffixClick: $xeTreeSelect.togglePanelEvent
625
+ },
626
+ scopedSlots: prefixSlot
627
+ ? {
628
+ prefix: () => prefixSlot({})
629
+ }
630
+ : {}
631
+ }),
632
+ h('div', {
633
+ ref: 'refOptionPanel',
634
+ class: ['vxe-table--ignore-clear vxe-tree-select--panel', popupClassName ? (XEUtils.isFunction(popupClassName) ? popupClassName({ $treeSelect: $xeTreeSelect }) : popupClassName) : '', {
635
+ [`size--${vSize}`]: vSize,
636
+ 'is--transfer': btnTransfer,
637
+ 'ani--leave': !loading && reactData.visibleAnimate,
638
+ 'ani--enter': !loading && visiblePanel
639
+ }],
640
+ attrs: {
641
+ placement: reactData.panelPlacement
642
+ },
643
+ style: reactData.panelStyle
644
+ }, initialized
645
+ ? [
646
+ h('div', {
647
+ class: 'vxe-tree-select--panel-wrapper'
648
+ }, [
649
+ headerSlot
650
+ ? h('div', {
651
+ class: 'vxe-tree-select--panel-header'
652
+ }, headerSlot({}))
653
+ : renderEmptyElement($xeTreeSelect),
654
+ h('div', {
655
+ class: 'vxe-tree-select--panel-body'
656
+ }, [
657
+ h('div', {
658
+ ref: 'refOptionWrapper',
659
+ class: 'vxe-tree-select-option--wrapper'
660
+ }, [
661
+ h(VxeTreeComponent, {
662
+ class: 'vxe-tree-select--tree',
663
+ props: {
664
+ data: options,
665
+ indent: treeOpts.indent,
666
+ showRadio: !multiple,
667
+ radioConfig: treeRadioOpts,
668
+ checkNodeKey: multiple ? null : value,
669
+ showCheckbox: !!multiple,
670
+ checkNodeKeys: multiple ? value : null,
671
+ checkboxConfig: treeCheckboxOpts,
672
+ titleField: labelField,
673
+ valueField: valueField,
674
+ keyField: treeOpts.keyField,
675
+ childrenField: treeOpts.childrenField || childrenField,
676
+ parentField: treeOpts.parentField || parentField,
677
+ hasChildField: treeOpts.hasChildField || hasChildField,
678
+ accordion: treeOpts.accordion,
679
+ nodeConfig: treeNodeOpts,
680
+ lazy: treeOpts.lazy,
681
+ loadMethod: treeOpts.loadMethod,
682
+ toggleMethod: treeOpts.toggleMethod,
683
+ transform: treeOpts.transform,
684
+ trigger: treeOpts.trigger,
685
+ showIcon: treeOpts.showIcon,
686
+ showLine: treeOpts.showLine,
687
+ iconOpen: treeOpts.iconOpen,
688
+ iconLoaded: treeOpts.iconLoaded,
689
+ iconClose: treeOpts.iconClose
690
+ },
691
+ on: {
692
+ 'node-click': $xeTreeSelect.nodeClickEvent,
693
+ 'radio-change': $xeTreeSelect.radioChangeEvent,
694
+ 'checkbox-change': $xeTreeSelect.checkboxChangeEvent
695
+ }
696
+ })
697
+ ])
698
+ ]),
699
+ footerSlot
700
+ ? h('div', {
701
+ class: 'vxe-tree-select--panel-footer'
702
+ }, footerSlot({}))
703
+ : renderEmptyElement($xeTreeSelect)
704
+ ])
705
+ ]
706
+ : [])
707
+ ])
708
+ }
709
+ },
710
+ watch: {
711
+ options () {
712
+ const $xeTreeSelect = this
713
+
714
+ $xeTreeSelect.cacheItemMap()
715
+ }
716
+ },
717
+ created () {
718
+ const $xeTreeSelect = this
719
+
720
+ $xeTreeSelect.cacheItemMap()
721
+ },
722
+ mounted () {
723
+ const $xeTreeSelect = this
724
+
725
+ globalEvents.on($xeTreeSelect, 'mousewheel', $xeTreeSelect.handleGlobalMousewheelEvent)
726
+ globalEvents.on($xeTreeSelect, 'mousedown', $xeTreeSelect.handleGlobalMousedownEvent)
727
+ globalEvents.on($xeTreeSelect, 'blur', $xeTreeSelect.handleGlobalBlurEvent)
728
+ },
729
+ beforeDestroy () {
730
+ const $xeTreeSelect = this
731
+
732
+ const panelElem = $xeTreeSelect.$refs.refOptionPanel as HTMLElement | undefined
733
+ if (panelElem && panelElem.parentNode) {
734
+ panelElem.parentNode.removeChild(panelElem)
735
+ }
736
+ globalEvents.off($xeTreeSelect, 'mousewheel')
737
+ globalEvents.off($xeTreeSelect, 'mousedown')
738
+ globalEvents.off($xeTreeSelect, 'blur')
739
+ },
740
+ render (this: any, h) {
741
+ return this.renderVN(h)
742
+ }
743
+ })