Elementui Tree 树形控件删除功能

vue-element-admin一个基于 vue2.0 和 Eelement 的控制面板 UI 框架,这是使用vue技术栈开发的前端程序员的首选管理系统模板,模板以及非常的成熟了,并且有相关的社区和维护人员,开发时候遇到问题也不要慌。

推荐指数:
Github 地址:https://github.com/PanJiaChen/vue-element-admin
Demo体验:https://panjiachen.github.io/vue-element-admin/#/dashboard
官方文档:https://panjiachen.github.io/vue-element-admin-site/zh/

今天就来说一下,怎么使用Tree Table 树形表格。废话不多说,首先看一下官方文档吧,看看官方文档是怎么给到的例子吧:

组件:https://element.eleme.cn/#/zh-CN/component/tree

功能:当鼠标划过Tree 树形控件的节点的时候,会出现一个删除的按钮
点击删除按钮,会出现弹框询问是否删除
选中删除,则删除树节点(最上层的父节点不可删除)

1:在views底下新建一个test文件夹
里面新建一个vue文件和一个json文件

2:使用
mock.json

{
    "msg": "success",
    "code": 1,
    "data": [
        {
            "id": 1,
            "organName": "yy有限公司",
            "parentId": 0,
            "manager": "zs",
            "phone": "zs",
            "companyId": 1,
            "address": null
        },
        {
            "id": 2,
            "organName": "test311",
            "parentId": 1,
            "manager": "zs",
            "phone": "21",
            "companyId": 1,
            "address": null
        },
        {
            "id": 10,
            "organName": "test4",
            "parentId": 1,
            "manager": "zs",
            "phone": null,
            "companyId": 1,
            "address": null
        },
        {
            "id": 11,
            "organName": "2121",
            "parentId": 1,
            "manager": "212",
            "phone": "13661725475",
            "companyId": 1,
            "address": null
        },
        {
            "id": 12,
            "organName": "212121212",
            "parentId": 2,
            "manager": "212",
            "phone": "13661725475",
            "companyId": 1,
            "address": null
        },
        {
            "id": 13,
            "organName": "www群46",
            "parentId": 11,
            "manager": "ww",
            "phone": "123",
            "companyId": 1,
            "address": null
        },
        {
            "id": 14,
            "organName": "www",
            "parentId": 11,
            "manager": "ww",
            "phone": "123",
            "companyId": 1,
            "address": null
        },
        {
            "id": 15,
            "organName": "",
            "parentId": null,
            "manager": "",
            "phone": "",
            "companyId": 1,
            "address": null
        },
        {
            "id": 16,
            "organName": "21212",
            "parentId": null,
            "manager": "",
            "phone": "",
            "companyId": 1,
            "address": null
        },
        {
            "id": 17,
            "organName": "2131314",
            "parentId": null,
            "manager": "",
            "phone": "",
            "companyId": 1,
            "address": null
        },
        {
            "id": 18,
            "organName": "q313",
            "parentId": 2,
            "manager": "",
            "phone": "",
            "companyId": 1,
            "address": null
        },
        {
            "id": 19,
            "organName": "8888",
            "parentId": 1,
            "manager": "11",
            "phone": "",
            "companyId": 1,
            "address": null
        },
        {
            "id": 20,
            "organName": "21",
            "parentId": 1,
            "manager": "12",
            "phone": "21",
            "companyId": 1,
            "address": null
        },
        {
            "id": 21,
            "organName": "wwww",
            "parentId": 1,
            "manager": "www",
            "phone": "13661725475",
            "companyId": 1,
            "address": null
        },
        {
            "id": 22,
            "organName": "1313",
            "parentId": 1,
            "manager": "313",
            "phone": "31",
            "companyId": 1,
            "address": null
        },
        {
            "id": 23,
            "organName": "test",
            "parentId": 1,
            "manager": "zs",
            "phone": "",
            "companyId": 1,
            "address": null
        },
        {
            "id": 24,
            "organName": "test_01",
            "parentId": 23,
            "manager": "zs",
            "phone": "",
            "companyId": 1,
            "address": null
        },
        {
            "id": 25,
            "organName": "w121",
            "parentId": 1,
            "manager": "212",
            "phone": "212",
            "companyId": 1,
            "address": null
        }
    ]
}

