vue Element-ui表格实现树形结构表格


Posted in Vue.js onJune 07, 2021

本文实例为大家分享了Element-ui表格实现树形结构表格的具体代码,供大家参考,具体内容如下

前端效果展示:

vue Element-ui表格实现树形结构表格

在el-table中,支持树类型的数据的显示。当 row 中包含 children 字段时,被视为树形数据。渲染树形数据时,必须要指定 row-key。支持子节点数据异步加载。

通过指定 row 中的 hasChildren 字段来指定哪些行是包含子节点。children 与 hasChildren 都可以通过 tree-props 配置。

row-key="id"和:tree-props="{children: 'children', hasChildren: 'hasChildren'}是必须的。

下面是vue的表格树:

<!--表格-->  
       <el-row>
            <el-table :data="tableData" style="width: 100%;" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                        <el-table-column prop="privilegeName" label="权限名称" >
                        </el-table-column>
                        <el-table-column prop="privilegeCode" label="权限编码" >
                        </el-table-column>
                        <el-table-column prop="privilegeType" label="权限类别" :formatter="formatPrivilegeType" >
                        </el-table-column>
 
                        <el-table-column label="操作">
                            <template slot-scope="scope">
                                
                                <el-button type="primary" size="mini" @click="toAdd(scope)">新增</el-button>
                                <el-button type="primary" size="mini" @click="toEdit(scope)">编辑</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                    <br>
                    <el-pagination
                        @size-change="handleSizeChange"
                        @current-change="handleCurrentChange"
                        :current-page="pagination.pageIndex"
                        :page-sizes="[5, 10, 20, 30, 40]"
                        :page-size=pagination.pageSize
                        layout="total, prev, pager, next"
                        :total=pagination.total>
                    </el-pagination>
</el-row>

后端代码:SpringBoot+MyPlus+MySQL8 实现数据结构查询

前端全部代码:

<style>
</style>
<template>
  <div id="privilege-manager">
   <!--顶部菜单栏-->
    <el-form :inline="true" class="demo-form-inline">
          <el-form-item>
            <el-button
              class="el-icon-refresh"
              type="primary"
              @click="toAdd()">添加
            </el-button>
          </el-form-item>
      </el-form>
      <!--表格-->  
       <el-row>
            <el-table :data="tableData" style="width: 100%;" row-key="id" :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
                        <el-table-column prop="privilegeName" label="权限名称" >
                        </el-table-column>
                        <el-table-column prop="privilegeCode" label="权限编码" >
                        </el-table-column>
                        <el-table-column prop="privilegeType" label="权限类别" :formatter="formatPrivilegeType" >
                        </el-table-column>
 
                        <el-table-column label="操作">
                            <template slot-scope="scope">
                                
                                <el-button type="primary" size="mini" @click="toAdd(scope)">新增</el-button>
                                <el-button type="primary" size="mini" @click="toEdit(scope)">编辑</el-button>
                            </template>
                        </el-table-column>
                    </el-table>
                    <br>
                    <el-pagination
                        @size-change="handleSizeChange"
                        @current-change="handleCurrentChange"
                        :current-page="pagination.pageIndex"
                        :page-sizes="[5, 10, 20, 30, 40]"
                        :page-size=pagination.pageSize
                        layout="total, prev, pager, next"
                        :total=pagination.total>
                    </el-pagination>
        </el-row>
 
 
  </div>
</template>
 
