页面表格高度自适应

news2025/1/17 4:09:04

前言

  • 现在后端管理系统主页面基本都是由三部分组成
    • 查询条件,高度不固定,可能有的页面查询条件多,有的少
    • 表格,高度不固定,占据页面剩余高度
    • 分页,高度固定
  • 这三部分加起来肯定是占满全屏的,那么我们可以结合flex布局,来实现。

代码及效果

app.vue

  • 相当于页面首页
<template>
	<div id="app">
		<!-- 假设为页头内容,导航等...-->
		<div class="routers">
			<router-link :to="item.path" v-for="item in routerLinks" :key="item.name">{{ item.name }}</router-link>
		</div>
		<!-- 内容区域 -->
		<div class="content">
			<router-view />
		</div>
	</div>
</template>
<script>
export default {
	data() {
		return {
			routerLinks: [],
		};
	},
	created() {
		this.handleRouterLink();
	},
	methods: {
		handleRouterLink() {
			// 获取所有路由配置
			this.routerLinks = this.$router.getRoutes();
		},
	},
};
</script>

<style lang="scss" scoped>
#app {
	height: 100vh;
	display: flex;
	flex-direction: column;
}
.routers {
	display: flex;
	justify-content: space-around;
}
/* 确定内容高度,好让业务组件的 height:100%生效 */
.content {
	flex: 1;
}
</style>

test.vue

  • 某业务表格组件
<!-- 表格高度自适应 -->
<template>
	<div class="wrapper">
		<!-- 查询条件 -->
		<div class="searchView">
			<div class="formItem" v-for="(item, index) in formNum" :key="index"></div>
		</div>
		<!-- 表格 -->
		<div class="tableView" :key="tableKey">
			<el-table :data="tableData" ref="myTable" style="width: 100%" :height="tableHeight">
				<el-table-column prop="date" label="日期" width="180"> </el-table-column>
				<el-table-column prop="name" label="姓名" width="180"> </el-table-column>
				<el-table-column prop="address" label="地址"> </el-table-column>
			</el-table>
		</div>
		<!-- 分页 -->
		<div class="pageView">
			<el-pagination
				:pager-count="5"
				@size-change="handleSizeChange"
				@current-change="handleCurrentChange"
				:current-page.sync="currentPage2"
				:page-sizes="[100, 200, 300, 400]"
				:page-size="100"
				layout="sizes, prev, pager, next"
				:total="1000"
			>
			</el-pagination>
		</div>
	</div>
</template>
<script>
export default {
	data() {
		return {
			// 表格key,当表格height变化时,el-table无法重新渲染,只能刷新key,强制渲染表格组件
			tableKey: 0,

			// 当前页数
			currentPage2: 1,

			// 查询条件数量
			formNum: 4,

			// 表格高度
			tableHeight: 500,

			// 表格数据
			tableData: [
				{
					date: '2016-05-02',
					name: '王小虎',
					address: '上海市普陀区金沙江路 1518 弄',
				},
				{
					date: '2016-05-04',
					name: '王小虎',
					address: '上海市普陀区金沙江路 1517 弄',
				},
				{
					date: '2016-05-01',
					name: '王小虎',
					address: '上海市普陀区金沙江路 1519 弄',
				},
				{
					date: '2016-05-03',
					name: '王小虎',
					address: '上海市普陀区金沙江路 1516 弄',
				},
			],
		};
	},

	async mounted() {
		this.handleTableHeight();

        // 当浏览器大小修改时,同时动态修改表格高度
		window.onresize = this.getDebounce(this.handleTableHeight, 500);
	},
	methods: {
		// 处理表格高度修改事件
		async handleTableHeight() {
			this.tableHeight = 0;
			await this.$nextTick();
			const tableView = document.querySelector('.tableView');
			this.tableHeight = tableView.clientHeight;
			console.log('tableHeight', this.tableHeight);
			this.tableKey++;
		},

		handleSizeChange(val) {
			console.log(`每页 ${val}`);
		},
		handleCurrentChange(val) {
			console.log(`当前页: ${val}`);
		},

		// 生成一个debounce函数,避免事件频繁除法
		getDebounce(func, delay) {
			let timer = null;
			return function (...args) {
				if (timer) {
					clearTimeout(timer);
				}
				timer = setTimeout(() => {
					func.apply(this, args);
				}, delay);
			};
		},
	},
};
</script>
<style lang="scss" scoped>
/* 以下样式皆可写到全局文件中,每个页面布局基本一致 */
.wrapper {
	display: flex;
	flex-direction: column;
	height: 100%;
	.searchView {
		display: flex;
		flex-wrap: wrap;
		gap: 10px 20px;
		.formItem {
			width: 230px;
			height: 30px;
			border: 1px solid #000;
		}
	}

	.tableView {
		flex: 1;
	}
}
</style>

