详解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 相关文章推荐
js字符编码函数区别分析
Jun 05 Javascript
关于IE BUG与字符串截取substr的解决办法
Apr 10 Javascript
js 获取屏幕各种宽高的方法(浏览器兼容)
May 15 Javascript
js整数字符串转换为金额类型数据(示例代码)
Dec 26 Javascript
JavaScript中的style.cssText使用教程
Nov 06 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
Aug 25 Javascript
第一次接触神奇的Bootstrap菜单和导航
Aug 01 Javascript
JavaScript中Math对象的方法介绍
Jan 05 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
Apr 25 Javascript
H5 js点击按钮复制文本到粘贴板
Nov 19 Javascript
抖音短视频(douyin)去水印工具的实现代码
Mar 30 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
PHP实现的DES加密解密封装类完整实例
2017/04/29 PHP
JavaScript XML操作 封装类
2009/07/01 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
基于jquery实现的定时显示与隐藏div广告的实现代码
2013/08/22 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
jQuery中add()方法用法实例
2015/01/08 Javascript
javascript实现校验文件上传控件实例
2015/04/20 Javascript
使用jspdf生成pdf报表
2015/07/03 Javascript
谈一谈bootstrap响应式布局
2016/05/23 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
2016/11/15 Javascript
JavaScript面向对象分层思维全面解析
2016/11/22 Javascript
vue双向绑定的简单实现
2016/12/22 Javascript
JS在浏览器中解析Base64编码图像
2017/02/09 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
js常用正则表达式集锦
2019/05/17 Javascript
JavaScript实现图片放大镜效果
2019/06/27 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
python命令 -u参数用法解析
2019/10/24 Python
Python如何省略括号方法详解
2020/03/21 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
Python 图片处理库exifread详解
2021/02/25 Python
利用CSS3的3D效果制作正方体
2020/03/10 HTML / CSS
医科大学生的自我评价
2013/12/04 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
贴吧吧主申请感言
2015/08/03 职场文书
班主任工作总结范文
2015/08/13 职场文书
python学习之panda数据分析核心支持库
2021/05/07 Python