vxe-pc-ui 4.15.13 → 4.15.15

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 (333) hide show
  1. package/dist/all.esm.js +709 -140
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/button/style.css +42 -72
  5. package/es/button/style.min.css +1 -1
  6. package/es/cascader/style.css +29 -33
  7. package/es/cascader/style.min.css +1 -1
  8. package/es/checkbox/src/button.js +3 -1
  9. package/es/checkbox/src/group.js +6 -1
  10. package/es/checkbox/style.css +22 -28
  11. package/es/checkbox/style.min.css +1 -1
  12. package/es/checkbox-button/style.css +151 -8
  13. package/es/checkbox-button/style.min.css +1 -1
  14. package/es/context-menu/style.css +14 -13
  15. package/es/context-menu/style.min.css +1 -1
  16. package/es/date-picker/src/date-picker.js +1 -1
  17. package/es/form/style.css +45 -95
  18. package/es/form/style.min.css +1 -1
  19. package/es/icon/style.css +1 -1
  20. package/es/icon-picker/src/icon-picker.js +145 -46
  21. package/es/icon-picker/style.css +49 -23
  22. package/es/icon-picker/style.min.css +1 -1
  23. package/es/language/ar-EG.js +3 -0
  24. package/es/language/de-DE.js +3 -0
  25. package/es/language/en-US.js +3 -0
  26. package/es/language/es-ES.js +3 -0
  27. package/es/language/fr-FR.js +3 -0
  28. package/es/language/hu-HU.js +3 -0
  29. package/es/language/hy-AM.js +3 -0
  30. package/es/language/id-ID.js +3 -0
  31. package/es/language/it-IT.js +3 -0
  32. package/es/language/ja-JP.js +3 -0
  33. package/es/language/ko-KR.js +3 -0
  34. package/es/language/ms-MY.js +3 -0
  35. package/es/language/nb-NO.js +3 -0
  36. package/es/language/pt-BR.js +3 -0
  37. package/es/language/ru-RU.js +3 -0
  38. package/es/language/th-TH.js +3 -0
  39. package/es/language/ug-CN.js +3 -0
  40. package/es/language/uk-UA.js +3 -0
  41. package/es/language/uz-UZ.js +3 -0
  42. package/es/language/vi-VN.js +3 -0
  43. package/es/language/zh-CHT.js +3 -0
  44. package/es/language/zh-CN.js +3 -0
  45. package/es/list/src/list.js +14 -1
  46. package/es/list/style.css +26 -28
  47. package/es/list/style.min.css +1 -1
  48. package/es/menu/style.css +22 -29
  49. package/es/menu/style.min.css +1 -1
  50. package/es/notice-bar/style.css +14 -10
  51. package/es/notice-bar/style.min.css +1 -1
  52. package/es/radio/src/button.js +3 -1
  53. package/es/radio/src/group.js +6 -1
  54. package/es/radio/style.css +22 -30
  55. package/es/radio/style.min.css +1 -1
  56. package/es/radio-button/style.css +151 -8
  57. package/es/radio-button/style.min.css +1 -1
  58. package/es/select/style.css +42 -59
  59. package/es/select/style.min.css +1 -1
  60. package/es/style.css +1 -1
  61. package/es/style.min.css +1 -1
  62. package/es/tree/src/tree.js +441 -18
  63. package/es/tree/src/util.js +15 -0
  64. package/es/tree/style.css +26 -25
  65. package/es/tree/style.min.css +1 -1
  66. package/es/tree-select/style.css +27 -31
  67. package/es/tree-select/style.min.css +1 -1
  68. package/es/ui/index.js +5 -2
  69. package/es/ui/src/log.js +1 -1
  70. package/es/upload/style.css +30 -41
  71. package/es/upload/style.min.css +1 -1
  72. package/es/vxe-button/style.css +42 -72
  73. package/es/vxe-button/style.min.css +1 -1
  74. package/es/vxe-cascader/style.css +29 -33
  75. package/es/vxe-cascader/style.min.css +1 -1
  76. package/es/vxe-checkbox/style.css +22 -28
  77. package/es/vxe-checkbox/style.min.css +1 -1
  78. package/es/vxe-checkbox-button/style.css +151 -8
  79. package/es/vxe-checkbox-button/style.min.css +1 -1
  80. package/es/vxe-context-menu/style.css +14 -13
  81. package/es/vxe-context-menu/style.min.css +1 -1
  82. package/es/vxe-form/style.css +45 -95
  83. package/es/vxe-form/style.min.css +1 -1
  84. package/es/vxe-icon-picker/style.css +49 -23
  85. package/es/vxe-icon-picker/style.min.css +1 -1
  86. package/es/vxe-list/style.css +26 -28
  87. package/es/vxe-list/style.min.css +1 -1
  88. package/es/vxe-menu/style.css +22 -29
  89. package/es/vxe-menu/style.min.css +1 -1
  90. package/es/vxe-notice-bar/style.css +14 -10
  91. package/es/vxe-notice-bar/style.min.css +1 -1
  92. package/es/vxe-radio/style.css +22 -30
  93. package/es/vxe-radio/style.min.css +1 -1
  94. package/es/vxe-radio-button/style.css +151 -8
  95. package/es/vxe-radio-button/style.min.css +1 -1
  96. package/es/vxe-select/style.css +42 -59
  97. package/es/vxe-select/style.min.css +1 -1
  98. package/es/vxe-tree/style.css +26 -25
  99. package/es/vxe-tree/style.min.css +1 -1
  100. package/es/vxe-tree-select/style.css +27 -31
  101. package/es/vxe-tree-select/style.min.css +1 -1
  102. package/es/vxe-upload/style.css +30 -41
  103. package/es/vxe-upload/style.min.css +1 -1
  104. package/lib/button/style/style.css +42 -72
  105. package/lib/button/style/style.min.css +1 -1
  106. package/lib/cascader/style/style.css +29 -33
  107. package/lib/cascader/style/style.min.css +1 -1
  108. package/lib/checkbox/src/button.js +3 -1
  109. package/lib/checkbox/src/button.min.js +1 -1
  110. package/lib/checkbox/src/group.js +6 -0
  111. package/lib/checkbox/src/group.min.js +1 -1
  112. package/lib/checkbox/style/style.css +22 -28
  113. package/lib/checkbox/style/style.min.css +1 -1
  114. package/lib/checkbox-button/style/style.css +151 -8
  115. package/lib/checkbox-button/style/style.min.css +1 -1
  116. package/lib/context-menu/style/style.css +14 -13
  117. package/lib/context-menu/style/style.min.css +1 -1
  118. package/lib/date-picker/src/date-picker.js +1 -1
  119. package/lib/date-picker/src/date-picker.min.js +1 -1
  120. package/lib/form/style/style.css +45 -95
  121. package/lib/form/style/style.min.css +1 -1
  122. package/lib/icon/style/style.css +1 -1
  123. package/lib/icon/style/style.min.css +1 -1
  124. package/lib/icon-picker/src/icon-picker.js +143 -29
  125. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  126. package/lib/icon-picker/style/style.css +49 -23
  127. package/lib/icon-picker/style/style.min.css +1 -1
  128. package/lib/index.umd.js +732 -50
  129. package/lib/index.umd.min.js +1 -1
  130. package/lib/language/ar-EG.js +3 -0
  131. package/lib/language/ar-EG.min.js +1 -1
  132. package/lib/language/ar-EG.umd.js +3 -0
  133. package/lib/language/de-DE.js +3 -0
  134. package/lib/language/de-DE.min.js +1 -1
  135. package/lib/language/de-DE.umd.js +3 -0
  136. package/lib/language/en-US.js +3 -0
  137. package/lib/language/en-US.min.js +1 -1
  138. package/lib/language/en-US.umd.js +3 -0
  139. package/lib/language/es-ES.js +3 -0
  140. package/lib/language/es-ES.min.js +1 -1
  141. package/lib/language/es-ES.umd.js +3 -0
  142. package/lib/language/fr-FR.js +3 -0
  143. package/lib/language/fr-FR.min.js +1 -1
  144. package/lib/language/fr-FR.umd.js +3 -0
  145. package/lib/language/hu-HU.js +3 -0
  146. package/lib/language/hu-HU.min.js +1 -1
  147. package/lib/language/hu-HU.umd.js +3 -0
  148. package/lib/language/hy-AM.js +3 -0
  149. package/lib/language/hy-AM.min.js +1 -1
  150. package/lib/language/hy-AM.umd.js +3 -0
  151. package/lib/language/id-ID.js +3 -0
  152. package/lib/language/id-ID.min.js +1 -1
  153. package/lib/language/id-ID.umd.js +3 -0
  154. package/lib/language/it-IT.js +3 -0
  155. package/lib/language/it-IT.min.js +1 -1
  156. package/lib/language/it-IT.umd.js +3 -0
  157. package/lib/language/ja-JP.js +3 -0
  158. package/lib/language/ja-JP.min.js +1 -1
  159. package/lib/language/ja-JP.umd.js +3 -0
  160. package/lib/language/ko-KR.js +3 -0
  161. package/lib/language/ko-KR.min.js +1 -1
  162. package/lib/language/ko-KR.umd.js +3 -0
  163. package/lib/language/ms-MY.js +3 -0
  164. package/lib/language/ms-MY.min.js +1 -1
  165. package/lib/language/ms-MY.umd.js +3 -0
  166. package/lib/language/nb-NO.js +3 -0
  167. package/lib/language/nb-NO.min.js +1 -1
  168. package/lib/language/nb-NO.umd.js +3 -0
  169. package/lib/language/pt-BR.js +3 -0
  170. package/lib/language/pt-BR.min.js +1 -1
  171. package/lib/language/pt-BR.umd.js +3 -0
  172. package/lib/language/ru-RU.js +3 -0
  173. package/lib/language/ru-RU.min.js +1 -1
  174. package/lib/language/ru-RU.umd.js +3 -0
  175. package/lib/language/th-TH.js +3 -0
  176. package/lib/language/th-TH.min.js +1 -1
  177. package/lib/language/th-TH.umd.js +3 -0
  178. package/lib/language/ug-CN.js +3 -0
  179. package/lib/language/ug-CN.min.js +1 -1
  180. package/lib/language/ug-CN.umd.js +3 -0
  181. package/lib/language/uk-UA.js +3 -0
  182. package/lib/language/uk-UA.min.js +1 -1
  183. package/lib/language/uk-UA.umd.js +3 -0
  184. package/lib/language/uz-UZ.js +3 -0
  185. package/lib/language/uz-UZ.min.js +1 -1
  186. package/lib/language/uz-UZ.umd.js +3 -0
  187. package/lib/language/vi-VN.js +3 -0
  188. package/lib/language/vi-VN.min.js +1 -1
  189. package/lib/language/vi-VN.umd.js +3 -0
  190. package/lib/language/zh-CHT.js +3 -0
  191. package/lib/language/zh-CHT.min.js +1 -1
  192. package/lib/language/zh-CHT.umd.js +3 -0
  193. package/lib/language/zh-CN.js +3 -0
  194. package/lib/language/zh-CN.min.js +1 -1
  195. package/lib/language/zh-CN.umd.js +3 -0
  196. package/lib/list/src/list.js +19 -1
  197. package/lib/list/src/list.min.js +1 -1
  198. package/lib/list/style/style.css +26 -28
  199. package/lib/list/style/style.min.css +1 -1
  200. package/lib/menu/style/style.css +22 -29
  201. package/lib/menu/style/style.min.css +1 -1
  202. package/lib/notice-bar/style/style.css +14 -10
  203. package/lib/notice-bar/style/style.min.css +1 -1
  204. package/lib/radio/src/button.js +3 -1
  205. package/lib/radio/src/button.min.js +1 -1
  206. package/lib/radio/src/group.js +7 -1
  207. package/lib/radio/src/group.min.js +1 -1
  208. package/lib/radio/style/style.css +22 -30
  209. package/lib/radio/style/style.min.css +1 -1
  210. package/lib/radio-button/style/style.css +151 -8
  211. package/lib/radio-button/style/style.min.css +1 -1
  212. package/lib/select/style/style.css +42 -59
  213. package/lib/select/style/style.min.css +1 -1
  214. package/lib/style.css +1 -1
  215. package/lib/style.min.css +1 -1
  216. package/lib/tree/src/tree.js +525 -14
  217. package/lib/tree/src/tree.min.js +1 -1
  218. package/lib/tree/src/util.js +16 -0
  219. package/lib/tree/src/util.min.js +1 -1
  220. package/lib/tree/style/style.css +26 -25
  221. package/lib/tree/style/style.min.css +1 -1
  222. package/lib/tree-select/style/style.css +27 -31
  223. package/lib/tree-select/style/style.min.css +1 -1
  224. package/lib/ui/index.js +5 -2
  225. package/lib/ui/index.min.js +1 -1
  226. package/lib/ui/src/log.js +1 -1
  227. package/lib/ui/src/log.min.js +1 -1
  228. package/lib/upload/style/style.css +30 -41
  229. package/lib/upload/style/style.min.css +1 -1
  230. package/lib/vxe-button/style/style.css +42 -72
  231. package/lib/vxe-button/style/style.min.css +1 -1
  232. package/lib/vxe-cascader/style/style.css +29 -33
  233. package/lib/vxe-cascader/style/style.min.css +1 -1
  234. package/lib/vxe-checkbox/style/style.css +22 -28
  235. package/lib/vxe-checkbox/style/style.min.css +1 -1
  236. package/lib/vxe-checkbox-button/style/style.css +151 -8
  237. package/lib/vxe-checkbox-button/style/style.min.css +1 -1
  238. package/lib/vxe-context-menu/style/style.css +14 -13
  239. package/lib/vxe-context-menu/style/style.min.css +1 -1
  240. package/lib/vxe-form/style/style.css +45 -95
  241. package/lib/vxe-form/style/style.min.css +1 -1
  242. package/lib/vxe-icon-picker/style/style.css +49 -23
  243. package/lib/vxe-icon-picker/style/style.min.css +1 -1
  244. package/lib/vxe-list/style/style.css +26 -28
  245. package/lib/vxe-list/style/style.min.css +1 -1
  246. package/lib/vxe-menu/style/style.css +22 -29
  247. package/lib/vxe-menu/style/style.min.css +1 -1
  248. package/lib/vxe-notice-bar/style/style.css +14 -10
  249. package/lib/vxe-notice-bar/style/style.min.css +1 -1
  250. package/lib/vxe-radio/style/style.css +22 -30
  251. package/lib/vxe-radio/style/style.min.css +1 -1
  252. package/lib/vxe-radio-button/style/style.css +151 -8
  253. package/lib/vxe-radio-button/style/style.min.css +1 -1
  254. package/lib/vxe-select/style/style.css +42 -59
  255. package/lib/vxe-select/style/style.min.css +1 -1
  256. package/lib/vxe-tree/style/style.css +26 -25
  257. package/lib/vxe-tree/style/style.min.css +1 -1
  258. package/lib/vxe-tree-select/style/style.css +27 -31
  259. package/lib/vxe-tree-select/style/style.min.css +1 -1
  260. package/lib/vxe-upload/style/style.css +30 -41
  261. package/lib/vxe-upload/style/style.min.css +1 -1
  262. package/package.json +1 -1
  263. package/packages/checkbox/src/button.ts +3 -1
  264. package/packages/checkbox/src/group.ts +6 -1
  265. package/packages/date-picker/src/date-picker.ts +1 -1
  266. package/packages/icon-picker/src/icon-picker.ts +157 -48
  267. package/packages/language/ar-EG.ts +3 -0
  268. package/packages/language/de-DE.ts +3 -0
  269. package/packages/language/en-US.ts +3 -0
  270. package/packages/language/es-ES.ts +3 -0
  271. package/packages/language/fr-FR.ts +3 -0
  272. package/packages/language/hu-HU.ts +3 -0
  273. package/packages/language/hy-AM.ts +3 -0
  274. package/packages/language/id-ID.ts +3 -0
  275. package/packages/language/it-IT.ts +3 -0
  276. package/packages/language/ja-JP.ts +3 -0
  277. package/packages/language/ko-KR.ts +3 -0
  278. package/packages/language/ms-MY.ts +3 -0
  279. package/packages/language/nb-NO.ts +3 -0
  280. package/packages/language/pt-BR.ts +3 -0
  281. package/packages/language/ru-RU.ts +3 -0
  282. package/packages/language/th-TH.ts +3 -0
  283. package/packages/language/ug-CN.ts +3 -0
  284. package/packages/language/uk-UA.ts +3 -0
  285. package/packages/language/uz-UZ.ts +3 -0
  286. package/packages/language/vi-VN.ts +3 -0
  287. package/packages/language/zh-CHT.ts +3 -0
  288. package/packages/language/zh-CN.ts +3 -0
  289. package/packages/list/src/list.ts +14 -1
  290. package/packages/radio/src/button.ts +3 -1
  291. package/packages/radio/src/group.ts +6 -1
  292. package/packages/tree/src/tree.ts +443 -14
  293. package/packages/tree/src/util.ts +17 -1
  294. package/packages/ui/index.ts +4 -1
  295. package/styles/components/button.scss +56 -137
  296. package/styles/components/cascader.scss +25 -27
  297. package/styles/components/checkbox-button.scss +65 -13
  298. package/styles/components/checkbox.scss +22 -24
  299. package/styles/components/context-menu.scss +15 -13
  300. package/styles/components/form.scss +57 -134
  301. package/styles/components/icon-picker.scss +56 -27
  302. package/styles/components/link.scss +1 -1
  303. package/styles/components/list.scss +24 -26
  304. package/styles/components/menu.scss +23 -25
  305. package/styles/components/notice-bar.scss +15 -13
  306. package/styles/components/radio-button.scss +65 -13
  307. package/styles/components/radio.scss +22 -23
  308. package/styles/components/select.scss +36 -62
  309. package/styles/components/tree-select.scss +26 -27
  310. package/styles/components/tree.scss +16 -14
  311. package/styles/components/upload.scss +28 -30
  312. package/styles/helpers/baseMixin.scss +2 -2
  313. package/styles/helpers/themeStatus.scss +58 -0
  314. package/styles/theme/base.scss +11 -3
  315. package/types/all.d.ts +205 -0
  316. package/types/components/checkbox-group.d.ts +3 -1
  317. package/types/components/checkbox.d.ts +1 -1
  318. package/types/components/icon-picker.d.ts +28 -4
  319. package/types/components/list.d.ts +2 -2
  320. package/types/components/radio-group.d.ts +3 -1
  321. package/types/components/tree.d.ts +36 -0
  322. /package/es/icon/{iconfont.1782658269305.ttf → iconfont.1782810550462.ttf} +0 -0
  323. /package/es/icon/{iconfont.1782658269305.woff → iconfont.1782810550462.woff} +0 -0
  324. /package/es/icon/{iconfont.1782658269305.woff2 → iconfont.1782810550462.woff2} +0 -0
  325. /package/es/{iconfont.1782658269305.ttf → iconfont.1782810550462.ttf} +0 -0
  326. /package/es/{iconfont.1782658269305.woff → iconfont.1782810550462.woff} +0 -0
  327. /package/es/{iconfont.1782658269305.woff2 → iconfont.1782810550462.woff2} +0 -0
  328. /package/lib/icon/style/{iconfont.1782658269305.ttf → iconfont.1782810550462.ttf} +0 -0
  329. /package/lib/icon/style/{iconfont.1782658269305.woff → iconfont.1782810550462.woff} +0 -0
  330. /package/lib/icon/style/{iconfont.1782658269305.woff2 → iconfont.1782810550462.woff2} +0 -0
  331. /package/lib/{iconfont.1782658269305.ttf → iconfont.1782810550462.ttf} +0 -0
  332. /package/lib/{iconfont.1782658269305.woff → iconfont.1782810550462.woff} +0 -0
  333. /package/lib/{iconfont.1782658269305.woff2 → iconfont.1782810550462.woff2} +0 -0
