詳解Vue.js iview實現(xiàn)樹形權限表(可擴展表)
問題:
需要一個可折疊的權限管理系統(tǒng),用表格展示。
主要用的iView組件庫,有Table(表格),Tree(樹形控件),Collapse(折疊面板)看起來比較符合意思
深入查看Table相關范例,發(fā)現(xiàn)有個 通過給 columns
數(shù)據(jù)設置一項,指定 type: 'expand'
,即可開啟擴展功能 可以考慮
但也只是展開詳細內(nèi)容,如需樹形結構,則需要render自定義去渲染,挺麻煩的。再去看看element UI,也沒有什么比較好的選擇。
過程:
第一步,先構建根節(jié)點的數(shù)據(jù)表,后臺返回JSON數(shù)據(jù)解析(www.json.cn)基本如下
前面2個object和第三個結構基本類似,將數(shù)據(jù)注入authlist,匹配listcolumns展示
展示結果如下:
第二步,添加Columns的擴展expand功能,在listcolumns里添加
listcolumns: [{ title: '序號', key: '_index', className: 'index_css', render: (h, params) = >{ return h('div', [h('span', { style: { display: 'inline-block', width: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', textAlign: 'center' } }, params.row._index)]); } }, { //添加的expand type: 'expand', width: 20, render: (h, params) = >{ return h(expandRow, { style: { padding: 0 }, props: { row: params.row } }) } }, { title: '權限名稱', key: 'Title', className: 'Title_css', ellipsis: true, render: (h, params) = >{ return h('div', [h('span', { style: { display: 'inline-block', width: '100%', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, params.row.Title)]); } },
展示效果:
第三步:authtable_expand.vue子組件,基本和父組件的Table一致
< template > <Table stripe: loading = "loading": showHeader = false border: columns = "listcolumns": data = "listauth"style = "overflow-y: hidden;max-height: 522px;" > </Table> </template > <script > import expandRow from '../components/authtable_expand.vue'; export default { props: ['row'], data() { return { loading: false, listcolumns: [ //listcolumns暫不展示 ], listauth: [] } }, mounted() {}, methods: {}, created() { //console.log("authotable_expend created: " + JSON.stringify(this.row.children)) var object = this.row.children; console.log("auth expand data:" + JSON.stringify(object)) this.listauth.splice(0) object.forEach(r = >{ this.listauth.push(r) }) //console.log("listauth:" + JSON.stringify(this.listauth)) } } < /script> <style lang="less"> td.ivu-table-expanded-cell{ padding:0; } </style >
注意,添加td.ivu-table-expanded-cell{padding:0;},可以是擴展部分內(nèi)容充滿全部,展示效果如下
在expand.vue里遞歸調(diào)用自身,可以逐級擴展
總結:
目前在Vue.js的2個主要的前端組件iView和ElementUI都暫時沒有看到合適的可擴展的樹形表,只有自己編寫相關組件來實現(xiàn)。相信以后應該都會有的,就像之前iView多表頭都沒有,后面也終于添加了。
此外,自定義組合樹形權限表還有部分功能沒有完善,如:
1如果當前節(jié)點沒有子節(jié)點,就不應該出現(xiàn)擴展的按鈕
2擴展按鈕最好按照樹的深度逐漸向后移動
3序號未按總序號排列
預期結果應該類似于:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
vue-openlayers實現(xiàn)地圖坐標彈框效果
這篇文章主要為大家詳細介紹了vue-openlayers實現(xiàn)地圖坐標彈框效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-09-09vue 插值 v-once,v-text, v-html詳解
這篇文章主要介紹了vue 插值 v-once,v-text, v-html詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-01-01Vuejs使用addEventListener的事件如何觸發(fā)執(zhí)行函數(shù)的this
這篇文章主要介紹了Vuejs使用addEventListener的事件觸發(fā)執(zhí)行函數(shù)的this方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-06-06