Element树形控件整合带图标的下拉菜单(tree+dropdown+input)

作者:星海少年 时间:2023-07-02 16:45:35 

本文主要讲述:自定义树形控件<el-tree>

需求说明:

Element UI 官网提供的树形控件包含基础的、可选择的、自定义节点内容的、带节点过滤的以及可拖拽节点的树形结构 如下:

Element树形控件整合带图标的下拉菜单(tree+dropdown+input)

我想要的效果是支持搜索效果的树,将鼠标悬浮后显示添加修改图标,点击图标后弹出对应页面;并且在每个文件夹前添加自定义图标。

实现效果:

Element树形控件整合带图标的下拉菜单(tree+dropdown+input)

实现步骤:

1、使用插槽(slot)


<el-col :span="4" :xs="24">
  <!--目录搜索功能-->
 <div class="head-container">
   <el-input
     v-model="dirNameCn"
     placeholder="请输入目录名称"
     clearable
     size="small"
     prefix-icon="el-icon-search"
     style="margin-bottom: 20px"
   />
 </div>
 <!--树的展示-->
 <div class="head-container">
   <el-tree
     :data="dirTreeOptions"
     :props="defaultProps"
     :expand-on-click-node="false"
     :filter-node-method="filterNode"
     ref="tree"
     default-expand-all
     @node-click="handleNodeClick"
     icon-class="el-icon-folder-opened"
     node-key="id"
     :check-on-click-node="true"
   >
     <!--隐藏的新增等图标-->
     <span class="custom-tree-node" slot-scope="{ node, data }" @mouseenter="mouseenter(data)" @mouseleave="mouseleave(data)">
       <span>{{ node.label }}</span>
       <div>
         <i v-show="data.show" class="el-icon-circle-plus" style="color: #00afff" @click="addDial(node, data)"/>
         <!--隐藏的下拉选-->
         <el-dropdown trigger="click" placement="right" @command="(command) => {handleCommand(command)}">
           <i v-show="data.show" class="el-icon-more" style="color: #D3D3D3"/>
           <el-dropdown-menu slot="dropdown">
             <el-dropdown-item command="a">重命名</el-dropdown-item>
             <el-dropdown-item command="b">删除</el-dropdown-item>
           </el-dropdown-menu>
         </el-dropdown>
       </div>
     </span>
   </el-tree>
 </div>
</el-col>

2、组件对应的JS

注意:树的数据是从后端查询回来的,保存在dirTreeOptions里面


<script>
 export default {
   name: 'reqmdoctree',
   data() {
     return {
       // 左侧搜索框内容
       dirNameCn: '',
      // 目录树选项
       dirTreeOptions: undefined,
       defaultProps: {
         children: "children",
         label: "label"
       },
       // 树形菜单中有无子节点
       yesChild: undefined,
       // 控制左侧新增提示信息框
       show: 0,
       // 查询需求文档信息参数
       queryParams: {
         docNo: undefined, // 文档编号
         docNameEn: undefined, // 文档英文名称
         dirNo: undefined,// 目录编号
         current: 1, // 当前页数
         size: 20 // 每页显示多少条
       },
       treeId: undefined,
     }
   },
   methods: {
     /** 查询需求目录下拉树结构 */
     getTreeselect() {
       treeselect().then(response => {
         this.dirTreeOptions = response.data
       })
     },
     // 搜索值为过滤函数
     filterNode(value, data) {
       if (!value) return true
       return data.label.indexOf(value) !== -1
     },
     // 节点被点击时的回调函数
     handleNodeClick(data) {
       // console.log(data)
       this.treeId = data.id
       this.yesChild = data.children
       this.queryParams.dirNo = data.id
       this.getList()
     },
     // 树中三个点的事件
     handleCommand(command) {
       if (command == 'a') {
         selectReqNo(this.treeId).then(response => {
           this.uuid = response.msg
           getObjTree(response.msg).then(response => {
             this.form = response.data
             this.open = true
             this.title = '修改需求文档目录配置表'
           })
         })
       }
       if (command == 'b') {
         if (this.yesChild != undefined) {
           this.$notify.error({
             title: '警告',
             message: '此目录下还有别的文件夹'
           })
         } else {
           selectReqNo(this.treeId).then(response => {
             this.uuid = response.msg
             this.$confirm('是否确认删除ID为' + this.uuid + '的数据项?', '警告', {
               confirmButtonText: '确定',
               cancelButtonText: '取消',
               type: 'warning'
             }).then(()=>{
               return delObjTree(this.uuid)
             }).then(data => {
               this.getTreeselect()
               this.msgSuccess('删除成功')
             }).catch(function() {
             })
           })
         }
       }
     },
     // 左侧新建目录/文件
     addDial(node, data) {
       // console.log(node, '---', data)
       this.reset()
       this.form.dirParentId = data.id
       this.open = true
       this.title = '添加需求文档目录配置表'
     },
     // 左侧鼠标悬浮展示图标
     mouseenter(data){
       this.$set(data, 'show', true)
     },
     // 左侧鼠标离开不展示图标
     mouseleave(data){
       this.$set(data, 'show', false)
     },
     //打开新增资源弹窗 这里略......
   }
 }
</script>

说明:

参考文档:element UI、树形控件整合下拉选

来源:https://blog.csdn.net/weixin_45606067/article/details/118965331

标签:Element,树形控件,图标,下拉菜单
0
投稿

猜你喜欢

  • Python使用Pickle模块进行数据保存和读取的讲解

    2021-08-23 19:37:55
  • 深入透析样式表滤镜(下)

    2011-06-14 09:49:19
  • MySQL从库维护经验分享

    2024-01-26 22:31:18
  • Vue Element前端应用开发之常规Element界面组件

    2024-04-26 17:39:32
  • python字典多键值及重复键值的使用方法(详解)

    2023-03-18 14:23:15
  • pycharm实现print输出保存到txt文件

    2023-05-09 22:14:20
  • 在任意字符集下正常显示网页的方法一

    2023-10-12 05:20:46
  • python中id函数运行方式

    2021-12-27 14:03:50
  • 15款Python编辑器的优缺点,别再问我“选什么编辑器”啦

    2021-10-06 12:37:55
  • Python下利用BeautifulSoup解析HTML的实现

    2021-11-20 03:33:54
  • Python图片验证码降噪和8邻域降噪

    2023-09-16 10:05:49
  • 一篇文章带你了解python标准库--random模块

    2023-09-18 10:45:34
  • 详解Python当中的字符串和编码

    2021-05-26 07:07:39
  • python网络爬虫基于selenium爬取斗鱼直播信息

    2023-03-05 09:33:19
  • 使用keras实现densenet和Xception的模型融合

    2022-04-15 19:17:01
  • js表格拖选动态效果COOL而实用

    2007-08-05 12:07:00
  • python 实现简单的吃豆人游戏

    2023-12-02 22:00:59
  • Vue中使用eslint和editorconfig方式

    2024-06-05 10:03:46
  • Python函数默认参数常见问题及解决方案

    2023-04-03 15:42:42
  • 一百行python代码将图片转成字符画

    2023-05-06 05:49:15
  • asp之家 网络编程 m.aspxhome.com