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

目录
  • 需求说明:
  • 实现步骤:

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

需求说明:

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

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

实现效果:

实现步骤:

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、树形控件整合下拉选

到此这篇关于Element树形控件整合带图标的下拉菜单(tree+dropdown+input)的文章就介绍到这了,更多相关Element带图标的下拉菜单内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)

    这篇博客主要介绍树形控件的两个小小的功能: 下拉菜单 输入过滤框 以CSS样式为主,也会涉及到Vue组件和element组件的使用. 对于没有层级的数据,我们可以使用表格或卡片来展示.要展示或建立层级关系,就一定会用到树形组件了. 使用Vue + Element UI,构建出最基本的树如下图所示: 现在我们就要在这个基础上进行改造,使页面更加符合我们的交互场景. 下拉菜单 将下拉菜单嵌到树节点中,使操作更加简便.紧凑. 效果演示 效果如图: 图示1:悬浮在树节点状态 图示2:点击三个点图标状态

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

    目录 需求说明: 实现步骤: 本文主要讲述:自定义树形控件<el-tree> 需求说明: Element UI 官网提供的树形控件包含基础的.可选择的.自定义节点内容的.带节点过滤的以及可拖拽节点的树形结构 如下: 我想要的效果是支持搜索效果的树,将鼠标悬浮后显示添加修改图标,点击图标后弹出对应页面:并且在每个文件夹前添加自定义图标. 实现效果: 实现步骤: 1.使用插槽(slot) <el-col :span="4" :xs="24"> &

  • Vue Element-ui实现树形控件节点添加图标详解

    目录 1.效果图 2.树形表格绑定数据加标签 3.所有代码 其他实现 总结 1.效果图 2.树形表格绑定数据加标签 想要在树形控件的树节点加上图片或者element-ui的图标,可以在树形表格绑定数据中加上标签icon children: [ { icon:'el-icon-top-right', label: ['beam名称',''], children: [ { label:['name','RS49'], }, { icon:'src/assets/images/Organization

  • vue通过element树形控件实现树形表格

    目录 实现效果图 安装依赖 自定义树形控件 其他实现 总结 在vue中通过element树形控件来实现树形表格的效果 通过缩进来实现近似树形表格的效果 实现效果图 安装依赖 $ npm install element-plus --save Element官网 自定义树形控件 分析图中控件分布,每个参数都有固定的width,通过width让数值达到对齐的效果 代码主要通过renderContent函数来自定义树形控件 <template> <div class="mytree&

  • Vue element树形控件添加虚线详解

    目录 1.实现效果 2.实现代码 3.其他实现 总结 1.实现效果 2.实现代码 树形控件虚线的添加主要通过控制css来实现,并且在树形控件的缩进数只能为0,令class="mytree" <div class="mytree"> <!--indent只能为0--> <el-tree :data="tree_data" :props="defaultProps" @node-click="

  • 详解如何实现Element树形控件Tree在懒加载模式下的动态更新

    Element提供的Tree树形控件,可以用清晰的层级结构展示信息,还可以展开或折叠.Tree支持两种加载模式:一次性加载全部树节点和懒加载模式.所谓懒加载模式,是指当需要展开父节点时才渲染子节点.懒加载模式的应用场景适合树节点数据量大的情形,在一定程度上可以优化图形用户界面的响应效率以及提升用户体验.但是,懒加载模式对数据动态刷新应用需求的支持不尽如意.树形控件节点一旦展开就缓存在本地,后续不会再继续更新和刷新节点数据.本文将介绍如何实现Element树形控件Tree在懒加载模式下的动态更新.

  • Element树形控件el-tree懒加载并设置默认展开和选中的效果

    使用elementui树组件,通过懒加载加载数据,并设置默认展开和全部选中的效果. <el-tree :load="loadNode" node-key="org_id" is-connection-line show-checkbox lazy :default-checked-keys="defaultSelectCids" :default-expanded-keys="defaultExpandedCids" :

  • bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享

    1.bootstrap-table 单击单行选中 $('#gzrwTable').on('click-row.bs.table', function(e, row, $element) { $('.success').removeClass('success');// 清除前一次操作已选中行的选中状态 $($element).addClass('success');// 选中行添加选中状态 }); 2.bootstrap-table 获取选中行信息 function getSelectedRow

  • vue实现带过渡效果的下拉菜单功能

    本文实例为大家分享了vue中仿写下拉菜单功能,带有过渡效果(移动端),供大家参考,具体内容如下 效果图 clickOutside.js 点击目标之外的地方,下拉框隐藏 代码如下: export const clickOutside = { bind(el, binding, vnode) { function documentHandler(e) { if (el.contains(e.target)) { return false; } if (binding.expression) { bi

  • element-ui树形控件后台返回的数据+生成组织树的工具类

    开发项目的时候遇到需要在表单中选择参会人员,根据不同部门下选择不同的人,在element-ui中有树形控件能满足这种情况,后台封装数据记录一下. 封装格式: 返回数据格式: 接收数据的pojo类: 2018年4月12日修改 本以为以上的数据结构能满足项目的使用,但是我错了,当时的数据库中只有不到10条的数据并且组织结构非常单一,随后同事导入了数据(6000多条),组织结构也不是如此单一的了,我在项目中固定了三层结构肯定是错的,要一个活的组织树. 网上有很多大牛写的方法,递归的.迭代的, 我在看了

随机推荐