vxe-pc-ui 4.11.43 → 4.11.45

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 (70) hide show
  1. package/es/button/src/button.js +18 -6
  2. package/es/date-picker/src/date-picker.js +17 -5
  3. package/es/date-range-picker/src/date-range-picker.js +17 -5
  4. package/es/icon/style.css +1 -1
  5. package/es/icon-picker/src/icon-picker.js +36 -74
  6. package/es/pulldown/src/pulldown.js +26 -6
  7. package/es/select/src/select.js +55 -16
  8. package/es/style.css +1 -1
  9. package/es/style.min.css +1 -1
  10. package/es/table-select/src/table-select.js +17 -7
  11. package/es/tree-select/src/tree-select.js +21 -7
  12. package/es/ui/index.js +1 -1
  13. package/es/ui/src/log.js +1 -1
  14. package/lib/button/src/button.js +18 -9
  15. package/lib/button/src/button.min.js +1 -1
  16. package/lib/date-picker/src/date-picker.js +19 -7
  17. package/lib/date-picker/src/date-picker.min.js +1 -1
  18. package/lib/date-range-picker/src/date-range-picker.js +19 -7
  19. package/lib/date-range-picker/src/date-range-picker.min.js +1 -1
  20. package/lib/icon/style/style.css +1 -1
  21. package/lib/icon/style/style.min.css +1 -1
  22. package/lib/icon-picker/src/icon-picker.js +39 -80
  23. package/lib/icon-picker/src/icon-picker.min.js +1 -1
  24. package/lib/index.umd.js +220 -157
  25. package/lib/index.umd.min.js +1 -1
  26. package/lib/pulldown/src/pulldown.js +26 -9
  27. package/lib/pulldown/src/pulldown.min.js +1 -1
  28. package/lib/select/src/select.js +57 -21
  29. package/lib/select/src/select.min.js +1 -1
  30. package/lib/style.css +1 -1
  31. package/lib/style.min.css +1 -1
  32. package/lib/table-select/src/table-select.js +18 -12
  33. package/lib/table-select/src/table-select.min.js +1 -1
  34. package/lib/tree-select/src/tree-select.js +22 -10
  35. package/lib/tree-select/src/tree-select.min.js +1 -1
  36. package/lib/ui/index.js +1 -1
  37. package/lib/ui/index.min.js +1 -1
  38. package/lib/ui/src/log.js +1 -1
  39. package/lib/ui/src/log.min.js +1 -1
  40. package/package.json +1 -1
  41. package/packages/button/src/button.ts +19 -6
  42. package/packages/date-picker/src/date-picker.ts +18 -5
  43. package/packages/date-range-picker/src/date-range-picker.ts +18 -5
  44. package/packages/icon-picker/src/icon-picker.ts +37 -71
  45. package/packages/pulldown/src/pulldown.ts +27 -6
  46. package/packages/select/src/select.ts +54 -16
  47. package/packages/table-select/src/table-select.ts +17 -7
  48. package/packages/tree-select/src/tree-select.ts +21 -7
  49. package/types/components/button.d.ts +18 -0
  50. package/types/components/date-picker.d.ts +8 -0
  51. package/types/components/date-range-picker.d.ts +8 -0
  52. package/types/components/icon-picker.d.ts +24 -0
  53. package/types/components/pulldown.d.ts +28 -0
  54. package/types/components/select.d.ts +70 -0
  55. package/types/components/table-select.d.ts +16 -1
  56. package/types/components/table.d.ts +2 -2
  57. package/types/components/tree-select.d.ts +20 -2
  58. package/types/components/upload.d.ts +1 -1
  59. /package/es/icon/{iconfont.1768192734102.ttf → iconfont.1768381374840.ttf} +0 -0
  60. /package/es/icon/{iconfont.1768192734102.woff → iconfont.1768381374840.woff} +0 -0
  61. /package/es/icon/{iconfont.1768192734102.woff2 → iconfont.1768381374840.woff2} +0 -0
  62. /package/es/{iconfont.1768192734102.ttf → iconfont.1768381374840.ttf} +0 -0
  63. /package/es/{iconfont.1768192734102.woff → iconfont.1768381374840.woff} +0 -0
  64. /package/es/{iconfont.1768192734102.woff2 → iconfont.1768381374840.woff2} +0 -0
  65. /package/lib/icon/style/{iconfont.1768192734102.ttf → iconfont.1768381374840.ttf} +0 -0
  66. /package/lib/icon/style/{iconfont.1768192734102.woff → iconfont.1768381374840.woff} +0 -0
  67. /package/lib/icon/style/{iconfont.1768192734102.woff2 → iconfont.1768381374840.woff2} +0 -0
  68. /package/lib/{iconfont.1768192734102.ttf → iconfont.1768381374840.ttf} +0 -0
  69. /package/lib/{iconfont.1768192734102.woff → iconfont.1768381374840.woff} +0 -0
  70. /package/lib/{iconfont.1768192734102.woff2 → iconfont.1768381374840.woff2} +0 -0
