Skip to content

Tree 树形组件

规则

基础示例

js
const rule = {
    type:"tree",
    title:"权限",
    field:"rule",
    value:[],
    props:{
        data:[],
        props: {
            label: "title"
        }
    }
}

Props 配置示例

显示复选框

js
const rule = {
    type:"tree",
    title:"权限选择",
    field:"permissions",
    value:[],
    props:{
        data:[{
            id: 1,
            title: '用户管理',
            children: [
                { id: 11, title: '查看用户' },
                { id: 12, title: '编辑用户' },
            ]
        }],
        props: {
            label: "title"
        },
        checkable: true,
    }
}

默认展开所有节点

js
const rule = {
    type:"tree",
    title:"商品分类",
    field:"categories",
    value:[],
    props:{
        data:[{
            id: 1,
            title: '电子产品',
            children: [
                { id: 11, title: '手机' },
                { id: 12, title: '电脑' },
            ]
        }],
        props: {
            label: "title"
        },
        defaultExpandAll: true,
    }
}

懒加载

js
const rule = {
    type:"tree",
    title:"文件树",
    field:"files",
    value:[],
    props:{
        props: {
            label: "title"
        },
        loadData: function(node) {
            // 动态加载子节点
            return new Promise((resolve) => {
                if (node.id === '0-0') {
                    setTimeout(() => {
                        resolve([
                            { id: '0-0-0', title: '文件1.txt', isLeaf: true },
                            { id: '0-0-1', title: '文件2.txt', isLeaf: true },
                        ]);
                    }, 1000);
                } else {
                    resolve([]);
                }
            });
        },
    }
}

Events 事件示例

监听节点选择

js
const rule = {
    type:"tree",
    title:"权限选择",
    field:"permissions",
    value:[],
    props:{
        data:[{
            id: 1,
            title: '用户管理',
            children: [
                { id: 11, title: '查看用户' },
            ]
        }],
        props: {
            label: "title"
        },
        checkable: true,
    },
    on: {
        check: (checkedKeys, e) => {
            console.log('节点选中状态改变:', checkedKeys, e);
        },
        select: (selectedKeys, e) => {
            console.log('节点选择:', selectedKeys, e);
        },
        expand: (expandedKeys, e) => {
            console.log('节点展开:', expandedKeys, e);
        },
    },
}

选择后统计数量

js
const rule = [
    {
        type:"tree",
        title:"权限选择",
        field:"permissions",
        value:[],
        props:{
            data:[{
                id: 1,
                title: '用户管理',
                children: [
                    { id: 11, title: '查看用户' },
                    { id: 12, title: '编辑用户' },
                ]
            }],
            props: {
                label: "title"
            },
            checkable: true,
        },
        inject: true,
        on: {
            check: ($inject, checkedKeys) => {
                // 统计已选权限数量
                $inject.api.setValue('permissionCount', checkedKeys.length);
            },
        },
    },
    {
        type:"input-number",
        field:"permissionCount",
        title:"已选权限数",
        props: {
            disabled: true,
        },
    },
]

参考:Ant-design-vue_Tree

value :Array

Props

