vue中樹形控件轉換為表格樣式

按照業(yè)務需求,要做一個權限菜單虱疏,方便設置人員的權限惹骂,在網(wǎng)上沒有找到想要的效果,自己琢磨了一下做瞪,如下為效果圖:

菜單權限.png

1对粪、從接口獲取所有權限的數(shù)據(jù),如果獲取的數(shù)據(jù)不是樹形結構装蓬,先處理為樹形結構
(1)vue代碼如下:

<div class="table">
       <el-scrollbar style="height: 80%; background-color: #fff">
              <el-tree
                  show-checkbox
                  :check-on-click-node="true"
                  :data="allMenu"
                  default-expand-all
                  node-key="id"
                  :expand-on-click-node="false"
                  :props="menuProps"
                  ref="menuTree"
                  :check-strictly="true">
                </el-tree>
        </el-scrollbar>
 </div> 

(2)js代碼如下:

data() {
    return {
      allMenu: [], // 全部菜單
      menuProps: {
        label: "menuname",
        children: "children",
      },
    }
  },

toTree() 為自己封裝的方法(數(shù)組轉成樹形結構數(shù)據(jù))著拭,在我上一篇筆記有整理過

created(){
   this.getAllMenu()
},
methods: {
    // 獲取所有權限菜單
    getAllMenu(){
      menuList({}).then(res => {
        if(res.code === 0) {
          this.allMenu = toTree(res.data);
          console.log(this.allMenu)
        }else {
          this.$message.error(res.message)
        }
      })
    },
}

目前效果如圖:


樹形控件效果圖.png

2、自定義樹形控件節(jié)點內容(詳細的使用方法可參考element官網(wǎng))牍帚,官網(wǎng)有兩種方法自定義render-content和scoped slot都可以達到效果儡遮,我這里使用的是第二種作用域插槽。
(1)為第三級的節(jié)點加上‘especially’類名暗赶,vue代碼如下:

<el-tree
     show-checkbox
     :check-on-click-node="true"
     :data="allMenu"
     default-expand-all
     node-key="id"
     :expand-on-click-node="false"
     :props="menuProps"
     ref="menuTree"
     :check-strictly="true">

     <!-- 自定義節(jié)點內容 -->
     <span class="custom-tree-node" slot-scope="{ node, data }" >
            <span :class="(node.level == 3)? 'especially':''">{{ node.label }}</span>
     </span>

</el-tree>

(2)dom操作修改節(jié)點樣式鄙币,js代碼如下:

watch: {
    // 監(jiān)聽權限菜單tree是否渲染完
    allMenu: function () {
      this.$nextTick(() => {
        this.changeTreeClass()
      })
    },
  },
methods: {
// 改變tree節(jié)點樣式
    changeTreeClass() {
      // 找到之前做標記的class
      var classDomList = document.getElementsByClassName('especially')
      // 改變這幾個樣式
      for (var i = 0; i < classDomList.length; i++) {
        classDomList[i].parentNode.parentNode.style.cssText = 'width: auto;border: none;'
        classDomList[i].parentNode.parentNode.parentNode.style.cssText = 'border: none;'
        classDomList[i].parentNode.parentNode.nextSibling.style.cssText = 'display: none;'
      }
    },
}

(3)less代碼如下:

<style lang="less" scoped>
 .table {
      overflow: auto;
      height: 100%;
      /deep/.el-tree {
    .el-tree-node__content {
      border-bottom: 1px #000000 solid;
      padding: 5px 10px !important;
      width: 140px;
      height: auto;
      .el-tree-node__expand-icon.el-icon-caret-right{
        display: none;
      }
    }
    .el-tree-node {
      padding: 0 !important;
      display: flex;
    }
    .el-checkbox.is-disabled.is-checked {
      .el-checkbox__inner{
        background-color: #363554 !important;
        border-color: #363554 !important;
      }
    }
    .el-tree-node__children {
      display: flex;
      flex-direction: column;
      
      .el-tree-node{
        display: flex;
        padding: 0px !important;
        border-bottom: 1px #000000 solid;
        .el-tree-node__content{
          width: 200px;
          border-left: 1px #000000 solid;
          border-right: 1px #000000 solid;
          border-bottom: none;
          .custom-tree-node {
            height: 24px;
            display: flex;
            align-items: center;
            .tree-btn {
              margin-left: 10px;
              display: none;
            }
            .el-button{
              padding: 0px !important;
              border-radius: 4px;
              background: #363554;
              color: #ffffff;
            }
          }
        }
        .el-tree-node__children{
          width: 580px;
          flex-direction: row;  
          flex-wrap: wrap;
        }
      }
      .el-tree-node.is-checked{
        .tree-btn {
          display: block !important;
        }
      }
    }
  }
}
</style>
完成效果圖.png
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹂随,隨后出現(xiàn)的幾起案子十嘿,更是在濱河造成了極大的恐慌,老刑警劉巖岳锁,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绩衷,死亡現(xiàn)場離奇詭異,居然都是意外死亡激率,警方通過查閱死者的電腦和手機咳燕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來柱搜,“玉大人迟郎,你說我怎么就攤上這事剥险〈险海” “怎么了?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵表制,是天一觀的道長健爬。 經(jīng)常有香客問我,道長么介,這世上最難降的妖魔是什么娜遵? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮壤短,結果婚禮上设拟,老公的妹妹穿的比我還像新娘慨仿。我一直安慰自己,他們只是感情好纳胧,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布镰吆。 她就那樣靜靜地躺著,像睡著了一般跑慕。 火紅的嫁衣襯著肌膚如雪万皿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天核行,我揣著相機與錄音牢硅,去河邊找鬼。 笑死芝雪,一個胖子當著我的面吹牛减余,可吹牛的內容都是我干的。 我是一名探鬼主播惩系,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼佳励,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了蛆挫?” 一聲冷哼從身側響起赃承,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悴侵,沒想到半個月后瞧剖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡可免,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年抓于,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片浇借。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡捉撮,死狀恐怖,靈堂內的尸體忽然破棺而出妇垢,到底是詐尸還是另有隱情巾遭,我是刑警寧澤,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布闯估,位于F島的核電站灼舍,受9級特大地震影響,放射性物質發(fā)生泄漏涨薪。R本人自食惡果不足惜骑素,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刚夺。 院中可真熱鬧献丑,春花似錦末捣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至筐摘,卻和暖如春卒茬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咖熟。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工圃酵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人馍管。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓郭赐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親确沸。 傳聞我的和親對象是個殘疾皇子捌锭,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

推薦閱讀更多精彩內容