当前位置: 首页 > news >正文

封装el-table 基于element封装可配置JSON表格组件

基于element封装可配置JSON表格组件
话不多说直接贴代码,复制运行即可查看效果
在这里插入图片描述
子组件全部代码

<template><div class="custom-table"><el-table:data="tableData"borderstyle="width: 100%"size="mini"max-height="800"v-bind="$attrs"v-on="$listeners"highlight-current-row><template v-for="item in config.column"><!-- 操作 --><template v-if="item.type === 'handler'"><el-table-column:key="item.prop"v-bind="item"align="center"fixed="right"><template slot-scope="{ row }"><el-buttonv-for="btn in item.btns":key="btn.label"type="text"@click="handelClick($event, btn.click, row)":icon="btn.icon"><!-- {{ btn.label }} --></el-button></template></el-table-column></template><!-- 自定义slot --><template v-else-if="item.type === 'custom'"><el-table-column :key="item.prop" v-bind="item" align="center"><template slot-scope="scope"><slot :name="item.slotName" v-bind="scope" :prop="item.prop" /></template></el-table-column></template><!-- 默认 --><template v-else><el-table-column:key="item.prop"v-bind="item"align="center":show-overflow-tooltip="true"/></template></template></el-table><!-- 分页 --><el-paginationv-if="config.usePagination"backgroundsmalllayout="prev, pager, next"style="text-align: center; margin-top: 10px":current-page="config.paginationData.currentPage":page-size="config.paginationData.pageSize":total="config.paginationData.total"@current-change="handleCurrentChange"></el-pagination></div>
</template><script>
export default {props: {config: {type: Object,default() {return {column: [],paginationData: {pageSize: 20,currentPage: 1,total: 0,},};},required: true,},tableData: {type: Array,default() {return [];},},},mounted() {console.log(this.config, "config");},methods: {handelClick(e, click, row) {e.stopPropagation();this.$emit(click, row);},handleCurrentChange(val) {this.$emit("currentChange", val);},},
};
</script><style lang="scss" scoped></style>

父组件使用

<template><div><el-button @click="getData">data</el-button><CustomTablesize="mini"v-loading="loading":config="tableConfig":table-data="tableData"@row-click="handleRowClick"@selection-change="selectionChange"@handelEditClick="handelEditClick"@handelTeamEditClick="handelTeamEditClick"@deleteItemClick="deleteItemClick"@currentChange="handleCurrentChange"><template #inputEdit="{ row }"><el-inputv-model="row.inputValue"placeholder="please input"size="small"></el-input></template><template #artcleName="{ row }"><el-tag v-for="item in row.artcleName" :key="item.id" size="small">{{ item.name }}</el-tag></template></CustomTable></div>
</template><script>
import tableConfig from "./config";
import CustomTable from "@/components/CustomTable/index.vue";export default {components: {CustomTable,},data() {return {loading: false,tableConfig,tableData: [{id: 1,text: "test",title: "test",admin: "guanliyuan ",category: "小白",inputValue: "Context",artcleName: [{ id: 1, name: "Context" },{ id: 2, name: "标签" },],},],};},created() {this.tableData = this.generateRandomData(50);this.tableConfig.paginationData.total = this.tableData.length;},methods: {getData() {console.log(this.tableData, "表格数据");},generateRandomData(count) {const categories = ["小白", "中级", "高级", "专家", "初学者"];const admins = ["guanliyuan", "administrator", "admin", "user", "tester"];const texts = ["test", "example", "sample", "demo", "testcase"];const titles = ["Test Title","Example Title","Sample Title","Demo Title","Testcase Title",];const randomElement = (arr) =>arr[Math.floor(Math.random() * arr.length)];const randomString = (length) =>Math.random().toString(36).substring(2, length + 2);return Array.from({ length: count }, (_, index) => ({id: index + 1,text: randomElement(texts),title: randomElement(titles),admin: randomElement(admins),category: randomElement(categories),inputValue: randomString(8),artcleName: Array.from({ length: 2 }, (_, nameIndex) => ({id: nameIndex + 1,name: randomString(5),})),}));},handleRowClick(val) {console.log(val, "点击行");},selectionChange(val) {console.log(val, "勾选");},handelEditClick(row) {console.log(row, "编辑");},handelTeamEditClick(row) {console.log(row, "团队编辑");},deleteItemClick(row) {console.log(row, "删除");},handleCurrentChange(val) {this.tableConfig.paginationData.currentPage = val;console.log(val, "当前页");},},
};
</script>

可配置文件 js
放置同级位置
在这里插入图片描述

