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,1292 @@
1
+ import { PropType, CreateElement, VNode } from 'vue'
2
+ import { defineVxeComponent } from '../../ui/src/comp'
3
+ import XEUtils from 'xe-utils'
4
+ import { createEvent, getIcon, getConfig, renderEmptyElement, globalMixins } from '../../ui'
5
+ import { getSlotVNs } from '../../ui/src/vn'
6
+ import { toCssUnit } from '../../ui/src/dom'
7
+ import VxeLoadingComponent from '../../loading/src/loading'
8
+
9
+ import type { TreeReactData, VxeTreeEmits, VxeTreePropTypes, TreeInternalData, VxeTreeDefines, VxeComponentSizeType, ValueOf } from '../../../types'
10
+
11
+ /**
12
+ * 生成节点的唯一主键
13
+ */
14
+ function getNodeUniqueId () {
15
+ return XEUtils.uniqueId('node_')
16
+ }
17
+
18
+ export default defineVxeComponent({
19
+ name: 'VxeTree',
20
+ mixins: [
21
+ globalMixins.sizeMixin
22
+ ],
23
+ props: {
24
+ data: Array as PropType<VxeTreePropTypes.Data>,
25
+ height: [String, Number] as PropType<VxeTreePropTypes.Height>,
26
+ minHeight: {
27
+ type: [String, Number] as PropType<VxeTreePropTypes.MinHeight>,
28
+ default: () => getConfig().tree.minHeight
29
+ },
30
+ loading: Boolean as PropType<VxeTreePropTypes.Loading>,
31
+ loadingConfig: Object as PropType<VxeTreePropTypes.LoadingConfig>,
32
+ accordion: {
33
+ type: Boolean as PropType<VxeTreePropTypes.Accordion>,
34
+ default: () => getConfig().tree.accordion
35
+ },
36
+ childrenField: {
37
+ type: String as PropType<VxeTreePropTypes.ChildrenField>,
38
+ default: () => getConfig().tree.childrenField
39
+ },
40
+ valueField: {
41
+ type: String as PropType<VxeTreePropTypes.ValueField>,
42
+ default: () => getConfig().tree.valueField
43
+ },
44
+ keyField: {
45
+ type: String as PropType<VxeTreePropTypes.KeyField>,
46
+ default: () => getConfig().tree.keyField
47
+ },
48
+ parentField: {
49
+ type: String as PropType<VxeTreePropTypes.ParentField>,
50
+ default: () => getConfig().tree.parentField
51
+ },
52
+ titleField: {
53
+ type: String as PropType<VxeTreePropTypes.TitleField>,
54
+ default: () => getConfig().tree.titleField
55
+ },
56
+ hasChildField: {
57
+ type: String as PropType<VxeTreePropTypes.HasChildField>,
58
+ default: () => getConfig().tree.hasChildField
59
+ },
60
+ // mapChildrenField: {
61
+ // type: String as PropType<VxeTreePropTypes.MapChildrenField>,
62
+ // default: () => getConfig().tree.mapChildrenField
63
+ // },
64
+ transform: Boolean as PropType<VxeTreePropTypes.Transform>,
65
+ // 已废弃
66
+ isCurrent: Boolean as PropType<VxeTreePropTypes.IsCurrent>,
67
+ // 已废弃
68
+ isHover: Boolean as PropType<VxeTreePropTypes.IsHover>,
69
+ showLine: {
70
+ type: Boolean as PropType<VxeTreePropTypes.ShowLine>,
71
+ default: () => getConfig().tree.showLine
72
+ },
73
+ trigger: String as PropType<VxeTreePropTypes.Trigger>,
74
+ indent: {
75
+ type: Number as PropType<VxeTreePropTypes.Indent>,
76
+ default: () => getConfig().tree.indent
77
+ },
78
+ showRadio: {
79
+ type: Boolean as PropType<VxeTreePropTypes.ShowRadio>,
80
+ default: () => getConfig().tree.showRadio
81
+ },
82
+ checkNodeKey: {
83
+ type: [String, Number] as PropType<VxeTreePropTypes.CheckNodeKey>,
84
+ default: () => getConfig().tree.checkNodeKey
85
+ },
86
+ radioConfig: Object as PropType<VxeTreePropTypes.RadioConfig>,
87
+ showCheckbox: {
88
+ type: Boolean as PropType<VxeTreePropTypes.ShowCheckbox>,
89
+ default: () => getConfig().tree.showCheckbox
90
+ },
91
+ checkNodeKeys: {
92
+ type: Array as PropType<VxeTreePropTypes.CheckNodeKeys>,
93
+ default: () => getConfig().tree.checkNodeKeys
94
+ },
95
+ checkboxConfig: Object as PropType<VxeTreePropTypes.CheckboxConfig>,
96
+ nodeConfig: Object as PropType<VxeTreePropTypes.NodeConfig>,
97
+ lazy: Boolean as PropType<VxeTreePropTypes.Lazy>,
98
+ toggleMethod: Function as PropType<VxeTreePropTypes.ToggleMethod>,
99
+ loadMethod: Function as PropType<VxeTreePropTypes.LoadMethod>,
100
+ showIcon: {
101
+ type: Boolean as PropType<VxeTreePropTypes.ShowIcon>,
102
+ default: true
103
+ },
104
+ iconOpen: {
105
+ type: String as PropType<VxeTreePropTypes.IconOpen>,
106
+ default: () => getConfig().tree.iconOpen
107
+ },
108
+ iconClose: {
109
+ type: String as PropType<VxeTreePropTypes.IconClose>,
110
+ default: () => getConfig().tree.iconClose
111
+ },
112
+ iconLoaded: {
113
+ type: String as PropType<VxeTreePropTypes.IconLoaded>,
114
+ default: () => getConfig().tree.iconLoaded
115
+ },
116
+ size: {
117
+ type: String as PropType<VxeTreePropTypes.Size>,
118
+ default: () => getConfig().tree.size || getConfig().size
119
+ }
120
+ },
121
+ data () {
122
+ const xID = XEUtils.uniqueId()
123
+ const reactData: TreeReactData = {
124
+ currentNode: null,
125
+ nodeMaps: {},
126
+ selectRadioKey: null,
127
+ treeList: [],
128
+ treeExpandedMaps: {},
129
+ treeExpandLazyLoadedMaps: {},
130
+ selectCheckboxMaps: {},
131
+ indeterminateCheckboxMaps: {}
132
+ }
133
+ const internalData: TreeInternalData = {
134
+ }
135
+ return {
136
+ xID,
137
+ reactData,
138
+ internalData
139
+ }
140
+ },
141
+ computed: {
142
+ ...({} as {
143
+ computeSize(): VxeComponentSizeType
144
+ }),
145
+ computeTitleField () {
146
+ const $xeTree = this
147
+ const props = $xeTree
148
+
149
+ return props.titleField || 'title'
150
+ },
151
+ computeKeyField () {
152
+ const $xeTree = this
153
+ const props = $xeTree
154
+
155
+ return props.keyField || 'id'
156
+ },
157
+ computeValueField () {
158
+ const $xeTree = this
159
+ const props = $xeTree
160
+
161
+ const keyField = $xeTree.computeKeyField as string
162
+ return props.valueField || keyField
163
+ },
164
+ computeParentField () {
165
+ const $xeTree = this
166
+ const props = $xeTree
167
+
168
+ return props.parentField || 'parentId'
169
+ },
170
+ computeChildrenField () {
171
+ const $xeTree = this
172
+ const props = $xeTree
173
+
174
+ return props.childrenField || 'children'
175
+ },
176
+ computeHasChildField () {
177
+ const $xeTree = this
178
+ const props = $xeTree
179
+
180
+ return props.hasChildField || 'hasChild'
181
+ },
182
+ computeIsRowCurrent () {
183
+ const $xeTree = this
184
+ const props = $xeTree
185
+
186
+ const nodeOpts = $xeTree.computeNodeOpts as VxeTreePropTypes.NodeConfig
187
+ const { isCurrent } = nodeOpts
188
+ if (XEUtils.isBoolean(isCurrent)) {
189
+ return isCurrent
190
+ }
191
+ return props.isCurrent
192
+ },
193
+ computeIsRowHover () {
194
+ const $xeTree = this
195
+ const props = $xeTree
196
+
197
+ const nodeOpts = $xeTree.computeNodeOpts as VxeTreePropTypes.NodeConfig
198
+ const { isHover } = nodeOpts
199
+ if (XEUtils.isBoolean(isHover)) {
200
+ return isHover
201
+ }
202
+ return props.isHover
203
+ },
204
+ computeRadioOpts () {
205
+ const $xeTree = this
206
+ const props = $xeTree
207
+
208
+ return Object.assign({ showIcon: true }, getConfig().tree.radioConfig, props.radioConfig)
209
+ },
210
+ computeCheckboxOpts () {
211
+ const $xeTree = this
212
+ const props = $xeTree
213
+
214
+ return Object.assign({ showIcon: true }, getConfig().tree.checkboxConfig, props.checkboxConfig)
215
+ },
216
+ computeNodeOpts () {
217
+ const $xeTree = this
218
+ const props = $xeTree
219
+
220
+ return Object.assign({}, getConfig().tree.nodeConfig, props.nodeConfig)
221
+ },
222
+ computeLoadingOpts () {
223
+ const $xeTree = this
224
+ const props = $xeTree
225
+
226
+ return Object.assign({}, getConfig().tree.loadingConfig, props.loadingConfig)
227
+ },
228
+ computeTreeStyle () {
229
+ const $xeTree = this
230
+ const props = $xeTree
231
+
232
+ const { height, minHeight } = props
233
+ const stys: Record<string, string> = {}
234
+ if (height) {
235
+ stys.height = toCssUnit(height)
236
+ }
237
+ if (minHeight) {
238
+ stys.minHeight = toCssUnit(minHeight)
239
+ }
240
+ return stys
241
+ }
242
+ },
243
+ methods: {
244
+ //
245
+ // Method
246
+ //
247
+ dispatchEvent (type: ValueOf<VxeTreeEmits>, params: Record<string, any>, evnt: Event | null) {
248
+ const $xeTree = this
249
+ $xeTree.$emit(type, createEvent(evnt, { $tree: $xeTree }, params))
250
+ },
251
+ clearRadioNode () {
252
+ const $xeTree = this
253
+ const reactData = $xeTree.reactData
254
+
255
+ reactData.selectRadioKey = null
256
+ return $xeTree.$nextTick()
257
+ },
258
+ clearCheckboxNode () {
259
+ const $xeTree = this
260
+ const reactData = $xeTree.reactData
261
+
262
+ reactData.selectCheckboxMaps = {}
263
+ return $xeTree.$nextTick()
264
+ },
265
+ setAllCheckboxNode (checked: any) {
266
+ const $xeTree = this
267
+ const reactData = $xeTree.reactData
268
+
269
+ const selectMaps: Record<string, boolean> = Object.assign(reactData.selectCheckboxMaps)
270
+ const childrenField = $xeTree.computeChildrenField
271
+ if (checked) {
272
+ XEUtils.eachTree(reactData.treeList, (node) => {
273
+ const nodeid = $xeTree.getNodeId(node)
274
+ selectMaps[nodeid] = true
275
+ }, { children: childrenField })
276
+ }
277
+ reactData.selectCheckboxMaps = selectMaps
278
+ return $xeTree.$nextTick()
279
+ },
280
+ clearExpandNode () {
281
+ const $xeTree = this
282
+
283
+ return $xeTree.clearAllExpandNode()
284
+ },
285
+ clearAllExpandNode () {
286
+ const $xeTree = this
287
+ const reactData = $xeTree.reactData
288
+
289
+ XEUtils.each(reactData.nodeMaps, (nodeItem: VxeTreeDefines.NodeCacheItem) => {
290
+ nodeItem.treeLoaded = false
291
+ })
292
+ reactData.treeExpandedMaps = {}
293
+ return $xeTree.$nextTick()
294
+ },
295
+ setExpandByNodeId (nodeids: any, expanded: any) {
296
+ const $xeTree = this
297
+ const reactData = $xeTree.reactData
298
+
299
+ const expandedMaps: Record<string, boolean> = Object.assign(reactData.treeExpandedMaps)
300
+ if (nodeids) {
301
+ if (!XEUtils.isArray(nodeids)) {
302
+ nodeids = [nodeids]
303
+ }
304
+ nodeids.forEach((nodeid: string) => {
305
+ $xeTree.handleSetExpand(nodeid, expanded, expandedMaps)
306
+ })
307
+ reactData.treeExpandedMaps = expandedMaps
308
+ }
309
+ return $xeTree.$nextTick()
310
+ },
311
+ setExpandNode (nodes: any, expanded: any) {
312
+ const $xeTree = this
313
+ const reactData = $xeTree.reactData
314
+
315
+ const expandedMaps: Record<string, boolean> = Object.assign(reactData.treeExpandedMaps)
316
+ if (nodes) {
317
+ if (!XEUtils.isArray(nodes)) {
318
+ nodes = [nodes]
319
+ }
320
+ nodes.forEach((node: any) => {
321
+ const nodeid = $xeTree.getNodeId(node)
322
+ $xeTree.handleSetExpand(nodeid, expanded, expandedMaps)
323
+ })
324
+ reactData.treeExpandedMaps = expandedMaps
325
+ }
326
+ return $xeTree.$nextTick()
327
+ },
328
+ toggleExpandByNodeId (nodeids: any) {
329
+ const $xeTree = this
330
+ const reactData = $xeTree.reactData
331
+
332
+ const expandedMaps: Record<string, boolean> = Object.assign(reactData.treeExpandedMaps)
333
+ if (nodeids) {
334
+ if (!XEUtils.isArray(nodeids)) {
335
+ nodeids = [nodeids]
336
+ }
337
+ nodeids.forEach((nodeid: string) => {
338
+ $xeTree.handleSetExpand(nodeid, !expandedMaps[nodeid], expandedMaps)
339
+ })
340
+ reactData.treeExpandedMaps = expandedMaps
341
+ }
342
+ return $xeTree.$nextTick()
343
+ },
344
+ toggleExpandNode (nodes: any) {
345
+ const $xeTree = this
346
+ const reactData = $xeTree.reactData
347
+
348
+ const expandedMaps: Record<string, boolean> = Object.assign(reactData.treeExpandedMaps)
349
+ if (nodes) {
350
+ if (!XEUtils.isArray(nodes)) {
351
+ nodes = [nodes]
352
+ }
353
+ nodes.forEach((node: any) => {
354
+ const nodeid = $xeTree.getNodeId(node)
355
+ $xeTree.handleSetExpand(nodeid, !expandedMaps[nodeid], expandedMaps)
356
+ })
357
+ reactData.treeExpandedMaps = expandedMaps
358
+ }
359
+ return $xeTree.$nextTick()
360
+ },
361
+ setAllExpandNode () {
362
+ const $xeTree = this
363
+ const reactData = $xeTree.reactData
364
+
365
+ const expandedMaps: Record<string, boolean> = Object.assign(reactData.treeExpandedMaps)
366
+ const childrenField = $xeTree.computeChildrenField
367
+ XEUtils.eachTree(reactData.treeList, (node) => {
368
+ const nodeid = $xeTree.getNodeId(node)
369
+ expandedMaps[nodeid] = true
370
+ }, { children: childrenField })
371
+ reactData.treeExpandedMaps = expandedMaps
372
+ return $xeTree.$nextTick()
373
+ },
374
+ reloadExpandNode (node: any) {
375
+ const $xeTree = this
376
+ const props = $xeTree
377
+
378
+ const { lazy } = props
379
+ if (lazy) {
380
+ $xeTree.clearExpandLoaded(node)
381
+ return $xeTree.handleAsyncTreeExpandChilds(node)
382
+ }
383
+ return $xeTree.$nextTick()
384
+ },
385
+ clearExpandLoaded (node: any) {
386
+ const $xeTree = this
387
+ const props = $xeTree
388
+ const reactData = $xeTree.reactData
389
+
390
+ const { lazy } = props
391
+ const { nodeMaps } = reactData
392
+ if (lazy) {
393
+ const nodeItem = nodeMaps[$xeTree.getNodeId(node)]
394
+ if (nodeItem) {
395
+ nodeItem.treeLoaded = false
396
+ }
397
+ }
398
+ return $xeTree.$nextTick()
399
+ },
400
+ /**
401
+ * 用于树结构,给行数据加载子节点
402
+ */
403
+ loadChildrenNode (node: any, childRecords: any) {
404
+ const $xeTree = this
405
+ const props = $xeTree
406
+ const reactData = $xeTree.reactData
407
+
408
+ const { lazy, transform } = props
409
+ const { nodeMaps } = reactData
410
+ if (!lazy) {
411
+ return Promise.resolve([])
412
+ }
413
+ const childrenField = $xeTree.computeChildrenField
414
+ const parentNodeItem = nodeMaps[$xeTree.getNodeId(node)]
415
+ const parentLevel = parentNodeItem ? parentNodeItem.level : 0
416
+ const parentNodes = parentNodeItem ? parentNodeItem.nodes : []
417
+ return $xeTree.createNode(childRecords).then((nodeList) => {
418
+ XEUtils.eachTree(nodeList, (childRow, index, items, path, parent, nodes) => {
419
+ const itemNodeId = $xeTree.getNodeId(childRow)
420
+ nodeMaps[itemNodeId] = {
421
+ item: node,
422
+ itemIndex: -1,
423
+ items,
424
+ parent: parent || parentNodeItem.item,
425
+ nodes: parentNodes.concat(nodes),
426
+ level: parentLevel + nodes.length,
427
+ lineCount: 0,
428
+ treeLoaded: false
429
+ }
430
+ }, { children: childrenField })
431
+ node[childrenField] = nodeList
432
+ if (transform) {
433
+ node[childrenField] = nodeList
434
+ }
435
+ $xeTree.updateNodeLine(node)
436
+ return nodeList
437
+ })
438
+ },
439
+ getNodeId (node: any) {
440
+ const $xeTree = this
441
+
442
+ const valueField = $xeTree.computeValueField
443
+ const nodeid = XEUtils.get(node, valueField)
444
+ return XEUtils.eqNull(nodeid) ? '' : encodeURIComponent(nodeid)
445
+ },
446
+ isExpandByNode (node: any) {
447
+ const $xeTree = this
448
+ const reactData = $xeTree.reactData
449
+
450
+ const { treeExpandedMaps } = reactData
451
+ const nodeid = $xeTree.getNodeId(node)
452
+ return !!treeExpandedMaps[nodeid]
453
+ },
454
+ isCheckedByRadioNodeId (nodeid: any) {
455
+ const $xeTree = this
456
+ const reactData = $xeTree.reactData
457
+
458
+ const { selectRadioKey } = reactData
459
+ return selectRadioKey === nodeid
460
+ },
461
+ isCheckedByRadioNode (node: any) {
462
+ const $xeTree = this
463
+
464
+ return $xeTree.isCheckedByRadioNodeId($xeTree.getNodeId(node))
465
+ },
466
+ isCheckedByCheckboxNodeId (nodeid: any) {
467
+ const $xeTree = this
468
+ const reactData = $xeTree.reactData
469
+
470
+ const { selectCheckboxMaps } = reactData
471
+ return !!selectCheckboxMaps[nodeid]
472
+ },
473
+ isCheckedByCheckboxNode (node: any) {
474
+ const $xeTree = this
475
+
476
+ return $xeTree.isCheckedByCheckboxNodeId($xeTree.getNodeId(node))
477
+ },
478
+ isIndeterminateByCheckboxNodeid (nodeid: any) {
479
+ const $xeTree = this
480
+ const reactData = $xeTree.reactData
481
+
482
+ const { indeterminateCheckboxMaps } = reactData
483
+ return !!indeterminateCheckboxMaps[nodeid]
484
+ },
485
+ isIndeterminateByCheckboxNode (node: any) {
486
+ const $xeTree = this
487
+
488
+ return $xeTree.isIndeterminateByCheckboxNodeid($xeTree.getNodeId(node))
489
+ },
490
+ emitCheckboxMode (value: VxeTreePropTypes.CheckNodeKeys) {
491
+ const $xeTree = this
492
+
493
+ $xeTree.$emit('update:checkNodeKeys', value)
494
+ },
495
+ emitRadioMode (value: VxeTreePropTypes.CheckNodeKey) {
496
+ const $xeTree = this
497
+
498
+ $xeTree.$emit('update:checkNodeKey', value)
499
+ },
500
+ setRadioNode (node: any, checked: boolean) {
501
+ const $xeTree = this
502
+ const reactData = $xeTree.reactData
503
+
504
+ if (node) {
505
+ reactData.selectRadioKey = checked ? $xeTree.getNodeId(node) : null
506
+ }
507
+ return $xeTree.$nextTick()
508
+ },
509
+ setCheckboxNode (nodeList: any | any[], checked: boolean) {
510
+ const $xeTree = this
511
+
512
+ if (nodeList) {
513
+ if (!XEUtils.isArray(nodeList)) {
514
+ nodeList = [nodeList]
515
+ }
516
+ $xeTree.handleCheckedCheckboxNode(nodeList.map((item: any) => $xeTree.getNodeId(item)), checked)
517
+ }
518
+ return $xeTree.$nextTick()
519
+ },
520
+ setCheckboxByNodeId (nodeIds: any | any[], checked: boolean) {
521
+ const $xeTree = this
522
+
523
+ if (nodeIds) {
524
+ if (!XEUtils.isArray(nodeIds)) {
525
+ nodeIds = [nodeIds]
526
+ }
527
+ $xeTree.handleCheckedCheckboxNode(nodeIds, checked)
528
+ }
529
+ return $xeTree.$nextTick()
530
+ },
531
+ handleCheckedCheckboxNode (nodeIds: VxeTreePropTypes.CheckNodeKeys, checked: boolean) {
532
+ const $xeTree = this
533
+ const reactData = $xeTree.reactData
534
+
535
+ const selectKeyMaps: Record<string, boolean> = Object.assign({}, reactData.selectCheckboxMaps)
536
+ nodeIds.forEach((key) => {
537
+ if (checked) {
538
+ selectKeyMaps[key] = true
539
+ } else if (selectKeyMaps[key]) {
540
+ delete selectKeyMaps[key]
541
+ }
542
+ })
543
+ reactData.selectCheckboxMaps = selectKeyMaps
544
+ },
545
+ updateCheckboxChecked (nodeIds: VxeTreePropTypes.CheckNodeKeys) {
546
+ const $xeTree = this
547
+ const reactData = $xeTree.reactData
548
+
549
+ const selectKeyMaps: Record<string, boolean> = {}
550
+ if (nodeIds) {
551
+ nodeIds.forEach((key) => {
552
+ selectKeyMaps[key] = true
553
+ })
554
+ }
555
+ reactData.selectCheckboxMaps = selectKeyMaps
556
+ },
557
+ handleSetExpand (nodeid: string, expanded: boolean, expandedMaps: Record<string, boolean>) {
558
+ if (expanded) {
559
+ if (expandedMaps[nodeid]) {
560
+ expandedMaps[nodeid] = true
561
+ }
562
+ } else {
563
+ if (expandedMaps[nodeid]) {
564
+ delete expandedMaps[nodeid]
565
+ }
566
+ }
567
+ },
568
+ createNode (records: any[]) {
569
+ const $xeTree = this
570
+
571
+ const valueField = $xeTree.computeValueField
572
+ return Promise.resolve(
573
+ records.map(obj => {
574
+ const item = { ...obj }
575
+ let nodeid = $xeTree.getNodeId(item)
576
+ if (!nodeid) {
577
+ nodeid = getNodeUniqueId()
578
+ XEUtils.set(item, valueField, nodeid)
579
+ }
580
+ return item
581
+ })
582
+ )
583
+ },
584
+ cacheNodeMap () {
585
+ const $xeTree = this
586
+ const reactData = $xeTree.reactData
587
+
588
+ const { treeList } = reactData
589
+ const valueField = $xeTree.computeValueField
590
+ const childrenField = $xeTree.computeChildrenField
591
+ const keyMaps: Record<string, VxeTreeDefines.NodeCacheItem> = {}
592
+ XEUtils.eachTree(treeList, (item, itemIndex, items, path, parent, nodes) => {
593
+ let nodeid = $xeTree.getNodeId(item)
594
+ if (!nodeid) {
595
+ nodeid = getNodeUniqueId()
596
+ XEUtils.set(item, valueField, nodeid)
597
+ }
598
+ keyMaps[nodeid] = {
599
+ item,
600
+ itemIndex,
601
+ items,
602
+ parent,
603
+ nodes,
604
+ level: nodes.length,
605
+ lineCount: 0,
606
+ treeLoaded: false
607
+ }
608
+ }, { children: childrenField })
609
+ reactData.nodeMaps = keyMaps
610
+ },
611
+ updateData (list: any[]) {
612
+ const $xeTree = this
613
+ const props = $xeTree
614
+ const reactData = $xeTree.reactData
615
+
616
+ const { transform } = props
617
+ const keyField = $xeTree.computeKeyField
618
+ const parentField = $xeTree.computeParentField
619
+ const childrenField = $xeTree.computeChildrenField
620
+ if (transform) {
621
+ reactData.treeList = XEUtils.toArrayTree(list, { key: keyField, parentKey: parentField, mapChildren: childrenField })
622
+ } else {
623
+ reactData.treeList = list ? list.slice(0) : []
624
+ }
625
+ $xeTree.cacheNodeMap()
626
+ },
627
+ handleCountLine (item: any, isRoot: boolean, nodeItem: VxeTreeDefines.NodeCacheItem) {
628
+ const $xeTree = this
629
+ const reactData = $xeTree.reactData
630
+
631
+ const { treeExpandedMaps } = reactData
632
+ const childrenField = $xeTree.computeChildrenField
633
+ const nodeid = $xeTree.getNodeId(item)
634
+ nodeItem.lineCount++
635
+ if (treeExpandedMaps[nodeid]) {
636
+ XEUtils.arrayEach(item[childrenField], (childItem, childIndex, childList) => {
637
+ if (!isRoot || childIndex < childList.length - 1) {
638
+ $xeTree.handleCountLine(childItem, false, nodeItem)
639
+ }
640
+ })
641
+ }
642
+ },
643
+ updateNodeLine (node: any) {
644
+ const $xeTree = this
645
+ const reactData = $xeTree.reactData
646
+
647
+ const { nodeMaps } = reactData
648
+ if (node) {
649
+ const nodeid = $xeTree.getNodeId(node)
650
+ const nodeItem = nodeMaps[nodeid]
651
+ if (nodeItem) {
652
+ XEUtils.lastArrayEach(nodeItem.nodes, childItem => {
653
+ const nodeid = $xeTree.getNodeId(childItem)
654
+ const nodeItem = nodeMaps[nodeid]
655
+ if (nodeItem) {
656
+ nodeItem.lineCount = 0
657
+ $xeTree.handleCountLine(childItem, true, nodeItem)
658
+ }
659
+ })
660
+ }
661
+ }
662
+ },
663
+ handleNodeClickEvent (evnt: MouseEvent, node: any) {
664
+ const $xeTree = this
665
+ const props = $xeTree
666
+ const reactData = $xeTree.reactData
667
+
668
+ const { showRadio, showCheckbox, trigger } = props
669
+ const radioOpts = $xeTree.computeRadioOpts
670
+ const checkboxOpts = $xeTree.computeCheckboxOpts
671
+ const isRowCurrent = $xeTree.computeIsRowCurrent
672
+ let triggerCurrent = false
673
+ let triggerRadio = false
674
+ let triggerCheckbox = false
675
+ let triggerExpand = false
676
+ if (isRowCurrent) {
677
+ triggerCurrent = true
678
+ $xeTree.changeCurrentEvent(evnt, node)
679
+ } else if (reactData.currentNode) {
680
+ reactData.currentNode = null
681
+ }
682
+ if (trigger === 'node') {
683
+ triggerExpand = true
684
+ $xeTree.toggleExpandEvent(evnt, node)
685
+ }
686
+ if (showRadio && radioOpts.trigger === 'node') {
687
+ triggerRadio = true
688
+ $xeTree.changeRadioEvent(evnt, node)
689
+ }
690
+ if (showCheckbox && checkboxOpts.trigger === 'node') {
691
+ triggerCheckbox = true
692
+ $xeTree.changeCheckboxEvent(evnt, node)
693
+ }
694
+ $xeTree.dispatchEvent('node-click', { node, triggerCurrent, triggerRadio, triggerCheckbox, triggerExpand }, evnt)
695
+ },
696
+ handleNodeDblclickEvent (evnt: MouseEvent, node: any) {
697
+ const $xeTree = this
698
+
699
+ $xeTree.dispatchEvent('node-dblclick', { node }, evnt)
700
+ },
701
+ handleAsyncTreeExpandChilds (node: any): Promise<void> {
702
+ const $xeTree = this
703
+ const props = $xeTree
704
+ const reactData = $xeTree.reactData
705
+
706
+ const checkboxOpts = $xeTree.computeCheckboxOpts
707
+ const { loadMethod } = props
708
+ const { checkStrictly } = checkboxOpts
709
+ return new Promise(resolve => {
710
+ if (loadMethod) {
711
+ const { treeExpandLazyLoadedMaps } = reactData
712
+ const { nodeMaps } = reactData
713
+ const nodeid = $xeTree.getNodeId(node)
714
+ const nodeItem = nodeMaps[nodeid]
715
+ treeExpandLazyLoadedMaps[nodeid] = true
716
+ Promise.resolve(
717
+ loadMethod({ $tree: $xeTree, node })
718
+ ).then((childRecords: any) => {
719
+ nodeItem.treeLoaded = true
720
+ if (treeExpandLazyLoadedMaps[nodeid]) {
721
+ delete treeExpandLazyLoadedMaps[nodeid]
722
+ }
723
+ if (!XEUtils.isArray(childRecords)) {
724
+ childRecords = []
725
+ }
726
+ if (childRecords) {
727
+ return $xeTree.loadChildrenNode(node, childRecords).then(childRows => {
728
+ const { treeExpandedMaps } = reactData
729
+ if (childRows.length && !treeExpandedMaps[nodeid]) {
730
+ treeExpandedMaps[nodeid] = true
731
+ }
732
+ // 如果当前节点已选中,则展开后子节点也被选中
733
+ if (!checkStrictly && $xeTree.isCheckedByCheckboxNodeId(nodeid)) {
734
+ $xeTree.handleCheckedCheckboxNode(childRows.map((item: any) => $xeTree.getNodeId(item)), true)
735
+ }
736
+ $xeTree.updateNodeLine(node)
737
+ $xeTree.dispatchEvent('load-success', { node, data: childRecords }, new Event('load-success'))
738
+ return $xeTree.$nextTick()
739
+ })
740
+ } else {
741
+ $xeTree.updateNodeLine(node)
742
+ $xeTree.dispatchEvent('load-success', { node, data: childRecords }, new Event('load-success'))
743
+ }
744
+ }).catch((e) => {
745
+ const { treeExpandLazyLoadedMaps } = reactData
746
+ nodeItem.treeLoaded = false
747
+ if (treeExpandLazyLoadedMaps[nodeid]) {
748
+ delete treeExpandLazyLoadedMaps[nodeid]
749
+ }
750
+ $xeTree.updateNodeLine(node)
751
+ $xeTree.dispatchEvent('load-error', { node, data: e }, new Event('load-error'))
752
+ }).finally(() => {
753
+ return $xeTree.$nextTick()
754
+ })
755
+ } else {
756
+ resolve()
757
+ }
758
+ })
759
+ },
760
+ /**
761
+ * 展开与收起树节点
762
+ * @param nodeList
763
+ * @param expanded
764
+ * @returns
765
+ */
766
+ handleBaseTreeExpand (nodeList: any[], expanded: boolean) {
767
+ const $xeTree = this
768
+ const props = $xeTree
769
+ const reactData = $xeTree.reactData
770
+
771
+ const { lazy, accordion, toggleMethod } = props
772
+ const { nodeMaps, treeExpandLazyLoadedMaps } = reactData
773
+ const tempExpandedMaps = Object.assign({}, reactData.treeExpandedMaps)
774
+ const childrenField = $xeTree.computeChildrenField
775
+ const hasChildField = $xeTree.computeHasChildField
776
+ const result: any[] = []
777
+ let validNodes = toggleMethod ? nodeList.filter((node: any) => toggleMethod({ $tree: $xeTree, expanded, node })) : nodeList
778
+ if (accordion) {
779
+ validNodes = validNodes.length ? [validNodes[validNodes.length - 1]] : []
780
+ // 同一级只能展开一个
781
+ const nodeid = $xeTree.getNodeId(validNodes[0])
782
+ const nodeItem = nodeMaps[nodeid]
783
+ if (nodeItem) {
784
+ nodeItem.items.forEach(item => {
785
+ const itemNodeId = $xeTree.getNodeId(item)
786
+ if (tempExpandedMaps[itemNodeId]) {
787
+ delete tempExpandedMaps[itemNodeId]
788
+ }
789
+ })
790
+ }
791
+ }
792
+ const expandNodes: any[] = []
793
+ if (expanded) {
794
+ validNodes.forEach((item) => {
795
+ const itemNodeId = $xeTree.getNodeId(item)
796
+ if (!tempExpandedMaps[itemNodeId]) {
797
+ const nodeItem = nodeMaps[itemNodeId]
798
+ const isLoad = lazy && item[hasChildField] && !nodeItem.treeLoaded && !treeExpandLazyLoadedMaps[itemNodeId]
799
+ // 是否使用懒加载
800
+ if (isLoad) {
801
+ result.push($xeTree.handleAsyncTreeExpandChilds(item))
802
+ } else {
803
+ if (item[childrenField] && item[childrenField].length) {
804
+ tempExpandedMaps[itemNodeId] = true
805
+ expandNodes.push(item)
806
+ }
807
+ }
808
+ }
809
+ })
810
+ } else {
811
+ validNodes.forEach(item => {
812
+ const itemNodeId = $xeTree.getNodeId(item)
813
+ if (tempExpandedMaps[itemNodeId]) {
814
+ delete tempExpandedMaps[itemNodeId]
815
+ expandNodes.push(item)
816
+ }
817
+ })
818
+ }
819
+ reactData.treeExpandedMaps = tempExpandedMaps
820
+ expandNodes.forEach((node) => {
821
+ $xeTree.updateNodeLine(node)
822
+ })
823
+ return Promise.all(result)
824
+ },
825
+ toggleExpandEvent (evnt: MouseEvent, node: any) {
826
+ const $xeTree = this
827
+ const props = $xeTree
828
+ const reactData = $xeTree.reactData
829
+
830
+ const { lazy } = props
831
+ const { treeExpandedMaps, treeExpandLazyLoadedMaps } = reactData
832
+ const nodeid = $xeTree.getNodeId(node)
833
+ const expanded = !treeExpandedMaps[nodeid]
834
+ evnt.stopPropagation()
835
+ if (!lazy || !treeExpandLazyLoadedMaps[nodeid]) {
836
+ $xeTree.handleBaseTreeExpand([node], expanded)
837
+ }
838
+ },
839
+ handleNodeCheckboxStatus (node: any, selectKeyMaps: Record<string, boolean>, indeterminateMaps: Record<string, boolean>) {
840
+ const $xeTree = this
841
+
842
+ const childrenField = $xeTree.computeChildrenField
843
+ const childList: any[] = XEUtils.get(node, childrenField)
844
+ const nodeid = $xeTree.getNodeId(node)
845
+ if (childList && childList.length) {
846
+ let checkSome = false
847
+ let checkSize = 0
848
+ childList.forEach(childNode => {
849
+ const childNodeid = $xeTree.getNodeId(childNode)
850
+ const isChecked = selectKeyMaps[childNodeid]
851
+ if (isChecked || indeterminateMaps[childNodeid]) {
852
+ if (isChecked) {
853
+ checkSize++
854
+ }
855
+ checkSome = true
856
+ }
857
+ })
858
+ const checkAll = checkSize === childList.length
859
+ if (checkAll) {
860
+ if (!selectKeyMaps[nodeid]) {
861
+ selectKeyMaps[nodeid] = true
862
+ }
863
+ if (indeterminateMaps[nodeid]) {
864
+ delete indeterminateMaps[nodeid]
865
+ }
866
+ } else {
867
+ if (selectKeyMaps[nodeid]) {
868
+ delete selectKeyMaps[nodeid]
869
+ }
870
+ indeterminateMaps[nodeid] = checkSome
871
+ }
872
+ } else {
873
+ if (indeterminateMaps[nodeid]) {
874
+ delete indeterminateMaps[nodeid]
875
+ }
876
+ }
877
+ },
878
+ updateCheckboxStatus () {
879
+ const $xeTree = this
880
+ const reactData = $xeTree.reactData
881
+
882
+ const { treeList } = reactData
883
+ const childrenField = $xeTree.computeChildrenField
884
+ const checkboxOpts = $xeTree.computeCheckboxOpts
885
+ const { checkStrictly } = checkboxOpts
886
+ if (!checkStrictly) {
887
+ const selectKeyMaps = Object.assign({}, reactData.selectCheckboxMaps)
888
+ const indeterminateMaps: Record<string, boolean> = {}
889
+ XEUtils.eachTree(treeList, (node, index, items, path, parent, nodes) => {
890
+ const childList: any[] = XEUtils.get(node, childrenField)
891
+ if (!childList || !childList.length) {
892
+ $xeTree.handleNodeCheckboxStatus(node, selectKeyMaps, indeterminateMaps)
893
+ }
894
+ if (index === items.length - 1) {
895
+ for (let len = nodes.length - 2; len >= 0; len--) {
896
+ const parentItem = nodes[len]
897
+ $xeTree.handleNodeCheckboxStatus(parentItem, selectKeyMaps, indeterminateMaps)
898
+ }
899
+ }
900
+ })
901
+ reactData.selectCheckboxMaps = selectKeyMaps
902
+ reactData.indeterminateCheckboxMaps = indeterminateMaps
903
+ }
904
+ },
905
+ changeCheckboxEvent (evnt: MouseEvent, node: any) {
906
+ const $xeTree = this
907
+ const reactData = $xeTree.reactData
908
+
909
+ evnt.preventDefault()
910
+ evnt.stopPropagation()
911
+ const checkboxOpts = $xeTree.computeCheckboxOpts
912
+ const { checkStrictly, checkMethod } = checkboxOpts
913
+ let isDisabled = !!checkMethod
914
+ if (checkMethod) {
915
+ isDisabled = !checkMethod({ node })
916
+ }
917
+ if (isDisabled) {
918
+ return
919
+ }
920
+ const selectKeyMaps = Object.assign({}, reactData.selectCheckboxMaps)
921
+ const childrenField = $xeTree.computeChildrenField
922
+ const nodeid = $xeTree.getNodeId(node)
923
+ let isChecked = false
924
+ if (selectKeyMaps[nodeid]) {
925
+ delete selectKeyMaps[nodeid]
926
+ } else {
927
+ isChecked = true
928
+ selectKeyMaps[nodeid] = isChecked
929
+ }
930
+ if (!checkStrictly) {
931
+ XEUtils.eachTree(XEUtils.get(node, childrenField), (childNode) => {
932
+ const childNodeid = $xeTree.getNodeId(childNode)
933
+ if (isChecked) {
934
+ if (!selectKeyMaps[childNodeid]) {
935
+ selectKeyMaps[childNodeid] = true
936
+ }
937
+ } else {
938
+ if (selectKeyMaps[childNodeid]) {
939
+ delete selectKeyMaps[childNodeid]
940
+ }
941
+ }
942
+ }, { children: childrenField })
943
+ }
944
+ reactData.selectCheckboxMaps = selectKeyMaps
945
+ $xeTree.updateCheckboxStatus()
946
+ const value = Object.keys(reactData.selectCheckboxMaps)
947
+ $xeTree.emitCheckboxMode(value)
948
+ $xeTree.dispatchEvent('checkbox-change', { node, value, checked: isChecked }, evnt)
949
+ },
950
+ changeCurrentEvent (evnt: MouseEvent, node: any) {
951
+ const $xeTree = this
952
+ const reactData = $xeTree.reactData
953
+
954
+ evnt.preventDefault()
955
+ const nodeOpts = $xeTree.computeNodeOpts
956
+ const { currentMethod, trigger } = nodeOpts
957
+ const childrenField = $xeTree.computeChildrenField
958
+ const childList: any[] = XEUtils.get(node, childrenField)
959
+ const hasChild = childList && childList.length
960
+ let isDisabled = !!currentMethod
961
+ if (trigger === 'child') {
962
+ if (hasChild) {
963
+ return
964
+ }
965
+ } else if (trigger === 'parent') {
966
+ if (!hasChild) {
967
+ return
968
+ }
969
+ }
970
+ if (currentMethod) {
971
+ isDisabled = !currentMethod({ node })
972
+ }
973
+ if (isDisabled) {
974
+ return
975
+ }
976
+ const isChecked = true
977
+ reactData.currentNode = node
978
+ $xeTree.dispatchEvent('current-change', { node, checked: isChecked }, evnt)
979
+ },
980
+ changeRadioEvent (evnt: MouseEvent, node: any) {
981
+ const $xeTree = this
982
+ const reactData = $xeTree.reactData
983
+
984
+ evnt.preventDefault()
985
+ evnt.stopPropagation()
986
+ const radioOpts = $xeTree.computeRadioOpts
987
+ const { checkMethod } = radioOpts
988
+ let isDisabled = !!checkMethod
989
+ if (checkMethod) {
990
+ isDisabled = !checkMethod({ node })
991
+ }
992
+ if (isDisabled) {
993
+ return
994
+ }
995
+ const isChecked = true
996
+ const value = $xeTree.getNodeId(node)
997
+ reactData.selectRadioKey = value
998
+ $xeTree.emitRadioMode(value)
999
+ $xeTree.dispatchEvent('radio-change', { node, value, checked: isChecked }, evnt)
1000
+ },
1001
+
1002
+ //
1003
+ // Render
1004
+ //
1005
+ renderRadio (h: CreateElement, node: any, nodeid: string, isChecked: boolean) {
1006
+ const $xeTree = this
1007
+ const props = $xeTree
1008
+
1009
+ const { showRadio } = props
1010
+ const radioOpts = $xeTree.computeRadioOpts
1011
+ const { showIcon, checkMethod, visibleMethod } = radioOpts
1012
+ const isVisible = !visibleMethod || visibleMethod({ node })
1013
+ let isDisabled = !!checkMethod
1014
+ if (showRadio && showIcon && isVisible) {
1015
+ if (checkMethod) {
1016
+ isDisabled = !checkMethod({ node })
1017
+ }
1018
+ return h('div', {
1019
+ class: ['vxe-tree--radio-option', {
1020
+ 'is--checked': isChecked,
1021
+ 'is--disabled': isDisabled
1022
+ }],
1023
+ on: {
1024
+ click: (evnt: MouseEvent) => {
1025
+ if (!isDisabled) {
1026
+ $xeTree.changeRadioEvent(evnt, node)
1027
+ }
1028
+ }
1029
+ }
1030
+ }, [
1031
+ h('span', {
1032
+ class: ['vxe-radio--icon', isChecked ? getIcon().RADIO_CHECKED : getIcon().RADIO_UNCHECKED]
1033
+ })
1034
+ ])
1035
+ }
1036
+ return renderEmptyElement($xeTree)
1037
+ },
1038
+ renderCheckbox (h: CreateElement, node: any, nodeid: string, isChecked: boolean) {
1039
+ const $xeTree = this
1040
+ const props = $xeTree
1041
+
1042
+ const { showCheckbox } = props
1043
+ const checkboxOpts = $xeTree.computeCheckboxOpts
1044
+ const { showIcon, checkMethod, visibleMethod } = checkboxOpts
1045
+ const isIndeterminate = $xeTree.isIndeterminateByCheckboxNodeid(nodeid)
1046
+ const isVisible = !visibleMethod || visibleMethod({ node })
1047
+ let isDisabled = !!checkMethod
1048
+ if (showCheckbox && showIcon && isVisible) {
1049
+ if (checkMethod) {
1050
+ isDisabled = !checkMethod({ node })
1051
+ }
1052
+ return h('div', {
1053
+ class: ['vxe-tree--checkbox-option', {
1054
+ 'is--checked': isChecked,
1055
+ 'is--indeterminate': isIndeterminate,
1056
+ 'is--disabled': isDisabled
1057
+ }],
1058
+ on: {
1059
+ click: (evnt: MouseEvent) => {
1060
+ if (!isDisabled) {
1061
+ $xeTree.changeCheckboxEvent(evnt, node)
1062
+ }
1063
+ }
1064
+ }
1065
+ }, [
1066
+ h('span', {
1067
+ class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().CHECKBOX_INDETERMINATE : (isChecked ? getIcon().CHECKBOX_CHECKED : getIcon().CHECKBOX_UNCHECKED)]
1068
+ })
1069
+ ])
1070
+ }
1071
+ return renderEmptyElement($xeTree)
1072
+ },
1073
+ renderNode (h: CreateElement, node: any): VNode {
1074
+ const $xeTree = this
1075
+ const props = $xeTree
1076
+ const slots = $xeTree.$scopedSlots
1077
+ const reactData = $xeTree.reactData
1078
+
1079
+ const { lazy, showRadio, showCheckbox, showLine, indent, iconOpen, iconClose, iconLoaded, showIcon } = props
1080
+ const { nodeMaps, treeExpandedMaps, currentNode, selectRadioKey, treeExpandLazyLoadedMaps } = reactData
1081
+ const childrenField = $xeTree.computeChildrenField
1082
+ const titleField = $xeTree.computeTitleField
1083
+ const hasChildField = $xeTree.computeHasChildField
1084
+ const childList: any[] = XEUtils.get(node, childrenField)
1085
+ const hasChild = childList && childList.length
1086
+ const titleSlot = slots.title
1087
+ const extraSlot = slots.extra
1088
+ const nodeid = $xeTree.getNodeId(node)
1089
+ const isExpand = treeExpandedMaps[nodeid]
1090
+ const nodeItem = nodeMaps[nodeid]
1091
+ const nodeValue = XEUtils.get(node, titleField)
1092
+ const childVns: VNode[] = []
1093
+ if (hasChild && treeExpandedMaps[nodeid]) {
1094
+ if (showLine) {
1095
+ childVns.push(
1096
+ h('div', {
1097
+ key: 'line',
1098
+ class: 'vxe-tree--node-child-line',
1099
+ style: {
1100
+ height: `calc(${nodeItem.lineCount} * var(--vxe-ui-tree-node-height) - var(--vxe-ui-tree-node-height) / 2)`,
1101
+ left: `${(nodeItem.level + 1) * (indent || 1)}px`
1102
+ }
1103
+ })
1104
+ )
1105
+ }
1106
+ childList.forEach(childItem => {
1107
+ childVns.push($xeTree.renderNode(h, childItem))
1108
+ })
1109
+ }
1110
+
1111
+ let isRadioChecked = false
1112
+ if (showRadio) {
1113
+ // eslint-disable-next-line eqeqeq
1114
+ isRadioChecked = nodeid == selectRadioKey
1115
+ }
1116
+
1117
+ let isCheckboxChecked = false
1118
+ if (showCheckbox) {
1119
+ isCheckboxChecked = $xeTree.isCheckedByCheckboxNodeId(nodeid)
1120
+ }
1121
+
1122
+ let hasLazyChilds = false
1123
+ let isLazyLoading = false
1124
+ let isLazyLoaded = false
1125
+ if (lazy) {
1126
+ isLazyLoading = !!treeExpandLazyLoadedMaps[nodeid]
1127
+ hasLazyChilds = node[hasChildField]
1128
+ isLazyLoaded = !!nodeItem.treeLoaded
1129
+ }
1130
+
1131
+ return h('div', {
1132
+ class: ['vxe-tree--node-wrapper', `node--level-${nodeItem.level}`],
1133
+ attrs: {
1134
+ nodeid
1135
+ }
1136
+ }, [
1137
+ h('div', {
1138
+ class: ['vxe-tree--node-item', {
1139
+ 'is--current': currentNode && nodeid === $xeTree.getNodeId(currentNode),
1140
+ 'is-radio--checked': isRadioChecked,
1141
+ 'is-checkbox--checked': isCheckboxChecked
1142
+ }],
1143
+ style: {
1144
+ paddingLeft: `${(nodeItem.level - 1) * (indent || 1)}px`
1145
+ },
1146
+ on: {
1147
+ click (evnt: MouseEvent) {
1148
+ $xeTree.handleNodeClickEvent(evnt, node)
1149
+ },
1150
+ dblclick (evnt: MouseEvent) {
1151
+ $xeTree.handleNodeDblclickEvent(evnt, node)
1152
+ }
1153
+ }
1154
+ }, [
1155
+ showIcon || showLine
1156
+ ? h('div', {
1157
+ class: 'vxe-tree--node-item-switcher'
1158
+ }, showIcon && (lazy ? (isLazyLoaded ? hasChild : hasLazyChilds) : hasChild)
1159
+ ? [
1160
+ h('div', {
1161
+ class: 'vxe-tree--node-item-icon',
1162
+ on: {
1163
+ click (evnt: MouseEvent) {
1164
+ $xeTree.toggleExpandEvent(evnt, node)
1165
+ }
1166
+ }
1167
+ }, [
1168
+ h('i', {
1169
+ class: isLazyLoading ? (iconLoaded || getIcon().TREE_NODE_LOADED) : (isExpand ? (iconOpen || getIcon().TREE_NODE_OPEN) : (iconClose || getIcon().TREE_NODE_CLOSE))
1170
+ })
1171
+ ])
1172
+ ]
1173
+ : [])
1174
+ : renderEmptyElement($xeTree),
1175
+ $xeTree.renderRadio(h, node, nodeid, isRadioChecked),
1176
+ $xeTree.renderCheckbox(h, node, nodeid, isCheckboxChecked),
1177
+ h('div', {
1178
+ class: 'vxe-tree--node-item-inner'
1179
+ }, [
1180
+ h('div', {
1181
+ class: 'vxe-tree--node-item-title'
1182
+ }, titleSlot ? getSlotVNs(titleSlot({ node })) : `${nodeValue}`),
1183
+ extraSlot
1184
+ ? h('div', {
1185
+ class: 'vxe-tree--node-item-extra'
1186
+ }, getSlotVNs(extraSlot({ node })))
1187
+ : renderEmptyElement($xeTree)
1188
+ ])
1189
+ ]),
1190
+ hasChild && treeExpandedMaps[nodeid]
1191
+ ? h('div', {
1192
+ class: 'vxe-tree--node-child-wrapper'
1193
+ }, childVns)
1194
+ : renderEmptyElement($xeTree)
1195
+ ])
1196
+ },
1197
+ renderNodeList (h: CreateElement) {
1198
+ const $xeTree = this
1199
+ const reactData = $xeTree.reactData
1200
+
1201
+ const { treeList } = reactData
1202
+ return h('div', {
1203
+ class: 'vxe-tree--node-list-wrapper'
1204
+ }, treeList.map(node => $xeTree.renderNode(h, node)))
1205
+ },
1206
+ renderVN (h: CreateElement): VNode {
1207
+ const $xeTree = this
1208
+ const props = $xeTree
1209
+ const slots = $xeTree.$scopedSlots
1210
+
1211
+ const { loading, trigger, showLine } = props
1212
+ const vSize = $xeTree.computeSize
1213
+ const radioOpts = $xeTree.computeRadioOpts
1214
+ const checkboxOpts = $xeTree.computeCheckboxOpts
1215
+ const treeStyle = $xeTree.computeTreeStyle
1216
+ const loadingOpts = $xeTree.computeLoadingOpts
1217
+ const isRowHover = $xeTree.computeIsRowHover
1218
+ const loadingSlot = slots.loading
1219
+ return h('div', {
1220
+ ref: 'refElem',
1221
+ class: ['vxe-tree', {
1222
+ [`size--${vSize}`]: vSize,
1223
+ 'show--line': showLine,
1224
+ 'checkbox--highlight': checkboxOpts.highlight,
1225
+ 'radio--highlight': radioOpts.highlight,
1226
+ 'node--hover': isRowHover,
1227
+ 'node--trigger': trigger === 'node',
1228
+ 'is--loading': loading
1229
+ }],
1230
+ style: treeStyle
1231
+ }, [
1232
+ $xeTree.renderNodeList(h),
1233
+ /**
1234
+ * 加载中
1235
+ */
1236
+ h(VxeLoadingComponent, {
1237
+ class: 'vxe-tree--loading',
1238
+ props: {
1239
+ value: loading,
1240
+ icon: loadingOpts.icon,
1241
+ text: loadingOpts.text
1242
+ },
1243
+ scopedSlots: loadingSlot
1244
+ ? {
1245
+ default: () => loadingSlot({ $tree: $xeTree })
1246
+ }
1247
+ : {}
1248
+ })
1249
+ ])
1250
+ }
1251
+ },
1252
+ watch: {
1253
+ data (val) {
1254
+ const $xeTree = this
1255
+
1256
+ $xeTree.updateData(val || [])
1257
+ },
1258
+ checkNodeKey (val) {
1259
+ const $xeTree = this
1260
+ const reactData = $xeTree.reactData
1261
+
1262
+ reactData.selectRadioKey = val
1263
+ },
1264
+ checkNodeKeys () {
1265
+ const $xeTree = this
1266
+ const props = $xeTree
1267
+
1268
+ $xeTree.updateCheckboxChecked(props.checkNodeKeys || [])
1269
+ }
1270
+ },
1271
+ created () {
1272
+ const $xeTree = this
1273
+ const props = $xeTree
1274
+ const reactData = $xeTree.reactData
1275
+
1276
+ reactData.selectRadioKey = props.checkNodeKey || null
1277
+
1278
+ $xeTree.updateData(props.data || [])
1279
+ $xeTree.updateCheckboxChecked(props.checkNodeKeys || [])
1280
+ },
1281
+ beforeDestroy () {
1282
+ const $xeTree = this
1283
+ const reactData = $xeTree.reactData
1284
+
1285
+ reactData.treeList = []
1286
+ reactData.treeExpandedMaps = {}
1287
+ reactData.nodeMaps = {}
1288
+ },
1289
+ render (this: any, h) {
1290
+ return this.renderVN(h)
1291
+ }
1292
+ })