@@ -18,6 +18,7 @@ var _anime = require("../../ui/src/anime");
18
18
  var _loading = _interopRequireDefault(require("../../loading"));
19
19
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
20
20
  const {
21
+ warnLog,
21
22
  errLog
22
23
  } = (0, _log.createComponentLog)('tree');
23
24
  const {
@@ -53,6 +54,8 @@ function createInternalData() {
53
54
  offsetSize: 0,
54
55
  rowHeight: 0
55
56
  },
57
+ removeRowMaps: {},
58
+ insertRowMaps: {},
56
59
  // prevDragNode: null,
57
60
  // prevDragToChild: false,
58
61
  // prevDragPos: ''
@@ -74,14 +77,13 @@ function createReactData() {
74
77
  treeList: [],
75
78
  updateExpandedFlag: 1,
76
79
  updateCheckboxFlag: 1,
80
+ insertRowFlag: 1,
81
+ removeRowFlag: 1,
77
82
  dragNode: null,
78
83
  dragTipText: ''
79
84
  };
80
85
  }
81
- // let crossTreeDragNodeObj: {
82
- // $oldTree: VxeTreeConstructor & VxeTreePrivateMethods
83
- // $newTree: (VxeTreeConstructor & VxeTreePrivateMethods) | null
84
- // } | null = null
86
+ let crossTreeDragNodeObj = null;
85
87
  var _default = exports.default = (0, _comp.defineVxeComponent)({
86
88
  name: 'VxeTree',
87
89
  props: {
@@ -203,7 +205,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
203
205
  },
204
206
  virtualYConfig: Object
205
207
  },
206
- emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error', 'scroll', 'node-dragstart', 'node-dragover', 'node-dragend', 'node-expand', 'node-menu', 'menu-click'],
208
+ emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error', 'scroll', 'node-dragstart', 'node-dragover', 'node-dragend', 'node-remove-dragend', 'node-insert-dragend', 'node-expand', 'node-menu', 'menu-click'],
207
209
  setup(props, context) {
208
210
  const {
209
211
  emit,
@@ -1560,6 +1562,177 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
1560
1562
  }
1561
1563
  recalculate();
1562
1564
  };
1565
+ const insertTreeNode = (newRecords, isAppend) => {
1566
+ const {
1567
+ treeFullData,
1568
+ nodeMaps
1569
+ } = internalData;
1570
+ const keyField = computeKeyField.value;
1571
+ const parentField = computeParentField.value;
1572
+ const childrenField = computeChildrenField.value;
1573
+ const mapChildrenField = computeMapChildrenField.value;
1574
+ const funcName = isAppend ? 'push' : 'unshift';
1575
+ newRecords.forEach(item => {
1576
+ const parentRowId = item[parentField];
1577
+ const nodeid = getNodeId(item);
1578
+ const matchObj = parentRowId ? _xeUtils.default.findTree(treeFullData, item => parentRowId === item[keyField], {
1579
+ children: mapChildrenField
1580
+ }) : null;
1581
+ const itemRest = (0, _util.getItemCacheObj)(item);
1582
+ if (matchObj) {
1583
+ const {
1584
+ item: parentItem
1585
+ } = matchObj;
1586
+ const parentRest = nodeMaps[getNodeId(parentItem)];
1587
+ const parentLevel = parentRest ? parentRest.level : 0;
1588
+ let pChilds = parentItem[childrenField];
1589
+ let pMapChilds = parentItem[mapChildrenField];
1590
+ if (!_xeUtils.default.isArray(pChilds)) {
1591
+ pChilds = parentItem[childrenField] = [];
1592
+ }
1593
+ if (!_xeUtils.default.isArray(pMapChilds)) {
1594
+ pMapChilds = parentItem[mapChildrenField] = [];
1595
+ }
1596
+ itemRest.parent = parentItem;
1597
+ itemRest.items = pChilds;
1598
+ itemRest.level = parentLevel;
1599
+ pChilds[funcName](item);
1600
+ pMapChilds[funcName](item);
1601
+ } else {
1602
+ if (parentRowId) {
1603
+ warnLog('vxe.error.unableInsert');
1604
+ }
1605
+ treeFullData[funcName](item);
1606
+ }
1607
+ nodeMaps[nodeid] = itemRest;
1608
+ });
1609
+ };
1610
+ const handleInsertNodeAt = (records, targetNodeOrNodeid, isInsertNextNode) => {
1611
+ const {
1612
+ transform
1613
+ } = props;
1614
+ const {
1615
+ treeFullData,
1616
+ nodeMaps
1617
+ } = internalData;
1618
+ const keyField = computeKeyField.value;
1619
+ const parentField = computeParentField.value;
1620
+ const childrenField = computeChildrenField.value;
1621
+ const mapChildrenField = computeMapChildrenField.value;
1622
+ if (!transform) {
1623
+ errLog('vxe.error.reqSupportProp', ['insert() | insertAt() | insertNextAt()', 'transform']);
1624
+ return Promise.resolve({
1625
+ node: null,
1626
+ nodes: []
1627
+ });
1628
+ }
1629
+ if (!_xeUtils.default.isArray(records)) {
1630
+ records = [records];
1631
+ }
1632
+ let targetNode = targetNodeOrNodeid;
1633
+ if (_xeUtils.default.isString(targetNodeOrNodeid) || _xeUtils.default.isNumber(targetNodeOrNodeid)) {
1634
+ const nodeRest = nodeMaps[targetNodeOrNodeid];
1635
+ if (nodeRest) {
1636
+ targetNode = nodeRest.item;
1637
+ }
1638
+ }
1639
+ if (!records.length) {
1640
+ return Promise.resolve({
1641
+ node: null,
1642
+ nodes: []
1643
+ });
1644
+ }
1645
+ const newRecords = records.map(record => _xeUtils.default.assign({
1646
+ [mapChildrenField]: [],
1647
+ [childrenField]: []
1648
+ }, record));
1649
+ const treeRecords = _xeUtils.default.toArrayTree(newRecords, {
1650
+ key: keyField,
1651
+ parentKey: parentField,
1652
+ children: childrenField
1653
+ });
1654
+ if (_xeUtils.default.eqNull(targetNode)) {
1655
+ insertTreeNode(newRecords, false);
1656
+ } else {
1657
+ if (targetNode === -1) {
1658
+ insertTreeNode(newRecords, true);
1659
+ } else {
1660
+ const matchMapObj = _xeUtils.default.findTree(treeFullData, item => targetNode[keyField] === item[keyField], {
1661
+ children: mapChildrenField
1662
+ });
1663
+ if (matchMapObj) {
1664
+ const {
1665
+ parent: parentNode
1666
+ } = matchMapObj;
1667
+ const parentMapChilds = parentNode ? parentNode[mapChildrenField] : treeFullData;
1668
+ const parentRest = nodeMaps[getNodeId(parentNode)];
1669
+ const parentLevel = parentRest ? parentRest.level : 0;
1670
+ treeRecords.forEach((row, i) => {
1671
+ if (parentNode) {
1672
+ if (row[parentField] !== parentNode[keyField]) {
1673
+ errLog('vxe.error.errProp', [`${parentField}=${row[parentField]}`, `${parentField}=${parentNode[keyField]}`]);
1674
+ row[parentField] = parentNode[keyField];
1675
+ }
1676
+ } else {
1677
+ if (row[parentField] !== null) {
1678
+ if (!_xeUtils.default.eqNull(row[parentField])) {
1679
+ errLog('vxe.error.errProp', [`${parentField}=${row[parentField]}`, 'null']);
1680
+ }
1681
+ row[parentField] = null;
1682
+ }
1683
+ }
1684
+ let targetIndex = matchMapObj.index + i;
1685
+ if (isInsertNextNode) {
1686
+ targetIndex = targetIndex + 1;
1687
+ }
1688
+ parentMapChilds.splice(targetIndex, 0, row);
1689
+ });
1690
+ _xeUtils.default.eachTree(treeRecords, item => {
1691
+ const nodeid = getNodeId(item);
1692
+ const nodeRest = (0, _util.getItemCacheObj)(item);
1693
+ nodeRest.level = parentLevel;
1694
+ if (item[childrenField]) {
1695
+ item[mapChildrenField] = item[childrenField];
1696
+ }
1697
+ nodeMaps[nodeid] = nodeRest;
1698
+ }, {
1699
+ children: childrenField
1700
+ });
1701
+ // 源
1702
+ if (parentNode) {
1703
+ const matchObj = _xeUtils.default.findTree(treeFullData, item => targetNode[keyField] === item[keyField], {
1704
+ children: childrenField
1705
+ });
1706
+ if (matchObj) {
1707
+ const parentChilds = matchObj.items;
1708
+ let targetIndex = matchObj.index;
1709
+ if (isInsertNextNode) {
1710
+ targetIndex = targetIndex + 1;
1711
+ }
1712
+ parentChilds.splice(targetIndex, 0, ...treeRecords);
1713
+ }
1714
+ }
1715
+ } else {
1716
+ warnLog('vxe.error.unableInsert');
1717
+ insertTreeNode(newRecords, true);
1718
+ }
1719
+ }
1720
+ }
1721
+ reactData.insertRowFlag++;
1722
+ cacheNodeMap();
1723
+ handleData(true);
1724
+ updateAfterDataIndex();
1725
+ updateCheckboxStatus();
1726
+ if (reactData.scrollYLoad) {
1727
+ updateYSpace();
1728
+ }
1729
+ return (0, _vue.nextTick)().then(() => {
1730
+ return {
1731
+ node: newRecords.length ? newRecords[newRecords.length - 1] : null,
1732
+ nodes: newRecords
1733
+ };
1734
+ });
1735
+ };
1563
1736
  const treeMethods = {
1564
1737
  dispatchEvent,
1565
1738
  getNodeId,
@@ -2041,7 +2214,110 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2041
2214
  }
2042
2215
  return recalculate();
2043
2216
  },
