Skip to content

Commit de343fa

Browse files
committed
expand ok
1 parent 9ac0863 commit de343fa

File tree

6 files changed

+77
-14
lines changed

6 files changed

+77
-14
lines changed

src/components/VirtualTree/index.tsx

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,14 @@ export default defineComponent({
2121
type: Array as PropType<TreeNodeOptions[]>,
2222
default: () => []
2323
},
24+
defaultExpandedKeys: {
25+
type: Array as PropType<NodeKey[]>,
26+
default: () => []
27+
},
28+
defaultCheckedKeys: {
29+
type: Array as PropType<NodeKey[]>,
30+
default: () => []
31+
},
2432
showCheckbox: {
2533
type: Boolean,
2634
default: false
@@ -42,12 +50,11 @@ export default defineComponent({
4250
},
4351
emits: ['selectChange', 'checkChange', 'toggleExpand'],
4452
setup: function (props, {emit, slots, expose}) {
45-
4653
const loading = shallowRef(false);
4754
const flatList = ref<Required<TreeNodeOptions>[]>([]);
4855
watch(() => props.source, newVal => {
49-
flatList.value = flattenTree(newVal);
50-
// console.log(selectedNodes.value);
56+
flatList.value = flattenTree(newVal, props.defaultCheckedKeys, props.defaultExpandedKeys);
57+
console.log('expandedKeys>>', expandedKeys.value.selected);
5158
}, {immediate: true});
5259
const selectChange = (node: Required<TreeNodeOptions>) => {
5360
const preSelectedNode = selectedNodes.value.selected[0];
@@ -82,6 +89,12 @@ export default defineComponent({
8289
item.children = item.children || [];
8390
item.hasChildren = item.hasChildren || false;
8491
item.parentKey = node.nodeKey || null;
92+
if (props.defaultCheckedKeys.includes(item.nodeKey)) {
93+
checkedNodes.value.select(item as Required<TreeNodeOptions>);
94+
}
95+
if (props.defaultExpandedKeys.includes(item.nodeKey)) {
96+
expandedKeys.value.select(item.nodeKey);
97+
}
8598
return item;
8699
});
87100
const targetIndex = flatList.value.findIndex(item => item.nodeKey === node.nodeKey);

src/components/VirtualTree/node.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {computed, defineComponent, PropType, Slot} from "vue";
1+
import {computed, defineComponent, PropType, Slot, watch} from "vue";
22
import {NodeKey, TreeNodeOptions} from "./types";
33
import VirtualCheckbox from '../VirtualCheckbox';
44
import RenderNode from './render';
@@ -40,10 +40,11 @@ export default defineComponent({
4040
},
4141
emits: ['selectChange', 'toggleExpand', 'checkChange'],
4242
setup(props, { emit, expose }) {
43-
/*watch(() => props.selectedNodes, newVal => {
44-
console.log('wat selection', newVal?.selected);
43+
/*watch(() => props.checkedNodes, newVal => {
44+
console.log('wat checkedNodes', newVal.selected);
4545
}, {
46-
deep: true
46+
deep: true,
47+
immediate: true
4748
});*/
4849
const halfChecked = computed(() => {
4950
let result = false;

src/components/VirtualTree/uses.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ const checkedNodes = ref(new SelectionModel<Required<TreeNodeOptions>>(true));
77
const expandedKeys = ref(new SelectionModel<NodeKey>(true));
88
const disabledKeys = ref(new SelectionModel<NodeKey>(true));
99

10-
function flattenTree(source: TreeNodeOptions[]): Required<TreeNodeOptions>[] {
10+
function flattenTree(
11+
source: TreeNodeOptions[],
12+
defaultCheckedKeys: NodeKey[],
13+
defaultExpandedKeys: NodeKey[],
14+
): Required<TreeNodeOptions>[] {
1115
const result: Required<TreeNodeOptions>[] = [];
1216
function recursion (list: TreeNodeOptions[], level = 0, parent: Required<TreeNodeOptions> | null = null) {
1317
return list.map(item => {
@@ -20,7 +24,11 @@ function flattenTree(source: TreeNodeOptions[]): Required<TreeNodeOptions>[] {
2024
children: item.children || []
2125
};
2226
result.push(flatNode);
23-
if (expandedKeys.value.isSelected(item.nodeKey) && item.children?.length) {
27+
if (defaultCheckedKeys.includes(item.nodeKey)) {
28+
checkedNodes.value.select(flatNode);
29+
}
30+
if (defaultExpandedKeys.includes(item.nodeKey) && item.children?.length) {
31+
expandedKeys.value.select(item.nodeKey);
2432
flatNode.children = recursion(item.children, level + 1, flatNode);
2533
}
2634
return flatNode;

src/doc/BaseDemo.vue

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<div class="demo">
33
<a-button @click="selectedNode">获取选中节点</a-button>
4-
<vir-tree ref="virTree" :source="list" />
4+
<vir-tree ref="virTree" :source="list" :default-expanded-keys="defaultExpandedKeys" />
55
</div>
66
</template>
77

@@ -37,6 +37,7 @@
3737
setup() {
3838
const list = ref<TreeNodeOptions[]>([]);
3939
const virTree = ref<TreeInstance | null>(null);
40+
const defaultExpandedKeys = ['0-0', '0-1', '0-1-0'];
4041
onMounted(() => {
4142
list.value = recursion();
4243
});
@@ -46,7 +47,8 @@
4647
return {
4748
list,
4849
virTree,
49-
selectedNode
50+
selectedNode,
51+
defaultExpandedKeys
5052
}
5153
}
5254
});

src/doc/CheckboxDemo.vue

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
<section>
44
<h5>默认父子节点联动</h5>
55
<a-button @click="halfNodes">获取半选节点</a-button>
6-
<vir-tree ref="virTreeOne" show-checkbox :source="list" />
6+
<vir-tree ref="virTreeOne" show-checkbox :source="list" :default-checked-keys="defaultCheckedKeys" />
77
</section>
88
<section>
99
<h5>父子节点不联动</h5>
1010
<a-button @click="checkedNodes">获取勾选节点</a-button>
11-
<vir-tree ref="virTreeTwo" show-checkbox check-strictly :source="list" />
11+
<vir-tree ref="virTreeTwo" show-checkbox check-strictly :source="list" :default-checked-keys="defaultCheckedKeys" />
1212
</section>
1313
</div>
1414
</template>
@@ -46,6 +46,7 @@
4646
const list = ref<TreeNodeOptions[]>([]);
4747
const virTreeOne = ref<TreeInstance | null>(null);
4848
const virTreeTwo = ref<TreeInstance | null>(null);
49+
const defaultCheckedKeys = ['0-0-0', '0-2'];
4950
onMounted(() => {
5051
list.value = recursion();
5152
});
@@ -60,7 +61,8 @@
6061
virTreeOne,
6162
virTreeTwo,
6263
halfNodes,
63-
checkedNodes
64+
checkedNodes,
65+
defaultCheckedKeys
6466
}
6567
}
6668
});

src/doc/index.vue

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,29 @@
3838
<section class="sec mid">
3939
<a-typography-title :level="3">代码演示</a-typography-title>
4040
<a-row :gutter="16" class="demo-boxes">
41+
<a-col :span="12">
42+
<demo-box
43+
id="base-demo"
44+
title="基本用法"
45+
desc="展开、选中、禁用的基本功能aa"
46+
code-type="base">
47+
<base-demo />
48+
</demo-box>
49+
<demo-box
50+
id="async-dada-demo"
51+
title="异步加载数据"
52+
desc="点击展开节点,动态加载数据。"
53+
code-type="asyncData">
54+
<async-data-demo />
55+
</demo-box>
56+
<demo-box
57+
id="custom-icon-demo"
58+
title="自定义图标"
59+
desc="自定义展开、收起图标"
60+
code-type="customIcon">
61+
<custom-icon-demo />
62+
</demo-box>
63+
</a-col>
4164
<a-col :span="12">
4265
<demo-box
4366
id="checkbox-demo"
@@ -46,6 +69,20 @@
4669
code-type="checkbox">
4770
<checkbox-demo />
4871
</demo-box>
72+
<demo-box
73+
id="custom-node-demo"
74+
title="自定义渲染节点"
75+
desc="绑定render函数自定义节点,参数data为当前node数据。注意:如果改变了默认的高度(size), 需要传入size属性"
76+
code-type="customNode">
77+
<custom-node-demo />
78+
</demo-box>
79+
<demo-box
80+
id="search-node-demo"
81+
title="搜索树"
82+
desc="虽然组件内部没有直接提供,但可以配合render自行实现"
83+
code-type="searchNode">
84+
<search-node-demo />
85+
</demo-box>
4986
</a-col>
5087
</a-row>
5188
</section>

0 commit comments

Comments
 (0)