效果

在这里插入图片描述

思路

  • 首先整个内容主页面.wrapper肯定是flex,并且纵向布局,高度100%。
  • 其次,我们要分别在查询条件、表格、分页外层套一层div,这样好进行样式管理。
  • 内容主页面肯定主要展示的是表格,那么我们就给表格外层的divtableView设置flex: 1;,占据剩余所有高度
  • 当页面加载完成的时候,由于是flex布局,表格的高度(剩余高度)就是wrapper的高度100% - searchView的高度 - pageView的高度
  • 然后我们在mounted钩子函数中,获取.tableViewdiv的clientHeight高度,这个值,就能作为表格的高度了。
  • 最后我们把这个高度值赋值给表格el-table的height属性,并且刷新key,强制表格重新渲染以达到效果。
  • 最最后,我们给window.onresize绑定了事件,并且优化了使用防抖,当浏览器大小修改的时候,页面也会动态自适应高度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1280881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openEuler学习05-ssh升级到openssh-9.5p1

openEuler的版本是openEuler 20.03&#xff0c;ssh的版本是OpenSSH_8.2p1 [roottest ~]# more /etc/os-release NAME"openEuler" VERSION"20.03 (LTS-SP3)" ID"openEuler" VERSION_ID"20.03" PRETTY_NAME"openEuler 20.03 (LTS-…

Python安装步骤介绍

本文将介绍Python安装的详细步骤如下&#xff1a; 下载 python安装 python配置环境变量&#xff08;安装时勾选配置环境变量的则无需此步骤&#xff09; 一、python下载 官网&#xff1a;Download Python | Python.org 根据电脑位数下载所需的版本 二、Python安装 1.打开安…

基于深度学习面向中医诊断的舌象图像分割系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 中医舌诊是通过观察舌的各种特征来了解人体的健康状况&#xff0c;从而对各种疾病做出诊断及病情评估&#xff0c;是传统中国医学应用最广、最有价值的诊法之一。…

[C/C++]数据结构 关于二叉树的OJ题(利用分治思想解决难题)

题目一: 单值二叉树 &#x1f6a9;⛲&#x1f31f;⚡&#x1f966;&#x1f4ac; &#x1f6a9;题目链接:力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 ⛲题目描述: 如果二叉树每个节点都具有相同的值&#xff0c;那么该二叉树就是单值二叉树。…

每日一题:LeetCode-209. 长度最小的子数组(滑动窗口)

每日一题系列&#xff08;day 11&#xff09; 前言&#xff1a; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f308; &#x1f50e…

一文弄懂BFS【广度优先搜索(Breadth-First Search)】

BFS&#xff0c;全名为广度优先搜索(Breadth-First Search)&#xff0c;是一种用于图或树的遍历或搜索的算法。它的主要思想是由节点自身开始向它的邻居节点新进展开搜索&#xff0c;因此也常被形象地称为“层序遍历”。 BFS 基本思想 BFS 工作原理是&#xff0c;从开始节点开…

shell命令编写

1. 1 #!/bin/bash 2 3 directory_path"/txh"4 5 # 使用 find 命令查找指定路径下的文件&#xff0c;并使用 wc 命令统计行数&#xff08;即文件个数&#xff09;6 7 file_count$(find "directory_path" -type f | wc -l)8 9 10 echo "在路径$director…

Wireshark 协议插件Lua开发 -数据包内嵌协议的解释

概述 因为公司项目涉及的协议打包&#xff0c;协议包内又嵌了一层IP包的奇葩套娃结构&#xff0c;为了方便抓包调试&#xff0c;利用Wireshark的协议插件开发功能&#xff0c;写了一个插件&#xff0c;博文记录以备忘。 环境信息 Wireshark 4.0.3 协议结构体套娃图 插件安装…

Prime 1.0