2044
- clearScroll
2217
+ clearScroll,
2218
+ insert(records) {
2219
+ return handleInsertNodeAt(records, null);
2220
+ },
2221
+ insertAt(records, targetNodeOrNodeid) {
2222
+ return handleInsertNodeAt(records, targetNodeOrNodeid);
2223
+ },
2224
+ insertNextAt(records, targetNodeOrNodeid) {
2225
+ return handleInsertNodeAt(records, targetNodeOrNodeid, true);
2226
+ },
2227
+ remove(nodes) {
2228
+ const {
2229
+ transform
2230
+ } = props;
2231
+ const {
2232
+ treeFullData
2233
+ } = internalData;
2234
+ const childrenField = computeChildrenField.value;
2235
+ const mapChildrenField = computeMapChildrenField.value;
2236
+ if (!transform) {
2237
+ errLog('vxe.error.reqSupportProp', ['remove()', 'transform']);
2238
+ return Promise.resolve({
2239
+ node: null,
2240
+ nodes: []
2241
+ });
2242
+ }
2243
+ let delList = [];
2244
+ if (!nodes) {
2245
+ nodes = treeFullData;
2246
+ } else if (!_xeUtils.default.isArray(nodes)) {
2247
+ nodes = [nodes];
2248
+ }
2249
+ if (!nodes.length) {
2250
+ return Promise.resolve({
2251
+ node: null,
2252
+ nodes: []
2253
+ });
2254
+ }
2255
+ // 从数据源中移除
2256
+ if (treeFullData === nodes) {
2257
+ nodes = delList = treeFullData.slice(0);
2258
+ internalData.treeFullData = [];
2259
+ } else {
2260
+ nodes.forEach(item => {
2261
+ const nodeid = getNodeId(item);
2262
+ const matchMapObj = _xeUtils.default.findTree(treeFullData, item => nodeid === getNodeId(item), {
2263
+ children: mapChildrenField
2264
+ });
2265
+ if (matchMapObj) {
2266
+ const rItems = matchMapObj.items.splice(matchMapObj.index, 1);
2267
+ delList.push(rItems[0]);
2268
+ }
2269
+ const matchObj = _xeUtils.default.findTree(treeFullData, item => nodeid === getNodeId(item), {
2270
+ children: childrenField
2271
+ });
2272
+ if (matchObj) {
2273
+ const rItems = matchObj.items.splice(matchObj.index, 1);
2274
+ delList.push(rItems[0]);
2275
+ }
2276
+ });
2277
+ }
2278
+ reactData.removeRowFlag++;
2279
+ reactData.insertRowFlag++;
2280
+ cacheNodeMap();
2281
+ handleData(true);
2282
+ updateAfterDataIndex();
2283
+ updateCheckboxStatus();
2284
+ if (reactData.scrollYLoad) {
2285
+ updateYSpace();
2286
+ }
2287
+ return (0, _vue.nextTick)().then(() => {
2288
+ return recalculate();
2289
+ }).then(() => {
2290
+ return {
2291
+ node: delList.length ? delList[delList.length - 1] : null,
2292
+ nodes: delList
2293
+ };
2294
+ });
2295
+ },
2296
+ getInsertRecords() {
2297
+ const {
2298
+ insertRowMaps
2299
+ } = internalData;
2300
+ const insertRecords = [];
2301
+ _xeUtils.default.each(insertRowMaps, row => {
2302
+ insertRecords.push(row);
2303
+ });
2304
+ return insertRecords;
2305
+ },
2306
+ getRemoveRecords() {
2307
+ const {
2308
+ removeRowMaps
2309
+ } = internalData;
2310
+ const removeRecords = [];
2311
+ _xeUtils.default.each(removeRowMaps, row => {
2312
+ removeRecords.push(row);
2313
+ });
2314
+ return removeRecords;
2315
+ }
2316
+ };
2317
+ const handleNodeDragEndClearStatus = () => {
2318
+ clearNodeDragData();
2319
+ clearCrossTreeDragStatus();
2320
+ recalculate();
2045
2321
  };