const tableConfig = {//type 区分操作类型  normal:普通  handler:操作  custom:自定义插槽column: [{ type: "selection", width: 60, align: "center" },{type: "normal",prop: "text",label: "KeyWords",width: 200,},{ type: "normal", prop: "title", label: "Title" },{type: "normal",prop: "category",label: "Category",width: 150,},{type: "normal",prop: "admin",label: "Admin",width: 200,},{type: "handler",label: "Controls",width: 150,btns: [{label: "Edit",click: "handelEditClick",icon: "el-icon-edit",},{label: "TeamEdit",click: "handelTeamEditClick",icon: "el-icon-s-open",},{label: "Delete",click: "deleteItemClick",icon: "el-icon-delete",},],},{type: "custom",label: "Input",prop: "inputValue",slotName: "inputEdit",},{type: "custom",label: "artcleName",prop: "artcleName",slotName: "artcleName",},],usePagination: true,paginationData: {pageSize: 20,currentPage: 1,total: 0,},
};export default tableConfig;

相关文章:

封装el-table 基于element封装可配置JSON表格组件

基于element封装可配置JSON表格组件 话不多说直接贴代码&#xff0c;复制运行即可查看效果 子组件全部代码 <template><div class"custom-table"><el-table:data"tableData"borderstyle"width: 100%"size"mini"max-h…...

Springboot 开发之 Quartz 任务调度框架简介

引言 Quartz Scheduler是一个功能丰富的开源作业调度库&#xff0c;它允许开发人员以灵活的方式创建和管理定时任务。以下是对Quartz Scheduler的详细解析&#xff1a; 官网地址&#xff1a;https://www.quartz-scheduler.org/w3cschool 官方文档&#xff1a;https://www.w3c…...

详解Xilinx FPGA高速串行收发器GTX/GTP(4)--TX/RX接口的数据位宽和时钟设计

目录 1、时钟设计 2、TX接口 3、接口位宽与时钟的关系 4、时钟来源方案 5、TX端内部的时钟分频设计 6、RX接口 文章总目录点这里:《FPGA接口与协议》专栏的说明与导航 1、时钟设计 GT收发器内部比较复杂,所使用的时钟就不止一个,比较主要的时钟有两个,架构…...

idea个人常用快捷键设置

个人开发者自查便于新环境配置快速查阅&#xff0c;统一windows与mac快捷键设置&#xff0c;有相同习惯的同学可自取。如果有一天你的快捷键不好用了&#xff0c;请一定记得看这篇文章&#xff0c;整理不易&#xff0c;留下关注再走呗。 基本操作快捷键 操作中文名称操作名快捷…...

超实用 不再担心猫咪掉毛 一文教你养宠家庭空气净化器怎么选

一到夏天&#xff0c;家中的猫咪给你带来的不仅仅是温暖的陪伴&#xff0c;还有那挥之不去的宠物异味。普通空气净化器虽然能够应对一般的空气净化需求&#xff0c;但对于养猫家庭特有的挑战&#xff0c;如宠物毛发、皮屑和异味等&#xff0c;它们往往难以胜任。专业的宠物空气…...

深入理解HTTP/2:nghttp2库源码解析及客户端实现示例

文章目录 一、HTTP/2 特性实现&#xff1a;nghttp2 源码剖析1.1 二进制帧1.2 多路复用1.3 头部压缩1.4 服务器推送1.5 总结 二、使用 nghttp2 库创建一个 HTTP/2 客户端三、结语 在互联网时代&#xff0c;网络传输协议的作用至关重要。在本文中&#xff0c;我们将对 HTTP/2 的一…...

如何在印尼新闻媒体发布新闻稿件:通稿宣发的好处

如何在印尼新闻媒体发布新闻稿件&#xff1a;通稿宣发的好处 在全球化的时代&#xff0c;新闻稿件的发布和传播对于企业、组织或个人来说至关重要。尤其在印尼这样的东南亚国家&#xff0c;新闻媒体的力量不容忽视。本文将探讨在印尼新闻媒体发布新闻稿件的优势&#xff0c;以…...

如何在 Linux 系统上更改 SSH 服务端口以增强服务器安全性

SSH 服务器默认使用 22 端口&#xff0c;这使得攻击者可以轻松识别并尝试攻击 SSH 服务。为了增加服务器的安全性&#xff0c;建议更改默认的 SSH 端口。本文将详细介绍如何在 Linux 系统上更改 SSH 服务端口&#xff0c;并包含一些最佳实践和注意事项。 1. 检查新的 SSH 端口…...

c++11新特性 -nullptr

今天遇到一道不错的题目&#xff0c;主要讲了c11对nullptr的特性。 首先&#xff1a;nullptr 是C11引入的一个关键字&#xff0c;用于表示“空指针常量”&#xff0c;它是类型std::nullptr_t的唯一值。nullptr 的引入解决了C语言风格的空指针字面量&#xff08;如NULL或0&#…...

kubernets学习笔记——Kubernets 命令行工具 kubectl

