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最新前端学习视频~~速度领取

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,013评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,205评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,370评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,168评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,153评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,954评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,271评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,916评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,382评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,877评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,989评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,624评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,209评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,199评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,418评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,401评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,700评论 2 345

推荐阅读更多精彩内容