vxe-pc-ui 3.14.16 → 3.14.18

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 (169) hide show
  1. package/es/language/ar-EG.js +4 -2
  2. package/es/language/de-DE.js +4 -2
  3. package/es/language/en-US.js +4 -2
  4. package/es/language/es-ES.js +4 -2
  5. package/es/language/fr-FR.js +4 -2
  6. package/es/language/hu-HU.js +4 -2
  7. package/es/language/hy-AM.js +4 -2
  8. package/es/language/id-ID.js +4 -2
  9. package/es/language/it-IT.js +4 -2
  10. package/es/language/ja-JP.js +4 -2
  11. package/es/language/ko-KR.js +4 -2
  12. package/es/language/ms-MY.js +4 -2
  13. package/es/language/nb-NO.js +4 -2
  14. package/es/language/pt-BR.js +4 -2
  15. package/es/language/ru-RU.js +4 -2
  16. package/es/language/th-TH.js +4 -2
  17. package/es/language/ug-CN.js +4 -2
  18. package/es/language/uk-UA.js +4 -2
  19. package/es/language/uz-UZ.js +4 -2
  20. package/es/language/vi-VN.js +4 -2
  21. package/es/language/zh-CHT.js +4 -2
  22. package/es/language/zh-CN.js +4 -2
  23. package/es/select/src/select.js +192 -48
  24. package/es/select/style.css +120 -12
  25. package/es/select/style.min.css +1 -1
  26. package/es/style.css +1 -1
  27. package/es/style.min.css +1 -1
  28. package/es/tree-select/src/tree-select.js +63 -20
  29. package/es/tree-select/style.css +5 -0
  30. package/es/tree-select/style.min.css +1 -1
  31. package/es/ui/index.js +10 -2
  32. package/es/ui/src/log.js +1 -1
  33. package/es/vxe-select/style.css +120 -12
  34. package/es/vxe-select/style.min.css +1 -1
  35. package/es/vxe-tree-select/style.css +5 -0
  36. package/es/vxe-tree-select/style.min.css +1 -1
  37. package/helper/vetur/attributes.json +1 -1
  38. package/helper/vetur/tags.json +1 -1
  39. package/lib/index.umd.js +278 -69
  40. package/lib/index.umd.min.js +1 -1
  41. package/lib/language/ar-EG.js +4 -2
  42. package/lib/language/ar-EG.min.js +1 -1
  43. package/lib/language/ar-EG.umd.js +4 -2
  44. package/lib/language/de-DE.js +4 -2
  45. package/lib/language/de-DE.min.js +1 -1
  46. package/lib/language/de-DE.umd.js +4 -2
  47. package/lib/language/en-US.js +4 -2
  48. package/lib/language/en-US.min.js +1 -1
  49. package/lib/language/en-US.umd.js +4 -2
  50. package/lib/language/es-ES.js +4 -2
  51. package/lib/language/es-ES.min.js +1 -1
  52. package/lib/language/es-ES.umd.js +4 -2
  53. package/lib/language/fr-FR.js +4 -2
  54. package/lib/language/fr-FR.min.js +1 -1
  55. package/lib/language/fr-FR.umd.js +4 -2
  56. package/lib/language/hu-HU.js +4 -2
  57. package/lib/language/hu-HU.min.js +1 -1
  58. package/lib/language/hu-HU.umd.js +4 -2
  59. package/lib/language/hy-AM.js +4 -2
  60. package/lib/language/hy-AM.min.js +1 -1
  61. package/lib/language/hy-AM.umd.js +4 -2
  62. package/lib/language/id-ID.js +4 -2
  63. package/lib/language/id-ID.min.js +1 -1
  64. package/lib/language/id-ID.umd.js +4 -2
  65. package/lib/language/it-IT.js +4 -2
  66. package/lib/language/it-IT.min.js +1 -1
  67. package/lib/language/it-IT.umd.js +4 -2
  68. package/lib/language/ja-JP.js +4 -2
  69. package/lib/language/ja-JP.min.js +1 -1
  70. package/lib/language/ja-JP.umd.js +4 -2
  71. package/lib/language/ko-KR.js +4 -2
  72. package/lib/language/ko-KR.min.js +1 -1
  73. package/lib/language/ko-KR.umd.js +4 -2
  74. package/lib/language/ms-MY.js +4 -2
  75. package/lib/language/ms-MY.min.js +1 -1
  76. package/lib/language/ms-MY.umd.js +4 -2
  77. package/lib/language/nb-NO.js +4 -2
  78. package/lib/language/nb-NO.min.js +1 -1
  79. package/lib/language/nb-NO.umd.js +4 -2
  80. package/lib/language/pt-BR.js +4 -2
  81. package/lib/language/pt-BR.min.js +1 -1
  82. package/lib/language/pt-BR.umd.js +4 -2
  83. package/lib/language/ru-RU.js +4 -2
  84. package/lib/language/ru-RU.min.js +1 -1
  85. package/lib/language/ru-RU.umd.js +4 -2
  86. package/lib/language/th-TH.js +4 -2
  87. package/lib/language/th-TH.min.js +1 -1
  88. package/lib/language/th-TH.umd.js +4 -2
  89. package/lib/language/ug-CN.js +4 -2
  90. package/lib/language/ug-CN.min.js +1 -1
  91. package/lib/language/ug-CN.umd.js +4 -2
  92. package/lib/language/uk-UA.js +4 -2
  93. package/lib/language/uk-UA.min.js +1 -1
  94. package/lib/language/uk-UA.umd.js +4 -2
  95. package/lib/language/uz-UZ.js +4 -2
  96. package/lib/language/uz-UZ.min.js +1 -1
  97. package/lib/language/uz-UZ.umd.js +4 -2
  98. package/lib/language/vi-VN.js +4 -2
  99. package/lib/language/vi-VN.min.js +1 -1
  100. package/lib/language/vi-VN.umd.js +4 -2
  101. package/lib/language/zh-CHT.js +4 -2
  102. package/lib/language/zh-CHT.min.js +1 -1
  103. package/lib/language/zh-CHT.umd.js +4 -2
  104. package/lib/language/zh-CN.js +4 -2
  105. package/lib/language/zh-CN.min.js +1 -1
  106. package/lib/language/zh-CN.umd.js +4 -2
  107. package/lib/select/src/select.js +192 -44
  108. package/lib/select/src/select.min.js +1 -1
  109. package/lib/select/style/style.css +120 -12
  110. package/lib/select/style/style.min.css +1 -1
  111. package/lib/style.css +1 -1
  112. package/lib/style.min.css +1 -1
  113. package/lib/tree-select/src/tree-select.js +71 -20
  114. package/lib/tree-select/src/tree-select.min.js +1 -1
  115. package/lib/tree-select/style/style.css +5 -0
  116. package/lib/tree-select/style/style.min.css +1 -1
  117. package/lib/ui/index.js +10 -2
  118. package/lib/ui/index.min.js +1 -1
  119. package/lib/ui/src/log.js +1 -1
  120. package/lib/ui/src/log.min.js +1 -1
  121. package/lib/vxe-select/style/style.css +120 -12
  122. package/lib/vxe-select/style/style.min.css +1 -1
  123. package/lib/vxe-tree-select/style/style.css +5 -0
  124. package/lib/vxe-tree-select/style/style.min.css +1 -1
  125. package/package.json +2 -2
  126. package/packages/language/ar-EG.ts +4 -2
  127. package/packages/language/de-DE.ts +4 -2
  128. package/packages/language/en-US.ts +4 -2
  129. package/packages/language/es-ES.ts +4 -2
  130. package/packages/language/fr-FR.ts +4 -2
  131. package/packages/language/hu-HU.ts +4 -2
  132. package/packages/language/hy-AM.ts +4 -2
  133. package/packages/language/id-ID.ts +4 -2
  134. package/packages/language/it-IT.ts +4 -2
  135. package/packages/language/ja-JP.ts +4 -2
  136. package/packages/language/ko-KR.ts +4 -2
  137. package/packages/language/ms-MY.ts +4 -2
  138. package/packages/language/nb-NO.ts +4 -2
  139. package/packages/language/pt-BR.ts +4 -2
  140. package/packages/language/ru-RU.ts +4 -2
  141. package/packages/language/th-TH.ts +4 -2
  142. package/packages/language/ug-CN.ts +4 -2
  143. package/packages/language/uk-UA.ts +4 -2
  144. package/packages/language/uz-UZ.ts +4 -2
  145. package/packages/language/vi-VN.ts +4 -2
  146. package/packages/language/zh-CHT.ts +4 -2
  147. package/packages/language/zh-CN.ts +4 -2
  148. package/packages/select/src/select.ts +210 -49
  149. package/packages/tree-select/src/tree-select.ts +65 -21
  150. package/packages/ui/index.ts +9 -1
  151. package/styles/components/select.scss +39 -12
  152. package/styles/components/tree-select.scss +4 -0
  153. package/styles/theme/dark.scss +3 -0
  154. package/styles/theme/light.scss +3 -0
  155. package/styles/variable.scss +3 -0
  156. package/types/components/select.d.ts +20 -0
  157. package/types/components/tree-select.d.ts +22 -1
  158. /package/es/icon/{iconfont.1779247059072.ttf → iconfont.1779433512609.ttf} +0 -0
  159. /package/es/icon/{iconfont.1779247059072.woff → iconfont.1779433512609.woff} +0 -0
  160. /package/es/icon/{iconfont.1779247059072.woff2 → iconfont.1779433512609.woff2} +0 -0
  161. /package/es/{iconfont.1779247059072.ttf → iconfont.1779433512609.ttf} +0 -0
  162. /package/es/{iconfont.1779247059072.woff → iconfont.1779433512609.woff} +0 -0
  163. /package/es/{iconfont.1779247059072.woff2 → iconfont.1779433512609.woff2} +0 -0
  164. /package/lib/icon/style/{iconfont.1779247059072.ttf → iconfont.1779433512609.ttf} +0 -0
  165. /package/lib/icon/style/{iconfont.1779247059072.woff → iconfont.1779433512609.woff} +0 -0
  166. /package/lib/icon/style/{iconfont.1779247059072.woff2 → iconfont.1779433512609.woff2} +0 -0
  167. /package/lib/{iconfont.1779247059072.ttf → iconfont.1779433512609.ttf} +0 -0
  168. /package/lib/{iconfont.1779247059072.woff → iconfont.1779433512609.woff} +0 -0
  169. /package/lib/{iconfont.1779247059072.woff2 → iconfont.1779433512609.woff2} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { PropType, CreateElement, VNode } from 'vue'
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import XEUtils from 'xe-utils'
4
- import { getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, globalMixins, renderEmptyElement } from '../../ui'
4
+ import { VxeUI, getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, globalMixins, renderEmptyElement } from '../../ui'
5
5
  import { getEventTargetNode, toCssUnit, updatePanelPlacement } from '../../ui/src/dom'
