Elementui Tree 樹(shù)形控件刪除功能

vue-element-admin一個(gè)基于 vue2.0 和 Eelement 的控制面板 UI 框架,這是使用vue技術(shù)棧開(kāi)發(fā)的前端程序員的首選管理系統(tǒng)模板黎棠,模板以及非常的成熟了抖僵,并且有相關(guān)的社區(qū)和維護(hù)人員鲤看,開(kāi)發(fā)時(shí)候遇到問(wèn)題也不要慌。

推薦指數(shù):
Github 地址:https://github.com/PanJiaChen/vue-element-admin
Demo體驗(yàn):https://panjiachen.github.io/vue-element-admin/#/dashboard
官方文檔:https://panjiachen.github.io/vue-element-admin-site/zh/

今天就來(lái)說(shuō)一下耍群,怎么使用Tree Table 樹(shù)形表格义桂。廢話(huà)不多說(shuō)找筝,首先看一下官方文檔吧,看看官方文檔是怎么給到的例子吧:

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

功能:當(dāng)鼠標(biāo)劃過(guò)Tree 樹(shù)形控件的節(jié)點(diǎn)的時(shí)候慷吊,會(huì)出現(xiàn)一個(gè)刪除的按鈕
點(diǎn)擊刪除按鈕袖裕,會(huì)出現(xiàn)彈框詢(xún)問(wèn)是否刪除
選中刪除,則刪除樹(shù)節(jié)點(diǎn)(最上層的父節(jié)點(diǎn)不可刪除)

1:在views底下新建一個(gè)test文件夾
里面新建一個(gè)vue文件和一個(gè)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>
//調(diào)用接口
// import { deleteSubject } from "@/api/data/organ";

export default {
  data() {
    return {
      setTree: [],
      defaultProps: {
        children: "children",
        label: "organName",
      },
      treeData: [],
      organList: [],
    };
  },
  created() {
    //加載部門(mén)管理節(jié)點(diǎn)接口定義
    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("此操作將永久刪除該條目, 是否繼續(xù)?", "提示", {
        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);
          // 發(fā)請(qǐng)求刪除
          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));
    },
    //部門(mén)管理節(jié)點(diǎn)接口定義
    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;
      });
    },

    //對(duì)json的格式的轉(zhuǎn)化
    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) {
            //判斷是否為兒子節(jié)點(diǎn)
            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) {
          //有兒子節(jié)點(diǎn)則遞歸
          this.data2treeDG(datas, childrenArray);
        }
      }
      return dataArray;
    },

    //調(diào)用刪除接口
    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個(gè)經(jīng)典微信小程序+35套微信小程序源碼+微信小程序合集源碼下載(免費(fèi))

干貨:2021最新前端學(xué)習(xí)視頻~~速度領(lǐng)取

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末溉瓶,一起剝皮案震驚了整個(gè)濱河市急鳄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌堰酿,老刑警劉巖疾宏,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異触创,居然都是意外死亡坎藐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)哼绑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)岩馍,“玉大人,你說(shuō)我怎么就攤上這事抖韩≈鳎” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵茂浮,是天一觀(guān)的道長(zhǎng)双谆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)励稳,這世上最難降的妖魔是什么佃乘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任囱井,我火速辦了婚禮驹尼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘庞呕。我一直安慰自己新翎,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布住练。 她就那樣靜靜地躺著地啰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪讲逛。 梳的紋絲不亂的頭發(fā)上亏吝,一...
    開(kāi)封第一講書(shū)人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音盏混,去河邊找鬼蔚鸥。 笑死惜论,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的止喷。 我是一名探鬼主播馆类,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼弹谁!你這毒婦竟也來(lái)了乾巧?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤预愤,失蹤者是張志新(化名)和其女友劉穎沟于,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體植康,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡社裆,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了向图。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泳秀。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖榄攀,靈堂內(nèi)的尸體忽然破棺而出嗜傅,到底是詐尸還是另有隱情,我是刑警寧澤檩赢,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布吕嘀,位于F島的核電站,受9級(jí)特大地震影響贞瞒,放射性物質(zhì)發(fā)生泄漏偶房。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一军浆、第九天 我趴在偏房一處隱蔽的房頂上張望棕洋。 院中可真熱鬧,春花似錦乒融、人聲如沸掰盘。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)愧捕。三九已至,卻和暖如春申钩,著一層夾襖步出監(jiān)牢的瞬間次绘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邮偎,地道東北人罗洗。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像钢猛,于是被迫代替她去往敵國(guó)和親伙菜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容