vxe-pc-ui 4.7.4 → 4.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.
- package/es/icon/style.css +1 -1
- package/es/language/ar-EG.js +19 -1
- package/es/language/de-DE.js +19 -1
- package/es/language/en-US.js +20 -2
- package/es/language/es-ES.js +19 -1
- package/es/language/fr-FR.js +19 -1
- package/es/language/hu-HU.js +19 -1
- package/es/language/hy-AM.js +18 -0
- package/es/language/id-ID.js +19 -1
- package/es/language/it-IT.js +19 -1
- package/es/language/ja-JP.js +19 -1
- package/es/language/ko-KR.js +19 -1
- package/es/language/ms-MY.js +19 -1
- package/es/language/nb-NO.js +19 -1
- package/es/language/pt-BR.js +19 -1
- package/es/language/ru-RU.js +19 -1
- package/es/language/th-TH.js +19 -1
- package/es/language/ug-CN.js +19 -1
- package/es/language/uk-UA.js +19 -1
- package/es/language/uz-UZ.js +19 -1
- package/es/language/vi-VN.js +19 -1
- package/es/language/zh-CHT.js +19 -1
- package/es/language/zh-CN.js +18 -0
- package/es/list/src/list.js +1 -1
- package/es/select/src/select.js +135 -42
- package/es/select/style.css +21 -0
- package/es/select/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tree/src/tree.js +918 -407
- package/es/tree/src/util.js +32 -0
- package/es/tree/style.css +23 -26
- package/es/tree/style.min.css +1 -1
- package/es/tree-select/src/tree-select.js +227 -18
- package/es/tree-select/style.css +36 -1
- package/es/tree-select/style.min.css +1 -1
- package/es/ui/index.js +19 -3
- package/es/ui/src/dom.js +9 -0
- package/es/ui/src/log.js +1 -1
- package/es/vxe-select/style.css +21 -0
- package/es/vxe-select/style.min.css +1 -1
- package/es/vxe-tree/style.css +23 -26
- package/es/vxe-tree/style.min.css +1 -1
- package/es/vxe-tree-select/style.css +36 -1
- package/es/vxe-tree-select/style.min.css +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +1505 -530
- package/lib/index.umd.min.js +1 -1
- package/lib/language/ar-EG.js +19 -1
- package/lib/language/ar-EG.min.js +1 -1
- package/lib/language/ar-EG.umd.js +19 -1
- package/lib/language/de-DE.js +19 -1
- package/lib/language/de-DE.min.js +1 -1
- package/lib/language/de-DE.umd.js +19 -1
- package/lib/language/en-US.js +20 -2
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +20 -2
- package/lib/language/es-ES.js +19 -1
- package/lib/language/es-ES.min.js +1 -1
- package/lib/language/es-ES.umd.js +19 -1
- package/lib/language/fr-FR.js +19 -1
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.umd.js +19 -1
- package/lib/language/hu-HU.js +19 -1
- package/lib/language/hu-HU.min.js +1 -1
- package/lib/language/hu-HU.umd.js +19 -1
- package/lib/language/hy-AM.js +18 -0
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +18 -0
- package/lib/language/id-ID.js +19 -1
- package/lib/language/id-ID.min.js +1 -1
- package/lib/language/id-ID.umd.js +19 -1
- package/lib/language/it-IT.js +19 -1
- package/lib/language/it-IT.min.js +1 -1
- package/lib/language/it-IT.umd.js +19 -1
- package/lib/language/ja-JP.js +19 -1
- package/lib/language/ja-JP.min.js +1 -1
- package/lib/language/ja-JP.umd.js +19 -1
- package/lib/language/ko-KR.js +19 -1
- package/lib/language/ko-KR.min.js +1 -1
- package/lib/language/ko-KR.umd.js +19 -1
- package/lib/language/ms-MY.js +19 -1
- package/lib/language/ms-MY.min.js +1 -1
- package/lib/language/ms-MY.umd.js +19 -1
- package/lib/language/nb-NO.js +19 -1
- package/lib/language/nb-NO.min.js +1 -1
- package/lib/language/nb-NO.umd.js +19 -1
- package/lib/language/pt-BR.js +19 -1
- package/lib/language/pt-BR.min.js +1 -1
- package/lib/language/pt-BR.umd.js +19 -1
- package/lib/language/ru-RU.js +19 -1
- package/lib/language/ru-RU.min.js +1 -1
- package/lib/language/ru-RU.umd.js +19 -1
- package/lib/language/th-TH.js +19 -1
- package/lib/language/th-TH.min.js +1 -1
- package/lib/language/th-TH.umd.js +19 -1
- package/lib/language/ug-CN.js +19 -1
- package/lib/language/ug-CN.min.js +1 -1
- package/lib/language/ug-CN.umd.js +19 -1
- package/lib/language/uk-UA.js +19 -1
- package/lib/language/uk-UA.min.js +1 -1
- package/lib/language/uk-UA.umd.js +19 -1
- package/lib/language/uz-UZ.js +19 -1
- package/lib/language/uz-UZ.min.js +1 -1
- package/lib/language/uz-UZ.umd.js +19 -1
- package/lib/language/vi-VN.js +19 -1
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/vi-VN.umd.js +19 -1
- package/lib/language/zh-CHT.js +19 -1
- package/lib/language/zh-CHT.min.js +1 -1
- package/lib/language/zh-CHT.umd.js +19 -1
- package/lib/language/zh-CN.js +18 -0
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +18 -0
- package/lib/list/src/list.js +1 -1
- package/lib/list/src/list.min.js +1 -1
- package/lib/select/src/select.js +139 -44
- package/lib/select/src/select.min.js +1 -1
- package/lib/select/style/style.css +21 -0
- package/lib/select/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tree/src/tree.js +1147 -572
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/tree/src/util.js +51 -0
- package/lib/tree/src/util.min.js +1 -0
- package/lib/tree/style/style.css +23 -26
- package/lib/tree/style/style.min.css +1 -1
- package/lib/tree-select/src/tree-select.js +237 -21
- package/lib/tree-select/src/tree-select.min.js +1 -1
- package/lib/tree-select/style/style.css +36 -1
- package/lib/tree-select/style/style.min.css +1 -1
- package/lib/ui/index.js +19 -3
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +10 -0
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-select/style/style.css +21 -0
- package/lib/vxe-select/style/style.min.css +1 -1
- package/lib/vxe-tree/style/style.css +23 -26
- package/lib/vxe-tree/style/style.min.css +1 -1
- package/lib/vxe-tree-select/style/style.css +36 -1
- package/lib/vxe-tree-select/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/language/ar-EG.ts +19 -1
- package/packages/language/de-DE.ts +19 -1
- package/packages/language/en-US.ts +20 -2
- package/packages/language/es-ES.ts +19 -1
- package/packages/language/fr-FR.ts +19 -1
- package/packages/language/hu-HU.ts +19 -1
- package/packages/language/hy-AM.ts +18 -0
- package/packages/language/id-ID.ts +19 -1
- package/packages/language/it-IT.ts +19 -1
- package/packages/language/ja-JP.ts +19 -1
- package/packages/language/ko-KR.ts +19 -1
- package/packages/language/ms-MY.ts +19 -1
- package/packages/language/nb-NO.ts +19 -1
- package/packages/language/pt-BR.ts +19 -1
- package/packages/language/ru-RU.ts +19 -1
- package/packages/language/th-TH.ts +19 -1
- package/packages/language/ug-CN.ts +19 -1
- package/packages/language/uk-UA.ts +19 -1
- package/packages/language/uz-UZ.ts +19 -1
- package/packages/language/vi-VN.ts +19 -1
- package/packages/language/zh-CHT.ts +19 -1
- package/packages/language/zh-CN.ts +18 -0
- package/packages/list/src/list.ts +1 -1
- package/packages/select/src/select.ts +146 -50
- package/packages/tree/src/tree.ts +941 -410
- package/packages/tree/src/util.ts +35 -0
- package/packages/tree-select/src/tree-select.ts +240 -19
- package/packages/ui/index.ts +18 -2
- package/packages/ui/src/dom.ts +10 -0
- package/styles/components/select.scss +19 -0
- package/styles/components/tree-select.scss +36 -1
- package/styles/components/tree.scss +28 -31
- package/types/components/button.d.ts +11 -1
- package/types/components/grid.d.ts +5 -0
- package/types/components/icon-picker.d.ts +11 -1
- package/types/components/input.d.ts +2 -2
- package/types/components/select.d.ts +28 -39
- package/types/components/table.d.ts +2 -4
- package/types/components/tree-select.d.ts +73 -12
- package/types/components/tree.d.ts +125 -8
- /package/es/icon/{iconfont.1752133996961.ttf → iconfont.1752416456948.ttf} +0 -0
- /package/es/icon/{iconfont.1752133996961.woff → iconfont.1752416456948.woff} +0 -0
- /package/es/icon/{iconfont.1752133996961.woff2 → iconfont.1752416456948.woff2} +0 -0
- /package/es/{iconfont.1752133996961.ttf → iconfont.1752416456948.ttf} +0 -0
- /package/es/{iconfont.1752133996961.woff → iconfont.1752416456948.woff} +0 -0
- /package/es/{iconfont.1752133996961.woff2 → iconfont.1752416456948.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1752133996961.ttf → iconfont.1752416456948.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1752133996961.woff → iconfont.1752416456948.woff} +0 -0
- /package/lib/icon/style/{iconfont.1752133996961.woff2 → iconfont.1752416456948.woff2} +0 -0
- /package/lib/{iconfont.1752133996961.ttf → iconfont.1752416456948.ttf} +0 -0
- /package/lib/{iconfont.1752133996961.woff → iconfont.1752416456948.woff} +0 -0
- /package/lib/{iconfont.1752133996961.woff2 → iconfont.1752416456948.woff2} +0 -0
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import { h, Teleport, PropType, ref,
|
|
1
|
+
import { h, Teleport, PropType, ref, inject, computed, provide, onUnmounted, reactive, nextTick, watch, onMounted } 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, useSize, renderEmptyElement } from '../../ui'
|
|
4
|
+
import { VxeUI, getConfig, getIcon, getI18n, globalEvents, GLOBAL_EVENT_KEYS, createEvent, useSize, renderEmptyElement } from '../../ui'
|
|
5
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
|
import VxeInputComponent from '../../input/src/input'
|
|
9
|
+
import VxeButtonComponent from '../../button/src/button'
|
|
9
10
|
|
|
10
|
-
import type { VxeSelectPropTypes, VxeSelectConstructor, SelectInternalData, SelectReactData, VxeSelectDefines, ValueOf, VxeSelectEmits, VxeComponentSlotType, VxeInputConstructor, SelectMethods, SelectPrivateRef, VxeSelectMethods,
|
|
11
|
+
import type { VxeSelectPropTypes, VxeSelectConstructor, SelectInternalData, SelectReactData, VxeSelectDefines, VxeButtonEvents, ValueOf, VxeSelectEmits, VxeComponentSlotType, VxeInputConstructor, SelectMethods, SelectPrivateRef, VxeSelectMethods, VxeOptionProps, VxeDrawerConstructor, VxeDrawerMethods, VxeFormDefines, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods, VxeInputEvents } from '../../../types'
|
|
11
12
|
import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
|
|
12
13
|
|
|
13
14
|
function isOptionVisible (option: any) {
|
|
@@ -63,10 +64,20 @@ export default defineVxeComponent({
|
|
|
63
64
|
filterable: Boolean as PropType<VxeSelectPropTypes.Filterable>,
|
|
64
65
|
filterMethod: Function as PropType<VxeSelectPropTypes.FilterMethod>,
|
|
65
66
|
remote: Boolean as PropType<VxeSelectPropTypes.Remote>,
|
|
66
|
-
// 已废弃,被 remote-config.queryMethod 替换
|
|
67
|
-
remoteMethod: Function as PropType<VxeSelectPropTypes.RemoteMethod>,
|
|
68
67
|
remoteConfig: Object as PropType<VxeSelectPropTypes.RemoteConfig>,
|
|
69
68
|
emptyText: String as PropType<VxeSelectPropTypes.EmptyText>,
|
|
69
|
+
showTotalButoon: {
|
|
70
|
+
type: Boolean as PropType<VxeSelectPropTypes.ShowTotalButoon>,
|
|
71
|
+
default: () => getConfig().select.showTotalButoon
|
|
72
|
+
},
|
|
73
|
+
showCheckedButoon: {
|
|
74
|
+
type: Boolean as PropType<VxeSelectPropTypes.ShowCheckedButoon>,
|
|
75
|
+
default: () => getConfig().select.showCheckedButoon
|
|
76
|
+
},
|
|
77
|
+
showClearButton: {
|
|
78
|
+
type: Boolean as PropType<VxeSelectPropTypes.ShowClearButton>,
|
|
79
|
+
default: () => getConfig().select.showClearButton
|
|
80
|
+
},
|
|
70
81
|
transfer: {
|
|
71
82
|
type: Boolean as PropType<VxeSelectPropTypes.Transfer>,
|
|
72
83
|
default: null
|
|
@@ -74,17 +85,29 @@ export default defineVxeComponent({
|
|
|
74
85
|
virtualYConfig: Object as PropType<VxeSelectPropTypes.VirtualYConfig>,
|
|
75
86
|
scrollY: Object as PropType<VxeSelectPropTypes.ScrollY>,
|
|
76
87
|
|
|
77
|
-
|
|
88
|
+
/**
|
|
89
|
+
* 已废弃,被 remote-config.queryMethod 替换
|
|
90
|
+
* @deprecated
|
|
91
|
+
*/
|
|
92
|
+
remoteMethod: Function as PropType<VxeSelectPropTypes.RemoteMethod>,
|
|
93
|
+
/**
|
|
94
|
+
* 已废弃,被 option-config.keyField 替换
|
|
95
|
+
* @deprecated
|
|
96
|
+
*/
|
|
78
97
|
optionId: {
|
|
79
98
|
type: String as PropType<VxeSelectPropTypes.OptionId>,
|
|
80
99
|
default: () => getConfig().select.optionId
|
|
81
100
|
},
|
|
82
|
-
|
|
101
|
+
/**
|
|
102
|
+
* 已废弃,被 option-config.useKey 替换
|
|
103
|
+
* @deprecated
|
|
104
|
+
*/
|
|
83
105
|
optionKey: Boolean as PropType<VxeSelectPropTypes.OptionKey>
|
|
84
106
|
},
|
|
85
107
|
emits: [
|
|
86
108
|
'update:modelValue',
|
|
87
109
|
'change',
|
|
110
|
+
'all-change',
|
|
88
111
|
'clear',
|
|
89
112
|
'blur',
|
|
90
113
|
'focus',
|
|
@@ -103,12 +126,12 @@ export default defineVxeComponent({
|
|
|
103
126
|
|
|
104
127
|
const xID = XEUtils.uniqueId()
|
|
105
128
|
|
|
106
|
-
const refElem = ref
|
|
107
|
-
const refInput = ref
|
|
108
|
-
const refInpSearch = ref
|
|
109
|
-
const refVirtualWrapper = ref
|
|
110
|
-
const refOptionPanel = ref
|
|
111
|
-
const refVirtualBody = ref
|
|
129
|
+
const refElem = ref<HTMLDivElement>()
|
|
130
|
+
const refInput = ref<VxeInputConstructor>()
|
|
131
|
+
const refInpSearch = ref<VxeInputConstructor>()
|
|
132
|
+
const refVirtualWrapper = ref<HTMLDivElement>()
|
|
133
|
+
const refOptionPanel = ref<HTMLDivElement>()
|
|
134
|
+
const refVirtualBody = ref<HTMLDivElement>()
|
|
112
135
|
|
|
113
136
|
const { computeSize } = useSize(props)
|
|
114
137
|
|
|
@@ -118,7 +141,6 @@ export default defineVxeComponent({
|
|
|
118
141
|
bodyHeight: 0,
|
|
119
142
|
topSpaceHeight: 0,
|
|
120
143
|
optList: [],
|
|
121
|
-
afterVisibleList: [],
|
|
122
144
|
staticOptions: [],
|
|
123
145
|
reactFlag: 0,
|
|
124
146
|
|
|
@@ -138,6 +160,7 @@ export default defineVxeComponent({
|
|
|
138
160
|
const internalData: SelectInternalData = {
|
|
139
161
|
synchData: [],
|
|
140
162
|
fullData: [],
|
|
163
|
+
afterVisibleList: [],
|
|
141
164
|
optAddMaps: {},
|
|
142
165
|
optGroupKeyMaps: {},
|
|
143
166
|
optFullValMaps: {},
|
|
@@ -250,14 +273,11 @@ export default defineVxeComponent({
|
|
|
250
273
|
})
|
|
251
274
|
|
|
252
275
|
const computeIsMaximize = computed(() => {
|
|
253
|
-
const { modelValue
|
|
254
|
-
|
|
255
|
-
return (XEUtils.isArray(modelValue) ? modelValue.length : (XEUtils.eqNull(modelValue) ? 0 : 1)) >= XEUtils.toNumber(max)
|
|
256
|
-
}
|
|
257
|
-
return false
|
|
276
|
+
const { modelValue } = props
|
|
277
|
+
return checkMaxLimit(modelValue)
|
|
258
278
|
})
|
|
259
279
|
|
|
260
|
-
const
|
|
280
|
+
const computeVirtualYOpts = computed(() => {
|
|
261
281
|
return Object.assign({} as { gt: number }, getConfig().select.virtualYConfig || getConfig().select.scrollY, props.virtualYConfig || props.scrollY)
|
|
262
282
|
})
|
|
263
283
|
|
|
@@ -323,6 +343,14 @@ export default defineVxeComponent({
|
|
|
323
343
|
return optid ? encodeURIComponent(optid) : ''
|
|
324
344
|
}
|
|
325
345
|
|
|
346
|
+
const checkMaxLimit = (selectVals: VxeSelectPropTypes.ModelValue | undefined) => {
|
|
347
|
+
const { multiple, max } = props
|
|
348
|
+
if (multiple && max) {
|
|
349
|
+
return (XEUtils.isArray(selectVals) ? selectVals.length : (XEUtils.eqNull(selectVals) ? 0 : 1)) >= XEUtils.toNumber(max)
|
|
350
|
+
}
|
|
351
|
+
return false
|
|
352
|
+
}
|
|
353
|
+
|
|
326
354
|
const getRemoteSelectLabel = (value: any) => {
|
|
327
355
|
const { remoteValMaps, optFullValMaps } = internalData
|
|
328
356
|
const labelField = computeLabelField.value
|
|
@@ -396,7 +424,7 @@ export default defineVxeComponent({
|
|
|
396
424
|
cacheItem._index = index
|
|
397
425
|
}
|
|
398
426
|
})
|
|
399
|
-
|
|
427
|
+
internalData.afterVisibleList = avList
|
|
400
428
|
return nextTick()
|
|
401
429
|
}
|
|
402
430
|
|
|
@@ -450,7 +478,7 @@ export default defineVxeComponent({
|
|
|
450
478
|
reactData.isAniVisible = true
|
|
451
479
|
if (filterable) {
|
|
452
480
|
if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !fullData.length) {
|
|
453
|
-
|
|
481
|
+
handleSearchEvent()
|
|
454
482
|
} else {
|
|
455
483
|
handleOption()
|
|
456
484
|
updateYData()
|
|
@@ -503,6 +531,42 @@ export default defineVxeComponent({
|
|
|
503
531
|
hideOptionPanel()
|
|
504
532
|
}
|
|
505
533
|
|
|
534
|
+
const allCheckedPanelEvent: VxeButtonEvents.Click = (params) => {
|
|
535
|
+
const { $event } = params
|
|
536
|
+
const { modelValue, multiple, max } = props
|
|
537
|
+
const { optList } = reactData
|
|
538
|
+
const valueField = computeValueField.value
|
|
539
|
+
if (multiple) {
|
|
540
|
+
const multipleValue: any[] = XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
|
|
541
|
+
for (let i = 0; i < optList.length; i++) {
|
|
542
|
+
const option = optList[i]
|
|
543
|
+
const selectValue = option[valueField]
|
|
544
|
+
// 检测是否超过最大可选数量
|
|
545
|
+
if (checkMaxLimit(multipleValue)) {
|
|
546
|
+
if (VxeUI) {
|
|
547
|
+
VxeUI.modal.message({
|
|
548
|
+
content: getI18n('vxe.select.overSizeErr', [max]),
|
|
549
|
+
status: 'warning'
|
|
550
|
+
})
|
|
551
|
+
}
|
|
552
|
+
break
|
|
553
|
+
}
|
|
554
|
+
if (!multipleValue.some(val => val === selectValue)) {
|
|
555
|
+
multipleValue.push(selectValue)
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
changeEvent($event, multipleValue)
|
|
559
|
+
dispatchEvent('all-change', { value: multipleValue }, $event)
|
|
560
|
+
hideOptionPanel()
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
const clearCheckedPanelEvent: VxeButtonEvents.Click = (params) => {
|
|
565
|
+
const { $event } = params
|
|
566
|
+
clearValueEvent($event, null)
|
|
567
|
+
hideOptionPanel()
|
|
568
|
+
}
|
|
569
|
+
|
|
506
570
|
const changeOptionEvent = (evnt: Event, option: any) => {
|
|
507
571
|
const { modelValue, multiple } = props
|
|
508
572
|
const { remoteValMaps } = internalData
|
|
@@ -577,8 +641,8 @@ export default defineVxeComponent({
|
|
|
577
641
|
|
|
578
642
|
const findOffsetOption = (option: any, isDwArrow: boolean) => {
|
|
579
643
|
const { allowCreate } = props
|
|
580
|
-
const {
|
|
581
|
-
const { optFullValMaps, optAddMaps } = internalData
|
|
644
|
+
const { optList } = reactData
|
|
645
|
+
const { optFullValMaps, optAddMaps, afterVisibleList } = internalData
|
|
582
646
|
const valueField = computeValueField.value
|
|
583
647
|
let fullList = afterVisibleList
|
|
584
648
|
let offsetAddIndex = 0
|
|
@@ -781,13 +845,10 @@ export default defineVxeComponent({
|
|
|
781
845
|
}
|
|
782
846
|
}
|
|
783
847
|
|
|
784
|
-
const checkOptionDisabled = (isSelected: any, option: VxeOptionProps
|
|
848
|
+
const checkOptionDisabled = (isSelected: any, option: VxeOptionProps) => {
|
|
785
849
|
if (option.disabled) {
|
|
786
850
|
return true
|
|
787
851
|
}
|
|
788
|
-
if (group && group.disabled) {
|
|
789
|
-
return true
|
|
790
|
-
}
|
|
791
852
|
const isMaximize = computeIsMaximize.value
|
|
792
853
|
if (isMaximize && !isSelected) {
|
|
793
854
|
return true
|
|
@@ -796,16 +857,16 @@ export default defineVxeComponent({
|
|
|
796
857
|
}
|
|
797
858
|
|
|
798
859
|
const updateYSpace = () => {
|
|
799
|
-
const { scrollYLoad
|
|
800
|
-
const { scrollYStore } = internalData
|
|
860
|
+
const { scrollYLoad } = reactData
|
|
861
|
+
const { scrollYStore, afterVisibleList } = internalData
|
|
801
862
|
reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0
|
|
802
863
|
reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0
|
|
803
864
|
}
|
|
804
865
|
|
|
805
866
|
const handleData = () => {
|
|
806
867
|
const { filterable, allowCreate } = props
|
|
807
|
-
const { scrollYLoad,
|
|
808
|
-
const { optAddMaps, scrollYStore } = internalData
|
|
868
|
+
const { scrollYLoad, searchValue } = reactData
|
|
869
|
+
const { optAddMaps, scrollYStore, afterVisibleList } = internalData
|
|
809
870
|
const labelField = computeLabelField.value
|
|
810
871
|
const valueField = computeValueField.value
|
|
811
872
|
const restList = scrollYLoad ? afterVisibleList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : afterVisibleList.slice(0)
|
|
@@ -834,13 +895,10 @@ export default defineVxeComponent({
|
|
|
834
895
|
const { scrollYLoad } = reactData
|
|
835
896
|
const { scrollYStore } = internalData
|
|
836
897
|
const virtualBodyElem = refVirtualBody.value
|
|
837
|
-
const
|
|
898
|
+
const virtualYOpts = computeVirtualYOpts.value
|
|
838
899
|
let rowHeight = 0
|
|
839
900
|
let firstItemElem: HTMLElement | undefined
|
|
840
901
|
if (virtualBodyElem) {
|
|
841
|
-
if (sYOpts.sItem) {
|
|
842
|
-
firstItemElem = virtualBodyElem.querySelector(sYOpts.sItem) as HTMLElement
|
|
843
|
-
}
|
|
844
902
|
if (!firstItemElem) {
|
|
845
903
|
firstItemElem = virtualBodyElem.children[0] as HTMLElement
|
|
846
904
|
}
|
|
@@ -854,7 +912,7 @@ export default defineVxeComponent({
|
|
|
854
912
|
if (scrollYLoad) {
|
|
855
913
|
const scrollBodyElem = refVirtualWrapper.value
|
|
856
914
|
const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0)
|
|
857
|
-
const offsetYSize = Math.max(0, Math.min(2, XEUtils.toNumber(
|
|
915
|
+
const offsetYSize = Math.max(0, Math.min(2, XEUtils.toNumber(virtualYOpts.oSize)))
|
|
858
916
|
scrollYStore.offsetSize = offsetYSize
|
|
859
917
|
scrollYStore.visibleSize = visibleYSize
|
|
860
918
|
scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex)
|
|
@@ -876,6 +934,9 @@ export default defineVxeComponent({
|
|
|
876
934
|
if (avIndex > -1) {
|
|
877
935
|
const optWrapperElem = refVirtualWrapper.value
|
|
878
936
|
const panelElem = refOptionPanel.value
|
|
937
|
+
if (!panelElem) {
|
|
938
|
+
return
|
|
939
|
+
}
|
|
879
940
|
const optElem = panelElem.querySelector(`[optid='${optid}']`) as HTMLElement
|
|
880
941
|
if (optWrapperElem) {
|
|
881
942
|
if (optElem) {
|
|
@@ -1005,7 +1066,7 @@ export default defineVxeComponent({
|
|
|
1005
1066
|
cacheItemMap(datas || [])
|
|
1006
1067
|
const { isLoaded, fullData, scrollYStore } = internalData
|
|
1007
1068
|
const defaultOpts = computeDefaultOpts.value
|
|
1008
|
-
const
|
|
1069
|
+
const virtualYOpts = computeVirtualYOpts.value
|
|
1009
1070
|
const valueField = computeValueField.value
|
|
1010
1071
|
Object.assign(scrollYStore, {
|
|
1011
1072
|
startIndex: 0,
|
|
@@ -1014,7 +1075,7 @@ export default defineVxeComponent({
|
|
|
1014
1075
|
})
|
|
1015
1076
|
internalData.synchData = datas || []
|
|
1016
1077
|
// 如果gt为0,则总是启用
|
|
1017
|
-
reactData.scrollYLoad = !!
|
|
1078
|
+
reactData.scrollYLoad = !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt <= fullData.length)
|
|
1018
1079
|
handleData()
|
|
1019
1080
|
if (!isLoaded) {
|
|
1020
1081
|
const { selectMode } = defaultOpts
|
|
@@ -1091,13 +1152,17 @@ export default defineVxeComponent({
|
|
|
1091
1152
|
},
|
|
1092
1153
|
focus () {
|
|
1093
1154
|
const $input = refInput.value
|
|
1155
|
+
if ($input) {
|
|
1156
|
+
$input.blur()
|
|
1157
|
+
}
|
|
1094
1158
|
reactData.isActivated = true
|
|
1095
|
-
$input.blur()
|
|
1096
1159
|
return nextTick()
|
|
1097
1160
|
},
|
|
1098
1161
|
blur () {
|
|
1099
1162
|
const $input = refInput.value
|
|
1100
|
-
$input
|
|
1163
|
+
if ($input) {
|
|
1164
|
+
$input.blur()
|
|
1165
|
+
}
|
|
1101
1166
|
reactData.isActivated = false
|
|
1102
1167
|
return nextTick()
|
|
1103
1168
|
},
|
|
@@ -1107,7 +1172,7 @@ export default defineVxeComponent({
|
|
|
1107
1172
|
|
|
1108
1173
|
Object.assign($xeSelect, selectMethods)
|
|
1109
1174
|
|
|
1110
|
-
const renderOption = (list: VxeOptionProps[]
|
|
1175
|
+
const renderOption = (list: VxeOptionProps[]) => {
|
|
1111
1176
|
const { allowCreate, optionKey, modelValue } = props
|
|
1112
1177
|
const { currentOption } = reactData
|
|
1113
1178
|
const { optAddMaps } = internalData
|
|
@@ -1125,9 +1190,9 @@ export default defineVxeComponent({
|
|
|
1125
1190
|
const isAdd = !!(allowCreate && optAddMaps[optid])
|
|
1126
1191
|
const isSelected = !isAdd && (XEUtils.isArray(modelValue) ? modelValue.indexOf(optionValue) > -1 : modelValue === optionValue)
|
|
1127
1192
|
const isVisible = isAdd || (!isOptGroup || isOptionVisible(option))
|
|
1128
|
-
const isDisabled = !isAdd && checkOptionDisabled(isSelected, option
|
|
1193
|
+
const isDisabled = !isAdd && checkOptionDisabled(isSelected, option)
|
|
1129
1194
|
const defaultSlot = slots ? slots.default : null
|
|
1130
|
-
const optParams = { option, group: null, $select: $xeSelect }
|
|
1195
|
+
const optParams = { option, group: isOptGroup ? option : null, $select: $xeSelect }
|
|
1131
1196
|
let optLabel = ''
|
|
1132
1197
|
let optVNs: string | VxeComponentSlotType[] = []
|
|
1133
1198
|
if (optionSlot) {
|
|
@@ -1216,8 +1281,8 @@ export default defineVxeComponent({
|
|
|
1216
1281
|
}
|
|
1217
1282
|
|
|
1218
1283
|
const renderVN = () => {
|
|
1219
|
-
const { className, popupClassName, loading, filterable } = props
|
|
1220
|
-
const { initialized, isActivated, isAniVisible, visiblePanel, bodyHeight, topSpaceHeight } = reactData
|
|
1284
|
+
const { modelValue, className, popupClassName, multiple, loading, filterable, showTotalButoon, showCheckedButoon, showClearButton } = props
|
|
1285
|
+
const { initialized, isActivated, isAniVisible, optList, visiblePanel, bodyHeight, topSpaceHeight } = reactData
|
|
1221
1286
|
const vSize = computeSize.value
|
|
1222
1287
|
const isDisabled = computeIsDisabled.value
|
|
1223
1288
|
const selectLabel = computeSelectLabel.value
|
|
@@ -1242,6 +1307,7 @@ export default defineVxeComponent({
|
|
|
1242
1307
|
}, selectLabel)
|
|
1243
1308
|
])
|
|
1244
1309
|
}
|
|
1310
|
+
const selectVals = XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
|
|
1245
1311
|
return h('div', {
|
|
1246
1312
|
ref: refElem,
|
|
1247
1313
|
class: ['vxe-select', className ? (XEUtils.isFunction(className) ? className({ $select: $xeSelect }) : className) : '', {
|
|
@@ -1318,10 +1384,40 @@ export default defineVxeComponent({
|
|
|
1318
1384
|
})
|
|
1319
1385
|
])
|
|
1320
1386
|
: renderEmptyElement($xeSelect),
|
|
1321
|
-
headerSlot
|
|
1387
|
+
showTotalButoon || (showCheckedButoon && multiple) || showClearButton || headerSlot
|
|
1322
1388
|
? h('div', {
|
|
1323
1389
|
class: 'vxe-select--panel-header'
|
|
1324
|
-
}, headerSlot
|
|
1390
|
+
}, headerSlot
|
|
1391
|
+
? callSlot(headerSlot, {})
|
|
1392
|
+
: [
|
|
1393
|
+
h('div', {
|
|
1394
|
+
class: 'vxe-select--header-button'
|
|
1395
|
+
}, [
|
|
1396
|
+
showTotalButoon
|
|
1397
|
+
? h('div', {
|
|
1398
|
+
class: 'vxe-select--header-total'
|
|
1399
|
+
}, getI18n('vxe.select.total', [selectVals.length, optList.length]))
|
|
1400
|
+
: renderEmptyElement($xeSelect),
|
|
1401
|
+
h('div', {
|
|
1402
|
+
class: 'vxe-select--header-btns'
|
|
1403
|
+
}, [
|
|
1404
|
+
(showCheckedButoon && multiple)
|
|
1405
|
+
? h(VxeButtonComponent, {
|
|
1406
|
+
content: getI18n('vxe.select.allChecked'),
|
|
1407
|
+
mode: 'text',
|
|
1408
|
+
onClick: allCheckedPanelEvent
|
|
1409
|
+
})
|
|
1410
|
+
: renderEmptyElement($xeSelect),
|
|
1411
|
+
showClearButton
|
|
1412
|
+
? h(VxeButtonComponent, {
|
|
1413
|
+
content: getI18n('vxe.select.clear'),
|
|
1414
|
+
mode: 'text',
|
|
1415
|
+
onClick: clearCheckedPanelEvent
|
|
1416
|
+
})
|
|
1417
|
+
: renderEmptyElement($xeSelect)
|
|
1418
|
+
])
|
|
1419
|
+
])
|
|
1420
|
+
])
|
|
1325
1421
|
: renderEmptyElement($xeSelect),
|
|
1326
1422
|
h('div', {
|
|
1327
1423
|
class: 'vxe-select--panel-body'
|
|
@@ -1341,7 +1437,7 @@ export default defineVxeComponent({
|
|
|
1341
1437
|
ref: refVirtualBody,
|
|
1342
1438
|
class: 'vxe-select--body',
|
|
1343
1439
|
style: {
|
|
1344
|
-
|
|
1440
|
+
transform: `translateY(${topSpaceHeight}px)`
|
|
1345
1441
|
}
|
|
1346
1442
|
}, renderOpts())
|
|
1347
1443
|
])
|
|
@@ -1349,7 +1445,7 @@ export default defineVxeComponent({
|
|
|
1349
1445
|
footerSlot
|
|
1350
1446
|
? h('div', {
|
|
1351
1447
|
class: 'vxe-select--panel-footer'
|
|
1352
|
-
}, footerSlot
|
|
1448
|
+
}, callSlot(footerSlot, {}))
|
|
1353
1449
|
: renderEmptyElement($xeSelect)
|
|
1354
1450
|
])
|
|
1355
1451
|
]
|