热factor: tree

pull/4577/head
tangjinzhou 2021-08-18 09:14:01 +08:00
parent 8c5a23f377
commit 106b2609be
6 changed files with 37 additions and 55 deletions

View File

@ -94,8 +94,7 @@ export default defineComponent({
name: 'NodeList', name: 'NodeList',
inheritAttrs: false, inheritAttrs: false,
props: nodeListProps, props: nodeListProps,
slots: ['checkable'], setup(props, { expose, attrs }) {
setup(props, { expose, attrs, slots }) {
// =============================== Ref ================================ // =============================== Ref ================================
const listRef = ref(null); const listRef = ref(null);
const indentMeasurerRef = ref(null); const indentMeasurerRef = ref(null);
@ -310,7 +309,6 @@ export default defineComponent({
onMousemove={() => { onMousemove={() => {
onActiveChange(null); onActiveChange(null);
}} }}
v-slots={slots}
/> />
); );
}} }}

View File

@ -34,7 +34,7 @@ import classNames from '../_util/classNames';
export default defineComponent({ export default defineComponent({
name: 'Tree', name: 'Tree',
inheritAttrs: false, inheritAttrs: false,
slots: ['checkable'], slots: ['checkable', 'title', 'icon'],
props: initDefaultProps(treeProps(), { props: initDefaultProps(treeProps(), {
prefixCls: 'vc-tree', prefixCls: 'vc-tree',
showLine: false, showLine: false,
@ -982,7 +982,7 @@ export default defineComponent({
tabindex = 0, tabindex = 0,
selectable, selectable,
showIcon, showIcon,
icon, icon = slots.icon,
switcherIcon, switcherIcon,
draggable, draggable,
checkable, checkable,
@ -994,7 +994,6 @@ export default defineComponent({
height, height,
itemHeight, itemHeight,
virtual, virtual,
titleRender,
dropIndicatorRender, dropIndicatorRender,
onContextmenu, onContextmenu,
onScroll, onScroll,
@ -1014,6 +1013,7 @@ export default defineComponent({
switcherIcon, switcherIcon,
draggable, draggable,
checkable, checkable,
customCheckable: slots.checkable,
checkStrictly, checkStrictly,
disabled, disabled,
keyEntities: keyEntities.value, keyEntities: keyEntities.value,
@ -1029,7 +1029,7 @@ export default defineComponent({
loadData, loadData,
filterTreeNode, filterTreeNode,
titleRender, titleRender: slots.title,
onNodeClick, onNodeClick,
onNodeDoubleClick, onNodeDoubleClick,
@ -1084,7 +1084,6 @@ export default defineComponent({
onScroll={onScroll} onScroll={onScroll}
{...treeNodeRequiredProps.value} {...treeNodeRequiredProps.value}
{...domProps} {...domProps}
v-slots={slots}
/> />
</div> </div>
</TreeContext> </TreeContext>

View File

@ -293,7 +293,7 @@ export default defineComponent({
)} )}
onClick={onCheck} onClick={onCheck}
> >
{slots.checkable?.()} {context.value.customCheckable?.()}
</span> </span>
); );
}; };

View File

@ -41,7 +41,8 @@ export interface TreeContextProps {
icon: IconType; icon: IconType;
switcherIcon: IconType; switcherIcon: IconType;
draggable: ((node: DataNode) => boolean) | boolean; draggable: ((node: DataNode) => boolean) | boolean;
checkable: boolean | VueNode; checkable: boolean;
customCheckable: () => any;
checkStrictly: boolean; checkStrictly: boolean;
disabled: boolean; disabled: boolean;
keyEntities: Record<Key, DataEntity>; keyEntities: Record<Key, DataEntity>;

View File

@ -132,7 +132,7 @@ export const treeProps = () => ({
defaultSelectedKeys: { type: Array as PropType<Key[]> }, defaultSelectedKeys: { type: Array as PropType<Key[]> },
selectedKeys: { type: Array as PropType<Key[]> }, selectedKeys: { type: Array as PropType<Key[]> },
allowDrop: { type: Function as PropType<AllowDrop> }, allowDrop: { type: Function as PropType<AllowDrop> },
titleRender: { type: Function as PropType<(node: DataNode) => any> }, // titleRender: { type: Function as PropType<(node: DataNode) => any> },
dropIndicatorRender: { dropIndicatorRender: {
type: Function as PropType< type: Function as PropType<
(props: { (props: {

View File

@ -2,60 +2,44 @@
<a-tree <a-tree
v-model:expandedKeys="expandedKeys" v-model:expandedKeys="expandedKeys"
v-model:selectedKeys="selectedKeys" v-model:selectedKeys="selectedKeys"
v-model:checkedKeys="checkedKeys" :load-data="onLoadData"
checkable
:tree-data="treeData" :tree-data="treeData"
> />
<template #title0010><span style="color: #1890ff">sss</span></template>
</a-tree>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent, ref, watch } from 'vue'; import { defineComponent, ref } from 'vue';
import { TreeDataItem } from 'ant-design-vue/es/tree/Tree'; import { TreeDataItem } from 'ant-design-vue/es/tree/Tree';
const treeData: TreeDataItem[] = [
{
title: 'parent 1',
key: '0-0',
children: [
{
title: 'parent 1-0',
key: '0-0-0',
disabled: true,
children: [
{ title: 'leaf', key: '0-0-0-0', disableCheckbox: true },
{ title: 'leaf', key: '0-0-0-1' },
],
},
{
title: 'parent 1-1',
key: '0-0-1',
children: [{ key: '0-0-1-0', slots: { title: 'title0010' } }],
},
],
},
];
export default defineComponent({ export default defineComponent({
setup() { setup() {
const expandedKeys = ref<string[]>(['0-0-0', '0-0-1']); const expandedKeys = ref<string[]>([]);
const selectedKeys = ref<string[]>(['0-0-0', '0-0-1']); const selectedKeys = ref<string[]>([]);
const checkedKeys = ref<string[]>(['0-0-0', '0-0-1']); const treeData = ref<TreeDataItem[]>([
watch(expandedKeys, () => { { title: 'Expand to load', key: '0' },
console.log('expandedKeys', expandedKeys); { title: 'Expand to load', key: '1' },
{ title: 'Tree Node', key: '2', isLeaf: true },
]);
const onLoadData = (treeNode: any) => {
return new Promise((resolve: (value?: unknown) => void) => {
if (treeNode.dataRef.children) {
resolve();
return;
}
setTimeout(() => {
treeNode.dataRef.children = [
{ title: 'Child Node', key: `${treeNode.eventKey}-0` },
{ title: 'Child Node', key: `${treeNode.eventKey}-1` },
];
treeData.value = [...treeData.value];
resolve();
}, 1000);
}); });
watch(selectedKeys, () => { };
console.log('selectedKeys', selectedKeys);
});
watch(checkedKeys, () => {
console.log('checkedKeys', checkedKeys);
});
return { return {
treeData,
expandedKeys, expandedKeys,
selectedKeys, selectedKeys,
checkedKeys, treeData,
onLoadData,
}; };
}, },
}); });