目录 kubectl 的使用方法1、语法2、操作3、资源类型4、输出格式5、示例&#xff1a;常用操作6、示例&#xff1a;创建和使用插件 kubectl 的使用方法 Kubernetes 提供 kubectl 是使用 Kubernetes API 与 Kubernetes 集群的控制面进行通信的命令行工具。这个工具叫做 kubectl。通…...

Hadoop单机及集群部署

目录 一、Hadoop 单机模式部署1. 环境准备2. 安装 Java3. 下载并安装 Hadoop4. 配置环境变量5. 配置 Hadoop编辑 core-site.xml编辑 hdfs-site.xml编辑 mapred-site.xml编辑 yarn-site.xml 6. 格式化 Namenode7. 启动 Hadoop 服务8. 验证 Hadoop注意事项 二、Hadoop 集群模式部…...

使用es-hadoop同步hive和es之间数据

&#x1f4bb;近期在华为云连接es时的时候发现不能输入账号密码&#xff0c;后面联系华为工程师了解到&#xff0c;华为云默认是非安全模式&#xff0c;即不需要输入账号密码。 如果对你有所帮助&#xff0c;欢迎点赞收藏关注不迷路哦&#x1f493; 目录 使用es-hadoop同步h…...

Java - 泛型 + JUnit

一、泛型(参数化类型,在编译时确定) 泛型是一种可以接收数据类型的数据类型(可以这么理解) 作用&#xff1a; 1.能对加入到集合中的数据类型进行约束 2.遍历的时候&#xff0c;不需要进行类型转换&#xff0c;提高效率(因为遍历时&#xff0c;默认的是Object,需要进行类型转换的…...

vue3实现包含表格的Word文件导出

vue3实现包含表格的Word文件导出 近期遇到一个要求&#xff0c;需要在网页上导出Word文档&#xff0c;文档中有表格&#xff0c;也有普通的数据&#xff0c;查阅了很多资料&#xff0c;总算比较完美的解决了&#xff0c;记录一下 先上一下最终效果 演示视频 vue3项目根据Wor…...

【深度学习】TTS,CosyVoice,推理部署的代码原理讲解分享

文章目录 demo代码加载配置文件speech_tokenizer_v1.onnx(只在zero_shot的时候使用)campplus.onnx(只为了提取说话人音色embedding)`campplus_model` 的作用代码解析具体过程解析总结示意图CosyVoiceFrontEndCosyVoiceModel推理过程总体推理过程推理速度很慢: https://git…...

flask高频面试题

目录 高频面试题及答案1. 如何在Flask中处理数据库迁移&#xff1f;2. Flask如何处理文件上传&#xff1f;3. 如何在Flask中处理跨域请求&#xff08;CORS&#xff09;&#xff1f;4. 如何在Flask中实现用户认证&#xff1f;5. Flask如何处理会话&#xff1f;6. Flask如何处理表…...

尚硅谷谷粒商城项目笔记——五、使用docker安装mysql

五、使用docker安装mysql 注意&#xff1a; 因为电脑是AMD芯片&#xff0c;自己知识储备不够&#xff0c;无法保证和课程中用到的环境一样&#xff0c;所以环境都是自己根据适应硬件软件环境重新配置的&#xff0c;这里的虚拟机使用的是VMware。 使用 Docker 安装 MySQL 与安…...

filebeat + logstash使用笔记

背景 本文中有2台主机&#xff1a; &#xff08;1&#xff09;1.1.1.1是OpenStack的nova节点&#xff0c;安装filebeat &#xff08;2&#xff09;1.1.1.2是logstash节点 在1.1.1.1上通过filebeat读取OpenStack的nova-compute组件日志&#xff08;/var/log/nova/nova-compute.…...

学校考场电子钟设置自动开关机,节能环保

在标准化考试中&#xff0c;准确的时间显示对于确保考试的公正性和秩序至关重要。然而&#xff0c;传统的电子钟系统往往存在一些问题&#xff0c;影响了考试管理的效率。 一、学校普通电子钟使用问题 二、学校考场电子钟优点 学校同步时钟系统通过自动同步网络或卫星时间的方式…...

短剧APP系统开发带来了哪些发展空间?

在影视行业快速发展的时期&#xff0c;短剧作为一种新兴的影视模式&#xff0c;获得了大众的欢迎。目前&#xff0c;短剧行业巨大的发展空间&#xff0c;再次成为大众关注的焦点。 随着移动互联网的发展&#xff0c;信息技术不断升级进步&#xff0c;短剧APP系统的开发&#x…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

html-<abbr> 缩写或首字母缩略词

定义与作用 <abbr> 标签用于表示缩写或首字母缩略词&#xff0c;它可以帮助用户更好地理解缩写的含义&#xff0c;尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时&#xff0c;会显示一个提示框。 示例&#x…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...