vxe-pc-ui 3.15.13 → 3.15.14

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 (215) hide show
  1. package/es/button/style.css +11 -0
  2. package/es/button/style.min.css +1 -1
  3. package/es/checkbox/src/button.js +3 -1
  4. package/es/checkbox/src/group.js +6 -1
  5. package/es/checkbox-button/style.css +155 -9
  6. package/es/checkbox-button/style.min.css +1 -1
  7. package/es/icon/style.css +1 -1
  8. package/es/icon-picker/src/icon-picker.js +165 -47
  9. package/es/icon-picker/style.css +29 -5
  10. package/es/icon-picker/style.min.css +1 -1
  11. package/es/language/ar-EG.js +3 -0
  12. package/es/language/de-DE.js +3 -0
  13. package/es/language/en-US.js +3 -0
  14. package/es/language/es-ES.js +3 -0
  15. package/es/language/fr-FR.js +3 -0
  16. package/es/language/hu-HU.js +3 -0
  17. package/es/language/hy-AM.js +3 -0
  18. package/es/language/id-ID.js +3 -0
  19. package/es/language/it-IT.js +3 -0
  20. package/es/language/ja-JP.js +3 -0
  21. package/es/language/ko-KR.js +3 -0
  22. package/es/language/ms-MY.js +3 -0
  23. package/es/language/nb-NO.js +3 -0
  24. package/es/language/pt-BR.js +3 -0
  25. package/es/language/ru-RU.js +3 -0
  26. package/es/language/th-TH.js +3 -0
  27. package/es/language/ug-CN.js +3 -0
  28. package/es/language/uk-UA.js +3 -0
  29. package/es/language/uz-UZ.js +3 -0
  30. package/es/language/vi-VN.js +3 -0
  31. package/es/language/zh-CHT.js +3 -0
  32. package/es/language/zh-CN.js +3 -0
  33. package/es/list/src/list.js +15 -1
  34. package/es/radio/src/button.js +3 -1
  35. package/es/radio/src/group.js +6 -1
  36. package/es/radio-button/style.css +155 -9
  37. package/es/radio-button/style.min.css +1 -1
  38. package/es/style.css +1 -1
  39. package/es/style.min.css +1 -1
  40. package/es/tree/src/tree.js +246 -4
  41. package/es/tree/src/util.js +15 -0
  42. package/es/ui/index.js +5 -2
  43. package/es/ui/src/log.js +1 -1
  44. package/es/vxe-button/style.css +11 -0
  45. package/es/vxe-button/style.min.css +1 -1
  46. package/es/vxe-checkbox-button/style.css +155 -9
  47. package/es/vxe-checkbox-button/style.min.css +1 -1
  48. package/es/vxe-icon-picker/style.css +29 -5
  49. package/es/vxe-icon-picker/style.min.css +1 -1
  50. package/es/vxe-radio-button/style.css +155 -9
  51. package/es/vxe-radio-button/style.min.css +1 -1
  52. package/lib/button/style/style.css +11 -0
  53. package/lib/button/style/style.min.css +1 -1
  54. package/lib/checkbox/src/button.js +3 -1
  55. package/lib/checkbox/src/button.min.js +1 -1
  56. package/lib/checkbox/src/group.js +13 -5
  57. package/lib/checkbox/src/group.min.js +1 -1
  58. package/lib/checkbox-button/style/style.css +155 -9
  59. package/lib/checkbox-button/style/style.min.css +1 -1
  60. package/lib/icon/style/style.css +1 -1
  61. package/lib/icon/style/style.min.css +1 -1
  62. package/lib/icon-picker/src/icon-picker.js +154 -28
  63. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  64. package/lib/icon-picker/style/style.css +29 -5
  65. package/lib/icon-picker/style/style.min.css +1 -1
  66. package/lib/index.umd.js +506 -43
  67. package/lib/index.umd.min.js +1 -1
  68. package/lib/language/ar-EG.js +3 -0
  69. package/lib/language/ar-EG.min.js +1 -1
  70. package/lib/language/ar-EG.umd.js +3 -0
  71. package/lib/language/de-DE.js +3 -0
  72. package/lib/language/de-DE.min.js +1 -1
  73. package/lib/language/de-DE.umd.js +3 -0
  74. package/lib/language/en-US.js +3 -0
  75. package/lib/language/en-US.min.js +1 -1
  76. package/lib/language/en-US.umd.js +3 -0
  77. package/lib/language/es-ES.js +3 -0
  78. package/lib/language/es-ES.min.js +1 -1
  79. package/lib/language/es-ES.umd.js +3 -0
  80. package/lib/language/fr-FR.js +3 -0
  81. package/lib/language/fr-FR.min.js +1 -1
  82. package/lib/language/fr-FR.umd.js +3 -0
  83. package/lib/language/hu-HU.js +3 -0
  84. package/lib/language/hu-HU.min.js +1 -1
  85. package/lib/language/hu-HU.umd.js +3 -0
  86. package/lib/language/hy-AM.js +3 -0
  87. package/lib/language/hy-AM.min.js +1 -1
  88. package/lib/language/hy-AM.umd.js +3 -0
  89. package/lib/language/id-ID.js +3 -0
  90. package/lib/language/id-ID.min.js +1 -1
  91. package/lib/language/id-ID.umd.js +3 -0
  92. package/lib/language/it-IT.js +3 -0
  93. package/lib/language/it-IT.min.js +1 -1
  94. package/lib/language/it-IT.umd.js +3 -0
  95. package/lib/language/ja-JP.js +3 -0
  96. package/lib/language/ja-JP.min.js +1 -1
  97. package/lib/language/ja-JP.umd.js +3 -0
  98. package/lib/language/ko-KR.js +3 -0
  99. package/lib/language/ko-KR.min.js +1 -1
  100. package/lib/language/ko-KR.umd.js +3 -0
  101. package/lib/language/ms-MY.js +3 -0
  102. package/lib/language/ms-MY.min.js +1 -1
  103. package/lib/language/ms-MY.umd.js +3 -0
  104. package/lib/language/nb-NO.js +3 -0
  105. package/lib/language/nb-NO.min.js +1 -1
  106. package/lib/language/nb-NO.umd.js +3 -0
  107. package/lib/language/pt-BR.js +3 -0
  108. package/lib/language/pt-BR.min.js +1 -1
  109. package/lib/language/pt-BR.umd.js +3 -0
  110. package/lib/language/ru-RU.js +3 -0
  111. package/lib/language/ru-RU.min.js +1 -1
  112. package/lib/language/ru-RU.umd.js +3 -0
  113. package/lib/language/th-TH.js +3 -0
  114. package/lib/language/th-TH.min.js +1 -1
  115. package/lib/language/th-TH.umd.js +3 -0
  116. package/lib/language/ug-CN.js +3 -0
  117. package/lib/language/ug-CN.min.js +1 -1
  118. package/lib/language/ug-CN.umd.js +3 -0
  119. package/lib/language/uk-UA.js +3 -0
  120. package/lib/language/uk-UA.min.js +1 -1
  121. package/lib/language/uk-UA.umd.js +3 -0
  122. package/lib/language/uz-UZ.js +3 -0
  123. package/lib/language/uz-UZ.min.js +1 -1
  124. package/lib/language/uz-UZ.umd.js +3 -0
  125. package/lib/language/vi-VN.js +3 -0
  126. package/lib/language/vi-VN.min.js +1 -1
  127. package/lib/language/vi-VN.umd.js +3 -0
  128. package/lib/language/zh-CHT.js +3 -0
  129. package/lib/language/zh-CHT.min.js +1 -1
  130. package/lib/language/zh-CHT.umd.js +3 -0
  131. package/lib/language/zh-CN.js +3 -0
  132. package/lib/language/zh-CN.min.js +1 -1
  133. package/lib/language/zh-CN.umd.js +3 -0
  134. package/lib/list/src/list.js +18 -1
  135. package/lib/list/src/list.min.js +1 -1
  136. package/lib/radio/src/button.js +3 -1
  137. package/lib/radio/src/button.min.js +1 -1
  138. package/lib/radio/src/group.js +9 -2
  139. package/lib/radio/src/group.min.js +1 -1
  140. package/lib/radio-button/style/style.css +155 -9
  141. package/lib/radio-button/style/style.min.css +1 -1
  142. package/lib/style.css +1 -1
  143. package/lib/style.min.css +1 -1
  144. package/lib/tree/src/tree.js +287 -6
  145. package/lib/tree/src/tree.min.js +1 -1
  146. package/lib/tree/src/util.js +16 -0
  147. package/lib/tree/src/util.min.js +1 -1
  148. package/lib/ui/index.js +5 -2
  149. package/lib/ui/index.min.js +1 -1
  150. package/lib/ui/src/log.js +1 -1
  151. package/lib/ui/src/log.min.js +1 -1
  152. package/lib/vxe-button/style/style.css +11 -0
  153. package/lib/vxe-button/style/style.min.css +1 -1
  154. package/lib/vxe-checkbox-button/style/style.css +155 -9
  155. package/lib/vxe-checkbox-button/style/style.min.css +1 -1
  156. package/lib/vxe-icon-picker/style/style.css +29 -5
  157. package/lib/vxe-icon-picker/style/style.min.css +1 -1
  158. package/lib/vxe-radio-button/style/style.css +155 -9
  159. package/lib/vxe-radio-button/style/style.min.css +1 -1
  160. package/package.json +1 -1
  161. package/packages/checkbox/src/button.ts +3 -1
  162. package/packages/checkbox/src/group.ts +6 -1
  163. package/packages/icon-picker/src/icon-picker.ts +180 -45
  164. package/packages/language/ar-EG.ts +3 -0
  165. package/packages/language/de-DE.ts +3 -0
  166. package/packages/language/en-US.ts +3 -0
  167. package/packages/language/es-ES.ts +3 -0
  168. package/packages/language/fr-FR.ts +3 -0
  169. package/packages/language/hu-HU.ts +3 -0
  170. package/packages/language/hy-AM.ts +3 -0
  171. package/packages/language/id-ID.ts +3 -0
  172. package/packages/language/it-IT.ts +3 -0
  173. package/packages/language/ja-JP.ts +3 -0
  174. package/packages/language/ko-KR.ts +3 -0
  175. package/packages/language/ms-MY.ts +3 -0
  176. package/packages/language/nb-NO.ts +3 -0
  177. package/packages/language/pt-BR.ts +3 -0
  178. package/packages/language/ru-RU.ts +3 -0
  179. package/packages/language/th-TH.ts +3 -0
  180. package/packages/language/ug-CN.ts +3 -0
  181. package/packages/language/uk-UA.ts +3 -0
  182. package/packages/language/uz-UZ.ts +3 -0
  183. package/packages/language/vi-VN.ts +3 -0
  184. package/packages/language/zh-CHT.ts +3 -0
  185. package/packages/language/zh-CN.ts +3 -0
  186. package/packages/list/src/list.ts +15 -1
  187. package/packages/radio/src/button.ts +3 -1
  188. package/packages/radio/src/group.ts +6 -1
  189. package/packages/tree/src/tree.ts +251 -4
  190. package/packages/tree/src/util.ts +17 -1
  191. package/packages/ui/index.ts +4 -1
  192. package/styles/components/button.scss +24 -69
  193. package/styles/components/checkbox-button.scss +66 -14
  194. package/styles/components/icon-picker.scss +37 -11
  195. package/styles/components/radio-button.scss +66 -14
  196. package/styles/helpers/themeStatus.scss +58 -0
  197. package/types/all.d.ts +205 -0
  198. package/types/components/checkbox-group.d.ts +3 -1
  199. package/types/components/checkbox.d.ts +1 -1
  200. package/types/components/icon-picker.d.ts +27 -4
  201. package/types/components/list.d.ts +2 -2
  202. package/types/components/radio-group.d.ts +3 -1
  203. package/types/components/tree.d.ts +36 -0
  204. /package/es/icon/{iconfont.1782658257467.ttf → iconfont.1782742114089.ttf} +0 -0
  205. /package/es/icon/{iconfont.1782658257467.woff → iconfont.1782742114089.woff} +0 -0
  206. /package/es/icon/{iconfont.1782658257467.woff2 → iconfont.1782742114089.woff2} +0 -0
  207. /package/es/{iconfont.1782658257467.ttf → iconfont.1782742114089.ttf} +0 -0
  208. /package/es/{iconfont.1782658257467.woff → iconfont.1782742114089.woff} +0 -0
  209. /package/es/{iconfont.1782658257467.woff2 → iconfont.1782742114089.woff2} +0 -0
  210. /package/lib/icon/style/{iconfont.1782658257467.ttf → iconfont.1782742114089.ttf} +0 -0
  211. /package/lib/icon/style/{iconfont.1782658257467.woff → iconfont.1782742114089.woff} +0 -0
  212. /package/lib/icon/style/{iconfont.1782658257467.woff2 → iconfont.1782742114089.woff2} +0 -0
  213. /package/lib/{iconfont.1782658257467.ttf → iconfont.1782742114089.ttf} +0 -0
  214. /package/lib/{iconfont.1782658257467.woff → iconfont.1782742114089.woff} +0 -0
  215. /package/lib/{iconfont.1782658257467.woff2 → iconfont.1782742114089.woff2} +0 -0
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Jobbra fagy',
288
288
  cancelFixed: 'Kiolvaszt'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} Évek'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '冻结在右侧',