2046
2322
  const clearNodeDropOrigin = () => {
2047
2323
  const el = refElem.value;
@@ -2095,7 +2371,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2095
2371
  }
2096
2372
  };
2097
2373
  const clearCrossTreeDragStatus = () => {
2098
- // crossTreeDragNodeObj = null
2374
+ crossTreeDragNodeObj = null;
2099
2375
  crossTreeDragNodeInfo.node = null;
2100
2376
  };
2101
2377
  const clearDragStatus = () => {
@@ -2492,6 +2768,23 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2492
2768
  prevDragToChild
2493
2769
  } = internalData;
2494
2770
  const hasChildField = computeHasChildField.value;
2771
+ const dragConfig = computeDragOpts.value;
2772
+ const {
2773
+ isCrossDrag,
2774
+ isCrossTreeDrag
2775
+ } = dragConfig;
2776
+ // 跨树拖拽
2777
+ if (isCrossTreeDrag && crossTreeDragNodeObj) {
2778
+ const {
2779
+ $newTree
2780
+ } = crossTreeDragNodeObj;
2781
+ if ($newTree && $newTree.xID !== $xeTree.xID) {
2782
+ if (isCrossDrag) {
2783
+ $newTree.handleCrossTreeNodeDragInsertEvent(evnt);
2784
+ }
2785
+ return;
2786
+ }
2787
+ }
2495
2788
  if (lazy && prevDragToChild) {
2496
2789
  // 懒加载
2497
2790
  const newNodeid = getNodeId(prevDragNode);
@@ -2578,15 +2871,228 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2578
2871
  /**
2579
2872
  * 处理跨树拖拽完成
2580
2873
  */
2581
- handleCrossTreeNodeDragFinishEvent() {},
2874
+ handleCrossTreeNodeDragFinishEvent(evnt) {
2875
+ const {
2876
+ treeList
2877
+ } = reactData;
2878
+ const {
2879
+ nodeMaps
2880
+ } = internalData;
2881
+ const dragOpts = computeDragOpts.value;
2882
+ const {
2883
+ animation,
2884
+ isCrossTreeDrag
2885
+ } = dragOpts;
2886
+ const mapChildrenField = computeMapChildrenField.value;
2887
+ const el = refElem.value;
2888
+ if (!el) {
2889
+ return;
2890
+ }
2891
+ if (isCrossTreeDrag && crossTreeDragNodeObj && crossTreeDragNodeInfo) {
2892
+ const {
2893
+ node: dragNode
2894
+ } = crossTreeDragNodeInfo;
2895
+ if (dragNode) {
2896
+ const dragNodeid = getNodeId(dragNode);
2897
+ const dragNodeRest = nodeMaps[dragNodeid];
2898
+ let dragNodeHeight = 0;
2899
+ let rsIndex = -1;
2900
+ if (dragNodeRest) {
2901
+ if (animation) {
2902
+ const oldItemEl = el.querySelector(`.vxe-tree--node-wrapper[nodeid="${dragNodeid}"]`);
2903
+ const targetItemEl = oldItemEl;
2904
+ if (targetItemEl) {
2905
+ dragNodeHeight = targetItemEl.offsetHeight;
2906
+ }
2907
+ }
2908
+ rsIndex = dragNodeRest.$index;
2909
+ }
2910
+ const dragRangeList = rsIndex > -1 && rsIndex < treeList.length - 1 ? treeList.slice(rsIndex + 1) : [];
2911
+ const dragList = _xeUtils.default.toTreeArray([dragNode], {
2912
+ updated: true,
2913
+ children: mapChildrenField
2914
+ });
2915
+ $xeTree.remove(dragList).then(() => {
2916
+ if (animation && dragNodeHeight && dragRangeList.length) {
2917
+ const wrapperEl = el;
2918
+ const dtClss = [];
2919
+ dragRangeList.forEach(item => {
2920
+ const nodeid = getNodeId(item);
2921
+ dtClss.push(`.vxe-tree--node-wrapper[nodeid="${nodeid}"]`);
2922
+ });
2923
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
2924
+ (0, _anime.moveRowAnimateToTb)(dtTrList, dragNodeHeight);
2925
+ }
2926
+ });
2927
+ dispatchEvent('node-remove-dragend', {
2928
+ node: dragNode
2929
+ }, evnt);
2930
+ handleNodeDragEndClearStatus();
2931
+ }
2932
+ }
2933
+ },
2582
2934
  /**
2583
2935
  * 处理跨树拖至新的空树
2584
2936
  */
2585
- handleCrossTreeNodeDragInsertEvent() {},
2937
+ handleCrossTreeNodeDragoverEmptyEvent(evnt) {
2938
+ const {
2939
+ treeList
2940
+ } = reactData;
2941
+ const dragOpts = computeDragOpts.value;
2942
+ const {
2943
+ isCrossTreeDrag
2944
+ } = dragOpts;
2945
+ if (isCrossTreeDrag && crossTreeDragNodeObj && !treeList.length) {
2946
+ const {
2947
+ $oldTree,
2948
+ $newTree
2949
+ } = crossTreeDragNodeObj;
2950
+ if ($oldTree) {
2951
+ const oldTreeReactData = $oldTree;
2952
+ if ($oldTree.xID !== $xeTree.xID) {
2953
+ if ($newTree && $newTree.xID !== $xeTree.xID) {
2954
+ $newTree.hideCrossTreeNodeDropClearStatus();
2955
+ }
2956
+ evnt.preventDefault();
2957
+ $oldTree.hideCrossTreeNodeDropClearStatus();
2958
+ crossTreeDragNodeObj.$newTree = $xeTree;
2959
+ internalData.prevDragNode = null;
2960
+ reactData.dragTipText = oldTreeReactData.dragTipText;
2961
+ showDropTip(evnt, evnt.currentTarget, true, '');
2962
+ }
2963
+ }
2964
+ }
2965
+ },
2586
2966
  /**
2587
2967
  * 处理跨树拖插入
2588
2968
  */
2589
- handleCrossTreeNodeDragoverEmptyEvent() {},
2969
+ handleCrossTreeNodeDragInsertEvent(evnt) {
2970
+ const {
2971
+ prevDragNode,
2972
+ prevDragPos,
2973
+ prevDragToChild
2974
+ } = internalData;
2975
+ const dragOpts = computeDragOpts.value;
2976
+ const {
2977
+ animation,
2978
+ isSelfToChildDrag,
2979
+ isCrossTreeDrag,
2980
+ dragEndMethod,
2981
+ dragToChildMethod
2982
+ } = dragOpts;
2983
+ const parentField = computeParentField.value;
2984
+ const mapChildrenField = computeMapChildrenField.value;
2985
+ const childrenField = computeChildrenField.value;
2986
+ // 跨表拖拽
2987
+ if (isCrossTreeDrag && crossTreeDragNodeObj && crossTreeDragNodeInfo) {
2988
+ const {
2989
+ node: oldNode
2990
+ } = crossTreeDragNodeInfo;
2991
+ const {
2992
+ $oldTree
2993
+ } = crossTreeDragNodeObj;
2994
+ const el = refElem.value;
2995
+ if (!el) {
2996
+ return;
2997
+ }
2998
+ if ($oldTree && oldNode) {
2999
+ const dragNode = oldNode;
3000
+ let dragOffsetIndex = -1;
3001
+ if (prevDragNode) {
3002
+ dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
3003
+ }
3004
+ const dragParams = {
3005
+ oldNode: dragNode,
3006
+ newNode: prevDragNode,
3007
+ dragNode,
3008
+ dragPos: prevDragPos,
3009
+ dragToChild: !!prevDragToChild,
3010
+ offsetIndex: dragOffsetIndex
3011
+ };
3012
+ const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
3013
+ const errRest = {
3014
+ status: false
3015
+ };
3016
+ Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then(status => {
3017
+ if (!status) {
3018
+ if ($oldTree) {
3019
+ if ($oldTree.xID !== $xeTree.xID) {
3020
+ $oldTree.handleCrossTreeNodeDragCancelEvent(evnt);
3021
+ }
3022
+ }
3023
+ handleNodeDragEndClearStatus();
3024
+ return errRest;
3025
+ }
3026
+ let insertRest = Promise.resolve();
3027
+ const dragList = _xeUtils.default.toTreeArray([dragNode], {
3028
+ updated: true,
3029
+ children: mapChildrenField
3030
+ });
3031
+ $oldTree.handleCrossTreeNodeDragFinishEvent(evnt);
3032
+ if (prevDragNode) {
3033
+ dragNode[parentField] = prevDragNode[parentField];
3034
+ } else {
3035
+ dragNode[parentField] = null;
3036
+ }
3037
+ dragList.forEach(row => {
3038
+ row[childrenField] = undefined;
3039
+ row[mapChildrenField] = undefined;
3040
+ });
3041
+ if (prevDragNode) {
3042
+ if (prevDragPos === 'bottom') {
3043
+ insertRest = $xeTree.insertNextAt(dragList, prevDragNode);
3044
+ } else {
3045
+ insertRest = $xeTree.insertAt(dragList, prevDragNode);
3046
+ }
3047
+ } else {
3048
+ insertRest = $xeTree.insert(dragList);
3049
+ }
3050
+ $xeTree.dispatchEvent('node-insert-dragend', {
3051
+ oldNode,
3052
+ newNode: prevDragNode,
3053
+ dragNode,
3054
+ dragPos: prevDragPos,
3055
+ dragToChild: isDragToChildFlag,
3056
+ offsetIndex: dragOffsetIndex
3057
+ }, evnt);
3058
+ clearNodeDragData();
3059
+ insertRest.then(() => {
3060
+ const {
3061
+ treeList
3062
+ } = reactData;
3063
+ const {
3064
+ nodeMaps
3065
+ } = internalData;
3066
+ const oldNodeid = getNodeId(dragNode);
3067
+ const oldNodeRest = nodeMaps[oldNodeid];
3068
+ let dragNodeHeight = 0;
3069
+ let rsIndex = -1;
3070
+ if (oldNodeRest) {
3071
+ if (animation) {
3072
+ const oldItemEl = el.querySelector(`.vxe-tree--node-wrapper[nodeid="${oldNodeid}"]`);
3073
+ const targetItemEl = oldItemEl;
3074
+ if (targetItemEl) {
3075
+ dragNodeHeight = targetItemEl.offsetHeight;
3076
+ }
3077
+ }
3078
+ rsIndex = oldNodeRest.$index;
3079
+ }
3080
+ const dragRangeList = rsIndex > -1 ? treeList.slice(rsIndex) : [];
3081
+ if (animation && dragNodeHeight && dragRangeList.length) {
3082
+ const wrapperEl = el;
3083
+ const dtClss = [];
3084
+ dragRangeList.forEach(item => {
3085
+ const nodeid = getNodeId(item);
3086
+ dtClss.push(`.vxe-tree--node-wrapper[nodeid="${nodeid}"]`);
3087
+ });
3088
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
3089
+ (0, _anime.moveRowAnimateToTb)(dtTrList, -dragNodeHeight);
3090
+ }
3091
+ });
3092
+ });
3093
+ }
3094
+ }
3095
+ },
2590
3096
  hideCrossTreeNodeDropClearStatus() {
2591
3097
  hideDropTip();
2592
3098
  }
@@ -2924,10 +3430,15 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2924
3430
  const loadingOpts = computeLoadingOpts.value;
2925
3431
  const isRowHover = computeIsRowHover.value;
2926
3432
  const treeStyle = computeTreeStyle.value;
3433
+ const dragOpts = computeDragOpts.value;
2927
3434
  const loadingSlot = slots.loading;
2928
3435
  const headerSlot = slots.header;
2929
3436
  const footerSlot = slots.footer;
2930
- return (0, _vue.h)('div', {
3437
+ const teOns = {};
3438
+ if (dragOpts.isCrossTreeDrag && !treeList.length) {
3439
+ teOns.onDragover = $xeTree.handleCrossTreeNodeDragInsertEvent;
3440
+ }
3441
+ return (0, _vue.h)('div', Object.assign({
2931
3442
  ref: refElem,
2932
3443
  class: ['vxe-tree', {
2933
3444
  [`size--${vSize}`]: vSize,
@@ -2938,7 +3449,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
2938
3449
  'node--trigger': trigger === 'node',
2939
3450
  'is--loading': loading
2940
3451
  }]
2941
- }, [headerSlot ? (0, _vue.h)('div', {
3452
+ }, teOns), [headerSlot ? (0, _vue.h)('div', {
2942
3453
  ref: refHeaderWrapperElem,
2943
3454
  class: 'vxe-tree--header-wrapper'
2944
3455
  }, headerSlot({
@@ -3041,8 +3552,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
3041
3552
  if (drag && !transform) {
3042
3553
  errLog('vxe.error.notSupportProp', ['drag', 'transform=false', 'transform=true']);
3043
3554
  }
3044
- if (dragOpts.isCrossTreeDrag) {
3045
- errLog('vxe.error.notProp', ['drag-config.isCrossTreeDrag']);
3555
+ if (dragOpts.isCrossTreeDrag && !dragOpts.isCrossDrag) {
3556
+ errLog('vxe.error.reqSupportProp', ['drag-config.isCrossTreeDrag', 'drag-config.isCrossDrag']);
3046
3557
  }
3047
3558
  // if (valueField) {
3048
3559
  // errLog('vxe.error.delProp', ['value-field', 'value-field'])