vue项目 解决el-table自适应高度,vue页面不显示多条滚动条,超出的部分让el-table内部出现滚动条(推荐使用第二种解决方案;TAdaptivePage 组件新增左右分栏布局)

文章介绍了如何在后台管理系统中使整个页面无滚动条,而让表格内部自适应高度显示滚动条。提供了两种解决方案:一是通过监听窗口大小变化调整表格高度,二是使用TAdaptivePage组件实现。并给出了相关代码示例和Demo地址。
摘要由CSDN通过智能技术生成

一、需求

后台管理系统:最常见的页面都是由—>左侧菜单、头部+tabView页签、主体数据渲染页面(AppMain);而一般AppMain页面又分为: 搜索区域、table数据(分页),可能也会存在底部(footer);大体样子如下:
在这里插入图片描述

具体需求就是:整个页面不出现滚动条,而超出的部分让table自适应高度(即:让table内部出现滚动条),从而让整个页面一屏显示完整。

二、最终效果

在这里插入图片描述

三、第一种解决方案(推荐使用第二种)

1、解决思路

在这里插入图片描述

1、table–title高度及模块之间的padding、margin是固定的高度
2、搜索区域是不固定的,因为搜索条件每个界面是不固定的(搜索有收起展开的功能,每次切换后需要重新获取高度)
3、当界面大小改变时,用window.onresize事件监听,在监听事件里重新设置表格的高度

综合以上:table内容高度 = appMain高度(即t-layout-page组件的高度) - 搜索区域高度 - table分页高度 - table存在横向滚动的高度 - 固定高度

2、注意:以下实现的方法是根据基于element再次封装的t-ui组件来操作,其整体布局结构如下:

在这里插入图片描述

3、在src下新建mixins文件夹,在新建onResize.js文件,代码如下

export default {
  data() {
    return {
      otherHeight: 0, // t-table是否有分页
      isHorizontalScroll: false, // t-table是否存在横向滚动条
      queryHeight: 0, // 搜索高度
      tableHeight: 0 // 表格高度
    }
  },
  mounted() {
    this.getTableHeight()
  },
  activated() {
    this.getTableHeight()
  },
  methods: {
    // 自适应高度
    getTableHeight() {
      this.$nextTick(() => {
        this.getFinHeight()
      })
      window.onresize = () => {
        this.getFinHeight()
      }
      this.$on('hook:beforeDestroy', () => {
        window.onresize = null
      })
      this.$on('hook:deactivated', () => {
        window.onresize = null
      })
    },
    // 获取最终高度
    getFinHeight() {
      this.otherHeight = this.isShowPagination ? 54 : 0
      // t-table是否存在横向滚动条
      this.isHorizontalScroll = document.getElementById('t_table').getElementsByClassName('el-table__header')[0].scrollWidth > document.getElementById('t_table').scrollWidth
      const scrollHeight = this.isHorizontalScroll ? 17 : 0
      // console.log('scrollHeight', scrollHeight)
      this.queryHeight = document.getElementById('t_query_condition').clientHeight
      // console.log('this.queryHeight', this.queryHeight)
      this.tableHeight = document.getElementById('t_layout_page').clientHeight - this.queryHeight - this.otherHeight - scrollHeight - 135
    }
  }
}

4、在页面中使用

1、给t-table组件设置max-height属性----其值是tableHeight
2、给t-query-condition组件设置@openCilck事件

import onResize from '@/mixins/onResize'
export default {
  mixins: [onResize],
   .....
  methods: {
   // 每次点击搜索区域的收起和展开,需要重新调用getTableHeight方法
    openCilck() {
      this.getTableHeight()
    },
   .....
  }
}

四、第二种解决方案(使用TAdaptivePage组件)

1、效果

在这里插入图片描述

2023-12-07 TAdaptivePage 组件新增左右分栏布局,效果如下:

在这里插入图片描述

2、具体使用示例代码(详情请参考源码)

继承TQueryCondition—查询条件TTable组件的所有属性与事件

<t-adaptive-page
    :opts="opts"
    @submit="conditionEnter"
    title="工厂物料清单管理"
    isCopy
    :table="table"
    :columns="table.columns"
    :isShowPagination="isShowPagination"
  />

五、demo地址(npm run serve运行)

GitHub源码地址

Gitee源码地址

相关文章

基于ElementUi或Antd再次封装基础组件文档

vue3+ts基于Element-plus再次封装基础组件文档

  • 17
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Vue2.0和ElementUI2.0中使用el-table表格组件时,自适应高度可以通过以下步骤来实现: 1. 确定数据源 首先,我们需要确定用于填充表格的数据源。在el-table中,数据通常以数组的形式传递,其中每个数组元素代表表格中的一行数据。 2. 计算表格高度Vue中,我们可以使用计算属性来动态计算表格的高度。计算属性会根据数据源的变化自动更新表格高度。例如,我们可以使用下面的代码来计算表格高度: computed: { tableHeight: function() { // 获取窗口可见区域高度 var viewportHeight = window.innerHeight; // 计算表格头和分页组件高度 var tableHeaderHeight = this.$refs.table.$el.querySelector('.el-table__header-wrapper').offsetHeight; var paginationHeight = this.$refs.pagination.$el.offsetHeight; // 计算表格内容区域的高度 var contentHeight = viewportHeight - tableHeaderHeight - paginationHeight - 20; return contentHeight; } } 在上面的代码中,我们首先获取窗口可见区域的高度,然后根据表格头和分页组件高度计算表格内容区域的高度。最后,将计算出的高度返回。 3. 绑定表格高度 我们将计算属性中计算出的表格高度绑定到el-table组件中的height属性上,以实现自适应高度。例如,我们可以使用下面的代码将表格高度绑定到el-table组件上: <el-table :data="tableData" ref="table" :height="tableHeight"> 在上面的代码中,我们首先使用data属性传递数据源,然后使用ref属性给el-table组件添加一个引用,最后使用height属性将计算属性中计算出的表格高度绑定到组件上。 通过上述方法,我们可以在Vue2.0和ElementUI2.0中实现自适应高度el-table表格组件
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wocwin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值