【vue3】实现el-tree组件,将不同层级的箭头修改成自定义图标

news2024/10/17 5:45:29

 效果图

<template>
  <div class="menu">
    <div class="menu_list">
      <el-tree
        ref="myTree"
        :highlight-current="true"
        :current-node-key="person.treeCheckedData"
        node-key="Id"
        :default-expanded-keys="person.treeExpandData"
        :expand-on-click-node="false"
        accordion
        :data="person.treeData"
        :props="{ class: customNodeClass }"
        @node-click="onNodeClick"
      >
        <template #default="{ node, data }">
          <div class="tree_title">{{ node.label }}{{ data.id }}</div>
        </template>
      </el-tree>
    </div>
  </div>
</template>
<script lang="ts" setup>
import { onMounted, reactive, ref } from 'vue';
const person = reactive({
  treeData: [
    {
      id: 1,
      label: '知识点1',
      isPenultimate: true,
      children: [
        {
          id: 11,
          label: '规则校验',
          children: [
            {
              id: 111,
              label: '字段',
            },
          ],
        },
      ],
    },
    {
      id: 2,
      label: '知识点2',
      isPenultimate: true,
      children: [
        {
          id: 22,
          label: 'Level two 2-1',
          children: [
            {
              id: 222,
              label: 'Level three 2-1-1',
            },
          ],
        },
        {
          id: 23,
          label: 'Level two 2-2',
          children: [
            {
              id: 232,
              label: 'Level three 2-2-1',
            },
          ],
        },
      ],
    },
    {
      id: 3,
      label: '知识点',
      isPenultimate: true,
      children: [
        {
          id: 33,
          label: 'Level two 3-1',
          children: [
            {
              id: 333,
              label: 'Level three 3-1-1',
            },
          ],
        },
        {
          id: 34,
          label: 'Level two 3-2',
          children: [
            {
              id: 343,
              label: 'Level three 3-2-1',
            },
          ],
        },
      ],
    },
  ],
  treeExpandData: [], // 默认展开项
  treeCheckedData: 0, // 默认选中项
});

onMounted(() => {
  load();
});
// 初始化
const myTree = ref();
const load = () => { console.log('')};

