vxe-pc-ui 4.7.4 → 4.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/icon/style.css +1 -1
- package/es/language/ar-EG.js +19 -1
- package/es/language/de-DE.js +19 -1
- package/es/language/en-US.js +20 -2
- package/es/language/es-ES.js +19 -1
- package/es/language/fr-FR.js +19 -1
- package/es/language/hu-HU.js +19 -1
- package/es/language/hy-AM.js +18 -0
- package/es/language/id-ID.js +19 -1
- package/es/language/it-IT.js +19 -1
- package/es/language/ja-JP.js +19 -1
- package/es/language/ko-KR.js +19 -1
- package/es/language/ms-MY.js +19 -1
- package/es/language/nb-NO.js +19 -1
- package/es/language/pt-BR.js +19 -1
- package/es/language/ru-RU.js +19 -1
- package/es/language/th-TH.js +19 -1
- package/es/language/ug-CN.js +19 -1
- package/es/language/uk-UA.js +19 -1
- package/es/language/uz-UZ.js +19 -1
- package/es/language/vi-VN.js +19 -1
- package/es/language/zh-CHT.js +19 -1
- package/es/language/zh-CN.js +18 -0
- package/es/list/src/list.js +1 -1
- package/es/select/src/select.js +135 -42
- package/es/select/style.css +21 -0
- package/es/select/style.min.css +1 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tree/src/tree.js +918 -407
- package/es/tree/src/util.js +32 -0
- package/es/tree/style.css +23 -26
- package/es/tree/style.min.css +1 -1
- package/es/tree-select/src/tree-select.js +227 -18
- package/es/tree-select/style.css +36 -1
- package/es/tree-select/style.min.css +1 -1
- package/es/ui/index.js +19 -3
- package/es/ui/src/dom.js +9 -0
- package/es/ui/src/log.js +1 -1
- package/es/vxe-select/style.css +21 -0
- package/es/vxe-select/style.min.css +1 -1
- package/es/vxe-tree/style.css +23 -26
- package/es/vxe-tree/style.min.css +1 -1
- package/es/vxe-tree-select/style.css +36 -1
- package/es/vxe-tree-select/style.min.css +1 -1
- package/lib/icon/style/style.css +1 -1
- package/lib/icon/style/style.min.css +1 -1
- package/lib/index.umd.js +1505 -530
- package/lib/index.umd.min.js +1 -1
- package/lib/language/ar-EG.js +19 -1
- package/lib/language/ar-EG.min.js +1 -1
- package/lib/language/ar-EG.umd.js +19 -1
- package/lib/language/de-DE.js +19 -1
- package/lib/language/de-DE.min.js +1 -1
- package/lib/language/de-DE.umd.js +19 -1
- package/lib/language/en-US.js +20 -2
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +20 -2
- package/lib/language/es-ES.js +19 -1
- package/lib/language/es-ES.min.js +1 -1
- package/lib/language/es-ES.umd.js +19 -1
- package/lib/language/fr-FR.js +19 -1
- package/lib/language/fr-FR.min.js +1 -1
- package/lib/language/fr-FR.umd.js +19 -1
- package/lib/language/hu-HU.js +19 -1
- package/lib/language/hu-HU.min.js +1 -1
- package/lib/language/hu-HU.umd.js +19 -1
- package/lib/language/hy-AM.js +18 -0
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +18 -0
- package/lib/language/id-ID.js +19 -1
- package/lib/language/id-ID.min.js +1 -1
- package/lib/language/id-ID.umd.js +19 -1
- package/lib/language/it-IT.js +19 -1
- package/lib/language/it-IT.min.js +1 -1
- package/lib/language/it-IT.umd.js +19 -1
- package/lib/language/ja-JP.js +19 -1
- package/lib/language/ja-JP.min.js +1 -1
- package/lib/language/ja-JP.umd.js +19 -1
- package/lib/language/ko-KR.js +19 -1
- package/lib/language/ko-KR.min.js +1 -1
- package/lib/language/ko-KR.umd.js +19 -1
- package/lib/language/ms-MY.js +19 -1
- package/lib/language/ms-MY.min.js +1 -1
- package/lib/language/ms-MY.umd.js +19 -1
- package/lib/language/nb-NO.js +19 -1
- package/lib/language/nb-NO.min.js +1 -1
- package/lib/language/nb-NO.umd.js +19 -1
- package/lib/language/pt-BR.js +19 -1
- package/lib/language/pt-BR.min.js +1 -1
- package/lib/language/pt-BR.umd.js +19 -1
- package/lib/language/ru-RU.js +19 -1
- package/lib/language/ru-RU.min.js +1 -1
- package/lib/language/ru-RU.umd.js +19 -1
- package/lib/language/th-TH.js +19 -1
- package/lib/language/th-TH.min.js +1 -1
- package/lib/language/th-TH.umd.js +19 -1
- package/lib/language/ug-CN.js +19 -1
- package/lib/language/ug-CN.min.js +1 -1
- package/lib/language/ug-CN.umd.js +19 -1
- package/lib/language/uk-UA.js +19 -1
- package/lib/language/uk-UA.min.js +1 -1
- package/lib/language/uk-UA.umd.js +19 -1
- package/lib/language/uz-UZ.js +19 -1
- package/lib/language/uz-UZ.min.js +1 -1
- package/lib/language/uz-UZ.umd.js +19 -1
- package/lib/language/vi-VN.js +19 -1
- package/lib/language/vi-VN.min.js +1 -1
- package/lib/language/vi-VN.umd.js +19 -1
- package/lib/language/zh-CHT.js +19 -1
- package/lib/language/zh-CHT.min.js +1 -1
- package/lib/language/zh-CHT.umd.js +19 -1
- package/lib/language/zh-CN.js +18 -0
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +18 -0
- package/lib/list/src/list.js +1 -1
- package/lib/list/src/list.min.js +1 -1
- package/lib/select/src/select.js +139 -44
- package/lib/select/src/select.min.js +1 -1
- package/lib/select/style/style.css +21 -0
- package/lib/select/style/style.min.css +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tree/src/tree.js +1147 -572
- package/lib/tree/src/tree.min.js +1 -1
- package/lib/tree/src/util.js +51 -0
- package/lib/tree/src/util.min.js +1 -0
- package/lib/tree/style/style.css +23 -26
- package/lib/tree/style/style.min.css +1 -1
- package/lib/tree-select/src/tree-select.js +237 -21
- package/lib/tree-select/src/tree-select.min.js +1 -1
- package/lib/tree-select/style/style.css +36 -1
- package/lib/tree-select/style/style.min.css +1 -1
- package/lib/ui/index.js +19 -3
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +10 -0
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-select/style/style.css +21 -0
- package/lib/vxe-select/style/style.min.css +1 -1
- package/lib/vxe-tree/style/style.css +23 -26
- package/lib/vxe-tree/style/style.min.css +1 -1
- package/lib/vxe-tree-select/style/style.css +36 -1
- package/lib/vxe-tree-select/style/style.min.css +1 -1
- package/package.json +1 -1
- package/packages/language/ar-EG.ts +19 -1
- package/packages/language/de-DE.ts +19 -1
- package/packages/language/en-US.ts +20 -2
- package/packages/language/es-ES.ts +19 -1
- package/packages/language/fr-FR.ts +19 -1
- package/packages/language/hu-HU.ts +19 -1
- package/packages/language/hy-AM.ts +18 -0
- package/packages/language/id-ID.ts +19 -1
- package/packages/language/it-IT.ts +19 -1
- package/packages/language/ja-JP.ts +19 -1
- package/packages/language/ko-KR.ts +19 -1
- package/packages/language/ms-MY.ts +19 -1
- package/packages/language/nb-NO.ts +19 -1
- package/packages/language/pt-BR.ts +19 -1
- package/packages/language/ru-RU.ts +19 -1
- package/packages/language/th-TH.ts +19 -1
- package/packages/language/ug-CN.ts +19 -1
- package/packages/language/uk-UA.ts +19 -1
- package/packages/language/uz-UZ.ts +19 -1
- package/packages/language/vi-VN.ts +19 -1
- package/packages/language/zh-CHT.ts +19 -1
- package/packages/language/zh-CN.ts +18 -0
- package/packages/list/src/list.ts +1 -1
- package/packages/select/src/select.ts +146 -50
- package/packages/tree/src/tree.ts +941 -410
- package/packages/tree/src/util.ts +35 -0
- package/packages/tree-select/src/tree-select.ts +240 -19
- package/packages/ui/index.ts +18 -2
- package/packages/ui/src/dom.ts +10 -0
- package/styles/components/select.scss +19 -0
- package/styles/components/tree-select.scss +36 -1
- package/styles/components/tree.scss +28 -31
- package/types/components/button.d.ts +11 -1
- package/types/components/grid.d.ts +5 -0
- package/types/components/icon-picker.d.ts +11 -1
- package/types/components/input.d.ts +2 -2
- package/types/components/select.d.ts +28 -39
- package/types/components/table.d.ts +2 -4
- package/types/components/tree-select.d.ts +73 -12
- package/types/components/tree.d.ts +125 -8
- /package/es/icon/{iconfont.1752133996961.ttf → iconfont.1752416456948.ttf} +0 -0
- /package/es/icon/{iconfont.1752133996961.woff → iconfont.1752416456948.woff} +0 -0
- /package/es/icon/{iconfont.1752133996961.woff2 → iconfont.1752416456948.woff2} +0 -0
- /package/es/{iconfont.1752133996961.ttf → iconfont.1752416456948.ttf} +0 -0
- /package/es/{iconfont.1752133996961.woff → iconfont.1752416456948.woff} +0 -0
- /package/es/{iconfont.1752133996961.woff2 → iconfont.1752416456948.woff2} +0 -0
- /package/lib/icon/style/{iconfont.1752133996961.ttf → iconfont.1752416456948.ttf} +0 -0
- /package/lib/icon/style/{iconfont.1752133996961.woff → iconfont.1752416456948.woff} +0 -0
- /package/lib/icon/style/{iconfont.1752133996961.woff2 → iconfont.1752416456948.woff2} +0 -0
- /package/lib/{iconfont.1752133996961.ttf → iconfont.1752416456948.ttf} +0 -0
- /package/lib/{iconfont.1752133996961.woff → iconfont.1752416456948.woff} +0 -0
- /package/lib/{iconfont.1752133996961.woff2 → iconfont.1752416456948.woff2} +0 -0
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,450 @@ 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
|
-
parent,
|
|
738
|
-
nodes,
|
|
739
|
-
level: nodes.length,
|
|
740
|
-
lineCount: 0,
|
|
741
|
-
treeLoaded: false
|
|
742
|
-
};
|
|
743
|
-
}, {
|
|
744
|
-
children: transform ? mapChildrenField : childrenField
|
|
745
|
-
});
|
|
746
|
-
internalData.nodeMaps = keyMaps;
|
|
862
|
+
updateHeight();
|
|
863
|
+
return computeScrollLoad();
|
|
864
|
+
}
|
|
865
|
+
return (0, _vue.nextTick)();
|
|
747
866
|
};
|
|
748
|
-
const
|
|
749
|
-
const {
|
|
750
|
-
expandAll,
|
|
751
|
-
transform
|
|
752
|
-
} = props;
|
|
867
|
+
const loadYData = evnt => {
|
|
753
868
|
const {
|
|
754
|
-
|
|
869
|
+
scrollYStore
|
|
755
870
|
} = 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);
|
|
871
|
+
const {
|
|
872
|
+
startIndex,
|
|
873
|
+
endIndex,
|
|
874
|
+
visibleSize,
|
|
875
|
+
offsetSize,
|
|
876
|
+
rowHeight
|
|
877
|
+
} = scrollYStore;
|
|
878
|
+
const scrollBodyElem = evnt.target;
|
|
879
|
+
const scrollTop = scrollBodyElem.scrollTop;
|
|
880
|
+
const toVisibleIndex = Math.floor(scrollTop / rowHeight);
|
|
881
|
+
const offsetStartIndex = Math.max(0, toVisibleIndex - 1 - offsetSize);
|
|
882
|
+
const offsetEndIndex = toVisibleIndex + visibleSize + offsetSize;
|
|
883
|
+
if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
|
|
884
|
+
if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
|
|
885
|
+
scrollYStore.startIndex = offsetStartIndex;
|
|
886
|
+
scrollYStore.endIndex = offsetEndIndex;
|
|
887
|
+
updateYData();
|
|
776
888
|
}
|
|
777
889
|
}
|
|
778
890
|
};
|
|
779
|
-
const
|
|
780
|
-
const
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
const
|
|
784
|
-
const
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
handleCountLine(childItem, false, nodeItem);
|
|
790
|
-
}
|
|
791
|
-
});
|
|
891
|
+
const scrollEvent = evnt => {
|
|
892
|
+
const scrollBodyElem = evnt.target;
|
|
893
|
+
const scrollTop = scrollBodyElem.scrollTop;
|
|
894
|
+
const scrollLeft = scrollBodyElem.scrollLeft;
|
|
895
|
+
const isX = scrollLeft !== internalData.lastScrollLeft;
|
|
896
|
+
const isY = scrollTop !== internalData.lastScrollTop;
|
|
897
|
+
internalData.lastScrollTop = scrollTop;
|
|
898
|
+
internalData.lastScrollLeft = scrollLeft;
|
|
899
|
+
if (reactData.scrollYLoad) {
|
|
900
|
+
loadYData(evnt);
|
|
792
901
|
}
|
|
902
|
+
internalData.lastScrollTime = Date.now();
|
|
903
|
+
dispatchEvent('scroll', {
|
|
904
|
+
scrollLeft,
|
|
905
|
+
scrollTop,
|
|
906
|
+
isX,
|
|
907
|
+
isY
|
|
908
|
+
}, evnt);
|
|
793
909
|
};
|
|
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
|
-
}
|
|
910
|
+
const clearScroll = () => {
|
|
911
|
+
const scrollBodyElem = refVirtualWrapper.value;
|
|
912
|
+
if (scrollBodyElem) {
|
|
913
|
+
scrollBodyElem.scrollTop = 0;
|
|
914
|
+
scrollBodyElem.scrollLeft = 0;
|
|
811
915
|
}
|
|
916
|
+
internalData.lastScrollTop = 0;
|
|
917
|
+
internalData.lastScrollLeft = 0;
|
|
918
|
+
return (0, _vue.nextTick)();
|
|
812
919
|
};
|
|
813
920
|
const handleNodeClickEvent = (evnt, node) => {
|
|
814
921
|
const {
|
|
@@ -897,7 +1004,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
897
1004
|
if (!checkStrictly && $xeTree.isCheckedByCheckboxNodeId(nodeid)) {
|
|
898
1005
|
handleCheckedCheckboxNode(childRows, true);
|
|
899
1006
|
}
|
|
900
|
-
updateNodeLine(node);
|
|
901
1007
|
dispatchEvent('load-success', {
|
|
902
1008
|
node,
|
|
903
1009
|
data: childRecords
|
|
@@ -905,7 +1011,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
905
1011
|
return (0, _vue.nextTick)();
|
|
906
1012
|
});
|
|
907
1013
|
} else {
|
|
908
|
-
updateNodeLine(node);
|
|
909
1014
|
dispatchEvent('load-success', {
|
|
910
1015
|
node,
|
|
911
1016
|
data: childRecords
|
|
@@ -919,13 +1024,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
919
1024
|
if (treeExpandLazyLoadedMaps[nodeid]) {
|
|
920
1025
|
treeExpandLazyLoadedMaps[nodeid] = false;
|
|
921
1026
|
}
|
|
922
|
-
updateNodeLine(node);
|
|
923
1027
|
dispatchEvent('load-error', {
|
|
924
1028
|
node,
|
|
925
1029
|
data: e
|
|
926
1030
|
}, new Event('load-error'));
|
|
927
1031
|
}).finally(() => {
|
|
928
|
-
|
|
1032
|
+
handleTreeToList();
|
|
1033
|
+
handleData();
|
|
1034
|
+
return recalculate();
|
|
929
1035
|
});
|
|
930
1036
|
} else {
|
|
931
1037
|
resolve();
|
|
@@ -1001,8 +1107,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1001
1107
|
});
|
|
1002
1108
|
}
|
|
1003
1109
|
reactData.updateExpandedFlag++;
|
|
1004
|
-
|
|
1005
|
-
|
|
1110
|
+
handleTreeToList();
|
|
1111
|
+
handleData();
|
|
1112
|
+
return Promise.all(result).then(() => recalculate());
|
|
1006
1113
|
};
|
|
1007
1114
|
const toggleExpandEvent = (evnt, node) => {
|
|
1008
1115
|
const {
|
|
@@ -1023,12 +1130,10 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1023
1130
|
const {
|
|
1024
1131
|
transform
|
|
1025
1132
|
} = props;
|
|
1026
|
-
const {
|
|
1027
|
-
treeList
|
|
1028
|
-
} = reactData;
|
|
1029
1133
|
const {
|
|
1030
1134
|
selectCheckboxMaps,
|
|
1031
|
-
indeterminateRowMaps
|
|
1135
|
+
indeterminateRowMaps,
|
|
1136
|
+
afterTreeList
|
|
1032
1137
|
} = internalData;
|
|
1033
1138
|
const childrenField = computeChildrenField.value;
|
|
1034
1139
|
const mapChildrenField = computeMapChildrenField.value;
|
|
@@ -1040,7 +1145,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1040
1145
|
if (!checkStrictly) {
|
|
1041
1146
|
const childRowMaps = {};
|
|
1042
1147
|
const childRowList = [];
|
|
1043
|
-
_xeUtils.default.eachTree(
|
|
1148
|
+
_xeUtils.default.eachTree(afterTreeList, node => {
|
|
1044
1149
|
const nodeid = getNodeId(node);
|
|
1045
1150
|
const childList = node[childrenField];
|
|
1046
1151
|
if (childList && childList.length && !childRowMaps[nodeid]) {
|
|
@@ -1056,11 +1161,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1056
1161
|
const childList = vals[2];
|
|
1057
1162
|
let sLen = 0; // 已选
|
|
1058
1163
|
let hLen = 0; // 半选
|
|
1059
|
-
let vLen = 0; //
|
|
1164
|
+
let vLen = 0; // 有效子行
|
|
1165
|
+
const cLen = childList.length; // 子行
|
|
1060
1166
|
childList.forEach(checkMethod ? item => {
|
|
1061
1167
|
const childNodeid = getNodeId(item);
|
|
1062
1168
|
const isSelect = selectCheckboxMaps[childNodeid];
|
|
1063
1169
|
if (checkMethod({
|
|
1170
|
+
$tree: $xeTree,
|
|
1064
1171
|
node: item
|
|
1065
1172
|
})) {
|
|
1066
1173
|
if (isSelect) {
|
|
@@ -1086,8 +1193,25 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1086
1193
|
}
|
|
1087
1194
|
vLen++;
|
|
1088
1195
|
});
|
|
1089
|
-
|
|
1090
|
-
|
|
1196
|
+
let isSelected = false;
|
|
1197
|
+
if (cLen > 0) {
|
|
1198
|
+
if (vLen > 0) {
|
|
1199
|
+
isSelected = (sLen > 0 || hLen > 0) && sLen >= vLen;
|
|
1200
|
+
} else {
|
|
1201
|
+
// 如果存在子项禁用
|
|
1202
|
+
if (sLen > 0 && sLen >= vLen) {
|
|
1203
|
+
isSelected = true;
|
|
1204
|
+
} else if (selectCheckboxMaps[nodeid]) {
|
|
1205
|
+
isSelected = true;
|
|
1206
|
+
} else {
|
|
1207
|
+
isSelected = false;
|
|
1208
|
+
}
|
|
1209
|
+
}
|
|
1210
|
+
} else {
|
|
1211
|
+
// 如果无子项
|
|
1212
|
+
isSelected = selectCheckboxMaps[nodeid];
|
|
1213
|
+
}
|
|
1214
|
+
const halfSelect = !isSelected && (sLen > 0 || hLen > 0);
|
|
1091
1215
|
if (isSelected) {
|
|
1092
1216
|
selectCheckboxMaps[nodeid] = node;
|
|
1093
1217
|
if (indeterminateRowMaps[nodeid]) {
|
|
@@ -1106,128 +1230,496 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1106
1230
|
}
|
|
1107
1231
|
}
|
|
1108
1232
|
});
|
|
1109
|
-
reactData.updateCheckboxFlag++;
|
|
1233
|
+
reactData.updateCheckboxFlag++;
|
|
1234
|
+
}
|
|
1235
|
+
};
|
|
1236
|
+
const changeCheckboxEvent = (evnt, node) => {
|
|
1237
|
+
evnt.preventDefault();
|
|
1238
|
+
evnt.stopPropagation();
|
|
1239
|
+
const {
|
|
1240
|
+
transform
|
|
1241
|
+
} = props;
|
|
1242
|
+
const {
|
|
1243
|
+
selectCheckboxMaps
|
|
1244
|
+
} = internalData;
|
|
1245
|
+
const childrenField = computeChildrenField.value;
|
|
1246
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
1247
|
+
const checkboxOpts = computeCheckboxOpts.value;
|
|
1248
|
+
const {
|
|
1249
|
+
checkStrictly,
|
|
1250
|
+
checkMethod
|
|
1251
|
+
} = checkboxOpts;
|
|
1252
|
+
let isDisabled = !!checkMethod;
|
|
1253
|
+
if (checkMethod) {
|
|
1254
|
+
isDisabled = !checkMethod({
|
|
1255
|
+
$tree: $xeTree,
|
|
1256
|
+
node
|
|
1257
|
+
});
|
|
1258
|
+
}
|
|
1259
|
+
if (isDisabled) {
|
|
1260
|
+
return;
|
|
1261
|
+
}
|
|
1262
|
+
const nodeid = getNodeId(node);
|
|
1263
|
+
let isChecked = false;
|
|
1264
|
+
if (selectCheckboxMaps[nodeid]) {
|
|
1265
|
+
delete selectCheckboxMaps[nodeid];
|
|
1266
|
+
} else {
|
|
1267
|
+
isChecked = true;
|
|
1268
|
+
selectCheckboxMaps[nodeid] = node;
|
|
1269
|
+
}
|
|
1270
|
+
if (!checkStrictly) {
|
|
1271
|
+
_xeUtils.default.eachTree(_xeUtils.default.get(node, transform ? mapChildrenField : childrenField), childNode => {
|
|
1272
|
+
const childNodeid = getNodeId(childNode);
|
|
1273
|
+
if (isChecked) {
|
|
1274
|
+
if (!selectCheckboxMaps[childNodeid]) {
|
|
1275
|
+
selectCheckboxMaps[childNodeid] = true;
|
|
1276
|
+
}
|
|
1277
|
+
} else {
|
|
1278
|
+
if (selectCheckboxMaps[childNodeid]) {
|
|
1279
|
+
delete selectCheckboxMaps[childNodeid];
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
}, {
|
|
1283
|
+
children: transform ? mapChildrenField : childrenField
|
|
1284
|
+
});
|
|
1285
|
+
}
|
|
1286
|
+
reactData.updateCheckboxFlag++;
|
|
1287
|
+
updateCheckboxStatus();
|
|
1288
|
+
const value = _xeUtils.default.keys(selectCheckboxMaps);
|
|
1289
|
+
emitCheckboxMode(value);
|
|
1290
|
+
dispatchEvent('checkbox-change', {
|
|
1291
|
+
node,
|
|
1292
|
+
value,
|
|
1293
|
+
checked: isChecked
|
|
1294
|
+
}, evnt);
|
|
1295
|
+
};
|
|
1296
|
+
const changeCurrentEvent = (evnt, node) => {
|
|
1297
|
+
evnt.preventDefault();
|
|
1298
|
+
const nodeOpts = computeNodeOpts.value;
|
|
1299
|
+
const {
|
|
1300
|
+
currentMethod,
|
|
1301
|
+
trigger
|
|
1302
|
+
} = nodeOpts;
|
|
1303
|
+
const childrenField = computeChildrenField.value;
|
|
1304
|
+
const childList = _xeUtils.default.get(node, childrenField);
|
|
1305
|
+
const hasChild = childList && childList.length;
|
|
1306
|
+
let isDisabled = !!currentMethod;
|
|
1307
|
+
if (trigger === 'child') {
|
|
1308
|
+
if (hasChild) {
|
|
1309
|
+
return;
|
|
1310
|
+
}
|
|
1311
|
+
} else if (trigger === 'parent') {
|
|
1312
|
+
if (!hasChild) {
|
|
1313
|
+
return;
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
if (currentMethod) {
|
|
1317
|
+
isDisabled = !currentMethod({
|
|
1318
|
+
node
|
|
1319
|
+
});
|
|
1110
1320
|
}
|
|
1321
|
+
if (isDisabled) {
|
|
1322
|
+
return;
|
|
1323
|
+
}
|
|
1324
|
+
const isChecked = true;
|
|
1325
|
+
reactData.currentNode = node;
|
|
1326
|
+
dispatchEvent('current-change', {
|
|
1327
|
+
node,
|
|
1328
|
+
checked: isChecked
|
|
1329
|
+
}, evnt);
|
|
1111
1330
|
};
|
|
1112
|
-
const
|
|
1331
|
+
const changeRadioEvent = (evnt, node) => {
|
|
1113
1332
|
evnt.preventDefault();
|
|
1114
1333
|
evnt.stopPropagation();
|
|
1334
|
+
const radioOpts = computeRadioOpts.value;
|
|
1115
1335
|
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
1336
|
checkMethod
|
|
1127
|
-
} =
|
|
1337
|
+
} = radioOpts;
|
|
1128
1338
|
let isDisabled = !!checkMethod;
|
|
1129
1339
|
if (checkMethod) {
|
|
1130
1340
|
isDisabled = !checkMethod({
|
|
1341
|
+
$tree: $xeTree,
|
|
1131
1342
|
node
|
|
1132
1343
|
});
|
|
1133
1344
|
}
|
|
1134
1345
|
if (isDisabled) {
|
|
1135
1346
|
return;
|
|
1136
1347
|
}
|
|
1137
|
-
const
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1348
|
+
const isChecked = true;
|
|
1349
|
+
const value = getNodeId(node);
|
|
1350
|
+
reactData.selectRadioKey = value;
|
|
1351
|
+
emitRadioMode(value);
|
|
1352
|
+
dispatchEvent('radio-change', {
|
|
1353
|
+
node,
|
|
1354
|
+
value,
|
|
1355
|
+
checked: isChecked
|
|
1356
|
+
}, evnt);
|
|
1357
|
+
};
|
|
1358
|
+
const handleGlobalResizeEvent = () => {
|
|
1359
|
+
const el = refElem.value;
|
|
1360
|
+
if (!el || !el.clientWidth) {
|
|
1361
|
+
return;
|
|
1144
1362
|
}
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
|
|
1153
|
-
|
|
1154
|
-
|
|
1363
|
+
recalculate();
|
|
1364
|
+
};
|
|
1365
|
+
const treeMethods = {
|
|
1366
|
+
dispatchEvent,
|
|
1367
|
+
getNodeId,
|
|
1368
|
+
loadData(data) {
|
|
1369
|
+
return loadData(data || []);
|
|
1370
|
+
},
|
|
1371
|
+
reloadData(data) {
|
|
1372
|
+
return loadData(data || []);
|
|
1373
|
+
},
|
|
1374
|
+
clearCurrentNode() {
|
|
1375
|
+
reactData.currentNode = null;
|
|
1376
|
+
return (0, _vue.nextTick)();
|
|
1377
|
+
},
|
|
1378
|
+
getCurrentNodeId() {
|
|
1379
|
+
const {
|
|
1380
|
+
currentNode
|
|
1381
|
+
} = reactData;
|
|
1382
|
+
if (currentNode) {
|
|
1383
|
+
return getNodeId(currentNode);
|
|
1384
|
+
}
|
|
1385
|
+
return null;
|
|
1386
|
+
},
|
|
1387
|
+
getCurrentNode() {
|
|
1388
|
+
const {
|
|
1389
|
+
currentNode
|
|
1390
|
+
} = reactData;
|
|
1391
|
+
const {
|
|
1392
|
+
nodeMaps
|
|
1393
|
+
} = internalData;
|
|
1394
|
+
if (currentNode) {
|
|
1395
|
+
const nodeItem = nodeMaps[getNodeId(currentNode)];
|
|
1396
|
+
if (nodeItem) {
|
|
1397
|
+
return nodeItem.item;
|
|
1398
|
+
}
|
|
1399
|
+
}
|
|
1400
|
+
return null;
|
|
1401
|
+
},
|
|
1402
|
+
setCurrentNodeId(nodeKey) {
|
|
1403
|
+
const {
|
|
1404
|
+
nodeMaps
|
|
1405
|
+
} = internalData;
|
|
1406
|
+
const nodeItem = nodeMaps[nodeKey];
|
|
1407
|
+
reactData.currentNode = nodeItem ? nodeItem.item : null;
|
|
1408
|
+
return (0, _vue.nextTick)();
|
|
1409
|
+
},
|
|
1410
|
+
setCurrentNode(node) {
|
|
1411
|
+
reactData.currentNode = node;
|
|
1412
|
+
return (0, _vue.nextTick)();
|
|
1413
|
+
},
|
|
1414
|
+
clearRadioNode() {
|
|
1415
|
+
reactData.selectRadioKey = null;
|
|
1416
|
+
return (0, _vue.nextTick)();
|
|
1417
|
+
},
|
|
1418
|
+
getRadioNodeId() {
|
|
1419
|
+
return reactData.selectRadioKey || null;
|
|
1420
|
+
},
|
|
1421
|
+
getRadioNode() {
|
|
1422
|
+
const {
|
|
1423
|
+
selectRadioKey
|
|
1424
|
+
} = reactData;
|
|
1425
|
+
const {
|
|
1426
|
+
nodeMaps
|
|
1427
|
+
} = internalData;
|
|
1428
|
+
if (selectRadioKey) {
|
|
1429
|
+
const nodeItem = nodeMaps[selectRadioKey];
|
|
1430
|
+
if (nodeItem) {
|
|
1431
|
+
return nodeItem.item;
|
|
1432
|
+
}
|
|
1433
|
+
}
|
|
1434
|
+
return null;
|
|
1435
|
+
},
|
|
1436
|
+
setRadioNodeId(nodeKey) {
|
|
1437
|
+
reactData.selectRadioKey = nodeKey;
|
|
1438
|
+
return (0, _vue.nextTick)();
|
|
1439
|
+
},
|
|
1440
|
+
setRadioNode,
|
|
1441
|
+
setCheckboxNode,
|
|
1442
|
+
setCheckboxByNodeId,
|
|
1443
|
+
getCheckboxNodeIds() {
|
|
1444
|
+
const {
|
|
1445
|
+
selectCheckboxMaps
|
|
1446
|
+
} = internalData;
|
|
1447
|
+
return Object.keys(selectCheckboxMaps);
|
|
1448
|
+
},
|
|
1449
|
+
getCheckboxNodes() {
|
|
1450
|
+
const {
|
|
1451
|
+
nodeMaps,
|
|
1452
|
+
selectCheckboxMaps
|
|
1453
|
+
} = internalData;
|
|
1454
|
+
const list = [];
|
|
1455
|
+
_xeUtils.default.each(selectCheckboxMaps, (item, nodeid) => {
|
|
1456
|
+
const nodeItem = nodeMaps[nodeid];
|
|
1457
|
+
if (nodeItem) {
|
|
1458
|
+
list.push(nodeItem.item);
|
|
1459
|
+
}
|
|
1460
|
+
});
|
|
1461
|
+
return list;
|
|
1462
|
+
},
|
|
1463
|
+
clearCheckboxNode() {
|
|
1464
|
+
internalData.selectCheckboxMaps = {};
|
|
1465
|
+
reactData.updateCheckboxFlag++;
|
|
1466
|
+
return (0, _vue.nextTick)().then(() => {
|
|
1467
|
+
return {
|
|
1468
|
+
checkNodeKeys: []
|
|
1469
|
+
};
|
|
1470
|
+
});
|
|
1471
|
+
},
|
|
1472
|
+
setAllCheckboxNode(checked) {
|
|
1473
|
+
const {
|
|
1474
|
+
transform
|
|
1475
|
+
} = props;
|
|
1476
|
+
const selectMaps = {};
|
|
1477
|
+
const childrenField = computeChildrenField.value;
|
|
1478
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
1479
|
+
const checkKeys = [];
|
|
1480
|
+
if (checked) {
|
|
1481
|
+
_xeUtils.default.eachTree(internalData.afterTreeList, node => {
|
|
1482
|
+
const nodeid = getNodeId(node);
|
|
1483
|
+
checkKeys.push(nodeid);
|
|
1484
|
+
selectMaps[nodeid] = true;
|
|
1485
|
+
}, {
|
|
1486
|
+
children: transform ? mapChildrenField : childrenField
|
|
1487
|
+
});
|
|
1488
|
+
}
|
|
1489
|
+
internalData.selectCheckboxMaps = selectMaps;
|
|
1490
|
+
reactData.updateCheckboxFlag++;
|
|
1491
|
+
return (0, _vue.nextTick)().then(() => {
|
|
1492
|
+
return {
|
|
1493
|
+
checkNodeKeys: checkKeys
|
|
1494
|
+
};
|
|
1495
|
+
});
|
|
1496
|
+
},
|
|
1497
|
+
clearExpandNode() {
|
|
1498
|
+
return treeMethods.clearAllExpandNode();
|
|
1499
|
+
},
|
|
1500
|
+
clearAllExpandNode() {
|
|
1501
|
+
const {
|
|
1502
|
+
nodeMaps
|
|
1503
|
+
} = internalData;
|
|
1504
|
+
_xeUtils.default.each(nodeMaps, nodeItem => {
|
|
1505
|
+
nodeItem.treeLoaded = false;
|
|
1506
|
+
});
|
|
1507
|
+
internalData.treeExpandedMaps = {};
|
|
1508
|
+
reactData.updateExpandedFlag++;
|
|
1509
|
+
handleTreeToList();
|
|
1510
|
+
handleData();
|
|
1511
|
+
return recalculate();
|
|
1512
|
+
},
|
|
1513
|
+
setExpandByNodeId(nodeids, expanded) {
|
|
1514
|
+
const {
|
|
1515
|
+
treeExpandedMaps
|
|
1516
|
+
} = internalData;
|
|
1517
|
+
if (nodeids) {
|
|
1518
|
+
if (!_xeUtils.default.isArray(nodeids)) {
|
|
1519
|
+
nodeids = [nodeids];
|
|
1520
|
+
}
|
|
1521
|
+
nodeids.forEach(nodeid => {
|
|
1522
|
+
handleSetExpand(nodeid, expanded, treeExpandedMaps);
|
|
1523
|
+
});
|
|
1524
|
+
reactData.updateExpandedFlag++;
|
|
1525
|
+
}
|
|
1526
|
+
handleTreeToList();
|
|
1527
|
+
handleData();
|
|
1528
|
+
return recalculate();
|
|
1529
|
+
},
|
|
1530
|
+
getExpandNodeIds() {
|
|
1531
|
+
const {
|
|
1532
|
+
treeExpandedMaps
|
|
1533
|
+
} = internalData;
|
|
1534
|
+
return _xeUtils.default.keys(treeExpandedMaps);
|
|
1535
|
+
},
|
|
1536
|
+
getExpandNodes() {
|
|
1537
|
+
const {
|
|
1538
|
+
nodeMaps,
|
|
1539
|
+
treeExpandedMaps
|
|
1540
|
+
} = internalData;
|
|
1541
|
+
const list = [];
|
|
1542
|
+
_xeUtils.default.each(treeExpandedMaps, (item, nodeid) => {
|
|
1543
|
+
const nodeItem = nodeMaps[nodeid];
|
|
1544
|
+
if (nodeItem) {
|
|
1545
|
+
list.push(nodeItem.item);
|
|
1546
|
+
}
|
|
1547
|
+
});
|
|
1548
|
+
return list;
|
|
1549
|
+
},
|
|
1550
|
+
setExpandNode(nodes, expanded) {
|
|
1551
|
+
const {
|
|
1552
|
+
treeExpandedMaps
|
|
1553
|
+
} = internalData;
|
|
1554
|
+
if (nodes) {
|
|
1555
|
+
if (!_xeUtils.default.isArray(nodes)) {
|
|
1556
|
+
nodes = [nodes];
|
|
1557
|
+
}
|
|
1558
|
+
nodes.forEach(node => {
|
|
1559
|
+
const nodeid = getNodeId(node);
|
|
1560
|
+
handleSetExpand(nodeid, expanded, treeExpandedMaps);
|
|
1561
|
+
});
|
|
1562
|
+
reactData.updateExpandedFlag++;
|
|
1563
|
+
}
|
|
1564
|
+
handleTreeToList();
|
|
1565
|
+
handleData();
|
|
1566
|
+
return recalculate();
|
|
1567
|
+
},
|
|
1568
|
+
toggleExpandByNodeId(nodeids) {
|
|
1569
|
+
const {
|
|
1570
|
+
treeExpandedMaps
|
|
1571
|
+
} = internalData;
|
|
1572
|
+
if (nodeids) {
|
|
1573
|
+
if (!_xeUtils.default.isArray(nodeids)) {
|
|
1574
|
+
nodeids = [nodeids];
|
|
1575
|
+
}
|
|
1576
|
+
nodeids.forEach(nodeid => {
|
|
1577
|
+
handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
|
|
1578
|
+
});
|
|
1579
|
+
reactData.updateExpandedFlag++;
|
|
1580
|
+
}
|
|
1581
|
+
handleTreeToList();
|
|
1582
|
+
handleData();
|
|
1583
|
+
return recalculate();
|
|
1584
|
+
},
|
|
1585
|
+
toggleExpandNode(nodes) {
|
|
1586
|
+
const {
|
|
1587
|
+
treeExpandedMaps
|
|
1588
|
+
} = internalData;
|
|
1589
|
+
if (nodes) {
|
|
1590
|
+
if (!_xeUtils.default.isArray(nodes)) {
|
|
1591
|
+
nodes = [nodes];
|
|
1592
|
+
}
|
|
1593
|
+
nodes.forEach(node => {
|
|
1594
|
+
const nodeid = getNodeId(node);
|
|
1595
|
+
handleSetExpand(nodeid, !treeExpandedMaps[nodeid], treeExpandedMaps);
|
|
1596
|
+
});
|
|
1597
|
+
reactData.updateExpandedFlag++;
|
|
1598
|
+
}
|
|
1599
|
+
handleTreeToList();
|
|
1600
|
+
handleData();
|
|
1601
|
+
return recalculate();
|
|
1602
|
+
},
|
|
1603
|
+
setAllExpandNode(expanded) {
|
|
1604
|
+
const {
|
|
1605
|
+
transform
|
|
1606
|
+
} = props;
|
|
1607
|
+
const {
|
|
1608
|
+
treeExpandedMaps
|
|
1609
|
+
} = internalData;
|
|
1610
|
+
const childrenField = computeChildrenField.value;
|
|
1611
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
1612
|
+
if (expanded) {
|
|
1613
|
+
_xeUtils.default.eachTree(internalData.afterTreeList, node => {
|
|
1614
|
+
const childList = _xeUtils.default.get(node, childrenField);
|
|
1615
|
+
const hasChild = childList && childList.length;
|
|
1616
|
+
if (hasChild) {
|
|
1617
|
+
const nodeid = getNodeId(node);
|
|
1618
|
+
treeExpandedMaps[nodeid] = true;
|
|
1155
1619
|
}
|
|
1620
|
+
}, {
|
|
1621
|
+
children: transform ? mapChildrenField : childrenField
|
|
1622
|
+
});
|
|
1623
|
+
} else {
|
|
1624
|
+
internalData.treeExpandedMaps = {};
|
|
1625
|
+
}
|
|
1626
|
+
reactData.updateExpandedFlag++;
|
|
1627
|
+
handleTreeToList();
|
|
1628
|
+
handleData();
|
|
1629
|
+
return recalculate();
|
|
1630
|
+
},
|
|
1631
|
+
reloadExpandNode(node) {
|
|
1632
|
+
const {
|
|
1633
|
+
lazy
|
|
1634
|
+
} = props;
|
|
1635
|
+
if (lazy) {
|
|
1636
|
+
treeMethods.clearExpandLoaded(node);
|
|
1637
|
+
return handleAsyncTreeExpandChilds(node);
|
|
1638
|
+
}
|
|
1639
|
+
return recalculate();
|
|
1640
|
+
},
|
|
1641
|
+
clearExpandLoaded(node) {
|
|
1642
|
+
const {
|
|
1643
|
+
lazy
|
|
1644
|
+
} = props;
|
|
1645
|
+
const {
|
|
1646
|
+
nodeMaps
|
|
1647
|
+
} = internalData;
|
|
1648
|
+
if (lazy) {
|
|
1649
|
+
const nodeItem = nodeMaps[getNodeId(node)];
|
|
1650
|
+
if (nodeItem) {
|
|
1651
|
+
nodeItem.treeLoaded = false;
|
|
1156
1652
|
}
|
|
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
1653
|
}
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1654
|
+
return recalculate();
|
|
1655
|
+
},
|
|
1656
|
+
/**
|
|
1657
|
+
* 用于树结构,给行数据加载子节点
|
|
1658
|
+
*/
|
|
1659
|
+
loadChildrenNode(node, childRecords) {
|
|
1660
|
+
const {
|
|
1661
|
+
lazy,
|
|
1662
|
+
transform
|
|
1663
|
+
} = props;
|
|
1664
|
+
const {
|
|
1665
|
+
nodeMaps
|
|
1666
|
+
} = internalData;
|
|
1667
|
+
if (!lazy) {
|
|
1668
|
+
return Promise.resolve([]);
|
|
1189
1669
|
}
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
|
|
1193
|
-
|
|
1670
|
+
const childrenField = computeChildrenField.value;
|
|
1671
|
+
const mapChildrenField = computeMapChildrenField.value;
|
|
1672
|
+
const parentNodeItem = nodeMaps[getNodeId(node)];
|
|
1673
|
+
const parentLevel = parentNodeItem ? parentNodeItem.level : 0;
|
|
1674
|
+
const parentNodes = parentNodeItem ? parentNodeItem.nodes : [];
|
|
1675
|
+
return createNode(childRecords).then(nodeList => {
|
|
1676
|
+
_xeUtils.default.eachTree(nodeList, (childRow, index, items, path, parent, nodes) => {
|
|
1677
|
+
const itemNodeId = getNodeId(childRow);
|
|
1678
|
+
nodeMaps[itemNodeId] = {
|
|
1679
|
+
item: node,
|
|
1680
|
+
index: -1,
|
|
1681
|
+
items,
|
|
1682
|
+
parent: parent || parentNodeItem.item,
|
|
1683
|
+
nodes: parentNodes.concat(nodes),
|
|
1684
|
+
level: parentLevel + nodes.length,
|
|
1685
|
+
treeIndex: -1,
|
|
1686
|
+
lineCount: 0,
|
|
1687
|
+
treeLoaded: false
|
|
1688
|
+
};
|
|
1689
|
+
}, {
|
|
1690
|
+
children: childrenField
|
|
1691
|
+
});
|
|
1692
|
+
node[childrenField] = nodeList;
|
|
1693
|
+
if (transform) {
|
|
1694
|
+
node[mapChildrenField] = nodeList;
|
|
1695
|
+
}
|
|
1696
|
+
updateAfterDataIndex();
|
|
1697
|
+
return nodeList;
|
|
1194
1698
|
});
|
|
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
|
|
1699
|
+
},
|
|
1700
|
+
isExpandByNode,
|
|
1701
|
+
isCheckedByRadioNodeId,
|
|
1702
|
+
isCheckedByRadioNode,
|
|
1703
|
+
isCheckedByCheckboxNodeId,
|
|
1704
|
+
isIndeterminateByCheckboxNode,
|
|
1705
|
+
isCheckedByCheckboxNode,
|
|
1706
|
+
getCheckboxIndeterminateNodes() {
|
|
1707
|
+
const {
|
|
1708
|
+
nodeMaps,
|
|
1709
|
+
indeterminateRowMaps
|
|
1710
|
+
} = internalData;
|
|
1711
|
+
const list = [];
|
|
1712
|
+
_xeUtils.default.each(indeterminateRowMaps, (item, nodeid) => {
|
|
1713
|
+
const nodeItem = nodeMaps[nodeid];
|
|
1714
|
+
if (nodeItem) {
|
|
1715
|
+
list.push(nodeItem.item);
|
|
1716
|
+
}
|
|
1217
1717
|
});
|
|
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);
|
|
1718
|
+
return list;
|
|
1719
|
+
},
|
|
1720
|
+
recalculate,
|
|
1721
|
+
scrollTo,
|
|
1722
|
+
clearScroll
|
|
1231
1723
|
};
|
|
1232
1724
|
const treePrivateMethods = {};
|
|
1233
1725
|
Object.assign($xeTree, treeMethods, treePrivateMethods);
|
|
@@ -1242,12 +1734,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1242
1734
|
visibleMethod
|
|
1243
1735
|
} = radioOpts;
|
|
1244
1736
|
const isVisible = !visibleMethod || visibleMethod({
|
|
1737
|
+
$tree: $xeTree,
|
|
1245
1738
|
node
|
|
1246
1739
|
});
|
|
1247
1740
|
let isDisabled = !!checkMethod;
|
|
1248
1741
|
if (showRadio && showIcon && isVisible) {
|
|
1249
1742
|
if (checkMethod) {
|
|
1250
1743
|
isDisabled = !checkMethod({
|
|
1744
|
+
$tree: $xeTree,
|
|
1251
1745
|
node
|
|
1252
1746
|
});
|
|
1253
1747
|
}
|
|
@@ -1279,12 +1773,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1279
1773
|
} = checkboxOpts;
|
|
1280
1774
|
const isIndeterminate = isIndeterminateByCheckboxNodeid(nodeid);
|
|
1281
1775
|
const isVisible = !visibleMethod || visibleMethod({
|
|
1776
|
+
$tree: $xeTree,
|
|
1282
1777
|
node
|
|
1283
1778
|
});
|
|
1284
1779
|
let isDisabled = !!checkMethod;
|
|
1285
1780
|
if (showCheckbox && showIcon && isVisible) {
|
|
1286
1781
|
if (checkMethod) {
|
|
1287
1782
|
isDisabled = !checkMethod({
|
|
1783
|
+
$tree: $xeTree,
|
|
1288
1784
|
node
|
|
1289
1785
|
});
|
|
1290
1786
|
}
|
|
@@ -1305,7 +1801,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1305
1801
|
}
|
|
1306
1802
|
return (0, _ui.renderEmptyElement)($xeTree);
|
|
1307
1803
|
};
|
|
1308
|
-
const renderNode = node => {
|
|
1804
|
+
const renderNode = (node, nodeid) => {
|
|
1309
1805
|
const {
|
|
1310
1806
|
lazy,
|
|
1311
1807
|
showRadio,
|
|
@@ -1323,6 +1819,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1323
1819
|
updateExpandedFlag
|
|
1324
1820
|
} = reactData;
|
|
1325
1821
|
const {
|
|
1822
|
+
afterTreeList,
|
|
1326
1823
|
nodeMaps,
|
|
1327
1824
|
treeExpandedMaps,
|
|
1328
1825
|
treeExpandLazyLoadedMaps
|
|
@@ -1335,30 +1832,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1335
1832
|
const iconSlot = slots.icon;
|
|
1336
1833
|
const titleSlot = slots.title;
|
|
1337
1834
|
const extraSlot = slots.extra;
|
|
1338
|
-
const nodeid = getNodeId(node);
|
|
1339
1835
|
const isExpand = updateExpandedFlag && treeExpandedMaps[nodeid];
|
|
1340
1836
|
const nodeItem = nodeMaps[nodeid];
|
|
1341
1837
|
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
|
-
}
|
|
1838
|
+
const nLevel = nodeItem.level;
|
|
1358
1839
|
let isRadioChecked = false;
|
|
1359
1840
|
if (showRadio) {
|
|
1360
|
-
|
|
1361
|
-
isRadioChecked = nodeid == selectRadioKey;
|
|
1841
|
+
isRadioChecked = nodeid === String(selectRadioKey);
|
|
1362
1842
|
}
|
|
1363
1843
|
let isCheckboxChecked = false;
|
|
1364
1844
|
if (showCheckbox) {
|
|
@@ -1372,8 +1852,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1372
1852
|
hasLazyChilds = node[hasChildField];
|
|
1373
1853
|
isLazyLoaded = !!nodeItem.treeLoaded;
|
|
1374
1854
|
}
|
|
1855
|
+
const prevNode = nodeItem.items[nodeItem.treeIndex - 1];
|
|
1856
|
+
const nParams = {
|
|
1857
|
+
node,
|
|
1858
|
+
isExpand
|
|
1859
|
+
};
|
|
1375
1860
|
return (0, _vue.h)('div', {
|
|
1376
|
-
|
|
1861
|
+
key: nodeid,
|
|
1862
|
+
class: ['vxe-tree--node-wrapper', `node--level-${nLevel}`],
|
|
1377
1863
|
nodeid
|
|
1378
1864
|
}, [(0, _vue.h)('div', {
|
|
1379
1865
|
class: ['vxe-tree--node-item', {
|
|
@@ -1382,7 +1868,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1382
1868
|
'is-checkbox--checked': isCheckboxChecked
|
|
1383
1869
|
}],
|
|
1384
1870
|
style: {
|
|
1385
|
-
paddingLeft: `${(
|
|
1871
|
+
paddingLeft: `${(nLevel - 1) * (indent || 1)}px`
|
|
1386
1872
|
},
|
|
1387
1873
|
onClick(evnt) {
|
|
1388
1874
|
handleNodeClickEvent(evnt, node);
|
|
@@ -1390,41 +1876,57 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1390
1876
|
onDblclick(evnt) {
|
|
1391
1877
|
handleNodeDblclickEvent(evnt, node);
|
|
1392
1878
|
}
|
|
1393
|
-
}, [
|
|
1879
|
+
}, [showLine ? (0, _vue.h)('div', {
|
|
1880
|
+
class: 'vxe-tree--node-line-wrapper'
|
|
1881
|
+
}, [(0, _vue.h)('div', {
|
|
1882
|
+
class: 'vxe-tree--node-line',
|
|
1883
|
+
style: {
|
|
1884
|
+
height: `${getNodeId(afterTreeList[0]) === nodeid ? 1 : (0, _util.calcTreeLine)($xeTree, node, prevNode)}px`
|
|
1885
|
+
}
|
|
1886
|
+
})]) : (0, _ui.renderEmptyElement)($xeTree), (0, _vue.h)('div', {
|
|
1394
1887
|
class: 'vxe-tree--node-item-switcher'
|
|
1395
1888
|
}, showIcon && (lazy ? isLazyLoaded ? hasChild : hasLazyChilds : hasChild) ? [(0, _vue.h)('div', {
|
|
1396
1889
|
class: 'vxe-tree--node-item-icon',
|
|
1397
1890
|
onClick(evnt) {
|
|
1398
1891
|
toggleExpandEvent(evnt, node);
|
|
1399
1892
|
}
|
|
1400
|
-
}, iconSlot ? iconSlot({
|
|
1401
|
-
node,
|
|
1402
|
-
isExpand
|
|
1403
|
-
}) : [(0, _vue.h)('i', {
|
|
1893
|
+
}, iconSlot ? (0, _vn.getSlotVNs)(iconSlot(nParams)) : [(0, _vue.h)('i', {
|
|
1404
1894
|
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
|
-
})])] : [])
|
|
1895
|
+
})])] : []), renderRadio(node, nodeid, isRadioChecked), renderCheckbox(node, nodeid, isCheckboxChecked), (0, _vue.h)('div', {
|
|
1406
1896
|
class: 'vxe-tree--node-item-inner'
|
|
1407
1897
|
}, [(0, _vue.h)('div', {
|
|
1408
1898
|
class: 'vxe-tree--node-item-title'
|
|
1409
|
-
}, titleSlot ? (0, _vn.getSlotVNs)(titleSlot({
|
|
1410
|
-
node,
|
|
1411
|
-
isExpand
|
|
1412
|
-
})) : `${nodeValue}`), extraSlot ? (0, _vue.h)('div', {
|
|
1899
|
+
}, titleSlot ? (0, _vn.getSlotVNs)(titleSlot(nParams)) : `${nodeValue}`), extraSlot ? (0, _vue.h)('div', {
|
|
1413
1900
|
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)]);
|
|
1901
|
+
}, (0, _vn.getSlotVNs)(extraSlot(nParams))) : (0, _ui.renderEmptyElement)($xeTree)])])]);
|
|
1420
1902
|
};
|
|
1421
|
-
const
|
|
1903
|
+
const renderList = treeList => {
|
|
1422
1904
|
const {
|
|
1423
|
-
|
|
1424
|
-
} =
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
}
|
|
1905
|
+
transform
|
|
1906
|
+
} = props;
|
|
1907
|
+
const {
|
|
1908
|
+
treeExpandedMaps
|
|
1909
|
+
} = internalData;
|
|
1910
|
+
const childrenField = computeChildrenField.value;
|
|
1911
|
+
if (!treeList.length) {
|
|
1912
|
+
return [(0, _vue.h)('div', {
|
|
1913
|
+
class: 'vxe-tree--empty-placeholder'
|
|
1914
|
+
}, (0, _ui.getI18n)('vxe.tree.searchEmpty'))];
|
|
1915
|
+
}
|
|
1916
|
+
const nodeVNs = [];
|
|
1917
|
+
treeList.forEach(transform ? node => {
|
|
1918
|
+
const nodeid = getNodeId(node);
|
|
1919
|
+
nodeVNs.push(renderNode(node, nodeid));
|
|
1920
|
+
} : node => {
|
|
1921
|
+
const nodeid = getNodeId(node);
|
|
1922
|
+
nodeVNs.push(renderNode(node, nodeid));
|
|
1923
|
+
const childList = _xeUtils.default.get(node, childrenField);
|
|
1924
|
+
const hasChild = childList && childList.length;
|
|
1925
|
+
if (hasChild && treeExpandedMaps[nodeid]) {
|
|
1926
|
+
nodeVNs.push(...renderList(childList));
|
|
1927
|
+
}
|
|
1928
|
+
});
|
|
1929
|
+
return nodeVNs;
|
|
1428
1930
|
};
|
|
1429
1931
|
const renderVN = () => {
|
|
1430
1932
|
const {
|
|
@@ -1432,13 +1934,20 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1432
1934
|
trigger,
|
|
1433
1935
|
showLine
|
|
1434
1936
|
} = props;
|
|
1937
|
+
const {
|
|
1938
|
+
bodyHeight,
|
|
1939
|
+
topSpaceHeight,
|
|
1940
|
+
treeList
|
|
1941
|
+
} = reactData;
|
|
1435
1942
|
const vSize = computeSize.value;
|
|
1436
1943
|
const radioOpts = computeRadioOpts.value;
|
|
1437
1944
|
const checkboxOpts = computeCheckboxOpts.value;
|
|
1438
|
-
const treeStyle = computeTreeStyle.value;
|
|
1439
1945
|
const loadingOpts = computeLoadingOpts.value;
|
|
1440
1946
|
const isRowHover = computeIsRowHover.value;
|
|
1947
|
+
const treeStyle = computeTreeStyle.value;
|
|
1441
1948
|
const loadingSlot = slots.loading;
|
|
1949
|
+
const headerSlot = slots.header;
|
|
1950
|
+
const footerSlot = slots.footer;
|
|
1442
1951
|
return (0, _vue.h)('div', {
|
|
1443
1952
|
ref: refElem,
|
|
1444
1953
|
class: ['vxe-tree', {
|
|
@@ -1449,9 +1958,34 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1449
1958
|
'node--hover': isRowHover,
|
|
1450
1959
|
'node--trigger': trigger === 'node',
|
|
1451
1960
|
'is--loading': loading
|
|
1452
|
-
}]
|
|
1453
|
-
|
|
1454
|
-
|
|
1961
|
+
}]
|
|
1962
|
+
}, [headerSlot ? (0, _vue.h)('div', {
|
|
1963
|
+
ref: refHeaderWrapperElem,
|
|
1964
|
+
class: 'vxe-tree--header-wrapper'
|
|
1965
|
+
}, headerSlot({
|
|
1966
|
+
$tree: $xeTree
|
|
1967
|
+
})) : (0, _ui.renderEmptyElement)($xeTree), (0, _vue.h)('div', {
|
|
1968
|
+
ref: refVirtualWrapper,
|
|
1969
|
+
class: 'vxe-tree--node-list-wrapper',
|
|
1970
|
+
style: treeStyle,
|
|
1971
|
+
onScroll: scrollEvent
|
|
1972
|
+
}, [(0, _vue.h)('div', {
|
|
1973
|
+
class: 'vxe-select--y-space',
|
|
1974
|
+
style: {
|
|
1975
|
+
height: bodyHeight ? `${bodyHeight}px` : ''
|
|
1976
|
+
}
|
|
1977
|
+
}), (0, _vue.h)('div', {
|
|
1978
|
+
ref: refVirtualBody,
|
|
1979
|
+
class: 'vxe-tree--node-list-body',
|
|
1980
|
+
style: {
|
|
1981
|
+
transform: `translateY(${topSpaceHeight}px)`
|
|
1982
|
+
}
|
|
1983
|
+
}, renderList(treeList))]), footerSlot ? (0, _vue.h)('div', {
|
|
1984
|
+
ref: refFooterWrapperElem,
|
|
1985
|
+
class: 'vxe-tree--footer-wrapper'
|
|
1986
|
+
}, footerSlot({
|
|
1987
|
+
$tree: $xeTree
|
|
1988
|
+
})) : (0, _ui.renderEmptyElement)($xeTree),
|
|
1455
1989
|
/**
|
|
1456
1990
|
* 加载中
|
|
1457
1991
|
*/
|
|
@@ -1474,7 +2008,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1474
2008
|
dataFlag.value++;
|
|
1475
2009
|
});
|
|
1476
2010
|
(0, _vue.watch)(dataFlag, () => {
|
|
1477
|
-
|
|
2011
|
+
loadData(props.data || []);
|
|
1478
2012
|
});
|
|
1479
2013
|
(0, _vue.watch)(() => props.checkNodeKey, val => {
|
|
1480
2014
|
reactData.selectRadioKey = val;
|
|
@@ -1489,13 +2023,54 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
1489
2023
|
(0, _vue.watch)(checkboxFlag, () => {
|
|
1490
2024
|
updateCheckboxChecked(props.checkNodeKeys || []);
|
|
1491
2025
|
});
|
|
2026
|
+
(0, _vue.watch)(() => props.filterValue, () => {
|
|
2027
|
+
triggerSearchEvent(new Event('filter'));
|
|
2028
|
+
});
|
|
2029
|
+
const hFlag = (0, _vue.ref)(0);
|
|
2030
|
+
(0, _vue.watch)(() => props.height, () => {
|
|
2031
|
+
hFlag.value++;
|
|
2032
|
+
});
|
|
2033
|
+
(0, _vue.watch)(() => props.minHeight, () => {
|
|
2034
|
+
hFlag.value++;
|
|
2035
|
+
});
|
|
2036
|
+
(0, _vue.watch)(() => props.maxHeight, () => {
|
|
2037
|
+
hFlag.value++;
|
|
2038
|
+
});
|
|
2039
|
+
(0, _vue.watch)(hFlag, () => {
|
|
2040
|
+
recalculate();
|
|
2041
|
+
});
|
|
2042
|
+
(0, _vue.onMounted)(() => {
|
|
2043
|
+
if (props.autoResize) {
|
|
2044
|
+
const el = refElem.value;
|
|
2045
|
+
const parentEl = getParentElem();
|
|
2046
|
+
const resizeObserver = _ui.globalResize.create(() => {
|
|
2047
|
+
if (props.autoResize) {
|
|
2048
|
+
recalculate();
|
|
2049
|
+
}
|
|
2050
|
+
});
|
|
2051
|
+
if (el) {
|
|
2052
|
+
resizeObserver.observe(el);
|
|
2053
|
+
}
|
|
2054
|
+
if (parentEl) {
|
|
2055
|
+
resizeObserver.observe(parentEl);
|
|
2056
|
+
}
|
|
2057
|
+
internalData.resizeObserver = resizeObserver;
|
|
2058
|
+
}
|
|
2059
|
+
_ui.globalEvents.on($xeTree, 'resize', handleGlobalResizeEvent);
|
|
2060
|
+
});
|
|
1492
2061
|
(0, _vue.onUnmounted)(() => {
|
|
1493
|
-
|
|
2062
|
+
const {
|
|
2063
|
+
resizeObserver
|
|
2064
|
+
} = internalData;
|
|
2065
|
+
if (resizeObserver) {
|
|
2066
|
+
resizeObserver.disconnect();
|
|
2067
|
+
}
|
|
1494
2068
|
internalData.treeExpandedMaps = {};
|
|
1495
2069
|
internalData.indeterminateRowMaps = {};
|
|
1496
2070
|
internalData.nodeMaps = {};
|
|
2071
|
+
_ui.globalEvents.off($xeTree, 'resize');
|
|
1497
2072
|
});
|
|
1498
|
-
|
|
2073
|
+
loadData(props.data || []);
|
|
1499
2074
|
$xeTree.renderVN = renderVN;
|
|
1500
2075
|
return $xeTree;
|
|
1501
2076
|
},
|