Skip to content

Commit 7c0323a

Browse files
authored
Merge pull request #110 from zl0110/dev
fix: issue #109
2 parents daf9227 + 29e3d8d commit 7c0323a

File tree

3 files changed

+29
-15
lines changed

3 files changed

+29
-15
lines changed

src/components/Tree.vue

+15-3
Original file line numberDiff line numberDiff line change
@@ -220,10 +220,10 @@ export interface TreeProps {
220220
221221
/** 渲染节点数量,可见节点数大于此值且高度超过(容器可视高度能容纳节点数 + bufferNodeAmount)则不会渲染所有可见节点 */
222222
renderNodeAmount?: number,
223-
223+
224224
/** 根据节点最小高度计算数据总高度 */
225225
nodeMinHeight?: number,
226-
226+
227227
/** 当滚动到视野外的节点个数大于此值时刷新渲染节点 */
228228
bufferNodeAmount?: number,
229229
}
@@ -288,6 +288,7 @@ import { usePublicTreeAPI } from '../hooks/usePublicTreeAPI'
288288
import { FilterFunctionType } from '../store/tree-store'
289289
import { pickReadonly } from '../utils'
290290
import { useExpandAnimation } from '../hooks/useExpandAnimation'
291+
import {ArgumentsType} from "vitest";
291292
292293
const props = withDefaults(defineProps<TreeProps>(), DEFAULT_TREE_PROPS)
293294
@@ -677,6 +678,17 @@ const treeNodePropKeys = [
677678
678679
const treeNodeProps = reactive(pickReadonly(toRefs(props), ...treeNodePropKeys))
679680
681+
const setExpandExpose = (...args: ArgumentsType<typeof setExpand>) => {
682+
if (props.animation) {
683+
const node = getNode(args[0]);
684+
if(node) {
685+
expandAnimation.updateBeforeExpand(node)
686+
}
687+
}
688+
689+
setExpand(...args)
690+
}
691+
680692
defineExpose({
681693
setData,
682694
setChecked,
@@ -685,7 +697,7 @@ defineExpose({
685697
clearChecked,
686698
setSelected,
687699
clearSelected,
688-
setExpand,
700+
setExpand: setExpandExpose,
689701
setExpandKeys,
690702
setExpandAll,
691703
getCheckedNodes,

src/hooks/usePublicTreeAPI.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { ITreeNodeOptions } from "../store/tree-node"
55
import { FilterFunctionType } from "../store/tree-store"
66
import { TreeProps } from "../components/Tree.vue"
77

8-
type IUsePublicTreeAPIProps = Required<Pick<TreeProps,
8+
type IUsePublicTreeAPIProps = Required<Pick<TreeProps,
99
'selectable' |
1010
'checkable' |
1111
'separator' |
@@ -82,8 +82,8 @@ export const usePublicTreeAPI = (
8282
key: TreeNodeKeyType,
8383
value: boolean,
8484
expandParent: boolean = true
85-
): void {
86-
nonReactive.store.setExpand(key, value, expandParent)
85+
): Promise<void> {
86+
return nonReactive.store.setExpand(key, value, expandParent)
8787
}
8888
function setExpandKeys(keys: TreeNodeKeyType[], value: boolean): void {
8989
nonReactive.store.setExpandKeys(keys, value)

src/store/tree-store.ts

+11-9
Original file line numberDiff line numberDiff line change
@@ -366,13 +366,13 @@ export default class TreeStore extends TreeEventTarget {
366366
* @param triggerEvent 是否触发事件
367367
* @param triggerDataChange 是否触发 `data-change` 事件以通知外部刷新视图
368368
*/
369-
setExpand(
369+
async setExpand(
370370
key: TreeNodeKeyType,
371371
value: boolean,
372372
expandParent: boolean = false,
373373
triggerEvent: boolean = true,
374374
triggerDataChange: boolean = true
375-
): void {
375+
): Promise<void> {
376376
const node = this.mapData[key]
377377
if (!node || (!expandParent && node.isLeaf)) return
378378

@@ -386,7 +386,7 @@ export default class TreeStore extends TreeEventTarget {
386386
if (triggerDataChange) {
387387
this.emit('visible-data-change')
388388
}
389-
new Promise((resolve, reject) => {
389+
await new Promise((resolve, reject) => {
390390
const load = this.options.load as Function
391391
load(node, resolve, reject)
392392
})
@@ -446,7 +446,7 @@ export default class TreeStore extends TreeEventTarget {
446446
}
447447

448448
if (expandParent && node._parent && value) {
449-
this.setExpand(
449+
await this.setExpand(
450450
node._parent[this.options.keyField],
451451
value,
452452
expandParent,
@@ -461,14 +461,15 @@ export default class TreeStore extends TreeEventTarget {
461461
* @param keys 展开的节点 key 数组
462462
* @param value 是否展开
463463
*/
464-
setExpandKeys(
464+
async setExpandKeys(
465465
keys: TreeNodeKeyType[],
466466
value: boolean,
467467
triggerDataChange: boolean = true
468-
): void {
469-
keys.forEach(key => {
470-
this.setExpand(key, value, false, false, false)
471-
})
468+
): Promise<void> {
469+
470+
for (const key of keys) {
471+
await this.setExpand(key, value, false, false, false)
472+
}
472473

473474
if (triggerDataChange) {
474475
this.emit('visible-data-change')
@@ -1271,6 +1272,7 @@ export default class TreeStore extends TreeEventTarget {
12711272
* @param node 需要勾选的节点
12721273
*/
12731274
private checkParentNode(node: TreeNode): void {
1275+
if(!this.options.cascade) return
12741276
const length = node.children.length
12751277
if (!length) return
12761278
let hasChecked = false

0 commit comments

Comments
 (0)