Vue3+TS项目封装一个公共的el-table组件二次封装

news/2024/10/4 18:56:34/文章来源:https://blog.csdn.net/qq_35641191/article/details/142221419

前言

支持动态传入列,列内容可以指定插槽,指定格式化显示

样式没太写,主要分享基础功能封装

效果

Table组件代码BaseTable.vue

<template><el-table :data="data" border><template v-for="col in columns" :key="col.prop"><el-table-column :prop="col.prop" :label="col.label" :width="col.width" show-overflow-tooltip><template #default="{ row }"><slot v-if="col.slot" :name="col.slot"></slot><!-- 因为这个内容不是通过表格的prop直接绑定的,所以表格自带的溢出省略号失效,自己写下 --><div v-else class="text-overflow">{{ getFormatter(col, row[col.prop]) }}</div></template></el-table-column></template></el-table><br><template v-if="isShowPage"><el-pagination v-model:currentPage="currentPage1" v-model:page-size="pageSize1" :page-sizes="[10, 20, 30, 40]"background layout="total, sizes, prev, pager, next, jumper" :total="totalSize" @size-change="sizeChange"@current-change="currentChange" /></template>
</template>
<script lang="ts" setup>
import { computed, ref } from 'vue';export interface BaseTableConfig {data: any[];columns: TableColumn[];current?: number;pageSize?: number;totalSize?: number;[key: string]: any;
}
export interface TableColumn {prop?: string;label: string;slot?: string;width?: number;formatter?: Function;[key: string]: any;
}
const emit = defineEmits(['update:pageSize', 'update:currentPage', 'pageChange'])
const props = defineProps({data: {type: Array,default: () => ([])},columns: {type: Array<any>,default: () => ([])},currentPage: {type: Number,default: 1,},pageSize: {type: Number,default: 10,},totalSize: {type: Number,default: 0,},isShowPage: {type: Boolean,default: true,}
});
const currentPage1 = ref(props.currentPage);
const pageSize1 = ref(props.pageSize);
const getFormatter = (col: any, value: any) => {if (col.formatter) {return col.formatter(value);}return value;
}
const sizeChange = (val: number) => {emit('update:pageSize', val);emit('pageChange');
}
const currentChange = (val: number) => {emit('update:currentPage', val);emit('pageChange');
}
</script>
<style scoped>
.text-overflow {overflow: hidden;white-space: nowrap;text-overflow: ellipsis;
}
</style>

页面中使用组件

<template><div>总条数:{{ tbConfig.totalSize }};当前页:{{ tbConfig.current }};每页条数:{{ tbConfig.pageSize }}</div><BaseTable :data="tbConfig.data" :columns="tbConfig.columns" v-model:currentPage="tbConfig.current"v-model:pageSize="tbConfig.pageSize" :totalSize="tbConfig.totalSize" @pageChange="pageClick"><template #avatar="{ row }">这一列用插槽自定义内容{{ row?.avatar }}</template><template #op><el-button type="danger">删除</el-button></template></BaseTable>
</template>
<script lang="ts" setup>
import { reactive } from 'vue';
import { BaseTableConfig, TableColumn } from './BaseTable.vue';
import BaseTable from './BaseTable.vue';const tbConfig: BaseTableConfig = reactive({data: [{ id: 1, name: 'Ahsh', avatar: 'img1.png', ifKey: true },{ id: 2, name: 'Rjjds', avatar: 'img2.png', ifKey: false },{ id: 3, name: 'Ukkd特别长长长长长长长长长长的名字', avatar: 'img3.png', ifKey: true },],columns: <TableColumn[]>[{ prop: 'id', label: '序号', width: 100 },{ prop: 'name', label: '名称', width: 200 },{ prop: 'avatar', label: '图标', slot: 'avatar', width: 200 },{ prop: 'ifKey', label: '是否开放', formatter: formatBoolean },{ label: '操作', slot: 'op' },],current: 1,pageSize: 10,totalSize: 0,
});function formatBoolean(val: Boolean) {return val ? '是' : '否';
}function pageClick() {// TODO监听到当前页或者每页条数变化,重新查询列表console.log('get-data');
}
</script>
<style scoped></style>

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

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