@@ -117,6 +117,7 @@ export default defineVxeComponent({
117
117
  default: null
118
118
  },
119
119
 
120
+ popupConfig: Object as PropType<VxeDateRangePickerPropTypes.PopupConfig>,
120
121
  shortcutConfig: Object as PropType<VxeDateRangePickerPropTypes.ShortcutConfig>
121
122
  },
122
123
  emits: [
@@ -195,6 +196,10 @@ export default defineVxeComponent({
195
196
 
196
197
  const computeBtnTransfer = computed(() => {
197
198
  const { transfer } = props
199
+ const popupOpts = computePopupOpts.value
200
+ if (XEUtils.isBoolean(popupOpts.transfer)) {
201
+ return popupOpts.transfer
202
+ }
198
203
  if (transfer === null) {
199
204
  const globalTransfer = getConfig().dateRangePicker.transfer
200
205
  if (XEUtils.isBoolean(globalTransfer)) {
@@ -292,6 +297,10 @@ export default defineVxeComponent({
292
297
  return immediate
293
298
  })
294
299
 
300
+ const computePopupOpts = computed(() => {
301
+ return Object.assign({}, getConfig().dateRangePicker.popupConfig, props.popupConfig)
302
+ })
303
+
295
304
  const computeShortcutOpts = computed(() => {
296
305
  return Object.assign({}, getConfig().dateRangePicker.shortcutConfig, props.shortcutConfig)
297
306
  })
@@ -718,9 +727,10 @@ export default defineVxeComponent({
718
727
 
719
728
  // 弹出面板
720
729
  const updateZindex = () => {
721
- const { zIndex } = props
722
- if (zIndex) {
723
- reactData.panelIndex = zIndex
730
+ const popupOpts = computePopupOpts.value
731
+ const customZIndex = popupOpts.zIndex || props.zIndex
732
+ if (customZIndex) {
733
+ reactData.panelIndex = XEUtils.toNumber(customZIndex)
724
734
  } else if (reactData.panelIndex < getLastZIndex()) {
725
735
  reactData.panelIndex = nextZIndex()
726
736
  }
@@ -732,9 +742,10 @@ export default defineVxeComponent({
732
742
  const targetElem = refInputTarget.value
733
743
  const panelElem = refInputPanel.value
734
744
  const btnTransfer = computeBtnTransfer.value
745
+ const popupOpts = computePopupOpts.value
735
746
  const handleStyle = () => {
736
747
  const ppObj = updatePanelPlacement(targetElem, panelElem, {
737
- placement,
748
+ placement: popupOpts.placement || placement,
738
749
  teleportTo: btnTransfer
739
750
  })
740
751
  const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
@@ -917,6 +928,7 @@ export default defineVxeComponent({
917
928
  const isDateTimeType = computeIsDateTimeType.value
918
929
  const defaultDates = computeDefaultDates.value
919
930
  const defaultTimes = computeDefaultTimes.value
931
+ const popupOpts = computePopupOpts.value
920
932
  const { startLabel, endLabel } = panelLabelObj
921
933
  const { position } = shortcutOpts
922
934
  const headerSlot = slots.header
@@ -925,6 +937,7 @@ export default defineVxeComponent({
925
937
  const bottomSlot = slots.bottom
926
938
  const leftSlot = slots.left
927
939
  const rightSlot = slots.right
940
+ const ppClassName = popupOpts.className
928
941
  const [sdDate, edDate] = defaultDates
929
942
  const [sdTime, edTime] = defaultTimes
930
943
  const hasShortcutBtn = shortcutList.length > 0
@@ -936,7 +949,7 @@ export default defineVxeComponent({
936
949
  }, [
937
950
  h('div', {
938
951
  ref: refInputPanel,
939
- class: ['vxe-table--ignore-clear vxe-date-range-picker--panel', `type--${type}`, {
952
+ class: ['vxe-table--ignore-clear vxe-date-range-picker--panel', `type--${type}`, ppClassName ? (XEUtils.isFunction(ppClassName) ? ppClassName({ $dateRangePicker: $xeDateRangePicker }) : ppClassName) : '', {
940
953
  [`size--${vSize}`]: vSize,
941
954
  'is--transfer': btnTransfer,
942
955
  'ani--leave': isAniVisible,
@@ -2,7 +2,7 @@ import { h, Teleport, PropType, ref, inject, watch, computed, provide, onUnmount
2
2
  import { defineVxeComponent } from '../../ui/src/comp'
3
3
  import XEUtils from 'xe-utils'
4
4
  import { getConfig, getIcon, getI18n, globalEvents, createEvent, renderer, useSize, GLOBAL_EVENT_KEYS, renderEmptyElement } from '../../ui'
5
- import { getEventTargetNode, getAbsolutePos } from '../../ui/src/dom'
5
+ import { getEventTargetNode, updatePanelPlacement } from '../../ui/src/dom'
6
6
  import { getLastZIndex, nextZIndex, getFuncText } from '../../ui/src/utils'
7
7
  import { getSlotVNs } from '../../ui/src/vn'
8
8
 
@@ -20,6 +20,10 @@ export default defineVxeComponent({
20
20
  default: () => getConfig().iconPicker.size || getConfig().size
21
21
  },
22
22
  className: [String, Function] as PropType<VxeIconPickerPropTypes.ClassName>,
23
+ /**
24
+ * 已废弃,请使用 popupConfig.className
25
+ * @deprecated
26
+ */
23
27
  popupClassName: [String, Function] as PropType<VxeIconPickerPropTypes.PopupClassName>,
24
28
  showIconTitle: {
25
29
  type: Boolean as PropType<VxeIconPickerPropTypes.ShowIconTitle>,
@@ -35,6 +39,7 @@ export default defineVxeComponent({
35
39
  },
36
40
  icons: Array as PropType<VxeIconPickerPropTypes.Icons>,
37
41
  placement: String as PropType<VxeIconPickerPropTypes.Placement>,
42
+ popupConfig: Object as PropType<VxeIconPickerPropTypes.PopupConfig>,
38
43
  transfer: {
39
44
  type: Boolean as PropType<VxeIconPickerPropTypes.Transfer>,
40
45
  default: null
@@ -116,6 +121,10 @@ export default defineVxeComponent({
116
121
 
117
122
  const computeBtnTransfer = computed(() => {
118
123
  const { transfer } = props
124
+ const popupOpts = computePopupOpts.value
125
+ if (XEUtils.isBoolean(popupOpts.transfer)) {
126
+ return popupOpts.transfer
127
+ }
119
128
  if (transfer === null) {
120
129
  const globalTransfer = getConfig().iconPicker.transfer
121
130
  if (XEUtils.isBoolean(globalTransfer)) {
@@ -160,6 +169,10 @@ export default defineVxeComponent({
160
169
  })
161
170
  })
162
171
 
172
+ const computePopupOpts = computed(() => {
173
+ return Object.assign({}, getConfig().iconPicker.popupConfig, props.popupConfig)
174
+ })
175
+
163
176
  const computeIconGroupList = computed(() => {
164
177
  const iconList = computeIconList.value
165
178
  return XEUtils.chunk(iconList, 4)
@@ -178,74 +191,25 @@ export default defineVxeComponent({
178
191
  }
179
192
 
180
193
  const updatePlacement = () => {
181
- return nextTick().then(() => {
182
- const { placement } = props
183
- const { panelIndex } = reactData
184
- const el = refElem.value
185
- const panelElem = refOptionPanel.value
186
- const btnTransfer = computeBtnTransfer.value
187
- if (panelElem && el) {
188
- const targetHeight = el.offsetHeight
189
- const targetWidth = el.offsetWidth
190
- const panelHeight = panelElem.offsetHeight
191
- const panelWidth = panelElem.offsetWidth
192
- const marginSize = 5
193
- const panelStyle: { [key: string]: any } = {
194
- zIndex: panelIndex
195
- }
196
- const { boundingTop, boundingLeft, visibleHeight, visibleWidth } = getAbsolutePos(el)
197
- let panelPlacement = 'bottom'
198
- if (btnTransfer) {
199
- let left = boundingLeft
200
- let top = boundingTop + targetHeight
201
- if (placement === 'top') {
202
- panelPlacement = 'top'
203
- top = boundingTop - panelHeight
204
- } else if (!placement) {
205
- // 如果下面不够放,则向上
206
- if (top + panelHeight + marginSize > visibleHeight) {
207
- panelPlacement = 'top'
208
- top = boundingTop - panelHeight
209
- }
210
- // 如果上面不够放,则向下(优先)
211
- if (top < marginSize) {
212
- panelPlacement = 'bottom'
213
- top = boundingTop + targetHeight
214
- }
215
- }
216
- // 如果溢出右边
217
- if (left + panelWidth + marginSize > visibleWidth) {
218
- left -= left + panelWidth + marginSize - visibleWidth
219
- }
220
- // 如果溢出左边
221
- if (left < marginSize) {
222
- left = marginSize
223
- }
224
- Object.assign(panelStyle, {
225
- left: `${left}px`,
226
- top: `${top}px`,
227
- minWidth: `${targetWidth}px`
228
- })
229
- } else {
230
- if (placement === 'top') {
231
- panelPlacement = 'top'
232
- panelStyle.bottom = `${targetHeight}px`
233
- } else if (!placement) {
234
- // 如果下面不够放,则向上
235
- if (boundingTop + targetHeight + panelHeight > visibleHeight) {
236
- // 如果上面不够放,则向下(优先)
237
- if (boundingTop - targetHeight - panelHeight > marginSize) {
238
- panelPlacement = 'top'
239
- panelStyle.bottom = `${targetHeight}px`
240
- }
241
- }
242
- }
243
- }
244
- reactData.panelStyle = panelStyle
245
- reactData.panelPlacement = panelPlacement
246
- return nextTick()
247
- }
248
- })
194
+ const { placement } = props
195
+ const { panelIndex } = reactData
196
+ const targetElem = refElem.value
197
+ const panelElem = refOptionPanel.value
198
+ const btnTransfer = computeBtnTransfer.value
199
+ const popupOpts = computePopupOpts.value
200
+ const handleStyle = () => {
201
+ const ppObj = updatePanelPlacement(targetElem, panelElem, {
202
+ placement: popupOpts.placement || placement,
203
+ teleportTo: btnTransfer
204
+ })
205
+ const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
206
+ zIndex: panelIndex
207
+ })
208
+ reactData.panelStyle = panelStyle
209
+ reactData.panelPlacement = ppObj.placement
210
+ }
211
+ handleStyle()
212
+ return nextTick().then(handleStyle)
249
213
  }
250
214
 
251
215
  const showOptionPanel = () => {
@@ -535,13 +499,15 @@ export default defineVxeComponent({
535
499
  }
536
500
 
537
501
  const renderVN = () => {
538
- const { className, popupClassName, clearable } = props
502
+ const { className, clearable } = props
539
503
  const { initialized, isActivated, isAniVisible, visiblePanel, selectIcon } = reactData
540
504
  const vSize = computeSize.value
541
505
  const isDisabled = computeIsDisabled.value
542
506
  const btnTransfer = computeBtnTransfer.value
543
507
  const formReadonly = computeFormReadonly.value
544
508
  const inpPlaceholder = computeInpPlaceholder.value
509
+ const popupOpts = computePopupOpts.value
510
+ const ppClassName = popupOpts.className || props.popupClassName
545
511
 
546
512
  if (formReadonly) {
547
513
  return h('div', {
@@ -604,7 +570,7 @@ export default defineVxeComponent({
604
570
  }, [
605
571
  h('div', {
606
572
  ref: refOptionPanel,
607
- class: ['vxe-table--ignore-clear vxe-ico-picker--panel', popupClassName ? (XEUtils.isFunction(popupClassName) ? popupClassName({ $iconPicker: $xeIconPicker }) : popupClassName) : '', {
573
+ class: ['vxe-table--ignore-clear vxe-ico-picker--panel', ppClassName ? (XEUtils.isFunction(ppClassName) ? ppClassName({ $iconPicker: $xeIconPicker }) : ppClassName) : '', {
608
574
  [`size--${vSize}`]: vSize,
609
575
  'is--transfer': btnTransfer,
610
576
  'ani--leave': isAniVisible,
@@ -18,6 +18,10 @@ export default defineVxeComponent({
18
18
  type: String as PropType<VxePulldownPropTypes.Trigger>,
19
19
  default: getConfig().pulldown.trigger
20
20
  },
21
+ /**
22
+ * 已废弃,请使用 popupConfig.zIndex
23
+ * @deprecated
24
+ */
21
25
  zIndex: Number as PropType<VxePulldownPropTypes.ZIndex>,
22
26
  size: {
23
27
  type: String as PropType<VxePulldownPropTypes.Size>,
@@ -28,8 +32,13 @@ export default defineVxeComponent({
28
32
  type: [String, Function] as PropType<VxePulldownPropTypes.ClassName>,
29
33
  default: getConfig().pulldown.className
30
34
  },
35
+ /**
36
+ * 已废弃,请使用 popupConfig.className
37
+ * @deprecated
38
+ */
31
39
  popupClassName: [String, Function] as PropType<VxePulldownPropTypes.PopupClassName>,
32
40
  showPopupShadow: Boolean as PropType<VxePulldownPropTypes.ShowPopupShadow>,
41
+ popupConfig: Object as PropType<VxePulldownPropTypes.PopupConfig>,
33
42
  destroyOnClose: {
34
43
  type: Boolean as PropType<VxePulldownPropTypes.DestroyOnClose>,
35
44
  default: getConfig().pulldown.destroyOnClose
@@ -79,6 +88,10 @@ export default defineVxeComponent({
79
88
 
80
89
  const computeBtnTransfer = computed(() => {
81
90
  const { transfer } = props
91
+ const popupOpts = computePopupOpts.value
92
+ if (XEUtils.isBoolean(popupOpts.transfer)) {
93
+ return popupOpts.transfer
94
+ }
82
95
  if (transfer === null) {
83
96
  const globalTransfer = getConfig().pulldown.transfer
84
97
  if (XEUtils.isBoolean(globalTransfer)) {
@@ -91,6 +104,10 @@ export default defineVxeComponent({
91
104
  return transfer
92
105
  })
93
106
 
107
+ const computePopupOpts = computed(() => {
108
+ return Object.assign({}, getConfig().pulldown.popupConfig, props.popupConfig)
109
+ })
110
+
94
111
  const refMaps: PulldownPrivateRef = {
95
112
  refElem
96
113
  }
@@ -107,9 +124,10 @@ export default defineVxeComponent({
107
124
  let pulldownMethods = {} as PulldownMethods
108
125
 
109
126
  const updateZindex = () => {
110
- const { zIndex } = props
111
- if (zIndex) {
112
- reactData.panelIndex = zIndex
127
+ const popupOpts = computePopupOpts.value
128
+ const customZIndex = popupOpts.zIndex || props.zIndex
129
+ if (customZIndex) {
130
+ reactData.panelIndex = XEUtils.toNumber(customZIndex)
113
131
  } else if (reactData.panelIndex < getLastZIndex()) {
114
132
  reactData.panelIndex = nextZIndex()
115
133
  }
@@ -128,9 +146,10 @@ export default defineVxeComponent({
128
146
  const targetElem = refPulldownContent.value
129
147
  const panelElem = refPulldownPanel.value
130
148
  const btnTransfer = computeBtnTransfer.value
149
+ const popupOpts = computePopupOpts.value
131
150
  const handleStyle = () => {
132
151
  const ppObj = updatePanelPlacement(targetElem, panelElem, {
133
- placement,
152
+ placement: popupOpts.placement || placement,
134
153
  teleportTo: btnTransfer
135
154
  })
136
155
  const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
@@ -338,14 +357,16 @@ export default defineVxeComponent({
338
357
  }
339
358
 
340
359
  const renderVN = () => {
341
- const { className, options, popupClassName, showPopupShadow, destroyOnClose, disabled } = props
360
+ const { className, options, showPopupShadow, destroyOnClose, disabled } = props
342
361
  const { initialized, isActivated, isAniVisible, visiblePanel, panelStyle, panelPlacement } = reactData
343
362
  const btnTransfer = computeBtnTransfer.value
344
363
  const vSize = computeSize.value
364
+ const popupOpts = computePopupOpts.value
345
365
  const defaultSlot = slots.default
346
366
  const headerSlot = slots.header
347
367
  const footerSlot = slots.footer
348
368
  const dropdownSlot = slots.dropdown
369
+ const ppClassName = popupOpts.className || props.popupClassName
349
370
 
350
371
  return h('div', {
351
372
  ref: refElem,
@@ -367,7 +388,7 @@ export default defineVxeComponent({
367
388
  }, [
368
389
  h('div', {
369
390
  ref: refPulldownPanel,
370
- class: ['vxe-table--ignore-clear vxe-pulldown--panel', popupClassName ? (XEUtils.isFunction(popupClassName) ? popupClassName({ $pulldown: $xePulldown }) : popupClassName) : '', {
391
+ class: ['vxe-table--ignore-clear vxe-pulldown--panel', ppClassName ? (XEUtils.isFunction(ppClassName) ? ppClassName({ $pulldown: $xePulldown }) : ppClassName) : '', {
371
392
  [`size--${vSize}`]: vSize,
372
393
  'is--transfer': btnTransfer,
373
394
  'ani--leave': isAniVisible,
@@ -80,18 +80,31 @@ export default defineVxeComponent({
80
80
  optionGroupProps: Object as PropType<VxeSelectPropTypes.OptionGroupProps>,
81
81
  optionConfig: Object as PropType<VxeSelectPropTypes.OptionConfig>,
82
82
  className: [String, Function] as PropType<VxeSelectPropTypes.ClassName>,
83
+ /**
84
+ * 已废弃,请使用 popupConfig.className
85
+ * @deprecated
86
+ */
83
87
  popupClassName: [String, Function] as PropType<VxeSelectPropTypes.PopupClassName>,
84
88
  max: {
85
89
  type: [String, Number] as PropType<VxeSelectPropTypes.Max>,
86
90
  default: null
87
91
  },
92
+ /**
93
+ * 已废弃,请使用 popupConfig.zIndex
94
+ * @deprecated
95
+ */
88
96
  zIndex: Number as PropType<VxeSelectPropTypes.ZIndex>,
89
97
  size: {
90
98
  type: String as PropType<VxeSelectPropTypes.Size>,
91
99
  default: () => getConfig().select.size || getConfig().size
92
100
  },
93
101
  filterable: Boolean as PropType<VxeSelectPropTypes.Filterable>,
102
+ /**
103
+ * 已废弃,被 filter-config.filterMethod 替换
104
+ * @deprecated
105
+ */
94
106
  filterMethod: Function as PropType<VxeSelectPropTypes.FilterMethod>,
107
+ filterConfig: Object as PropType<VxeSelectPropTypes.FilterConfig>,
95
108
  remote: Boolean as PropType<VxeSelectPropTypes.Remote>,
96
109
  remoteConfig: Object as PropType<VxeSelectPropTypes.RemoteConfig>,
97
110
  emptyText: String as PropType<VxeSelectPropTypes.EmptyText>,
@@ -227,6 +240,10 @@ export default defineVxeComponent({
227
240
 
228
241
  const computeBtnTransfer = computed(() => {
229
242
  const { transfer } = props
243
+ const popupOpts = computePopupOpts.value
244
+ if (XEUtils.isBoolean(popupOpts.transfer)) {
245
+ return popupOpts.transfer
246
+ }
230
247
  if (transfer === null) {
231
248
  const globalTransfer = getConfig().select.transfer
232
249
  if (XEUtils.isBoolean(globalTransfer)) {
@@ -288,7 +305,7 @@ export default defineVxeComponent({
288
305
  })
289
306
 
290
307
  const computePopupOpts = computed(() => {
291
- return Object.assign({}, getConfig().treeSelect.popupConfig, props.popupConfig)
308
+ return Object.assign({}, getConfig().select.popupConfig, props.popupConfig)
292
309
  })
293
310
 
294
311
  const computeVirtualYOpts = computed(() => {
@@ -299,6 +316,10 @@ export default defineVxeComponent({
299
316
  return Object.assign({}, getConfig().select.remoteConfig, props.remoteConfig)
300
317
  })
301
318
 
319
+ const computeFilterOpts = computed(() => {
320
+ return Object.assign({}, getConfig().select.filterConfig, props.filterConfig)
321
+ })
322
+
302
323
  const computeOptionOpts = computed(() => {
303
324
  return Object.assign({}, getConfig().select.optionConfig, props.optionConfig)
304
325
  })
@@ -481,18 +502,20 @@ export default defineVxeComponent({
481
502
  * 处理选项,当选项被动态显示/隐藏时可能会用到
482
503
  */
483
504
  const handleOption = () => {
484
- const { remote, modelValue, filterable, filterMethod } = props
505
+ const { remote, modelValue, filterable } = props
485
506
  const { searchValue } = reactData
486
507
  const { fullData, optFullValMaps } = internalData
487
508
  const labelField = computeLabelField.value
488
509
  const valueField = computeValueField.value
510
+ const filterOpts = computeFilterOpts.value
511
+ const frMethod = filterOpts.filterMethod || props.filterMethod
489
512
  const searchStr = `${searchValue || ''}`.toLowerCase()
490
513
  let avList: any[] = []
491
514
  if (remote) {
492
515
  avList = fullData.filter(isOptionVisible)
493
516
  } else {
494
- if (filterable && filterMethod) {
495
- avList = fullData.filter(option => isOptionVisible(option) && filterMethod({ $select: $xeSelect, group: null, option, searchValue, value: modelValue }))
517
+ if (filterable && frMethod) {
518
+ avList = fullData.filter(option => isOptionVisible(option) && frMethod({ $select: $xeSelect, group: null, option, searchValue, value: modelValue }))
496
519
  } else if (filterable) {
497
520
  avList = fullData.filter(option => isOptionVisible(option) && (!searchStr || `${option[labelField] || option[valueField]}`.toLowerCase().indexOf(searchStr) > -1))
498
521
  } else {
@@ -516,9 +539,10 @@ export default defineVxeComponent({
516
539
  }
517
540
 
518
541
  const updateZIndex = () => {
519
- const { zIndex } = props
520
- if (zIndex) {
521
- reactData.panelIndex = zIndex
542
+ const popupOpts = computePopupOpts.value
543
+ const customZIndex = popupOpts.zIndex || props.zIndex
544
+ if (customZIndex) {
545
+ reactData.panelIndex = XEUtils.toNumber(customZIndex)
522
546
  } else if (reactData.panelIndex < getLastZIndex()) {
523
547
  reactData.panelIndex = nextZIndex()
524
548
  }
@@ -530,9 +554,10 @@ export default defineVxeComponent({
530
554
  const targetElem = refElem.value
531
555
  const panelElem = refOptionPanel.value
532
556
  const btnTransfer = computeBtnTransfer.value
557
+ const popupOpts = computePopupOpts.value
533
558
  const handleStyle = () => {
534
559
  const ppObj = updatePanelPlacement(targetElem, panelElem, {
535
- placement,
560
+ placement: popupOpts.placement || placement,
536
561
  teleportTo: btnTransfer
537
562
  })
538
563
  const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
@@ -575,7 +600,7 @@ export default defineVxeComponent({
575
600
  reactData.isActivated = true
576
601
  reactData.isAniVisible = true
577
602
  if (filterable) {
578
- if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !fullData.length) {
603
+ if (remote && remoteOpts.enabled && ((remoteOpts.autoLoad && !fullData.length) || (fullData.length && remoteOpts.clearOnClose))) {
579
604
  handleSearchEvent()
580
605
  } else {
581
606
  handleOption()
@@ -600,7 +625,20 @@ export default defineVxeComponent({
600
625
  }
601
626
 
602
627
  const hideOptionPanel = () => {
603
- reactData.searchValue = ''
628
+ const { filterable, remote } = props
629
+ const filterOpts = computeFilterOpts.value
630
+ const remoteOpts = computeRemoteOpts.value
631
+ if (remote) {
632
+ if (remoteOpts.clearOnClose) {
633
+ reactData.searchValue = ''
634
+ }
635
+ } else if (filterable) {
636
+ if (filterOpts.clearOnClose) {
637
+ reactData.searchValue = ''
638
+ }
639
+ } else {
640
+ reactData.searchValue = ''
641
+ }
604
642
  reactData.searchLoading = false
605
643
  reactData.visiblePanel = false
606
644
  internalData.hpTimeout = setTimeout(() => {
@@ -918,14 +956,14 @@ export default defineVxeComponent({
918
956
  }
919
957
 
920
958
  const handleSearchEvent = () => {
921
- const { modelValue, remote, remoteMethod } = props
959
+ const { modelValue, remote } = props
922
960
  const { searchValue } = reactData
923
961
  const remoteOpts = computeRemoteOpts.value
924
- const queryMethod = remoteOpts.queryMethod || remoteMethod
925
- if (remote && queryMethod && remoteOpts.enabled) {
962
+ const qyMethod = remoteOpts.queryMethod || props.remoteMethod
963
+ if (remote && qyMethod && remoteOpts.enabled) {
926
964
  reactData.searchLoading = true
927
965
  Promise.resolve(
928
- queryMethod({ $select: $xeSelect, searchValue, value: modelValue })
966
+ qyMethod({ $select: $xeSelect, searchValue, value: modelValue })
929
967
  ).then(() => nextTick())
930
968
  .catch(() => nextTick())
931
969
  .finally(() => {
@@ -1417,11 +1455,11 @@ export default defineVxeComponent({
1417
1455
  const inpPlaceholder = computeInpPlaceholder.value
1418
1456
  const popupWrapperStyle = computePopupWrapperStyle.value
1419
1457
  const popupOpts = computePopupOpts.value
1420
- const popupClassName = popupOpts.className || props.popupClassName
1421
1458
  const defaultSlot = slots.default
1422
1459
  const headerSlot = slots.header
1423
1460
  const footerSlot = slots.footer
1424
1461
  const prefixSlot = slots.prefix
1462
+ const ppClassName = popupOpts.className || props.popupClassName
1425
1463
  if (formReadonly) {
1426
1464
  return h('div', {
1427
1465
  ref: refElem,
@@ -1481,7 +1519,7 @@ export default defineVxeComponent({
1481
1519
  }, [
1482
1520
  h('div', {
1483
1521
  ref: refOptionPanel,
1484
- class: ['vxe-table--ignore-clear vxe-select--panel', popupClassName ? (XEUtils.isFunction(popupClassName) ? popupClassName({ $select: $xeSelect }) : popupClassName) : '', {
1522
+ class: ['vxe-table--ignore-clear vxe-select--panel', ppClassName ? (XEUtils.isFunction(ppClassName) ? ppClassName({ $select: $xeSelect }) : ppClassName) : '', {
1485
1523
  [`size--${vSize}`]: vSize,
1486
1524
  'is--transfer': btnTransfer,
1487
1525
  'ani--leave': !loading && isAniVisible,
@@ -50,6 +50,10 @@ export default defineVxeComponent({
50
50
  options: Array as PropType<VxeTableSelectPropTypes.Options>,
51
51
  optionProps: Object as PropType<VxeTableSelectPropTypes.OptionProps>,
52
52
  lazyOptions: Array as PropType<VxeTableSelectPropTypes.LazyOptions>,
53
+ /**
54
+ * 已废弃,请使用 popupConfig.zIndex
55
+ * @deprecated
56
+ */
53
57
  zIndex: Number as PropType<VxeTableSelectPropTypes.ZIndex>,
54
58
  size: {
55
59
  type: String as PropType<VxeTableSelectPropTypes.Size>,
@@ -139,8 +143,12 @@ export default defineVxeComponent({
139
143
 
140
144
  const computeBtnTransfer = computed(() => {
141
145
  const { transfer } = props
146
+ const popupOpts = computePopupOpts.value
147
+ if (XEUtils.isBoolean(popupOpts.transfer)) {
148
+ return popupOpts.transfer
149
+ }
142
150
  if (transfer === null) {
143
- const globalTransfer = getConfig().select.transfer
151
+ const globalTransfer = getConfig().tableSelect.transfer
144
152
  if (XEUtils.isBoolean(globalTransfer)) {
145
153
  return globalTransfer
146
154
  }
@@ -407,9 +415,10 @@ export default defineVxeComponent({
407
415
  }
408
416
 
409
417
  const updateZindex = () => {
410
- const { zIndex } = props
411
- if (zIndex) {
412
- reactData.panelIndex = zIndex
418
+ const popupOpts = computePopupOpts.value
419
+ const customZIndex = popupOpts.zIndex || props.zIndex
420
+ if (customZIndex) {
421
+ reactData.panelIndex = XEUtils.toNumber(customZIndex)
413
422
  } else if (reactData.panelIndex < getLastZIndex()) {
414
423
  reactData.panelIndex = nextZIndex()
415
424
  }
@@ -421,9 +430,10 @@ export default defineVxeComponent({
421
430
  const targetElem = refElem.value
422
431
  const panelElem = refOptionPanel.value
423
432
  const btnTransfer = computeBtnTransfer.value
433
+ const popupOpts = computePopupOpts.value
424
434
  const handleStyle = () => {
425
435
  const ppObj = updatePanelPlacement(targetElem, panelElem, {
426
- placement,
436
+ placement: popupOpts.placement || placement,
427
437
  teleportTo: btnTransfer
428
438
  })
429
439
  const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
@@ -620,13 +630,13 @@ export default defineVxeComponent({
620
630
  const btnTransfer = computeBtnTransfer.value
621
631
  const formReadonly = computeFormReadonly.value
622
632
  const popupOpts = computePopupOpts.value
623
- const { className: popupClassName } = popupOpts
624
633
  const selectGridOpts = computeSelectGridOpts.value
625
634
  const rowOpts = computeRowOpts.value
626
635
  const popupWrapperStyle = computePopupWrapperStyle.value
627
636
  const headerSlot = slots.header
628
637
  const footerSlot = slots.footer
629
638
  const prefixSlot = slots.prefix
639
+ const ppClassName = popupOpts.className
630
640
 
631
641
  if (formReadonly) {
632
642
  return h('div', {
@@ -674,7 +684,7 @@ export default defineVxeComponent({
674
684
  }, [
675
685
  h('div', {
676
686
  ref: refOptionPanel,
677
- class: ['vxe-table--ignore-clear vxe-table-select--panel', popupClassName ? (XEUtils.isFunction(popupClassName) ? popupClassName({ $tableSelect: $xeTableSelect }) : popupClassName) : '', {
687
+ class: ['vxe-table--ignore-clear vxe-table-select--panel', ppClassName ? (XEUtils.isFunction(ppClassName) ? ppClassName({ $tableSelect: $xeTableSelect }) : ppClassName) : '', {
678
688
  [`size--${vSize}`]: vSize,
679
689
  'is--transfer': btnTransfer,
680
690
  'ani--leave': !loading && isAniVisible,