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