相关文章

计算机毕业设计选题推荐-共享图书管理系统-小程序/App

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【深海王国】初中生也能画的电路板?目录合集

Hi٩(๑ ^ o ^ ๑)۶, 各位深海王国的同志们&#xff0c;早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督为大家带来系列文章《初中生也能画的电路板》&#xff0c;帮你一周内快速入门PCB设计&#xff0c;手把手教你从元器件库添加、电路原理图绘制、…

Maven 安装

Maven 安装 Maven 下载安装 下载MAVEN 选择版本注意&#xff1a; IDEA 2022 兼容maven 3.8.1及之前的所用版本 IDEA 2021 兼容maven 3.8.1及之前的所用版本 IDEA 2020 兼容Maven 3.6.3及之前所有版本 IDEA 2018 兼容Maven3.6.1及之前所有版本 打开MAVEN官网 下载需要的版本 Wi…

kali——foremost的使用

目录 前言 使用方法 前言 foremost工具是一个在Kali Linux中用于数字取证和数据恢复的强大工具。 使用方法 foremost -t all -i 数据包绝对路径修复好的数据包&#xff0c;将会自动保存在output目录里。

Java 全面指南:从入门到精通

目录 1. 引言 Java 的背景 Java 的起源及历史发展 主要的应用场景 Java 的核心特性 面向对象 跨平台性&#xff08;JVM 的角色&#xff09; 自动内存管理与垃圾回收机制 Java 版本与发展历程 Java SE 8, 11, 17 等主要版本特性 新增功能概述&#xff08;如 Lambda 表…

互相关、相关系数和内积的关系

目录 问题互相关与卷积xcorr互相关xcorr2 2-D cross-correlationnormxcorr2 归一化二维互相关性conv卷积conv2二维卷积关系与区别xcov互协方差 相关系数cov协方差与协方差矩阵corrcoef相关系数与相关系数矩阵图像均值、标准差和相关系数 内积与相似系数内积&#xff08;Inner P…

UE5中使用UTexture2D进行纹理绘制

在UE中有时需要在CPU阶段操作像素&#xff0c;生成纹理贴图等&#xff0c;此时可以通过UTexture2D来进行处理&#xff0c;例子如下&#xff1a; 1.CPP部分 首先创建一个蓝图函数库&#xff0c;将UTexture2D的绘制逻辑封装成单个函数&#xff1a; .h&#xff1a; #include &…

SQL Server性能优化之读写分离

理论部分: 数据库读写分离&#xff1a; 主库&#xff1a;负责数据库操作增删改 20% 多个从库&#xff1a;负责数据库查询操作 80% 读写分离的四种模式 1.快照发布&#xff1a;发布服务器按照预定的时间间隔向订阅服务器发送已发布的数据快照 2.事务发布[比较主流常见]&#xf…

剖析Spark Shuffle原理(图文详解)

Spark Shuffle 1.逻辑层面 从逻辑层面来看&#xff0c;Shuffle 是指数据从一个节点重新分布到其他节点的过程&#xff0c;主要发生在需要重新组织数据以完成某些操作时。 RDD血统 Shuffle 触发条件&#xff1a; reduceByKey、groupByKey、join 等操作需要对数据进行分组…

变电站缺陷数据集8307张,带xml标注和txt标注,可以直接用于yolo训练

变电站缺陷数据集8307张&#xff0c; 带xml标注和txt标注&#xff0c;可以直接用于yolo训练&#xff0c;赠附五个脚本 变电站缺陷数据集 数据集概述 变电站缺陷数据集是一个专门针对变电站设备和环境缺陷检测的图像数据集。该数据集包含了8307张经过标注的图像&#xff0c;旨…

