vue+elementui实现表格多级表头效果

本文实例为大家分享了vue+elementui实现表格多级表头的具体代码,供大家参考,具体内容如下

table组件

<template>
  <div class="tableCon" id="tableCon">
    <el-table
    :data="dataSource"
    :height="tableHeight"
    v-loading="loading"
    show-overflow-tooltip
    ref="multipleTable"
    class="multipleTable"
    @selection-change="selectionCchange"
    :key="key">
      <!-- 表格多选框 -->
      <el-table-column
        v-if="selectShow"
        type="selection"
        align="center"
        >
      </el-table-column>
      <!-- 表格单选框 -->
      <el-table-column
        v-if="radioShow && !selectShow">
        <template slot-scope="scope">
          <el-radio v-model="radioVal" @change.native="getRow(scope.row)"></el-radio>
        </template>
      </el-table-column>
      <!-- 序号-自定义序号列 -->
      <el-table-column
        v-if="indexShow"
        type="index"
        align="center"
        label="序号"
        fixed="left"
        :width="indexWidth">
          <template slot-scope="scope">
            <span>{{(page - 1) * size + scope.$index + 1}}</span>
          </template>
      </el-table-column>
      <!-- 表格数据列 -->
      <el-table-column
        align="center"
        v-for="(cloumn,index) in tableCloumns"
        :key="index"
        :label="cloumn.title"
        :prop="cloumn.prop"
        :show-overflow-tooltip="cloumn.tooltipDisplay">
        <!-- 表格枚举 -->
        <template slot-scope="scope">
          <span v-if="cloumn.prop==='status'">{{scope.row.status==='1'?'是':'否'}}</span>
          <span v-else>{{ scope.row[cloumn.prop]}}</span>
        </template>
        <!-- 二级表头 -->
        <template  v-for="(columnChildren,i) in cloumn.children">
          <el-table-column
            :key="i"
            :label="columnChildren.title"
            :prop="columnChildren.prop"
            :show-overflow-tooltip="columnChildren.tooltipDisplay"
            align="center">
            <template slot-scope="scope">
              <!-- 二级表头枚举 -->
              <span v-if="columnChildren.prop==='exit'">{{scope.row.exit==='1'?'是':'否'}}</span>
              <span v-else>{{scope.row[columnChildren.prop] || '--'}}</span>
            </template>
          </el-table-column>
        </template>
      </el-table-column>
      <!-- 操作列 -->
      <el-table-column
        v-if="tableOperaDisplay"
        :width="tableOperaWidth"
        label="操作"
        align="center"
        fixed="right">
        <template slot-scope="scope">
          <span
            class="font-small font-color-light operationSpan"
            v-if="detailOperaDisplay"
            @click="detailOperaHandle(scope.row)"
            >{{ tableOperationText1 }}
            </span>
        </template>
      </el-table-column>
    </el-table>
  </div>
</template>
<script>
import moment from 'moment'
export default {
  props:{
    dataSource:{//表格数据
      type:Array,
      default: () => ([])
    },
    loading:{
      type:Boolean,
      default:false
    },
    selectShow:{//表格多选框
      type:Boolean,
      default:false
    },
    radioShow:{//表格单选框
      type:Boolean,
      default:false
    },
    indexShow:{//序号列
      type:Boolean,
      default:false
    },
    page:{
      type:Number,
      default:1
    },
     size:{
      type:Number,
      default:10
    },
    indexWidth:{//序号列宽度
      type:String,
      default:'100'
    },
    tableCloumns:{//表格数据列
      type:Array,
      default: () => ([])
    },
    tableOperaDisplay:{//表格操作列
      type:Boolean,
      default:false
    },
    detailOperaDisplay:{//操作列详情按钮
      type:Boolean,
      default:false
    },
    tableOperationText1:{
      type:String,
      default:'详情'
    }

  },
  mounted(){

  },
  data (){
    return {
      key:moment().format('YYYY-MM-DD HH:mm:ss'),
      tableHeight:'100%',
      radioVal:''
    }
  },
  methods: {
    detailOperaHandle (rowVal){
      // console.log(rowVal)
      this.$emit('detailOperaHandle',rowVal)
    },
    // 表格多选框事件
    selectionCchange (selectValArr){
      // console.log(selectValArr)
      this.$emit('selectValArr',selectValArr)

    },
    getRow (selectRowObj){
      console.log(selectRowObj)
      this.$emit('getRow',selectRowObj)
    }

  }

}
</script>
<style lang="scss" scoped>
#tableCon{
  height: 100%;
  .multipleTable{
    width: 100%;
    height: 100%;
    overflow: auto;
  }
}
</style>

