vxe-pc-ui 3.7.4 → 3.7.6

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 (198) hide show
  1. package/es/icon/style.css +1 -1
  2. package/es/language/ar-EG.js +19 -1
  3. package/es/language/de-DE.js +19 -1
  4. package/es/language/en-US.js +20 -2
  5. package/es/language/es-ES.js +19 -1
  6. package/es/language/fr-FR.js +19 -1
  7. package/es/language/hu-HU.js +19 -1
  8. package/es/language/hy-AM.js +18 -0
  9. package/es/language/id-ID.js +19 -1
  10. package/es/language/it-IT.js +19 -1
  11. package/es/language/ja-JP.js +19 -1
  12. package/es/language/ko-KR.js +19 -1
  13. package/es/language/ms-MY.js +19 -1
  14. package/es/language/nb-NO.js +19 -1
  15. package/es/language/pt-BR.js +19 -1
  16. package/es/language/ru-RU.js +19 -1
  17. package/es/language/th-TH.js +19 -1
  18. package/es/language/ug-CN.js +19 -1
  19. package/es/language/uk-UA.js +19 -1
  20. package/es/language/uz-UZ.js +19 -1
  21. package/es/language/vi-VN.js +19 -1
  22. package/es/language/zh-CHT.js +19 -1
  23. package/es/language/zh-CN.js +18 -0
  24. package/es/list/src/list.js +1 -1
  25. package/es/select/src/select.js +138 -41
  26. package/es/select/style.css +21 -0
  27. package/es/select/style.min.css +1 -1
  28. package/es/style.css +1 -1
  29. package/es/style.min.css +1 -1
  30. package/es/tree/src/tree.js +1160 -601
  31. package/es/tree/src/util.js +31 -0
  32. package/es/tree/style.css +23 -26
  33. package/es/tree/style.min.css +1 -1
  34. package/es/tree-select/src/tree-select.js +258 -24
  35. package/es/tree-select/style.css +36 -1
  36. package/es/tree-select/style.min.css +1 -1
  37. package/es/ui/index.js +20 -4
  38. package/es/ui/src/dom.js +9 -0
  39. package/es/ui/src/log.js +1 -1
  40. package/es/vxe-select/style.css +21 -0
  41. package/es/vxe-select/style.min.css +1 -1
  42. package/es/vxe-tree/style.css +23 -26
  43. package/es/vxe-tree/style.min.css +1 -1
  44. package/es/vxe-tree-select/style.css +36 -1
  45. package/es/vxe-tree-select/style.min.css +1 -1
  46. package/lib/icon/style/style.css +1 -1
  47. package/lib/icon/style/style.min.css +1 -1
  48. package/lib/index.umd.js +1541 -532
  49. package/lib/index.umd.min.js +1 -1
  50. package/lib/language/ar-EG.js +19 -1
  51. package/lib/language/ar-EG.min.js +1 -1
  52. package/lib/language/ar-EG.umd.js +19 -1
  53. package/lib/language/de-DE.js +19 -1
  54. package/lib/language/de-DE.min.js +1 -1
  55. package/lib/language/de-DE.umd.js +19 -1
  56. package/lib/language/en-US.js +20 -2
  57. package/lib/language/en-US.min.js +1 -1
  58. package/lib/language/en-US.umd.js +20 -2
  59. package/lib/language/es-ES.js +19 -1
  60. package/lib/language/es-ES.min.js +1 -1
  61. package/lib/language/es-ES.umd.js +19 -1
  62. package/lib/language/fr-FR.js +19 -1
  63. package/lib/language/fr-FR.min.js +1 -1
  64. package/lib/language/fr-FR.umd.js +19 -1
  65. package/lib/language/hu-HU.js +19 -1
  66. package/lib/language/hu-HU.min.js +1 -1
  67. package/lib/language/hu-HU.umd.js +19 -1
  68. package/lib/language/hy-AM.js +18 -0
  69. package/lib/language/hy-AM.min.js +1 -1
  70. package/lib/language/hy-AM.umd.js +18 -0
  71. package/lib/language/id-ID.js +19 -1
  72. package/lib/language/id-ID.min.js +1 -1
  73. package/lib/language/id-ID.umd.js +19 -1
  74. package/lib/language/it-IT.js +19 -1
  75. package/lib/language/it-IT.min.js +1 -1
  76. package/lib/language/it-IT.umd.js +19 -1
  77. package/lib/language/ja-JP.js +19 -1
  78. package/lib/language/ja-JP.min.js +1 -1
  79. package/lib/language/ja-JP.umd.js +19 -1
  80. package/lib/language/ko-KR.js +19 -1
  81. package/lib/language/ko-KR.min.js +1 -1
  82. package/lib/language/ko-KR.umd.js +19 -1
  83. package/lib/language/ms-MY.js +19 -1
  84. package/lib/language/ms-MY.min.js +1 -1
  85. package/lib/language/ms-MY.umd.js +19 -1
  86. package/lib/language/nb-NO.js +19 -1
  87. package/lib/language/nb-NO.min.js +1 -1
  88. package/lib/language/nb-NO.umd.js +19 -1
  89. package/lib/language/pt-BR.js +19 -1
  90. package/lib/language/pt-BR.min.js +1 -1
  91. package/lib/language/pt-BR.umd.js +19 -1
  92. package/lib/language/ru-RU.js +19 -1
  93. package/lib/language/ru-RU.min.js +1 -1
  94. package/lib/language/ru-RU.umd.js +19 -1
  95. package/lib/language/th-TH.js +19 -1
  96. package/lib/language/th-TH.min.js +1 -1
  97. package/lib/language/th-TH.umd.js +19 -1
  98. package/lib/language/ug-CN.js +19 -1
  99. package/lib/language/ug-CN.min.js +1 -1
  100. package/lib/language/ug-CN.umd.js +19 -1
  101. package/lib/language/uk-UA.js +19 -1
  102. package/lib/language/uk-UA.min.js +1 -1
  103. package/lib/language/uk-UA.umd.js +19 -1
  104. package/lib/language/uz-UZ.js +19 -1
  105. package/lib/language/uz-UZ.min.js +1 -1
  106. package/lib/language/uz-UZ.umd.js +19 -1
  107. package/lib/language/vi-VN.js +19 -1
  108. package/lib/language/vi-VN.min.js +1 -1
  109. package/lib/language/vi-VN.umd.js +19 -1
  110. package/lib/language/zh-CHT.js +19 -1
  111. package/lib/language/zh-CHT.min.js +1 -1
  112. package/lib/language/zh-CHT.umd.js +19 -1
  113. package/lib/language/zh-CN.js +18 -0
  114. package/lib/language/zh-CN.min.js +1 -1
  115. package/lib/language/zh-CN.umd.js +18 -0
  116. package/lib/list/src/list.js +1 -1
  117. package/lib/list/src/list.min.js +1 -1
  118. package/lib/select/src/select.js +145 -45
  119. package/lib/select/src/select.min.js +1 -1
  120. package/lib/select/style/style.css +21 -0
  121. package/lib/select/style/style.min.css +1 -1
  122. package/lib/style.css +1 -1
  123. package/lib/style.min.css +1 -1
  124. package/lib/tree/src/tree.js +1223 -626
  125. package/lib/tree/src/tree.min.js +1 -1
  126. package/lib/tree/src/util.js +37 -0
  127. package/lib/tree/src/util.min.js +1 -0
  128. package/lib/tree/style/style.css +23 -26
  129. package/lib/tree/style/style.min.css +1 -1
  130. package/lib/tree-select/src/tree-select.js +265 -26
  131. package/lib/tree-select/src/tree-select.min.js +1 -1
  132. package/lib/tree-select/style/style.css +36 -1
  133. package/lib/tree-select/style/style.min.css +1 -1
  134. package/lib/ui/index.js +20 -4
  135. package/lib/ui/index.min.js +1 -1
  136. package/lib/ui/src/dom.js +10 -0
  137. package/lib/ui/src/dom.min.js +1 -1
  138. package/lib/ui/src/log.js +1 -1
  139. package/lib/ui/src/log.min.js +1 -1
  140. package/lib/vxe-select/style/style.css +21 -0
  141. package/lib/vxe-select/style/style.min.css +1 -1
  142. package/lib/vxe-tree/style/style.css +23 -26
  143. package/lib/vxe-tree/style/style.min.css +1 -1
  144. package/lib/vxe-tree-select/style/style.css +36 -1
  145. package/lib/vxe-tree-select/style/style.min.css +1 -1
  146. package/package.json +1 -1
  147. package/packages/language/ar-EG.ts +19 -1
  148. package/packages/language/de-DE.ts +19 -1
  149. package/packages/language/en-US.ts +20 -2
  150. package/packages/language/es-ES.ts +19 -1
  151. package/packages/language/fr-FR.ts +19 -1
  152. package/packages/language/hu-HU.ts +19 -1
  153. package/packages/language/hy-AM.ts +18 -0
  154. package/packages/language/id-ID.ts +19 -1
  155. package/packages/language/it-IT.ts +19 -1
  156. package/packages/language/ja-JP.ts +19 -1
  157. package/packages/language/ko-KR.ts +19 -1
  158. package/packages/language/ms-MY.ts +19 -1
  159. package/packages/language/nb-NO.ts +19 -1
  160. package/packages/language/pt-BR.ts +19 -1
  161. package/packages/language/ru-RU.ts +19 -1
  162. package/packages/language/th-TH.ts +19 -1
  163. package/packages/language/ug-CN.ts +19 -1
  164. package/packages/language/uk-UA.ts +19 -1
  165. package/packages/language/uz-UZ.ts +19 -1
  166. package/packages/language/vi-VN.ts +19 -1
  167. package/packages/language/zh-CHT.ts +19 -1
  168. package/packages/language/zh-CN.ts +18 -0
  169. package/packages/list/src/list.ts +1 -1
  170. package/packages/select/src/select.ts +144 -44
  171. package/packages/tree/src/tree.ts +1206 -626
  172. package/packages/tree/src/util.ts +34 -0
  173. package/packages/tree-select/src/tree-select.ts +272 -26
  174. package/packages/ui/index.ts +19 -3
  175. package/packages/ui/src/dom.ts +10 -0
  176. package/styles/components/select.scss +19 -0
  177. package/styles/components/tree-select.scss +36 -1
  178. package/styles/components/tree.scss +28 -31
  179. package/types/components/button.d.ts +11 -1
  180. package/types/components/grid.d.ts +5 -0
  181. package/types/components/icon-picker.d.ts +11 -1
  182. package/types/components/input.d.ts +2 -2
  183. package/types/components/select.d.ts +29 -40
  184. package/types/components/table.d.ts +2 -4
  185. package/types/components/tree-select.d.ts +72 -12
  186. package/types/components/tree.d.ts +129 -8
  187. /package/es/icon/{iconfont.1752133985860.ttf → iconfont.1752416451473.ttf} +0 -0
  188. /package/es/icon/{iconfont.1752133985860.woff → iconfont.1752416451473.woff} +0 -0
  189. /package/es/icon/{iconfont.1752133985860.woff2 → iconfont.1752416451473.woff2} +0 -0
  190. /package/es/{iconfont.1752133985860.ttf → iconfont.1752416451473.ttf} +0 -0
  191. /package/es/{iconfont.1752133985860.woff → iconfont.1752416451473.woff} +0 -0
  192. /package/es/{iconfont.1752133985860.woff2 → iconfont.1752416451473.woff2} +0 -0
  193. /package/lib/icon/style/{iconfont.1752133985860.ttf → iconfont.1752416451473.ttf} +0 -0
  194. /package/lib/icon/style/{iconfont.1752133985860.woff → iconfont.1752416451473.woff} +0 -0
  195. /package/lib/icon/style/{iconfont.1752133985860.woff2 → iconfont.1752416451473.woff2} +0 -0
  196. /package/lib/{iconfont.1752133985860.ttf → iconfont.1752416451473.ttf} +0 -0
  197. /package/lib/{iconfont.1752133985860.woff → iconfont.1752416451473.woff} +0 -0
  198. /package/lib/{iconfont.1752133985860.woff2 → iconfont.1752416451473.woff2} +0 -0