288
288
  cancelFixed: '取消冻结列'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} 年'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Bekukan benar',
288
288
  cancelFixed: 'Unfreeze'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} tahun'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Freeze Right',
288
288
  cancelFixed: 'Scongelare'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} anni'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '右にフリーズします',
288
288
  cancelFixed: '凍結柱'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0}年'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '오른쪽에서 얼립니다',
288
288
  cancelFixed: '열매 열이 없습니다'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} 년'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Membekukan di sebelah kanan',
288
288
  cancelFixed: 'Lajur yang tidak jelas'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} tahun'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Frys til høyre',
288
288
  cancelFixed: 'Frigjøre'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} år'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Congele à direita',
288
288
  cancelFixed: 'Descongelar'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} anos'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Заморозить справа',
288
288
  cancelFixed: 'Размороженные столбцы'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} Годы'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'แช่แข็งขวา',
288
288
  cancelFixed: 'สูดดม'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} ปี'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'ئوڭ ياندا توڭلىتىش',
288
288
  cancelFixed: 'قۇر توڭلىتىشنى ئەمەلدىن قالدۇرۇش'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} يىل'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Заморожуйте право',
288
288
  cancelFixed: 'Розморожувати'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} років'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: "O'ng tomonda muzlatib qo'ying",
288
288
  cancelFixed: "Urug'lar ustunini"
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} yillar'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: 'Đóng băng bên phải',
288
288
  cancelFixed: 'Mở ra cột'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} năm'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '凍結在右側',
