vxe-pc-ui 4.7.5 → 4.7.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/icon/style.css +1 -1
- package/es/language/ar-EG.js +19 -1
- package/es/language/de-DE.js +19 -1
- package/es/language/en-US.js +20 -2
- package/es/language/es-ES.js +19 -1
- package/es/language/fr-FR.js +19 -1
- package/es/language/hu-HU.js +19 -1
- package/es/language/hy-AM.js +18 -0
- package/es/language/id-ID.js +19 -1
- package/es/language/it-IT.js +19 -1
- package/es/language/ja-JP.js +19 -1
- package/es/language/ko-KR.js +19 -1
- package/es/language/ms-MY.js +19 -1
- package/es/language/nb-NO.js +19 -1
- package/es/language/pt-BR.js +19 -1
- package/es/language/ru-RU.js +19 -1
- package/es/language/th-TH.js +19 -1
- package/es/language/ug-CN.js +19 -1
- package/es/language/uk-UA.js +19 -1
- package/es/language/uz-UZ.js +19 -1
- package/es/language/vi-VN.js +19 -1
- package/es/language/zh-CHT.js +19 -1
- package/es/language/zh-CN.js +18 -0
- package/es/list/src/list.js +1 -1
- package/es/select/src/select.js +135 -42
- package/es/select/style.css +21 -0
- package/es/select/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tree/src/tree.js +924 -407
- package/es/tree/src/util.js +32 -0
- package/es/tree/style.css +29 -26
- package/es/tree/style.min.css +1 -1
- package/es/tree-select/src/tree-select.js +227 -18
- package/es/tree-select/style.css +36 -1
- package/es/tree-select/style.min.css +1 -1
- package/es/ui/index.js +19 -3
- package/es/ui/src/dom.js +9 -0
- package/es/ui/src/log.js +1 -1
- package/es/vxe-select/style.css +21 -0
- package/es/vxe-select/style.min.css +1 -1
- package/es/vxe-tree/style.css +29 -26
- package/es/vxe-tree/style.min.css +1 -1
- package/es/vxe-tree-select/style.css +36 -1
- package/es/vxe-tree-select/style.min.css +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +1512 -530
- package/lib/index.umd.min.js +1 -1
- package/lib/language/ar-EG.js +19 -1
- package/lib/language/ar-EG.min.js +1 -1
- package/lib/language/ar-EG.umd.js +19 -1
- package/lib/language/de-DE.js +19 -1
- package/lib/language/de-DE.min.js +1 -1
- package/lib/language/de-DE.umd.js +19 -1
- package/lib/language/en-US.js +20 -2
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +20 -2
- package/lib/language/es-ES.js +19 -1
- package/lib/language/es-ES.min.js +1 -1
- package/lib/language/es-ES.umd.js +19 -1
- package/lib/language/fr-FR.js +19 -1
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.umd.js +19 -1
- package/lib/language/hu-HU.js +19 -1
- package/lib/language/hu-HU.min.js +1 -1
- package/lib/language/hu-HU.umd.js +19 -1
- package/lib/language/hy-AM.js +18 -0
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +18 -0
- package/lib/language/id-ID.js +19 -1
- package/lib/language/id-ID.min.js +1 -1
- package/lib/language/id-ID.umd.js +19 -1
- package/lib/language/it-IT.js +19 -1
- package/lib/language/it-IT.min.js +1 -1
- package/lib/language/it-IT.umd.js +19 -1
- package/lib/language/ja-JP.js +19 -1
- package/lib/language/ja-JP.min.js +1 -1
- package/lib/language/ja-JP.umd.js +19 -1
- package/lib/language/ko-KR.js +19 -1
- package/lib/language/ko-KR.min.js +1 -1
- package/lib/language/ko-KR.umd.js +19 -1
- package/lib/language/ms-MY.js +19 -1
- package/lib/language/ms-MY.min.js +1 -1
- package/lib/language/ms-MY.umd.js +19 -1
- package/lib/language/nb-NO.js +19 -1
- package/lib/language/nb-NO.min.js +1 -1
- package/lib/language/nb-NO.umd.js +19 -1
- package/lib/language/pt-BR.js +19 -1
- package/lib/language/pt-BR.min.js +1 -1
- package/lib/language/pt-BR.umd.js +19 -1
- package/lib/language/ru-RU.js +19 -1
- package/lib/language/ru-RU.min.js +1 -1
- package/lib/language/ru-RU.umd.js +19 -1
- package/lib/language/th-TH.js +19 -1
- package/lib/language/th-TH.min.js +1 -1
- package/lib/language/th-TH.umd.js +19 -1
- package/lib/language/ug-CN.js +19 -1
- package/lib/language/ug-CN.min.js +1 -1
- package/lib/language/ug-CN.umd.js +19 -1
- package/lib/language/uk-UA.js +19 -1
- package/lib/language/uk-UA.min.js +1 -1
- package/lib/language/uk-UA.umd.js +19 -1
- package/lib/language/uz-UZ.js +19 -1
- package/lib/language/uz-UZ.min.js +1 -1
- package/lib/language/uz-UZ.umd.js +19 -1
- package/lib/language/vi-VN.js +19 -1
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/vi-VN.umd.js +19 -1
- package/lib/language/zh-CHT.js +19 -1
- package/lib/language/zh-CHT.min.js +1 -1
- package/lib/language/zh-CHT.umd.js +19 -1
- package/lib/language/zh-CN.js +18 -0
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +18 -0
- package/lib/list/src/list.js +1 -1
- package/lib/list/src/list.min.js +1 -1
- package/lib/select/src/select.js +139 -44
- package/lib/select/src/select.min.js +1 -1
- package/lib/select/style/style.css +21 -0
- package/lib/select/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tree/src/tree.js +1154 -572
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/tree/src/util.js +51 -0
- package/lib/tree/src/util.min.js +1 -0
- package/lib/tree/style/style.css +29 -26
- package/lib/tree/style/style.min.css +1 -1
- package/lib/tree-select/src/tree-select.js +237 -21
- package/lib/tree-select/src/tree-select.min.js +1 -1
- package/lib/tree-select/style/style.css +36 -1
- package/lib/tree-select/style/style.min.css +1 -1
- package/lib/ui/index.js +19 -3
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +10 -0
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-select/style/style.css +21 -0
- package/lib/vxe-select/style/style.min.css +1 -1
- package/lib/vxe-tree/style/style.css +29 -26
- package/lib/vxe-tree/style/style.min.css +1 -1
- package/lib/vxe-tree-select/style/style.css +36 -1
- package/lib/vxe-tree-select/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/language/ar-EG.ts +19 -1
- package/packages/language/de-DE.ts +19 -1
- package/packages/language/en-US.ts +20 -2
- package/packages/language/es-ES.ts +19 -1
- package/packages/language/fr-FR.ts +19 -1
- package/packages/language/hu-HU.ts +19 -1
- package/packages/language/hy-AM.ts +18 -0
- package/packages/language/id-ID.ts +19 -1
- package/packages/language/it-IT.ts +19 -1
- package/packages/language/ja-JP.ts +19 -1
- package/packages/language/ko-KR.ts +19 -1
- package/packages/language/ms-MY.ts +19 -1
- package/packages/language/nb-NO.ts +19 -1
- package/packages/language/pt-BR.ts +19 -1
- package/packages/language/ru-RU.ts +19 -1
- package/packages/language/th-TH.ts +19 -1
- package/packages/language/ug-CN.ts +19 -1
- package/packages/language/uk-UA.ts +19 -1
- package/packages/language/uz-UZ.ts +19 -1
- package/packages/language/vi-VN.ts +19 -1
- package/packages/language/zh-CHT.ts +19 -1
- package/packages/language/zh-CN.ts +18 -0
- package/packages/list/src/list.ts +1 -1
- package/packages/select/src/select.ts +146 -50
- package/packages/tree/src/tree.ts +947 -410
- package/packages/tree/src/util.ts +35 -0
- package/packages/tree-select/src/tree-select.ts +240 -19
- package/packages/ui/index.ts +18 -2
- package/packages/ui/src/dom.ts +10 -0
- package/styles/components/select.scss +19 -0
- package/styles/components/tree-select.scss +36 -1
- package/styles/components/tree.scss +34 -31
- package/types/components/button.d.ts +11 -1
- package/types/components/grid.d.ts +5 -0
- package/types/components/icon-picker.d.ts +11 -1
- package/types/components/input.d.ts +2 -2
- package/types/components/select.d.ts +28 -39
- package/types/components/tree-select.d.ts +73 -12
- package/types/components/tree.d.ts +125 -8
- /package/es/icon/{iconfont.1752151733538.ttf → iconfont.1752462949194.ttf} +0 -0
- /package/es/icon/{iconfont.1752151733538.woff → iconfont.1752462949194.woff} +0 -0
- /package/es/icon/{iconfont.1752151733538.woff2 → iconfont.1752462949194.woff2} +0 -0
- /package/es/{iconfont.1752151733538.ttf → iconfont.1752462949194.ttf} +0 -0
- /package/es/{iconfont.1752151733538.woff → iconfont.1752462949194.woff} +0 -0
- /package/es/{iconfont.1752151733538.woff2 → iconfont.1752462949194.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1752151733538.ttf → iconfont.1752462949194.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1752151733538.woff → iconfont.1752462949194.woff} +0 -0
- /package/lib/icon/style/{iconfont.1752151733538.woff2 → iconfont.1752462949194.woff2} +0 -0
- /package/lib/{iconfont.1752151733538.ttf → iconfont.1752462949194.ttf} +0 -0
- /package/lib/{iconfont.1752151733538.woff → iconfont.1752462949194.woff} +0 -0
- /package/lib/{iconfont.1752151733538.woff2 → iconfont.1752462949194.woff2} +0 -0
package/lib/tree/src/tree.js
CHANGED
|
@@ -7,6 +7,8 @@ exports.default = void 0;
|
|
|
7
7
|
var _vue = require("vue");
|
|
8
8
|
var _comp = require("../../ui/src/comp");
|
|
9
9
|
var _ui = require("../../ui");
|
|
10
|
+
var _util = require("./util");
|
|
11
|
+
var _log = require("../../ui/src/log");
|
|
10
12
|
var _xeUtils = _interopRequireDefault(require("xe-utils"));
|
|
11
13
|
var _vn = require("../../ui/src/vn");
|
|
12
14
|
var _dom = require("../../ui/src/dom");
|
|
@@ -22,7 +24,15 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
22
24
|
name: 'VxeTree',
|
|
23
25
|
props: {
|
|
24
26
|
data: Array,
|
|
27
|
+
autoResize: {
|
|
28
|
+
type: Boolean,
|
|
29
|
+
default: () => (0, _ui.getConfig)().tree.autoResize
|
|
30
|
+
},
|
|
25
31
|
height: [String, Number],
|
|
32
|
+
maxHeight: {
|
|
33
|
+
type: [String, Number],
|
|
34
|
+
default: () => (0, _ui.getConfig)().tree.maxHeight
|
|
35
|
+
},
|
|
26
36
|
minHeight: {
|
|
27
37
|
type: [String, Number],
|
|
28
38
|
default: () => (0, _ui.getConfig)().tree.minHeight
|
|
@@ -114,12 +124,15 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
114
124
|
type: String,
|
|
115
125
|
default: () => (0, _ui.getConfig)().tree.iconLoaded
|
|
116
126
|
},
|
|
127
|
+
filterValue: [String, Number],
|
|
128
|
+
filterConfig: Object,
|
|
117
129
|
size: {
|
|
118
130
|
type: String,
|
|
119
131
|
default: () => (0, _ui.getConfig)().tree.size || (0, _ui.getConfig)().size
|
|
120
|
-
}
|
|
132
|
+
},
|
|
133
|
+
virtualYConfig: Object
|
|
121
134
|
},
|
|
122
|
-
emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error'],
|
|
135
|
+
emits: ['update:modelValue', 'update:checkNodeKey', 'update:checkNodeKeys', 'node-click', 'node-dblclick', 'current-change', 'radio-change', 'checkbox-change', 'load-success', 'load-error', 'scroll'],
|
|
123
136
|
setup(props, context) {
|
|
124
137
|
const {
|
|
125
138
|
emit,
|
|
@@ -130,8 +143,19 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
130
143
|
computeSize
|
|
131
144
|
} = (0, _ui.useSize)(props);
|
|
132
145
|
const refElem = (0, _vue.ref)();
|
|
146
|
+
const refHeaderWrapperElem = (0, _vue.ref)();
|
|
147
|
+
const refFooterWrapperElem = (0, _vue.ref)();
|
|
148
|
+
const refVirtualWrapper = (0, _vue.ref)();
|
|
149
|
+
const refVirtualBody = (0, _vue.ref)();
|
|
133
150
|
const reactData = (0, _vue.reactive)({
|
|
151
|
+
parentHeight: 0,
|
|
152
|
+
customHeight: 0,
|
|
153
|
+
customMinHeight: 0,
|
|
154
|
+
customMaxHeight: 0,
|
|
134
155
|
currentNode: null,
|
|
156
|
+
scrollYLoad: false,
|
|
157
|
+
bodyHeight: 0,
|
|
158
|
+
topSpaceHeight: 0,
|
|
135
159
|
selectRadioKey: props.checkNodeKey,
|
|
136
160
|
treeList: [],
|
|
137
161
|
updateExpandedFlag: 1,
|
|
@@ -139,11 +163,26 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
139
163
|
});
|
|
140
164
|
const internalData = {
|
|
141
165
|
// initialized: false,
|
|
166
|
+
// lastFilterValue: '',
|
|
167
|
+
treeFullData: [],
|
|
168
|
+
afterTreeList: [],
|
|
169
|
+
afterVisibleList: [],
|
|
142
170
|
nodeMaps: {},
|
|
143
171
|
selectCheckboxMaps: {},
|
|
144
172
|
indeterminateRowMaps: {},
|
|
145
173
|
treeExpandedMaps: {},
|
|
146
|
-
treeExpandLazyLoadedMaps: {}
|
|
174
|
+
treeExpandLazyLoadedMaps: {},
|
|
175
|
+
lastScrollLeft: 0,
|
|
176
|
+
lastScrollTop: 0,
|
|
177
|
+
scrollYStore: {
|
|
178
|
+
startIndex: 0,
|
|
179
|
+
endIndex: 0,
|
|
180
|
+
visibleSize: 0,
|
|
181
|
+
offsetSize: 0,
|
|
182
|
+
rowHeight: 0
|
|
183
|
+
},
|
|
184
|
+
lastScrollTime: 0
|
|
185
|
+
// hpTimeout: undefined
|
|
147
186
|
};
|
|
148
187
|
const refMaps = {
|
|
149
188
|
refElem
|
|
@@ -170,6 +209,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
170
209
|
const computeHasChildField = (0, _vue.computed)(() => {
|
|
171
210
|
return props.hasChildField || 'hasChild';
|
|
172
211
|
});
|
|
212
|
+
const computeVirtualYOpts = (0, _vue.computed)(() => {
|
|
213
|
+
return Object.assign({}, (0, _ui.getConfig)().tree.virtualYConfig, props.virtualYConfig);
|
|
214
|
+
});
|
|
173
215
|
const computeIsRowCurrent = (0, _vue.computed)(() => {
|
|
174
216
|
const nodeOpts = computeNodeOpts.value;
|
|
175
217
|
const {
|
|
@@ -208,19 +250,28 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
208
250
|
});
|
|
209
251
|
const computeTreeStyle = (0, _vue.computed)(() => {
|
|
210
252
|
const {
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
253
|
+
customHeight,
|
|
254
|
+
customMinHeight,
|
|
255
|
+
customMaxHeight
|
|
256
|
+
} = reactData;
|
|
214
257
|
const stys = {};
|
|
215
|
-
if (
|
|
216
|
-
stys.height = (0, _dom.toCssUnit)(
|
|
258
|
+
if (customHeight) {
|
|
259
|
+
stys.height = (0, _dom.toCssUnit)(customHeight);
|
|
260
|
+
}
|
|
261
|
+
if (customMinHeight) {
|
|
262
|
+
stys.minHeight = (0, _dom.toCssUnit)(customMinHeight);
|
|
217
263
|
}
|
|
218
|
-
if (
|
|
219
|
-
stys.
|
|
264
|
+
if (customMaxHeight) {
|
|
265
|
+
stys.maxHeight = (0, _dom.toCssUnit)(customMaxHeight);
|
|
220
266
|
}
|
|
221
267
|
return stys;
|
|
222
268
|
});
|
|
269
|
+
const computeFilterOpts = (0, _vue.computed)(() => {
|
|
270
|
+
return Object.assign({}, (0, _ui.getConfig)().tree.filterConfig, props.filterConfig);
|
|
271
|
+
});
|
|
223
272
|
const computeMaps = {
|
|
273
|
+
computeChildrenField,
|
|
274
|
+
computeMapChildrenField,
|
|
224
275
|
computeRadioOpts,
|
|
225
276
|
computeCheckboxOpts,
|
|
226
277
|
computeNodeOpts
|
|
@@ -376,6 +427,39 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
376
427
|
$tree: $xeTree
|
|
377
428
|
}, params));
|
|
378
429
|
};
|
|
430
|
+
const getParentElem = () => {
|
|
431
|
+
const el = refElem.value;
|
|
432
|
+
return el ? el.parentElement : null;
|
|
433
|
+
};
|
|
434
|
+
const calcTableHeight = key => {
|
|
435
|
+
const {
|
|
436
|
+
parentHeight
|
|
437
|
+
} = reactData;
|
|
438
|
+
const val = props[key];
|
|
439
|
+
let num = 0;
|
|
440
|
+
if (val) {
|
|
441
|
+
if (val === '100%' || val === 'auto') {
|
|
442
|
+
num = parentHeight;
|
|
443
|
+
} else {
|
|
444
|
+
if ((0, _dom.isScale)(val)) {
|
|
445
|
+
num = Math.floor((_xeUtils.default.toInteger(val) || 1) / 100 * parentHeight);
|
|
446
|
+
} else {
|
|
447
|
+
num = _xeUtils.default.toNumber(val);
|
|
448
|
+
}
|
|
449
|
+
num = Math.max(40, num);
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
return num;
|
|
453
|
+
};
|
|
454
|
+
const updateHeight = () => {
|
|
455
|
+
reactData.customHeight = calcTableHeight('height');
|
|
456
|
+
reactData.customMinHeight = calcTableHeight('minHeight');
|
|
457
|
+
reactData.customMaxHeight = calcTableHeight('maxHeight');
|
|
458
|
+
// 如果启用虚拟滚动,默认高度
|
|
459
|
+
if (reactData.scrollYLoad && !(reactData.customHeight || reactData.customMinHeight)) {
|
|
460
|
+
reactData.customHeight = 300;
|
|
461
|
+
}
|
|
462
|
+
};
|
|
379
463
|
const createNode = records => {
|
|
380
464
|
const valueField = computeValueField.value;
|
|
381
465
|
return Promise.resolve(records.map(obj => {
|
|
@@ -388,427 +472,453 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
388
472
|
return item;
|
|
389
473
|
}));
|
|
390
474
|
};
|
|
391
|
-
const
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
475
|
+
const cacheNodeMap = () => {
|
|
476
|
+
const {
|
|
477
|
+
treeFullData
|
|
478
|
+
} = internalData;
|
|
479
|
+
const valueField = computeValueField.value;
|
|
480
|
+
const childrenField = computeChildrenField.value;
|
|
481
|
+
const keyMaps = {};
|
|
482
|
+
_xeUtils.default.eachTree(treeFullData, (item, index, items, path, parent, nodes) => {
|
|
483
|
+
let nodeid = getNodeId(item);
|
|
484
|
+
if (!nodeid) {
|
|
485
|
+
nodeid = getNodeUniqueId();
|
|
486
|
+
_xeUtils.default.set(item, valueField, nodeid);
|
|
403
487
|
}
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
488
|
+
keyMaps[nodeid] = {
|
|
489
|
+
item,
|
|
490
|
+
index,
|
|
491
|
+
items,
|
|
492
|
+
parent,
|
|
493
|
+
nodes,
|
|
494
|
+
level: nodes.length,
|
|
495
|
+
treeIndex: index,
|
|
496
|
+
lineCount: 0,
|
|
497
|
+
treeLoaded: false
|
|
498
|
+
};
|
|
499
|
+
}, {
|
|
500
|
+
children: childrenField
|
|
501
|
+
});
|
|
502
|
+
internalData.nodeMaps = keyMaps;
|
|
503
|
+
};
|
|
504
|
+
const updateAfterDataIndex = () => {
|
|
505
|
+
const {
|
|
506
|
+
transform
|
|
507
|
+
} = props;
|
|
508
|
+
const {
|
|
509
|
+
afterTreeList,
|
|
510
|
+
nodeMaps
|
|
511
|
+
} = internalData;
|
|
512
|
+
const childrenField = computeChildrenField.value;
|
|
513
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
514
|
+
_xeUtils.default.eachTree(afterTreeList, (item, index, items) => {
|
|
515
|
+
const nodeid = getNodeId(item);
|
|
516
|
+
const nodeItem = nodeMaps[nodeid];
|
|
517
|
+
if (nodeItem) {
|
|
518
|
+
nodeItem.items = items;
|
|
519
|
+
nodeItem.treeIndex = index;
|
|
520
|
+
} else {
|
|
521
|
+
const rest = {
|
|
522
|
+
item,
|
|
523
|
+
index,
|
|
524
|
+
items,
|
|
525
|
+
parent,
|
|
526
|
+
nodes: [],
|
|
527
|
+
level: 0,
|
|
528
|
+
treeIndex: index,
|
|
529
|
+
lineCount: 0,
|
|
530
|
+
treeLoaded: false
|
|
531
|
+
};
|
|
532
|
+
nodeMaps[nodeid] = rest;
|
|
533
|
+
}
|
|
534
|
+
}, {
|
|
535
|
+
children: transform ? mapChildrenField : childrenField
|
|
536
|
+
});
|
|
537
|
+
};
|
|
538
|
+
const updateAfterFullData = () => {
|
|
539
|
+
const {
|
|
540
|
+
transform,
|
|
541
|
+
filterValue
|
|
542
|
+
} = props;
|
|
543
|
+
const {
|
|
544
|
+
treeFullData,
|
|
545
|
+
lastFilterValue
|
|
546
|
+
} = internalData;
|
|
547
|
+
const titleField = computeTitleField.value;
|
|
548
|
+
const childrenField = computeChildrenField.value;
|
|
549
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
550
|
+
const filterOpts = computeFilterOpts.value;
|
|
551
|
+
const {
|
|
552
|
+
autoExpandAll,
|
|
553
|
+
beforeFilterMethod,
|
|
554
|
+
filterMethod,
|
|
555
|
+
afterFilterMethod
|
|
556
|
+
} = filterOpts;
|
|
557
|
+
let fullList = treeFullData;
|
|
558
|
+
let treeList = fullList;
|
|
559
|
+
let filterStr = '';
|
|
560
|
+
if (filterValue || filterValue === 0) {
|
|
561
|
+
filterStr = `${filterValue}`;
|
|
562
|
+
const handleSearch = filterMethod ? item => {
|
|
563
|
+
return filterMethod({
|
|
564
|
+
$tree: $xeTree,
|
|
565
|
+
node: item,
|
|
566
|
+
filterValue: filterStr
|
|
567
|
+
});
|
|
568
|
+
} : item => {
|
|
569
|
+
return String(item[titleField]).toLowerCase().indexOf(filterStr) > -1;
|
|
570
|
+
};
|
|
571
|
+
const bafParams = {
|
|
572
|
+
$tree: $xeTree,
|
|
573
|
+
filterValue: filterStr
|
|
574
|
+
};
|
|
575
|
+
if (beforeFilterMethod) {
|
|
576
|
+
beforeFilterMethod(bafParams);
|
|
577
|
+
}
|
|
578
|
+
if (transform) {
|
|
579
|
+
treeList = _xeUtils.default.searchTree(treeFullData, handleSearch, {
|
|
580
|
+
children: childrenField,
|
|
581
|
+
mapChildren: mapChildrenField,
|
|
582
|
+
isEvery: true
|
|
583
|
+
});
|
|
584
|
+
fullList = treeList;
|
|
585
|
+
} else {
|
|
586
|
+
fullList = treeFullData.filter(handleSearch);
|
|
587
|
+
}
|
|
588
|
+
internalData.lastFilterValue = filterStr;
|
|
589
|
+
(0, _vue.nextTick)(() => {
|
|
590
|
+
// 筛选时自动展开
|
|
591
|
+
if (autoExpandAll) {
|
|
592
|
+
$xeTree.setAllExpandNode(true).then(() => {
|
|
593
|
+
if (afterFilterMethod) {
|
|
594
|
+
afterFilterMethod(bafParams);
|
|
595
|
+
}
|
|
596
|
+
});
|
|
597
|
+
} else {
|
|
598
|
+
if (afterFilterMethod) {
|
|
599
|
+
afterFilterMethod(bafParams);
|
|
600
|
+
}
|
|
601
|
+
}
|
|
602
|
+
});
|
|
603
|
+
} else {
|
|
604
|
+
if (transform) {
|
|
605
|
+
treeList = _xeUtils.default.searchTree(treeFullData, () => true, {
|
|
606
|
+
children: childrenField,
|
|
607
|
+
mapChildren: mapChildrenField,
|
|
608
|
+
isEvery: true
|
|
609
|
+
});
|
|
610
|
+
fullList = treeList;
|
|
611
|
+
if (lastFilterValue) {
|
|
612
|
+
const bafParams = {
|
|
613
|
+
$tree: $xeTree,
|
|
614
|
+
filterValue: filterStr
|
|
615
|
+
};
|
|
616
|
+
if (beforeFilterMethod) {
|
|
617
|
+
beforeFilterMethod(bafParams);
|
|
618
|
+
}
|
|
619
|
+
// 取消筛选时自动收起
|
|
620
|
+
(0, _vue.nextTick)(() => {
|
|
621
|
+
if (autoExpandAll) {
|
|
622
|
+
$xeTree.clearAllExpandNode().then(() => {
|
|
623
|
+
if (afterFilterMethod) {
|
|
624
|
+
afterFilterMethod(bafParams);
|
|
625
|
+
}
|
|
626
|
+
});
|
|
627
|
+
} else {
|
|
628
|
+
if (afterFilterMethod) {
|
|
629
|
+
afterFilterMethod(bafParams);
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
});
|
|
417
633
|
}
|
|
418
634
|
}
|
|
419
|
-
|
|
420
|
-
}
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
} = internalData;
|
|
447
|
-
if (selectRadioKey) {
|
|
448
|
-
const nodeItem = nodeMaps[selectRadioKey];
|
|
449
|
-
if (nodeItem) {
|
|
450
|
-
return nodeItem.item;
|
|
635
|
+
internalData.lastFilterValue = '';
|
|
636
|
+
}
|
|
637
|
+
internalData.afterVisibleList = fullList;
|
|
638
|
+
internalData.afterTreeList = treeList;
|
|
639
|
+
updateAfterDataIndex();
|
|
640
|
+
};
|
|
641
|
+
/**
|
|
642
|
+
* 如果为虚拟树、则将树结构拍平
|
|
643
|
+
*/
|
|
644
|
+
const handleTreeToList = () => {
|
|
645
|
+
const {
|
|
646
|
+
transform
|
|
647
|
+
} = props;
|
|
648
|
+
const {
|
|
649
|
+
afterTreeList,
|
|
650
|
+
treeExpandedMaps
|
|
651
|
+
} = internalData;
|
|
652
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
653
|
+
const expandMaps = {};
|
|
654
|
+
if (transform) {
|
|
655
|
+
const fullData = [];
|
|
656
|
+
_xeUtils.default.eachTree(afterTreeList, (item, index, items, path, parentRow) => {
|
|
657
|
+
const nodeid = getNodeId(item);
|
|
658
|
+
const parentNodeid = getNodeId(parentRow);
|
|
659
|
+
if (!parentRow || expandMaps[parentNodeid] && treeExpandedMaps[parentNodeid]) {
|
|
660
|
+
expandMaps[nodeid] = 1;
|
|
661
|
+
fullData.push(item);
|
|
451
662
|
}
|
|
663
|
+
}, {
|
|
664
|
+
children: mapChildrenField
|
|
665
|
+
});
|
|
666
|
+
updateScrollYStatus(fullData);
|
|
667
|
+
internalData.afterVisibleList = fullData;
|
|
668
|
+
return fullData;
|
|
669
|
+
}
|
|
670
|
+
return internalData.afterVisibleList;
|
|
671
|
+
};
|
|
672
|
+
const handleData = force => {
|
|
673
|
+
const {
|
|
674
|
+
scrollYLoad
|
|
675
|
+
} = reactData;
|
|
676
|
+
const {
|
|
677
|
+
scrollYStore
|
|
678
|
+
} = internalData;
|
|
679
|
+
let fullList = internalData.afterVisibleList;
|
|
680
|
+
if (force) {
|
|
681
|
+
// 更新数据,处理筛选和排序
|
|
682
|
+
updateAfterFullData();
|
|
683
|
+
// 如果为虚拟树,将树结构拍平
|
|
684
|
+
fullList = handleTreeToList();
|
|
685
|
+
}
|
|
686
|
+
const treeList = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
|
|
687
|
+
reactData.treeList = treeList;
|
|
688
|
+
};
|
|
689
|
+
const triggerSearchEvent = _xeUtils.default.debounce(() => handleData(true), 350, {
|
|
690
|
+
trailing: true
|
|
691
|
+
});
|
|
692
|
+
const loadData = list => {
|
|
693
|
+
const {
|
|
694
|
+
expandAll,
|
|
695
|
+
transform
|
|
696
|
+
} = props;
|
|
697
|
+
const {
|
|
698
|
+
initialized,
|
|
699
|
+
scrollYStore
|
|
700
|
+
} = internalData;
|
|
701
|
+
const keyField = computeKeyField.value;
|
|
702
|
+
const parentField = computeParentField.value;
|
|
703
|
+
const childrenField = computeChildrenField.value;
|
|
704
|
+
const fullData = transform ? _xeUtils.default.toArrayTree(list, {
|
|
705
|
+
key: keyField,
|
|
706
|
+
parentKey: parentField,
|
|
707
|
+
mapChildren: childrenField
|
|
708
|
+
}) : list ? list.slice(0) : [];
|
|
709
|
+
internalData.treeFullData = fullData;
|
|
710
|
+
Object.assign(scrollYStore, {
|
|
711
|
+
startIndex: 0,
|
|
712
|
+
endIndex: 1,
|
|
713
|
+
visibleSize: 0
|
|
714
|
+
});
|
|
715
|
+
const sYLoad = updateScrollYStatus(fullData);
|
|
716
|
+
cacheNodeMap();
|
|
717
|
+
handleData(true);
|
|
718
|
+
if (sYLoad) {
|
|
719
|
+
if (!(props.height || props.maxHeight)) {
|
|
720
|
+
(0, _log.errLog)('vxe.error.reqProp', ['height | max-height | virtual-y-config.enabled=false']);
|
|
452
721
|
}
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
722
|
+
}
|
|
723
|
+
return computeScrollLoad().then(() => {
|
|
724
|
+
if (!initialized) {
|
|
725
|
+
if (list && list.length) {
|
|
726
|
+
internalData.initialized = true;
|
|
727
|
+
if (expandAll) {
|
|
728
|
+
$xeTree.setAllExpandNode(true);
|
|
729
|
+
}
|
|
730
|
+
$xeTree.setCheckboxByNodeId(props.checkNodeKeys || [], true);
|
|
731
|
+
}
|
|
732
|
+
}
|
|
733
|
+
updateHeight();
|
|
734
|
+
refreshScroll();
|
|
735
|
+
});
|
|
736
|
+
};
|
|
737
|
+
const updateScrollYStatus = fullData => {
|
|
738
|
+
const {
|
|
739
|
+
transform
|
|
740
|
+
} = props;
|
|
741
|
+
const virtualYOpts = computeVirtualYOpts.value;
|
|
742
|
+
const allList = fullData || internalData.treeFullData;
|
|
743
|
+
// 如果gt为0,则总是启用
|
|
744
|
+
const scrollYLoad = !!transform && !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt < allList.length);
|
|
745
|
+
reactData.scrollYLoad = scrollYLoad;
|
|
746
|
+
return scrollYLoad;
|
|
747
|
+
};
|
|
748
|
+
const updateYSpace = () => {
|
|
749
|
+
const {
|
|
750
|
+
scrollYLoad
|
|
751
|
+
} = reactData;
|
|
752
|
+
const {
|
|
753
|
+
scrollYStore,
|
|
754
|
+
afterVisibleList
|
|
755
|
+
} = internalData;
|
|
756
|
+
reactData.bodyHeight = scrollYLoad ? afterVisibleList.length * scrollYStore.rowHeight : 0;
|
|
757
|
+
reactData.topSpaceHeight = scrollYLoad ? Math.max(scrollYStore.startIndex * scrollYStore.rowHeight, 0) : 0;
|
|
758
|
+
};
|
|
759
|
+
const updateYData = () => {
|
|
760
|
+
handleData();
|
|
761
|
+
updateYSpace();
|
|
762
|
+
};
|
|
763
|
+
const computeScrollLoad = () => {
|
|
764
|
+
return (0, _vue.nextTick)().then(() => {
|
|
463
765
|
const {
|
|
464
|
-
|
|
465
|
-
} =
|
|
466
|
-
return Object.keys(selectCheckboxMaps);
|
|
467
|
-
},
|
|
468
|
-
getCheckboxNodes() {
|
|
766
|
+
scrollYLoad
|
|
767
|
+
} = reactData;
|
|
469
768
|
const {
|
|
470
|
-
|
|
471
|
-
selectCheckboxMaps
|
|
769
|
+
scrollYStore
|
|
472
770
|
} = internalData;
|
|
473
|
-
const
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
771
|
+
const virtualBodyElem = refVirtualBody.value;
|
|
772
|
+
const virtualYOpts = computeVirtualYOpts.value;
|
|
773
|
+
let rowHeight = 0;
|
|
774
|
+
let firstItemElem;
|
|
775
|
+
if (virtualBodyElem) {
|
|
776
|
+
if (!firstItemElem) {
|
|
777
|
+
firstItemElem = virtualBodyElem.children[0];
|
|
478
778
|
}
|
|
779
|
+
}
|
|
780
|
+
if (firstItemElem) {
|
|
781
|
+
rowHeight = firstItemElem.offsetHeight;
|
|
782
|
+
}
|
|
783
|
+
rowHeight = Math.max(20, rowHeight);
|
|
784
|
+
scrollYStore.rowHeight = rowHeight;
|
|
785
|
+
// 计算 Y 逻辑
|
|
786
|
+
if (scrollYLoad) {
|
|
787
|
+
const scrollBodyElem = refVirtualWrapper.value;
|
|
788
|
+
const visibleYSize = Math.max(8, scrollBodyElem ? Math.ceil(scrollBodyElem.clientHeight / rowHeight) : 0);
|
|
789
|
+
const offsetYSize = Math.max(0, Math.min(2, _xeUtils.default.toNumber(virtualYOpts.oSize)));
|
|
790
|
+
scrollYStore.offsetSize = offsetYSize;
|
|
791
|
+
scrollYStore.visibleSize = visibleYSize;
|
|
792
|
+
scrollYStore.endIndex = Math.max(scrollYStore.startIndex, visibleYSize + offsetYSize, scrollYStore.endIndex);
|
|
793
|
+
updateYData();
|
|
794
|
+
} else {
|
|
795
|
+
updateYSpace();
|
|
796
|
+
}
|
|
797
|
+
});
|
|
798
|
+
};
|
|
799
|
+
/**
|
|
800
|
+
* 如果有滚动条,则滚动到对应的位置
|
|
801
|
+
* @param {Number} scrollLeft 左距离
|
|
802
|
+
* @param {Number} scrollTop 上距离
|
|
803
|
+
*/
|
|
804
|
+
const scrollTo = (scrollLeft, scrollTop) => {
|
|
805
|
+
const scrollBodyElem = refVirtualWrapper.value;
|
|
806
|
+
if (scrollBodyElem) {
|
|
807
|
+
if (_xeUtils.default.isNumber(scrollLeft)) {
|
|
808
|
+
scrollBodyElem.scrollLeft = scrollLeft;
|
|
809
|
+
}
|
|
810
|
+
if (_xeUtils.default.isNumber(scrollTop)) {
|
|
811
|
+
scrollBodyElem.scrollTop = scrollTop;
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
if (reactData.scrollYLoad) {
|
|
815
|
+
return new Promise(resolve => {
|
|
816
|
+
setTimeout(() => {
|
|
817
|
+
(0, _vue.nextTick)(() => {
|
|
818
|
+
resolve();
|
|
819
|
+
});
|
|
820
|
+
}, 50);
|
|
479
821
|
});
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
const nodeid = getNodeId(node);
|
|
497
|
-
selectMaps[nodeid] = true;
|
|
498
|
-
}, {
|
|
499
|
-
children: transform ? mapChildrenField : childrenField
|
|
500
|
-
});
|
|
822
|
+
}
|
|
823
|
+
return (0, _vue.nextTick)();
|
|
824
|
+
};
|
|
825
|
+
/**
|
|
826
|
+
* 刷新滚动条
|
|
827
|
+
*/
|
|
828
|
+
const refreshScroll = () => {
|
|
829
|
+
const {
|
|
830
|
+
lastScrollLeft,
|
|
831
|
+
lastScrollTop
|
|
832
|
+
} = internalData;
|
|
833
|
+
return clearScroll().then(() => {
|
|
834
|
+
if (lastScrollLeft || lastScrollTop) {
|
|
835
|
+
internalData.lastScrollLeft = 0;
|
|
836
|
+
internalData.lastScrollTop = 0;
|
|
837
|
+
return scrollTo(lastScrollLeft, lastScrollTop);
|
|
501
838
|
}
|
|
502
|
-
|
|
503
|
-
reactData.updateCheckboxFlag++;
|
|
504
|
-
return (0, _vue.nextTick)();
|
|
505
|
-
},
|
|
506
|
-
clearExpandNode() {
|
|
507
|
-
return treeMethods.clearAllExpandNode();
|
|
508
|
-
},
|
|
509
|
-
clearAllExpandNode() {
|
|
510
|
-
const {
|
|
511
|
-
nodeMaps
|
|
512
|
-
} = internalData;
|
|
513
|
-
_xeUtils.default.each(nodeMaps, nodeItem => {
|
|
514
|
-
nodeItem.treeLoaded = false;
|
|
515
|
-
});
|
|
516
|
-
internalData.treeExpandedMaps = {};
|
|
517
|
-
reactData.updateExpandedFlag++;
|
|
518
|
-
return (0, _vue.nextTick)();
|
|
519
|
-
},
|
|
520
|
-
setExpandByNodeId(nodeids, expanded) {
|
|
521
|
-
const {
|
|
522
|
-
treeExpandedMaps
|
|
523
|
-
} = internalData;
|
|
524
|
-
if (nodeids) {
|
|
525
|
-
if (!_xeUtils.default.isArray(nodeids)) {
|
|
526
|
-
nodeids = [nodeids];
|
|
527
|
-
}
|
|
528
|
-
nodeids.forEach(nodeid => {
|
|
529
|
-
handleSetExpand(nodeid, expanded, treeExpandedMaps);
|
|
530
|
-
});
|
|
531
|
-
reactData.updateExpandedFlag++;
|
|
532
|
-
}
|
|
533
|
-
return (0, _vue.nextTick)();
|
|
534
|
-
},
|
|
535
|
-
getExpandNodeIds() {
|
|
536
|
-
const {
|
|
537
|
-
treeExpandedMaps
|
|
538
|
-
} = internalData;
|
|
539
|
-
return _xeUtils.default.keys(treeExpandedMaps);
|
|
540
|
-
},
|
|
541
|
-
getExpandNodes() {
|
|
542
|
-
const {
|
|
543
|
-
nodeMaps,
|
|
544
|
-
treeExpandedMaps
|
|
545
|
-
} = internalData;
|
|
546
|
-
const list = [];
|
|
547
|
-
_xeUtils.default.each(treeExpandedMaps, (item, nodeid) => {
|
|
548
|
-
const nodeItem = nodeMaps[nodeid];
|
|
549
|
-
if (nodeItem) {
|
|
550
|
-
list.push(nodeItem.item);
|
|
551
|
-
}
|
|
552
|
-
});
|
|
553
|
-
return list;
|
|
554
|
-
},
|
|
555
|
-
setExpandNode(nodes, expanded) {
|
|
556
|
-
const {
|
|
557
|
-
treeExpandedMaps
|
|
558
|
-
} = internalData;
|
|
559
|
-
if (nodes) {
|
|
560
|
-
if (!_xeUtils.default.isArray(nodes)) {
|
|
561
|
-
nodes = [nodes];
|
|
562
|
-
}
|
|
563
|
-
nodes.forEach(node => {
|
|
564
|
-
const nodeid = getNodeId(node);
|
|
565
|
-
handleSetExpand(nodeid, expanded, treeExpandedMaps);
|
|
566
|
-
});
|
|
567
|
-
reactData.updateExpandedFlag++;
|
|
568
|
-
}
|
|
569
|
-
return (0, _vue.nextTick)();
|
|
570
|
-
},
|
|
571
|
-
toggleExpandByNodeId(nodeids) {
|
|
572
|
-
const {
|
|
573
|
-
treeExpandedMaps
|
|
574
|
-
} = internalData;
|
|
575
|
-
if (nodeids) {
|
|
576
|
-
if (!_xeUtils.default.isArray(nodeids)) {
|
|
577
|
-
nodeids = [nodeids];
|
|
578
|
-
}
|
|
579
|
-
nodeids.forEach(nodeid => {
|
|
580
|
-
handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
|
|
581
|
-
});
|
|
582
|
-
reactData.updateExpandedFlag++;
|
|
583
|
-
}
|
|
584
|
-
return (0, _vue.nextTick)();
|
|
585
|
-
},
|
|
586
|
-
toggleExpandNode(nodes) {
|
|
587
|
-
const {
|
|
588
|
-
treeExpandedMaps
|
|
589
|
-
} = internalData;
|
|
590
|
-
if (nodes) {
|
|
591
|
-
if (!_xeUtils.default.isArray(nodes)) {
|
|
592
|
-
nodes = [nodes];
|
|
593
|
-
}
|
|
594
|
-
nodes.forEach(node => {
|
|
595
|
-
const nodeid = getNodeId(node);
|
|
596
|
-
handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
|
|
597
|
-
});
|
|
598
|
-
reactData.updateExpandedFlag++;
|
|
599
|
-
}
|
|
600
|
-
return (0, _vue.nextTick)();
|
|
601
|
-
},
|
|
602
|
-
setAllExpandNode(expanded) {
|
|
603
|
-
const {
|
|
604
|
-
transform
|
|
605
|
-
} = props;
|
|
606
|
-
const {
|
|
607
|
-
treeExpandedMaps
|
|
608
|
-
} = internalData;
|
|
609
|
-
const childrenField = computeChildrenField.value;
|
|
610
|
-
const mapChildrenField = computeMapChildrenField.value;
|
|
611
|
-
if (expanded) {
|
|
612
|
-
_xeUtils.default.eachTree(reactData.treeList, node => {
|
|
613
|
-
const childList = _xeUtils.default.get(node, childrenField);
|
|
614
|
-
const hasChild = childList && childList.length;
|
|
615
|
-
if (hasChild) {
|
|
616
|
-
const nodeid = getNodeId(node);
|
|
617
|
-
treeExpandedMaps[nodeid] = true;
|
|
618
|
-
}
|
|
619
|
-
}, {
|
|
620
|
-
children: transform ? mapChildrenField : childrenField
|
|
621
|
-
});
|
|
622
|
-
} else {
|
|
623
|
-
internalData.treeExpandedMaps = {};
|
|
624
|
-
}
|
|
625
|
-
reactData.updateExpandedFlag++;
|
|
626
|
-
return (0, _vue.nextTick)();
|
|
627
|
-
},
|
|
628
|
-
reloadExpandNode(node) {
|
|
629
|
-
const {
|
|
630
|
-
lazy
|
|
631
|
-
} = props;
|
|
632
|
-
if (lazy) {
|
|
633
|
-
treeMethods.clearExpandLoaded(node);
|
|
634
|
-
return handleAsyncTreeExpandChilds(node);
|
|
635
|
-
}
|
|
636
|
-
return (0, _vue.nextTick)();
|
|
637
|
-
},
|
|
638
|
-
clearExpandLoaded(node) {
|
|
639
|
-
const {
|
|
640
|
-
lazy
|
|
641
|
-
} = props;
|
|
642
|
-
const {
|
|
643
|
-
nodeMaps
|
|
644
|
-
} = internalData;
|
|
645
|
-
if (lazy) {
|
|
646
|
-
const nodeItem = nodeMaps[getNodeId(node)];
|
|
647
|
-
if (nodeItem) {
|
|
648
|
-
nodeItem.treeLoaded = false;
|
|
649
|
-
}
|
|
650
|
-
}
|
|
651
|
-
return (0, _vue.nextTick)();
|
|
652
|
-
},
|
|
653
|
-
/**
|
|
654
|
-
* 用于树结构,给行数据加载子节点
|
|
655
|
-
*/
|
|
656
|
-
loadChildrenNode(node, childRecords) {
|
|
657
|
-
const {
|
|
658
|
-
lazy,
|
|
659
|
-
transform
|
|
660
|
-
} = props;
|
|
661
|
-
const {
|
|
662
|
-
nodeMaps
|
|
663
|
-
} = internalData;
|
|
664
|
-
if (!lazy) {
|
|
665
|
-
return Promise.resolve([]);
|
|
666
|
-
}
|
|
667
|
-
const childrenField = computeChildrenField.value;
|
|
668
|
-
const parentNodeItem = nodeMaps[getNodeId(node)];
|
|
669
|
-
const parentLevel = parentNodeItem ? parentNodeItem.level : 0;
|
|
670
|
-
const parentNodes = parentNodeItem ? parentNodeItem.nodes : [];
|
|
671
|
-
return createNode(childRecords).then(nodeList => {
|
|
672
|
-
_xeUtils.default.eachTree(nodeList, (childRow, index, items, path, parent, nodes) => {
|
|
673
|
-
const itemNodeId = getNodeId(childRow);
|
|
674
|
-
nodeMaps[itemNodeId] = {
|
|
675
|
-
item: node,
|
|
676
|
-
itemIndex: -1,
|
|
677
|
-
items,
|
|
678
|
-
parent: parent || parentNodeItem.item,
|
|
679
|
-
nodes: parentNodes.concat(nodes),
|
|
680
|
-
level: parentLevel + nodes.length,
|
|
681
|
-
lineCount: 0,
|
|
682
|
-
treeLoaded: false
|
|
683
|
-
};
|
|
684
|
-
}, {
|
|
685
|
-
children: childrenField
|
|
686
|
-
});
|
|
687
|
-
node[childrenField] = nodeList;
|
|
688
|
-
if (transform) {
|
|
689
|
-
node[childrenField] = nodeList;
|
|
690
|
-
}
|
|
691
|
-
updateNodeLine(node);
|
|
692
|
-
return nodeList;
|
|
693
|
-
});
|
|
694
|
-
},
|
|
695
|
-
isExpandByNode,
|
|
696
|
-
isCheckedByRadioNodeId,
|
|
697
|
-
isCheckedByRadioNode,
|
|
698
|
-
isCheckedByCheckboxNodeId,
|
|
699
|
-
isIndeterminateByCheckboxNode,
|
|
700
|
-
isCheckedByCheckboxNode,
|
|
701
|
-
getCheckboxIndeterminateNodes() {
|
|
702
|
-
const {
|
|
703
|
-
nodeMaps,
|
|
704
|
-
indeterminateRowMaps
|
|
705
|
-
} = internalData;
|
|
706
|
-
const list = [];
|
|
707
|
-
_xeUtils.default.each(indeterminateRowMaps, (item, nodeid) => {
|
|
708
|
-
const nodeItem = nodeMaps[nodeid];
|
|
709
|
-
if (nodeItem) {
|
|
710
|
-
list.push(nodeItem.item);
|
|
711
|
-
}
|
|
712
|
-
});
|
|
713
|
-
return list;
|
|
714
|
-
}
|
|
839
|
+
});
|
|
715
840
|
};
|
|
716
|
-
|
|
841
|
+
/**
|
|
842
|
+
* 重新计算列表
|
|
843
|
+
*/
|
|
844
|
+
const recalculate = () => {
|
|
717
845
|
const {
|
|
718
|
-
|
|
719
|
-
} =
|
|
846
|
+
scrollYStore
|
|
847
|
+
} = internalData;
|
|
720
848
|
const {
|
|
721
|
-
|
|
722
|
-
} =
|
|
723
|
-
const
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
849
|
+
rowHeight
|
|
850
|
+
} = scrollYStore;
|
|
851
|
+
const el = refElem.value;
|
|
852
|
+
if (el && el.clientWidth && el.clientHeight) {
|
|
853
|
+
const parentEl = getParentElem();
|
|
854
|
+
const headerWrapperEl = refHeaderWrapperElem.value;
|
|
855
|
+
const footerWrapperEl = refFooterWrapperElem.value;
|
|
856
|
+
const headHeight = headerWrapperEl ? headerWrapperEl.clientHeight : 0;
|
|
857
|
+
const footHeight = footerWrapperEl ? footerWrapperEl.clientHeight : 0;
|
|
858
|
+
if (parentEl) {
|
|
859
|
+
const parentPaddingSize = (0, _dom.getPaddingTopBottomSize)(parentEl);
|
|
860
|
+
reactData.parentHeight = Math.max(headHeight + footHeight + rowHeight, parentEl.clientHeight - parentPaddingSize - headHeight - footHeight);
|
|
732
861
|
}
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
lineCount: 0,
|
|
741
|
-
treeLoaded: false
|
|
742
|
-
};
|
|
743
|
-
}, {
|
|
744
|
-
children: transform ? mapChildrenField : childrenField
|
|
745
|
-
});
|
|
746
|
-
internalData.nodeMaps = keyMaps;
|
|
862
|
+
updateHeight();
|
|
863
|
+
return computeScrollLoad().then(() => {
|
|
864
|
+
updateHeight();
|
|
865
|
+
updateYSpace();
|
|
866
|
+
});
|
|
867
|
+
}
|
|
868
|
+
return (0, _vue.nextTick)();
|
|
747
869
|
};
|
|
748
|
-
const
|
|
749
|
-
const {
|
|
750
|
-
expandAll,
|
|
751
|
-
transform
|
|
752
|
-
} = props;
|
|
870
|
+
const loadYData = evnt => {
|
|
753
871
|
const {
|
|
754
|
-
|
|
872
|
+
scrollYStore
|
|
755
873
|
} = internalData;
|
|
756
|
-
const
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
$xeTree.setAllExpandNode(true);
|
|
774
|
-
}
|
|
775
|
-
$xeTree.setCheckboxByNodeId(props.checkNodeKeys || [], true);
|
|
874
|
+
const {
|
|
875
|
+
startIndex,
|
|
876
|
+
endIndex,
|
|
877
|
+
visibleSize,
|
|
878
|
+
offsetSize,
|
|
879
|
+
rowHeight
|
|
880
|
+
} = scrollYStore;
|
|
881
|
+
const scrollBodyElem = evnt.target;
|
|
882
|
+
const scrollTop = scrollBodyElem.scrollTop;
|
|
883
|
+
const toVisibleIndex = Math.floor(scrollTop / rowHeight);
|
|
884
|
+
const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
|
|
885
|
+
const offsetEndIndex = toVisibleIndex + visibleSize + offsetSize;
|
|
886
|
+
if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
|
|
887
|
+
if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
|
|
888
|
+
scrollYStore.startIndex = offsetStartIndex;
|
|
889
|
+
scrollYStore.endIndex = offsetEndIndex;
|
|
890
|
+
updateYData();
|
|
776
891
|
}
|
|
777
892
|
}
|
|
778
893
|
};
|
|
779
|
-
const
|
|
780
|
-
const
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
const
|
|
784
|
-
const
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
handleCountLine(childItem, false, nodeItem);
|
|
790
|
-
}
|
|
791
|
-
});
|
|
894
|
+
const scrollEvent = evnt => {
|
|
895
|
+
const scrollBodyElem = evnt.target;
|
|
896
|
+
const scrollTop = scrollBodyElem.scrollTop;
|
|
897
|
+
const scrollLeft = scrollBodyElem.scrollLeft;
|
|
898
|
+
const isX = scrollLeft !== internalData.lastScrollLeft;
|
|
899
|
+
const isY = scrollTop !== internalData.lastScrollTop;
|
|
900
|
+
internalData.lastScrollTop = scrollTop;
|
|
901
|
+
internalData.lastScrollLeft = scrollLeft;
|
|
902
|
+
if (reactData.scrollYLoad) {
|
|
903
|
+
loadYData(evnt);
|
|
792
904
|
}
|
|
905
|
+
internalData.lastScrollTime = Date.now();
|
|
906
|
+
dispatchEvent('scroll', {
|
|
907
|
+
scrollLeft,
|
|
908
|
+
scrollTop,
|
|
909
|
+
isX,
|
|
910
|
+
isY
|
|
911
|
+
}, evnt);
|
|
793
912
|
};
|
|
794
|
-
const
|
|
795
|
-
const
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
const nodeid = getNodeId(node);
|
|
800
|
-
const nodeItem = nodeMaps[nodeid];
|
|
801
|
-
if (nodeItem) {
|
|
802
|
-
_xeUtils.default.lastArrayEach(nodeItem.nodes, childItem => {
|
|
803
|
-
const nodeid = getNodeId(childItem);
|
|
804
|
-
const nodeItem = nodeMaps[nodeid];
|
|
805
|
-
if (nodeItem) {
|
|
806
|
-
nodeItem.lineCount = 0;
|
|
807
|
-
handleCountLine(childItem, true, nodeItem);
|
|
808
|
-
}
|
|
809
|
-
});
|
|
810
|
-
}
|
|
913
|
+
const clearScroll = () => {
|
|
914
|
+
const scrollBodyElem = refVirtualWrapper.value;
|
|
915
|
+
if (scrollBodyElem) {
|
|
916
|
+
scrollBodyElem.scrollTop = 0;
|
|
917
|
+
scrollBodyElem.scrollLeft = 0;
|
|
811
918
|
}
|
|
919
|
+
internalData.lastScrollTop = 0;
|
|
920
|
+
internalData.lastScrollLeft = 0;
|
|
921
|
+
return (0, _vue.nextTick)();
|
|
812
922
|
};
|
|
813
923
|
const handleNodeClickEvent = (evnt, node) => {
|
|
814
924
|
const {
|
|
@@ -897,7 +1007,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
897
1007
|
if (!checkStrictly && $xeTree.isCheckedByCheckboxNodeId(nodeid)) {
|
|
898
1008
|
handleCheckedCheckboxNode(childRows, true);
|
|
899
1009
|
}
|
|
900
|
-
updateNodeLine(node);
|
|
901
1010
|
dispatchEvent('load-success', {
|
|
902
1011
|
node,
|
|
903
1012
|
data: childRecords
|
|
@@ -905,7 +1014,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
905
1014
|
return (0, _vue.nextTick)();
|
|
906
1015
|
});
|
|
907
1016
|
} else {
|
|
908
|
-
updateNodeLine(node);
|
|
909
1017
|
dispatchEvent('load-success', {
|
|
910
1018
|
node,
|
|
911
1019
|
data: childRecords
|
|
@@ -919,13 +1027,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
919
1027
|
if (treeExpandLazyLoadedMaps[nodeid]) {
|
|
920
1028
|
treeExpandLazyLoadedMaps[nodeid] = false;
|
|
921
1029
|
}
|
|
922
|
-
updateNodeLine(node);
|
|
923
1030
|
dispatchEvent('load-error', {
|
|
924
1031
|
node,
|
|
925
1032
|
data: e
|
|
926
1033
|
}, new Event('load-error'));
|
|
927
1034
|
}).finally(() => {
|
|
928
|
-
|
|
1035
|
+
handleTreeToList();
|
|
1036
|
+
handleData();
|
|
1037
|
+
return recalculate();
|
|
929
1038
|
});
|
|
930
1039
|
} else {
|
|
931
1040
|
resolve();
|
|
@@ -1001,8 +1110,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1001
1110
|
});
|
|
1002
1111
|
}
|
|
1003
1112
|
reactData.updateExpandedFlag++;
|
|
1004
|
-
|
|
1005
|
-
|
|
1113
|
+
handleTreeToList();
|
|
1114
|
+
handleData();
|
|
1115
|
+
return Promise.all(result).then(() => recalculate());
|
|
1006
1116
|
};
|
|
1007
1117
|
const toggleExpandEvent = (evnt, node) => {
|
|
1008
1118
|
const {
|
|
@@ -1023,12 +1133,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1023
1133
|
const {
|
|
1024
1134
|
transform
|
|
1025
1135
|
} = props;
|
|
1026
|
-
const {
|
|
1027
|
-
treeList
|
|
1028
|
-
} = reactData;
|
|
1029
1136
|
const {
|
|
1030
1137
|
selectCheckboxMaps,
|
|
1031
|
-
indeterminateRowMaps
|
|
1138
|
+
indeterminateRowMaps,
|
|
1139
|
+
afterTreeList
|
|
1032
1140
|
} = internalData;
|
|
1033
1141
|
const childrenField = computeChildrenField.value;
|
|
1034
1142
|
const mapChildrenField = computeMapChildrenField.value;
|
|
@@ -1040,7 +1148,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1040
1148
|
if (!checkStrictly) {
|
|
1041
1149
|
const childRowMaps = {};
|
|
1042
1150
|
const childRowList = [];
|
|
1043
|
-
_xeUtils.default.eachTree(
|
|
1151
|
+
_xeUtils.default.eachTree(afterTreeList, node => {
|
|
1044
1152
|
const nodeid = getNodeId(node);
|
|
1045
1153
|
const childList = node[childrenField];
|
|
1046
1154
|
if (childList && childList.length && !childRowMaps[nodeid]) {
|
|
@@ -1056,11 +1164,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1056
1164
|
const childList = vals[2];
|
|
1057
1165
|
let sLen = 0; // 已选
|
|
1058
1166
|
let hLen = 0; // 半选
|
|
1059
|
-
let vLen = 0; //
|
|
1167
|
+
let vLen = 0; // 有效子行
|
|
1168
|
+
const cLen = childList.length; // 子行
|
|
1060
1169
|
childList.forEach(checkMethod ? item => {
|
|
1061
1170
|
const childNodeid = getNodeId(item);
|
|
1062
1171
|
const isSelect = selectCheckboxMaps[childNodeid];
|
|
1063
1172
|
if (checkMethod({
|
|
1173
|
+
$tree: $xeTree,
|
|
1064
1174
|
node: item
|
|
1065
1175
|
})) {
|
|
1066
1176
|
if (isSelect) {
|
|
@@ -1086,8 +1196,25 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1086
1196
|
}
|
|
1087
1197
|
vLen++;
|
|
1088
1198
|
});
|
|
1089
|
-
|
|
1090
|
-
|
|
1199
|
+
let isSelected = false;
|
|
1200
|
+
if (cLen > 0) {
|
|
1201
|
+
if (vLen > 0) {
|
|
1202
|
+
isSelected = (sLen > 0 || hLen > 0) && sLen >= vLen;
|
|
1203
|
+
} else {
|
|
1204
|
+
// 如果存在子项禁用
|
|
1205
|
+
if (sLen > 0 && sLen >= vLen) {
|
|
1206
|
+
isSelected = true;
|
|
1207
|
+
} else if (selectCheckboxMaps[nodeid]) {
|
|
1208
|
+
isSelected = true;
|
|
1209
|
+
} else {
|
|
1210
|
+
isSelected = false;
|
|
1211
|
+
}
|
|
1212
|
+
}
|
|
1213
|
+
} else {
|
|
1214
|
+
// 如果无子项
|
|
1215
|
+
isSelected = selectCheckboxMaps[nodeid];
|
|
1216
|
+
}
|
|
1217
|
+
const halfSelect = !isSelected && (sLen > 0 || hLen > 0);
|
|
1091
1218
|
if (isSelected) {
|
|
1092
1219
|
selectCheckboxMaps[nodeid] = node;
|
|
1093
1220
|
if (indeterminateRowMaps[nodeid]) {
|
|
@@ -1106,128 +1233,500 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1106
1233
|
}
|
|
1107
1234
|
}
|
|
1108
1235
|
});
|
|
1109
|
-
reactData.updateCheckboxFlag++;
|
|
1236
|
+
reactData.updateCheckboxFlag++;
|
|
1237
|
+
}
|
|
1238
|
+
};
|
|
1239
|
+
const changeCheckboxEvent = (evnt, node) => {
|
|
1240
|
+
evnt.preventDefault();
|
|
1241
|
+
evnt.stopPropagation();
|
|
1242
|
+
const {
|
|
1243
|
+
transform
|
|
1244
|
+
} = props;
|
|
1245
|
+
const {
|
|
1246
|
+
selectCheckboxMaps
|
|
1247
|
+
} = internalData;
|
|
1248
|
+
const childrenField = computeChildrenField.value;
|
|
1249
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
1250
|
+
const checkboxOpts = computeCheckboxOpts.value;
|
|
1251
|
+
const {
|
|
1252
|
+
checkStrictly,
|
|
1253
|
+
checkMethod
|
|
1254
|
+
} = checkboxOpts;
|
|
1255
|
+
let isDisabled = !!checkMethod;
|
|
1256
|
+
if (checkMethod) {
|
|
1257
|
+
isDisabled = !checkMethod({
|
|
1258
|
+
$tree: $xeTree,
|
|
1259
|
+
node
|
|
1260
|
+
});
|
|
1261
|
+
}
|
|
1262
|
+
if (isDisabled) {
|
|
1263
|
+
return;
|
|
1264
|
+
}
|
|
1265
|
+
const nodeid = getNodeId(node);
|
|
1266
|
+
let isChecked = false;
|
|
1267
|
+
if (selectCheckboxMaps[nodeid]) {
|
|
1268
|
+
delete selectCheckboxMaps[nodeid];
|
|
1269
|
+
} else {
|
|
1270
|
+
isChecked = true;
|
|
1271
|
+
selectCheckboxMaps[nodeid] = node;
|
|
1272
|
+
}
|
|
1273
|
+
if (!checkStrictly) {
|
|
1274
|
+
_xeUtils.default.eachTree(_xeUtils.default.get(node, transform ? mapChildrenField : childrenField), childNode => {
|
|
1275
|
+
const childNodeid = getNodeId(childNode);
|
|
1276
|
+
if (isChecked) {
|
|
1277
|
+
if (!selectCheckboxMaps[childNodeid]) {
|
|
1278
|
+
selectCheckboxMaps[childNodeid] = true;
|
|
1279
|
+
}
|
|
1280
|
+
} else {
|
|
1281
|
+
if (selectCheckboxMaps[childNodeid]) {
|
|
1282
|
+
delete selectCheckboxMaps[childNodeid];
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
}, {
|
|
1286
|
+
children: transform ? mapChildrenField : childrenField
|
|
1287
|
+
});
|
|
1288
|
+
}
|
|
1289
|
+
reactData.updateCheckboxFlag++;
|
|
1290
|
+
updateCheckboxStatus();
|
|
1291
|
+
const value = _xeUtils.default.keys(selectCheckboxMaps);
|
|
1292
|
+
emitCheckboxMode(value);
|
|
1293
|
+
dispatchEvent('checkbox-change', {
|
|
1294
|
+
node,
|
|
1295
|
+
value,
|
|
1296
|
+
checked: isChecked
|
|
1297
|
+
}, evnt);
|
|
1298
|
+
};
|
|
1299
|
+
const changeCurrentEvent = (evnt, node) => {
|
|
1300
|
+
evnt.preventDefault();
|
|
1301
|
+
const nodeOpts = computeNodeOpts.value;
|
|
1302
|
+
const {
|
|
1303
|
+
currentMethod,
|
|
1304
|
+
trigger
|
|
1305
|
+
} = nodeOpts;
|
|
1306
|
+
const childrenField = computeChildrenField.value;
|
|
1307
|
+
const childList = _xeUtils.default.get(node, childrenField);
|
|
1308
|
+
const hasChild = childList && childList.length;
|
|
1309
|
+
let isDisabled = !!currentMethod;
|
|
1310
|
+
if (trigger === 'child') {
|
|
1311
|
+
if (hasChild) {
|
|
1312
|
+
return;
|
|
1313
|
+
}
|
|
1314
|
+
} else if (trigger === 'parent') {
|
|
1315
|
+
if (!hasChild) {
|
|
1316
|
+
return;
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
if (currentMethod) {
|
|
1320
|
+
isDisabled = !currentMethod({
|
|
1321
|
+
node
|
|
1322
|
+
});
|
|
1110
1323
|
}
|
|
1324
|
+
if (isDisabled) {
|
|
1325
|
+
return;
|
|
1326
|
+
}
|
|
1327
|
+
const isChecked = true;
|
|
1328
|
+
reactData.currentNode = node;
|
|
1329
|
+
dispatchEvent('current-change', {
|
|
1330
|
+
node,
|
|
1331
|
+
checked: isChecked
|
|
1332
|
+
}, evnt);
|
|
1111
1333
|
};
|
|
1112
|
-
const
|
|
1334
|
+
const changeRadioEvent = (evnt, node) => {
|
|
1113
1335
|
evnt.preventDefault();
|
|
1114
1336
|
evnt.stopPropagation();
|
|
1337
|
+
const radioOpts = computeRadioOpts.value;
|
|
1115
1338
|
const {
|
|
1116
|
-
transform
|
|
1117
|
-
} = props;
|
|
1118
|
-
const {
|
|
1119
|
-
selectCheckboxMaps
|
|
1120
|
-
} = internalData;
|
|
1121
|
-
const childrenField = computeChildrenField.value;
|
|
1122
|
-
const mapChildrenField = computeMapChildrenField.value;
|
|
1123
|
-
const checkboxOpts = computeCheckboxOpts.value;
|
|
1124
|
-
const {
|
|
1125
|
-
checkStrictly,
|
|
1126
1339
|
checkMethod
|
|
1127
|
-
} =
|
|
1340
|
+
} = radioOpts;
|
|
1128
1341
|
let isDisabled = !!checkMethod;
|
|
1129
1342
|
if (checkMethod) {
|
|
1130
1343
|
isDisabled = !checkMethod({
|
|
1344
|
+
$tree: $xeTree,
|
|
1131
1345
|
node
|
|
1132
1346
|
});
|
|
1133
1347
|
}
|
|
1134
1348
|
if (isDisabled) {
|
|
1135
1349
|
return;
|
|
1136
1350
|
}
|
|
1137
|
-
const
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1351
|
+
const isChecked = true;
|
|
1352
|
+
const value = getNodeId(node);
|
|
1353
|
+
reactData.selectRadioKey = value;
|
|
1354
|
+
emitRadioMode(value);
|
|
1355
|
+
dispatchEvent('radio-change', {
|
|
1356
|
+
node,
|
|
1357
|
+
value,
|
|
1358
|
+
checked: isChecked
|
|
1359
|
+
}, evnt);
|
|
1360
|
+
};
|
|
1361
|
+
const handleGlobalResizeEvent = () => {
|
|
1362
|
+
const el = refElem.value;
|
|
1363
|
+
if (!el || !el.clientWidth) {
|
|
1364
|
+
return;
|
|
1144
1365
|
}
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1366
|
+
recalculate();
|
|
1367
|
+
};
|
|
1368
|
+
const treeMethods = {
|
|
1369
|
+
dispatchEvent,
|
|
1370
|
+
getNodeId,
|
|
1371
|
+
loadData(data) {
|
|
1372
|
+
return loadData(data || []);
|
|
1373
|
+
},
|
|
1374
|
+
reloadData(data) {
|
|
1375
|
+
return loadData(data || []);
|
|
1376
|
+
},
|
|
1377
|
+
clearCurrentNode() {
|
|
1378
|
+
reactData.currentNode = null;
|
|
1379
|
+
return (0, _vue.nextTick)();
|
|
1380
|
+
},
|
|
1381
|
+
getCurrentNodeId() {
|
|
1382
|
+
const {
|
|
1383
|
+
currentNode
|
|
1384
|
+
} = reactData;
|
|
1385
|
+
if (currentNode) {
|
|
1386
|
+
return getNodeId(currentNode);
|
|
1387
|
+
}
|
|
1388
|
+
return null;
|
|
1389
|
+
},
|
|
1390
|
+
getCurrentNode() {
|
|
1391
|
+
const {
|
|
1392
|
+
currentNode
|
|
1393
|
+
} = reactData;
|
|
1394
|
+
const {
|
|
1395
|
+
nodeMaps
|
|
1396
|
+
} = internalData;
|
|
1397
|
+
if (currentNode) {
|
|
1398
|
+
const nodeItem = nodeMaps[getNodeId(currentNode)];
|
|
1399
|
+
if (nodeItem) {
|
|
1400
|
+
return nodeItem.item;
|
|
1401
|
+
}
|
|
1402
|
+
}
|
|
1403
|
+
return null;
|
|
1404
|
+
},
|
|
1405
|
+
setCurrentNodeId(nodeKey) {
|
|
1406
|
+
const {
|
|
1407
|
+
nodeMaps
|
|
1408
|
+
} = internalData;
|
|
1409
|
+
const nodeItem = nodeMaps[nodeKey];
|
|
1410
|
+
reactData.currentNode = nodeItem ? nodeItem.item : null;
|
|
1411
|
+
return (0, _vue.nextTick)();
|
|
1412
|
+
},
|
|
1413
|
+
setCurrentNode(node) {
|
|
1414
|
+
reactData.currentNode = node;
|
|
1415
|
+
return (0, _vue.nextTick)();
|
|
1416
|
+
},
|
|
1417
|
+
clearRadioNode() {
|
|
1418
|
+
reactData.selectRadioKey = null;
|
|
1419
|
+
return (0, _vue.nextTick)();
|
|
1420
|
+
},
|
|
1421
|
+
getRadioNodeId() {
|
|
1422
|
+
return reactData.selectRadioKey || null;
|
|
1423
|
+
},
|
|
1424
|
+
getRadioNode() {
|
|
1425
|
+
const {
|
|
1426
|
+
selectRadioKey
|
|
1427
|
+
} = reactData;
|
|
1428
|
+
const {
|
|
1429
|
+
nodeMaps
|
|
1430
|
+
} = internalData;
|
|
1431
|
+
if (selectRadioKey) {
|
|
1432
|
+
const nodeItem = nodeMaps[selectRadioKey];
|
|
1433
|
+
if (nodeItem) {
|
|
1434
|
+
return nodeItem.item;
|
|
1435
|
+
}
|
|
1436
|
+
}
|
|
1437
|
+
return null;
|
|
1438
|
+
},
|
|
1439
|
+
setRadioNodeId(nodeKey) {
|
|
1440
|
+
reactData.selectRadioKey = nodeKey;
|
|
1441
|
+
return (0, _vue.nextTick)();
|
|
1442
|
+
},
|
|
1443
|
+
setRadioNode,
|
|
1444
|
+
setCheckboxNode,
|
|
1445
|
+
setCheckboxByNodeId,
|
|
1446
|
+
getCheckboxNodeIds() {
|
|
1447
|
+
const {
|
|
1448
|
+
selectCheckboxMaps
|
|
1449
|
+
} = internalData;
|
|
1450
|
+
return Object.keys(selectCheckboxMaps);
|
|
1451
|
+
},
|
|
1452
|
+
getCheckboxNodes() {
|
|
1453
|
+
const {
|
|
1454
|
+
nodeMaps,
|
|
1455
|
+
selectCheckboxMaps
|
|
1456
|
+
} = internalData;
|
|
1457
|
+
const list = [];
|
|
1458
|
+
_xeUtils.default.each(selectCheckboxMaps, (item, nodeid) => {
|
|
1459
|
+
const nodeItem = nodeMaps[nodeid];
|
|
1460
|
+
if (nodeItem) {
|
|
1461
|
+
list.push(nodeItem.item);
|
|
1462
|
+
}
|
|
1463
|
+
});
|
|
1464
|
+
return list;
|
|
1465
|
+
},
|
|
1466
|
+
clearCheckboxNode() {
|
|
1467
|
+
internalData.selectCheckboxMaps = {};
|
|
1468
|
+
reactData.updateCheckboxFlag++;
|
|
1469
|
+
return (0, _vue.nextTick)().then(() => {
|
|
1470
|
+
return {
|
|
1471
|
+
checkNodeKeys: []
|
|
1472
|
+
};
|
|
1473
|
+
});
|
|
1474
|
+
},
|
|
1475
|
+
setAllCheckboxNode(checked) {
|
|
1476
|
+
const {
|
|
1477
|
+
transform
|
|
1478
|
+
} = props;
|
|
1479
|
+
const selectMaps = {};
|
|
1480
|
+
const childrenField = computeChildrenField.value;
|
|
1481
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
1482
|
+
const checkKeys = [];
|
|
1483
|
+
if (checked) {
|
|
1484
|
+
_xeUtils.default.eachTree(internalData.afterTreeList, node => {
|
|
1485
|
+
const nodeid = getNodeId(node);
|
|
1486
|
+
checkKeys.push(nodeid);
|
|
1487
|
+
selectMaps[nodeid] = true;
|
|
1488
|
+
}, {
|
|
1489
|
+
children: transform ? mapChildrenField : childrenField
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
internalData.selectCheckboxMaps = selectMaps;
|
|
1493
|
+
reactData.updateCheckboxFlag++;
|
|
1494
|
+
return (0, _vue.nextTick)().then(() => {
|
|
1495
|
+
return {
|
|
1496
|
+
checkNodeKeys: checkKeys
|
|
1497
|
+
};
|
|
1498
|
+
});
|
|
1499
|
+
},
|
|
1500
|
+
clearExpandNode() {
|
|
1501
|
+
return treeMethods.clearAllExpandNode();
|
|
1502
|
+
},
|
|
1503
|
+
clearAllExpandNode() {
|
|
1504
|
+
const {
|
|
1505
|
+
nodeMaps,
|
|
1506
|
+
scrollYStore
|
|
1507
|
+
} = internalData;
|
|
1508
|
+
_xeUtils.default.each(nodeMaps, nodeItem => {
|
|
1509
|
+
nodeItem.treeLoaded = false;
|
|
1510
|
+
});
|
|
1511
|
+
internalData.treeExpandedMaps = {};
|
|
1512
|
+
reactData.updateExpandedFlag++;
|
|
1513
|
+
reactData.topSpaceHeight = 0;
|
|
1514
|
+
scrollYStore.startIndex = 0;
|
|
1515
|
+
scrollYStore.endIndex = 1;
|
|
1516
|
+
handleTreeToList();
|
|
1517
|
+
handleData();
|
|
1518
|
+
return recalculate();
|
|
1519
|
+
},
|
|
1520
|
+
setExpandByNodeId(nodeids, expanded) {
|
|
1521
|
+
const {
|
|
1522
|
+
treeExpandedMaps
|
|
1523
|
+
} = internalData;
|
|
1524
|
+
if (nodeids) {
|
|
1525
|
+
if (!_xeUtils.default.isArray(nodeids)) {
|
|
1526
|
+
nodeids = [nodeids];
|
|
1527
|
+
}
|
|
1528
|
+
nodeids.forEach(nodeid => {
|
|
1529
|
+
handleSetExpand(nodeid, expanded, treeExpandedMaps);
|
|
1530
|
+
});
|
|
1531
|
+
reactData.updateExpandedFlag++;
|
|
1532
|
+
}
|
|
1533
|
+
handleTreeToList();
|
|
1534
|
+
handleData();
|
|
1535
|
+
return recalculate();
|
|
1536
|
+
},
|
|
1537
|
+
getExpandNodeIds() {
|
|
1538
|
+
const {
|
|
1539
|
+
treeExpandedMaps
|
|
1540
|
+
} = internalData;
|
|
1541
|
+
return _xeUtils.default.keys(treeExpandedMaps);
|
|
1542
|
+
},
|
|
1543
|
+
getExpandNodes() {
|
|
1544
|
+
const {
|
|
1545
|
+
nodeMaps,
|
|
1546
|
+
treeExpandedMaps
|
|
1547
|
+
} = internalData;
|
|
1548
|
+
const list = [];
|
|
1549
|
+
_xeUtils.default.each(treeExpandedMaps, (item, nodeid) => {
|
|
1550
|
+
const nodeItem = nodeMaps[nodeid];
|
|
1551
|
+
if (nodeItem) {
|
|
1552
|
+
list.push(nodeItem.item);
|
|
1553
|
+
}
|
|
1554
|
+
});
|
|
1555
|
+
return list;
|
|
1556
|
+
},
|
|
1557
|
+
setExpandNode(nodes, expanded) {
|
|
1558
|
+
const {
|
|
1559
|
+
treeExpandedMaps
|
|
1560
|
+
} = internalData;
|
|
1561
|
+
if (nodes) {
|
|
1562
|
+
if (!_xeUtils.default.isArray(nodes)) {
|
|
1563
|
+
nodes = [nodes];
|
|
1564
|
+
}
|
|
1565
|
+
nodes.forEach(node => {
|
|
1566
|
+
const nodeid = getNodeId(node);
|
|
1567
|
+
handleSetExpand(nodeid, expanded, treeExpandedMaps);
|
|
1568
|
+
});
|
|
1569
|
+
reactData.updateExpandedFlag++;
|
|
1570
|
+
}
|
|
1571
|
+
handleTreeToList();
|
|
1572
|
+
handleData();
|
|
1573
|
+
return recalculate();
|
|
1574
|
+
},
|
|
1575
|
+
toggleExpandByNodeId(nodeids) {
|
|
1576
|
+
const {
|
|
1577
|
+
treeExpandedMaps
|
|
1578
|
+
} = internalData;
|
|
1579
|
+
if (nodeids) {
|
|
1580
|
+
if (!_xeUtils.default.isArray(nodeids)) {
|
|
1581
|
+
nodeids = [nodeids];
|
|
1582
|
+
}
|
|
1583
|
+
nodeids.forEach(nodeid => {
|
|
1584
|
+
handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
|
|
1585
|
+
});
|
|
1586
|
+
reactData.updateExpandedFlag++;
|
|
1587
|
+
}
|
|
1588
|
+
handleTreeToList();
|
|
1589
|
+
handleData();
|
|
1590
|
+
return recalculate();
|
|
1591
|
+
},
|
|
1592
|
+
toggleExpandNode(nodes) {
|
|
1593
|
+
const {
|
|
1594
|
+
treeExpandedMaps
|
|
1595
|
+
} = internalData;
|
|
1596
|
+
if (nodes) {
|
|
1597
|
+
if (!_xeUtils.default.isArray(nodes)) {
|
|
1598
|
+
nodes = [nodes];
|
|
1599
|
+
}
|
|
1600
|
+
nodes.forEach(node => {
|
|
1601
|
+
const nodeid = getNodeId(node);
|
|
1602
|
+
handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
|
|
1603
|
+
});
|
|
1604
|
+
reactData.updateExpandedFlag++;
|
|
1605
|
+
}
|
|
1606
|
+
handleTreeToList();
|
|
1607
|
+
handleData();
|
|
1608
|
+
return recalculate();
|
|
1609
|
+
},
|
|
1610
|
+
setAllExpandNode(expanded) {
|
|
1611
|
+
const {
|
|
1612
|
+
transform
|
|
1613
|
+
} = props;
|
|
1614
|
+
const {
|
|
1615
|
+
treeExpandedMaps
|
|
1616
|
+
} = internalData;
|
|
1617
|
+
const childrenField = computeChildrenField.value;
|
|
1618
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
1619
|
+
if (expanded) {
|
|
1620
|
+
_xeUtils.default.eachTree(internalData.afterTreeList, node => {
|
|
1621
|
+
const childList = _xeUtils.default.get(node, childrenField);
|
|
1622
|
+
const hasChild = childList && childList.length;
|
|
1623
|
+
if (hasChild) {
|
|
1624
|
+
const nodeid = getNodeId(node);
|
|
1625
|
+
treeExpandedMaps[nodeid] = true;
|
|
1155
1626
|
}
|
|
1627
|
+
}, {
|
|
1628
|
+
children: transform ? mapChildrenField : childrenField
|
|
1629
|
+
});
|
|
1630
|
+
} else {
|
|
1631
|
+
internalData.treeExpandedMaps = {};
|
|
1632
|
+
}
|
|
1633
|
+
reactData.updateExpandedFlag++;
|
|
1634
|
+
handleTreeToList();
|
|
1635
|
+
handleData();
|
|
1636
|
+
return recalculate();
|
|
1637
|
+
},
|
|
1638
|
+
reloadExpandNode(node) {
|
|
1639
|
+
const {
|
|
1640
|
+
lazy
|
|
1641
|
+
} = props;
|
|
1642
|
+
if (lazy) {
|
|
1643
|
+
treeMethods.clearExpandLoaded(node);
|
|
1644
|
+
return handleAsyncTreeExpandChilds(node);
|
|
1645
|
+
}
|
|
1646
|
+
return recalculate();
|
|
1647
|
+
},
|
|
1648
|
+
clearExpandLoaded(node) {
|
|
1649
|
+
const {
|
|
1650
|
+
lazy
|
|
1651
|
+
} = props;
|
|
1652
|
+
const {
|
|
1653
|
+
nodeMaps
|
|
1654
|
+
} = internalData;
|
|
1655
|
+
if (lazy) {
|
|
1656
|
+
const nodeItem = nodeMaps[getNodeId(node)];
|
|
1657
|
+
if (nodeItem) {
|
|
1658
|
+
nodeItem.treeLoaded = false;
|
|
1156
1659
|
}
|
|
1157
|
-
}, {
|
|
1158
|
-
children: transform ? mapChildrenField : childrenField
|
|
1159
|
-
});
|
|
1160
|
-
}
|
|
1161
|
-
reactData.updateCheckboxFlag++;
|
|
1162
|
-
updateCheckboxStatus();
|
|
1163
|
-
const value = _xeUtils.default.keys(selectCheckboxMaps);
|
|
1164
|
-
emitCheckboxMode(value);
|
|
1165
|
-
dispatchEvent('checkbox-change', {
|
|
1166
|
-
node,
|
|
1167
|
-
value,
|
|
1168
|
-
checked: isChecked
|
|
1169
|
-
}, evnt);
|
|
1170
|
-
};
|
|
1171
|
-
const changeCurrentEvent = (evnt, node) => {
|
|
1172
|
-
evnt.preventDefault();
|
|
1173
|
-
const nodeOpts = computeNodeOpts.value;
|
|
1174
|
-
const {
|
|
1175
|
-
currentMethod,
|
|
1176
|
-
trigger
|
|
1177
|
-
} = nodeOpts;
|
|
1178
|
-
const childrenField = computeChildrenField.value;
|
|
1179
|
-
const childList = _xeUtils.default.get(node, childrenField);
|
|
1180
|
-
const hasChild = childList && childList.length;
|
|
1181
|
-
let isDisabled = !!currentMethod;
|
|
1182
|
-
if (trigger === 'child') {
|
|
1183
|
-
if (hasChild) {
|
|
1184
|
-
return;
|
|
1185
1660
|
}
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1661
|
+
return recalculate();
|
|
1662
|
+
},
|
|
1663
|
+
/**
|
|
1664
|
+
* 用于树结构,给行数据加载子节点
|
|
1665
|
+
*/
|
|
1666
|
+
loadChildrenNode(node, childRecords) {
|
|
1667
|
+
const {
|
|
1668
|
+
lazy,
|
|
1669
|
+
transform
|
|
1670
|
+
} = props;
|
|
1671
|
+
const {
|
|
1672
|
+
nodeMaps
|
|
1673
|
+
} = internalData;
|
|
1674
|
+
if (!lazy) {
|
|
1675
|
+
return Promise.resolve([]);
|
|
1189
1676
|
}
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1677
|
+
const childrenField = computeChildrenField.value;
|
|
1678
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
1679
|
+
const parentNodeItem = nodeMaps[getNodeId(node)];
|
|
1680
|
+
const parentLevel = parentNodeItem ? parentNodeItem.level : 0;
|
|
1681
|
+
const parentNodes = parentNodeItem ? parentNodeItem.nodes : [];
|
|
1682
|
+
return createNode(childRecords).then(nodeList => {
|
|
1683
|
+
_xeUtils.default.eachTree(nodeList, (childRow, index, items, path, parent, nodes) => {
|
|
1684
|
+
const itemNodeId = getNodeId(childRow);
|
|
1685
|
+
nodeMaps[itemNodeId] = {
|
|
1686
|
+
item: node,
|
|
1687
|
+
index: -1,
|
|
1688
|
+
items,
|
|
1689
|
+
parent: parent || parentNodeItem.item,
|
|
1690
|
+
nodes: parentNodes.concat(nodes),
|
|
1691
|
+
level: parentLevel + nodes.length,
|
|
1692
|
+
treeIndex: -1,
|
|
1693
|
+
lineCount: 0,
|
|
1694
|
+
treeLoaded: false
|
|
1695
|
+
};
|
|
1696
|
+
}, {
|
|
1697
|
+
children: childrenField
|
|
1698
|
+
});
|
|
1699
|
+
node[childrenField] = nodeList;
|
|
1700
|
+
if (transform) {
|
|
1701
|
+
node[mapChildrenField] = nodeList;
|
|
1702
|
+
}
|
|
1703
|
+
updateAfterDataIndex();
|
|
1704
|
+
return nodeList;
|
|
1194
1705
|
});
|
|
1195
|
-
}
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
let isDisabled = !!checkMethod;
|
|
1214
|
-
if (checkMethod) {
|
|
1215
|
-
isDisabled = !checkMethod({
|
|
1216
|
-
node
|
|
1706
|
+
},
|
|
1707
|
+
isExpandByNode,
|
|
1708
|
+
isCheckedByRadioNodeId,
|
|
1709
|
+
isCheckedByRadioNode,
|
|
1710
|
+
isCheckedByCheckboxNodeId,
|
|
1711
|
+
isIndeterminateByCheckboxNode,
|
|
1712
|
+
isCheckedByCheckboxNode,
|
|
1713
|
+
getCheckboxIndeterminateNodes() {
|
|
1714
|
+
const {
|
|
1715
|
+
nodeMaps,
|
|
1716
|
+
indeterminateRowMaps
|
|
1717
|
+
} = internalData;
|
|
1718
|
+
const list = [];
|
|
1719
|
+
_xeUtils.default.each(indeterminateRowMaps, (item, nodeid) => {
|
|
1720
|
+
const nodeItem = nodeMaps[nodeid];
|
|
1721
|
+
if (nodeItem) {
|
|
1722
|
+
list.push(nodeItem.item);
|
|
1723
|
+
}
|
|
1217
1724
|
});
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
const value = getNodeId(node);
|
|
1224
|
-
reactData.selectRadioKey = value;
|
|
1225
|
-
emitRadioMode(value);
|
|
1226
|
-
dispatchEvent('radio-change', {
|
|
1227
|
-
node,
|
|
1228
|
-
value,
|
|
1229
|
-
checked: isChecked
|
|
1230
|
-
}, evnt);
|
|
1725
|
+
return list;
|
|
1726
|
+
},
|
|
1727
|
+
recalculate,
|
|
1728
|
+
scrollTo,
|
|
1729
|
+
clearScroll
|
|
1231
1730
|
};
|
|
1232
1731
|
const treePrivateMethods = {};
|
|
1233
1732
|
Object.assign($xeTree, treeMethods, treePrivateMethods);
|
|
@@ -1242,12 +1741,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1242
1741
|
visibleMethod
|
|
1243
1742
|
} = radioOpts;
|
|
1244
1743
|
const isVisible = !visibleMethod || visibleMethod({
|
|
1744
|
+
$tree: $xeTree,
|
|
1245
1745
|
node
|
|
1246
1746
|
});
|
|
1247
1747
|
let isDisabled = !!checkMethod;
|
|
1248
1748
|
if (showRadio && showIcon && isVisible) {
|
|
1249
1749
|
if (checkMethod) {
|
|
1250
1750
|
isDisabled = !checkMethod({
|
|
1751
|
+
$tree: $xeTree,
|
|
1251
1752
|
node
|
|
1252
1753
|
});
|
|
1253
1754
|
}
|
|
@@ -1279,12 +1780,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1279
1780
|
} = checkboxOpts;
|
|
1280
1781
|
const isIndeterminate = isIndeterminateByCheckboxNodeid(nodeid);
|
|
1281
1782
|
const isVisible = !visibleMethod || visibleMethod({
|
|
1783
|
+
$tree: $xeTree,
|
|
1282
1784
|
node
|
|
1283
1785
|
});
|
|
1284
1786
|
let isDisabled = !!checkMethod;
|
|
1285
1787
|
if (showCheckbox && showIcon && isVisible) {
|
|
1286
1788
|
if (checkMethod) {
|
|
1287
1789
|
isDisabled = !checkMethod({
|
|
1790
|
+
$tree: $xeTree,
|
|
1288
1791
|
node
|
|
1289
1792
|
});
|
|
1290
1793
|
}
|
|
@@ -1305,7 +1808,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1305
1808
|
}
|
|
1306
1809
|
return (0, _ui.renderEmptyElement)($xeTree);
|
|
1307
1810
|
};
|
|
1308
|
-
const renderNode = node => {
|
|
1811
|
+
const renderNode = (node, nodeid) => {
|
|
1309
1812
|
const {
|
|
1310
1813
|
lazy,
|
|
1311
1814
|
showRadio,
|
|
@@ -1323,6 +1826,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1323
1826
|
updateExpandedFlag
|
|
1324
1827
|
} = reactData;
|
|
1325
1828
|
const {
|
|
1829
|
+
afterTreeList,
|
|
1326
1830
|
nodeMaps,
|
|
1327
1831
|
treeExpandedMaps,
|
|
1328
1832
|
treeExpandLazyLoadedMaps
|
|
@@ -1335,30 +1839,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1335
1839
|
const iconSlot = slots.icon;
|
|
1336
1840
|
const titleSlot = slots.title;
|
|
1337
1841
|
const extraSlot = slots.extra;
|
|
1338
|
-
const nodeid = getNodeId(node);
|
|
1339
1842
|
const isExpand = updateExpandedFlag && treeExpandedMaps[nodeid];
|
|
1340
1843
|
const nodeItem = nodeMaps[nodeid];
|
|
1341
1844
|
const nodeValue = _xeUtils.default.get(node, titleField);
|
|
1342
|
-
const
|
|
1343
|
-
if (hasChild && treeExpandedMaps[nodeid]) {
|
|
1344
|
-
if (showLine) {
|
|
1345
|
-
childVns.push((0, _vue.h)('div', {
|
|
1346
|
-
key: 'line',
|
|
1347
|
-
class: 'vxe-tree--node-child-line',
|
|
1348
|
-
style: {
|
|
1349
|
-
height: `calc(${nodeItem.lineCount} * var(--vxe-ui-tree-node-height) - var(--vxe-ui-tree-node-height) / 2)`,
|
|
1350
|
-
left: `${(nodeItem.level + 1) * (indent || 1)}px`
|
|
1351
|
-
}
|
|
1352
|
-
}));
|
|
1353
|
-
}
|
|
1354
|
-
childList.forEach(childItem => {
|
|
1355
|
-
childVns.push(renderNode(childItem));
|
|
1356
|
-
});
|
|
1357
|
-
}
|
|
1845
|
+
const nLevel = nodeItem.level;
|
|
1358
1846
|
let isRadioChecked = false;
|
|
1359
1847
|
if (showRadio) {
|
|
1360
|
-
|
|
1361
|
-
isRadioChecked = nodeid == selectRadioKey;
|
|
1848
|
+
isRadioChecked = nodeid === String(selectRadioKey);
|
|
1362
1849
|
}
|
|
1363
1850
|
let isCheckboxChecked = false;
|
|
1364
1851
|
if (showCheckbox) {
|
|
@@ -1372,8 +1859,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1372
1859
|
hasLazyChilds = node[hasChildField];
|
|
1373
1860
|
isLazyLoaded = !!nodeItem.treeLoaded;
|
|
1374
1861
|
}
|
|
1862
|
+
const prevNode = nodeItem.items[nodeItem.treeIndex - 1];
|
|
1863
|
+
const nParams = {
|
|
1864
|
+
node,
|
|
1865
|
+
isExpand
|
|
1866
|
+
};
|
|
1375
1867
|
return (0, _vue.h)('div', {
|
|
1376
|
-
|
|
1868
|
+
key: nodeid,
|
|
1869
|
+
class: ['vxe-tree--node-wrapper', `node--level-${nLevel}`],
|
|
1377
1870
|
nodeid
|
|
1378
1871
|
}, [(0, _vue.h)('div', {
|
|
1379
1872
|
class: ['vxe-tree--node-item', {
|
|
@@ -1382,7 +1875,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1382
1875
|
'is-checkbox--checked': isCheckboxChecked
|
|
1383
1876
|
}],
|
|
1384
1877
|
style: {
|
|
1385
|
-
paddingLeft: `${(
|
|
1878
|
+
paddingLeft: `${(nLevel - 1) * (indent || 1)}px`
|
|
1386
1879
|
},
|
|
1387
1880
|
onClick(evnt) {
|
|
1388
1881
|
handleNodeClickEvent(evnt, node);
|
|
@@ -1390,41 +1883,57 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1390
1883
|
onDblclick(evnt) {
|
|
1391
1884
|
handleNodeDblclickEvent(evnt, node);
|
|
1392
1885
|
}
|
|
1393
|
-
}, [
|
|
1886
|
+
}, [showLine ? (0, _vue.h)('div', {
|
|
1887
|
+
class: 'vxe-tree--node-line-wrapper'
|
|
1888
|
+
}, [(0, _vue.h)('div', {
|
|
1889
|
+
class: 'vxe-tree--node-line',
|
|
1890
|
+
style: {
|
|
1891
|
+
height: `${getNodeId(afterTreeList[0]) === nodeid ? 1 : (0, _util.calcTreeLine)($xeTree, node, prevNode)}px`
|
|
1892
|
+
}
|
|
1893
|
+
})]) : (0, _ui.renderEmptyElement)($xeTree), (0, _vue.h)('div', {
|
|
1394
1894
|
class: 'vxe-tree--node-item-switcher'
|
|
1395
1895
|
}, showIcon && (lazy ? isLazyLoaded ? hasChild : hasLazyChilds : hasChild) ? [(0, _vue.h)('div', {
|
|
1396
1896
|
class: 'vxe-tree--node-item-icon',
|
|
1397
1897
|
onClick(evnt) {
|
|
1398
1898
|
toggleExpandEvent(evnt, node);
|
|
1399
1899
|
}
|
|
1400
|
-
}, iconSlot ? iconSlot({
|
|
1401
|
-
node,
|
|
1402
|
-
isExpand
|
|
1403
|
-
}) : [(0, _vue.h)('i', {
|
|
1900
|
+
}, iconSlot ? (0, _vn.getSlotVNs)(iconSlot(nParams)) : [(0, _vue.h)('i', {
|
|
1404
1901
|
class: isLazyLoading ? iconLoaded || (0, _ui.getIcon)().TREE_NODE_LOADED : isExpand ? iconOpen || (0, _ui.getIcon)().TREE_NODE_OPEN : iconClose || (0, _ui.getIcon)().TREE_NODE_CLOSE
|
|
1405
|
-
})])] : [])
|
|
1902
|
+
})])] : []), renderRadio(node, nodeid, isRadioChecked), renderCheckbox(node, nodeid, isCheckboxChecked), (0, _vue.h)('div', {
|
|
1406
1903
|
class: 'vxe-tree--node-item-inner'
|
|
1407
1904
|
}, [(0, _vue.h)('div', {
|
|
1408
1905
|
class: 'vxe-tree--node-item-title'
|
|
1409
|
-
}, titleSlot ? (0, _vn.getSlotVNs)(titleSlot({
|
|
1410
|
-
node,
|
|
1411
|
-
isExpand
|
|
1412
|
-
})) : `${nodeValue}`), extraSlot ? (0, _vue.h)('div', {
|
|
1906
|
+
}, titleSlot ? (0, _vn.getSlotVNs)(titleSlot(nParams)) : `${nodeValue}`), extraSlot ? (0, _vue.h)('div', {
|
|
1413
1907
|
class: 'vxe-tree--node-item-extra'
|
|
1414
|
-
}, (0, _vn.getSlotVNs)(extraSlot(
|
|
1415
|
-
node,
|
|
1416
|
-
isExpand
|
|
1417
|
-
}))) : (0, _ui.renderEmptyElement)($xeTree)])]), hasChild && treeExpandedMaps[nodeid] ? (0, _vue.h)('div', {
|
|
1418
|
-
class: 'vxe-tree--node-child-wrapper'
|
|
1419
|
-
}, childVns) : (0, _ui.renderEmptyElement)($xeTree)]);
|
|
1908
|
+
}, (0, _vn.getSlotVNs)(extraSlot(nParams))) : (0, _ui.renderEmptyElement)($xeTree)])])]);
|
|
1420
1909
|
};
|
|
1421
|
-
const
|
|
1910
|
+
const renderList = treeList => {
|
|
1422
1911
|
const {
|
|
1423
|
-
|
|
1424
|
-
} =
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
}
|
|
1912
|
+
transform
|
|
1913
|
+
} = props;
|
|
1914
|
+
const {
|
|
1915
|
+
treeExpandedMaps
|
|
1916
|
+
} = internalData;
|
|
1917
|
+
const childrenField = computeChildrenField.value;
|
|
1918
|
+
if (!treeList.length) {
|
|
1919
|
+
return [(0, _vue.h)('div', {
|
|
1920
|
+
class: 'vxe-tree--empty-placeholder'
|
|
1921
|
+
}, (0, _ui.getI18n)('vxe.tree.searchEmpty'))];
|
|
1922
|
+
}
|
|
1923
|
+
const nodeVNs = [];
|
|
1924
|
+
treeList.forEach(transform ? node => {
|
|
1925
|
+
const nodeid = getNodeId(node);
|
|
1926
|
+
nodeVNs.push(renderNode(node, nodeid));
|
|
1927
|
+
} : node => {
|
|
1928
|
+
const nodeid = getNodeId(node);
|
|
1929
|
+
nodeVNs.push(renderNode(node, nodeid));
|
|
1930
|
+
const childList = _xeUtils.default.get(node, childrenField);
|
|
1931
|
+
const hasChild = childList && childList.length;
|
|
1932
|
+
if (hasChild && treeExpandedMaps[nodeid]) {
|
|
1933
|
+
nodeVNs.push(...renderList(childList));
|
|
1934
|
+
}
|
|
1935
|
+
});
|
|
1936
|
+
return nodeVNs;
|
|
1428
1937
|
};
|
|
1429
1938
|
const renderVN = () => {
|
|
1430
1939
|
const {
|
|
@@ -1432,13 +1941,20 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1432
1941
|
trigger,
|
|
1433
1942
|
showLine
|
|
1434
1943
|
} = props;
|
|
1944
|
+
const {
|
|
1945
|
+
bodyHeight,
|
|
1946
|
+
topSpaceHeight,
|
|
1947
|
+
treeList
|
|
1948
|
+
} = reactData;
|
|
1435
1949
|
const vSize = computeSize.value;
|
|
1436
1950
|
const radioOpts = computeRadioOpts.value;
|
|
1437
1951
|
const checkboxOpts = computeCheckboxOpts.value;
|
|
1438
|
-
const treeStyle = computeTreeStyle.value;
|
|
1439
1952
|
const loadingOpts = computeLoadingOpts.value;
|
|
1440
1953
|
const isRowHover = computeIsRowHover.value;
|
|
1954
|
+
const treeStyle = computeTreeStyle.value;
|
|
1441
1955
|
const loadingSlot = slots.loading;
|
|
1956
|
+
const headerSlot = slots.header;
|
|
1957
|
+
const footerSlot = slots.footer;
|
|
1442
1958
|
return (0, _vue.h)('div', {
|
|
1443
1959
|
ref: refElem,
|
|
1444
1960
|
class: ['vxe-tree', {
|
|
@@ -1449,9 +1965,34 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1449
1965
|
'node--hover': isRowHover,
|
|
1450
1966
|
'node--trigger': trigger === 'node',
|
|
1451
1967
|
'is--loading': loading
|
|
1452
|
-
}]
|
|
1453
|
-
|
|
1454
|
-
|
|
1968
|
+
}]
|
|
1969
|
+
}, [headerSlot ? (0, _vue.h)('div', {
|
|
1970
|
+
ref: refHeaderWrapperElem,
|
|
1971
|
+
class: 'vxe-tree--header-wrapper'
|
|
1972
|
+
}, headerSlot({
|
|
1973
|
+
$tree: $xeTree
|
|
1974
|
+
})) : (0, _ui.renderEmptyElement)($xeTree), (0, _vue.h)('div', {
|
|
1975
|
+
ref: refVirtualWrapper,
|
|
1976
|
+
class: 'vxe-tree--node-list-wrapper',
|
|
1977
|
+
style: treeStyle,
|
|
1978
|
+
onScroll: scrollEvent
|
|
1979
|
+
}, [(0, _vue.h)('div', {
|
|
1980
|
+
class: 'vxe-tree--y-space',
|
|
1981
|
+
style: {
|
|
1982
|
+
height: bodyHeight ? `${bodyHeight}px` : ''
|
|
1983
|
+
}
|
|
1984
|
+
}), (0, _vue.h)('div', {
|
|
1985
|
+
ref: refVirtualBody,
|
|
1986
|
+
class: 'vxe-tree--node-list-body',
|
|
1987
|
+
style: {
|
|
1988
|
+
transform: `translateY(${topSpaceHeight}px)`
|
|
1989
|
+
}
|
|
1990
|
+
}, renderList(treeList))]), footerSlot ? (0, _vue.h)('div', {
|
|
1991
|
+
ref: refFooterWrapperElem,
|
|
1992
|
+
class: 'vxe-tree--footer-wrapper'
|
|
1993
|
+
}, footerSlot({
|
|
1994
|
+
$tree: $xeTree
|
|
1995
|
+
})) : (0, _ui.renderEmptyElement)($xeTree),
|
|
1455
1996
|
/**
|
|
1456
1997
|
* 加载中
|
|
1457
1998
|
*/
|
|
@@ -1474,7 +2015,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1474
2015
|
dataFlag.value++;
|
|
1475
2016
|
});
|
|
1476
2017
|
(0, _vue.watch)(dataFlag, () => {
|
|
1477
|
-
|
|
2018
|
+
loadData(props.data || []);
|
|
1478
2019
|
});
|
|
1479
2020
|
(0, _vue.watch)(() => props.checkNodeKey, val => {
|
|
1480
2021
|
reactData.selectRadioKey = val;
|
|
@@ -1489,13 +2030,54 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1489
2030
|
(0, _vue.watch)(checkboxFlag, () => {
|
|
1490
2031
|
updateCheckboxChecked(props.checkNodeKeys || []);
|
|
1491
2032
|
});
|
|
2033
|
+
(0, _vue.watch)(() => props.filterValue, () => {
|
|
2034
|
+
triggerSearchEvent(new Event('filter'));
|
|
2035
|
+
});
|
|
2036
|
+
const hFlag = (0, _vue.ref)(0);
|
|
2037
|
+
(0, _vue.watch)(() => props.height, () => {
|
|
2038
|
+
hFlag.value++;
|
|
2039
|
+
});
|
|
2040
|
+
(0, _vue.watch)(() => props.minHeight, () => {
|
|
2041
|
+
hFlag.value++;
|
|
2042
|
+
});
|
|
2043
|
+
(0, _vue.watch)(() => props.maxHeight, () => {
|
|
2044
|
+
hFlag.value++;
|
|
2045
|
+
});
|
|
2046
|
+
(0, _vue.watch)(hFlag, () => {
|
|
2047
|
+
recalculate();
|
|
2048
|
+
});
|
|
2049
|
+
(0, _vue.onMounted)(() => {
|
|
2050
|
+
if (props.autoResize) {
|
|
2051
|
+
const el = refElem.value;
|
|
2052
|
+
const parentEl = getParentElem();
|
|
2053
|
+
const resizeObserver = _ui.globalResize.create(() => {
|
|
2054
|
+
if (props.autoResize) {
|
|
2055
|
+
recalculate();
|
|
2056
|
+
}
|
|
2057
|
+
});
|
|
2058
|
+
if (el) {
|
|
2059
|
+
resizeObserver.observe(el);
|
|
2060
|
+
}
|
|
2061
|
+
if (parentEl) {
|
|
2062
|
+
resizeObserver.observe(parentEl);
|
|
2063
|
+
}
|
|
2064
|
+
internalData.resizeObserver = resizeObserver;
|
|
2065
|
+
}
|
|
2066
|
+
_ui.globalEvents.on($xeTree, 'resize', handleGlobalResizeEvent);
|
|
2067
|
+
});
|
|
1492
2068
|
(0, _vue.onUnmounted)(() => {
|
|
1493
|
-
|
|
2069
|
+
const {
|
|
2070
|
+
resizeObserver
|
|
2071
|
+
} = internalData;
|
|
2072
|
+
if (resizeObserver) {
|
|
2073
|
+
resizeObserver.disconnect();
|
|
2074
|
+
}
|
|
1494
2075
|
internalData.treeExpandedMaps = {};
|
|
1495
2076
|
internalData.indeterminateRowMaps = {};
|
|
1496
2077
|
internalData.nodeMaps = {};
|
|
2078
|
+
_ui.globalEvents.off($xeTree, 'resize');
|
|
1497
2079
|
});
|
|
1498
|
-
|
|
2080
|
+
loadData(props.data || []);
|
|
1499
2081
|
$xeTree.renderVN = renderVN;
|
|
1500
2082
|
return $xeTree;
|
|
1501
2083
|
},
|