diff --git a/packages/element3/src/components/Tree/src/TreeMain.vue b/packages/element3/src/components/Tree/src/TreeMain.vue index 95046ba90..7b12e29c3 100644 --- a/packages/element3/src/components/Tree/src/TreeMain.vue +++ b/packages/element3/src/components/Tree/src/TreeMain.vue @@ -40,7 +40,8 @@ export default { accordion: Boolean, autoExpandParent: { type: Boolean, default: true }, expandOnClickNode: { type: Boolean, default: true }, - expanded: { type: Array as PropType, default: () => [] } + expanded: { type: Array as PropType, default: () => [] }, + defaultExpandAll: Boolean }, emits: ['update:modelValue', 'update:checked', 'update:expanded'], setup(props, ctx) { @@ -64,6 +65,9 @@ export default { ctx.emit('update:checked', tree.getCheckedIds()) }) + if (props.defaultExpandAll) { + tree.expandAll() + } watchEffect( () => { tree.expandNodeByIds(props.expanded) diff --git a/packages/element3/src/components/Tree/src/entity/Tree.ts b/packages/element3/src/components/Tree/src/entity/Tree.ts index ec486cece..77da5a0ff 100644 --- a/packages/element3/src/components/Tree/src/entity/Tree.ts +++ b/packages/element3/src/components/Tree/src/entity/Tree.ts @@ -88,4 +88,10 @@ export class Tree { return ids } + + expandAll(v = true): void { + this.root.depthEach((currentNode) => { + currentNode.expand(v, false) + }) + } } diff --git a/packages/element3/src/components/Tree/tests/entity/Tree.spec.ts b/packages/element3/src/components/Tree/tests/entity/Tree.spec.ts index 4a3a9a74f..a8e621163 100644 --- a/packages/element3/src/components/Tree/tests/entity/Tree.spec.ts +++ b/packages/element3/src/components/Tree/tests/entity/Tree.spec.ts @@ -33,4 +33,42 @@ describe('Tree.ts', () => { rawNodes[0].childs[0].key ) }) + + it('expand all node', () => { + type RawNode = { key: number; text: string; childs?: RawNode[] } + const rawNodes: RawNode[] = [ + { + key: 1, + text: 'Node1', + childs: [ + { + key: 11, + text: 'Node011' + } + ] + }, + { + key: 2, + text: 'Node2', + childs: [ + { + key: 21, + text: 'Node021' + } + ] + } + ] + + const tree = new Tree(rawNodes, { + id: 'key', + label: 'text', + children: 'childs' + }) + + tree.expandAll(true) + + expect(tree.root.isExpanded).toBeTruthy() + expect(tree.root.findOne(1).isExpanded).toBeTruthy() + expect(tree.root.findOne(2).isExpanded).toBeTruthy() + }) }) diff --git a/packages/website/src/play/index.vue b/packages/website/src/play/index.vue index db237e85e..094658529 100644 --- a/packages/website/src/play/index.vue +++ b/packages/website/src/play/index.vue @@ -7,6 +7,7 @@ :accordion="false" :checkOnClickNode="false" :checkStrictly="false" + :defaultExpandAll="true" :defaultNodeKey="{ isDisabled: 'disabled' }"