vue3+element-plus中的el-table表头和el-table-column内容全部一行显示完整(hook函数)
hook函数封装
export const useTableColumnWidth = _this => {const { refTable } = _thisconst columnWidthObj = ref()const getTableColumnWidth = cb => {nextTick(() => {columnWidthObj.value = {}// 获取行rowsconst tableEle = refTable?.refBaseTable?.$elif (!tableEle) returnconst rows = tableEle.querySelectorAll('.el-table__body-wrapper .el-table__row')if (!rows.length) return// 获取propsconst hideRows = tableEle.querySelectorAll('.hidden-columns div')// 每一行的列总数const cells = rows[0].cellsArray.from(cells).forEach((cell, i) => {// 初始化内容宽度let maxVal = 0// 获取prop属性const prop = hideRows[i].getAttribute('data-prop')if (!prop) return// 计算一列内容最宽的宽度Array.from(rows).forEach(row => {// 将表格列的元素转化为行内元素,最大限度的保持一行显示,从而计算内容的宽度const cellsEle = row.cells[i]cellsEle.style.display = 'inline-block'cellsEle.style.width = '100vw'const cellEle = cellsEle.querySelector('.cell')// 比较一列最长的宽度数值cellEle.style.display = 'inline-block'maxVal = Math.max(cellEle.getBoundingClientRect().width + 1, // 必须用这个方法,否则小数点会被忽略maxVal)// 将表格列的元素恢复为表格布局cellsEle.style.display = 'table-cell'cellsEle.style.width = 'auto'cellEle.style.display = 'block'})columnWidthObj.value[prop] = Math.ceil(maxVal)})cb(columnWidthObj.value)// console.log('this.columnWidthObj', columnWidthObj.value)})}return {columnWidthObj,getTableColumnWidth}
}
自定义组件封装
- BaseTable
<template><el-tableref="refBaseTable"class="dy-list-table"element-loading-background="rgba(0, 0, 0, 0.8)":stripe="stripe"border:height="height":="$attrs"><slot /></el-table>
</template><script setup>
defineProps({height: {type: String,default: '100%'},stripe: {type: Boolean,default: true}
})const refBaseTable = ref(null)defineExpose({refBaseTable
})
</script>
- TableColumn
<template><el-table-columnv-if="hasDefaultSlot":min-width="getMinWidth()":width="cWidth":data-prop="dataProp":="$attrs"><template #default="scope"><slot v-bind="scope" /></template></el-table-column><el-table-columnv-else:min-width="getMinWidth()":width="cWidth":data-prop="dataProp":="$attrs"/>
</template><script setup>
const props = defineProps({dataProp: {type: String,default: ''},width: {type: [String, Number],default: ''}
})const $attrs = useAttrs()
const slots = useSlots()
const cWidth = ref(props.width)const hasDefaultSlot = computed(() => !!slots.default)const getMinWidth = () => {// 表头宽度const minWidth = g_utils.calcTextWidth($attrs.label)// 表头宽度与展示内容宽度对比出最大值let actualWidth = $attrs['column-width']? Math.max(minWidth, $attrs['column-width']): minWidthif ($attrs['show-overflow-tooltip'] !== undefined) {actualWidth += 2}if ($attrs['column-type'] === 'width') {cWidth.value = actualWidth + 10 // 10为随机数return ''} else {if ($attrs.sortable !== undefined) actualWidth += 24return actualWidth}
}
</script>
- 动态计算文本的宽度
export const calcTextWidth = (str = '',style = {fontSize: '16px',fontWeight: 'bold'}
) => {// 新建一个 spanconst span = document.createElement('span')// 设置表头名称span.innerText = str// 设置表头样式span.style.fontSize = style.fontSizespan.style.fontWeight = style.fontWeight// 临时插入 documentdocument.body.appendChild(span)// 重点:获取 span 最小宽度,设置当前列,注意这里加了 20,字段较多时还是有挤压,且渲染后的 div 内左右 padding 都是 10,所以 +20 。(可能还有边距/边框等值,需要根据实际情况加上)const width = span.getBoundingClientRect().width + 25// 移除 document 中临时的 spandocument.body.removeChild(span)return Math.ceil(width) // 存在宽度为小数的情况
}
使用教程
<BaseTableref="refContentTable"v-loading="loading":data="tableData"row-key="imei"style="margin-top: 10px"
><TableColumnalign="center"prop="imei"data-prop="imei":label="$t('public.IMEI')":column-width="columnWidthObj.imei"/>
</BaseTable><script setup>
const loading = ref(false)
const refContentTable = ref(null)
const tableData = ref([])
const columnWidthObj = ref({})const getDeviceList = () => {loading.value = trueapiDeviceList({pageNum: pageNum.value,pageSize: pageSize.value,...listParams.value}).then(({code, data}) => {if (code === '200' && data) {tableData.value = data.itemsuseTableColumnWidth({refTable: refContentTable.value}).getTableColumnWidth(data => {columnWidthObj.value = data})}}).finally(() => {loading.value = false})
}onMounted(() => {getDeviceList()
})
</script>
最终效果图

相关文章:
vue3+element-plus中的el-table表头和el-table-column内容全部一行显示完整(hook函数)
hook函数封装 export const useTableColumnWidth _this > {const { refTable } _thisconst columnWidthObj ref()const getTableColumnWidth cb > {nextTick(() > {columnWidthObj.value {}// 获取行rowsconst tableEle refTable?.refBaseTable?.$elif (!tab…...
Word写论文常用操作的参考文章
1.插入多个引用文献:word中交叉引用多篇参考文献格式[1-2]操作以及显示错误问题 更改左域名,输入 \#"[0" 更改右域名,输入 \#"0]" 2.插入题注:word 中添加图片题注、目录、内部链接 3.插入公式编号&#x…...
深度学习在蛋白质-蛋白质相互作用(PPI)领域的研究进展(2022-2025)
一、蛋白质-蛋白质相互作用(PPI)的定义与生物学意义 蛋白质-蛋白质相互作用(Protein-Protein Interaction, PPI)是指两个或多个蛋白质通过物理结合形成复合物,进而调控细胞信号传导、代谢、免疫应答等生命活动的过程。…...
C++基础知识(三)之结构体、共同体、枚举、引用、函数重载
九、结构体、共同体和枚举 1、结构体的基本概念 结构体是用户自定义的类型,可以将多种数据的表示合并到一起,描述一个完整的对象。 使用结构体有两个步骤:1)定义结构体描述(类型);2ÿ…...
【java】方法的值传递
在 Java 中,方法的值传递 是指将实参的值传递给方法的形参。Java 中只有 值传递,没有引用传递。具体来说: 对于 基本数据类型,传递的是值的副本。 对于 引用数据类型,传递的是引用的副本(即地址的副本&…...
DeepSeek 助力 Vue 开发:打造丝滑的开关切换(Switch)
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
使用Python爬虫实时监控行业新闻案例
目录 背景环境准备请求网页数据解析网页数据定时任务综合代码使用代理IP提升稳定性运行截图与完整代码总结 在互联网时代,新闻的实时性和时效性变得尤为重要。很多行业、技术、商业等领域的新闻都可以为公司或者个人发展提供有价值的信息。如果你有一项需求是要实时…...
Centos搭建python环境
在 CentOS 上配置 Python 环境可以通过以下步骤完成: 1. 检查系统自带 Python 版本 CentOS 7/8 可能已经自带了 Python: python3 --version 如果没有,或者版本过低,可以手动安装。 2. 安装 Python(推荐࿰…...
语言大模型基础概念 一(先了解听说过的名词都是什么)
SFT(监督微调)和RLHF(基于人类反馈的强化学习)的区别 STF(Supervised Fine-Tuning)和RLHF(Reinforcement Learning from Human Feedback)是两种不同的模型训练方法,分别…...
DeepSeek-R1 蒸馏 Qwen 和 Llama 架构 企业级RAG知识库
“DeepSeek-R1的输出,蒸馏了6个小模型”意思是利用DeepSeek-R1这个大模型的输出结果,通过知识蒸馏技术训练出6个参数规模较小的模型,以下是具体解释: - **知识蒸馏技术原理**:知识蒸馏是一种模型压缩技术,核…...
ubuntu服务器 如何配置安全加固措施
下面提供一个更详细、一步步的服务器安全加固指南,适合新手操作。我们将从 Fail2Ban、SSH(密钥认证及端口更改)、Nginx 速率限制和日志轮转四个方面进行优化,同时补充一些额外的安全建议。 新的服务器,通常我们会创建一…...
DeepSeek v3 技术报告阅读笔记
注 本文参考 DeepSeek-v3 / v2 / v1 Technical Report 及相关参考模型论文本文不包括基础的知识点讲解,为笔记/大纲性质而非教程,建议阅读技术报告原文交流可发送至邮箱 henryhua0721foxmail.com 架构核心 核心: MLA 高效推理DeepSeekMOE 更…...
Spring 事务及管理方式
Spring 事务管理是 Spring 框架的核心功能之一,它为开发者提供了一种方便、灵活且强大的方式来管理数据库事务。 1、事务的基本概念 事务是一组不可分割的操作序列,这些操作要么全部成功执行,要么全部失败回滚,以确保数据的一致…...
GESP2024年9月认证C++七级( 第三部分编程题(1)小杨寻宝)
参考程序: #include <bits/stdc.h> using namespace std; const int N 1e510; vector<int> g[N]; // 图的邻接表 int col[N], dep[N], has[N];// 深度优先遍历,计算每个节点的深度 void dfs(int x, int fa) {dep[x] dep[fa] 1; // 计算…...
Pandas数据填充(fill)中的那些坑:避免机器学习中的数据泄露
1. 问题背景 在处理时间序列数据时,经常会遇到缺失值需要填充。Pandas提供了ffill(forward fill)和bfill(backward fill)两种填充方式,但使用不当可能会导致数据泄露,特别是在进行机器学习预测时。 2. 填充方式解析 2.1 基本概念 ffill(forward fill): 用前面的值填充后面的…...
ubuntu 安装vnc之后,本地黑屏,vnc正常
ubuntu 安装vnc之后,本地黑屏,vnc正常 在Ubuntu系统中安装VNC服务器(如TightVNC或RealVNC)后,如果遇到连接时本地屏幕变黑的情况,可能是由于几种不同的配置或兼容性问题。以下是一些解决步骤,可以帮助你解决这个问题&…...
解锁电商数据宝藏:淘宝商品详情API实战指南
在电商蓬勃发展的今天,数据已成为驱动业务增长的核心引擎。对于商家、开发者以及数据分析师而言,获取精准、实时的商品数据至关重要。而淘宝,作为国内最大的电商平台,其海量商品数据更是蕴含着巨大的价值。 本文将带你深入探索淘…...
webshell通信流量分析
环境安装 Apatche2 php sudo apt install apache2 -y sudo apt install php libapache2-mod-php php-mysql -y echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/info.php sudo ufw allow Apache Full 如果成功访问info.php,则环境安…...
在 rtthread中,rt_list_entry (rt_container_of) 已知结构体成员的地址,反推出结构体的首地址
rt_list_entry (rt_container_of)宏定义: /*** rt_container_of - return the start address of struct type, while ptr is the* member of struct type.*/ #define rt_container_of(ptr, type, member) \((type *)((char *)(ptr) - (unsigned long)(&((type *…...
趣味魔法项目 LinuxPDF —— 在 PDF 中启动一个 Linux 操作系统
最近,一位开源爱好者开发了一个LinuxPDF 项目(ading2210/linuxpdf: Linux running inside a PDF file via a RISC-V emulator),它的核心功能是在一个 PDF 文件中启动并运行 Linux 操作系统。它通过巧妙地使用 PDF 文件格式中的 Ja…...
DeepSeek教unity------MessagePack-03
数据契约兼容性 你可以使用 [DataContract] 注解代替 [MessagePackObject]。如果类型用 DataContract 进行注解,可以使用 [DataMember] 注解代替 [Key],并使用 [IgnoreDataMember] 代替 [IgnoreMember]。 然后,[DataMember(Order int)] 的…...
【Linux】Socket编程—TCP
🔥 个人主页:大耳朵土土垚 🔥 所属专栏:Linux系统编程 这里将会不定期更新有关Linux的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目…...
新数据结构(9)——Java异常体系
异常的种类 程序本身通常无法主动捕获并处理错误(Error),因为这些错误通常表示系统级的严重问题,但程序可以捕获并处理异常(Excrption),而Error则被视为一种程序无法或不应尝试恢复的异常类型。…...
一种 SQL Server 数据库恢复方案:解密、恢复并导出 MDF/NDF/BAK文件
方案特色 本方案可以轻松恢复和导出SQL数据库:MDF、NDF 和 BAK 文件。 恢复和导出SQL数据库:主(MDF),辅助(NDF)和备份(BAK)文件分析 SQL Server LOG 数据库事务日志将 …...
NixHomepage - 简单的个人网站
💻 NixHomepage - 简单的个人网站 推荐下个人的开源项目,演示网站,项目链接 https://github.com/nixgnauhcuy/NixHomepage,喜欢的话可以为我的项目点个 Star~ 📷 预览 ⚙️ 功能特性 多平台适配 明亮/暗黑模式切换 W…...
HCIA项目实践---OSPF的知识和原理总结
9.5 OSPF 9.5.1 从哪些角度评判一个动态路由协议的好坏? (1)选路佳(是否会出环) OSPF 协议采用链路状态算法,通过收集网络拓扑信息来计算最短路径,从根本上避免了路由环路的产生。 (…...
Calico网络组件本地部署支持IPv6(Kubernetes)
知其然 问题背景 因项目现场的网络正逐步从IPv4向IPv6迁移,这几年现场服务器基本上都配置了双栈;但随着IPv6铺开,出现了很多纯IPv6的服务器,并且要求通信优先使用IPv6。 在项目建设之初,其实就考虑了上述情况&#…...
【广州大学主办,发表有保障 | IEEE出版,稳定EI检索,往届见刊后快至1个月检索】第二届电气技术与自动化工程国际学术会议 (ETAE 2025)
第二届电气技术与自动化工程国际学术会议 (ETAE 2025) The 2nd International Conference on Electrical Technology and Automation Engineering 大会官网:http://www.icetae.com/【更多详情】 会议时间:2025年4月25-27日 会议地点:…...
Python项目31:待办事项列表应用1.0(命令行界面+Json+类+初学者必做)
------------★Python练手项目源码★------------ Python项目27:用Tkinter写日志管理系统(中下等难度) Python项目26:设计学生成绩管理系统(简易版) Python项目25:带滚动效果的商场抽奖系统&…...
Redis 01 02章——入门概述与安装配置
一、入门概述 (1)是什么 Redis:REmote Dictionary Server(远程字典服务器)官网解释:Remote Dictionary Server(远程字典服务)是完全开源的,使用ANSIC语言编写遵守BSD协议,是一个高…...
