vue2

el-tree添加虚线指示和图标

2022-10-31  本文已影响0人  扶得一人醉如苏沐晨
image.png

1、添加虚线代码

为el-tree添加这两个属性

class="tree-line"
:indent="0"

完整代码

<el-tree
    class="tree-line"
    :indent="0"
    :data="treeOption"
    :props="defaultProps"
    @node-click="getCurrentNode"
>

style

// 记得去掉scoped
<style lang="scss">
    .tree-line {
        .el-tree-node {
            position: relative;
            padding-left: 16px; // 缩进量
        }
        .el-tree-node__children {
            padding-left: 16px; // 缩进量
        }

        // 竖线
        .el-tree-node::before {
            content: '';
            height: 100%;
            width: 1px;
            position: absolute;
            left: -3px;
            top: -26px;
            border-width: 1px;
            border-left: 1px dashed #52627c;
        }
        // 当前层最后一个节点的竖线高度固定
        .el-tree-node:last-child::before {
            height: 38px; // 可以自己调节到合适数值
        }

        // 横线
        .el-tree-node::after {
            content: '';
            width: 24px;
            height: 20px;
            position: absolute;
            left: -3px;
            top: 12px;
            border-width: 1px;
            border-top: 1px dashed #52627c;
        }

        // 去掉最顶层的虚线,放最下面样式才不会被上面的覆盖了
        & > .el-tree-node::after {
            border-top: none;
        }
        & > .el-tree-node::before {
            border-left: none;
        }

        // 展开关闭的icon
        .el-tree-node__expand-icon {
            font-size: 16px;
            // 叶子节点(无子节点)
            &.is-leaf {
                color: transparent;
                // display: none; // 也可以去掉
            }
        }
    }
}

2、添加图标代码

图标可以是elementUi的icon,也可以直接引入iconfont的图标

                      <el-tree
                            class="tree-line"
                            :indent="0"
                            :data="treeOption"
                            :props="defaultProps"
                            @node-click="getCurrentNode"
                        >
                            <span
                                class="custom-tree-node"
                                slot-scope="{ node, data }"
                            >
                                <!-- parentId == 0说明为父节点,图标为 icon-weizhidingwei-->
                                <span
                                    v-if="data.parentId == 0"
                                    class="icon-weizhidingwei"
                                >
                                </span>
                                <!-- 否则为子节点 ,图标为 icon-weizhi-->
                                <span
                                    v-else
                                    class="icon-weizhi"
                                    style="margin-right: 3px"
                                ></span>
                                <span>{{ node.label }}</span>
                            </span>
                        </el-tree>

除此之外还可以在treeData中配置icon属性,属性值为icon的名称,渲染不同图标
html如下

               <span class="custom-tree-node" slot-scope="{ node, data }">
                    <span>
                        <i :class="data.icon">{{ node.label }}</i>
                    </span>              
                </span>

treeData如下

            treeData: [{
                    id: 1,
                    label: '一级 1',
                    icon:'el-icon-success',
                    children: [{
                        id: 4,
                        label: '二级 1-1',
                        children: [{
                            id: 9,
                            label: '三级 1-1-1',
                            icon: 'el-icon-info'
                        }, {
                            id: 10,
                            label: '三级 1-1-2'
                        }]
                    }]
                }, {
                    id: 2,
                    label: '一级 2',
                    children: [{
                        id: 5,
                        label: '二级 2-1',
                    }, {
                        id: 6,
                        label: '二级 2-2'
                    }]
                }, {
                    id: 3,
                    label: '一级 3',
                    children: [{
                        id: 7,
                        label: '二级 3-1'
                    }, {
                        id: 8,
                        label: '二级 3-2'
                    }]
                }]

图标样式微调

    .icon-weizhidingwei:before {
        margin-right: 10px;
        color: #409eff;
    }
    .icon-weizhi:before {
        margin-right: 10px;
        color: #409eff;
    }
上一篇下一篇

猜你喜欢

热点阅读