详解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加ASP二级域名转向的代码
May 17 Javascript
Firebug入门指南(Firefox浏览器)
Aug 21 Javascript
javascript操作Cookie(设置、读取、删除)方法详解
Mar 18 Javascript
JavaScript仿百度图片浏览效果
Nov 23 Javascript
BootstrapValidator超详细教程(推荐)
Dec 07 Javascript
微信小程序 Button 组件详解及简单实例
Jan 10 Javascript
Angular中ng-options下拉数据默认值的设定方法
Jun 21 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
JS与SQL方式随机生成高强度密码示例
Dec 29 Javascript
微信小程序时间戳转日期的详解
Apr 30 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
Sep 25 Javascript
创建nuxt.js项目流程图解
Mar 13 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中用文本文件做数据库的实现方法
2008/03/27 PHP
php curl获取网页内容(IPV6下超时)的解决办法
2013/07/16 PHP
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
PHP PDOStatement::bindColumn讲解
2019/01/30 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
JAVASCRIPT 对象的创建与使用
2021/03/09 Javascript
syntaxhighlighter 使用方法
2007/07/02 Javascript
javascript 必知必会之closure
2009/09/21 Javascript
浅谈JavaScript编程语言的编码规范
2011/10/21 Javascript
JS中setTimeout()的用法详解
2013/04/14 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
浅谈JS函数定义方式的区别
2016/10/30 Javascript
使用原生的javascript来实现轮播图
2017/02/24 Javascript
Vuex之理解Getters的用法实例
2017/04/19 Javascript
详解nodejs通过代理(proxy)发送http请求(request)
2017/09/22 NodeJs
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
vue 设置proxyTable参数进行代理跨域
2018/04/09 Javascript
JSON基本语法及与JavaScript的异同实例分析
2019/01/04 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
python3 对list中每个元素进行处理的方法
2018/06/29 Python
Python引用计数操作示例
2018/08/23 Python
python 获取等间隔的数组实例
2019/07/04 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
端午节活动总结
2014/08/26 职场文书
银行员工犯错检讨书
2014/09/16 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
MySQL 数据 data 基本操作
2022/05/04 MySQL