vue3中把封装svg图标为全局组件

在vue3中我们使用svg图标是下面这样子的 <svg style"width:30px;height:30px;"><use xlink:href"#icon-phone" fill"red"></use></svg>第次使用图标都要写这么多重复的代码&#xff0c;很不方便&#xff0c;所以&#x…

说说几款耳机

从前&#xff0c;大约在戴森推出他们那款奇特的发明——戴森耳机与空气净化器组合一年后&#xff0c;人们仍对这个奇怪的产品感到困惑。这款穿戴式空气净化耳机更像是一个实验&#xff0c;缺乏实际用途。回想起那时的评测&#xff0c;大家一致认为这是有史以来最无意义的产品之…

【图像匹配】基于‌墨西哥帽小波(Marr小波)算法的图像匹配,matlab实现

博主简介&#xff1a;matlab图像代码项目合作&#xff08;扣扣&#xff1a;3249726188&#xff09; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本次案例是基于‌墨西哥帽小波&#xff08;Marr小波&#xff09;算法的图像匹配&#xff0c;用…

硬件工程师笔试面试——存储器件

目录 16、存储器件 16.1 基础 存储器件实物图 16.1.1 概念 16.1.2 常见的存储器件及其特点 16.2 相关问题 16.2.1 不同类型的存储器件在成本和性能上有哪些具体的差异 16.2.2 如何根据应用需求选择合适的存储器件? 16.2.3 存储器件的耐用性和可靠性是如何影响其在不同…

网络安全-利用 Apache Mod CGI

目录 一、环境 二、开始操作 三、总结 一、环境 蚁剑官网拉取 二、开始操作 蚁剑连接 一样终端命令不能执行 可以看到putenv已经禁用 我们开始一下&#xff0c;跳入一个新终端且可以执行命令 我们具体看一下干了什么事情 上传了一个htaccess这个文件的作用是让以后所有ant文…

VSCode扩展连接虚拟机MySQL数据库

在虚拟机安装MySQL vscode通过ssh远程登录Ubuntu 在vscode终端运行以下命令。 sudo apt-get install mysql-server-5.7 用以下命令确认MySQL是否安装完成。 sudo mysql MySQL安装成功。 在VSCode安装SQL扩展 扩展名&#xff1a;MySQL Shell for VS Code。 安装完成后&am…

SpringSecurity原理解析(八):CSRF防御解析

一、CsrfFilter CsrfFilter 主要功能是用来防止csrf攻击 一、什么是CSRF攻击 跨站请求伪造&#xff08;英语&#xff1a;Cross-site request forgery&#xff09;&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;通常缩写为 CSRF 或者 XSRF&#xff0c…

DepthCrafter:为开放世界视频生成一致的长深度序列

通过利用视频扩散模型&#xff0c;我们创新了一种新颖的视频深度估算方法–DepthCrafter。 它可以为开放世界视频生成具有细粒度细节的时间一致性长深度序列&#xff0c;而无需摄像机姿势或光流等附加信息。 简介 动机。 尽管在静态图像的单目深度估算方面取得了重大进展&…

re题(30)BUUCTF-[HDCTF2019]Maze

BUUCTF在线评测 (buuoj.cn) 查一下壳&#xff0c;32位upx壳 脱完壳放到ida&#xff0c;shiftF12看一下字符串&#xff0c;是个迷宫&#xff0c;maze&#xff08;迷宫&#xff09; 这里有一个经典的花指令 (导致找不到main函数) 下方有个奇怪的jnz指令&#xff0c;它跳转到了下…

解决使用阿里云DataV Geo在线地图路径访问403问题

文章目录 1. DataV Geo在线地图路径访问403问题2. 解决方法3. 重启生效 1. DataV Geo在线地图路径访问403问题 最近在写一个省市下钻的demo&#xff0c;用到的是 阿里云DataV Geo在线地图 去动态获取GeoJSON 省市的数据&#xff0c;如下代码 axios.get("https://geo.dat…