在需要的页面引入

<template>
  <div id="componentInfo">
    <div class="tableCon">
      <div class="tableArea">
        <tableModule
        :dataSource="tableDatas"
        :tableCloumns="cloumns"
        :loading="false"
        :indexShow="true"></tableModule>
      </div>
    </div>
  </div>
</template>
<script>
import tableModule from '@/components/public-tables'

export default {
  components:{
    tableModule
  },
  props:{

  },
  data (){
    return {
      tableDatas:[
        {name:'小花',sex:'女',age:'19',status:'1',school1:'1',school2:'2',exit:'1'},
        {name:'小朵',sex:'女',age:'19',status:'0',school1:'1',school2:'2',exit:'0'},
        {name:'小花朵',sex:'女',age:'19',status:'1',school1:'1',school2:'2',exit:'1'}],
      cloumns:[
        {
          title:'姓名',
          prop:'name'
        },
        {
          prop:'sex',
          title:'性别'
        },
        {
          prop:'age',
          title:'年龄'
        },
        {
          prop:'status',
          title:'是否在线'
        },
        {
          prop:'school',
          title:'学校',
          children:[
            {
              prop:'school1',
              title:'学校1'
            },
            {
              prop:'school2',
              title:'学校2'
            },
            {
              prop:'exit',
              title:'存在'
            }
          ]
        }
      ]
    }
  }
}
</script>
<style lang="scss" scoped>
#componentInfo{
  width: 100%;
  height: 100%;
  background-color: #fff;
  padding: 10px;
  .tableCon{
    width: 100%;
    height: 100%;
    .tableArea{
      width: 100%;
      height: 100%;
    }
  }
}
</style>

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

(0)

