详解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 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
js 分页全选或反选标识实现代码
Aug 09 Javascript
javascript读取xml实现javascript分页
Dec 13 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
Oct 10 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
JS查找英文文章中出现频率最高的单词
Mar 20 Javascript
在vue中把含有html标签转为html渲染页面的实例
Oct 28 Javascript
vue-autoui自匹配webapi的UI控件的实现
Mar 20 Javascript
Javascript查看大图功能代码实现
May 07 Javascript
angular共享依赖的解决方案分享
Oct 15 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函数memory_get_usage获取PHP内存清耗量的方法
2011/12/06 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
Ubuntu VPS中wordpress网站打开时提示”建立数据库连接错误”的解决办法
2016/11/03 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
PHP PDOStatement::bindParam讲解
2019/01/30 PHP
php写入mysql中文乱码的实例解决方法
2019/09/17 PHP
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
JavaScript函数模式详解
2014/11/07 Javascript
js正则表达式验证邮件地址
2015/11/12 Javascript
AngularJs基于角色的前端访问控制的实现
2016/11/07 Javascript
JS实现超简单的汉字转拼音功能示例
2016/12/22 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
Webpack打包css后z-index被重新计算的解决方法
2017/06/18 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
layui问题之自动滚动二级iframe页面到指定位置的方法
2019/09/18 Javascript
JS 创建对象的模式实例小结
2020/04/28 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
[32:26]EG vs IG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
Python常用断言函数实例汇总
2020/11/30 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
在家更换处方镜片:Lensabl
2019/05/01 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
贝佳斯官方网站:Borghese
2020/05/08 全球购物
事业单位请假制度
2014/01/13 职场文书
鸿星尔克广告词
2014/03/21 职场文书
党员先锋岗事迹材料
2014/05/08 职场文书
详解CSS开发过程中的20个快速提升技巧
2021/05/21 HTML / CSS
navicat 连接Ubuntu虚拟机的mysql的操作方法
2022/04/02 MySQL
js 实现验证码输入框示例详解
2022/09/23 Javascript