288
288
  cancelFixed: '取消凍結列'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} 年'
292
295
  },
@@ -287,6 +287,9 @@ export default {
287
287
  fixedRight: '冻结在右侧',
288
288
  cancelFixed: '取消冻结列'
289
289
  },
290
+ iconPicker: {
291
+ search: '搜索'
292
+ },
290
293
  datePicker: {
291
294
  yearTitle: '{0} 年'
292
295
  },
@@ -1343,13 +1343,19 @@ export default /* define-vxe-component start */ defineVxeComponent({
1343
1343
  },
1344
1344
  handleRowClickEvent (evnt: MouseEvent, row: any) {
1345
1345
  const $xeList = this
1346
+ const props = $xeList
1346
1347
  const reactData = $xeList.reactData
1347
1348
  const internalData = $xeList.internalData
1348
1349
 
1350
+ const { showRadio, showCheckbox } = props
1349
1351
  const { currentRow } = internalData
1352
+ const radioOpts = $xeList.computeRadioOpts
1353
+ const checkboxOpts = $xeList.computeCheckboxOpts
1350
1354
  const rowOpts = $xeList.computeRowOpts
1351
1355
  const { isCurrent } = rowOpts
1352
1356
  let triggerCurrent = false
1357
+ let triggerRadio = false
1358
+ let triggerCheckbox = false
1353
1359
  if (isCurrent) {
1354
1360
  triggerCurrent = true
1355
1361
  $xeList.changeCurrentEvent(evnt, row)
@@ -1357,7 +1363,15 @@ export default /* define-vxe-component start */ defineVxeComponent({
1357
1363
  internalData.currentRow = null
1358
1364
  reactData.currRowFlag++
1359
1365
  }
1360
- $xeList.dispatchEvent('row-click', { row, triggerCurrent }, evnt)
1366
+ if (showRadio && radioOpts.trigger === 'row') {
1367
+ triggerRadio = true
1368
+ $xeList.changeRadioEvent(evnt, row)
1369
+ }
1370
+ if (showCheckbox && checkboxOpts.trigger === 'row') {
1371
+ triggerCheckbox = true
1372
+ $xeList.changeCheckboxEvent(evnt, row)
1373
+ }
1374
+ $xeList.dispatchEvent('row-click', { row, triggerCurrent, triggerRadio, triggerCheckbox }, evnt)
1361
1375
  },
1362
1376
  handleRowDblclickEvent (evnt: MouseEvent, row: any) {
1363
1377
  const $xeList = this
@@ -231,7 +231,9 @@ export default /* define-vxe-component start */ defineVxeComponent({
231
231
  }
232
232
  }),
233
233
  h('span', {
234
- class: 'vxe-radio--label'
234
+ class: ['vxe-radio--label', {
235
+ 'is--disabled': isDisabled
236
+ }]
235
237
  }, defaultSlot ? defaultSlot({}) : getFuncText(content))
236
238
  ])
237
239
  }