// 节点单击事件
const onNodeClick = () => {
  console.log('');
};
// 默认选中项样式
const customNodeClass = (data: any, node: Node) => {
  if (data.isPenultimate) {
    return 'is-penultimate';
  }
  return null;
};
</script>
<style lang="scss" scoped>
.menu {
  .menu_list {
    :deep(.el-tree-node__content) {
      height: inherit;
      padding: 5px 0;
      align-items: center;
      &:hover {
        background-color: transparent;
        color: #2080f7;
      }
      .tree_title {
        margin-left: 5px;
        width: 90%;
        display: -webkit-box;
        -webkit-line-clamp: 1;
        overflow: hidden;
        -webkit-box-orient: vertical;
        text-overflow: ellipsis;
      }
      // 设置本身箭头为隐藏状态
      .el-tree-node__expand-icon {
        width: 20px;
        padding: 0;
        margin: 5px 0;
        svg {
          display: none;
          width: 0;
        }
      }
      // 禁止图标旋转
      .el-tree-node__expand-icon.expanded {
        -webkit-transform: rotate(0deg);
        transform: rotate(0deg);
      }
    }
    :deep(.is-penultimate > .el-tree-node__content) {
      font-weight: bold;
    }
    // 自定义节点高亮样式
    :deep(.el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content) {
      background-color: transparent;
      color: #2080f7;
    }
    // 文字选中状态
    :deep(.el-tree-node:focus) {
      > .el-tree-node__content {
        background-color: transparent;
        color: #2080f7;
      }
    }
    // 第一层
    :deep(.el-tree-node) {
      white-space: inherit;
      // 关闭状态
      .el-tree-node__expand-icon::before {
        background: url('@/assets/images/pageImg/01.png') no-repeat;
        content: '';
        display: block;
        width: 18px;
        height: 18px;
        background-size: 100% 100%;
      }
      // 展开状态
      .el-tree-node__expand-icon.expanded::before {
        background: url('@/assets/images/pageImg/02.png') no-repeat;
        content: '';
        display: block;
        width: 18px;
        height: 18px;
        background-size: 100% 100%;
      }
      // 没有子节点
      .el-tree-node__expand-icon.is-leaf::before {
        background: url('@/assets/images/pageImg/03.png') no-repeat;
        content: '';
        display: block;
        width: 18px;
        height: 18px;
        background-size: 100% 100%;
      }
      // 第二层
      & > .el-tree-node__children {
        // 关闭状态
        .el-tree-node__expand-icon::before {
          background: url('@/assets/images/pageImg/04.png') no-repeat;
          content: '';
          display: block;
          width: 16px;
          height: 16px;
          background-size: 100% 100%;
        }
        // 展开状态
        .el-tree-node__expand-icon.expanded::before {
          background: url('@/assets/images/pageImg/04.png') no-repeat;
          content: '';
          display: block;
          width: 16px;
          height: 16px;
          background-size: 100% 100%;
        }
        // 没有子节点
        .el-tree-node__expand-icon.is-leaf::before {
          background: url('@/assets/images/pageImg/05.png') no-repeat;
          content: '';
          display: block;
          width: 16px;
          height: 16px;
          background-size: 100% 100%;
        }
      }
      // 第三层
      // & > .el-tree-node > .el-tree-node__children {
      //   // 关闭状态
      //   .el-tree-node__expand-icon::before {
      //     background: url('../../../assets/img/new/jia_yuan.png') no-repeat;
      //     content: '';
      //     display: block;
      //     width: 16px;
      //     height: 16px;
      //     background-size: 100% 100%;
      //   }
      //   // 展开状态
      //   .el-tree-node__expand-icon.expanded::before {
      //     background: url('../../../assets/img/new/jian_yuan.png') no-repeat;
      //     content: '';
      //     display: block;
      //     width: 16px;
      //     height: 16px;
      //     background-size: 100% 100%;
      //   }
      //   // 没有子节点
      //   .el-tree-node__expand-icon.is-leaf::before {
      //     background: url('../../../assets/img/new/jian_yuan.png') no-repeat;
      //     content: '';
      //     display: block;
      //     width: 16px;
      //     height: 16px;
      //     background-size: 100% 100%;
      //   }
      // }
    }
  }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2209702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AAOS】Android Automotive 11模拟器源码下载及编译

源码下载 repo init -u https://android.googlesource.com/platform/manifest -b android-11.0.0_r48 repo sync -c --no-tags --no-clone-bundle 源码编译 source build/envsetup.sh lunch car_x86_64-userdebug make -j12 运行效果 emualtor Home Map All apps Setting…

spring:springboot3使用Spring Security

介绍 Spring Security 是一个强大且高度可定制的安全框架&#xff0c;专为保护基于 Java 的应用程序而设计&#xff0c;尤其是 Spring 应用。它提供了一系列功能&#xff0c;帮助开发者实现身份验证&#xff08;Authentication&#xff09;、授权&#xff08;Authorization&am…

【C++】map和set的介绍以及用法

个人主页 文章目录 ⭐一、系列式容器和关联式容器&#x1f680;二、set的使用1. set类的介绍2. set的构造3. set的迭代器4. set的常用函数 &#x1f3a1;三、multiset&#x1f384;四、map类的使用1. map类的介绍2. map的构造3. map的迭代器4. map的operator[]5. map的常用函数…

Go语言中的控制结构(四)

Go语言中的控制结构详解 控制结构是编程语言中控制代码执行流程的核心部分&#xff0c;Go语言通过if、for、switch等常见的控制结构&#xff0c;以及独有的defer、panic、recover机制&#xff0c;提供了强大且简洁的控制流管理。本文将详细讲解Go语言中的控制结构&#xff0c;包…

第十四章 RabbitMQ延迟消息之延迟队列

目录 一、引言 二、死信队列 三、核心代码实现 四、运行效果 五、总结 一、引言 什么是延迟消息&#xff1f; 发送者发送消息时指定一个时间&#xff0c;消费者不会立刻收到消息&#xff0c;而是在指定时间后收到消息。 什么是延迟任务&#xff1f; 设置在一定时间之后才…

InfluxDB持久层封装

InfluxDB持久层封装 了解如何使用spring-boot来操作InfluxDB数据库&#xff0c;首先我们来看下整个的系统结构图例&#xff1a; 对比下mybatis中的执行流程&#xff1a; 1_自动装配 首先&#xff0c;我们来看下第一步自动装配&#xff1a;依赖spring-boot自动装配出InfluxDB对…

第十五届蓝桥杯C/C++学B组(解)

1.握手问题 解题思路一 数学方法 50个人互相握手 &#xff08;491&#xff09;*49/2 &#xff0c;减去7个人没有互相握手&#xff08;61&#xff09;*6/2 答案&#xff1a;1024 解题思路二 package 十五届;public class Min {public static void main(String[] args) {i…

实时从TDengine数据库采集数据到Kafka Topic

实时从TDengine数据库采集数据到Kafka Topic 一、认识TDengine二、TDengine Kafka Connector三、什么是 Kafka Connect&#xff1f;四、前置条件五、安装 TDengine Connector 插件六、启动 Kafka七、验证 kafka Connect 是否启动成功八、TDengine Source Connector 的使用九、添…

【更新】A股上市公司企业网络安全治理数据集(2007-2023年)

一、测算方式&#xff1a;参考C刊《金融评论》王辉&#xff08;2024&#xff09;老师的做法&#xff0c;安全治理种子词的选取主要依托于《中华人民共和国网络安全法》、《中华人民共和国数据安全法》、《关键信息基础设施安全保护条例》等法律法规文件与《网络安全审查办法》、…

蓝桥杯刷题--幸运数字

幸运数字 题目: 解析: 我们由题目可以知道,某个进制的哈沙德数就是该数和各个位的和取整为0.然后一个幸运数字就是满足所有进制的哈沙德数之和.然后具体就是分为以下几个步骤 1. 我们先写一个方法,里面主要是用来判断,这个数在该进制下是否是哈沙德数 2. 我们在main方法里面调用…

量化之一:均值回归策略

文章目录 均值回归策略理论基础数学公式 关键指标简单移动平均线&#xff08;SMA&#xff09;标准差Z-Score 交易信号实际应用优缺点分析优点缺点 结论 实践backtrader参数&#xff1a;正常情况&#xff1a;异常情况&#xff1a; 均值回归策略 均值回归&#xff08;Mean Rever…

华为公有云实战

1.申请一台ECS云主机&#xff0c;并且可以提供web服务 1.1访问云主机-华为特有技术novnc&#xff0c;KVM中提到vnc技术&#xff0c;novnc是不用安装vnc客户端用浏览器html语言实现。 1.2cloudshell 1.3小工具 ssh 弹性ip 1.4.安装httpd服务 建立索引文件 浏览器上输入弹性ip可…

网络资源模板--Android Studio 实现简易记事本App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--基于Android studio 实现的简易记事本App 二、项目测试环境 三、项目详情 首页 创建一个空的笔记本列表 mNotebookList。使用该列表和指定的布局资源 item_notebook 创建…

前端开发笔记--html 黑马程序员1

文章目录 前端开发工具--VsCode前端开发基础语法VsCode优秀插件Chinese --中文插件Auto Rename Tag --自动重命名插件open in browserOpen in Default BrowserOpen in Other Browser Live Server -- 实时预览 前端开发工具–VsCode 轻量级与快速启动 快速加载&#xff1a;VSCo…

WordPress添加meta标签做seo优化

一、使用function.php文件添加钩子函数添加 方法1、使用is_page()判断不同页面的page_id进行辨别添加不同页面keyword和description &#xff08;1&#xff09;通过页面前台源码查看对应页面的id &#xff08;2&#xff09;或者通过wordpress后台&#xff0c;点击页面列表&…

云计算ftp 服务器实验

创建VLAN 10 划分端口 创建VLAN 10 的地址 10.1.1.1 服务器的地址是 10.1.1.2 这是服务上的配置 服务器上选择ftp 启动 &#xff0c;文件目录选择一下 在 交换机上 ftp 10.1.1.2 服务器的地址 把刚才创建的shenyq txt 文件下载下到本地交换机 我们能看到交换…

有关安科瑞Acrel-1000DP分布式光伏监控系统在某公司分布式光伏发电项目中的应用探讨-安科瑞 蒋静

摘要&#xff1a;分布式光伏作为可再生能源的一种重要形式&#xff0c;能够根据不同场地的实际情况进行定制&#xff0c;尽可能地利用可用空间&#xff0c;减少对传统化石燃料的依赖&#xff0c;也能降低温室气体排放、改善环境质量。在政策支持和市场需求的双重推动下&#xf…

电脑查不到IP地址是什么原因?怎么解决

在日常使用电脑的过程中&#xff0c;有时会遇到无法查询到电脑IP地址的情况&#xff0c;这可能会影响到网络的正常使用。本文将探讨电脑查不到IP地址的可能原因&#xff0c;并提供相应的解决方案。 一、原因分析 ‌网络连接问题‌&#xff1a;首先&#xff0c;网络连接不稳定或…

MySQL(B站CodeWithMosh)——2024.10.11(14)

ZZZZZZ目的ZZZZZZ代码ZZZZZZ重点ZZZZZZ操作&#xff08;非代码&#xff0c;需要自己手动&#xff09; 8- CASE运算符The CASE Operator_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1UE41147KC?p62&vd_sourceeaeec77dfceb13d96cce76cc299fdd08 在sql_store中&am…

智能网联汽车安全隐患,如何化解?

0. 智能网联汽车安全问题如何才能解决&#xff1f;1. TARA 威胁分析与风险评估平台2. CSTP 智能网联汽车网络安全测试平台3. 智能网联汽车安全解决方案4. 车联网测试认证与培训解决方案5. 车联网网络安全实验室建设方案 0. 智能网联汽车安全问题如何才能解决&#xff1f; 智能…