@@ -4,10 +4,11 @@ import XEUtils from 'xe-utils'
4
4
  import { getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, globalMixins, renderEmptyElement } from '../../ui'
5
5
  import { getEventTargetNode, updatePanelPlacement } from '../../ui/src/dom'
6
6
  import { getLastZIndex, nextZIndex, getFuncText } from '../../ui/src/utils'
7
- import VxeInputComponent from '../../input/src/input'
8
7
  import { getSlotVNs } from '../../ui/src/vn'
8
+ import VxeInputComponent from '../../input/src/input'
9
+ import VxeButtonComponent from '../../button/src/button'
9
10
 
10
- import type { VxeSelectPropTypes, SelectInternalData, ValueOf, VxeComponentSizeType, SelectReactData, VxeSelectEmits, VxeInputDefines, VxeSelectDefines, VxeOptgroupProps, VxeOptionProps, VxeDrawerConstructor, VxeDrawerMethods, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods, VxeInputConstructor, VxeComponentSlotType } from '../../../types'
11
+ import type { VxeSelectPropTypes, SelectInternalData, ValueOf, VxeComponentSizeType, SelectReactData, VxeSelectEmits, VxeButtonDefines, VxeInputDefines, VxeSelectDefines, VxeOptionProps, VxeDrawerConstructor, VxeDrawerMethods, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods, VxeInputConstructor, VxeComponentSlotType } from '../../../types'
11
12
  import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