信息收集 存活主机探测 arp-scan -l 或者利用nmap nmap -sT --min-rate 10000 192.168.217.133 -oA ./hosts 可以看到存活主机IP地址为&#xff1a;192.168.217.134 端口探测 nmap -sT -p- 192.168.217.134 -oA ./ports UDP端口探测 详细服务等信息探测 开放端口22&#x…

轻盈悦耳的运动型气传导耳机,还有条夜跑灯,哈氪聆光体验

我平时出门不管是散步、骑行&#xff0c;还是坐公交的时候&#xff0c;都喜欢戴上耳机听音乐&#xff0c;这可以让我放松心情。现在市面上的耳机还是以真无线为主&#xff0c;选择虽多&#xff0c;但不适合户外使用&#xff0c;听不见外界的声音&#xff0c;运动时还容易脱落&a…

软件工程单选多选补充

2. 4. 5. 6. 7. 8. 9. 10. 12。 13.

软件设计模式原则(三)单一职责原则

单一职责原则&#xff08;SRP&#xff09;又称单一功能原则。它规定一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变&#xff0c;那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原…

锁表的原因及解决办法

引言 作为开发人员&#xff0c;我们经常会和数据库打交道。 当我们对数据库进行修改操作的时候&#xff0c;例如添加字段&#xff0c;更新记录等&#xff0c;没有正确评估该表在这一时刻的使用频率&#xff0c;直接进行修改&#xff0c;致使修改操作长时间无法响应&#xff0…

【【Micro Blaze 的 最后补充 与 回顾 】】

Micro Blaze 的 最后补充 与 回顾 Micro Blaze 最小系统 以 MicroBlaze 为核心、LocalMemory&#xff08;片上存储&#xff09;为内存&#xff0c;加上传输信息使用的 UART串口就构成了嵌入式最小系统。当程序比较简单时&#xff0c;Local Memory 可以作为程序的运行空间以及…

OCR原理解析

目录 1.概述 2.应用场景 3.发展历史 4.基于传统算法的OCR技术原理 4.1 图像预处理 4.1.1 灰度化 4.1.2 二值化 4.1.3 去噪 4.1.4 倾斜检测与校正 4.1.4.2 轮廓矫正 4.1.5 透视矫正 4.2 版面分析 4.2.1 连通域检测文本 4.2.2 MSER检测文本 4.3 字符切割 4.3.1 连…

Excel 分列功能

一. 需求 ⏹有一段文本&#xff0c;文本一共有7列。这7列文本之间的分隔符不相同 有一个空格的有多个空格的有Tab的jmw_state 和 method 之间用 & 连接 现在要求&#xff0c;将这段文本粘贴到Excel中&#xff0c;进行分列。并且需要将 jmw_state 和 method 也进行分列 也…

LASSO vs GridSearchCV

LASSO VS GridSearchCV LASSO定义目的使用方法原理示例总结 GridSearchCV定义目的使用方法原理网格搜索&#xff08;Grid Search&#xff09;交叉验证&#xff08;Cross-Validation&#xff09;总结 示例总结 总结 LASSO 定义 LASSO&#xff08;Least Absolute Shrinkage and…

机器人阻抗控制性能及其实验验证

Impedance Control 机器人阻抗控制是一种控制方法&#xff0c;其目的是构建一个系统使得执行器&#xff08;如机械臂&#xff09;能同时控制力和位置。它基于阻抗模型&#xff0c;通过调节机器人的行为&#xff0c;以维持理想的动态关系。这种动态关系可以理解为机器人末端位置…

【微信小程序】上传头像 微信小程序内接小程序客服

这里写目录标题 微信小程序上传头像使用button按钮包裹img 微信小程序内接小程序客服使用button按钮跳转客服 微信小程序上传头像 使用button按钮包裹img 原本思路是只使用image标签再加上chooseImg&#xff0c;但发现使用button标签上传头像这种方法更实用。微信小程序文档上…

钉钉聊天审计软件有哪些

钉钉在企业中的广泛应用&#xff0c;聊天审计软件也日益受到关注。这类软件主要针对企业微信、钉钉等即时通讯工具&#xff0c;对其中的聊天记录进行审计&#xff0c;以便企业能够更好地管理员工的在线行为&#xff0c;并保障信息安全。 一、聊天审计软件的作用 1、监管员工行…