详解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 相关文章推荐
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
Jul 25 Javascript
js获取dom的高度和宽度(可见区域及部分等等)
Jun 13 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
Aug 13 Javascript
jQuery插件windowScroll实现单屏滚动特效
Jul 14 Javascript
全面解析Bootstrap手风琴效果
Apr 17 Javascript
javascript仿百度输入框提示自动下拉补全
Jan 07 Javascript
实例解析jQuery工具函数
Dec 01 Javascript
浅谈html转义及防止javascript注入攻击的方法
Dec 04 Javascript
D3.js实现简洁实用的动态仪表盘的示例
Apr 04 Javascript
详解BootStrap表单验证中重置BootStrap-select验证提示不清除的坑
Sep 17 Javascript
vue中activated的用法
Jan 03 Vue.js
CocosCreator入门教程之网络通信
Apr 16 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 json格式和js json格式 js跨域调用实现代码
2012/09/08 PHP
php 删除目录下N分钟前创建的所有文件的实现代码
2013/08/10 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
php 数组随机取值的简单实例
2016/05/23 PHP
php使用array_chunk函数将一个数组分割成多个数组
2018/12/05 PHP
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
50款非常棒的 jQuery 插件分享
2012/03/29 Javascript
查找页面中所有类为test的结点的方法
2014/03/28 Javascript
JS实现简单的右下角弹出提示窗口完整实例
2016/06/21 Javascript
微信小程序--组件(swiper)详细介绍
2017/06/13 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
SVG实现时钟效果
2018/07/17 Javascript
在Create React App中使用CSS Modules的方法示例
2019/01/15 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
2019/02/21 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
Vue3.0数据响应式原理详解
2019/10/09 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
vue router返回到指定的路由的场景分析
2020/11/10 Javascript
js实现扫雷源代码
2020/11/27 Javascript
用Python的SimPy库简化复杂的编程模型的介绍
2015/04/13 Python
Python的装饰器用法学习笔记
2016/06/24 Python
Python常见数据结构之栈与队列用法示例
2019/01/14 Python
python dict 相同key 合并value的实例
2019/01/21 Python
实现ECharts双Y轴左右刻度线一致的例子
2020/05/16 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
香港太阳眼镜网上商店:SmartBuyGlasses香港
2016/07/22 全球购物
瑞典网上购买现代和复古家具:Reforma
2019/10/21 全球购物
财务会计毕业生个人求职信
2014/02/03 职场文书
植树节活动总结
2014/04/30 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
教师党员个人总结
2015/02/10 职场文书
入党积极分子党小组意见
2015/06/02 职场文书
MYSQL如何查看操作日志详解
2022/05/30 MySQL