参数说明类型默认值
blockNode是否节点占据一行booleanfalse
treeDatatreeNodes 数据,如果设置则不需要手动构造 TreeNode 节点(key 在整个树范围内唯一)array<{key, title, children, [disabled, selectable]}>--
replaceFields替换 treeNode 中 title,key,children 字段为 treeData 中对应的字段object{children:'children', title:'title', key:'key' }
autoExpandParent是否自动展开父节点booleantrue
checkable节点前添加 Checkbox 复选框booleanfalse
checkedKeys(v-model)(受控)选中复选框的树节点(注意:父子节点有关联,如果传入父节点 key,则子节点自动选中;相应当子节点 key 都传入,父节点也自动选中。当设置checkablecheckStrictly,它是一个有checkedhalfChecked属性的对象,并且父子节点的选中与否不再关联string[] | number[] | {checked: string[] | number[], halfChecked: string[] | number[]}[]
checkStrictlycheckable 状态下节点选择完全受控(父子节点选中状态不再关联)booleanfalse
defaultCheckedKeys默认选中复选框的树节点string[] | number[][]
defaultExpandAll默认展开所有树节点booleanfalse
defaultExpandedKeys默认展开指定的树节点string[] | number[][]
defaultExpandParent默认展开父节点booltrue
defaultSelectedKeys默认选中的树节点string[] | number[][]
disabled将树禁用boolfalse
draggable设置节点可拖拽booleanfalse
expandedKeys(.sync)(受控)展开指定的树节点string[] | number[][]
filterTreeNode按需筛选树节点(高亮),返回 truefunction(node)-
loadData异步加载数据function(node)-
loadedKeys(受控)已经加载的节点,需要配合 loadData 使用string[] | number[][]
multiple支持点选多个节点(节点本身)booleanfalse
selectable是否可选中booleantrue
selectedKeys(.sync)(受控)设置选中的树节点string[] | number[]-
showIcon是否展示 TreeNode title 前的图标,没有默认样式,如设置为 true,需要自行定义图标相关样式booleanfalse
switcherIcon自定义树节点的展开/折叠图标slot-
showLine是否展示连接线booleanfalse

Props.props

参数说明类型默认值
class节点的 classstring-
style节点的 stylestring|object-
checkable当树为 checkable 时,设置独立节点是否展示 Checkboxboolean-
disableCheckbox禁掉 checkboxbooleanfalse
disabled禁掉响应booleanfalse
icon自定义图标。可接收组件,props 为当前节点 propsslot|slot-scope-
isLeaf设置为叶子节点(设置了loadData时有效)booleanfalse
key被树的 (default)ExpandedKeys / (default)CheckedKeys / (default)SelectedKeys 属性所用。注意:整个树范围内的所有节点的 key 值不能重复!string | number内部计算出的节点位置
selectable设置节点是否可被选中booleantrue
title标题string|slot|slot-scope'---'
slots使用 treeNodes 时,可以通过该属性配置支持 slot 的属性,如 slots: { title: 'XXX'}object-
scopedSlots使用 columns 时,可以通过该属性配置支持 slot-scope 的属性,如 scopedSlots: { title: 'XXX'}object-
on事件对象,仅在 treeNodes 使用方式中生效,如{click: () => {}}object'---'

data数据结构

js
const data = [{
    title: 'parent 1',
    expand: true,
    selected: false,
    id: 1,
    children: [
        {
            title: 'parent 1-1',
            expand: true,
            id:2,
            children: [
                {
                    title: 'leaf 1-1-1',
                    disabled: true,
                    id:11
                },
                {
                    title: 'leaf 1-1-2',
                    selected:true,
                    id:12
                }
            ]
        },
        {
            title: 'parent 1-2',
            expand: true,
            id:3,
            children: [
                {
                    title: 'leaf 1-2-1',
                    checked: true,
                    id:13,
                },
                {
                    title: 'leaf 1-2-1',
                    id:14,
                }
            ]
        }
    ]
}]

Events

事件名称说明回调参数
check点击复选框触发function(checkedKeys, e:{checked: bool, checkedNodes, node, event})
dragenddragend 触发时调用function({event, node})
dragenterdragenter 触发时调用function({event, node, expandedKeys})
dragleavedragleave 触发时调用function({event, node})
dragoverdragover 触发时调用function({event, node})
dragstart开始拖拽时调用function({event, node})
dropdrop 触发时调用function({event, node, dragNode, dragNodesKeys})
expand展开/收起节点时触发function(expandedKeys, {expanded: bool, node})
load节点加载完毕时触发function(loadedKeys, {event, node})
rightClick响应右键点击function({event, node})
select点击树节点触发function(selectedKeys, e:{selected: bool, selectedNodes, node, event})

FormCreate 是一个开源项目,基于 MIT 许可证发布,欢迎个人和企业用户免费使用