12
13
 
13
14
  function isOptionVisible (option: any) {
@@ -70,10 +71,20 @@ export default /* define-vxe-component start */ defineVxeComponent({
70
71
  filterable: Boolean as PropType<VxeSelectPropTypes.Filterable>,
71
72
  filterMethod: Function as PropType<VxeSelectPropTypes.FilterMethod>,
72
73
  remote: Boolean as PropType<VxeSelectPropTypes.Remote>,
73
- // 已废弃,被 remote-config.queryMethod 替换
74
- remoteMethod: Function as PropType<VxeSelectPropTypes.RemoteMethod>,
75
74
  remoteConfig: Object as PropType<VxeSelectPropTypes.RemoteConfig>,
76
75
  emptyText: String as PropType<VxeSelectPropTypes.EmptyText>,
76
+ showTotalButoon: {
77
+ type: Boolean as PropType<VxeSelectPropTypes.ShowTotalButoon>,
78
+ default: () => getConfig().select.showTotalButoon
79
+ },
80
+ showCheckedButoon: {
81
+ type: Boolean as PropType<VxeSelectPropTypes.ShowCheckedButoon>,
82
+ default: () => getConfig().select.showCheckedButoon
83
+ },
84
+ showClearButton: {
85
+ type: Boolean as PropType<VxeSelectPropTypes.ShowClearButton>,
86
+ default: () => getConfig().select.showClearButton
87
+ },
77
88
  transfer: {
78
89
  type: Boolean as PropType<VxeSelectPropTypes.Transfer>,
79
90
  default: null
@@ -81,12 +92,23 @@ export default /* define-vxe-component start */ defineVxeComponent({
81
92
  virtualYConfig: Object as PropType<VxeSelectPropTypes.VirtualYConfig>,
82
93
  scrollY: Object as PropType<VxeSelectPropTypes.ScrollY>,
83
94
 
84
- // 已废弃,被 option-config.keyField 替换
95
+ /**
96
+ * 已废弃,被 remote-config.queryMethod 替换
97
+ * @deprecated
98
+ */
99
+ remoteMethod: Function as PropType<VxeSelectPropTypes.RemoteMethod>,
100
+ /**
101
+ * 已废弃,被 option-config.keyField 替换
102
+ * @deprecated
103
+ */
85
104
  optionId: {
86
105
  type: String as PropType<VxeSelectPropTypes.OptionId>,
87
106
  default: () => getConfig().select.optionId
88
107
  },
89
- // 已废弃,被 option-config.useKey 替换
108
+ /**
109
+ * 已废弃,被 option-config.useKey 替换
110
+ * @deprecated
111
+ */
90
112
  optionKey: Boolean as PropType<VxeSelectPropTypes.OptionKey>
91
113
  },
92
114
  inject: {
@@ -121,7 +143,6 @@ export default /* define-vxe-component start */ defineVxeComponent({
121
143
  bodyHeight: 0,
122
144
  topSpaceHeight: 0,
123
145
  optList: [],
124
- afterVisibleList: [],
125
146
  staticOptions: [],
126
147
  reactFlag: 1,
127
148
 
@@ -140,6 +161,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
140
161
  const internalData: SelectInternalData = {
141
162
  synchData: [],
142
163
  fullData: [],
164
+ afterVisibleList: [],
143
165
  optAddMaps: {},
144
166
  optGroupKeyMaps: {},
145
167
  optFullValMaps: {},
@@ -281,13 +303,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
281
303
  const $xeSelect = this
282
304
  const props = $xeSelect
283
305
 
284
- const { value, multiple, max } = props
285
- if (multiple && max) {
286
- return (XEUtils.isArray(value) ? value.length : (XEUtils.eqNull(value) ? 0 : 1)) >= XEUtils.toNumber(max)
287
- }
288
- return false
306
+ const { value: modelValue } = props
307
+ return ($xeSelect as any).checkMaxLimit(modelValue) as boolean
289
308
  },
290
- computeSYOpts () {
309
+ computeVirtualYOpts () {
291
310
  const $xeSelect = this
292
311
  const props = $xeSelect
293
312
 
@@ -399,8 +418,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
399
418
  const reactData = $xeSelect.reactData
400
419
 
401
420
  const $input = $xeSelect.$refs.refInput as VxeInputConstructor
421
+ if ($input) {
422
+ $input.blur()
423
+ }
402
424
  reactData.isActivated = true
403
- $input.blur()
404
425
  return $xeSelect.$nextTick()
405
426
  },
406
427
  blur () {
@@ -408,7 +429,9 @@ export default /* define-vxe-component start */ defineVxeComponent({
408
429
  const reactData = $xeSelect.reactData
409
430
 
410
431
  const $input = $xeSelect.$refs.refInput as VxeInputConstructor
411
- $input.blur()
432
+ if ($input) {
433
+ $input.blur()
434
+ }
412
435
  reactData.isActivated = false
413
436
  return $xeSelect.$nextTick()
414
437
  },
@@ -439,6 +462,16 @@ export default /* define-vxe-component start */ defineVxeComponent({
439
462
  const optid = option[$xeSelect.getOptKey()]
440
463
  return optid ? encodeURIComponent(optid) : ''
441
464
  },
465
+ checkMaxLimit (selectVals: VxeSelectPropTypes.ModelValue | undefined) {
466
+ const $xeSelect = this
467
+ const props = $xeSelect
468
+
469
+ const { multiple, max } = props
470
+ if (multiple && max) {
471
+ return (XEUtils.isArray(selectVals) ? selectVals.length : (XEUtils.eqNull(selectVals) ? 0 : 1)) >= XEUtils.toNumber(max)
472
+ }
473
+ return false
474
+ },
442
475
  getRemoteSelectLabel (value: any) {
443
476
  const $xeSelect = this
444
477
  const internalData = $xeSelect.internalData
@@ -501,7 +534,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
501
534
  cacheItem._index = index
502
535
  }
503
536
  })
504
- reactData.afterVisibleList = avList
537
+ internalData.afterVisibleList = avList
505
538
  return $xeSelect.$nextTick()
506
539
  },
507
540
  refreshOption () {
@@ -649,7 +682,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
649
682
  reactData.isAniVisible = true
650
683
  if (filterable) {
651
684
  if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !fullData.length) {
652
- $xeSelect.triggerSearchEvent()
685
+ $xeSelect.handleSearchEvent()
653
686
  } else {
654
687
  $xeSelect.handleOption()
655
688
  $xeSelect.updateYData()
@@ -711,6 +744,40 @@ export default /* define-vxe-component start */ defineVxeComponent({
711
744
  $xeSelect.clearValueEvent($event, null)
712
745
  $xeSelect.hideOptionPanel()
713
746
  },
747
+ allCheckedPanelEvent (params: VxeButtonDefines.ClickEventParams) {
748
+ const $xeSelect = this
749
+ const props = $xeSelect
750
+ const reactData = $xeSelect.reactData
751
+
752
+ const { $event } = params
753
+ const { value: modelValue, multiple } = props
754
+ const { optList } = reactData
755
+ const valueField = $xeSelect.computeValueField
756
+ if (multiple) {
757
+ const multipleValue: any[] = XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
758
+ for (let i = 0; i < optList.length; i++) {
759
+ const option = optList[i]
760
+ const selectValue = option[valueField]
761
+ // 检测是否超过最大可选数量
762
+ if ($xeSelect.checkMaxLimit(multipleValue)) {
763
+ break
764
+ }
765
+ if (!multipleValue.some(val => val === selectValue)) {
766
+ multipleValue.push(selectValue)
767
+ }
768
+ }
769
+ $xeSelect.changeEvent($event, multipleValue)
770
+ $xeSelect.dispatchEvent('all-change', { value: multipleValue }, $event)
771
+ $xeSelect.hideOptionPanel()
772
+ }
773
+ },
774
+ clearCheckedPanelEvent (params: VxeButtonDefines.ClickEventParams) {
775
+ const $xeSelect = this
776
+
777
+ const { $event } = params
778
+ $xeSelect.clearValueEvent($event, null)
779
+ $xeSelect.hideOptionPanel()
780
+ },
714
781
  changeOptionEvent (evnt: Event, option: any) {
715
782
  const $xeSelect = this
716
783
  const props = $xeSelect
@@ -799,8 +866,8 @@ export default /* define-vxe-component start */ defineVxeComponent({
799
866
  const internalData = $xeSelect.internalData
800
867
 
801
868
  const { allowCreate } = props
802
- const { afterVisibleList, optList } = reactData
803
- const { optFullValMaps, optAddMaps } = internalData
869
+ const { optList } = reactData
870
+ const { optFullValMaps, optAddMaps, afterVisibleList } = internalData
804
871
  const valueField = $xeSelect.computeValueField
805
872
  let fullList = afterVisibleList
806
873
  let offsetAddIndex = 0
@@ -972,13 +1039,13 @@ export default /* define-vxe-component start */ defineVxeComponent({
972
1039
  $xeSelect.togglePanelEvent(evnt)
973
1040
  $xeSelect.dispatchEvent('click', { triggerButton: true, visible: reactData.visiblePanel }, evnt)
974
1041
  },
975
- modelSearchEvent (value: string) {
1042
+ modelSearchEvent (value: string) {
976
1043
  const $xeSelect = this
977
1044
  const reactData = $xeSelect.reactData
978
1045
 
979
1046
  reactData.searchValue = value
980
1047
  },
981
- focusSearchEvent () {
1048
+ focusSearchEvent () {
982
1049
  const $xeSelect = this
983
1050
  const reactData = $xeSelect.reactData
984
1051
 
@@ -1030,15 +1097,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
1030
1097
  }
1031
1098
  }
1032
1099
  },
1033
- checkOptionDisabled (isSelected: any, option: VxeOptionProps, group?: VxeOptgroupProps) {
1100
+ checkOptionDisabled (isSelected: any, option: VxeOptionProps) {
1034
1101
  const $xeSelect = this
1035
1102
 
1036
1103
  if (option.disabled) {
1037
1104
  return true
1038
1105
  }
1039
- if (group && group.disabled) {
1040
- return true
1041
- }
1042
1106
  const isMaximize = $xeSelect.computeIsMaximize
1043
1107
  if (isMaximize && !isSelected) {
1044
1108
  return true
@@ -1050,8 +1114,8 @@ export default /* define-vxe-component start */ defineVxeComponent({
1050
1114
  const reactData = $xeSelect.reactData
1051
1115
  const internalData = $xeSelect.internalData
1052
1116
 
1053
- const { scrollYLoad, afterVisibleList } = reactData
1054
- const { scrollYStore } = internalData
1117
+ const { scrollYLoad } = reactData
1118
+ const { scrollYStore, afterVisibleList } = internalData
1055
1119
  reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0
1056
1120
  reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0
1057
1121
  },
@@ -1062,8 +1126,8 @@ export default /* define-vxe-component start */ defineVxeComponent({
1062
1126
  const internalData = $xeSelect.internalData
1063
1127
 
1064
1128
  const { filterable, allowCreate } = props
1065
- const { scrollYLoad, afterVisibleList, searchValue } = reactData
1066
- const { optAddMaps, scrollYStore } = internalData
1129
+ const { scrollYLoad, searchValue } = reactData
1130
+ const { optAddMaps, scrollYStore, afterVisibleList } = internalData
1067
1131
  const labelField = $xeSelect.computeLabelField
1068
1132
  const valueField = $xeSelect.computeValueField
1069
1133
  const restList = scrollYLoad ? afterVisibleList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : afterVisibleList.slice(0)
@@ -1096,13 +1160,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
1096
1160
  const { scrollYLoad } = reactData
1097
1161
  const { scrollYStore } = internalData
1098
1162
  const virtualBodyElem = $xeSelect.$refs.refVirtualBody as HTMLDivElement
1099
- const sYOpts = $xeSelect.computeSYOpts
1163
+ const virtualYOpts = $xeSelect.computeVirtualYOpts
1100
1164
  let rowHeight = 0
1101
1165
  let firstItemElem: HTMLElement | undefined
1102
1166
  if (virtualBodyElem) {
1103
- if (sYOpts.sItem) {
1104
- firstItemElem = virtualBodyElem.querySelector(sYOpts.sItem) as HTMLElement
1105
- }
1106
1167
  if (!firstItemElem) {
1107
1168
  firstItemElem = virtualBodyElem.children[0] as HTMLElement
1108
1169
  }
@@ -1116,7 +1177,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1116
1177
  if (scrollYLoad) {
1117
1178
  const scrollBodyElem = $xeSelect.$refs.refVirtualWrapper as HTMLDivElement
1118
1179
  const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0)
1119
- const offsetYSize = Math.max(0, Math.min(2, XEUtils.toNumber(sYOpts.oSize)))
1180
+ const offsetYSize = Math.max(0, Math.min(2, XEUtils.toNumber(virtualYOpts.oSize)))
1120
1181
  scrollYStore.offsetSize = offsetYSize
1121
1182
  scrollYStore.visibleSize = visibleYSize
1122
1183
  scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex)
@@ -1286,7 +1347,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1286
1347
  $xeSelect.cacheItemMap(datas || [])
1287
1348
  const { isLoaded, fullData, scrollYStore } = internalData
1288
1349
  const defaultOpts = $xeSelect.computeDefaultOpts
1289
- const sYOpts = $xeSelect.computeSYOpts
1350
+ const virtualYOpts = $xeSelect.computeVirtualYOpts
1290
1351
  const valueField = $xeSelect.computeValueField
1291
1352
  Object.assign(scrollYStore, {
1292
1353
  startIndex: 0,
@@ -1295,7 +1356,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1295
1356
  })
1296
1357
  internalData.synchData = datas || []
1297
1358
  // 如果gt为0,则总是启用
1298
- reactData.scrollYLoad = !!sYOpts.enabled && sYOpts.gt > -1 && (sYOpts.gt === 0 || sYOpts.gt <= fullData.length)
1359
+ reactData.scrollYLoad = !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt <= fullData.length)
1299
1360
  $xeSelect.handleData()
1300
1361
  if (!isLoaded) {
1301
1362
  const { selectMode } = defaultOpts
@@ -1349,7 +1410,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1349
1410
  //
1350
1411
  // Render
1351
1412
  //
1352
- renderOption (h: CreateElement, list: VxeOptionProps[], group?: VxeOptgroupProps) {
1413
+ renderOption (h: CreateElement, list: VxeOptionProps[]) {
1353
1414
  const $xeSelect = this
1354
1415
  const props = $xeSelect
1355
1416
  const slots = $xeSelect.$scopedSlots
@@ -1373,9 +1434,9 @@ export default /* define-vxe-component start */ defineVxeComponent({
1373
1434
  const isAdd = !!(allowCreate && optAddMaps[optid])
1374
1435
  const isSelected = !isAdd && (XEUtils.isArray(value) ? value.indexOf(optionValue) > -1 : value === optionValue)
1375
1436
  const isVisible = isAdd || (!isOptGroup || isOptionVisible(option))
1376
- const isDisabled = !isAdd && $xeSelect.checkOptionDisabled(isSelected, option, group)
1437
+ const isDisabled = !isAdd && $xeSelect.checkOptionDisabled(isSelected, option)
1377
1438
  const defaultSlot = slots ? slots.default : null
1378
- const optParams = { option, group: null, $select: $xeSelect }
1439
+ const optParams = { option, group: isOptGroup ? option : null, $select: $xeSelect }
1379
1440
  let optLabel = ''
1380
1441
  let optVNs: string | VxeComponentSlotType[] = []
1381
1442
  if (optionSlot) {
@@ -1475,8 +1536,8 @@ export default /* define-vxe-component start */ defineVxeComponent({
1475
1536
  const slots = $xeSelect.$scopedSlots
1476
1537
  const reactData = $xeSelect.reactData
1477
1538
 
1478
- const { className, popupClassName, loading, filterable } = props
1479
- const { initialized, isActivated, isAniVisible, visiblePanel, bodyHeight, topSpaceHeight } = reactData
1539
+ const { value: modelValue, className, popupClassName, multiple, loading, filterable, showTotalButoon, showCheckedButoon, showClearButton } = props
1540
+ const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight } = reactData
1480
1541
  const vSize = $xeSelect.computeSize
1481
1542
  const isDisabled = $xeSelect.computeIsDisabled
1482
1543
  const selectLabel = $xeSelect.computeSelectLabel
@@ -1501,6 +1562,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1501
1562
  }, selectLabel)
1502
1563
  ])
1503
1564
  }
1565
+ const selectVals = XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
1504
1566
  return h('div', {
1505
1567
  ref: 'refElem',
1506
1568
  class: ['vxe-select', className ? (XEUtils.isFunction(className) ? className({ $select: $xeSelect }) : className) : '', {
@@ -1584,10 +1646,48 @@ export default /* define-vxe-component start */ defineVxeComponent({
1584
1646
  })
1585
1647
  ])
1586
1648
  : renderEmptyElement($xeSelect),
1587
- headerSlot
1649
+ showTotalButoon || (showCheckedButoon && multiple) || showClearButton || headerSlot
1588
1650
  ? h('div', {
1589
1651
  class: 'vxe-select--panel-header'
1590
- }, $xeSelect.callSlot(headerSlot, {}, h))
1652
+ }, headerSlot
1653
+ ? $xeSelect.callSlot(headerSlot, {}, h)
1654
+ : [
1655
+ h('div', {
1656
+ class: 'vxe-tree-select--header-button'
1657
+ }, [
1658
+ showTotalButoon
1659
+ ? h('div', {
1660
+ class: 'vxe-tree-select--header-total'
1661
+ }, getI18n('vxe.select.total', [selectVals.length, optList.length]))
1662
+ : renderEmptyElement($xeSelect),
1663
+ h('div', {
1664
+ class: 'vxe-tree-select--header-btns'
1665
+ }, [
1666
+ (showCheckedButoon && multiple)
1667
+ ? h(VxeButtonComponent, {
1668
+ props: {
1669
+ content: getI18n('vxe.select.allChecked'),
1670
+ mode: 'text'
1671
+ },
1672
+ on: {
1673
+ click: $xeSelect.allCheckedPanelEvent
1674
+ }
1675
+ })
1676
+ : renderEmptyElement($xeSelect),
1677
+ showClearButton
1678
+ ? h(VxeButtonComponent, {
1679
+ props: {
1680
+ content: getI18n('vxe.select.clear'),
1681
+ mode: 'text'
1682
+ },
1683
+ on: {
1684
+ click: $xeSelect.clearCheckedPanelEvent
1685
+ }
1686
+ })
1687
+ : renderEmptyElement($xeSelect)
1688
+ ])
1689
+ ])
1690
+ ])
1591
1691
  : renderEmptyElement($xeSelect),
1592
1692
  h('div', {
1593
1693
  class: 'vxe-select--panel-body'
@@ -1609,7 +1709,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1609
1709
  ref: 'refVirtualBody',
1610
1710
  class: 'vxe-select--body',
1611
1711
  style: {
1612
- marginTop: topSpaceHeight ? `${topSpaceHeight}px` : ''
1712
+ transform: `translateY(${topSpaceHeight}px)`
1613
1713
  }
1614
1714
  }, $xeSelect.renderOpts(h))
1615
1715
  ])