6
6
  import { getLastZIndex, nextZIndex, getFuncText, eqEmptyValue } from '../../ui/src/utils'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
@@ -96,6 +96,16 @@ export default /* define-vxe-component start */ defineVxeComponent({
96
96
  type: [String, Number] as PropType<VxeSelectPropTypes.Max>,
97
97
  default: null
98
98
  },
99
+ showRadio: {
100
+ type: Boolean as PropType<VxeSelectPropTypes.ShowCloseButton>,
101
+ default: () => getConfig().select.showRadio
102
+ },
103
+ radioConfig: Object as PropType<VxeSelectPropTypes.RadioConfig>,
104
+ showCheckbox: {
105
+ type: Boolean as PropType<VxeSelectPropTypes.ShowCloseButton>,
106
+ default: () => getConfig().select.showCheckedButoon
107
+ },
108
+ checkboxConfig: Object as PropType<VxeSelectPropTypes.CheckboxConfig>,
99
109
  /**
100
110
  * 已废弃,请使用 popupConfig.zIndex
101
111
  * @deprecated
@@ -115,6 +125,18 @@ export default /* define-vxe-component start */ defineVxeComponent({
115
125
  remote: Boolean as PropType<VxeSelectPropTypes.Remote>,
116
126
  remoteConfig: Object as PropType<VxeSelectPropTypes.RemoteConfig>,
117
127
  emptyText: String as PropType<VxeSelectPropTypes.EmptyText>,
128
+ checkedClosable: {
129
+ type: Boolean as PropType<VxeSelectPropTypes.CheckedClosable>,
130
+ default: () => getConfig().select.checkedClosable
131
+ },
132
+ clearClosable: {
133
+ type: Boolean as PropType<VxeSelectPropTypes.ClearClosable>,
134
+ default: () => getConfig().select.clearClosable
135
+ },
136
+ showCloseButton: {
137
+ type: Boolean as PropType<VxeSelectPropTypes.ShowCloseButton>,
138
+ default: () => getConfig().select.showCloseButton
139
+ },
118
140
  showTotalButoon: {
119
141
  type: Boolean as PropType<VxeSelectPropTypes.ShowTotalButoon>,
120
142
  default: () => getConfig().select.showTotalButoon
@@ -362,6 +384,18 @@ export default /* define-vxe-component start */ defineVxeComponent({
362
384
 
363
385
  return Object.assign({}, getConfig().select.optionConfig, props.optionConfig)
364
386
  },
387
+ computeRadioOpts () {
388
+ const $xeSelect = this
389
+ const props = $xeSelect
390
+
391
+ return Object.assign({}, getConfig().select.radioConfig, props.radioConfig)
392
+ },
393
+ computeCheckboxOpts () {
394
+ const $xeSelect = this
395
+ const props = $xeSelect
396
+
397
+ return Object.assign({}, getConfig().select.checkboxConfig, props.checkboxConfig)
398
+ },
365
399
  computeIsGroup (this: any) {
366
400
  const $xeSelect = this
367
401
  const reactData = $xeSelect.reactData
@@ -850,7 +884,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
850
884
  $xeSelect.dispatchEvent('visible-change', { visible: true }, null)
851
885
  }
852
886
  },
853
- hideOptionPanel () {
887
+ hideOptionPanel (evnt?: Event) {
854
888
  const $xeSelect = this
855
889
  const props = $xeSelect
856
890
  const reactData = $xeSelect.reactData
@@ -875,7 +909,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
875
909
  internalData.hpTimeout = setTimeout(() => {
876
910
  reactData.isAniVisible = false
877
911
  }, 350)
878
- $xeSelect.dispatchEvent('visible-change', { visible: false }, null)
912
+ $xeSelect.dispatchEvent('visible-change', { visible: false }, evnt || null)
879
913
  },
880
914
  changeEvent (evnt: Event, selectValue: any, option: any) {
881
915
  const $xeSelect = this
@@ -905,7 +939,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
905
939
 
906
940
  const { $event } = params
907
941
  $xeSelect.clearValueEvent($event, null)
908
- $xeSelect.hideOptionPanel()
942
+ $xeSelect.hideOptionPanel($event)
909
943
  },
910
944
  allCheckedPanelEvent (params: VxeButtonDefines.ClickEventParams) {
911
945
  const $xeSelect = this
@@ -913,7 +947,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
913
947
  const reactData = $xeSelect.reactData
914
948
 
915
949
  const { $event } = params
916
- const { multiple } = props
950
+ const { multiple, max, checkedClosable } = props
917
951
  const { optList } = reactData
918
952
  const valueField = $xeSelect.computeValueField
919
953
  if (multiple) {
@@ -924,6 +958,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
924
958
  const selectValue = option[valueField]
925
959
  // 检测是否超过最大可选数量
926
960
  if ($xeSelect.checkMaxLimit(currVlas)) {
961
+ if (VxeUI) {
962
+ VxeUI.modal.message({
963
+ content: getI18n('vxe.select.overSizeErr', [max]),
964
+ status: 'warning'
965
+ })
966
+ }
927
967
  break
928
968
  }
929
969
  if (!currVlas.some(val => val === selectValue)) {
@@ -931,15 +971,28 @@ export default /* define-vxe-component start */ defineVxeComponent({
931
971
  }
932
972
  }
933
973
  $xeSelect.changeEvent($event, currVlas, optList[0])
974
+ if (checkedClosable) {
975
+ $xeSelect.hideOptionPanel($event)
976
+ }
934
977
  $xeSelect.dispatchEvent('all-change', { value: currVlas }, $event)
935
978
  }
936
979
  },
937
980
  clearCheckedPanelEvent (params: VxeButtonDefines.ClickEventParams) {
938
981
  const $xeSelect = this
982
+ const props = $xeSelect
939
983
 
984
+ const { clearClosable } = props
940
985
  const { $event } = params
941
986
  $xeSelect.clearValueEvent($event, null)
942
- $xeSelect.hideOptionPanel()
987
+ if (clearClosable) {
988
+ $xeSelect.hideOptionPanel($event)
989
+ }
990
+ },
991
+ closePanelEvent (params: VxeButtonDefines.ClickEventParams) {
992
+ const $xeSelect = this
993
+
994
+ const { $event } = params
995
+ $xeSelect.hideOptionPanel($event)
943
996
  },
944
997
  changeOptionEvent (evnt: Event, option: any) {
945
998
  const $xeSelect = this
@@ -976,7 +1029,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
976
1029
  $xeSelect.changeEvent(evnt, multipleValue, option)
977
1030
  } else {
978
1031
  $xeSelect.changeEvent(evnt, selectValue, option)
979
- $xeSelect.hideOptionPanel()
1032
+ $xeSelect.hideOptionPanel(evnt)
980
1033
  }
981
1034
  reactData.reactFlag++
982
1035
  },
@@ -992,7 +1045,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
992
1045
  if (getEventTargetNode(evnt, panelElem).flag) {
993
1046
  $xeSelect.updatePlacement()
994
1047
  } else {
995
- $xeSelect.hideOptionPanel()
1048
+ $xeSelect.hideOptionPanel(evnt)
996
1049
  }
997
1050
  }
998
1051
  }
@@ -1011,7 +1064,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1011
1064
  reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag
1012
1065
  if (visiblePanel && !reactData.isActivated) {
1013
1066
  if (trigger !== 'manual') {
1014
- $xeSelect.hideOptionPanel()
1067
+ $xeSelect.hideOptionPanel(evnt)
1015
1068
  }
1016
1069
  }
1017
1070
  }
@@ -1112,7 +1165,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1112
1165
  if (visiblePanel) {
1113
1166
  if (isEsc || isTab) {
1114
1167
  if (trigger !== 'manual') {
1115
- $xeSelect.hideOptionPanel()
1168
+ $xeSelect.hideOptionPanel(evnt)
1116
1169
  }
1117
1170
  } else if (isEnter) {
1118
1171
  if (currentOption) {
@@ -1143,7 +1196,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1143
1196
  }
1144
1197
  }
1145
1198
  },
1146
- handleGlobalBlurEvent () {
1199
+ handleGlobalBlurEvent (evnt: Event) {
1147
1200
  const $xeSelect = this
1148
1201
  const reactData = $xeSelect.reactData
1149
1202
 
@@ -1152,7 +1205,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1152
1205
  const { trigger } = popupOpts
1153
1206
  if (visiblePanel) {
1154
1207
  if (trigger !== 'manual') {
1155
- $xeSelect.hideOptionPanel()
1208
+ $xeSelect.hideOptionPanel(evnt)
1156
1209
  }
1157
1210
  }
1158
1211
  if (isActivated) {
@@ -1278,7 +1331,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1278
1331
 
1279
1332
  $xeSelect.handleSearchEvent()
1280
1333
  }, 350, { trailing: true }),
1281
- togglePanelEvent (params: any) {
1334
+ togglePanelEvent (params: any) {
1282
1335
  const $xeSelect = this
1283
1336
  const reactData = $xeSelect.reactData
1284
1337
 
@@ -1288,7 +1341,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1288
1341
  reactData.triggerFocusPanel = false
1289
1342
  } else {
1290
1343
  if (reactData.visiblePanel) {
1291
- $xeSelect.hideOptionPanel()
1344
+ $xeSelect.hideOptionPanel($event)
1292
1345
  } else {
1293
1346
  $xeSelect.showOptionPanel()
1294
1347
  }
@@ -1614,6 +1667,68 @@ export default /* define-vxe-component start */ defineVxeComponent({
1614
1667
  //
1615
1668
  // Render
1616
1669
  //
1670
+ renderRadio (h: CreateElement, option: VxeOptionProps, isOptGroup: boolean, isChecked: boolean, isDisabled: boolean) {
1671
+ const $xeSelect = this
1672
+
1673
+ const radioOpts = $xeSelect.computeRadioOpts
1674
+ const { showIcon, trigger } = radioOpts
1675
+ if (isOptGroup || showIcon === false) {
1676
+ return renderEmptyElement($xeSelect)
1677
+ }
1678
+ const ons: {
1679
+ click?(evnt: MouseEvent): void
1680
+ } = {}
1681
+ if (!trigger || trigger === 'default') {
1682
+ ons.click = (evnt) => {
1683
+ if (!isDisabled && !isOptGroup) {
1684
+ $xeSelect.changeOptionEvent(evnt, option)
1685
+ }
1686
+ }
1687
+ }
1688
+ return h('div', {
1689
+ key: 2,
1690
+ class: ['vxe-select-option--radio', {
1691
+ 'is--checked': isChecked,
1692
+ 'is--disabled': isDisabled
1693
+ }],
1694
+ on: ons
1695
+ }, [
1696
+ h('span', {
1697
+ class: ['vxe-radio--icon', isChecked ? getIcon().RADIO_CHECKED : getIcon().RADIO_UNCHECKED]
1698
+ })
1699
+ ])
1700
+ },
1701
+ renderCheckbox (h: CreateElement, option: VxeOptionProps, isOptGroup: boolean, isChecked: boolean, isDisabled: boolean) {
1702
+ const $xeSelect = this
1703
+
1704
+ const checkboxOpts = $xeSelect.computeCheckboxOpts
1705
+ const { showIcon, trigger } = checkboxOpts
1706
+ if (isOptGroup || showIcon === false) {
1707
+ return renderEmptyElement($xeSelect)
1708
+ }
1709
+ const ons: {
1710
+ click?(evnt: MouseEvent): void
1711
+ } = {}
1712
+ if (!trigger || trigger === 'default') {
1713
+ ons.click = (evnt) => {
1714
+ if (!isDisabled && !isOptGroup) {
1715
+ $xeSelect.changeOptionEvent(evnt, option)
1716
+ }
1717
+ }
1718
+ }
1719
+ return h('div', {
1720
+ key: 3,
1721
+ class: ['vxe-select-option--checkbox', {
1722
+ 'is--checked': isChecked,
1723
+ 'is--disabled': isDisabled
1724
+ }],
1725
+ on: ons
1726
+ }, [
1727
+ h('span', {
1728
+ class: ['vxe-checkbox--icon', isChecked ? getIcon().CHECKBOX_CHECKED : getIcon().CHECKBOX_UNCHECKED]
1729
+ })
1730
+ ])
1731
+ },
1617
1732
  renderOption (h: CreateElement, list: VxeOptionProps[]) {
1618
1733
  const $xeSelect = this
1619
1734
  const props = $xeSelect
@@ -1621,7 +1736,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1621
1736
  const reactData = $xeSelect.reactData
1622
1737
  const internalData = $xeSelect.internalData
1623
1738
 
1624
- const { allowCreate, optionKey } = props
1739
+ const { allowCreate, optionKey, multiple, showRadio, showCheckbox } = props
1625
1740
  const { currentOption } = reactData
1626
1741
  const { optAddMaps } = internalData
1627
1742
  const optionOpts = $xeSelect.computeOptionOpts
@@ -1629,8 +1744,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
1629
1744
  const valueField = $xeSelect.computeValueField
1630
1745
  const groupLabelField = $xeSelect.computeGroupLabelField
1631
1746
  const selectVals = $xeSelect.computeSelectVals
1747
+ const radioOpts = $xeSelect.computeRadioOpts
1748
+ const checkboxOpts = $xeSelect.computeCheckboxOpts
1632
1749
  const { useKey, height } = optionOpts
1633
1750
  const optionSlot = slots.option
1751
+ const isCheckboxMode = showCheckbox && multiple
1752
+ const isRadioMode = showRadio && !multiple
1634
1753
  return list.map((option, cIndex) => {
1635
1754
  const { slots, className } = option
1636
1755
  const optid = $xeSelect.getOptId(option)
@@ -1641,16 +1760,53 @@ export default /* define-vxe-component start */ defineVxeComponent({
1641
1760
  const isVisible = isAdd || (!isOptGroup || isOptionVisible(option))
1642
1761
  const isDisabled = !isAdd && $xeSelect.checkOptionDisabled(isSelected, option)
1643
1762
  const defaultSlot = slots ? slots.default : null
1763
+ const optSlot = defaultSlot || optionSlot
1644
1764
  const optParams = { option, group: isOptGroup ? option : null, $select: $xeSelect }
1645
1765
  let optLabel = ''
1646
- let optVNs: string | VxeComponentSlotType[] = []
1647
- if (optionSlot) {
1648
- optVNs = $xeSelect.callSlot(optionSlot, optParams, h)
1649
- } else if (defaultSlot) {
1650
- optVNs = $xeSelect.callSlot(defaultSlot, optParams, h)
1766
+ const optVNs: VxeComponentSlotType[] = []
1767
+ if (isCheckboxMode) {
1768
+ optVNs.push($xeSelect.renderCheckbox(h, option, isOptGroup, isSelected, isDisabled))
1769
+ } else if (isRadioMode) {
1770
+ optVNs.push($xeSelect.renderRadio(h, option, isOptGroup, isSelected, isDisabled))
1771
+ }
1772
+ let otlbVNs: string | VxeComponentSlotType[] = []
1773
+ if (optSlot) {
1774
+ otlbVNs = $xeSelect.callSlot(optSlot, optParams, h)
1651
1775
  } else {
1652
1776
  optLabel = getFuncText(option[(isOptGroup ? groupLabelField : labelField) as 'label'] || optionValue)
1653
- optVNs = optLabel
1777
+ otlbVNs = [optLabel]
1778
+ }
1779
+ optVNs.push(
1780
+ h('div', {
1781
+ key: 1,
1782
+ class: 'vxe-select-option--label'
1783
+ }, otlbVNs)
1784
+ )
1785
+
1786
+ const ons: {
1787
+ mousedown(evnt: MouseEvent): void
1788
+ mouseenter(evnt: MouseEvent): void
1789
+ click?(evnt: MouseEvent): void
1790
+ } = {
1791
+ mousedown: (evnt) => {
1792
+ const isLeftBtn = evnt.button === 0
1793
+ if (isLeftBtn) {
1794
+ evnt.stopPropagation()
1795
+ }
1796
+ },
1797
+ mouseenter: () => {
1798
+ if (!isDisabled && !isOptGroup && !$xeSelect.isVMScrollProcess()) {
1799
+ $xeSelect.setCurrentOption(option)
1800
+ }
1801
+ }
1802
+ }
1803
+
1804
+ if (isCheckboxMode ? checkboxOpts.trigger === 'option' : (isRadioMode ? radioOpts.trigger === 'option' : true)) {
1805
+ ons.click = (evnt) => {
1806
+ if (!isDisabled && !isOptGroup) {
1807
+ $xeSelect.changeOptionEvent(evnt, option)
1808
+ }
1809
+ }
1654
1810
  }
1655
1811
 
1656
1812
  return isVisible
@@ -1672,29 +1828,12 @@ export default /* define-vxe-component start */ defineVxeComponent({
1672
1828
  height: toCssUnit(height)
1673
1829
  }
1674
1830
  : undefined,
1675
- on: {
1676
- mousedown: (evnt: MouseEvent) => {
1677
- const isLeftBtn = evnt.button === 0
1678
- if (isLeftBtn) {
1679
- evnt.stopPropagation()
1680
- }
1681
- },
1682
- click: (evnt: MouseEvent) => {
1683
- if (!isDisabled && !isOptGroup) {
1684
- $xeSelect.changeOptionEvent(evnt, option)
1685
- }
1686
- },
1687
- mouseenter: () => {
1688
- if (!isDisabled && !isOptGroup && !$xeSelect.isVMScrollProcess()) {
1689
- $xeSelect.setCurrentOption(option)
1690
- }
1691
- }
1692
- }
1831
+ on: ons
1693
1832
  }, allowCreate
1694
1833
  ? [
1695
1834
  h('span', {
1696
1835
  key: 1,
1697
- class: 'vxe-select-option--label'
1836
+ class: 'vxe-select-option--add-label'
1698
1837
  }, optVNs),
1699
1838
  isAdd
1700
1839
  ? h('span', {
@@ -1746,7 +1885,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1746
1885
  const slots = $xeSelect.$scopedSlots
1747
1886
  const reactData = $xeSelect.reactData
1748
1887
 
1749
- const { className, multiple, loading, filterable, showTotalButoon, showCheckedButoon, showClearButton } = props
1888
+ const { className, multiple, loading, filterable, showTotalButoon, showCheckedButoon, showClearButton, showCloseButton } = props
1750
1889
  const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight } = reactData
1751
1890
  const vSize = $xeSelect.computeSize
1752
1891
  const isDisabled = $xeSelect.computeIsDisabled
@@ -1865,7 +2004,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
1865
2004
  })
1866
2005
  ])
1867
2006
  : renderEmptyElement($xeSelect),
1868
- showTotalButoon || (showCheckedButoon && multiple) || showClearButton || headerSlot
2007
+ (showCheckedButoon && multiple) || showClearButton || headerSlot
1869
2008
  ? h('div', {
1870
2009
  class: 'vxe-select--panel-header'
1871
2010
  }, headerSlot
@@ -1874,11 +2013,6 @@ export default /* define-vxe-component start */ defineVxeComponent({
1874
2013
  h('div', {
1875
2014
  class: 'vxe-tree-select--header-button'
1876
2015
  }, [
1877
- showTotalButoon
1878
- ? h('div', {
1879
- class: 'vxe-tree-select--header-total'
1880
- }, getI18n('vxe.select.total', [selectVals.length, optList.length]))
1881
- : renderEmptyElement($xeSelect),
1882
2016
  h('div', {
1883
2017
  class: 'vxe-tree-select--header-btns'
1884
2018
  }, [
@@ -1933,10 +2067,37 @@ export default /* define-vxe-component start */ defineVxeComponent({
1933
2067
  }, $xeSelect.renderOpts(h))
1934
2068
  ])
1935
2069
  ]),
1936
- footerSlot
2070
+ footerSlot || showTotalButoon || (showCloseButton && multiple)
1937
2071
  ? h('div', {
1938
2072
  class: 'vxe-select--panel-footer'
1939
- }, $xeSelect.callSlot(footerSlot, {}, h))
2073
+ }, footerSlot
2074
+ ? $xeSelect.callSlot(footerSlot, {}, h)
2075
+ : [
2076
+ h('div', {
2077
+ class: 'vxe-select--footer-button'
2078
+ }, [
2079
+ showTotalButoon
2080
+ ? h('div', {
2081
+ class: 'vxe-select--total-btns'
2082
+ }, getI18n('vxe.select.total', [selectVals.length, optList.length]))
2083
+ : renderEmptyElement($xeSelect),
2084
+ showCloseButton && multiple
2085
+ ? h('div', {
2086
+ class: 'vxe-select--oper-btns'
2087
+ }, [
2088
+ h(VxeButtonComponent, {
2089
+ props: {
2090
+ content: getI18n('vxe.select.close'),
2091
+ mode: 'text'
2092
+ },
2093
+ on: {
2094
+ click: $xeSelect.closePanelEvent
2095
+ }
2096
+ })
2097
+ ])
2098
+ : renderEmptyElement($xeSelect)
2099
+ ])
2100
+ ])
1940
2101
  : renderEmptyElement($xeSelect)
1941
2102
  ])
1942
2103
  ]