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.hqwc.cn/news/323828.html

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

相关文章

红外传感器深入解析

引言 宇宙间的任何物体只要其温度超过零度就能产生红外辐射&#xff0c;事实上同可见光一样&#xff0c;其辐射能够进行折射和反射&#xff0c;这样便产生了红外技术&#xff0c;利用红外光探测器因其独有的优越性而得到广泛的重视&#xff0c;并在军事和民用领域得到了广泛…

听GPT 讲Rust源代码--compiler(8)

File: rust/compiler/rustc_trait_selection/src/solve/weak_types.rs 在Rust编译器的源代码中&#xff0c;rust/compiler/rustc_trait_selection/src/solve/weak_types.rs文件的作用是处理弱类型化解决方案。 在编译器中&#xff0c;当我们在代码中使用一个未经完全指定的泛型…

为了搞项目,我差点把京东 “爬“ 了个遍。。

最近在重构我的准备 智慧校园助手2.0 &#xff0c;奈何之前的相关数据放在服务器被小黑子黑了&#xff0c;准备重新搞点数据&#xff0c;借此和大家分享一波我之前做项目没数据该咋搞 &#x1f440;。 Java面试指南 & 大厂学习导航&#xff1a;www.java2top.cn 完整源码获取…

高精度电流源研究内容有哪些

高精度电流源是一种用于产生稳定、准确且可调的电流输出的设备。在电子测试与测量领域中&#xff0c;高精度电流源被广泛应用于校准、精密测量和实验研究等方面。下面安泰电子将介绍高精度电流源的研究内容&#xff0c;帮助大家全面了解其在电子领域中的重要性和应用。 一、性能…

Spring Beans的魔法门:解密多种配置方式【beans 四】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 Spring Beans的魔法门&#xff1a;解密多种配置方式【beans 四】 前言XML配置方式1. 声明和配置Bean&#xff1a;2. 构造函数注入&#xff1a;3. 导入其他配置文件&#xff1a; java注解方式1. 使用Co…

Python从入门到网络爬虫(函数详解)

前言 函数是变成语言中最常见的语法&#xff0c;函数的本质就是功能的封装。使用函数可以大大提高编程效率与程序的可读性。函数是能够实现特定功能的计算机代码而已&#xff0c;他是一种特定的代码组结构。 函数的作用 1.提升代码的重复利用率&#xff0c;避免重复开发相同代…

01-线程池项目背景:C++的数据库操作

从0开始学习C与数据库的联动 1.原始方式-使用MySQL Connector/C 提供的API查询 1.1 数据库预操作 我的本地电脑上有mysql数据库&#xff0c;里面预先创建了一个database名叫chat&#xff0c;用户名root&#xff0c;密码password。 1.2 Visual Studio预操作 在Windows上使用…

JavaScript 基础三part1.数组

JavaScript 基础三part1.数组 2.1 数组是什么2.2 数组的基本使用&#xff08;1&#xff09;声明&#xff08;2&#xff09;取值&#xff08;3&#xff09;一些术语&#xff08;4&#xff09;遍历数组 2.3 操作数组&#xff08;1&#xff09;修改&#xff08;2&#xff09;新增&…

x-cmd pkg | doggo - 现代化的 DNS 客户端

目录 简介首次用户快速实验指南功能特点类似工具与竞品进一步探索 简介 doggo 是一个由 Karan Sharma 于 2020 年使用 Go 语言开发的 DNS 客户端。它类似于 dig 命令&#xff0c;但旨在以现代化、简洁和可读的格式输出 DNS 查询结果。 首次用户快速实验指南 使用 x doggo 即可…

工作中人员离岗识别摄像机

工作中人员离岗识别摄像机是一种基于人工智能技术的智能监控设备&#xff0c;能够实时识别员工离岗状态并进行记录。这种摄像机通常配备了高清摄像头、深度学习算法和数据处理系统&#xff0c;可以精准地监测员工的行为&#xff0c;提高企业的管理效率和安全性。 工作中人员离岗…

SSM建材商城网站----计算机毕业设计

项目介绍 本项目分为前后台&#xff0c;前台为普通用户登录&#xff0c;后台为管理员登录&#xff1b; 管理员角色包含以下功能&#xff1a; 管理员登录,管理员管理,注册用户管理,新闻公告管理,建材类型管理,配货点管理,建材商品管理,建材订单管理,建材评价管理等功能。 用…

低代码UI构件程序设计基础实训一

步骤一 低代码在线调试工具 网址 低代码在线调试工具 步骤二 D盘建一个文件夹&#xff0c;文件夹下建两个文件夹ico和js 网上找一些图片&#xff0c;后缀.png&#xff0c;编号从0开始&#xff0c;图片另存到ico文件夹下 下载&#xff08;右键另存为&#xff09;以下四个页面…