Element Ui 树形组件自定义样式与功能

这篇具有很好参考价值的文章主要介绍了Element Ui 树形组件自定义样式与功能。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、功能描述:可实现树节点内容修改、增加节点、删除节点等,根据层级不同显示不同的图标等,已封装成组件。

<template>
  <div class="treelistitem">
    <el-tree
      :data="data"
      node-key="id"
      :render-content="renderContent"
      @node-click="handleNodeClick"
    ></el-tree>
  </div>
</template>

<script>
export default {
  data() {
    return {
      currentId: "",
      currentName: "",
      addName: "",
      open: false,
    };
  },
  props: {
    data: {
      type: Array,
      default: () => [],
    },
    deletefn: {
      type: Function,
    },
    edietFn: {
      type: Function,
    },
    addFn: {
      type: Function,
    },
    getId: {
      type: Function,
    },
    opreateId: {
      type: Number,
      default: 0,
    },
  },
  methods: {
    prevent() {
      this.currentId = "";
    },
    ok(data, node) {
      if (data.text == this.currentName) {
        this.currentId = "";
        return false;
      }

      let edietData = {
        data,
        node,
        name: this.currentName,
        id: this.currentId,
      };
      this.$emit("edietFn", edietData);
      data.text = this.currentName;
      this.currentId = "";
    },
    handleNodeClick(val) {
      this.$emit("getId", val.id);
    },
    handleInput(val) {
      this.currentName = val;
    },
    handClick(value, data, node) {
      if (value == "1") {
        this.currentId = data.id;
        this.currentName = data.text;
      } else if (value == "2") {
        let addData = { data, node };

        this.$emit("addFn", addData);
      } else {
        this.$confirm("确定删除?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        })
          .then(() => {
            this.$emit("deletefn", data);
            const parent = node.parent;
            const children = parent.data.children || parent.data;
            const index = children.findIndex((d) => d.id === data.id);
            children.splice(index, 1);
          })
          .catch(() => {});
      }
    },
    renderContent(h, { node, data, store }) {
      return (
        <div class="custom-tree-node" style={{ width: "100%" }}>
          {!data.son ? (
            node.expanded ? (
              <i class="el-icon-folder-opened" ></i>
            ) : (
              <i class="el-icon-folder" ></i>
            )
          ) : (
            <i class="el-icon-document" ></i>
          )}
          {this.currentId === data.id ? (
            <el-input
              value={this.currentName}
              on-input={this.handleInput}
              style={{ width: "40%" }}
            ></el-input>
          ) : (
            <el-tooltip effect="dark" content={data.text} placement="top">
              <span class="custom-tree-node-text">{data.text}</span>
            </el-tooltip>
          )}
          {this.currentId === data.id ? (
            <span
              style={{ paddingLeft: "10px" }}
              class={this.opreateId != 3 ? "showTreeList" : "hideTreeList"}
            >
              <el-button
                type="info"
                icon="el-icon-circle-close"
                class="btnreturn"
                circle
                size="mini"
                on-click={this.prevent}
              ></el-button>
              <el-button
                type="primary"
                size="mini"
                icon="el-icon-check"
                class="btnsearch"
                circle
                on-click={() => {
                  this.ok(data, node);
                }}
              ></el-button>
            </span>
          ) : (
            <el-dropdown
              style={{ float: "right", paddingRight: "10px" }}
              class={this.opreateId != 3 ? "showTreeList" : "hideTreeList"}
              on-command={(value) => {
                this.handClick(value, data, node);
              }}
            >
              <span class="el-dropdown-link">
                <i class="el-icon-arrow-down el-icon--right"></i>
              </span>
              <el-dropdown-menu slot="dropdown">
                <el-dropdown-item
                  command="1"
                  class={
                    data.attributes.fatherId == 0
                      ? "hideCommand"
                      : "showCommand"
                  }
                >
                  <i class="el-icon-edit"></i>
                </el-dropdown-item>
                <el-dropdown-item command="2">
                  <i class="el-icon-plus"></i>
                </el-dropdown-item>
                <el-dropdown-item
                  command="3"
                  class={
                    data.attributes.fatherId == 0
                      ? "hideCommand"
                      : "showCommand"
                  }
                >
                  <i class="el-icon-delete"></i>
                </el-dropdown-item>
              </el-dropdown-menu>
            </el-dropdown>
          )}
        </div>
      );
    },
  },
};
</script>

<style lang="scss" >
.el-tree > .el-tree-node {
  min-width: 100%;
  display: inline-block;
}
.showCommand {
  display: inline-block;
}
.hideCommand {
  display: none;
}
.treelistitem.showTreeList {
  display: inline-block;
}
.treelistitem .hideTreeList {
  display: none;
}
.treelistitem .el-tree {
  width: 100% !important;
}
.treelistitem .el-dropdown {
  float: right;
  padding-right: 10px;
}
.treelistitem .custom-tree-node {
  width: 100%;
  height: 50px;
  line-height: 50px;
  font-size: 14px;
}
.treelistitem .custom-tree-node .custom-tree-node-text {
  width: 60%;
  height: 30px;
  padding-left: 10px;
  padding-bottom: 0.5px;
  display:inline-block;
  white-space: nowrap;
  text-overflow: ellipsis;
  overflow: hidden;
}
.treelistitem .el-tree-node__content {
  height: 50px !important;
}
.treelistitem .el-input {
  height: 20px;
  margin-top: -20px;
  margin-left: 10px;
}
.treelistitem .el-input__inner {
  height: 30px;
}
</style>

二、调用组件示例:

<my-tree
    :data="treeList"
    :opreateId="roleId"
    @deletefn="delTree"
    @edietFn="updateTree"
    @addFn="addTree"
    @getId="getTreeId">
</my-tree>

三、效果图如下:

element ui树形组件,前端开发,elementui,vue.js,javascript,前端框架文章来源地址https://www.toymoban.com/news/detail-610632.html

到了这里,关于Element Ui 树形组件自定义样式与功能的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element ui 日期组件样式修改不生效

    在当前页面增加一个style标签,标签上去掉 scoped 即可 下面为日期时间选择器的样式,仅供参考,自行更改  使用的是scss

    2024年02月12日
    浏览(40)
  • Element Ui Tree组件实现增、删、改、查、拖拽节点 的树形结构

    介绍:首先组件 | Element官网某些功能都具备了,这里我就把这些功能结合在一起更完美的使用,其次 编辑节点 官网是没有实例,所以这里搞了一套较完整的功能,其次编辑和添加,这里直接使用了弹窗(顾及到多个参数设置),接下来效果图展示! 效果图如下: 1,其中点

    2024年02月13日
    浏览(48)
  • element-ui 自定义loading加载样式

    element-ui 中的 loading 加载功能,默认是全屏加载效果, 设置局部,需要自定义样式,自定义的方法如下:

    2024年02月11日
    浏览(40)
  • element ui 组件打印时丢失样式的解决办法

    当vue前端使用打印插件时(比如vue-print-nb),偶尔会碰到无法打印出组件样式的情况,比如复选框el-checkbox。 实际选中情况   点击打印时的情况,没了√。   找到对应的组件样式,比如复选框el-checkbox,找到.el_checkbox__input类,添加 最终效果  

    2024年02月16日
    浏览(39)
  • 对Element UI 2.15版本的树形组件进行美化,如增加竖线、横线、图标等

    ElementUI、ElementPlus树组件功能很不错,但是官方的树形组件没有显示线条,感觉稍微不够大气。于是网上查了一些资料,找了很多也感觉也不够完美,最后找到一个还不错的实现方案,并且再美化改进一下,分享给大家。 (1)示例代码 (2)效果如下~ (1)示例代码 (2)效

    2024年02月13日
    浏览(54)
  • 自定义element-ui走马灯(轮播)样式

    自定义el-carousel-item指示器样式 把指示器变成圆点 效果图:  

    2024年02月13日
    浏览(32)
  • Vue2 - 引入Element-UI组件样式

    官方文档 https://element.eleme.cn/#/zh-CN/component/installation 推荐使用 npm 的方式安装 ,它能更好地和 webpack 打包工具配合使用。 在终端cd到项目文件夹下安装 也可以通过CDN(不推荐) 目前可以通过 unpkg.com/element-ui 获取到最新版本的资源,在页面上引入 js 和 css 文件即可开始使用。

    2024年02月06日
    浏览(50)
  • Element UI组件中el-checkbox组件样式的修改

    Element UI组件仅提供了 按钮 形式的 Checkbox 激活时的文本颜色修改的属性(text-color)以及激活时的填充色和边框色的修改属性(fill),非按钮形式的如何修改这些样式呢? 提示:直接修改CSS属性,相关代码如下: 我在写style样式的时候并没有加scoped属性,有时候加了该属性修改样

    2024年02月12日
    浏览(42)
  • 自定义日历.element-ui 修改时间选择器样式

    目录 一、自定义日历 二、时间选择样式自定义 先上效果图 已经封装成vue组件,可选择切换年月:  因 element-UI的时间选择器 el-date-picker 是将元素直接挂载到页面的 body 中,而非自身元素下,所以使用  /deep/、 、  ::v-deep  等穿透无法定位到元素。 解决方案: 利用时间选择

    2024年02月12日
    浏览(36)
  • element-ui form表单自定义label的样式、内容

    element-ui form表单自定义label的样式、内容

    2024年04月17日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包