3:
test.vue

<template>
  <div>
    <el-col :span="6">
      <div class="ztree">
        <el-tree
          :data="treeData"
          show-checkbox
          default-expand-all
          node-key="id"
          ref="tree"
          highlight-current
          :props="defaultProps"
          @node-click="nodeClickHandler"
          @check="checkHandler"
          :render-content="renderContent"
        >
        </el-tree>
      </div>
    </el-col>
  </div>
</template>

<script>
//调用接口
// import { deleteSubject } from "@/api/data/organ";

export default {
  data() {
    return {
      setTree: [],
      defaultProps: {
        children: "children",
        label: "organName",
      },
      treeData: [],
      organList: [],
    };
  },
  created() {
    //加载部门管理节点接口定义
    this.getQuerycheckList();
  },
  methods: {
    renderContent(h, { node, data, store }) {
      console.log(data);
      return (
        <span
          class="custom-tree-node"
          on-mouseenter={() => (data.isHover = true)}
          on-mouseleave={() => (data.isHover = false)}
        >
          <span>{data.organName}</span>
          {data.parentId !== 0 && data.isHover && (
            <i
              class="el-icon-error danger"
              on-click={(e) => {
                e.stopPropagation();
                this.remove(node, data);
              }}
            ></i>
          )}
        </span>
      );
    },
    remove(node, data) {
      this.$confirm("此操作将永久删除该条目, 是否继续?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          this.handleDelete(null, data);
          if (data.parentId === 0) {
            return;
          }
          const parent = node.parent;
          const children = parent.data.children || parent.data;
          const index = children.findIndex((d) => d.id === data.id);
          children.splice(index, 1);
          // 发请求删除
          this.$message({
            type: "success",
            message: "删除成功!",
          });
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消删除",
          });
        });
    },
    //勾选
    checkHandler(...value) {
      console.log(value[1]);
      console.log(value[1].checkedNodes.map((a) => a.organName));
    },
    //部门管理节点接口定义
    getQuerycheckList() {
      const params = {};
      this.dataLoading = true;
      import("./mock").then((res) => {
        this.setTree = res.data;
        this.organList = res.data.map((a) => ({
          label: a.organName,
          value: a.id,
        }));
        this.getListData();
        this.dataLoading = false;
      });
    },

    //对json的格式的转化
    getListData() {
      let dataArray = [];
      this.setTree.forEach(function (data) {
        let parentId = data.parentId;
        if (parentId === 0) {
          let objTemp = {
            id: data.id,
            organName: data.organName,
            manager: data.manager,
            phone: data.manager,
            parentId: parentId,
          };
          dataArray.push(objTemp);
        }
      });
      this.treeData = this.data2treeDG(this.setTree, dataArray);
    },
    data2treeDG(datas, dataArray) {
      for (let j = 0; j < dataArray.length; j++) {
        let dataArrayIndex = dataArray[j];
        let childrenArray = [];
        let Id = dataArrayIndex.id;
        for (let i = 0; i < datas.length; i++) {
          let data = datas[i];
          let parentId = data.parentId;
          if (parentId == Id) {
            //判断是否为儿子节点
            let objTemp = {
              id: data.id,
              organName: data.organName,
              manager: data.manager,
              phone: data.phone,
              parentId: parentId,
              isHover: false,
            };
            childrenArray.push(objTemp);
          }
        }
        dataArrayIndex.children = childrenArray;
        if (childrenArray.length > 0) {
          //有儿子节点则递归
          this.data2treeDG(datas, childrenArray);
        }
      }
      return dataArray;
    },

    //调用删除接口
    handleDelete(index, row) {
      const params = {
        id: row.id,
      };
      this.dataLoading = true;
      deleteSubject(params).then((res) => {
        this.$notify({
          message: "删除成功",
          type: "success",
          duration: 2000,
        });
        this.getQuerycheckList();
        console.log(this.pvData);
        this.dataLoading = false;
      });
    },
    nodeClickHandler(...rest) {
      console.log(rest);
      this.form = rest[0];
    },
  },
};
</script>
<style lang="scss">
.danger {
  color: red;
}
</style>