<script>
export default{
    name: 'privilege-manager',
    data () {
     return {
        tableData: [],
        dialogFormEdit: false,
        dialogFormAdd:false,
        privilege: {
          id: '',
          privilegeName: '',
          privilegeCode: '',
          privilegeType: '',
          pid: '0'
        },
        pagination: {
            pageIndex: 1,
            pageSize: 10,
            total: 0,
        }
      }
    },
    methods:{
         init () {
        var self = this
         this.$axios({
            method:'post',
            url:'/api/baoan/privilege/getPage',
            data:{"page":this.pagination.pageIndex,"limit":this.pagination.pageSize, "pid": this.privilege.pid},
            headers:{
                'Content-Type':'application/json;charset=utf-8'      //改这里就好了
          }
        }).then(res => {
           console.log(res);
           self.pagination.total = res.data.datas.data.total;
           self.tableData = res.data.datas.data.records;
        })
          .catch(function (error) {
            console.log(error)
          })
        },
        handleSizeChange(val) {
                console.log(`每页 ${val} 条`);
                this.pagination.pageSize = val;
                this.pagination.pageIndex = 1;
                this.init();
        },
        handleCurrentChange(val) {
                 console.log(`当前页: ${val}`);
                this.pagination.pageIndex = val;
                this.init();
        },
        // 权限类别转换
        formatPrivilegeType: function( row, column) {
                 if(row.privilegeType === '1'){
                     return '目录'
                 } else if(row.privilegeType === '2') {
                     return '菜单'
                 } else if (row.privilegeType === '3') {
                     return '按钮'
                 } else {
                     return ''
                 }
        }
    },
    mounted: function () {
      this.init()
  }
 
 
}
</script>

总结:

一、注意需要在前端表格里面改的是:

vue Element-ui表格实现树形结构表格

二、后端主要改的是:

(1)视图层里面加入视图层集合属性,注意一定要命名为children,这样前端才能渲染成树型结构。

vue Element-ui表格实现树形结构表格

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

Vue.js 相关文章推荐
深入了解Vue3模板编译原理
Nov 19 Vue.js
Vue组件生命周期运行原理解析
Nov 25 Vue.js
Vue用mixin合并重复代码的实现
Nov 27 Vue.js
详解Vue 的异常处理机制
Nov 30 Vue.js
vue3.0中setup使用(两种用法)
Dec 02 Vue.js
在vue中动态修改css其中一个属性值操作
Dec 07 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
Vue3 Composition API的使用简介
Mar 29 Vue.js
vue实现简单数据双向绑定
Apr 28 Vue.js
vue如何批量引入组件、注册和使用详解
May 12 Vue.js
Vue elementUI表单嵌套表格并对每行进行校验详解
Feb 18 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 #Vue.js
vue响应式原理与双向数据的深入解析
vue实现水波涟漪效果的点击反馈指令
vue 实现上传组件
May 31 #Vue.js
vue基于Teleport实现Modal组件
Vue+Element UI实现概要小弹窗的全过程
vue-cli4.5.x快速搭建项目
You might like
PHP中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
php实现图片局部打马赛克的方法
2015/02/11 PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
2016/07/01 PHP
一个JS翻页效果
2007/07/23 Javascript
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
判断访客终端类型集锦
2015/06/05 Javascript
通过JS获取Request.QueryString()参数的值实现方法
2016/09/27 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
JavaScript中的高级函数
2018/01/04 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
[01:04:05]VG vs Newbee 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python使用matplotlib填充图形指定区域代码示例
2018/01/16 Python
Python 循环语句之 while,for语句详解
2018/04/23 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python中pandas模块DataFrame创建方法示例
2018/06/20 Python
pycharm在调试python时执行其他语句的方法
2018/11/29 Python
Python3解释器知识点总结
2019/02/19 Python
Django使用AJAX调用自己写的API接口的方法
2019/03/06 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
Python 远程开关机的方法
2020/11/18 Python
HTML5里autofocus自动聚焦属性使用介绍
2016/06/22 HTML / CSS
比较一下entity bean和session bean
2013/12/27 面试题
工厂实习感言
2014/01/14 职场文书
空中乘务员岗位职责
2014/03/08 职场文书
小学生个人先进事迹材料
2014/05/08 职场文书
商场开业庆典策划方案
2014/06/02 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
php 防护xss,PHP的防御XSS注入的终极解决方案
2021/04/01 PHP
Java实现聊天机器人完善版
2021/07/04 Java/Android
zabbix配置nginx监控的实现
2022/05/25 Servers