@@ -34,6 +34,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
34
34
  default: null
35
35
  },
36
36
  type: String as PropType<VxeRadioGroupPropTypes.Type>,
37
+ status: {
38
+ type: String as PropType<VxeRadioGroupPropTypes.Status>,
39
+ default: () => getConfig().radioGroup.status
40
+ },
37
41
  options: Array as PropType<VxeRadioGroupPropTypes.Options>,
38
42
  optionProps: Object as PropType<VxeRadioGroupPropTypes.OptionProps>,
39
43
  strict: {
@@ -216,7 +220,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
216
220
  const props = $xeRadioGroup
217
221
  const slots = $xeRadioGroup.$scopedSlots
218
222
 
219
- const { options, type } = props
223
+ const { options, type, status } = props
220
224
  const vSize = $xeRadioGroup.computeSize
221
225
  const defaultSlot = slots.default
222
226
  const valueField = $xeRadioGroup.computeValueField as 'value'
@@ -226,6 +230,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
226
230
 
227
231
  return h('div', {
228
232
  class: ['vxe-radio-group', {
233
+ [`theme--${status}`]: status,
229
234
  [`size--${vSize}`]: vSize
230
235
  }]
231
236
  }, defaultSlot
@@ -2,7 +2,7 @@ import { PropType, CreateElement, VNode } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import XEUtils from 'xe-utils'
4
4
  import { VxeUI, createEvent, globalEvents, globalResize, renderEmptyElement, globalMixins } from '../../ui'
5
- import { calcTreeLine } from './util'
5
+ import { calcTreeLine, getItemCacheObj } from './util'
6
6
  import { createComponentLog } from '../../ui/src/log'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
8
8
  import { crossTreeDragNodeGlobal, getCrossTreeDragNodeInfo } from './store'
@@ -13,7 +13,7 @@ import VxeLoadingComponent from '../../loading'
13
13
 
14
14
  import type { TreeReactData, VxeTreeEmits, VxeTreeConstructor, VxeTreePropTypes, TreeInternalData, VxeTreeDefines, VxeTreePrivateMethods, VxeComponentSizeType, ValueOf } from '../../../types'
15
15
 
16
- const { errLog } = createComponentLog('tree')
16
+ const { warnLog, errLog } = createComponentLog('tree')
17
17
 
18
18
  const { menus, getConfig, getI18n, getIcon } = VxeUI
19
19
 
@@ -498,6 +498,47 @@ function handleVisibleOrCheckMode (mode: '' | 'all' | 'first' | 'last' | null |
498
498
  return true
499
499
  }
500
500
 
501
+ function insertTreeNode ($xeTree: VxeTreeConstructor, newRecords: any[], isAppend: boolean) {
502
+ const internalData = $xeTree.internalData
503
+
504
+ const { treeFullData, nodeMaps } = internalData
505
+ const keyField = $xeTree.computeKeyField
506
+ const parentField = $xeTree.computeParentField
507
+ const childrenField = $xeTree.computeChildrenField
508
+ const mapChildrenField = $xeTree.computeMapChildrenField
509
+ const funcName = isAppend ? 'push' : 'unshift'
510
+ newRecords.forEach((item) => {
511
+ const parentRowId = item[parentField]
512
+ const nodeid = $xeTree.getNodeId(item)
513
+ const matchObj = parentRowId ? XEUtils.findTree(treeFullData, (item) => parentRowId === item[keyField], { children: mapChildrenField }) : null
514
+ const itemRest = getItemCacheObj(item)
515
+ if (matchObj) {
516
+ const { item: parentItem } = matchObj
517
+ const parentRest = nodeMaps[$xeTree.getNodeId(parentItem)]
518
+ const parentLevel = parentRest ? parentRest.level : 0
519
+ let pChilds = parentItem[childrenField]
520
+ let pMapChilds = parentItem[mapChildrenField]
521
+ if (!XEUtils.isArray(pChilds)) {
522
+ pChilds = parentItem[childrenField] = []
523
+ }
524
+ if (!XEUtils.isArray(pMapChilds)) {
525
+ pMapChilds = parentItem[mapChildrenField] = []
526
+ }
527
+ itemRest.parent = parentItem
528
+ itemRest.items = pChilds
529
+ itemRest.level = parentLevel
530
+ pChilds[funcName](item)
531
+ pMapChilds[funcName](item)
532
+ } else {
533
+ if (parentRowId) {
534
+ warnLog('vxe.error.unableInsert')
535
+ }
536
+ treeFullData[funcName](item)
537
+ }
538
+ nodeMaps[nodeid] = itemRest
539
+ })
540
+ }
541
+
501
542
  function createInternalData (): TreeInternalData {
502
543
  return {
503
544
  // initialized: false,
@@ -521,6 +562,9 @@ function createInternalData (): TreeInternalData {
521
562
  rowHeight: 0
522
563
  },
523
564
 
565
+ removeRowMaps: {},
566
+ insertRowMaps: {},
567
+
524
568
  // prevDragNode: null,
525
569
  // prevDragToChild: false,
526
570
  // prevDragPos: ''
@@ -544,6 +588,8 @@ function createReactData ():TreeReactData {
544
588
  treeList: [],
545
589
  updateExpandedFlag: 1,
546
590
  updateCheckboxFlag: 1,
591
+ insertRowFlag: 1,
592
+ removeRowFlag: 1,
547
593
  dragNode: null,
548
594
  dragTipText: ''
549
595
  }
@@ -1579,6 +1625,207 @@ export default /* define-vxe-component start */ defineVxeComponent({
1579
1625
  internalData.lastScrollLeft = 0
1580
1626
  return $xeTree.$nextTick()
1581
1627
  },
1628
+ handleInsertNodeAt (records: any[], targetNodeOrNodeid: any, isInsertNextNode?: any) {
1629
+ const $xeTree = this
1630
+ const props = $xeTree
1631
+ const reactData = $xeTree.reactData
1632
+ const internalData = $xeTree.internalData
1633
+
1634
+ const { transform } = props
1635
+ const { treeFullData, nodeMaps } = internalData
1636
+ const keyField = $xeTree.computeKeyField
1637
+ const parentField = $xeTree.computeParentField
1638
+ const childrenField = $xeTree.computeChildrenField
1639
+ const mapChildrenField = $xeTree.computeMapChildrenField
1640
+ if (!transform) {
1641
+ errLog('vxe.error.reqSupportProp', ['insert() | insertAt() | insertNextAt()', 'transform'])
1642
+ return Promise.resolve({ node: null, nodes: [] })
1643
+ }
1644
+ if (!XEUtils.isArray(records)) {
1645
+ records = [records]
1646
+ }
1647
+ let targetNode = targetNodeOrNodeid
1648
+ if (XEUtils.isString(targetNodeOrNodeid) || XEUtils.isNumber(targetNodeOrNodeid)) {
1649
+ const nodeRest = nodeMaps[targetNodeOrNodeid]
1650
+ if (nodeRest) {
1651
+ targetNode = nodeRest.item
1652
+ }
1653
+ }
1654
+ if (!records.length) {
1655
+ return Promise.resolve({ node: null, nodes: [] })
1656
+ }
1657
+ const newRecords = records.map(record => XEUtils.assign({ [mapChildrenField]: [], [childrenField]: [] }, record))
1658
+ const treeRecords = XEUtils.toArrayTree(newRecords, { key: keyField, parentKey: parentField, children: childrenField })
1659
+
1660
+ if (XEUtils.eqNull(targetNode)) {
1661
+ insertTreeNode($xeTree, newRecords, false)
1662
+ } else {
1663
+ if (targetNode === -1) {
1664
+ insertTreeNode($xeTree, newRecords, true)
1665
+ } else {
1666
+ const matchMapObj = XEUtils.findTree(treeFullData, item => targetNode[keyField] === item[keyField], { children: mapChildrenField })
1667
+ if (matchMapObj) {
1668
+ const { parent: parentNode } = matchMapObj
1669
+ const parentMapChilds = parentNode ? parentNode[mapChildrenField] : treeFullData
1670
+ const parentRest = nodeMaps[$xeTree.getNodeId(parentNode)]
1671
+ const parentLevel = parentRest ? parentRest.level : 0
1672
+ treeRecords.forEach((row, i) => {
1673
+ if (parentNode) {
1674
+ if (row[parentField] !== parentNode[keyField]) {
1675
+ errLog('vxe.error.errProp', [`${parentField}=${row[parentField]}`, `${parentField}=${parentNode[keyField]}`])
1676
+ row[parentField] = parentNode[keyField]
1677
+ }
1678
+ } else {
1679
+ if (row[parentField] !== null) {
1680
+ if (!XEUtils.eqNull(row[parentField])) {
1681
+ errLog('vxe.error.errProp', [`${parentField}=${row[parentField]}`, 'null'])
1682
+ }
1683
+ row[parentField] = null
1684
+ }
1685
+ }
1686
+ let targetIndex = matchMapObj.index + i
1687
+ if (isInsertNextNode) {
1688
+ targetIndex = targetIndex + 1
1689
+ }
1690
+ parentMapChilds.splice(targetIndex, 0, row)
1691
+ })
1692
+ XEUtils.eachTree(treeRecords, (item) => {
1693
+ const nodeid = $xeTree.getNodeId(item)
1694
+ const nodeRest = getItemCacheObj(item)
1695
+ nodeRest.level = parentLevel
1696
+ if (item[childrenField]) {
1697
+ item[mapChildrenField] = item[childrenField]
1698
+ }
1699
+ nodeMaps[nodeid] = nodeRest
1700
+ }, { children: childrenField })
1701
+ // 源
1702
+ if (parentNode) {
1703
+ const matchObj = XEUtils.findTree(treeFullData, item => targetNode[keyField] === item[keyField], { children: childrenField })
1704
+ if (matchObj) {
1705
+ const parentChilds = matchObj.items
1706
+ let targetIndex = matchObj.index
1707
+ if (isInsertNextNode) {
1708
+ targetIndex = targetIndex + 1
1709
+ }
1710
+ parentChilds.splice(targetIndex, 0, ...treeRecords)
1711
+ }
1712
+ }
1713
+ } else {
1714
+ warnLog('vxe.error.unableInsert')
1715
+ insertTreeNode($xeTree, newRecords, true)
1716
+ }
1717
+ }
1718
+ }
1719
+ reactData.insertRowFlag++
1720
+ $xeTree.cacheNodeMap()
1721
+ $xeTree.handleData(true)
1722
+ $xeTree.updateAfterDataIndex()
1723
+ $xeTree.updateCheckboxStatus()
1724
+ if (reactData.scrollYLoad) {
1725
+ $xeTree.updateYSpace()
1726
+ }
1727
+ return $xeTree.$nextTick().then(() => {
1728
+ return {
1729
+ node: newRecords.length ? newRecords[newRecords.length - 1] : null,
1730
+ nodes: newRecords
1731
+ }
1732
+ })
1733
+ },
1734
+ insert (records: any) {
1735
+ const $xeTree = this
1736
+
1737
+ return $xeTree.handleInsertNodeAt(records, null)
1738
+ },
1739
+ insertAt (records: any, targetNodeOrNodeid?: any) {
1740
+ const $xeTree = this
1741
+
1742
+ return $xeTree.handleInsertNodeAt(records, targetNodeOrNodeid)
1743
+ },
1744
+ insertNextAt (records: any, targetNodeOrNodeid?: any) {
1745
+ const $xeTree = this
1746
+
1747
+ return $xeTree.handleInsertNodeAt(records, targetNodeOrNodeid, true)
1748
+ },
1749
+ remove (nodes?: any) {
1750
+ const $xeTree = this
1751
+ const props = $xeTree
1752
+ const reactData = $xeTree.reactData
1753
+ const internalData = $xeTree.internalData
1754
+
1755
+ const { transform } = props
1756
+ const { treeFullData } = internalData
1757
+ const childrenField = $xeTree.computeChildrenField
1758
+ const mapChildrenField = $xeTree.computeMapChildrenField
1759
+ if (!transform) {
1760
+ errLog('vxe.error.reqSupportProp', ['remove()', 'transform'])
1761
+ return Promise.resolve({ node: null, nodes: [] })
1762
+ }
1763
+ let delList: any[] = []
1764
+ if (!nodes) {
1765
+ nodes = treeFullData
1766
+ } else if (!XEUtils.isArray(nodes)) {
1767
+ nodes = [nodes]
1768
+ }
1769
+ if (!nodes.length) {
1770
+ return Promise.resolve({ node: null, nodes: [] })
1771
+ }
1772
+
1773
+ // 从数据源中移除
1774
+ if (treeFullData === nodes) {
1775
+ nodes = delList = treeFullData.slice(0)
1776
+ internalData.treeFullData = []
1777
+ } else {
1778
+ nodes.forEach((item: any) => {
1779
+ const nodeid = $xeTree.getNodeId(item)
1780
+ const matchMapObj = XEUtils.findTree(treeFullData, item => nodeid === $xeTree.getNodeId(item), { children: mapChildrenField })
1781
+ if (matchMapObj) {
1782
+ const rItems = matchMapObj.items.splice(matchMapObj.index, 1)
1783
+ delList.push(rItems[0])
1784
+ }
1785
+ const matchObj = XEUtils.findTree(treeFullData, item => nodeid === $xeTree.getNodeId(item), { children: childrenField })
1786
+ if (matchObj) {
1787
+ const rItems = matchObj.items.splice(matchObj.index, 1)
1788
+ delList.push(rItems[0])
1789
+ }
1790
+ })
1791
+ }
1792
+ reactData.removeRowFlag++
1793
+ reactData.insertRowFlag++
1794
+ $xeTree.cacheNodeMap()
1795
+ $xeTree.handleData(true)
1796
+ $xeTree.updateAfterDataIndex()
1797
+ $xeTree.updateCheckboxStatus()
1798
+ if (reactData.scrollYLoad) {
1799
+ $xeTree.updateYSpace()
1800
+ }
1801
+ return $xeTree.$nextTick().then(() => {
1802
+ return $xeTree.recalculate()
1803
+ }).then(() => {
1804
+ return { node: delList.length ? delList[delList.length - 1] : null, nodes: delList }
1805
+ })
1806
+ },
1807
+ getInsertRecords () {
1808
+ const $xeTree = this
1809
+ const internalData = $xeTree.internalData
1810
+
1811
+ const { insertRowMaps } = internalData
1812
+ const insertRecords: any[] = []
1813
+ XEUtils.each(insertRowMaps, (row) => {
1814
+ insertRecords.push(row)
1815
+ })
1816
+ return insertRecords
1817
+ },
1818
+ getRemoveRecords () {
1819
+ const $xeTree = this
1820
+ const internalData = $xeTree.internalData
1821
+
1822
+ const { removeRowMaps } = internalData
1823
+ const removeRecords: any[] = []
1824
+ XEUtils.each(removeRowMaps, (row) => {
1825
+ removeRecords.push(row)
1826
+ })
1827
+ return removeRecords
1828
+ },
1582
1829
  handleNodeMousedownEvent (evnt: MouseEvent, node: any) {
1583
1830
  const $xeTree = this
1584
1831
  const props = $xeTree
@@ -3102,8 +3349,8 @@ export default /* define-vxe-component start */ defineVxeComponent({
3102
3349
  if (drag && !transform) {
3103
3350
  errLog('vxe.error.notSupportProp', ['drag', 'transform=false', 'transform=true'])
3104
3351
  }
3105
- if (dragOpts.isCrossTreeDrag) {
3106
- errLog('vxe.error.notProp', ['drag-config.isCrossTreeDrag'])
3352
+ if (dragOpts.isCrossTreeDrag && !dragOpts.isCrossDrag) {
3353
+ errLog('vxe.error.reqSupportProp', ['drag-config.isCrossTreeDrag', 'drag-config.isCrossDrag'])
3107
3354
  }
3108
3355
  // if (valueField) {
3109
3356
  // errLog('vxe.error.delProp', ['value-field', 'value-field'])
@@ -1,4 +1,4 @@
1
- import type { VxeTreeConstructor } from '../../../types'
1
+ import type { VxeTreeConstructor, VxeTreeDefines } from '../../../types'
2
2
 
3
3
  function countTreeExpand ($xeTree: VxeTreeConstructor, prevNode: any) {
4
4
  let count = 1
@@ -32,3 +32,19 @@ export function calcTreeLine ($xeTree: VxeTreeConstructor, node: any, prevNode:
32
32
  }
33
33
  return (rowHeight || 28) * expandSize - (prevNode ? 1 : 12)
34
34
  }
35
+
36
+ export function getItemCacheObj (item: any): VxeTreeDefines.NodeCacheItem {
37
+ return {
38
+ item,
39
+ index: -1,
40
+ $index: -1,
41
+ _index: -1,
42
+ items: [],
43
+ parent: null,
44
+ nodes: [],
45
+ level: 0,
46
+ treeIndex: -1,
47
+ lineCount: 0,
48
+ treeLoaded: false
49
+ }
50
+ }
@@ -185,7 +185,10 @@ setConfig({
185
185
  formView: {},
186
186
  icon: {},
187
187
  iconPicker: {
188
- icons: ['home', 'company', 'comment', 'setting', 'send', 'envelope', 'envelope-open', 'bell', 'search', 'print', 'pc', 'goods', 'chart-line', 'edit', 'delete', 'save', 'folder', 'microphone', 'flag', 'link', 'location', 'sunny', 'rmb', 'usd', 'user', 'add-user', 'add-users', 'star', 'unlock', 'time', 'text', 'feedback', 'calendar', 'association-form', 'cloud-download', 'cloud-upload', 'file', 'subtable', 'chart-bar-x', 'chart-bar-y', 'chart-line', 'chart-pie', 'chart-radar']
188
+ icons: ['home', 'company', 'comment', 'setting', 'send', 'envelope', 'envelope-open', 'bell', 'search', 'print', 'pc', 'goods', 'chart-line', 'edit', 'delete', 'save', 'folder', 'microphone', 'flag', 'link', 'location', 'sunny', 'rmb', 'usd', 'user', 'add-user', 'add-users', 'star', 'unlock', 'time', 'text', 'feedback', 'calendar', 'association-form', 'cloud-download', 'cloud-upload', 'file', 'subtable', 'chart-bar-x', 'chart-bar-y', 'chart-line', 'chart-pie', 'chart-radar'],
189
+ popupConfig: {
190
+ // chunkSize: 4
191
+ }
189
192
  },
190
193
  image: {
191
194
  draggable: null,