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
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { VxeTreeConstructor } from '../../../types'
|
|
2
|
+
|
|
3
|
+
function countTreeExpand ($xeTree: VxeTreeConstructor, prevNode: any) {
|
|
4
|
+
let count = 1
|
|
5
|
+
if (!prevNode) {
|
|
6
|
+
return count
|
|
7
|
+
}
|
|
8
|
+
const props = $xeTree.props
|
|
9
|
+
const { transform } = props
|
|
10
|
+
const reactData = $xeTree.reactData
|
|
11
|
+
const { updateExpandedFlag } = reactData
|
|
12
|
+
const internalData = $xeTree.internalData
|
|
13
|
+
const { treeExpandedMaps } = internalData
|
|
14
|
+
const { computeChildrenField, computeMapChildrenField } = $xeTree.getComputeMaps()
|
|
15
|
+
const childrenField = computeChildrenField.value
|
|
16
|
+
const mapChildrenField = computeMapChildrenField.value
|
|
17
|
+
const nodeChildren = prevNode[transform ? mapChildrenField : childrenField]
|
|
18
|
+
if (nodeChildren && updateExpandedFlag && treeExpandedMaps[$xeTree.getNodeId(prevNode)]) {
|
|
19
|
+
for (let index = 0; index < nodeChildren.length; index++) {
|
|
20
|
+
count += countTreeExpand($xeTree, nodeChildren[index])
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return count
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function calcTreeLine ($xeTree: VxeTreeConstructor, node: any, prevNode: any) {
|
|
27
|
+
const internalData = $xeTree.internalData
|
|
28
|
+
const { scrollYStore } = internalData
|
|
29
|
+
const { rowHeight } = scrollYStore
|
|
30
|
+
let expandSize = 1
|
|
31
|
+
if (prevNode) {
|
|
32
|
+
expandSize = countTreeExpand($xeTree, prevNode)
|
|
33
|
+
}
|
|
34
|
+
return (rowHeight || 28) * expandSize - (prevNode ? 1 : 12)
|
|
35
|
+
}
|
|
@@ -6,9 +6,10 @@ import { getLastZIndex, nextZIndex } from '../../ui/src/utils'
|
|
|
6
6
|
import { errLog } from '../../ui/src/log'
|
|
7
7
|
import XEUtils from 'xe-utils'
|
|
8
8
|
import VxeInputComponent from '../../input/src/input'
|
|
9
|
+
import VxeButtonComponent from '../../button/src/button'
|
|
9
10
|
import VxeTreeComponent from '../../tree/src/tree'
|
|
10
11
|
|
|
11
|
-
import type { TreeSelectReactData, VxeTreeSelectEmits, TreeSelectInternalData, ValueOf, VxeComponentStyleType, TreeSelectPrivateRef, TreeSelectPrivateMethods, TreeSelectMethods, VxeTreeSelectPrivateComputed, VxeTreeSelectPropTypes, VxeTreeSelectConstructor, VxeFormDefines, VxeDrawerConstructor, VxeDrawerMethods, VxeTreeSelectPrivateMethods, VxeFormConstructor, VxeFormPrivateMethods, VxeInputConstructor, VxeModalConstructor, VxeModalMethods } from '../../../types'
|
|
12
|
+
import type { TreeSelectReactData, VxeTreeSelectEmits, TreeSelectInternalData, VxeButtonEvents, ValueOf, VxeComponentStyleType, TreeSelectPrivateRef, TreeSelectPrivateMethods, TreeSelectMethods, VxeTreeSelectPrivateComputed, VxeTreeSelectPropTypes, VxeTreeSelectConstructor, VxeFormDefines, VxeDrawerConstructor, VxeDrawerMethods, VxeTreeSelectPrivateMethods, VxeFormConstructor, VxeFormPrivateMethods, VxeInputConstructor, VxeModalConstructor, VxeModalMethods, VxeTreeConstructor } from '../../../types'
|
|
12
13
|
import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
|
|
13
14
|
|
|
14
15
|
function getOptUniqueId () {
|
|
@@ -33,6 +34,8 @@ export default defineVxeComponent({
|
|
|
33
34
|
type: Boolean as PropType<VxeTreeSelectPropTypes.Disabled>,
|
|
34
35
|
default: null
|
|
35
36
|
},
|
|
37
|
+
filterable: Boolean as PropType<VxeTreeSelectPropTypes.Filterable>,
|
|
38
|
+
filterConfig: Object as PropType<VxeTreeSelectPropTypes.FilterConfig>,
|
|
36
39
|
multiple: Boolean as PropType<VxeTreeSelectPropTypes.Multiple>,
|
|
37
40
|
className: [String, Function] as PropType<VxeTreeSelectPropTypes.ClassName>,
|
|
38
41
|
popupClassName: [String, Function] as PropType<VxeTreeSelectPropTypes.PopupClassName>,
|
|
@@ -42,20 +45,48 @@ export default defineVxeComponent({
|
|
|
42
45
|
optionProps: Object as PropType<VxeTreeSelectPropTypes.OptionProps>,
|
|
43
46
|
size: {
|
|
44
47
|
type: String as PropType<VxeTreeSelectPropTypes.Size>,
|
|
45
|
-
default: () => getConfig().
|
|
48
|
+
default: () => getConfig().treeSelect.size || getConfig().size
|
|
46
49
|
},
|
|
47
50
|
remote: Boolean as PropType<VxeTreeSelectPropTypes.Remote>,
|
|
48
|
-
|
|
51
|
+
remoteConfig: Function as PropType<VxeTreeSelectPropTypes.RemoteConfig>,
|
|
49
52
|
popupConfig: Object as PropType<VxeTreeSelectPropTypes.PopupConfig>,
|
|
50
53
|
treeConfig: Object as PropType<VxeTreeSelectPropTypes.TreeConfig>,
|
|
54
|
+
virtualYConfig: Object as PropType<VxeTreeSelectPropTypes.VirtualYConfig>,
|
|
55
|
+
autoClose: {
|
|
56
|
+
type: Boolean as PropType<VxeTreeSelectPropTypes.AutoClose>,
|
|
57
|
+
default: () => getConfig().treeSelect.autoClose
|
|
58
|
+
},
|
|
59
|
+
showTotalButoon: {
|
|
60
|
+
type: Boolean as PropType<VxeTreeSelectPropTypes.ShowTotalButoon>,
|
|
61
|
+
default: () => getConfig().treeSelect.showTotalButoon
|
|
62
|
+
},
|
|
63
|
+
showCheckedButoon: {
|
|
64
|
+
type: Boolean as PropType<VxeTreeSelectPropTypes.ShowCheckedButoon>,
|
|
65
|
+
default: () => getConfig().treeSelect.showCheckedButoon
|
|
66
|
+
},
|
|
67
|
+
showClearButton: {
|
|
68
|
+
type: Boolean as PropType<VxeTreeSelectPropTypes.ShowClearButton>,
|
|
69
|
+
default: () => getConfig().treeSelect.showClearButton
|
|
70
|
+
},
|
|
71
|
+
showExpandButton: {
|
|
72
|
+
type: Boolean as PropType<VxeTreeSelectPropTypes.ShowExpandButton>,
|
|
73
|
+
default: () => getConfig().treeSelect.showExpandButton
|
|
74
|
+
},
|
|
51
75
|
transfer: {
|
|
52
76
|
type: Boolean as PropType<VxeTreeSelectPropTypes.Transfer>,
|
|
53
77
|
default: null
|
|
54
|
-
}
|
|
78
|
+
},
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 已废弃,被 remote-config.queryMethod 替换
|
|
82
|
+
* @deprecated
|
|
83
|
+
*/
|
|
84
|
+
remoteMethod: Function as PropType<VxeTreeSelectPropTypes.RemoteMethod>
|
|
55
85
|
},
|
|
56
86
|
emits: [
|
|
57
87
|
'update:modelValue',
|
|
58
88
|
'change',
|
|
89
|
+
'all-change',
|
|
59
90
|
'clear',
|
|
60
91
|
'blur',
|
|
61
92
|
'focus',
|
|
@@ -77,13 +108,15 @@ export default defineVxeComponent({
|
|
|
77
108
|
|
|
78
109
|
const refElem = ref<HTMLDivElement>()
|
|
79
110
|
const refInput = ref<VxeInputConstructor>()
|
|
111
|
+
const refInpSearch = ref<VxeInputConstructor>()
|
|
80
112
|
const refTreeWrapper = ref<HTMLDivElement>()
|
|
81
113
|
const refOptionPanel = ref<HTMLDivElement>()
|
|
114
|
+
const refTree = ref<VxeTreeConstructor>()
|
|
82
115
|
|
|
83
116
|
const reactData = reactive<TreeSelectReactData>({
|
|
84
117
|
initialized: false,
|
|
85
|
-
|
|
86
|
-
|
|
118
|
+
searchValue: '',
|
|
119
|
+
searchLoading: false,
|
|
87
120
|
panelIndex: 0,
|
|
88
121
|
panelStyle: {},
|
|
89
122
|
panelPlacement: null,
|
|
@@ -94,7 +127,9 @@ export default defineVxeComponent({
|
|
|
94
127
|
})
|
|
95
128
|
|
|
96
129
|
const internalData: TreeSelectInternalData = {
|
|
97
|
-
hpTimeout: undefined
|
|
130
|
+
// hpTimeout: undefined,
|
|
131
|
+
fullOptionList: [],
|
|
132
|
+
fullNodeMaps: {}
|
|
98
133
|
}
|
|
99
134
|
|
|
100
135
|
const refMaps: TreeSelectPrivateRef = {
|
|
@@ -202,11 +237,25 @@ export default defineVxeComponent({
|
|
|
202
237
|
return propsOpts.hasChild || 'hasChild'
|
|
203
238
|
})
|
|
204
239
|
|
|
240
|
+
const computeVirtualYOpts = computed(() => {
|
|
241
|
+
return Object.assign({} as { gt: number }, getConfig().treeSelect.virtualYConfig, props.virtualYConfig)
|
|
242
|
+
})
|
|
243
|
+
|
|
244
|
+
const computeRemoteOpts = computed(() => {
|
|
245
|
+
return Object.assign({}, getConfig().treeSelect.remoteConfig, props.remoteConfig)
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
const computeFilterOpts = computed(() => {
|
|
249
|
+
const treeOpts = computeTreeOpts.value
|
|
250
|
+
return Object.assign({}, treeOpts.filterConfig, props.filterConfig)
|
|
251
|
+
})
|
|
252
|
+
|
|
205
253
|
const computeSelectLabel = computed(() => {
|
|
206
254
|
const { modelValue } = props
|
|
207
|
-
const { fullNodeMaps } =
|
|
255
|
+
const { fullNodeMaps } = internalData
|
|
208
256
|
const labelField = computeLabelField.value
|
|
209
|
-
|
|
257
|
+
const selectVals = XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
|
|
258
|
+
return selectVals.map(val => {
|
|
210
259
|
const cacheItem = fullNodeMaps[val]
|
|
211
260
|
return cacheItem ? cacheItem.item[labelField] : val
|
|
212
261
|
}).join(', ')
|
|
@@ -260,9 +309,11 @@ export default defineVxeComponent({
|
|
|
260
309
|
|
|
261
310
|
const cacheDataMap = () => {
|
|
262
311
|
const { options } = props
|
|
312
|
+
const treeOpts = computeTreeOpts.value
|
|
263
313
|
const nodeKeyField = computeNodeKeyField.value
|
|
264
314
|
const childrenField = computeChildrenField.value
|
|
265
315
|
const valueField = computeValueField.value
|
|
316
|
+
const { transform } = treeOpts
|
|
266
317
|
const nodeMaps: Record<string, {
|
|
267
318
|
item: any
|
|
268
319
|
index: number
|
|
@@ -271,7 +322,7 @@ export default defineVxeComponent({
|
|
|
271
322
|
nodes: any[]
|
|
272
323
|
}> = {}
|
|
273
324
|
const keyMaps: Record<string, boolean> = {}
|
|
274
|
-
|
|
325
|
+
const handleOptNode = (item: any, index: number, items: any[], path: string[], parent: any, nodes: any[]) => {
|
|
275
326
|
let nodeid = getNodeid(item)
|
|
276
327
|
if (!nodeid) {
|
|
277
328
|
nodeid = getOptUniqueId()
|
|
@@ -285,9 +336,18 @@ export default defineVxeComponent({
|
|
|
285
336
|
errLog('vxe.error.repeatKey', [valueField, value])
|
|
286
337
|
}
|
|
287
338
|
nodeMaps[value] = { item, index, items, parent, nodes }
|
|
288
|
-
}
|
|
289
|
-
|
|
290
|
-
|
|
339
|
+
}
|
|
340
|
+
if (options) {
|
|
341
|
+
if (transform) {
|
|
342
|
+
options.forEach((item, index, items) => {
|
|
343
|
+
handleOptNode(item, index, items, [], null, [])
|
|
344
|
+
})
|
|
345
|
+
} else {
|
|
346
|
+
XEUtils.eachTree(options, handleOptNode, { children: childrenField })
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
internalData.fullOptionList = options || []
|
|
350
|
+
internalData.fullNodeMaps = nodeMaps
|
|
291
351
|
}
|
|
292
352
|
|
|
293
353
|
const updateZindex = () => {
|
|
@@ -318,8 +378,10 @@ export default defineVxeComponent({
|
|
|
318
378
|
}
|
|
319
379
|
|
|
320
380
|
const showOptionPanel = () => {
|
|
321
|
-
const { loading } = props
|
|
381
|
+
const { loading, remote, filterable } = props
|
|
382
|
+
const { fullOptionList } = internalData
|
|
322
383
|
const isDisabled = computeIsDisabled.value
|
|
384
|
+
const remoteOpts = computeRemoteOpts.value
|
|
323
385
|
if (!loading && !isDisabled) {
|
|
324
386
|
clearTimeout(internalData.hpTimeout)
|
|
325
387
|
if (!reactData.initialized) {
|
|
@@ -327,8 +389,14 @@ export default defineVxeComponent({
|
|
|
327
389
|
}
|
|
328
390
|
reactData.isActivated = true
|
|
329
391
|
reactData.isAniVisible = true
|
|
392
|
+
if (filterable) {
|
|
393
|
+
if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !fullOptionList.length) {
|
|
394
|
+
handleSearchEvent()
|
|
395
|
+
}
|
|
396
|
+
}
|
|
330
397
|
setTimeout(() => {
|
|
331
398
|
reactData.visiblePanel = true
|
|
399
|
+
handleFocusSearch()
|
|
332
400
|
}, 10)
|
|
333
401
|
updateZindex()
|
|
334
402
|
updatePlacement()
|
|
@@ -343,7 +411,7 @@ export default defineVxeComponent({
|
|
|
343
411
|
}
|
|
344
412
|
|
|
345
413
|
const changeEvent = (evnt: Event, selectValue: any) => {
|
|
346
|
-
const { fullNodeMaps } =
|
|
414
|
+
const { fullNodeMaps } = internalData
|
|
347
415
|
emitModel(selectValue)
|
|
348
416
|
if (selectValue !== props.modelValue) {
|
|
349
417
|
const cacheItem = fullNodeMaps[selectValue]
|
|
@@ -365,6 +433,53 @@ export default defineVxeComponent({
|
|
|
365
433
|
hideOptionPanel()
|
|
366
434
|
}
|
|
367
435
|
|
|
436
|
+
const allCheckedPanelEvent: VxeButtonEvents.Click = (params) => {
|
|
437
|
+
const { $event } = params
|
|
438
|
+
const { multiple, autoClose } = props
|
|
439
|
+
const $tree = refTree.value
|
|
440
|
+
if (multiple) {
|
|
441
|
+
if ($tree) {
|
|
442
|
+
$tree.setAllCheckboxNode(true).then(({ checkNodeKeys }) => {
|
|
443
|
+
changeEvent($event, checkNodeKeys)
|
|
444
|
+
dispatchEvent('all-change', { value: checkNodeKeys }, $event)
|
|
445
|
+
if (autoClose) {
|
|
446
|
+
hideOptionPanel()
|
|
447
|
+
}
|
|
448
|
+
})
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
const clearCheckedPanelEvent: VxeButtonEvents.Click = (params) => {
|
|
454
|
+
const { $event } = params
|
|
455
|
+
const { multiple, autoClose } = props
|
|
456
|
+
const $tree = refTree.value
|
|
457
|
+
if ($tree) {
|
|
458
|
+
const value = multiple ? [] : null
|
|
459
|
+
$tree.clearCheckboxNode().then(() => {
|
|
460
|
+
if (autoClose) {
|
|
461
|
+
hideOptionPanel()
|
|
462
|
+
}
|
|
463
|
+
})
|
|
464
|
+
changeEvent($event, value)
|
|
465
|
+
dispatchEvent('clear', { value }, $event)
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
const allExpandPanelEvent: VxeButtonEvents.Click = () => {
|
|
470
|
+
const $tree = refTree.value
|
|
471
|
+
if ($tree) {
|
|
472
|
+
$tree.setAllExpandNode(true)
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
const clearExpandPanelEvent: VxeButtonEvents.Click = () => {
|
|
477
|
+
const $tree = refTree.value
|
|
478
|
+
if ($tree) {
|
|
479
|
+
$tree.clearAllExpandNode()
|
|
480
|
+
}
|
|
481
|
+
}
|
|
482
|
+
|
|
368
483
|
const handleGlobalMousewheelEvent = (evnt: MouseEvent) => {
|
|
369
484
|
const { visiblePanel } = reactData
|
|
370
485
|
const isDisabled = computeIsDisabled.value
|
|
@@ -404,6 +519,17 @@ export default defineVxeComponent({
|
|
|
404
519
|
}
|
|
405
520
|
}
|
|
406
521
|
|
|
522
|
+
const handleFocusSearch = () => {
|
|
523
|
+
if (props.filterable) {
|
|
524
|
+
nextTick(() => {
|
|
525
|
+
const inpSearch = refInpSearch.value
|
|
526
|
+
if (inpSearch) {
|
|
527
|
+
inpSearch.focus()
|
|
528
|
+
}
|
|
529
|
+
})
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
|
|
407
533
|
const focusEvent = (evnt: FocusEvent) => {
|
|
408
534
|
const isDisabled = computeIsDisabled.value
|
|
409
535
|
if (!isDisabled) {
|
|
@@ -428,6 +554,27 @@ export default defineVxeComponent({
|
|
|
428
554
|
dispatchEvent('blur', {}, evnt)
|
|
429
555
|
}
|
|
430
556
|
|
|
557
|
+
const modelSearchEvent = (value: string) => {
|
|
558
|
+
reactData.searchValue = value
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
const handleSearchEvent = () => {
|
|
562
|
+
const { modelValue, remote, remoteMethod } = props
|
|
563
|
+
const { searchValue } = reactData
|
|
564
|
+
const remoteOpts = computeRemoteOpts.value
|
|
565
|
+
const queryMethod = remoteOpts.queryMethod || remoteMethod
|
|
566
|
+
if (remote && queryMethod && remoteOpts.enabled) {
|
|
567
|
+
reactData.searchLoading = true
|
|
568
|
+
Promise.resolve(
|
|
569
|
+
queryMethod({ $treeSelect: $xeTreeSelect, searchValue, value: modelValue })
|
|
570
|
+
).then(() => nextTick())
|
|
571
|
+
.catch(() => nextTick())
|
|
572
|
+
.finally(() => {
|
|
573
|
+
reactData.searchLoading = false
|
|
574
|
+
})
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
|
|
431
578
|
const togglePanelEvent = (params: any) => {
|
|
432
579
|
const { $event } = params
|
|
433
580
|
$event.preventDefault()
|
|
@@ -468,8 +615,8 @@ export default defineVxeComponent({
|
|
|
468
615
|
Object.assign($xeTreeSelect, treeSelectMethods, treeSelectPrivateMethods)
|
|
469
616
|
|
|
470
617
|
const renderVN = () => {
|
|
471
|
-
const { className, modelValue, multiple, options, loading } = props
|
|
472
|
-
const { initialized, isActivated, isAniVisible, visiblePanel } = reactData
|
|
618
|
+
const { className, modelValue, multiple, options, loading, filterable, showTotalButoon, showCheckedButoon, showClearButton, showExpandButton } = props
|
|
619
|
+
const { initialized, isActivated, isAniVisible, visiblePanel, searchValue } = reactData
|
|
473
620
|
const vSize = computeSize.value
|
|
474
621
|
const isDisabled = computeIsDisabled.value
|
|
475
622
|
const selectLabel = computeSelectLabel.value
|
|
@@ -491,6 +638,8 @@ export default defineVxeComponent({
|
|
|
491
638
|
const childrenField = computeChildrenField.value
|
|
492
639
|
const parentField = computeParentField.value
|
|
493
640
|
const hasChildField = computeHasChildField.value
|
|
641
|
+
const virtualYOpts = computeVirtualYOpts.value
|
|
642
|
+
const filterOpts = computeFilterOpts.value
|
|
494
643
|
|
|
495
644
|
if (formReadonly) {
|
|
496
645
|
return h('div', {
|
|
@@ -502,10 +651,12 @@ export default defineVxeComponent({
|
|
|
502
651
|
}, selectLabel)
|
|
503
652
|
])
|
|
504
653
|
}
|
|
654
|
+
const selectVals = XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
|
|
505
655
|
return h('div', {
|
|
506
656
|
ref: refElem,
|
|
507
657
|
class: ['vxe-tree-select', className ? (XEUtils.isFunction(className) ? className({ $treeSelect: $xeTreeSelect }) : className) : '', {
|
|
508
658
|
[`size--${vSize}`]: vSize,
|
|
659
|
+
'is--filterable': filterable,
|
|
509
660
|
'is--visible': visiblePanel,
|
|
510
661
|
'is--disabled': isDisabled,
|
|
511
662
|
'is--loading': loading,
|
|
@@ -522,6 +673,7 @@ export default defineVxeComponent({
|
|
|
522
673
|
prefixIcon: props.prefixIcon,
|
|
523
674
|
suffixIcon: loading ? getIcon().TREE_SELECT_LOADED : (visiblePanel ? getIcon().TREE_SELECT_OPEN : getIcon().TREE_SELECT_CLOSE),
|
|
524
675
|
modelValue: loading ? '' : selectLabel,
|
|
676
|
+
title: selectLabel,
|
|
525
677
|
onClear: clearEvent,
|
|
526
678
|
onClick: clickEvent,
|
|
527
679
|
onFocus: focusEvent,
|
|
@@ -551,10 +703,71 @@ export default defineVxeComponent({
|
|
|
551
703
|
h('div', {
|
|
552
704
|
class: 'vxe-tree-select--panel-wrapper'
|
|
553
705
|
}, [
|
|
554
|
-
|
|
706
|
+
filterable
|
|
707
|
+
? h('div', {
|
|
708
|
+
class: 'vxe-tree-select--panel-search'
|
|
709
|
+
}, [
|
|
710
|
+
h(VxeInputComponent, {
|
|
711
|
+
ref: refInpSearch,
|
|
712
|
+
class: 'vxe-tree-select-search--input',
|
|
713
|
+
modelValue: searchValue,
|
|
714
|
+
clearable: true,
|
|
715
|
+
disabled: false,
|
|
716
|
+
readonly: false,
|
|
717
|
+
placeholder: getI18n('vxe.treeSelect.search'),
|
|
718
|
+
prefixIcon: getIcon().INPUT_SEARCH,
|
|
719
|
+
'onUpdate:modelValue': modelSearchEvent
|
|
720
|
+
})
|
|
721
|
+
])
|
|
722
|
+
: renderEmptyElement($xeTreeSelect),
|
|
723
|
+
showTotalButoon || (showCheckedButoon && multiple) || showClearButton || showExpandButton || headerSlot
|
|
555
724
|
? h('div', {
|
|
556
725
|
class: 'vxe-tree-select--panel-header'
|
|
557
|
-
}, headerSlot
|
|
726
|
+
}, headerSlot
|
|
727
|
+
? headerSlot({})
|
|
728
|
+
: [
|
|
729
|
+
h('div', {
|
|
730
|
+
class: 'vxe-tree-select--header-button'
|
|
731
|
+
}, [
|
|
732
|
+
showTotalButoon
|
|
733
|
+
? h('div', {
|
|
734
|
+
class: 'vxe-tree-select--header-total'
|
|
735
|
+
}, getI18n('vxe.treeSelect.total', [selectVals.length]))
|
|
736
|
+
: renderEmptyElement($xeTreeSelect),
|
|
737
|
+
h('div', {
|
|
738
|
+
class: 'vxe-tree-select--header-btns'
|
|
739
|
+
}, [
|
|
740
|
+
(showCheckedButoon && multiple)
|
|
741
|
+
? h(VxeButtonComponent, {
|
|
742
|
+
content: getI18n('vxe.treeSelect.allChecked'),
|
|
743
|
+
mode: 'text',
|
|
744
|
+
onClick: allCheckedPanelEvent
|
|
745
|
+
})
|
|
746
|
+
: renderEmptyElement($xeTreeSelect),
|
|
747
|
+
showClearButton
|
|
748
|
+
? h(VxeButtonComponent, {
|
|
749
|
+
content: getI18n('vxe.treeSelect.clearChecked'),
|
|
750
|
+
mode: 'text',
|
|
751
|
+
onClick: clearCheckedPanelEvent
|
|
752
|
+
})
|
|
753
|
+
: renderEmptyElement($xeTreeSelect),
|
|
754
|
+
showExpandButton
|
|
755
|
+
? h(VxeButtonComponent, {
|
|
756
|
+
content: getI18n('vxe.treeSelect.allExpand'),
|
|
757
|
+
mode: 'text',
|
|
758
|
+
onClick: allExpandPanelEvent
|
|
759
|
+
})
|
|
760
|
+
: renderEmptyElement($xeTreeSelect),
|
|
761
|
+
showExpandButton
|
|
762
|
+
? h(VxeButtonComponent, {
|
|
763
|
+
content: getI18n('vxe.treeSelect.clearExpand'),
|
|
764
|
+
mode: 'text',
|
|
765
|
+
onClick: clearExpandPanelEvent
|
|
766
|
+
})
|
|
767
|
+
: renderEmptyElement($xeTreeSelect)
|
|
768
|
+
])
|
|
769
|
+
])
|
|
770
|
+
])
|
|
558
771
|
: renderEmptyElement($xeTreeSelect),
|
|
559
772
|
h('div', {
|
|
560
773
|
class: 'vxe-tree-select--panel-body'
|
|
@@ -565,7 +778,12 @@ export default defineVxeComponent({
|
|
|
565
778
|
style: popupWrapperStyle
|
|
566
779
|
}, [
|
|
567
780
|
h(VxeTreeComponent, {
|
|
781
|
+
ref: refTree,
|
|
568
782
|
class: 'vxe-tree-select--tree',
|
|
783
|
+
height: popupOpts.height ? '100%' : treeOpts.height,
|
|
784
|
+
minHeight: treeOpts.minHeight,
|
|
785
|
+
maxHeight: popupOpts.height ? '' : treeOpts.maxHeight,
|
|
786
|
+
autoResize: true,
|
|
569
787
|
data: options,
|
|
570
788
|
indent: treeOpts.indent,
|
|
571
789
|
showRadio: !multiple,
|
|
@@ -593,6 +811,9 @@ export default defineVxeComponent({
|
|
|
593
811
|
iconOpen: treeOpts.iconOpen,
|
|
594
812
|
iconLoaded: treeOpts.iconLoaded,
|
|
595
813
|
iconClose: treeOpts.iconClose,
|
|
814
|
+
filterValue: searchValue,
|
|
815
|
+
filterConfig: filterOpts,
|
|
816
|
+
virtualYConfig: virtualYOpts,
|
|
596
817
|
onNodeClick: nodeClickEvent,
|
|
597
818
|
onRadioChange: radioChangeEvent,
|
|
598
819
|
onCheckboxChange: checkboxChangeEvent,
|
package/packages/ui/index.ts
CHANGED
|
@@ -300,7 +300,7 @@ setConfig({
|
|
|
300
300
|
},
|
|
301
301
|
virtualYConfig: {
|
|
302
302
|
enabled: true,
|
|
303
|
-
gt:
|
|
303
|
+
gt: 50,
|
|
304
304
|
oSize: 2
|
|
305
305
|
}
|
|
306
306
|
},
|
|
@@ -357,16 +357,32 @@ setConfig({
|
|
|
357
357
|
isArrow: true
|
|
358
358
|
},
|
|
359
359
|
tree: {
|
|
360
|
+
// autoResize: false,
|
|
360
361
|
indent: 20,
|
|
361
362
|
minHeight: 60,
|
|
362
363
|
radioConfig: {
|
|
363
364
|
strict: true
|
|
365
|
+
},
|
|
366
|
+
virtualYConfig: {
|
|
367
|
+
enabled: true,
|
|
368
|
+
gt: 50,
|
|
369
|
+
oSize: 2
|
|
364
370
|
}
|
|
365
371
|
},
|
|
366
372
|
treeSelect: {
|
|
373
|
+
autoClose: true,
|
|
374
|
+
virtualYConfig: {
|
|
375
|
+
enabled: true,
|
|
376
|
+
gt: 0,
|
|
377
|
+
oSize: 2
|
|
378
|
+
},
|
|
367
379
|
treeConfig: {
|
|
380
|
+
maxHeight: 300,
|
|
368
381
|
radioConfig: {},
|
|
369
|
-
checkboxConfig: {}
|
|
382
|
+
checkboxConfig: {},
|
|
383
|
+
filterConfig: {
|
|
384
|
+
autoExpandAll: true
|
|
385
|
+
}
|
|
370
386
|
}
|
|
371
387
|
},
|
|
372
388
|
upload: {
|
package/packages/ui/src/dom.ts
CHANGED
|
@@ -121,6 +121,16 @@ export function getAbsolutePos (elem: any) {
|
|
|
121
121
|
return { boundingTop, top: scrollTop + boundingTop, boundingLeft, left: scrollLeft + boundingLeft, visibleHeight, visibleWidth }
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
+
export function getPaddingTopBottomSize (elem: HTMLElement) {
|
|
125
|
+
if (elem) {
|
|
126
|
+
const computedStyle = getComputedStyle(elem)
|
|
127
|
+
const paddingTop = XEUtils.toNumber(computedStyle.paddingTop)
|
|
128
|
+
const paddingBottom = XEUtils.toNumber(computedStyle.paddingBottom)
|
|
129
|
+
return paddingTop + paddingBottom
|
|
130
|
+
}
|
|
131
|
+
return 0
|
|
132
|
+
}
|
|
133
|
+
|
|
124
134
|
const scrollIntoViewIfNeeded = 'scrollIntoViewIfNeeded'
|
|
125
135
|
const scrollIntoView = 'scrollIntoView'
|
|
126
136
|
|
|
@@ -70,6 +70,25 @@
|
|
|
70
70
|
background-color: var(--vxe-ui-layout-background-color);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
.vxe-select--header-button {
|
|
74
|
+
display: flex;
|
|
75
|
+
flex-direction: row;
|
|
76
|
+
}
|
|
77
|
+
.vxe-select--header-total {
|
|
78
|
+
display: flex;
|
|
79
|
+
flex-direction: row;
|
|
80
|
+
align-items: center;
|
|
81
|
+
justify-content: center;
|
|
82
|
+
flex-shrink: 0;
|
|
83
|
+
padding-left: 0.8em;
|
|
84
|
+
}
|
|
85
|
+
.vxe-select--header-btns {
|
|
86
|
+
display: flex;
|
|
87
|
+
flex-direction: row;
|
|
88
|
+
flex-grow: 1;
|
|
89
|
+
justify-content: right;
|
|
90
|
+
}
|
|
91
|
+
|
|
73
92
|
.vxe-select--panel-header {
|
|
74
93
|
border-bottom: 1px solid var(--vxe-ui-base-popup-border-color);
|
|
75
94
|
}
|
|
@@ -12,6 +12,14 @@
|
|
|
12
12
|
cursor: pointer;
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
+
&.is--filterable {
|
|
16
|
+
.vxe-tree-select-tree--wrapper {
|
|
17
|
+
padding-top: 0;
|
|
18
|
+
}
|
|
19
|
+
.vxe-tree-select--panel-header {
|
|
20
|
+
border-top: 1px solid var(--vxe-ui-base-popup-border-color);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
15
23
|
&.is--disabled {
|
|
16
24
|
& > .vxe-input {
|
|
17
25
|
.vxe-input--inner {
|
|
@@ -57,8 +65,28 @@
|
|
|
57
65
|
}
|
|
58
66
|
}
|
|
59
67
|
|
|
68
|
+
.vxe-tree-select--header-button {
|
|
69
|
+
display: flex;
|
|
70
|
+
flex-direction: row;
|
|
71
|
+
}
|
|
72
|
+
.vxe-tree-select--header-total {
|
|
73
|
+
display: flex;
|
|
74
|
+
flex-direction: row;
|
|
75
|
+
align-items: center;
|
|
76
|
+
justify-content: center;
|
|
77
|
+
flex-shrink: 0;
|
|
78
|
+
padding-left: 0.8em;
|
|
79
|
+
}
|
|
80
|
+
.vxe-tree-select--header-btns {
|
|
81
|
+
display: flex;
|
|
82
|
+
flex-direction: row;
|
|
83
|
+
flex-grow: 1;
|
|
84
|
+
justify-content: right;
|
|
85
|
+
}
|
|
86
|
+
|
|
60
87
|
.vxe-tree-select--panel-wrapper {
|
|
61
88
|
display: inline-flex;
|
|
89
|
+
flex-direction: column;
|
|
62
90
|
position: relative;
|
|
63
91
|
border-radius: var(--vxe-ui-base-border-radius);
|
|
64
92
|
border: 1px solid var(--vxe-ui-base-popup-border-color);
|
|
@@ -67,6 +95,14 @@
|
|
|
67
95
|
pointer-events: auto;
|
|
68
96
|
}
|
|
69
97
|
|
|
98
|
+
.vxe-tree-select--panel-search {
|
|
99
|
+
display: block;
|
|
100
|
+
padding: var(--vxe-ui-layout-padding-default);
|
|
101
|
+
.vxe-tree-select-search--input {
|
|
102
|
+
width: 100%;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
70
106
|
.vxe-tree-select--panel-header {
|
|
71
107
|
border-bottom: 1px solid var(--vxe-ui-base-popup-border-color);
|
|
72
108
|
}
|
|
@@ -84,7 +120,6 @@
|
|
|
84
120
|
position: relative;
|
|
85
121
|
overflow: auto;
|
|
86
122
|
padding: var(--vxe-ui-layout-padding-default);
|
|
87
|
-
max-height: 21em;
|
|
88
123
|
width: 30em;
|
|
89
124
|
outline: 0;
|
|
90
125
|
}
|