详解Vue.js iview实现树形权限表(可扩展表)


Posted in Javascript onSeptember 30, 2018

问题:

需要一个可折叠的权限管理系统,用表格展示。

主要用的iView组件库,有Table(表格),Tree(树形控件),Collapse(折叠面板)看起来比较符合意思

深入查看Table相关范例,发现有个 通过给 columns 数据设置一项,指定 type: 'expand',即可开启扩展功能  可以考虑

但也只是展开详细内容,如需树形结构,则需要render自定义去渲染,挺麻烦的。再去看看element UI,也没有什么比较好的选择。

过程:

第一步,先构建根节点的数据表,后台返回JSON数据解析(www.json.cn)基本如下

详解Vue.js iview实现树形权限表(可扩展表)

前面2个object和第三个结构基本类似,将数据注入authlist,匹配listcolumns展示

详解Vue.js iview实现树形权限表(可扩展表)

详解Vue.js iview实现树形权限表(可扩展表)

展示结果如下:

详解Vue.js iview实现树形权限表(可扩展表)        

第二步,添加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)]);
  }
},

展示效果:

详解Vue.js iview实现树形权限表(可扩展表)

第三步: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;},可以是扩展部分内容充满全部,展示效果如下

详解Vue.js iview实现树形权限表(可扩展表)

在expand.vue里递归调用自身,可以逐级扩展

总结:

目前在Vue.js的2个主要的前端组件iView和ElementUI都暂时没有看到合适的可扩展的树形表,只有自己编写相关组件来实现。相信以后应该都会有的,就像之前iView多表头都没有,后面也终于添加了。

此外,自定义组合树形权限表还有部分功能没有完善,如:

1如果当前节点没有子节点,就不应该出现扩展的按钮

2扩展按钮最好按照树的深度逐渐向后移动

3序号未按总序号排列

预期结果应该类似于:

详解Vue.js iview实现树形权限表(可扩展表)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
5 cool javascript apps
Mar 24 Javascript
JavaScript设计模式之观察者模式(发布者-订阅者模式)
Sep 24 Javascript
从数据库读取数据后将其输出成html标签的三种方法
Oct 13 Javascript
Javascript json object 与string 相互转换的简单实现
Sep 27 Javascript
实现点击下箭头变上箭头来回切换的两种方法【推荐】
Dec 14 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
Feb 16 Javascript
微信小程序 下拉列表的实现实例代码
Mar 08 Javascript
浅谈vue中.vue文件解析流程
Apr 24 Javascript
jQuery实现遍历XML节点和属性的方法示例
Apr 29 jQuery
Vue2.0 v-for filter列表过滤功能的实现
Sep 07 Javascript
webuploader分片上传的实现代码(前后端分离)
Sep 10 Javascript
vue radio单选框,获取当前项(每一项)的value值操作
Sep 10 Javascript
对angularJs中$sce服务安全显示html文本的实例
Sep 30 #Javascript
vue  自定义组件实现通讯录功能
Sep 30 #Javascript
对angularJs中2种自定义服务的实例讲解
Sep 30 #Javascript
angularJs在多个控制器中共享服务数据的方法
Sep 30 #Javascript
iview Upload组件多个文件上传的示例代码
Sep 30 #Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 #Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
Sep 30 #Javascript
You might like
根德YB400的电路分析
2021/03/02 无线电
PHP仿博客园 个人博客(2) 数据库增添改删
2013/07/05 PHP
php输入数据统一类实例
2015/02/23 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
统一接口:为FireFox添加IE的方法和属性的js代码
2007/03/25 Javascript
JavaScript 5 新增 Array 方法实现介绍
2012/02/06 Javascript
jquery限制输入字数,并提示剩余字数实现代码
2012/12/24 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
网页瀑布流布局jQuery实现代码
2016/10/21 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
2017/02/27 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
vue移动端项目缓存问题实践记录
2018/10/29 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
微信小程序动态添加view组件的实例代码
2019/05/23 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
浅析Python数据处理
2018/05/02 Python
Python socket模块实现的udp通信功能示例
2019/04/10 Python
selenium处理元素定位点击无效问题
2019/06/12 Python
python flask搭建web应用教程
2019/11/19 Python
纯CSS3实现圆圈动态发光特效动画的示例代码
2021/03/08 HTML / CSS
美国益智玩具购物网站:Fat Brain Toys
2017/11/03 全球购物
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
英国标准协会商店:BSI Shop
2019/02/25 全球购物
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
运动会开幕式邀请函
2014/02/03 职场文书
《学棋》教后反思
2014/04/14 职场文书
国家励志奖学金个人先进事迹材料
2014/05/04 职场文书
环保标语口号
2014/06/13 职场文书
辞职信范文大全
2015/03/02 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
手写Spirit防抖函数underscore和节流函数lodash
2022/03/22 Javascript
SpringBoot深入分析讲解监听器模式下
2022/07/15 Java/Android