vxe-pc-ui 3.14.38 → 3.14.40
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/cascader/src/cascader.js +1253 -253
- package/es/cascader/src/util.js +7 -0
- package/es/cascader/style.css +200 -21
- package/es/cascader/style.min.css +1 -1
- package/es/input/src/input.js +2 -2
- package/es/language/ar-EG.js +7 -0
- package/es/language/de-DE.js +7 -0
- package/es/language/en-US.js +7 -0
- package/es/language/es-ES.js +7 -0
- package/es/language/fr-FR.js +7 -0
- package/es/language/hu-HU.js +7 -0
- package/es/language/hy-AM.js +7 -0
- package/es/language/id-ID.js +7 -0
- package/es/language/it-IT.js +7 -0
- package/es/language/ja-JP.js +7 -0
- package/es/language/ko-KR.js +7 -0
- package/es/language/ms-MY.js +7 -0
- package/es/language/nb-NO.js +7 -0
- package/es/language/pt-BR.js +7 -0
- package/es/language/ru-RU.js +7 -0
- package/es/language/th-TH.js +7 -0
- package/es/language/ug-CN.js +7 -0
- package/es/language/uk-UA.js +7 -0
- package/es/language/uz-UZ.js +7 -0
- package/es/language/vi-VN.js +7 -0
- package/es/language/zh-CHT.js +7 -0
- package/es/language/zh-CN.js +7 -0
- package/es/list/style.css +2 -1
- package/es/list/style.min.css +1 -1
- package/es/number-input/src/number-input.js +25 -10
- package/es/number-input/src/util.js +17 -5
- package/es/split/style.css +1 -1
- package/es/split/style.min.css +1 -1
- package/es/splitter/style.css +1 -1
- package/es/splitter/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tree/src/tree.js +30 -24
- package/es/tree-select/src/tree-select.js +22 -16
- package/es/tree-select/style.css +1 -8
- package/es/tree-select/style.min.css +1 -1
- package/es/ui/index.js +10 -4
- package/es/ui/src/dom.js +3 -3
- package/es/ui/src/log.js +1 -1
- package/es/vxe-cascader/style.css +200 -21
- package/es/vxe-cascader/style.min.css +1 -1
- package/es/vxe-list/style.css +2 -1
- package/es/vxe-list/style.min.css +1 -1
- package/es/vxe-split/style.css +1 -1
- package/es/vxe-split/style.min.css +1 -1
- package/es/vxe-splitter/style.css +1 -1
- package/es/vxe-splitter/style.min.css +1 -1
- package/es/vxe-tree-select/style.css +1 -8
- package/es/vxe-tree-select/style.min.css +1 -1
- package/lib/cascader/src/cascader.js +1312 -247
- package/lib/cascader/src/cascader.min.js +1 -1
- package/lib/cascader/src/util.js +15 -0
- package/lib/cascader/src/util.min.js +1 -0
- package/lib/cascader/style/style.css +200 -21
- package/lib/cascader/style/style.min.css +1 -1
- package/lib/index.umd.js +2868 -1726
- package/lib/index.umd.min.js +1 -1
- package/lib/input/src/input.js +2 -2
- package/lib/input/src/input.min.js +1 -1
- package/lib/language/ar-EG.js +7 -0
- package/lib/language/ar-EG.min.js +1 -1
- package/lib/language/ar-EG.umd.js +7 -0
- package/lib/language/de-DE.js +7 -0
- package/lib/language/de-DE.min.js +1 -1
- package/lib/language/de-DE.umd.js +7 -0
- package/lib/language/en-US.js +7 -0
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +7 -0
- package/lib/language/es-ES.js +7 -0
- package/lib/language/es-ES.min.js +1 -1
- package/lib/language/es-ES.umd.js +7 -0
- package/lib/language/fr-FR.js +7 -0
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.umd.js +7 -0
- package/lib/language/hu-HU.js +7 -0
- package/lib/language/hu-HU.min.js +1 -1
- package/lib/language/hu-HU.umd.js +7 -0
- package/lib/language/hy-AM.js +7 -0
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +7 -0
- package/lib/language/id-ID.js +7 -0
- package/lib/language/id-ID.min.js +1 -1
- package/lib/language/id-ID.umd.js +7 -0
- package/lib/language/it-IT.js +7 -0
- package/lib/language/it-IT.min.js +1 -1
- package/lib/language/it-IT.umd.js +7 -0
- package/lib/language/ja-JP.js +7 -0
- package/lib/language/ja-JP.min.js +1 -1
- package/lib/language/ja-JP.umd.js +7 -0
- package/lib/language/ko-KR.js +7 -0
- package/lib/language/ko-KR.min.js +1 -1
- package/lib/language/ko-KR.umd.js +7 -0
- package/lib/language/ms-MY.js +7 -0
- package/lib/language/ms-MY.min.js +1 -1
- package/lib/language/ms-MY.umd.js +7 -0
- package/lib/language/nb-NO.js +7 -0
- package/lib/language/nb-NO.min.js +1 -1
- package/lib/language/nb-NO.umd.js +7 -0
- package/lib/language/pt-BR.js +7 -0
- package/lib/language/pt-BR.min.js +1 -1
- package/lib/language/pt-BR.umd.js +7 -0
- package/lib/language/ru-RU.js +7 -0
- package/lib/language/ru-RU.min.js +1 -1
- package/lib/language/ru-RU.umd.js +7 -0
- package/lib/language/th-TH.js +7 -0
- package/lib/language/th-TH.min.js +1 -1
- package/lib/language/th-TH.umd.js +7 -0
- package/lib/language/ug-CN.js +7 -0
- package/lib/language/ug-CN.min.js +1 -1
- package/lib/language/ug-CN.umd.js +7 -0
- package/lib/language/uk-UA.js +7 -0
- package/lib/language/uk-UA.min.js +1 -1
- package/lib/language/uk-UA.umd.js +7 -0
- package/lib/language/uz-UZ.js +7 -0
- package/lib/language/uz-UZ.min.js +1 -1
- package/lib/language/uz-UZ.umd.js +7 -0
- package/lib/language/vi-VN.js +7 -0
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/vi-VN.umd.js +7 -0
- package/lib/language/zh-CHT.js +7 -0
- package/lib/language/zh-CHT.min.js +1 -1
- package/lib/language/zh-CHT.umd.js +7 -0
- package/lib/language/zh-CN.js +7 -0
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +7 -0
- package/lib/list/style/style.css +2 -1
- package/lib/list/style/style.min.css +1 -1
- package/lib/number-input/src/number-input.js +32 -10
- package/lib/number-input/src/number-input.min.js +1 -1
- package/lib/number-input/src/util.js +16 -5
- package/lib/number-input/src/util.min.js +1 -1
- package/lib/split/style/style.css +1 -1
- package/lib/split/style/style.min.css +1 -1
- package/lib/splitter/style/style.css +1 -1
- package/lib/splitter/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 +30 -24
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/tree-select/src/tree-select.js +22 -17
- package/lib/tree-select/src/tree-select.min.js +1 -1
- package/lib/tree-select/style/style.css +1 -8
- package/lib/tree-select/style/style.min.css +1 -1
- package/lib/ui/index.js +10 -4
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +6 -4
- 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-cascader/style/style.css +200 -21
- package/lib/vxe-cascader/style/style.min.css +1 -1
- package/lib/vxe-list/style/style.css +2 -1
- package/lib/vxe-list/style/style.min.css +1 -1
- package/lib/vxe-split/style/style.css +1 -1
- package/lib/vxe-split/style/style.min.css +1 -1
- package/lib/vxe-splitter/style/style.css +1 -1
- package/lib/vxe-splitter/style/style.min.css +1 -1
- package/lib/vxe-tree-select/style/style.css +1 -8
- package/lib/vxe-tree-select/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/cascader/src/cascader.ts +1293 -280
- package/packages/cascader/src/util.ts +9 -0
- package/packages/input/src/input.ts +2 -2
- package/packages/language/ar-EG.ts +7 -0
- package/packages/language/de-DE.ts +7 -0
- package/packages/language/en-US.ts +7 -0
- package/packages/language/es-ES.ts +7 -0
- package/packages/language/fr-FR.ts +7 -0
- package/packages/language/hu-HU.ts +7 -0
- package/packages/language/hy-AM.ts +7 -0
- package/packages/language/id-ID.ts +7 -0
- package/packages/language/it-IT.ts +7 -0
- package/packages/language/ja-JP.ts +7 -0
- package/packages/language/ko-KR.ts +7 -0
- package/packages/language/ms-MY.ts +7 -0
- package/packages/language/nb-NO.ts +7 -0
- package/packages/language/pt-BR.ts +7 -0
- package/packages/language/ru-RU.ts +7 -0
- package/packages/language/th-TH.ts +7 -0
- package/packages/language/ug-CN.ts +7 -0
- package/packages/language/uk-UA.ts +7 -0
- package/packages/language/uz-UZ.ts +7 -0
- package/packages/language/vi-VN.ts +7 -0
- package/packages/language/zh-CHT.ts +7 -0
- package/packages/language/zh-CN.ts +7 -0
- package/packages/number-input/src/number-input.ts +25 -12
- package/packages/number-input/src/util.ts +18 -5
- package/packages/tree/src/tree.ts +33 -28
- package/packages/tree-select/src/tree-select.ts +23 -16
- package/packages/ui/index.ts +10 -3
- package/packages/ui/src/dom.ts +4 -3
- package/styles/components/cascader.scss +116 -21
- package/styles/components/list.scss +2 -1
- package/styles/components/splitter.scss +3 -1
- package/styles/components/tree-select.scss +1 -8
- package/styles/helpers/placement.scss +2 -2
- package/styles/theme/base.scss +7 -0
- package/styles/theme/dark.scss +9 -0
- package/styles/theme/light.scss +9 -0
- package/styles/variable.scss +8 -0
- package/types/components/cascader.d.ts +169 -56
- package/types/components/number-input.d.ts +12 -1
- package/types/ui/global-icon.d.ts +5 -0
- /package/es/icon/{iconfont.1781439381800.ttf → iconfont.1781658322623.ttf} +0 -0
- /package/es/icon/{iconfont.1781439381800.woff → iconfont.1781658322623.woff} +0 -0
- /package/es/icon/{iconfont.1781439381800.woff2 → iconfont.1781658322623.woff2} +0 -0
- /package/es/{iconfont.1781439381800.ttf → iconfont.1781658322623.ttf} +0 -0
- /package/es/{iconfont.1781439381800.woff → iconfont.1781658322623.woff} +0 -0
- /package/es/{iconfont.1781439381800.woff2 → iconfont.1781658322623.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1781439381800.ttf → iconfont.1781658322623.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1781439381800.woff → iconfont.1781658322623.woff} +0 -0
- /package/lib/icon/style/{iconfont.1781439381800.woff2 → iconfont.1781658322623.woff2} +0 -0
- /package/lib/{iconfont.1781439381800.ttf → iconfont.1781658322623.ttf} +0 -0
- /package/lib/{iconfont.1781439381800.woff → iconfont.1781658322623.woff} +0 -0
- /package/lib/{iconfont.1781439381800.woff2 → iconfont.1781658322623.woff2} +0 -0
|
@@ -1,26 +1,74 @@
|
|
|
1
1
|
import { PropType, CreateElement, VNode } from 'vue'
|
|
2
2
|
import { defineVxeComponent } from '../../ui/src/comp'
|
|
3
|
-
import
|
|
4
|
-
import { getConfig, getI18n, getIcon, globalEvents, createEvent, globalMixins, renderEmptyElement } from '../../ui'
|
|
3
|
+
import { getConfig, getI18n, getIcon, globalEvents, createEvent, renderEmptyElement, getSlotVNs, globalMixins } from '../../ui'
|
|
5
4
|
import { getEventTargetNode, updatePanelPlacement, toCssUnit } from '../../ui/src/dom'
|
|
6
5
|
import { getLastZIndex, nextZIndex } from '../../ui/src/utils'
|
|
7
|
-
import { deNodeValue } from '
|
|
6
|
+
import { enNodeValue, deNodeValue } from './util'
|
|
8
7
|
import { errLog } from '../../ui/src/log'
|
|
8
|
+
import XEUtils from 'xe-utils'
|
|
9
|
+
import VxeListComponent from '../../list/src/list'
|
|
9
10
|
import VxeInputComponent from '../../input/src/input'
|
|
10
11
|
import VxeButtonComponent from '../../button/src/button'
|
|
11
12
|
|
|
12
|
-
import type { CascaderReactData, VxeCascaderEmits, CascaderInternalData, VxeComponentSizeType, VxeButtonDefines,
|
|
13
|
+
import type { CascaderReactData, VxeCascaderEmits, CascaderInternalData, VxeComponentSizeType, VxeButtonDefines, VxeCascaderDefines, VxeListSlotTypes, ValueOf, VxeInputConstructor, VxeComponentStyleType, VxeCascaderPropTypes, VxeFormDefines, VxeDrawerConstructor, VxeDrawerMethods, VxeFormConstructor, VxeFormPrivateMethods, VxeModalConstructor, VxeModalMethods } from '../../../types'
|
|
13
14
|
import type { VxeTableConstructor, VxeTablePrivateMethods } from '../../../types/components/table'
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
/**
|
|
17
|
+
* 生成节点的唯一主键
|
|
18
|
+
*/
|
|
19
|
+
function getNodeUniqueId () {
|
|
16
20
|
return XEUtils.uniqueId('node_')
|
|
17
21
|
}
|
|
18
22
|
|
|
23
|
+
function handleVisibleOrCheckMode (mode: '' | 'all' | 'first' | 'last' | null | undefined, isExistChild: boolean, nLevel: number) {
|
|
24
|
+
if (mode) {
|
|
25
|
+
if (mode === 'first') {
|
|
26
|
+
return !nLevel
|
|
27
|
+
}
|
|
28
|
+
if (mode === 'last') {
|
|
29
|
+
return !isExistChild
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return true
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function createReactData (): CascaderReactData {
|
|
36
|
+
return {
|
|
37
|
+
initialized: false,
|
|
38
|
+
searchValue: '',
|
|
39
|
+
searchLoading: false,
|
|
40
|
+
currentCunkList: [],
|
|
41
|
+
currentItems: [],
|
|
42
|
+
currentNode: null,
|
|
43
|
+
panelIndex: 0,
|
|
44
|
+
panelStyle: {},
|
|
45
|
+
panelPlacement: null,
|
|
46
|
+
triggerFocusPanel: false,
|
|
47
|
+
visiblePanel: false,
|
|
48
|
+
isAniVisible: false,
|
|
49
|
+
isActivated: false,
|
|
50
|
+
selectRadioKey: null,
|
|
51
|
+
treeList: [],
|
|
52
|
+
updateExpandedFlag: 1,
|
|
53
|
+
updateCheckboxFlag: 1,
|
|
54
|
+
fullOptFlag: 1,
|
|
55
|
+
lazyOptFlag: 1
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
19
59
|
function createInternalData (): CascaderInternalData {
|
|
20
60
|
return {
|
|
21
61
|
// hpTimeout: undefined,
|
|
22
|
-
|
|
23
|
-
|
|
62
|
+
afterTreeList: [],
|
|
63
|
+
treeFullData: [],
|
|
64
|
+
afterVisibleList: [],
|
|
65
|
+
nodeMaps: {},
|
|
66
|
+
fullNodeMaps: {},
|
|
67
|
+
lazyNodeMaps: {},
|
|
68
|
+
indeterminateRowMaps: {},
|
|
69
|
+
selectCheckboxMaps: {},
|
|
70
|
+
treeExpandedMaps: {},
|
|
71
|
+
treeExpandLazyLoadedMaps: {}
|
|
24
72
|
}
|
|
25
73
|
}
|
|
26
74
|
|
|
@@ -51,26 +99,41 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
51
99
|
},
|
|
52
100
|
filterable: Boolean as PropType<VxeCascaderPropTypes.Filterable>,
|
|
53
101
|
filterConfig: Object as PropType<VxeCascaderPropTypes.FilterConfig>,
|
|
102
|
+
showFullLabel: {
|
|
103
|
+
type: Boolean as PropType<VxeCascaderPropTypes.ShowFullLabel>,
|
|
104
|
+
default: getConfig().cascader.showFullLabel
|
|
105
|
+
},
|
|
106
|
+
separator: {
|
|
107
|
+
type: String as PropType<VxeCascaderPropTypes.Separator>,
|
|
108
|
+
default: getConfig().cascader.separator
|
|
109
|
+
},
|
|
54
110
|
multiple: Boolean as PropType<VxeCascaderPropTypes.Multiple>,
|
|
55
111
|
className: [String, Function] as PropType<VxeCascaderPropTypes.ClassName>,
|
|
56
112
|
prefixIcon: String as PropType<VxeCascaderPropTypes.PrefixIcon>,
|
|
57
|
-
placement: String as PropType<VxeCascaderPropTypes.Placement>,
|
|
58
|
-
transform: Boolean as PropType<VxeCascaderPropTypes.Transform>,
|
|
59
113
|
lazyOptions: Array as PropType<VxeCascaderPropTypes.LazyOptions>,
|
|
60
114
|
options: Array as PropType<VxeCascaderPropTypes.Options>,
|
|
61
115
|
optionProps: Object as PropType<VxeCascaderPropTypes.OptionProps>,
|
|
62
|
-
zIndex: Number as PropType<VxeCascaderPropTypes.ZIndex>,
|
|
63
116
|
size: {
|
|
64
117
|
type: String as PropType<VxeCascaderPropTypes.Size>,
|
|
65
118
|
default: () => getConfig().cascader.size || getConfig().size
|
|
66
119
|
},
|
|
120
|
+
treeConfig: Object as PropType<VxeCascaderPropTypes.TreeConfig>,
|
|
121
|
+
radioConfig: Object as PropType<VxeCascaderPropTypes.RadioConfig>,
|
|
122
|
+
checkboxConfig: Object as PropType<VxeCascaderPropTypes.CheckboxConfig>,
|
|
67
123
|
remote: Boolean as PropType<VxeCascaderPropTypes.Remote>,
|
|
68
124
|
remoteConfig: Function as PropType<VxeCascaderPropTypes.RemoteConfig>,
|
|
69
125
|
popupConfig: Object as PropType<VxeCascaderPropTypes.PopupConfig>,
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
126
|
+
checkedClosable: {
|
|
127
|
+
type: Boolean as PropType<VxeCascaderPropTypes.CheckedClosable>,
|
|
128
|
+
default: () => getConfig().cascader.checkedClosable
|
|
129
|
+
},
|
|
130
|
+
clearClosable: {
|
|
131
|
+
type: Boolean as PropType<VxeCascaderPropTypes.ClearClosable>,
|
|
132
|
+
default: () => getConfig().cascader.clearClosable
|
|
133
|
+
},
|
|
134
|
+
showCloseButton: {
|
|
135
|
+
type: Boolean as PropType<VxeCascaderPropTypes.ShowCloseButton>,
|
|
136
|
+
default: () => getConfig().cascader.showCloseButton
|
|
74
137
|
},
|
|
75
138
|
showTotalButton: {
|
|
76
139
|
type: Boolean as PropType<VxeCascaderPropTypes.ShowTotalButton>,
|
|
@@ -83,17 +146,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
83
146
|
showClearButton: {
|
|
84
147
|
type: Boolean as PropType<VxeCascaderPropTypes.ShowClearButton>,
|
|
85
148
|
default: () => getConfig().cascader.showClearButton
|
|
86
|
-
}
|
|
87
|
-
transfer: {
|
|
88
|
-
type: Boolean as PropType<VxeCascaderPropTypes.Transfer>,
|
|
89
|
-
default: null
|
|
90
|
-
},
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* 已废弃,被 remote-config.queryMethod 替换
|
|
94
|
-
* @deprecated
|
|
95
|
-
*/
|
|
96
|
-
remoteMethod: Function as PropType<VxeCascaderPropTypes.RemoteMethod>
|
|
149
|
+
}
|
|
97
150
|
},
|
|
98
151
|
inject: {
|
|
99
152
|
$xeModal: {
|
|
@@ -121,18 +174,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
121
174
|
},
|
|
122
175
|
data () {
|
|
123
176
|
const xID = XEUtils.uniqueId()
|
|
124
|
-
const reactData
|
|
125
|
-
initialized: false,
|
|
126
|
-
searchValue: '',
|
|
127
|
-
searchLoading: false,
|
|
128
|
-
panelIndex: 0,
|
|
129
|
-
panelStyle: {},
|
|
130
|
-
panelPlacement: null,
|
|
131
|
-
triggerFocusPanel: false,
|
|
132
|
-
visiblePanel: false,
|
|
133
|
-
isAniVisible: false,
|
|
134
|
-
isActivated: false
|
|
135
|
-
}
|
|
177
|
+
const reactData = createReactData()
|
|
136
178
|
const internalData = createInternalData()
|
|
137
179
|
return {
|
|
138
180
|
xID,
|
|
@@ -179,29 +221,20 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
179
221
|
},
|
|
180
222
|
computeBtnTransfer () {
|
|
181
223
|
const $xeCascader = this
|
|
182
|
-
const props = $xeCascader
|
|
183
224
|
const $xeTable = $xeCascader.$xeTable
|
|
184
225
|
const $xeModal = $xeCascader.$xeModal
|
|
185
226
|
const $xeDrawer = $xeCascader.$xeDrawer
|
|
186
227
|
const $xeForm = $xeCascader.$xeForm
|
|
187
228
|
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
return globalTransfer
|
|
193
|
-
}
|
|
194
|
-
if ($xeTable || $xeModal || $xeDrawer || $xeForm) {
|
|
195
|
-
return true
|
|
196
|
-
}
|
|
229
|
+
const popupOpts = $xeCascader.computePopupOpts as VxeCascaderPropTypes.PopupConfig
|
|
230
|
+
const { transfer } = popupOpts
|
|
231
|
+
if (XEUtils.isBoolean(transfer)) {
|
|
232
|
+
return transfer
|
|
197
233
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
const props = $xeCascader
|
|
203
|
-
|
|
204
|
-
return Object.assign({}, getConfig().cascader.popupConfig, props.popupConfig)
|
|
234
|
+
if ($xeTable || $xeModal || $xeDrawer || $xeForm) {
|
|
235
|
+
return true
|
|
236
|
+
}
|
|
237
|
+
return false
|
|
205
238
|
},
|
|
206
239
|
computeTreeOpts () {
|
|
207
240
|
const $xeCascader = this
|
|
@@ -209,43 +242,29 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
209
242
|
|
|
210
243
|
return Object.assign({}, getConfig().cascader.treeConfig, props.treeConfig)
|
|
211
244
|
},
|
|
212
|
-
|
|
245
|
+
computeRadioOpts () {
|
|
213
246
|
const $xeCascader = this
|
|
247
|
+
const props = $xeCascader
|
|
214
248
|
|
|
215
|
-
|
|
216
|
-
return Object.assign({ isHover: true }, treeOpts.nodeConfig)
|
|
249
|
+
return Object.assign({}, getConfig().cascader.radioConfig, props.radioConfig)
|
|
217
250
|
},
|
|
218
|
-
|
|
251
|
+
computeCheckboxOpts () {
|
|
219
252
|
const $xeCascader = this
|
|
253
|
+
const props = $xeCascader
|
|
220
254
|
|
|
221
|
-
|
|
222
|
-
return Object.assign({
|
|
223
|
-
showIcon: !!treeOpts.showCheckbox
|
|
224
|
-
}, treeOpts.checkboxConfig, {
|
|
225
|
-
trigger: 'node'
|
|
226
|
-
})
|
|
255
|
+
return Object.assign({}, getConfig().cascader.checkboxConfig, props.checkboxConfig)
|
|
227
256
|
},
|
|
228
|
-
|
|
257
|
+
computePopupOpts () {
|
|
229
258
|
const $xeCascader = this
|
|
259
|
+
const props = $xeCascader
|
|
230
260
|
|
|
231
|
-
|
|
232
|
-
return Object.assign({
|
|
233
|
-
showIcon: !!treeOpts.showRadio
|
|
234
|
-
}, treeOpts.radioConfig, {
|
|
235
|
-
trigger: 'node'
|
|
236
|
-
})
|
|
261
|
+
return Object.assign({}, getConfig().cascader.popupConfig, props.popupConfig)
|
|
237
262
|
},
|
|
238
263
|
computePropsOpts () {
|
|
239
264
|
const $xeCascader = this
|
|
240
265
|
const props = $xeCascader
|
|
241
266
|
|
|
242
|
-
return
|
|
243
|
-
},
|
|
244
|
-
computeNodeKeyField () {
|
|
245
|
-
const $xeCascader = this
|
|
246
|
-
|
|
247
|
-
const valueField = $xeCascader.computeValueField as string
|
|
248
|
-
return valueField
|
|
267
|
+
return props.optionProps || {}
|
|
249
268
|
},
|
|
250
269
|
computeLabelField () {
|
|
251
270
|
const $xeCascader = this
|
|
@@ -259,23 +278,35 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
259
278
|
const propsOpts = $xeCascader.computePropsOpts as VxeCascaderPropTypes.OptionProps
|
|
260
279
|
return propsOpts.value || 'value'
|
|
261
280
|
},
|
|
262
|
-
|
|
281
|
+
computeKeyField () {
|
|
263
282
|
const $xeCascader = this
|
|
264
283
|
|
|
265
|
-
const
|
|
266
|
-
return
|
|
284
|
+
const treeOpts = $xeCascader.computeTreeOpts as VxeCascaderPropTypes.TreeConfig
|
|
285
|
+
return treeOpts.keyField || 'id'
|
|
267
286
|
},
|
|
268
287
|
computeParentField () {
|
|
269
288
|
const $xeCascader = this
|
|
270
289
|
|
|
271
|
-
const
|
|
272
|
-
return
|
|
290
|
+
const treeOpts = $xeCascader.computeTreeOpts as VxeCascaderPropTypes.TreeConfig
|
|
291
|
+
return treeOpts.parentField || 'parentId'
|
|
292
|
+
},
|
|
293
|
+
computeChildrenField () {
|
|
294
|
+
const $xeCascader = this
|
|
295
|
+
|
|
296
|
+
const treeOpts = $xeCascader.computeTreeOpts as VxeCascaderPropTypes.TreeConfig
|
|
297
|
+
return treeOpts.childrenField || 'children'
|
|
298
|
+
},
|
|
299
|
+
computeMapChildrenField () {
|
|
300
|
+
const $xeCascader = this
|
|
301
|
+
|
|
302
|
+
const treeOpts = $xeCascader.computeTreeOpts as VxeCascaderPropTypes.TreeConfig
|
|
303
|
+
return treeOpts.mapChildrenField || 'mapChildren'
|
|
273
304
|
},
|
|
274
305
|
computeHasChildField () {
|
|
275
306
|
const $xeCascader = this
|
|
276
307
|
|
|
277
|
-
const
|
|
278
|
-
return
|
|
308
|
+
const treeOpts = $xeCascader.computeTreeOpts as VxeCascaderPropTypes.TreeConfig
|
|
309
|
+
return treeOpts.hasChildField || 'hasChild'
|
|
279
310
|
},
|
|
280
311
|
computeRemoteOpts () {
|
|
281
312
|
const $xeCascader = this
|
|
@@ -283,32 +314,33 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
283
314
|
|
|
284
315
|
return Object.assign({}, getConfig().cascader.remoteConfig, props.remoteConfig)
|
|
285
316
|
},
|
|
286
|
-
|
|
317
|
+
computeSelectVals () {
|
|
287
318
|
const $xeCascader = this
|
|
288
319
|
const props = $xeCascader
|
|
289
320
|
|
|
290
|
-
const
|
|
291
|
-
return
|
|
321
|
+
const { value: modelValue } = props
|
|
322
|
+
return XEUtils.eqNull(modelValue) ? [] : (XEUtils.isArray(modelValue) ? modelValue : [modelValue])
|
|
292
323
|
},
|
|
293
324
|
computeSelectLabel () {
|
|
294
325
|
const $xeCascader = this
|
|
295
326
|
const props = $xeCascader
|
|
327
|
+
const reactData = ($xeCascader as any).reactData as CascaderReactData
|
|
296
328
|
const internalData = ($xeCascader as any).internalData as CascaderInternalData
|
|
297
329
|
|
|
298
|
-
const {
|
|
299
|
-
const {
|
|
300
|
-
const
|
|
330
|
+
const { showFullLabel } = props
|
|
331
|
+
const { fullOptFlag, lazyOptFlag } = reactData
|
|
332
|
+
const { fullNodeMaps, lazyNodeMaps } = internalData
|
|
301
333
|
const labelField = $xeCascader.computeLabelField as string
|
|
302
|
-
const selectVals =
|
|
334
|
+
const selectVals = $xeCascader.computeSelectVals as any[]
|
|
303
335
|
return selectVals.map(val => {
|
|
304
336
|
const cacheItem = fullNodeMaps[val]
|
|
305
|
-
if (cacheItem) {
|
|
306
|
-
return cacheItem.item[labelField]
|
|
337
|
+
if (fullOptFlag && cacheItem) {
|
|
338
|
+
return showFullLabel ? cacheItem.fullLabel : cacheItem.item[labelField]
|
|
307
339
|
}
|
|
308
|
-
if (
|
|
309
|
-
const
|
|
310
|
-
if (
|
|
311
|
-
return
|
|
340
|
+
if (lazyOptFlag) {
|
|
341
|
+
const lazyCacheItem = lazyNodeMaps[val]
|
|
342
|
+
if (lazyCacheItem) {
|
|
343
|
+
return showFullLabel ? lazyCacheItem.fullLabel : lazyCacheItem.item[labelField]
|
|
312
344
|
}
|
|
313
345
|
}
|
|
314
346
|
return val
|
|
@@ -316,18 +348,31 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
316
348
|
},
|
|
317
349
|
computePopupWrapperStyle () {
|
|
318
350
|
const $xeCascader = this
|
|
351
|
+
const reactData = $xeCascader.reactData
|
|
319
352
|
|
|
353
|
+
const { currentCunkList, panelStyle } = reactData
|
|
320
354
|
const popupOpts = $xeCascader.computePopupOpts
|
|
321
|
-
const { height,
|
|
322
|
-
const stys: VxeComponentStyleType = {
|
|
323
|
-
|
|
324
|
-
|
|
355
|
+
const { height, nodeWidth, nodeHeight } = popupOpts
|
|
356
|
+
const stys: VxeComponentStyleType = {
|
|
357
|
+
...panelStyle,
|
|
358
|
+
'--vxe-ui-cascader-chunk-size': currentCunkList.length
|
|
325
359
|
}
|
|
326
360
|
if (height) {
|
|
327
|
-
stys
|
|
328
|
-
|
|
361
|
+
stys['--vxe-ui-cascader-chunk-height'] = toCssUnit(height)
|
|
362
|
+
}
|
|
363
|
+
if (nodeWidth) {
|
|
364
|
+
stys['--vxe-ui-cascader-node-width'] = toCssUnit(nodeWidth)
|
|
365
|
+
}
|
|
366
|
+
if (nodeHeight) {
|
|
367
|
+
stys['--vxe-ui-cascader-node-height'] = toCssUnit(nodeHeight)
|
|
329
368
|
}
|
|
330
369
|
return stys
|
|
370
|
+
},
|
|
371
|
+
computeFilterOpts () {
|
|
372
|
+
const $xeCascader = this
|
|
373
|
+
const props = $xeCascader
|
|
374
|
+
|
|
375
|
+
return Object.assign({}, getConfig().cascader.filterConfig, props.filterConfig)
|
|
331
376
|
}
|
|
332
377
|
},
|
|
333
378
|
methods: {
|
|
@@ -348,76 +393,393 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
348
393
|
$xeCascader.$emit('model-value', value)
|
|
349
394
|
}
|
|
350
395
|
},
|
|
351
|
-
|
|
396
|
+
getNodeId (node: any) {
|
|
352
397
|
const $xeCascader = this
|
|
353
398
|
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
399
|
+
if (!node) {
|
|
400
|
+
return ''
|
|
401
|
+
}
|
|
402
|
+
const valueField = $xeCascader.computeValueField
|
|
403
|
+
const nodeKey = node[valueField]
|
|
404
|
+
return enNodeValue(nodeKey)
|
|
357
405
|
},
|
|
358
|
-
|
|
406
|
+
isCheckedByCheckboxNodeId (nodeid: any) {
|
|
359
407
|
const $xeCascader = this
|
|
360
|
-
const
|
|
408
|
+
const reactData = $xeCascader.reactData
|
|
361
409
|
const internalData = $xeCascader.internalData
|
|
362
410
|
|
|
363
|
-
const {
|
|
364
|
-
const
|
|
411
|
+
const { updateCheckboxFlag } = reactData
|
|
412
|
+
const { selectCheckboxMaps } = internalData
|
|
413
|
+
return !!(updateCheckboxFlag && selectCheckboxMaps[nodeid])
|
|
414
|
+
},
|
|
415
|
+
handleCheckedCheckboxNode (nodeList: any[], checked: boolean) {
|
|
416
|
+
const $xeCascader = this
|
|
417
|
+
const reactData = $xeCascader.reactData
|
|
418
|
+
const internalData = $xeCascader.internalData
|
|
419
|
+
|
|
420
|
+
const { selectCheckboxMaps } = internalData
|
|
421
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
365
422
|
const childrenField = $xeCascader.computeChildrenField
|
|
423
|
+
const checkboxOpts = $xeCascader.computeCheckboxOpts
|
|
424
|
+
const { checkStrictly } = checkboxOpts
|
|
425
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
426
|
+
const { transform } = treeOpts
|
|
427
|
+
const handleSelect = (node: any) => {
|
|
428
|
+
const nodeid = $xeCascader.getNodeId(node)
|
|
429
|
+
if (checked) {
|
|
430
|
+
if (!selectCheckboxMaps[nodeid]) {
|
|
431
|
+
selectCheckboxMaps[nodeid] = node
|
|
432
|
+
}
|
|
433
|
+
} else {
|
|
434
|
+
if (selectCheckboxMaps[nodeid]) {
|
|
435
|
+
delete selectCheckboxMaps[nodeid]
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
if (checkStrictly) {
|
|
440
|
+
nodeList.forEach(handleSelect)
|
|
441
|
+
} else {
|
|
442
|
+
XEUtils.eachTree(nodeList, handleSelect, { children: transform ? mapChildrenField : childrenField })
|
|
443
|
+
}
|
|
444
|
+
reactData.updateCheckboxFlag++
|
|
445
|
+
$xeCascader.updateCheckboxStatus()
|
|
446
|
+
},
|
|
447
|
+
createNode (records: any[]) {
|
|
448
|
+
const $xeCascader = this
|
|
449
|
+
|
|
366
450
|
const valueField = $xeCascader.computeValueField
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
451
|
+
return Promise.resolve(
|
|
452
|
+
records.map(obj => {
|
|
453
|
+
const item = { ...obj }
|
|
454
|
+
let nodeid = $xeCascader.getNodeId(item)
|
|
455
|
+
if (!nodeid) {
|
|
456
|
+
nodeid = getNodeUniqueId()
|
|
457
|
+
XEUtils.set(item, valueField, nodeid)
|
|
458
|
+
}
|
|
459
|
+
return item
|
|
460
|
+
})
|
|
461
|
+
)
|
|
462
|
+
},
|
|
463
|
+
cacheNodeMap () {
|
|
464
|
+
const $xeCascader = this
|
|
465
|
+
const props = $xeCascader
|
|
466
|
+
const reactData = $xeCascader.reactData
|
|
467
|
+
const internalData = $xeCascader.internalData
|
|
468
|
+
|
|
469
|
+
const { separator } = props
|
|
470
|
+
const { treeFullData } = internalData
|
|
471
|
+
const valueField = $xeCascader.computeValueField
|
|
472
|
+
const labelField = $xeCascader.computeLabelField
|
|
473
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
474
|
+
const keyMaps: Record<string, VxeCascaderDefines.NodeCacheItem> = {}
|
|
475
|
+
const fullMaps: Record<string, VxeCascaderDefines.NodeCacheItem> = {}
|
|
476
|
+
XEUtils.eachTree(treeFullData, (item, index, items, path, parenItem, nodes) => {
|
|
477
|
+
let nodeid = $xeCascader.getNodeId(item)
|
|
377
478
|
if (!nodeid) {
|
|
378
|
-
nodeid =
|
|
479
|
+
nodeid = getNodeUniqueId()
|
|
480
|
+
item[valueField] = nodeid
|
|
379
481
|
}
|
|
380
|
-
|
|
381
|
-
|
|
482
|
+
const nodeVal = item[valueField]
|
|
483
|
+
const itemRest = {
|
|
484
|
+
item,
|
|
485
|
+
index,
|
|
486
|
+
$index: -1,
|
|
487
|
+
_index: -1,
|
|
488
|
+
items,
|
|
489
|
+
parent: parenItem,
|
|
490
|
+
nodes,
|
|
491
|
+
level: nodes.length - 1,
|
|
492
|
+
treeIndex: index,
|
|
493
|
+
lineCount: 0,
|
|
494
|
+
treeLoaded: false,
|
|
495
|
+
fullLabel: nodes.map(item => item[labelField]).join((separator || ' / '))
|
|
382
496
|
}
|
|
383
|
-
keyMaps[nodeid] =
|
|
384
|
-
|
|
385
|
-
if (nodeMaps[value]) {
|
|
386
|
-
errLog('vxe.error.repeatKey', [`[tree-select] ${valueField}`, value])
|
|
387
|
-
}
|
|
388
|
-
nodeMaps[value] = { item, index, items, parent, nodes }
|
|
497
|
+
keyMaps[nodeid] = itemRest
|
|
498
|
+
fullMaps[nodeVal] = itemRest
|
|
389
499
|
}, { children: childrenField })
|
|
390
|
-
internalData.
|
|
391
|
-
internalData.fullNodeMaps =
|
|
500
|
+
internalData.nodeMaps = keyMaps
|
|
501
|
+
internalData.fullNodeMaps = fullMaps
|
|
502
|
+
reactData.fullOptFlag++
|
|
392
503
|
},
|
|
393
|
-
|
|
504
|
+
updateAfterDataIndex () {
|
|
394
505
|
const $xeCascader = this
|
|
395
506
|
const props = $xeCascader
|
|
507
|
+
const internalData = $xeCascader.internalData
|
|
508
|
+
|
|
509
|
+
const { separator } = props
|
|
510
|
+
const { afterTreeList, nodeMaps } = internalData
|
|
511
|
+
const labelField = $xeCascader.computeLabelField
|
|
512
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
513
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
514
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
515
|
+
const { transform } = treeOpts
|
|
516
|
+
let vtIndex = 0
|
|
517
|
+
XEUtils.eachTree(afterTreeList, (item, index, items, path, parenItem, nodes) => {
|
|
518
|
+
const nodeid = $xeCascader.getNodeId(item)
|
|
519
|
+
const nodeItem = nodeMaps[nodeid]
|
|
520
|
+
if (nodeItem) {
|
|
521
|
+
nodeItem.items = items
|
|
522
|
+
nodeItem.treeIndex = index
|
|
523
|
+
nodeItem._index = vtIndex
|
|
524
|
+
} else {
|
|
525
|
+
const rest = {
|
|
526
|
+
item,
|
|
527
|
+
index,
|
|
528
|
+
$index: -1,
|
|
529
|
+
_index: vtIndex,
|
|
530
|
+
items,
|
|
531
|
+
parent: parenItem,
|
|
532
|
+
nodes,
|
|
533
|
+
level: nodes.length - 1,
|
|
534
|
+
treeIndex: index,
|
|
535
|
+
lineCount: 0,
|
|
536
|
+
treeLoaded: false,
|
|
537
|
+
fullLabel: nodes.map(item => item[labelField]).join((separator || ' / '))
|
|
538
|
+
}
|
|
539
|
+
nodeMaps[nodeid] = rest
|
|
540
|
+
}
|
|
541
|
+
vtIndex++
|
|
542
|
+
}, { children: transform ? mapChildrenField : childrenField })
|
|
543
|
+
},
|
|
544
|
+
updateAfterFullData () {
|
|
545
|
+
const $xeCascader = this
|
|
396
546
|
const reactData = $xeCascader.reactData
|
|
547
|
+
const internalData = $xeCascader.internalData
|
|
548
|
+
|
|
549
|
+
const { searchValue } = reactData
|
|
550
|
+
const { treeFullData, lastFilterValue } = internalData
|
|
551
|
+
const labelField = $xeCascader.computeLabelField
|
|
552
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
553
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
554
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
555
|
+
const { transform } = treeOpts
|
|
556
|
+
const filterOpts = $xeCascader.computeFilterOpts
|
|
557
|
+
const { beforeFilterMethod, filterMethod, afterFilterMethod } = filterOpts
|
|
558
|
+
let fullList = treeFullData
|
|
559
|
+
let treeList = fullList
|
|
560
|
+
let filterStr = ''
|
|
561
|
+
if (searchValue) {
|
|
562
|
+
filterStr = `${searchValue}`
|
|
563
|
+
const handleSearch = filterMethod
|
|
564
|
+
? (item: any) => {
|
|
565
|
+
return filterMethod({
|
|
566
|
+
$cascader: $xeCascader,
|
|
567
|
+
node: item,
|
|
568
|
+
filterValue: filterStr
|
|
569
|
+
})
|
|
570
|
+
}
|
|
571
|
+
: (item: any) => {
|
|
572
|
+
return String(item[labelField]).toLowerCase().indexOf(filterStr.toLowerCase()) > -1
|
|
573
|
+
}
|
|
574
|
+
const bafParams = { $cascader: $xeCascader, filterValue: filterStr }
|
|
575
|
+
if (beforeFilterMethod) {
|
|
576
|
+
beforeFilterMethod(bafParams)
|
|
577
|
+
}
|
|
578
|
+
if (transform) {
|
|
579
|
+
treeList = XEUtils.searchTree(treeFullData, handleSearch, {
|
|
580
|
+
original: true,
|
|
581
|
+
isEvery: true,
|
|
582
|
+
children: childrenField,
|
|
583
|
+
mapChildren: mapChildrenField
|
|
584
|
+
})
|
|
585
|
+
fullList = treeList
|
|
586
|
+
} else {
|
|
587
|
+
fullList = treeFullData.filter(handleSearch)
|
|
588
|
+
}
|
|
589
|
+
internalData.lastFilterValue = filterStr
|
|
590
|
+
$xeCascader.$nextTick(() => {
|
|
591
|
+
if (afterFilterMethod) {
|
|
592
|
+
afterFilterMethod(bafParams)
|
|
593
|
+
}
|
|
594
|
+
})
|
|
595
|
+
} else {
|
|
596
|
+
if (transform) {
|
|
597
|
+
treeList = XEUtils.searchTree(treeFullData, () => true, {
|
|
598
|
+
original: true,
|
|
599
|
+
isEvery: true,
|
|
600
|
+
children: childrenField,
|
|
601
|
+
mapChildren: mapChildrenField
|
|
602
|
+
})
|
|
603
|
+
fullList = treeList
|
|
604
|
+
if (lastFilterValue) {
|
|
605
|
+
const bafParams = { $cascader: $xeCascader, filterValue: filterStr }
|
|
606
|
+
if (beforeFilterMethod) {
|
|
607
|
+
beforeFilterMethod(bafParams)
|
|
608
|
+
}
|
|
609
|
+
// 取消筛选时自动收起
|
|
610
|
+
$xeCascader.$nextTick(() => {
|
|
611
|
+
if (afterFilterMethod) {
|
|
612
|
+
afterFilterMethod(bafParams)
|
|
613
|
+
}
|
|
614
|
+
})
|
|
615
|
+
}
|
|
616
|
+
}
|
|
617
|
+
internalData.lastFilterValue = ''
|
|
618
|
+
}
|
|
619
|
+
internalData.afterVisibleList = fullList
|
|
620
|
+
internalData.afterTreeList = treeList
|
|
621
|
+
$xeCascader.updateAfterDataIndex()
|
|
622
|
+
},
|
|
623
|
+
/**
|
|
624
|
+
* 如果为虚拟树、则将树结构拍平
|
|
625
|
+
*/
|
|
626
|
+
handleTreeToList () {
|
|
627
|
+
const $xeCascader = this
|
|
628
|
+
const internalData = $xeCascader.internalData
|
|
397
629
|
|
|
398
|
-
const {
|
|
630
|
+
const { afterTreeList, treeExpandedMaps } = internalData
|
|
631
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
632
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
633
|
+
const { transform } = treeOpts
|
|
634
|
+
const expandMaps: {
|
|
635
|
+
[key: string]: number
|
|
636
|
+
} = {}
|
|
637
|
+
if (transform) {
|
|
638
|
+
const fullData: any[] = []
|
|
639
|
+
XEUtils.eachTree(afterTreeList, (item, index, items, path, parentRow) => {
|
|
640
|
+
const nodeid = $xeCascader.getNodeId(item)
|
|
641
|
+
const parentNodeid = $xeCascader.getNodeId(parentRow)
|
|
642
|
+
if (!parentRow || (expandMaps[parentNodeid] && treeExpandedMaps[parentNodeid])) {
|
|
643
|
+
expandMaps[nodeid] = 1
|
|
644
|
+
fullData.push(item)
|
|
645
|
+
}
|
|
646
|
+
}, { children: mapChildrenField })
|
|
647
|
+
internalData.afterVisibleList = fullData
|
|
648
|
+
return fullData
|
|
649
|
+
}
|
|
650
|
+
return internalData.afterVisibleList
|
|
651
|
+
},
|
|
652
|
+
handleData (force?: boolean) {
|
|
653
|
+
const $xeCascader = this
|
|
654
|
+
const reactData = $xeCascader.reactData
|
|
655
|
+
const internalData = $xeCascader.internalData
|
|
656
|
+
|
|
657
|
+
const { nodeMaps } = internalData
|
|
658
|
+
let fullList: any[] = internalData.afterVisibleList
|
|
659
|
+
if (force) {
|
|
660
|
+
// 更新数据,处理筛选和排序
|
|
661
|
+
$xeCascader.updateAfterFullData()
|
|
662
|
+
// 如果为虚拟树,将树结构拍平
|
|
663
|
+
fullList = $xeCascader.handleTreeToList()
|
|
664
|
+
}
|
|
665
|
+
const treeList = fullList.slice(0)
|
|
666
|
+
treeList.forEach((item, $index) => {
|
|
667
|
+
const nodeid = $xeCascader.getNodeId(item)
|
|
668
|
+
const itemRest = nodeMaps[nodeid]
|
|
669
|
+
if (itemRest) {
|
|
670
|
+
itemRest.$index = $index
|
|
671
|
+
}
|
|
672
|
+
})
|
|
673
|
+
reactData.treeList = treeList
|
|
674
|
+
},
|
|
675
|
+
triggerSearchEvent: XEUtils.debounce(function (this: any) {
|
|
676
|
+
const $xeCascader = this
|
|
677
|
+
|
|
678
|
+
$xeCascader.handleData(true)
|
|
679
|
+
}, 350, { trailing: true }),
|
|
680
|
+
loadData (list: any[]) {
|
|
681
|
+
const $xeCascader = this
|
|
682
|
+
const internalData = $xeCascader.internalData
|
|
683
|
+
|
|
684
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
685
|
+
const keyField = $xeCascader.computeKeyField
|
|
686
|
+
const parentField = $xeCascader.computeParentField
|
|
687
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
688
|
+
const { rootParentValue, rootValues } = treeOpts
|
|
689
|
+
const { transform } = treeOpts
|
|
690
|
+
const fullData = transform
|
|
691
|
+
? XEUtils.toArrayTree(list, {
|
|
692
|
+
key: keyField,
|
|
693
|
+
parentKey: parentField,
|
|
694
|
+
mapChildren: childrenField,
|
|
695
|
+
rootParentValue,
|
|
696
|
+
rootValues
|
|
697
|
+
})
|
|
698
|
+
: list ? list.slice(0) : []
|
|
699
|
+
internalData.treeFullData = fullData
|
|
700
|
+
$xeCascader.cacheNodeMap()
|
|
701
|
+
$xeCascader.handleData(true)
|
|
702
|
+
$xeCascader.handleCurrentItems()
|
|
703
|
+
$xeCascader.updateCurrentChunk()
|
|
704
|
+
return $xeCascader.$nextTick()
|
|
705
|
+
},
|
|
706
|
+
updateCurrentChunk () {
|
|
707
|
+
const $xeCascader = this
|
|
708
|
+
const reactData = $xeCascader.reactData
|
|
709
|
+
const internalData = $xeCascader.internalData
|
|
710
|
+
|
|
711
|
+
const { currentItems } = reactData
|
|
712
|
+
const { treeFullData } = internalData
|
|
713
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
714
|
+
const currentCunkList: any[][] = [treeFullData]
|
|
715
|
+
if (currentItems.length) {
|
|
716
|
+
let chunkIndex = 0
|
|
717
|
+
let stNodeid = currentItems[chunkIndex]
|
|
718
|
+
let optList = treeFullData
|
|
719
|
+
while (stNodeid && optList && optList.length) {
|
|
720
|
+
stNodeid = currentItems[chunkIndex++]
|
|
721
|
+
const currOption = optList.find(item => stNodeid === $xeCascader.getNodeId(item))
|
|
722
|
+
optList = currOption ? currOption[childrenField] : []
|
|
723
|
+
if (!optList || !optList.length) {
|
|
724
|
+
break
|
|
725
|
+
}
|
|
726
|
+
currentCunkList.push(optList)
|
|
727
|
+
}
|
|
728
|
+
}
|
|
729
|
+
reactData.currentCunkList = currentCunkList
|
|
730
|
+
},
|
|
731
|
+
handleCurrentItems () {
|
|
732
|
+
const $xeCascader = this
|
|
733
|
+
const reactData = $xeCascader.reactData
|
|
734
|
+
const internalData = $xeCascader.internalData
|
|
735
|
+
|
|
736
|
+
const { treeFullData } = internalData
|
|
737
|
+
const selectVals = $xeCascader.computeSelectVals
|
|
738
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
739
|
+
const stItems: string[] = []
|
|
740
|
+
const expandedMaps: Record<string, boolean> = {}
|
|
741
|
+
if (selectVals.length) {
|
|
742
|
+
const lastVal = XEUtils.last(selectVals)
|
|
743
|
+
const stRest = XEUtils.findTree(treeFullData, (item) => lastVal === $xeCascader.getNodeId(item), { children: childrenField })
|
|
744
|
+
if (stRest) {
|
|
745
|
+
const { nodes } = stRest
|
|
746
|
+
nodes.forEach(item => {
|
|
747
|
+
const nodeid = $xeCascader.getNodeId(item)
|
|
748
|
+
expandedMaps[nodeid] = true
|
|
749
|
+
stItems.push(nodeid)
|
|
750
|
+
})
|
|
751
|
+
}
|
|
752
|
+
}
|
|
753
|
+
internalData.treeExpandedMaps = expandedMaps
|
|
754
|
+
reactData.currentItems = stItems
|
|
755
|
+
},
|
|
756
|
+
updateZindex () {
|
|
757
|
+
const $xeCascader = this
|
|
758
|
+
const reactData = $xeCascader.reactData
|
|
759
|
+
|
|
760
|
+
const popupOpts = $xeCascader.computePopupOpts
|
|
761
|
+
const { zIndex } = popupOpts
|
|
399
762
|
if (zIndex) {
|
|
400
763
|
reactData.panelIndex = zIndex
|
|
401
764
|
} else if (reactData.panelIndex < getLastZIndex()) {
|
|
402
765
|
reactData.panelIndex = nextZIndex()
|
|
403
766
|
}
|
|
404
767
|
},
|
|
405
|
-
updatePlacement
|
|
768
|
+
updatePlacement () {
|
|
406
769
|
const $xeCascader = this
|
|
407
|
-
const props = $xeCascader
|
|
408
770
|
const reactData = $xeCascader.reactData
|
|
409
771
|
|
|
410
|
-
const { placement } = props
|
|
411
772
|
const { panelIndex } = reactData
|
|
412
|
-
const targetElem = $xeCascader.$refs.refElem as
|
|
773
|
+
const targetElem = $xeCascader.$refs.refElem as HTMLDivElement
|
|
413
774
|
const panelElem = $xeCascader.$refs.refOptionPanel as HTMLDivElement
|
|
414
775
|
const btnTransfer = $xeCascader.computeBtnTransfer
|
|
415
776
|
const popupOpts = $xeCascader.computePopupOpts
|
|
416
777
|
const handleStyle = () => {
|
|
417
778
|
const ppObj = updatePanelPlacement(targetElem, panelElem, {
|
|
418
|
-
placement: popupOpts.placement
|
|
779
|
+
placement: popupOpts.placement,
|
|
419
780
|
defaultPlacement: popupOpts.defaultPlacement,
|
|
420
|
-
teleportTo: btnTransfer
|
|
781
|
+
teleportTo: btnTransfer,
|
|
782
|
+
isMinWidth: false
|
|
421
783
|
})
|
|
422
784
|
const panelStyle: { [key: string]: string | number } = Object.assign(ppObj.style, {
|
|
423
785
|
zIndex: panelIndex
|
|
@@ -428,20 +790,18 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
428
790
|
handleStyle()
|
|
429
791
|
return $xeCascader.$nextTick().then(handleStyle)
|
|
430
792
|
},
|
|
431
|
-
showOptionPanel
|
|
793
|
+
showOptionPanel (evnt?: Event) {
|
|
432
794
|
const $xeCascader = this
|
|
433
795
|
const props = $xeCascader
|
|
434
796
|
const reactData = $xeCascader.reactData
|
|
435
797
|
const internalData = $xeCascader.internalData
|
|
436
798
|
|
|
437
799
|
const { loading, remote, filterable } = props
|
|
438
|
-
const {
|
|
800
|
+
const { treeFullData } = internalData
|
|
439
801
|
const isDisabled = $xeCascader.computeIsDisabled
|
|
440
802
|
const remoteOpts = $xeCascader.computeRemoteOpts
|
|
441
803
|
if (!loading && !isDisabled) {
|
|
442
|
-
|
|
443
|
-
clearTimeout(internalData.hpTimeout)
|
|
444
|
-
}
|
|
804
|
+
clearTimeout(internalData.hpTimeout)
|
|
445
805
|
if (!reactData.initialized) {
|
|
446
806
|
reactData.initialized = true
|
|
447
807
|
const btnTransfer = $xeCascader.computeBtnTransfer
|
|
@@ -455,7 +815,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
455
815
|
reactData.isActivated = true
|
|
456
816
|
reactData.isAniVisible = true
|
|
457
817
|
if (filterable) {
|
|
458
|
-
if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !
|
|
818
|
+
if (remote && remoteOpts.enabled && remoteOpts.autoLoad && !treeFullData.length) {
|
|
459
819
|
$xeCascader.handleSearchEvent()
|
|
460
820
|
}
|
|
461
821
|
}
|
|
@@ -465,9 +825,10 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
465
825
|
}, 10)
|
|
466
826
|
$xeCascader.updateZindex()
|
|
467
827
|
$xeCascader.updatePlacement()
|
|
828
|
+
$xeCascader.dispatchEvent('visible-change', { visible: true }, evnt || null)
|
|
468
829
|
}
|
|
469
830
|
},
|
|
470
|
-
hideOptionPanel () {
|
|
831
|
+
hideOptionPanel (evnt?: Event) {
|
|
471
832
|
const $xeCascader = this
|
|
472
833
|
const reactData = $xeCascader.reactData
|
|
473
834
|
const internalData = $xeCascader.internalData
|
|
@@ -476,6 +837,55 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
476
837
|
internalData.hpTimeout = setTimeout(() => {
|
|
477
838
|
reactData.isAniVisible = false
|
|
478
839
|
}, 350)
|
|
840
|
+
$xeCascader.dispatchEvent('visible-change', { visible: false }, evnt || null)
|
|
841
|
+
},
|
|
842
|
+
setCurrentNode (node: any) {
|
|
843
|
+
const $xeCascader = this
|
|
844
|
+
const reactData = $xeCascader.reactData
|
|
845
|
+
|
|
846
|
+
reactData.currentNode = node
|
|
847
|
+
return $xeCascader.$nextTick()
|
|
848
|
+
},
|
|
849
|
+
setAllCheckboxNode (checked: boolean) {
|
|
850
|
+
const $xeCascader = this
|
|
851
|
+
const reactData = $xeCascader.reactData
|
|
852
|
+
const internalData = $xeCascader.internalData
|
|
853
|
+
|
|
854
|
+
const selectMaps: Record<string, boolean> = {}
|
|
855
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
856
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
857
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
858
|
+
const { transform } = treeOpts
|
|
859
|
+
const checkKeys: string[] = []
|
|
860
|
+
const checkNodes: any[] = []
|
|
861
|
+
if (checked) {
|
|
862
|
+
XEUtils.eachTree(internalData.afterTreeList, (node) => {
|
|
863
|
+
const nodeid = $xeCascader.getNodeId(node)
|
|
864
|
+
checkKeys.push(nodeid)
|
|
865
|
+
checkNodes.push(node)
|
|
866
|
+
selectMaps[nodeid] = true
|
|
867
|
+
}, { children: transform ? mapChildrenField : childrenField })
|
|
868
|
+
}
|
|
869
|
+
internalData.indeterminateRowMaps = {}
|
|
870
|
+
internalData.selectCheckboxMaps = selectMaps
|
|
871
|
+
reactData.updateCheckboxFlag++
|
|
872
|
+
$xeCascader.updateCheckboxStatus()
|
|
873
|
+
return $xeCascader.$nextTick().then(() => {
|
|
874
|
+
return { checkNodeKeys: checkKeys, checkNodes }
|
|
875
|
+
})
|
|
876
|
+
},
|
|
877
|
+
clearCheckboxNode () {
|
|
878
|
+
const $xeCascader = this
|
|
879
|
+
const reactData = $xeCascader.reactData
|
|
880
|
+
const internalData = $xeCascader.internalData
|
|
881
|
+
|
|
882
|
+
internalData.indeterminateRowMaps = {}
|
|
883
|
+
internalData.selectCheckboxMaps = {}
|
|
884
|
+
reactData.updateCheckboxFlag++
|
|
885
|
+
$xeCascader.updateCheckboxStatus()
|
|
886
|
+
return $xeCascader.$nextTick().then(() => {
|
|
887
|
+
return { checkNodeKeys: [], checkNodes: [] }
|
|
888
|
+
})
|
|
479
889
|
},
|
|
480
890
|
changeEvent (evnt: Event, selectValue: any, node: any) {
|
|
481
891
|
const $xeCascader = this
|
|
@@ -493,35 +903,32 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
493
903
|
}
|
|
494
904
|
}
|
|
495
905
|
},
|
|
496
|
-
clearValueEvent
|
|
906
|
+
clearValueEvent (evnt: Event, selectValue: any) {
|
|
497
907
|
const $xeCascader = this
|
|
498
908
|
|
|
499
909
|
$xeCascader.changeEvent(evnt, selectValue, null)
|
|
500
910
|
$xeCascader.dispatchEvent('clear', { value: selectValue }, evnt)
|
|
501
911
|
},
|
|
502
|
-
clearEvent
|
|
912
|
+
clearEvent (params: any, evnt: Event) {
|
|
503
913
|
const $xeCascader = this
|
|
504
914
|
|
|
505
915
|
$xeCascader.clearValueEvent(evnt, null)
|
|
506
|
-
$xeCascader.hideOptionPanel()
|
|
916
|
+
$xeCascader.hideOptionPanel(evnt)
|
|
507
917
|
},
|
|
508
918
|
allCheckedPanelEvent (params: VxeButtonDefines.ClickEventParams) {
|
|
509
919
|
const $xeCascader = this
|
|
510
920
|
const props = $xeCascader
|
|
511
921
|
|
|
512
922
|
const { $event } = params
|
|
513
|
-
const { multiple,
|
|
514
|
-
const $tree = $xeCascader.$refs.refTree as VxeTreeConstructor
|
|
923
|
+
const { multiple, checkedClosable } = props
|
|
515
924
|
if (multiple) {
|
|
516
|
-
|
|
517
|
-
$
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
})
|
|
524
|
-
}
|
|
925
|
+
$xeCascader.setAllCheckboxNode(true).then(({ checkNodeKeys, checkNodes }) => {
|
|
926
|
+
$xeCascader.changeEvent($event, checkNodeKeys, checkNodes[0])
|
|
927
|
+
$xeCascader.dispatchEvent('all-change', { value: checkNodeKeys }, $event)
|
|
928
|
+
if (checkedClosable) {
|
|
929
|
+
$xeCascader.hideOptionPanel($event)
|
|
930
|
+
}
|
|
931
|
+
})
|
|
525
932
|
}
|
|
526
933
|
},
|
|
527
934
|
clearCheckedPanelEvent (params: VxeButtonDefines.ClickEventParams) {
|
|
@@ -529,34 +936,21 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
529
936
|
const props = $xeCascader
|
|
530
937
|
|
|
531
938
|
const { $event } = params
|
|
532
|
-
const { multiple,
|
|
533
|
-
const
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
$xeCascader.changeEvent($event, value, null)
|
|
542
|
-
$xeCascader.dispatchEvent('clear', { value }, $event)
|
|
543
|
-
}
|
|
544
|
-
},
|
|
545
|
-
allExpandPanelEvent () {
|
|
546
|
-
const $xeCascader = this
|
|
547
|
-
|
|
548
|
-
const $tree = $xeCascader.$refs.refTree as VxeTreeConstructor
|
|
549
|
-
if ($tree) {
|
|
550
|
-
$tree.setAllExpandNode(true)
|
|
551
|
-
}
|
|
939
|
+
const { multiple, checkedClosable } = props
|
|
940
|
+
const value = multiple ? [] : null
|
|
941
|
+
$xeCascader.clearCheckboxNode().then(() => {
|
|
942
|
+
if (checkedClosable) {
|
|
943
|
+
$xeCascader.hideOptionPanel($event)
|
|
944
|
+
}
|
|
945
|
+
})
|
|
946
|
+
$xeCascader.changeEvent($event, value, null)
|
|
947
|
+
$xeCascader.dispatchEvent('clear', { value }, $event)
|
|
552
948
|
},
|
|
553
|
-
|
|
949
|
+
closePanelEvent (params: VxeButtonDefines.ClickEventParams) {
|
|
554
950
|
const $xeCascader = this
|
|
555
951
|
|
|
556
|
-
const $
|
|
557
|
-
|
|
558
|
-
$tree.clearAllExpandNode()
|
|
559
|
-
}
|
|
952
|
+
const { $event } = params
|
|
953
|
+
$xeCascader.hideOptionPanel($event)
|
|
560
954
|
},
|
|
561
955
|
handleGlobalMousewheelEvent (evnt: MouseEvent) {
|
|
562
956
|
const $xeCascader = this
|
|
@@ -566,43 +960,43 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
566
960
|
const isDisabled = $xeCascader.computeIsDisabled
|
|
567
961
|
if (!isDisabled) {
|
|
568
962
|
if (visiblePanel) {
|
|
569
|
-
const panelElem = $xeCascader.$refs.refOptionPanel as
|
|
963
|
+
const panelElem = $xeCascader.$refs.refOptionPanel as HTMLDivElement
|
|
570
964
|
if (getEventTargetNode(evnt, panelElem).flag) {
|
|
571
965
|
$xeCascader.updatePlacement()
|
|
572
966
|
} else {
|
|
573
|
-
$xeCascader.hideOptionPanel()
|
|
967
|
+
$xeCascader.hideOptionPanel(evnt)
|
|
574
968
|
}
|
|
575
969
|
}
|
|
576
970
|
}
|
|
577
971
|
},
|
|
578
|
-
handleGlobalMousedownEvent
|
|
972
|
+
handleGlobalMousedownEvent (evnt: MouseEvent) {
|
|
579
973
|
const $xeCascader = this
|
|
580
974
|
const reactData = $xeCascader.reactData
|
|
581
975
|
|
|
582
976
|
const { visiblePanel } = reactData
|
|
583
977
|
const isDisabled = $xeCascader.computeIsDisabled
|
|
584
978
|
if (!isDisabled) {
|
|
585
|
-
const el = $xeCascader.$refs.refElem as
|
|
586
|
-
const panelElem = $xeCascader.$refs.refOptionPanel as
|
|
979
|
+
const el = $xeCascader.$refs.refElem as HTMLDivElement
|
|
980
|
+
const panelElem = $xeCascader.$refs.refOptionPanel as HTMLDivElement
|
|
587
981
|
reactData.isActivated = getEventTargetNode(evnt, el).flag || getEventTargetNode(evnt, panelElem).flag
|
|
588
982
|
if (visiblePanel && !reactData.isActivated) {
|
|
589
|
-
$xeCascader.hideOptionPanel()
|
|
983
|
+
$xeCascader.hideOptionPanel(evnt)
|
|
590
984
|
}
|
|
591
985
|
}
|
|
592
986
|
},
|
|
593
|
-
handleGlobalBlurEvent () {
|
|
987
|
+
handleGlobalBlurEvent (evnt: Event) {
|
|
594
988
|
const $xeCascader = this
|
|
595
989
|
const reactData = $xeCascader.reactData
|
|
596
990
|
|
|
597
991
|
const { visiblePanel, isActivated } = reactData
|
|
598
992
|
if (visiblePanel) {
|
|
599
|
-
$xeCascader.hideOptionPanel()
|
|
993
|
+
$xeCascader.hideOptionPanel(evnt)
|
|
600
994
|
}
|
|
601
995
|
if (isActivated) {
|
|
602
996
|
reactData.isActivated = false
|
|
603
997
|
}
|
|
604
998
|
if (visiblePanel || isActivated) {
|
|
605
|
-
const $input = $xeCascader.$refs.refInput as
|
|
999
|
+
const $input = $xeCascader.$refs.refInput as HTMLInputElement
|
|
606
1000
|
if ($input) {
|
|
607
1001
|
$input.blur()
|
|
608
1002
|
}
|
|
@@ -617,20 +1011,390 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
617
1011
|
$xeCascader.updatePlacement()
|
|
618
1012
|
}
|
|
619
1013
|
},
|
|
620
|
-
handleFocusSearch
|
|
621
|
-
const $
|
|
622
|
-
const props = $
|
|
1014
|
+
handleFocusSearch () {
|
|
1015
|
+
const $xeCascader = this
|
|
1016
|
+
const props = $xeCascader
|
|
623
1017
|
|
|
624
1018
|
if (props.filterable) {
|
|
625
|
-
$
|
|
626
|
-
const inpSearch = $
|
|
1019
|
+
$xeCascader.$nextTick(() => {
|
|
1020
|
+
const inpSearch = $xeCascader.$refs.refInpSearch as VxeInputConstructor
|
|
627
1021
|
if (inpSearch) {
|
|
628
1022
|
inpSearch.focus()
|
|
629
1023
|
}
|
|
630
1024
|
})
|
|
631
1025
|
}
|
|
632
1026
|
},
|
|
633
|
-
|
|
1027
|
+
changeCurrentEvent (evnt: MouseEvent, node: any) {
|
|
1028
|
+
const $xeCascader = this
|
|
1029
|
+
const reactData = $xeCascader.reactData
|
|
1030
|
+
|
|
1031
|
+
evnt.preventDefault()
|
|
1032
|
+
const isChecked = true
|
|
1033
|
+
reactData.currentNode = node
|
|
1034
|
+
$xeCascader.dispatchEvent('current-change', { node, checked: isChecked }, evnt)
|
|
1035
|
+
},
|
|
1036
|
+
changeRadioEvent (evnt: Event, node: any) {
|
|
1037
|
+
const $xeCascader = this
|
|
1038
|
+
const reactData = $xeCascader.reactData
|
|
1039
|
+
const internalData = $xeCascader.internalData
|
|
1040
|
+
|
|
1041
|
+
evnt.preventDefault()
|
|
1042
|
+
evnt.stopPropagation()
|
|
1043
|
+
const { nodeMaps } = internalData
|
|
1044
|
+
const radioOpts = $xeCascader.computeRadioOpts
|
|
1045
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
1046
|
+
const { checkMode, checkMethod } = radioOpts
|
|
1047
|
+
const nodeid = $xeCascader.getNodeId(node)
|
|
1048
|
+
const childList: any[] = node[childrenField]
|
|
1049
|
+
const isExistChild = childList && childList.length > 0
|
|
1050
|
+
const nodeItem = nodeMaps[nodeid] || {}
|
|
1051
|
+
const nLevel = nodeItem.level
|
|
1052
|
+
const isDisabled = checkMethod ? !checkMethod({ $cascader: $xeCascader, node }) : !handleVisibleOrCheckMode(checkMode, isExistChild, nLevel)
|
|
1053
|
+
if (isDisabled) {
|
|
1054
|
+
return
|
|
1055
|
+
}
|
|
1056
|
+
const value = nodeid
|
|
1057
|
+
reactData.selectRadioKey = value
|
|
1058
|
+
$xeCascader.changeEvent(evnt, value, node)
|
|
1059
|
+
$xeCascader.hideOptionPanel(evnt)
|
|
1060
|
+
},
|
|
1061
|
+
handleAsyncTreeExpandChilds (node: any) {
|
|
1062
|
+
const $xeCascader = this
|
|
1063
|
+
const reactData = $xeCascader.reactData
|
|
1064
|
+
const internalData = $xeCascader.internalData
|
|
1065
|
+
|
|
1066
|
+
const checkboxOpts = $xeCascader.computeCheckboxOpts
|
|
1067
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
1068
|
+
const { loadMethod } = treeOpts
|
|
1069
|
+
const { checkStrictly } = checkboxOpts
|
|
1070
|
+
return new Promise<void>(resolve => {
|
|
1071
|
+
if (loadMethod) {
|
|
1072
|
+
const { nodeMaps } = internalData
|
|
1073
|
+
const nodeid = $xeCascader.getNodeId(node)
|
|
1074
|
+
const nodeItem = nodeMaps[nodeid]
|
|
1075
|
+
internalData.treeExpandLazyLoadedMaps[nodeid] = true
|
|
1076
|
+
Promise.resolve(
|
|
1077
|
+
loadMethod({ $cascader: $xeCascader, node })
|
|
1078
|
+
).then((childRecords: any) => {
|
|
1079
|
+
const { treeExpandLazyLoadedMaps } = internalData
|
|
1080
|
+
nodeItem.treeLoaded = true
|
|
1081
|
+
if (treeExpandLazyLoadedMaps[nodeid]) {
|
|
1082
|
+
treeExpandLazyLoadedMaps[nodeid] = false
|
|
1083
|
+
}
|
|
1084
|
+
if (!XEUtils.isArray(childRecords)) {
|
|
1085
|
+
childRecords = []
|
|
1086
|
+
}
|
|
1087
|
+
if (childRecords) {
|
|
1088
|
+
return $xeCascader.loadChildrenNode(node, childRecords).then(childRows => {
|
|
1089
|
+
const { treeExpandedMaps } = internalData
|
|
1090
|
+
if (childRows.length && !treeExpandedMaps[nodeid]) {
|
|
1091
|
+
treeExpandedMaps[nodeid] = true
|
|
1092
|
+
}
|
|
1093
|
+
reactData.updateExpandedFlag++
|
|
1094
|
+
// 如果当前节点已选中,则展开后子节点也被选中
|
|
1095
|
+
if (!checkStrictly && $xeCascader.isCheckedByCheckboxNodeId(nodeid)) {
|
|
1096
|
+
$xeCascader.handleCheckedCheckboxNode(childRows, true)
|
|
1097
|
+
}
|
|
1098
|
+
$xeCascader.dispatchEvent('load-success', { node, data: childRecords }, new Event('load-success'))
|
|
1099
|
+
return $xeCascader.$nextTick()
|
|
1100
|
+
})
|
|
1101
|
+
} else {
|
|
1102
|
+
$xeCascader.dispatchEvent('load-success', { node, data: childRecords }, new Event('load-success'))
|
|
1103
|
+
}
|
|
1104
|
+
}).catch((e) => {
|
|
1105
|
+
const { treeExpandLazyLoadedMaps } = internalData
|
|
1106
|
+
nodeItem.treeLoaded = false
|
|
1107
|
+
if (treeExpandLazyLoadedMaps[nodeid]) {
|
|
1108
|
+
treeExpandLazyLoadedMaps[nodeid] = false
|
|
1109
|
+
}
|
|
1110
|
+
$xeCascader.dispatchEvent('load-error', { node, data: e }, new Event('load-error'))
|
|
1111
|
+
}).finally(() => {
|
|
1112
|
+
$xeCascader.handleTreeToList()
|
|
1113
|
+
$xeCascader.handleData()
|
|
1114
|
+
})
|
|
1115
|
+
} else {
|
|
1116
|
+
resolve()
|
|
1117
|
+
}
|
|
1118
|
+
})
|
|
1119
|
+
},
|
|
1120
|
+
/**
|
|
1121
|
+
* 展开与收起树节点
|
|
1122
|
+
* @param nodeList
|
|
1123
|
+
* @param expanded
|
|
1124
|
+
* @returns
|
|
1125
|
+
*/
|
|
1126
|
+
handleBaseTreeExpand (nodeList: any[], expanded: boolean) {
|
|
1127
|
+
const $xeCascader = this
|
|
1128
|
+
const reactData = $xeCascader.reactData
|
|
1129
|
+
const internalData = $xeCascader.internalData
|
|
1130
|
+
|
|
1131
|
+
const { treeExpandLazyLoadedMaps, treeExpandedMaps } = internalData
|
|
1132
|
+
const { nodeMaps } = internalData
|
|
1133
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
1134
|
+
const hasChildField = $xeCascader.computeHasChildField
|
|
1135
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
1136
|
+
const { lazy, toggleMethod } = treeOpts
|
|
1137
|
+
const result: any[] = []
|
|
1138
|
+
let validNodes = toggleMethod ? nodeList.filter((node: any) => toggleMethod({ $cascader: $xeCascader, expanded, node })) : nodeList
|
|
1139
|
+
|
|
1140
|
+
validNodes = validNodes.length ? [validNodes[validNodes.length - 1]] : []
|
|
1141
|
+
// 同一级只能展开一个
|
|
1142
|
+
const nodeid = $xeCascader.getNodeId(validNodes[0])
|
|
1143
|
+
const nodeItem = nodeMaps[nodeid]
|
|
1144
|
+
if (nodeItem) {
|
|
1145
|
+
nodeItem.items.forEach(item => {
|
|
1146
|
+
const itemNodeId = $xeCascader.getNodeId(item)
|
|
1147
|
+
if (treeExpandedMaps[itemNodeId]) {
|
|
1148
|
+
delete treeExpandedMaps[itemNodeId]
|
|
1149
|
+
}
|
|
1150
|
+
})
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
const expandNodes: any[] = []
|
|
1154
|
+
if (expanded) {
|
|
1155
|
+
validNodes.forEach((item) => {
|
|
1156
|
+
const itemNodeId = $xeCascader.getNodeId(item)
|
|
1157
|
+
if (!treeExpandedMaps[itemNodeId]) {
|
|
1158
|
+
const nodeItem = nodeMaps[itemNodeId]
|
|
1159
|
+
const isLoad = lazy && item[hasChildField] && !nodeItem.treeLoaded && !treeExpandLazyLoadedMaps[itemNodeId]
|
|
1160
|
+
// 是否使用懒加载
|
|
1161
|
+
if (isLoad) {
|
|
1162
|
+
result.push($xeCascader.handleAsyncTreeExpandChilds(item))
|
|
1163
|
+
} else {
|
|
1164
|
+
if (item[childrenField] && item[childrenField].length) {
|
|
1165
|
+
treeExpandedMaps[itemNodeId] = true
|
|
1166
|
+
expandNodes.push(item)
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
})
|
|
1171
|
+
} else {
|
|
1172
|
+
validNodes.forEach(item => {
|
|
1173
|
+
const itemNodeId = $xeCascader.getNodeId(item)
|
|
1174
|
+
if (treeExpandedMaps[itemNodeId]) {
|
|
1175
|
+
delete treeExpandedMaps[itemNodeId]
|
|
1176
|
+
expandNodes.push(item)
|
|
1177
|
+
}
|
|
1178
|
+
})
|
|
1179
|
+
}
|
|
1180
|
+
reactData.updateExpandedFlag++
|
|
1181
|
+
$xeCascader.handleTreeToList()
|
|
1182
|
+
$xeCascader.handleData()
|
|
1183
|
+
return Promise.all(result)
|
|
1184
|
+
},
|
|
1185
|
+
toggleExpandEvent (evnt: MouseEvent, node: any, chunks: any[], chunkIndex: number) {
|
|
1186
|
+
const $xeCascader = this
|
|
1187
|
+
const reactData = $xeCascader.reactData
|
|
1188
|
+
const internalData = $xeCascader.internalData
|
|
1189
|
+
|
|
1190
|
+
const { currentItems } = reactData
|
|
1191
|
+
const { treeExpandLazyLoadedMaps } = internalData
|
|
1192
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
1193
|
+
const { lazy } = treeOpts
|
|
1194
|
+
const stItems = currentItems.slice(0, chunkIndex)
|
|
1195
|
+
const nodeid = $xeCascader.getNodeId(node)
|
|
1196
|
+
const expanded = true
|
|
1197
|
+
evnt.stopPropagation()
|
|
1198
|
+
stItems.push(nodeid)
|
|
1199
|
+
reactData.currentItems = stItems
|
|
1200
|
+
if (!lazy || !treeExpandLazyLoadedMaps[nodeid]) {
|
|
1201
|
+
$xeCascader.handleBaseTreeExpand([node], expanded)
|
|
1202
|
+
}
|
|
1203
|
+
$xeCascader.setCurrentNode(node)
|
|
1204
|
+
$xeCascader.updateCurrentChunk()
|
|
1205
|
+
$xeCascader.dispatchEvent('node-expand', { node, expanded }, evnt)
|
|
1206
|
+
},
|
|
1207
|
+
updateCheckboxStatus () {
|
|
1208
|
+
const $xeCascader = this
|
|
1209
|
+
const reactData = $xeCascader.reactData
|
|
1210
|
+
const internalData = $xeCascader.internalData
|
|
1211
|
+
|
|
1212
|
+
const { selectCheckboxMaps, indeterminateRowMaps, afterTreeList } = internalData
|
|
1213
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
1214
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
1215
|
+
const checkboxOpts = $xeCascader.computeCheckboxOpts
|
|
1216
|
+
const { checkStrictly, checkMethod } = checkboxOpts
|
|
1217
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
1218
|
+
const { transform } = treeOpts
|
|
1219
|
+
if (!checkStrictly) {
|
|
1220
|
+
const childRowMaps: Record<string, number> = {}
|
|
1221
|
+
const childRowList: any[][] = []
|
|
1222
|
+
XEUtils.eachTree(afterTreeList, (node) => {
|
|
1223
|
+
const nodeid = $xeCascader.getNodeId(node)
|
|
1224
|
+
const childList = node[childrenField]
|
|
1225
|
+
if (childList && childList.length && !childRowMaps[nodeid]) {
|
|
1226
|
+
childRowMaps[nodeid] = 1
|
|
1227
|
+
childRowList.unshift([node, nodeid, childList])
|
|
1228
|
+
}
|
|
1229
|
+
}, { children: transform ? mapChildrenField : childrenField })
|
|
1230
|
+
|
|
1231
|
+
childRowList.forEach(vals => {
|
|
1232
|
+
const node: string = vals[0]
|
|
1233
|
+
const nodeid: string = vals[1]
|
|
1234
|
+
const childList: any[] = vals[2]
|
|
1235
|
+
let sLen = 0 // 已选
|
|
1236
|
+
let hLen = 0 // 半选
|
|
1237
|
+
let vLen = 0 // 有效子行
|
|
1238
|
+
const cLen = childList.length // 子行
|
|
1239
|
+
childList.forEach(
|
|
1240
|
+
checkMethod
|
|
1241
|
+
? (item) => {
|
|
1242
|
+
const childNodeid = $xeCascader.getNodeId(item)
|
|
1243
|
+
const isSelect = selectCheckboxMaps[childNodeid]
|
|
1244
|
+
if (checkMethod({ $cascader: $xeCascader, node: item })) {
|
|
1245
|
+
if (isSelect) {
|
|
1246
|
+
sLen++
|
|
1247
|
+
} else if (indeterminateRowMaps[childNodeid]) {
|
|
1248
|
+
hLen++
|
|
1249
|
+
}
|
|
1250
|
+
vLen++
|
|
1251
|
+
} else {
|
|
1252
|
+
if (isSelect) {
|
|
1253
|
+
sLen++
|
|
1254
|
+
} else if (indeterminateRowMaps[childNodeid]) {
|
|
1255
|
+
hLen++
|
|
1256
|
+
}
|
|
1257
|
+
}
|
|
1258
|
+
}
|
|
1259
|
+
: item => {
|
|
1260
|
+
const childNodeid = $xeCascader.getNodeId(item)
|
|
1261
|
+
const isSelect = selectCheckboxMaps[childNodeid]
|
|
1262
|
+
if (isSelect) {
|
|
1263
|
+
sLen++
|
|
1264
|
+
} else if (indeterminateRowMaps[childNodeid]) {
|
|
1265
|
+
hLen++
|
|
1266
|
+
}
|
|
1267
|
+
vLen++
|
|
1268
|
+
}
|
|
1269
|
+
)
|
|
1270
|
+
|
|
1271
|
+
let isSelected = false
|
|
1272
|
+
if (cLen > 0) {
|
|
1273
|
+
if (vLen > 0) {
|
|
1274
|
+
isSelected = (sLen > 0 || hLen > 0) && sLen >= vLen
|
|
1275
|
+
} else {
|
|
1276
|
+
// 如果存在子项禁用
|
|
1277
|
+
if ((sLen > 0 && sLen >= vLen)) {
|
|
1278
|
+
isSelected = true
|
|
1279
|
+
} else if (selectCheckboxMaps[nodeid]) {
|
|
1280
|
+
isSelected = true
|
|
1281
|
+
} else {
|
|
1282
|
+
isSelected = false
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
} else {
|
|
1286
|
+
// 如果无子项
|
|
1287
|
+
isSelected = selectCheckboxMaps[nodeid]
|
|
1288
|
+
}
|
|
1289
|
+
const halfSelect = !isSelected && (sLen > 0 || hLen > 0)
|
|
1290
|
+
|
|
1291
|
+
if (isSelected) {
|
|
1292
|
+
selectCheckboxMaps[nodeid] = node
|
|
1293
|
+
if (indeterminateRowMaps[nodeid]) {
|
|
1294
|
+
delete indeterminateRowMaps[nodeid]
|
|
1295
|
+
}
|
|
1296
|
+
} else {
|
|
1297
|
+
if (selectCheckboxMaps[nodeid]) {
|
|
1298
|
+
delete selectCheckboxMaps[nodeid]
|
|
1299
|
+
}
|
|
1300
|
+
if (halfSelect) {
|
|
1301
|
+
indeterminateRowMaps[nodeid] = node
|
|
1302
|
+
} else {
|
|
1303
|
+
if (indeterminateRowMaps[nodeid]) {
|
|
1304
|
+
delete indeterminateRowMaps[nodeid]
|
|
1305
|
+
}
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
})
|
|
1309
|
+
reactData.updateCheckboxFlag++
|
|
1310
|
+
}
|
|
1311
|
+
},
|
|
1312
|
+
changeCheckboxEvent (evnt: Event, node: any) {
|
|
1313
|
+
const $xeCascader = this
|
|
1314
|
+
const reactData = $xeCascader.reactData
|
|
1315
|
+
const internalData = $xeCascader.internalData
|
|
1316
|
+
|
|
1317
|
+
evnt.preventDefault()
|
|
1318
|
+
evnt.stopPropagation()
|
|
1319
|
+
const { selectCheckboxMaps, nodeMaps } = internalData
|
|
1320
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
1321
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
1322
|
+
const checkboxOpts = $xeCascader.computeCheckboxOpts
|
|
1323
|
+
const { checkStrictly, checkMode, checkMethod } = checkboxOpts
|
|
1324
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
1325
|
+
const { transform } = treeOpts
|
|
1326
|
+
const nodeid = $xeCascader.getNodeId(node)
|
|
1327
|
+
const childList: any[] = node[childrenField]
|
|
1328
|
+
const isExistChild = childList && childList.length > 0
|
|
1329
|
+
const nodeItem = nodeMaps[nodeid] || {}
|
|
1330
|
+
const nLevel = nodeItem.level
|
|
1331
|
+
const isDisabled = checkMethod ? !checkMethod({ $cascader: $xeCascader, node }) : !handleVisibleOrCheckMode(checkMode, isExistChild, nLevel)
|
|
1332
|
+
if (isDisabled) {
|
|
1333
|
+
return
|
|
1334
|
+
}
|
|
1335
|
+
let isChecked = false
|
|
1336
|
+
if (selectCheckboxMaps[nodeid]) {
|
|
1337
|
+
delete selectCheckboxMaps[nodeid]
|
|
1338
|
+
} else {
|
|
1339
|
+
isChecked = true
|
|
1340
|
+
selectCheckboxMaps[nodeid] = node
|
|
1341
|
+
}
|
|
1342
|
+
if (!checkStrictly) {
|
|
1343
|
+
XEUtils.eachTree(XEUtils.get(node, transform ? mapChildrenField : childrenField), (childNode) => {
|
|
1344
|
+
const childNodeid = $xeCascader.getNodeId(childNode)
|
|
1345
|
+
if (isChecked) {
|
|
1346
|
+
if (!selectCheckboxMaps[childNodeid]) {
|
|
1347
|
+
selectCheckboxMaps[childNodeid] = true
|
|
1348
|
+
}
|
|
1349
|
+
} else {
|
|
1350
|
+
if (selectCheckboxMaps[childNodeid]) {
|
|
1351
|
+
delete selectCheckboxMaps[childNodeid]
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
}, { children: transform ? mapChildrenField : childrenField })
|
|
1355
|
+
}
|
|
1356
|
+
reactData.updateCheckboxFlag++
|
|
1357
|
+
$xeCascader.updateCheckboxStatus()
|
|
1358
|
+
const nodeids = XEUtils.keys(selectCheckboxMaps)
|
|
1359
|
+
const value = nodeids
|
|
1360
|
+
$xeCascader.changeEvent(evnt, value, node)
|
|
1361
|
+
},
|
|
1362
|
+
handleNodeClickEvent (evnt: MouseEvent, node: any, chunks: any[], chunkIndex: number) {
|
|
1363
|
+
const $xeCascader = this
|
|
1364
|
+
const props = $xeCascader
|
|
1365
|
+
|
|
1366
|
+
const { multiple } = props
|
|
1367
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
1368
|
+
const radioOpts = $xeCascader.computeRadioOpts
|
|
1369
|
+
const checkboxOpts = $xeCascader.computeCheckboxOpts
|
|
1370
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
1371
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
1372
|
+
const { transform, trigger } = treeOpts
|
|
1373
|
+
const childList: any[] = node[transform ? mapChildrenField : childrenField]
|
|
1374
|
+
let triggerCurrent = false
|
|
1375
|
+
let triggerRadio = false
|
|
1376
|
+
let triggerCheckbox = false
|
|
1377
|
+
let triggerExpand = false
|
|
1378
|
+
triggerCurrent = true
|
|
1379
|
+
$xeCascader.changeCurrentEvent(evnt, node)
|
|
1380
|
+
if (trigger !== 'icon') {
|
|
1381
|
+
triggerExpand = true
|
|
1382
|
+
$xeCascader.toggleExpandEvent(evnt, node, chunks, chunkIndex)
|
|
1383
|
+
}
|
|
1384
|
+
if (multiple) {
|
|
1385
|
+
if (checkboxOpts.trigger === 'node' || (!checkboxOpts.showIcon && (!childList || !childList.length))) {
|
|
1386
|
+
triggerCheckbox = true
|
|
1387
|
+
$xeCascader.changeCheckboxEvent(evnt, node)
|
|
1388
|
+
}
|
|
1389
|
+
} else {
|
|
1390
|
+
if (radioOpts.trigger === 'node' || (!radioOpts.showIcon && (!childList || !childList.length))) {
|
|
1391
|
+
triggerRadio = true
|
|
1392
|
+
$xeCascader.changeRadioEvent(evnt, node)
|
|
1393
|
+
}
|
|
1394
|
+
}
|
|
1395
|
+
$xeCascader.dispatchEvent('node-click', { node, triggerCurrent, triggerRadio, triggerCheckbox, triggerExpand }, evnt)
|
|
1396
|
+
},
|
|
1397
|
+
focusEvent (evnt: FocusEvent) {
|
|
634
1398
|
const $xeCascader = this
|
|
635
1399
|
const reactData = $xeCascader.reactData
|
|
636
1400
|
|
|
@@ -638,7 +1402,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
638
1402
|
if (!isDisabled) {
|
|
639
1403
|
if (!reactData.visiblePanel) {
|
|
640
1404
|
reactData.triggerFocusPanel = true
|
|
641
|
-
$xeCascader.showOptionPanel()
|
|
1405
|
+
$xeCascader.showOptionPanel(evnt)
|
|
642
1406
|
setTimeout(() => {
|
|
643
1407
|
reactData.triggerFocusPanel = false
|
|
644
1408
|
}, 150)
|
|
@@ -646,10 +1410,18 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
646
1410
|
}
|
|
647
1411
|
$xeCascader.dispatchEvent('focus', {}, evnt)
|
|
648
1412
|
},
|
|
649
|
-
clickEvent
|
|
1413
|
+
clickEvent (evnt: MouseEvent) {
|
|
650
1414
|
const $xeCascader = this
|
|
1415
|
+
const reactData = $xeCascader.reactData
|
|
651
1416
|
|
|
652
|
-
|
|
1417
|
+
evnt.preventDefault()
|
|
1418
|
+
if (reactData.triggerFocusPanel) {
|
|
1419
|
+
reactData.triggerFocusPanel = false
|
|
1420
|
+
} else {
|
|
1421
|
+
if (!reactData.visiblePanel) {
|
|
1422
|
+
$xeCascader.showOptionPanel(evnt)
|
|
1423
|
+
}
|
|
1424
|
+
}
|
|
653
1425
|
$xeCascader.dispatchEvent('click', {}, evnt)
|
|
654
1426
|
},
|
|
655
1427
|
blurEvent (evnt: FocusEvent) {
|
|
@@ -664,16 +1436,17 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
664
1436
|
const reactData = $xeCascader.reactData
|
|
665
1437
|
|
|
666
1438
|
reactData.searchValue = value
|
|
1439
|
+
$xeCascader.triggerSearchEvent(new Event('filter'))
|
|
667
1440
|
},
|
|
668
1441
|
handleSearchEvent () {
|
|
669
1442
|
const $xeCascader = this
|
|
670
1443
|
const props = $xeCascader
|
|
671
1444
|
const reactData = $xeCascader.reactData
|
|
672
1445
|
|
|
673
|
-
const { value: modelValue, remote
|
|
1446
|
+
const { value: modelValue, remote } = props
|
|
674
1447
|
const { searchValue } = reactData
|
|
675
1448
|
const remoteOpts = $xeCascader.computeRemoteOpts
|
|
676
|
-
const queryMethod = remoteOpts.queryMethod
|
|
1449
|
+
const queryMethod = remoteOpts.queryMethod
|
|
677
1450
|
if (remote && queryMethod && remoteOpts.enabled) {
|
|
678
1451
|
reactData.searchLoading = true
|
|
679
1452
|
Promise.resolve(
|
|
@@ -685,7 +1458,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
685
1458
|
})
|
|
686
1459
|
}
|
|
687
1460
|
},
|
|
688
|
-
togglePanelEvent
|
|
1461
|
+
togglePanelEvent (params: any) {
|
|
689
1462
|
const $xeCascader = this
|
|
690
1463
|
const reactData = $xeCascader.reactData
|
|
691
1464
|
|
|
@@ -695,48 +1468,231 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
695
1468
|
reactData.triggerFocusPanel = false
|
|
696
1469
|
} else {
|
|
697
1470
|
if (reactData.visiblePanel) {
|
|
698
|
-
$xeCascader.hideOptionPanel()
|
|
1471
|
+
$xeCascader.hideOptionPanel($event)
|
|
699
1472
|
} else {
|
|
700
|
-
$xeCascader.showOptionPanel()
|
|
1473
|
+
$xeCascader.showOptionPanel($event)
|
|
701
1474
|
}
|
|
702
1475
|
}
|
|
703
1476
|
},
|
|
704
|
-
|
|
1477
|
+
/**
|
|
1478
|
+
* 用于树结构,给行数据加载子节点
|
|
1479
|
+
*/
|
|
1480
|
+
loadChildrenNode (node: any, childRecords: any[]) {
|
|
705
1481
|
const $xeCascader = this
|
|
1482
|
+
const props = $xeCascader
|
|
1483
|
+
const internalData = $xeCascader.internalData
|
|
706
1484
|
|
|
707
|
-
const {
|
|
708
|
-
|
|
1485
|
+
const { separator } = props
|
|
1486
|
+
const { nodeMaps } = internalData
|
|
1487
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
1488
|
+
const labelField = $xeCascader.computeLabelField
|
|
1489
|
+
const { lazy, transform } = treeOpts
|
|
1490
|
+
if (!lazy) {
|
|
1491
|
+
return Promise.resolve([])
|
|
1492
|
+
}
|
|
1493
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
1494
|
+
const mapChildrenField = $xeCascader.computeMapChildrenField
|
|
1495
|
+
const parentNodeItem = nodeMaps[$xeCascader.getNodeId(node)]
|
|
1496
|
+
const parentLevel = parentNodeItem ? parentNodeItem.level : 0
|
|
1497
|
+
const parentNodes = parentNodeItem ? parentNodeItem.nodes : []
|
|
1498
|
+
return $xeCascader.createNode(childRecords).then((nodeList) => {
|
|
1499
|
+
XEUtils.eachTree(nodeList, (childRow, index, items, path, parent, nodes) => {
|
|
1500
|
+
const itemNodeId = $xeCascader.getNodeId(childRow)
|
|
1501
|
+
nodeMaps[itemNodeId] = {
|
|
1502
|
+
item: childRow,
|
|
1503
|
+
index: -1,
|
|
1504
|
+
$index: -1,
|
|
1505
|
+
_index: -1,
|
|
1506
|
+
items,
|
|
1507
|
+
parent: parent || parentNodeItem.item,
|
|
1508
|
+
nodes: parentNodes.concat(nodes),
|
|
1509
|
+
level: parentLevel + nodes.length,
|
|
1510
|
+
treeIndex: -1,
|
|
1511
|
+
lineCount: 0,
|
|
1512
|
+
treeLoaded: false,
|
|
1513
|
+
fullLabel: nodes.map(item => item[labelField]).join((separator || ' / '))
|
|
1514
|
+
}
|
|
1515
|
+
}, { children: childrenField })
|
|
1516
|
+
node[childrenField] = nodeList
|
|
1517
|
+
if (transform) {
|
|
1518
|
+
node[mapChildrenField] = nodeList
|
|
1519
|
+
}
|
|
1520
|
+
$xeCascader.updateAfterDataIndex()
|
|
1521
|
+
return nodeList
|
|
1522
|
+
})
|
|
709
1523
|
},
|
|
710
|
-
|
|
1524
|
+
|
|
1525
|
+
//
|
|
1526
|
+
// Render
|
|
1527
|
+
//
|
|
1528
|
+
renderRadio (h: CreateElement, node: any, isExistChild: boolean, nLevel: number, isChecked: boolean) {
|
|
711
1529
|
const $xeCascader = this
|
|
712
1530
|
|
|
713
|
-
const
|
|
714
|
-
|
|
715
|
-
$xeCascader
|
|
1531
|
+
const radioOpts = $xeCascader.computeRadioOpts
|
|
1532
|
+
const { showIcon, checkMode, checkMethod, visibleMode, visibleMethod } = radioOpts
|
|
1533
|
+
const isVisible = visibleMethod ? visibleMethod({ $cascader: $xeCascader, node }) : handleVisibleOrCheckMode(visibleMode, isExistChild, nLevel)
|
|
1534
|
+
if (showIcon && isVisible) {
|
|
1535
|
+
const isDisabled = checkMethod ? !checkMethod({ $cascader: $xeCascader, node }) : !handleVisibleOrCheckMode(checkMode, isExistChild, nLevel)
|
|
1536
|
+
return h('div', {
|
|
1537
|
+
class: ['vxe-tree--radio-option', {
|
|
1538
|
+
'is--checked': isChecked,
|
|
1539
|
+
'is--disabled': isDisabled
|
|
1540
|
+
}],
|
|
1541
|
+
on: {
|
|
1542
|
+
click: (evnt: MouseEvent) => {
|
|
1543
|
+
if (!isDisabled) {
|
|
1544
|
+
$xeCascader.changeRadioEvent(evnt, node)
|
|
1545
|
+
}
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
}, [
|
|
1549
|
+
h('span', {
|
|
1550
|
+
class: ['vxe-radio--icon', isChecked ? getIcon().RADIO_CHECKED : getIcon().RADIO_UNCHECKED]
|
|
1551
|
+
})
|
|
1552
|
+
])
|
|
1553
|
+
}
|
|
1554
|
+
return renderEmptyElement($xeCascader)
|
|
716
1555
|
},
|
|
717
|
-
|
|
1556
|
+
renderCheckbox (h: CreateElement, node: any, isExistChild: boolean, nLevel: number, isChecked: boolean, isIndeterminate: boolean) {
|
|
718
1557
|
const $xeCascader = this
|
|
719
1558
|
|
|
720
|
-
const
|
|
721
|
-
|
|
1559
|
+
const checkboxOpts = $xeCascader.computeCheckboxOpts
|
|
1560
|
+
const { showIcon, checkMode, checkMethod, visibleMode, visibleMethod } = checkboxOpts
|
|
1561
|
+
const isVisible = visibleMethod ? visibleMethod({ $cascader: $xeCascader, node }) : handleVisibleOrCheckMode(visibleMode, isExistChild, nLevel)
|
|
1562
|
+
if (showIcon && isVisible) {
|
|
1563
|
+
const isDisabled = checkMethod ? !checkMethod({ $cascader: $xeCascader, node }) : !handleVisibleOrCheckMode(checkMode, isExistChild, nLevel)
|
|
1564
|
+
return h('div', {
|
|
1565
|
+
class: ['vxe-cascader--checkbox-option', {
|
|
1566
|
+
'is--checked': isChecked,
|
|
1567
|
+
'is--indeterminate': isIndeterminate,
|
|
1568
|
+
'is--disabled': isDisabled
|
|
1569
|
+
}],
|
|
1570
|
+
on: {
|
|
1571
|
+
click (evnt: MouseEvent) {
|
|
1572
|
+
if (!isDisabled) {
|
|
1573
|
+
$xeCascader.changeCheckboxEvent(evnt, node)
|
|
1574
|
+
}
|
|
1575
|
+
}
|
|
1576
|
+
}
|
|
1577
|
+
}, [
|
|
1578
|
+
h('span', {
|
|
1579
|
+
class: ['vxe-checkbox--icon', isIndeterminate ? getIcon().CHECKBOX_INDETERMINATE : (isChecked ? getIcon().CHECKBOX_CHECKED : getIcon().CHECKBOX_UNCHECKED)]
|
|
1580
|
+
})
|
|
1581
|
+
])
|
|
1582
|
+
}
|
|
1583
|
+
return renderEmptyElement($xeCascader)
|
|
722
1584
|
},
|
|
723
|
-
|
|
1585
|
+
renderNode (h: CreateElement, node: any, nodeid: string, nodeIndex: number, chunks: any[], chunkIndex: number) {
|
|
724
1586
|
const $xeCascader = this
|
|
1587
|
+
const props = $xeCascader
|
|
1588
|
+
const reactData = $xeCascader.reactData
|
|
1589
|
+
const internalData = $xeCascader.internalData
|
|
1590
|
+
const slots = $xeCascader.$scopedSlots
|
|
725
1591
|
|
|
726
|
-
|
|
727
|
-
|
|
1592
|
+
const { multiple } = props
|
|
1593
|
+
const { currentNode, selectRadioKey, updateCheckboxFlag, updateExpandedFlag } = reactData
|
|
1594
|
+
const { nodeMaps, selectCheckboxMaps, indeterminateRowMaps, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData
|
|
1595
|
+
const treeOpts = $xeCascader.computeTreeOpts
|
|
1596
|
+
const { lazy, iconLoaded, iconOpen, iconClose } = treeOpts
|
|
1597
|
+
const childrenField = $xeCascader.computeChildrenField
|
|
1598
|
+
const labelField = $xeCascader.computeLabelField
|
|
1599
|
+
const hasChildField = $xeCascader.computeHasChildField
|
|
1600
|
+
const childList: any[] = node[childrenField]
|
|
1601
|
+
const isExistChild = childList && childList.length > 0
|
|
1602
|
+
const iconSlot = slots.icon
|
|
1603
|
+
const titleSlot = slots.title
|
|
1604
|
+
const isExpand = updateExpandedFlag && treeExpandedMaps[nodeid]
|
|
1605
|
+
const nodeItem = nodeMaps[nodeid] || {}
|
|
1606
|
+
const nodeTitle = node[labelField]
|
|
1607
|
+
const nLevel = nodeItem.level
|
|
728
1608
|
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
1609
|
+
let isRadioChecked = false
|
|
1610
|
+
if (!multiple) {
|
|
1611
|
+
isRadioChecked = nodeid === selectRadioKey
|
|
1612
|
+
}
|
|
1613
|
+
|
|
1614
|
+
let isCheckboxChecked = false
|
|
1615
|
+
let isIndeterminate = false
|
|
1616
|
+
if (multiple) {
|
|
1617
|
+
isCheckboxChecked = !!(updateCheckboxFlag && selectCheckboxMaps[nodeid])
|
|
1618
|
+
isIndeterminate = !!(updateCheckboxFlag && indeterminateRowMaps[nodeid])
|
|
1619
|
+
}
|
|
1620
|
+
|
|
1621
|
+
let hasLazyChilds = false
|
|
1622
|
+
let isLazyLoading = false
|
|
1623
|
+
let isLazyLoaded = false
|
|
1624
|
+
if (lazy) {
|
|
1625
|
+
isLazyLoading = !!treeExpandLazyLoadedMaps[nodeid]
|
|
1626
|
+
hasLazyChilds = node[hasChildField]
|
|
1627
|
+
isLazyLoaded = !!nodeItem.treeLoaded
|
|
1628
|
+
}
|
|
1629
|
+
const nParams = { node }
|
|
1630
|
+
return h('div', {
|
|
1631
|
+
key: `${chunkIndex}_${nodeIndex}`,
|
|
1632
|
+
class: ['vxe-cascader-chunk--node-item', {
|
|
1633
|
+
'is--current': currentNode && (currentNode === node || $xeCascader.getNodeId(currentNode) === nodeid),
|
|
1634
|
+
'is-radio--checked': isRadioChecked,
|
|
1635
|
+
'is-checkbox--checked': isCheckboxChecked,
|
|
1636
|
+
'is-checkbox--indeterminate': isIndeterminate,
|
|
1637
|
+
'is--expand': isExpand
|
|
1638
|
+
}],
|
|
1639
|
+
attrs: {
|
|
1640
|
+
title: nodeTitle
|
|
1641
|
+
},
|
|
1642
|
+
on: {
|
|
1643
|
+
mousedown (evnt: MouseEvent) {
|
|
1644
|
+
const isLeftBtn = evnt.button === 0
|
|
1645
|
+
if (isLeftBtn) {
|
|
1646
|
+
evnt.stopPropagation()
|
|
1647
|
+
}
|
|
1648
|
+
},
|
|
1649
|
+
click (evnt: MouseEvent) {
|
|
1650
|
+
$xeCascader.handleNodeClickEvent(evnt, node, chunks, chunkIndex)
|
|
1651
|
+
}
|
|
1652
|
+
}
|
|
1653
|
+
}, [
|
|
1654
|
+
multiple ? $xeCascader.renderCheckbox(h, node, isExistChild, nLevel, isCheckboxChecked, isIndeterminate) : $xeCascader.renderRadio(h, node, isExistChild, nLevel, isRadioChecked),
|
|
1655
|
+
h('div', {
|
|
1656
|
+
class: 'vxe-cascader-chunk--node-item-inner'
|
|
1657
|
+
}, [
|
|
1658
|
+
h('div', {
|
|
1659
|
+
class: 'vxe-cascader-chunk--node-item-title'
|
|
1660
|
+
}, titleSlot ? getSlotVNs(titleSlot(nParams)) : nodeTitle)
|
|
1661
|
+
]),
|
|
1662
|
+
treeOpts.showIcon && (lazy ? (isLazyLoaded ? isExistChild : hasLazyChilds) : isExistChild)
|
|
1663
|
+
? h('div', {
|
|
1664
|
+
class: 'vxe-cascader-chunk--node-item-switcher'
|
|
1665
|
+
}, [
|
|
1666
|
+
[
|
|
1667
|
+
h('div', {
|
|
1668
|
+
class: 'vxe-cascader--node-item-icon',
|
|
1669
|
+
on: {
|
|
1670
|
+
click (evnt: MouseEvent) {
|
|
1671
|
+
if (treeOpts.trigger === 'icon') {
|
|
1672
|
+
$xeCascader.toggleExpandEvent(evnt, node, chunks, chunkIndex)
|
|
1673
|
+
}
|
|
1674
|
+
}
|
|
1675
|
+
}
|
|
1676
|
+
}, iconSlot
|
|
1677
|
+
? getSlotVNs(iconSlot(nParams))
|
|
1678
|
+
: [
|
|
1679
|
+
h('i', {
|
|
1680
|
+
class: isLazyLoading ? (iconLoaded || getIcon().CASCADER_NODE_LOADED) : (isExpand ? (iconOpen || getIcon().CASCADER_NODE_OPEN) : (iconClose || getIcon().CASCADER_NODE_CLOSE))
|
|
1681
|
+
})
|
|
1682
|
+
])
|
|
1683
|
+
]
|
|
1684
|
+
])
|
|
1685
|
+
: renderEmptyElement($xeCascader)
|
|
1686
|
+
])
|
|
1687
|
+
},
|
|
732
1688
|
renderVN (h: CreateElement): VNode {
|
|
733
1689
|
const $xeCascader = this
|
|
734
1690
|
const props = $xeCascader
|
|
735
|
-
const slots = $xeCascader.$scopedSlots
|
|
736
1691
|
const reactData = $xeCascader.reactData
|
|
1692
|
+
const slots = $xeCascader.$scopedSlots
|
|
737
1693
|
|
|
738
|
-
const { className, value: modelValue, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton } = props
|
|
739
|
-
const { initialized, isActivated, isAniVisible, visiblePanel, searchValue } = reactData
|
|
1694
|
+
const { className, value: modelValue, multiple, loading, filterable, showTotalButton, showCheckedButton, showClearButton, showCloseButton } = props
|
|
1695
|
+
const { initialized, isActivated, isAniVisible, visiblePanel, searchValue, currentCunkList } = reactData
|
|
740
1696
|
const vSize = $xeCascader.computeSize
|
|
741
1697
|
const isDisabled = $xeCascader.computeIsDisabled
|
|
742
1698
|
const selectLabel = $xeCascader.computeSelectLabel
|
|
@@ -775,13 +1731,13 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
775
1731
|
ref: 'refInput',
|
|
776
1732
|
props: {
|
|
777
1733
|
clearable: props.clearable,
|
|
778
|
-
placeholder: props.placeholder,
|
|
1734
|
+
placeholder: loading ? getI18n('vxe.select.loadingText') : props.placeholder,
|
|
779
1735
|
editable: false,
|
|
780
1736
|
disabled: isDisabled,
|
|
781
1737
|
type: 'text',
|
|
782
1738
|
prefixIcon: props.prefixIcon,
|
|
783
1739
|
suffixIcon: loading ? getIcon().TREE_SELECT_LOADED : (visiblePanel ? getIcon().TREE_SELECT_OPEN : getIcon().TREE_SELECT_CLOSE),
|
|
784
|
-
value: loading ?
|
|
1740
|
+
value: loading ? '' : selectLabel,
|
|
785
1741
|
title: selectLabel
|
|
786
1742
|
},
|
|
787
1743
|
on: {
|
|
@@ -795,7 +1751,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
795
1751
|
? {
|
|
796
1752
|
prefix: () => prefixSlot({})
|
|
797
1753
|
}
|
|
798
|
-
:
|
|
1754
|
+
: undefined
|
|
799
1755
|
}),
|
|
800
1756
|
h('div', {
|
|
801
1757
|
ref: 'refOptionPanel',
|
|
@@ -808,7 +1764,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
808
1764
|
attrs: {
|
|
809
1765
|
placement: reactData.panelPlacement
|
|
810
1766
|
},
|
|
811
|
-
style:
|
|
1767
|
+
style: popupWrapperStyle
|
|
812
1768
|
}, initialized
|
|
813
1769
|
? [
|
|
814
1770
|
h('div', {
|
|
@@ -823,7 +1779,6 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
823
1779
|
class: 'vxe-cascader-search--input',
|
|
824
1780
|
props: {
|
|
825
1781
|
value: searchValue,
|
|
826
|
-
title: selectLabel,
|
|
827
1782
|
clearable: true,
|
|
828
1783
|
disabled: false,
|
|
829
1784
|
readonly: false,
|
|
@@ -836,46 +1791,43 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
836
1791
|
})
|
|
837
1792
|
])
|
|
838
1793
|
: renderEmptyElement($xeCascader),
|
|
839
|
-
|
|
1794
|
+
(showCheckedButton && multiple) || showClearButton || headerSlot
|
|
840
1795
|
? h('div', {
|
|
841
|
-
class: 'vxe-
|
|
1796
|
+
class: 'vxe-tree-select--panel-header'
|
|
842
1797
|
}, headerSlot
|
|
843
1798
|
? headerSlot({})
|
|
844
1799
|
: [
|
|
845
1800
|
h('div', {
|
|
846
|
-
class: 'vxe-
|
|
1801
|
+
class: 'vxe-tree-select--header-button'
|
|
847
1802
|
}, [
|
|
848
|
-
|
|
1803
|
+
showCheckedButton && showClearButton
|
|
849
1804
|
? h('div', {
|
|
850
|
-
class: 'vxe-
|
|
851
|
-
},
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
}
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
}
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
})
|
|
877
|
-
: renderEmptyElement($xeCascader)
|
|
878
|
-
])
|
|
1805
|
+
class: 'vxe-tree-select--selected-btns'
|
|
1806
|
+
}, [
|
|
1807
|
+
(showCheckedButton && multiple)
|
|
1808
|
+
? h(VxeButtonComponent, {
|
|
1809
|
+
props: {
|
|
1810
|
+
content: getI18n('vxe.treeSelect.allChecked'),
|
|
1811
|
+
mode: 'text'
|
|
1812
|
+
},
|
|
1813
|
+
on: {
|
|
1814
|
+
click: $xeCascader.allCheckedPanelEvent
|
|
1815
|
+
}
|
|
1816
|
+
})
|
|
1817
|
+
: renderEmptyElement($xeCascader),
|
|
1818
|
+
showClearButton
|
|
1819
|
+
? h(VxeButtonComponent, {
|
|
1820
|
+
props: {
|
|
1821
|
+
content: getI18n('vxe.treeSelect.clearChecked'),
|
|
1822
|
+
mode: 'text'
|
|
1823
|
+
},
|
|
1824
|
+
on: {
|
|
1825
|
+
click: $xeCascader.clearCheckedPanelEvent
|
|
1826
|
+
}
|
|
1827
|
+
})
|
|
1828
|
+
: renderEmptyElement($xeCascader)
|
|
1829
|
+
])
|
|
1830
|
+
: renderEmptyElement($xeCascader)
|
|
879
1831
|
])
|
|
880
1832
|
])
|
|
881
1833
|
: renderEmptyElement($xeCascader),
|
|
@@ -883,15 +1835,63 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
883
1835
|
class: 'vxe-cascader--panel-body'
|
|
884
1836
|
}, [
|
|
885
1837
|
h('div', {
|
|
886
|
-
ref: '
|
|
887
|
-
class: 'vxe-cascader-
|
|
888
|
-
|
|
889
|
-
|
|
1838
|
+
ref: 'refChunkWrapper',
|
|
1839
|
+
class: 'vxe-cascader-chunk--wrapper'
|
|
1840
|
+
}, [
|
|
1841
|
+
currentCunkList.map((chunks, chunkIndex) => {
|
|
1842
|
+
return h('div', {
|
|
1843
|
+
key: chunkIndex,
|
|
1844
|
+
class: 'vxe-cascader-chunk--item-wrapper'
|
|
1845
|
+
}, [
|
|
1846
|
+
h(VxeListComponent, {
|
|
1847
|
+
props: {
|
|
1848
|
+
data: chunks
|
|
1849
|
+
},
|
|
1850
|
+
scopedSlots: {
|
|
1851
|
+
default (slotParams: VxeListSlotTypes.DefaultSlotParams) {
|
|
1852
|
+
const { items } = slotParams
|
|
1853
|
+
return items.map((node, nodeIndex) => {
|
|
1854
|
+
const nodeid = $xeCascader.getNodeId(node)
|
|
1855
|
+
return $xeCascader.renderNode(h, node, nodeid, nodeIndex, chunks, chunkIndex)
|
|
1856
|
+
})
|
|
1857
|
+
}
|
|
1858
|
+
}
|
|
1859
|
+
})
|
|
1860
|
+
])
|
|
1861
|
+
})
|
|
1862
|
+
])
|
|
890
1863
|
]),
|
|
891
|
-
footerSlot
|
|
1864
|
+
footerSlot || showTotalButton || (showCloseButton && multiple)
|
|
892
1865
|
? h('div', {
|
|
893
1866
|
class: 'vxe-cascader--panel-footer'
|
|
894
|
-
}, footerSlot
|
|
1867
|
+
}, footerSlot
|
|
1868
|
+
? footerSlot({})
|
|
1869
|
+
: [
|
|
1870
|
+
h('div', {
|
|
1871
|
+
class: 'vxe-cascader--footer-button'
|
|
1872
|
+
}, [
|
|
1873
|
+
showTotalButton
|
|
1874
|
+
? h('div', {
|
|
1875
|
+
class: 'vxe-cascader--total-btns'
|
|
1876
|
+
}, getI18n('vxe.treeSelect.total', [selectVals.length]))
|
|
1877
|
+
: renderEmptyElement($xeCascader),
|
|
1878
|
+
showCloseButton && multiple
|
|
1879
|
+
? h('div', {
|
|
1880
|
+
class: 'vxe-cascader--oper-btns'
|
|
1881
|
+
}, [
|
|
1882
|
+
h(VxeButtonComponent, {
|
|
1883
|
+
props: {
|
|
1884
|
+
content: getI18n('vxe.select.close'),
|
|
1885
|
+
mode: 'text'
|
|
1886
|
+
},
|
|
1887
|
+
on: {
|
|
1888
|
+
click: $xeCascader.closePanelEvent
|
|
1889
|
+
}
|
|
1890
|
+
})
|
|
1891
|
+
])
|
|
1892
|
+
: renderEmptyElement($xeCascader)
|
|
1893
|
+
])
|
|
1894
|
+
])
|
|
895
1895
|
: renderEmptyElement($xeCascader)
|
|
896
1896
|
])
|
|
897
1897
|
]
|
|
@@ -900,20 +1900,35 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
900
1900
|
}
|
|
901
1901
|
},
|
|
902
1902
|
watch: {
|
|
1903
|
+
value () {
|
|
1904
|
+
const $xeCascader = this
|
|
1905
|
+
const reactData = $xeCascader.reactData
|
|
1906
|
+
|
|
1907
|
+
if (!reactData.visiblePanel) {
|
|
1908
|
+
$xeCascader.handleCurrentItems()
|
|
1909
|
+
$xeCascader.updateCurrentChunk()
|
|
1910
|
+
}
|
|
1911
|
+
},
|
|
903
1912
|
options () {
|
|
904
1913
|
const $xeCascader = this
|
|
1914
|
+
const props = $xeCascader
|
|
905
1915
|
|
|
906
|
-
$xeCascader.
|
|
1916
|
+
$xeCascader.loadData(props.options || [])
|
|
907
1917
|
}
|
|
908
1918
|
},
|
|
909
1919
|
created () {
|
|
910
1920
|
const $xeCascader = this
|
|
1921
|
+
const props = $xeCascader
|
|
911
1922
|
|
|
912
|
-
$xeCascader.
|
|
1923
|
+
$xeCascader.loadData(props.options || [])
|
|
913
1924
|
},
|
|
914
1925
|
mounted () {
|
|
915
1926
|
const $xeCascader = this
|
|
1927
|
+
const props = $xeCascader
|
|
916
1928
|
|
|
1929
|
+
if (props.filterable) {
|
|
1930
|
+
errLog('vxe.error.notProp', ['filterable'])
|
|
1931
|
+
}
|
|
917
1932
|
globalEvents.on($xeCascader, 'mousewheel', $xeCascader.handleGlobalMousewheelEvent)
|
|
918
1933
|
globalEvents.on($xeCascader, 'mousedown', $xeCascader.handleGlobalMousedownEvent)
|
|
919
1934
|
globalEvents.on($xeCascader, 'blur', $xeCascader.handleGlobalBlurEvent)
|
|
@@ -921,6 +1936,8 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
921
1936
|
},
|
|
922
1937
|
beforeDestroy () {
|
|
923
1938
|
const $xeCascader = this
|
|
1939
|
+
const reactData = $xeCascader.reactData
|
|
1940
|
+
const internalData = $xeCascader.internalData
|
|
924
1941
|
|
|
925
1942
|
const panelElem = $xeCascader.$refs.refOptionPanel as HTMLElement | undefined
|
|
926
1943
|
if (panelElem && panelElem.parentNode) {
|
|
@@ -930,11 +1947,7 @@ export default /* define-vxe-component start */ defineVxeComponent({
|
|
|
930
1947
|
globalEvents.off($xeCascader, 'mousedown')
|
|
931
1948
|
globalEvents.off($xeCascader, 'blur')
|
|
932
1949
|
globalEvents.off($xeCascader, 'resize')
|
|
933
|
-
|
|
934
|
-
destroyed () {
|
|
935
|
-
const $xeCascader = this
|
|
936
|
-
const internalData = $xeCascader.internalData
|
|
937
|
-
|
|
1950
|
+
XEUtils.assign(reactData, createReactData())
|
|
938
1951
|
XEUtils.assign(internalData, createInternalData())
|
|
939
1952
|
},
|
|
940
1953
|
render (this: any, h) {
|