渲染:

往期干货:

26个经典微信小程序+35套微信小程序源码+微信小程序合集源码下载(免费)
干货:2021最新前端学习视频~~速度领取
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue.js 是一个渐进式的 JavaScript 框架,它能够帮助开发者构建用户界面。而 ElementUI 是一个基于 Vue.js 的前端 UI 框架,它提供了很多实用的 UI 组件,其中包括树形控件。使用 Vue.js 和 ElementUI 开发树形结构的应用时,可以使用 ElementUI 提供的 el-tree 组件来实现。 ### 回答2: vue elementui是一个优秀的基于Vue.js框架的UI组件库,其中包含了很多实用的控件,其中包括tree树形控件tree树形控件用于展示具有层级关系的数据结构,其中每个节点可以有任意子节点。在Vue.js框架中,通过使用elementuitree控件,可以极大地简化tree树形控件的开发。 想要在vue elementui中使用tree树形控件,首先需要引入elementui中的tree组件,然后在Vue组件中声明tree控件,如下所示: ```html <template> <el-tree :data="treeData"></el-tree> </template> <script> import { ElTree } from 'element-ui'; export default { components: { ElTree, }, data() { return { treeData: [ { label: '节点1', children: [ { label: '子节点1.1', children: [ { label: '子节点1.1.1', }, ], }, { label: '子节点1.2', }, ], }, { label: '节点2', children: [ { label: '子节点2.1', }, { label: '子节点2.2', }, ], }, ], }; }, }; </script> ``` 在上述代码中,使用了elementui中的el-tree组件,并在组件中声明了一个名为treeData的数据,该数据用于存储要展示的树形结构数据。在treeData数据中,每个节点都是一个对象,其中包含label属性,用于展示节点文本,以及children属性,用于存储子节点数据。通过将treeData数据绑定到el-tree组件的data属性上,即可展示出完整的tree树形控件。 在实际开发中,还可以通过el-tree组件的props属性,对tree树形控件进行更多的自定义配置,例如设置单选或多选、显示图标等。另外,el-tree组件还提供了很多实用的事件,例如node-click、check-change等,可以方便地对用户操作进行响应。 综上所述,vue elementuitree树形控件既简单实用又功能强大,相信在实际开发中会得到广泛应用。 ### 回答3: Vue ElementUI Tree 树形控件是一款基于 Vue.js 框架和 ElementUI 组件库实现的树形控件。该控件采用了细粒度渲染的方式,可以在大数据量下高效渲染,并支持异步加载节点数据。 使用 Vue ElementUI Tree 树形控件,需要先导入相关的依赖包,如 ElementUI 组件库和 Vue.js 框架。在页面中创建 tree 组件,通过 props 属性设置相应的数据源和配置项,可以实现树形结构的展示和交互。 Vue ElementUI Tree 树形控件的主要特点包括以下几个方面: 1、支持异步加载节点数据 Vue ElementUI Tree 树形控件支持异步加载节点数据,可以实现懒加载和动态更新节点。通过配置异步加载函数和加载效果,可以实现异步加载节点数据的高度自定义。 2、支持多选和单选 用户可以配置 Vue ElementUI Tree 树形控件的选择模式,实现单选和多选功能。选择模式包括 radio(单选框)和 checkbox(复选框)两种。 3、支持节点拖拽和排序 Vue ElementUI Tree 树形控件支持节点拖拽和排序,可以通过配置相应的拖拽类型实现节点的复制、移动和排序等操作。 4、支持节点搜索和过滤 Vue ElementUI Tree 树形控件支持节点搜索和过滤功能,可以快速定位目标节点并进行相应的操作。 5、配置灵活性高 Vue ElementUI Tree 树形控件支持多种配置项,可以实现树形结构的高度自定义,包括数据源格式、节点图标、节点展开方式等。 总之,Vue ElementUI Tree 树形控件是一款功能强大、配置灵活的树形控件,在企业级应用和数据展示中具有广泛的应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值