相关推荐

  • vue+elementUI实现点击按钮互斥效果

    本文实例为大家分享了vue+elementUI实现点击按钮互斥的具体代码,供大家参考,具体内容如下 先看看实现的效果吧! 步骤: 一.html代码 <!-- 等级筛选 -->     <div class="level-screening">       <el-button         size="medium"         type="primary"         :class="index

  • vue+elementUI配置表格的列显示与隐藏

    vue+elementUI配置表格的列显示与隐藏,供大家参考,具体内容如下 描述: 表格的列过多时,可以根据需要控制列的显示与隐藏,目前是采用Vue+elementUI(适配Vue3的Element Plus)实现的,具体效果与代码如下: 效果图: 完整代码: <template>   <div id="app">     <el-table :data="tableData" border style="width: 100

  • VUE +Element 实现多个字段值拼接功能

    效果截图: VUE 核心功能代码片段: //获取公共通知列表 getUsers() { let para = { page: this.page, title: this.filters.title }; this.listLoading = true; //NProgress.start(); getNoticeListPage(para).then((res) => { this.total = res.data.total; let str = '' for(let i =0; i <

  • vue elementUI表格控制显示隐藏对应列的方法

    本文实例为大家分享了vue elementUI表格控制显示隐藏对应列的具体代码,供大家参考,具体内容如下 需求:后端返回全部列数据.前端根据选项来显示对应的列,如果不勾选,默认全部隐藏. 效果图 勾选后显示对应的列 上代码 html部分 这里用v-if来显示隐藏,因为这个elementul组件的原因,v-show不生效,要用v-if <el-table-column         v-if="lists[0].ispass"           label="Uppe

  • vue+elementui实现表格多级表头效果

    本文实例为大家分享了vue+elementui实现表格多级表头的具体代码,供大家参考,具体内容如下 table组件 <template>   <div class="tableCon" id="tableCon">     <el-table     :data="dataSource"     :height="tableHeight"     v-loading="loading&q

  • vue+element-ui动态生成多级表头的方法

    vue+element html配置: <div id="table">{{tableData}} <el-table :data="tabledata01" :span-method="tableSpanMethod" max-height="420"> <el-table-column v-for='item in tableConfig' :label="item.label&qu

  • Vue组件库ElementUI实现表格列表分页效果

    ElementUI实现表格列表分页效果教程,供大家参考,具体内容如下 Element UI 是一套采用 Vue 2.0 作为基础框架实现的组件库,一套为开发者.设计师和产品经理准备的基于 Vue 2.0 的组件库,提供了配套设计资源,帮助网站快速成型 <el-pagination>加上@size-change="handleSizeChange.@current-change="handleCurrentChange"处理当前页和当前页数的改变事件 <!--

  • Vue+element-ui 实现表格的分页功能示例

    本文介绍了Vue+element-ui 实现表格的分页功能示例,分享给大家,具体如下: 实现效果如下图所示: template部分: <el-table :data="tempList" :header-cell-style="rowClass" stripe border style="margin-bottom:14px;" :empty-text="emptyText"> <el-table-colum

  • vue实现element表格里表头信息提示功能(推荐)

    如图:在element表格操作一栏需要添加提示功能 实现效果 如图:鼠标浮上去弹出tips 解决方案 1.编写组件 在 promptMessage.vue 文件里面实现 <template> <!-- 处理element表格表头文字提示特别添加全局注册组件 --> <div class="promt-message-tooltip"> <el-tooltip effect="light" placement="le

  • Vue element-ui中表格过长内容隐藏显示的实现方式

    目录 一.el-table表格 二.Popover 弹出框 总结 一.el-table表格 在使用VUE显示后台数据时,经常会遇到数据过长,显示出来的效果很难看,如下图所示: 上图中,红框框出的内容由于长度过长,占据了三行空间,如果内容更多的话,占据行数就更多了,表格中列数一多的话,显出出来的效果会很难看. 为了解决上述问题,我们可以利用<el-table-column>组件提供的一个属性::show-overflow-tooltip='true' 添加该属性,会将过长的部分内容隐藏起来,并且

  • vue element-ui table表格滚动加载方法

    添加全局注册事件,用来监听滚动事件 window.Vue.directive('loadmore', { bind(el, binding) { const selectWrap = el.querySelector('.el-table__body-wrapper') selectWrap.addEventListener('scroll', function() { let sign = 100 const scrollDistance = this.scrollHeight - this.

  • vue elementUI table表格数据 滚动懒加载的实现方法

    在项目中遇到了一个性能问题 vue+elementUI table表格展示数据,当数据很多的时候,不能一页显示完,同时一次请求数据量太大,会增加网页渲染的时间,影响体验, 这个时候常常有两种方法处理, 1.分页,如下 2.如果我不想分页,又想在一页显示全部数据呢?这个时候其实就可以用数据懒加载了 如下一开始表格只显示31行数据 当将滚动条拉到低的时候,就会再加载31条数据,如果剩下的数据不足31,那就加载剩下的 根据项目需求,这需要一页可以看到全部数据,所以我选择了第二中方式 那么第二种方式要怎

  • vue+elementUI中表格高亮或字体颜色改变操作

    重点的代码: :row-style="setRowStyle"这个属性就是在table标签绑定的 :row-style="setRowStyle" // 这个方法直接加到methods里就好了,页面会自动调用的 setRowStyle(row) { if (row.row.isPart == true) { return 'color:blue;' } }, 具体代码: hmtl <el-table width="100%" :data=&

随机推荐