vue3 实现关于 el-table 表格组件的封装以及调用

一、示例图:

二、组件

<template><div class="sn-table" :class="props.colorType === 1 ? '' : 'bg-scroll'"><el-table :data="tableData" :row-class-name="tableRowClassName" height="500" style="width: 100%;":default-sort="[{ prop: '正确率', order: 'descending' },{ prop: '未答题数', order: 'descending' }]":class="props.colorType === 1 ? '' : 'bg-scroll'"><el-table-column align="center" :prop="item.keyName":sortable="item.keyName==='正确率'&&props.isExistSelect||item.keyName==='未答题数'&&props.isExistSelect?true:false":label="item.keyName" v-for="item in columns":width="item.width ? item.width + 'px' : ''"><template #default="scope"><div v-if="item.keyName==='正确率'&&props.isExistSelect" class="tag-list"><el-progress :percentage="scope.row[item.keyName]" color="#00B386" :stroke-width="10" :text-inside="false"/></div></template></el-table-column></el-table></div>
</template>
<script lang='ts' setup>
type TProps = {tableData: any[]columns: any[],colorType: number, // 颜色类型isExistSelect: boolean // 是否存在筛选项
}
const props = withDefaults(defineProps<TProps>(), {})const tableRowClassName = ({ rowIndex }: { rowIndex: number }) => {if (rowIndex % 2 === 1) {return props.colorType === 1 ? 'odd-row' : 'class-odd-row'} else {return props.colorType === 1 ? 'even-row' : 'class-even-row'}
}
</script>
<style lang='scss' scoped>
.bg-scroll {border-radius: 10px;height: 96%;overflow-y: scroll;&::-webkit-scrollbar {width: 5px;height: 0 !important;}&::-webkit-scrollbar-thumb {border-radius: 10px;background: #eeeeee;}
}.sn-table {padding: 0 10px 0 20px;:deep(.el-table) {color: #ffffff !important;tr {td {border: none;padding: 16px 0;font-size: 15px;}}th.el-table__cell {background: #141414 !important;border: none;color: #00B386;font-size: 14px;font-weight: 400;}.even-row {background-color: #333 !important;}.odd-row {background-color: #141414 !important;}.class-even-row {background-color: #333 !important;}.class-odd-row {background-color: #00B386 !important;}}:deep(.el-scrollbar__wrap--hidden-default) {background: #141414 !important;}:deep(.el-table--enable-row-hover) {.el-table__body {tr:hover>td.el-table__cell {color: #8C8C8C;background: #333 !important;}}}:deep(.el-table__inner-wrapper) {&::before {background-color: transparent;}}:deep(.el-table .ascending .sort-caret.ascending){border-bottom-color:#00B386 !important;}:deep(.el-table .descending .sort-caret.descending){border-top-color:#00B386 !important;}.ok-text{font-size: 35px;font-weight: 300;}.tag-list{width: 100%;padding: 2px 0;.tag-btn{border-radius: 5px;border: 1px solid #EF8714;color: #EF8714;padding: 1px 10px;margin-right: 15px;&:last-child{margin-right: 0;}}}
}
:deep(.el-progress){width: 185px;margin: 0 auto;
}
:deep(.el-progress__text){span{font-size: 16px;}
}
:deep(.el-progress-bar__outer){background: #D9D9D9;
}
</style>

三、页面调用

<details-table :tableData="knowInfo" :columns="knowColumns" :isExistSelect="false" :colorType="1"/><script setup lang="ts">
import { onMounted, ref } from 'vue'
import CanvasVideo from "@/components/CanvasVideo.vue"const knowInfo = ref<any[]>([])
const knowColumns = ref<any[]>([])onMounted(()=>{init()
})//数据处理
const init = () => {const datas = ref([{studentName:'陈佳颖',correctRate:0,noAnswerCount:13},{studentName:'丁靖芸',correctRate:0,noAnswerCount:13},{studentName:'谷雨恒',correctRate:0,noAnswerCount:13},{studentName:'欧阳江源',correctRate:0,noAnswerCount:13},{studentName:'任行宽',correctRate:0,noAnswerCount:13},{studentName:'任彦宇',correctRate:0,noAnswerCount:13},{studentName:'王骁南',correctRate:0,noAnswerCount:13},{studentName:'吴骏扬',correctRate:0,noAnswerCount:13}])if (datas && datas.length > 0) {datas.forEach((it: any, index:number) => {knowInfo.value.push({'行号': index+1,'姓名': it.studentName,'正确率': it.correctRate,'未答题数': it.noAnswerCount})})for (const key in knowInfo.value[0]) {knowColumns.value.push({keyName: key,width: key === '行号' ? 140 : null})}}
}</script>

四、其他

(1)自定义标题

<el-table :data="datas" style="width: 100%;"><el-table-column label="" prop="name" align="center"><template #header>姓名</template></el-table-column>
</el-table>

(2)自定义下标

<el-table :data="datas" style="width: 100%;"><el-table-column label="行号" align="center"><template #default="{$index}">{{$index+1}}</template></el-table-column>
</el-table>

(3)自定义内容

<el-table :data="datas" style="width: 100%;"><el-table-column label="姓名" prop="name" align="center"><template #default="scope"><div>{{scope.row.name}}s</div></template></el-table-column>
</el-table>

(4)添加排序(升序、降序)

<el-table :data="datas" style="width: 100%;":default-sort="[{ prop: 'rank', order: 'descending' },{ prop: 'time', order: 'descending' }]"><el-table-column label="排名" prop="rank" sortable align="center"/><el-table-column label="时长" prop="time" sortable align="center"/>
</el-table>

       希望我的愚见能够帮助你哦~,若有不足之处,还望指出,你们有更好的解决方法,欢迎大家在评论区下方留言支持,大家一起相互学习参考呀~

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

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

相关文章

DevOps(8)

目录 36.当发出的命令与上次使用时产生的结果不同时&#xff0c;会出现什么问题&#xff1f; 37./usr /local的内容是什么&#xff1f; 38.你如何终止正在进行的流程&#xff1f; 39.如何在命令行提示符中插入注释&#xff1f; 40.什么是命令分组以及他是如何工作的&…

云卷云舒:【实战篇】Redis迁移

1. 简介 Remote Dictionary Server(Redis)是一个由Salvatore Sanfilippo写的key-value存储系统&#xff0c;是一个开源的使用ANSIC语言编写、遵守BSD协议、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 2. 迁移原理 redis-sh…

什么是 RFID 及其工作原理?

一、自动识别技术 自1999年麻省理工学院研究人员的首创开始&#xff0c;自动识别技术&#xff08;简称auto-ID&#xff09;的领域不断扩大。自动识别技术形成了多种技术路线&#xff0c;使我们能够自动、精确地捕获、识别和存储与物体、物品或个人相关的数据&#xff0c;从而减…

Selenium-java 定位元素时切换iFrame时的方法

具体方法如下图所示&#xff0c;如果iFrame中嵌套多层iFrame需要逐层定位到需要的那一层iFrame,完成操作后&#xff0c;执行该代码&#xff1a;driver.switchTo() .defaultContent() ; 是返回最顶部的frame

理解二叉树的遍历(算法村第七关白银挑战)

二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,2,3]解 LeetCode以及面试中提供的方法可能…

科普:嵌入式多核并行仿真

自信息技术革命以来&#xff0c;计算机一直被应用在各种复杂的数据处理中&#xff0c;如火箭弹道&#xff0c;高能物理和生物学数据等。随着嵌入式领域的多样化需求的不断丰富&#xff0c;多核CPU的应用也越来越广泛&#xff1a;嵌入式系统通常需要同时处理多个任务和实时数据&…

ChatGPT是什么,海鲸AI软件功能有哪些

ChatGPT是一种基于人工智能的对话生成技术&#xff0c;它利用深度学习模型来理解和生成自然语言对话。ChatGPT的核心是一种称为生成式预训练模型(GPT)的技术&#xff0c;它能够根据输入的对话内容生成连贯、自然的回答&#xff0c;实现智能对话的目的。这种技术的出现&#xff…

【JAVA】实验二 类与对象

实验名称 实验二 类与对象 实验目的 1. 深刻理解类的封装与继承&#xff1b; 2. 熟练掌握类的定义、包与路径、对象的创建、方法的调用、类的继承、方法的重写、运行时多态、访问权限修饰符的使用等&#xff1b; 3. 熟练运用JDK提供的常用类及API。 实验内容&…

文件二维码能下载文件吗?扫码看文件效率更高

为了让文件更快的传递&#xff0c;现在将文件制作二维码图片后&#xff0c;让其他人通过扫码查看或者下载文件的方式&#xff0c;被越来越多的人应用。一般想要制作文件二维码&#xff0c;大多会使用文件二维码生成器&#xff08;文件二维码生成器_word、excel、ppt、pdf文档制…

linux下安装Nginx及其常用命令

安装Nginx 接下来在Linux服务器进行操作就可以了 安装插件 yum -y install gcc pcre-devel zlib-devel openssl openssl-devel直接使用wget进行安装(如果没有wget需要先安装wget) yum install wgetwget https://nginx.org/download/nginx-1.24.0.tar.gz解压 tar -zxvf nginx..…

代码训练day59|单调栈part02

参考&#xff1a; 代码随想录 如何高效解决接雨水问题 | labuladong 的算法笔记 503.下一个更大元素II 与下一个更大元素&#xff5c;的区别就是要把数组考虑为环形&#xff08;只有数组内最大值为-1&#xff09; 按照之前的环形为题解决经验&#xff0c;直接拼接两个数组解…

解决mock单元测试中 无法获取实体类xxx对应的表名

错误描述&#xff1a;在执行单元测试时&#xff0c;执行到new Example时抛出异常&#xff0c;提示无法获取实体类xxx对应的表名 Example example new Example(ServeSubscribeRecord.class);Example.Criteria criteria example.createCriteria();criteria.andEqualTo("se…

【Linux】Linux Page Cache页面缓存的原理

Page cache&#xff08;页面缓存&#xff09;是计算机操作系统中的一种机制&#xff0c;用于将频繁访问的数据从磁盘存储到内存中&#xff0c;以便更快地访问。当程序从磁盘请求数据时&#xff0c;操作系统会检查该数据是否已经存在于页面缓存中。如果存在&#xff0c;数据可以…

QT上位机开发(动态库dll的开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 有的时候&#xff0c;我们不想把所有的代码都放在一个exe里面&#xff0c;这个时候我们就需要引入dll动态库的概念。在windows平台上面&#xff0c…

FlagData 2.0:全面、高效的大模型训练数据治理工具集

数据是大模型训练至关重要的一环。数据规模、质量、配比&#xff0c;很大程度上决定了最后大模型的性能表现。无论是大规模的预训练数据、精益求精的SFT数据都依托于一个完整的“获取-准备-处理-分析”数据流程。然而&#xff0c;当前的开源工具通常只专注于流程中的某一环节&a…

ThreeJs通过canvas和Sprite添加标签

在3D场景中很多时候会用到给模型添加标签&#xff0c;以表示这个模型的代号&#xff0c;尤其是大量重复模型的时候&#xff0c;添加标签是为了更直观的看到场景中每个模型的数据和名称&#xff0c;比如在仓库中有很多货架&#xff0c;就会需要查看每个货架的编号&#xff0c;如…

Flink Connector 开发

Flink Streaming Connector Flink是新一代流批统一的计算引擎&#xff0c;它需要从不同的第三方存储引擎中把数据读过来&#xff0c;进行处理&#xff0c;然后再写出到另外的存储引擎中。Connector的作用就相当于一个连接器&#xff0c;连接Flink计算引擎跟外界存储系统。Flin…

长亭牧云主机管理助手——免费轻量的服务器管理软件初体验

优点 安装十分简单&#xff0c;新手友好&#xff0c;一行命令搞定界面简洁&#xff0c;操作流畅无需公网 IP&#xff0c;可以面对复杂 NAT 环境进行救急可以统一管理大量主机&#xff0c;无需记住主机秘钥 地址 https://rivers.chaitin.cn/app/collie 安装 安装很简单&…

基于 listmonk 的电子邮件营销解决方案

背景 电子邮件营销&#xff08;EDM&#xff09;在广告、电商、供应链物流等行业应用广泛&#xff0c;亚马逊云科技的市场部门持续不断的收到客户反馈&#xff0c;希望可以提供简单便捷的方案。 亚马逊云科技产品体验链接&#xff1a;点击我立即体验 对于发送邮件的需求&…