封装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;

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

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

相关文章

负载均衡之HAProxy超全内容!!!

一、负载均衡 1.1 负载均衡概念 负载均衡&#xff08;Load Balance&#xff0c;简称 LB&#xff09;是高并发、高可用系统必不可少的关键组件&#xff0c;目标是尽力将网络流量平均分发到多个服务器上&#xff0c;以提高系统整体的响应速度和可用性。 1.2 软件负载均衡 软件…

做报表用什么工具?不想再用Excel了!!!

一、什么是中国式报表&#xff1f; 不知道大家现在还是使用Excel来制作报表&#xff0c;然后跟领导汇报工作吗&#xff1f;虽然Excel功能很强大&#xff0c;但是用Excel做过中国式报表的小伙伴一定知道它的制作过程有多复杂。 中国式报表可以用一句话简单概括&#xff1a;格式…

Mozilla Firefox侧边栏和垂直标签在131 Nightly版本中开始试用

垂直选项卡和全新的侧边栏体验现已在Mozilla Firefox Nightly 131 中提供。这一更新备受社区期待和要求&#xff0c;我们期待看到它如何提高您的浏览效率和工作效率。如果您想体验一下这项正在进行中的工作&#xff0c;请这样操作&#xff1a; 更新到最新的Nightly版 转到设置…

uniapp本地打包app安装说明

uniapp本地打包app安装说明 目录 uniapp本地打包app安装说明一、打包说明1.HBuilder X 生成本地打包资源2.Android Studio和App离线SDK环境准备2.1 下载Android Studio和 App离线SDK2.2 资源替换2.3 id属性值修改。2.4 添加provider信息到AndroidManifest.xml中的<applicati…

使用Hugging Face构建大型语言模型应用

在本文中&#xff0c;我们将介绍如何使用Hugging Face的大型语言模型&#xff08;LLM&#xff09;构建一些常见的应用&#xff0c;包括摘要&#xff08;Summarization&#xff09;、情感分析&#xff08;Sentiment analysis&#xff09;、翻译&#xff08;Translation&#xff…

Leetcode JAVA刷刷站(14)最长公共前缀

一、题目概述 二、思路方向 在Java中&#xff0c;要编写一个函数来查找字符串数组中的最长公共前缀&#xff0c;我们可以遵循以下步骤&#xff1a; 处理边界条件&#xff1a;如果数组为空或长度为0&#xff0c;直接返回空字符串。初始化最长公共前缀&#xff1a;将数组的第一个…

HarmonyOS 3.1/4.0应用升级到HarmonyOS NEXT改动点

在 “2024鸿蒙零基础快速实战-仿抖音App开发&#xff08;ArkTS版&#xff09;”&#xff08;https://coding.imooc.com/class/843.html&#xff09;视频课程中&#xff0c;因为讲师在该课程授课时是使用的HarmonyOS 3.1/4.0应用&#xff08;API 9&#xff09;&#xff0c;如果部…

在亚马逊云科技上搭建云原生生成式AI教育学习平台

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何利用亚马逊云科技大模型托…

1.2 C 语言环境:MinGW 与 CLion 的安装与配置

目录 1 C 语言的由来 2 安装 MinGW 编译器 3 Windows 中安装 CLion 开发环境 3.1 安装 CLion 开发环境 3.2 运行试用 30 天 3.3 新建项目​ 3.4 汉化 4 Mac 中安装 Clion 开发环境 4.1 安装 CLion 开发环境 4.2 运行试用 30 天 4.3 新建项目 ​4.4 汉化 5 向日葵的…

突破百度网盘的下载限速,两种方法教会你【超详细】

一、前言 Hello&#xff0c;大家后&#xff0c;我是博主英杰&#xff0c;前几天&#xff0c;我在使用百度网盘过程中&#xff0c;下载速度极慢&#xff0c;自己作为一个白嫖党&#xff0c;开会员也是心疼那点钱&#xff0c;所以在网上找了几个有效解决百度网盘限速问题的教程&a…

arcgis-坡度坡向分析

坡向的描述有定性和定量两种方式&#xff0c;定量是以东为0&#xff0c;顺时针递增&#xff0c;南为90&#xff0c;西为180&#xff0c;北为270等&#xff0c;范围在0&#xff5e;35959′59″之间。 定性描述有8方向法和4方向法. 8 方向为东、东南、南、西南、西、西北、北、东…

JavaWeb-01(Java进阶内容详解,Html、CSS、JS)

一、前端技术结构分析 网页的结构&#xff08;HTML&#xff09;、表现(CSS)、行为(JS) 1.HTML定义界面整体结构 2.CSS定义页面样式 3.JS实现动态效果 二、HTML 2.1安装VS Code及前端开发插件 Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code Code Spe…

golang并发控制

常见的并发控制 常见的并发控制 channel:通过无缓冲的channel进行同步调用&#xff0c;有缓冲的channel进行异步调用&#xff0c;也可限制并发数量 waitgroup:可以通过add来动态调整&#xff0c;释放的时间需要使用defer 进行wg.done操作 context&#xff1a;通过在协程之间…

笔记本CPU天梯图(2024年8月),含AMD/骁龙等新CPU

原文地址&#xff08;高清无水印原图/持续更新/含榜单出处链接&#xff09;&#xff1a; 2024年8月笔记本CPU天梯图 2024年8月笔记本CPU天梯图 2024年8月5日更新日志&#xff1a;常规更新Cinebench R23、PassMark笔记本CPU天梯图&#xff0c;新增Geekbench 6.2单核多核天梯图&…

inner join, left join, right join, full join 的区别

1. 初始化表结构 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for t_city -- ---------------------------- DROP TABLE IF EXISTS t_city; CREATE TABLE t_city (id varchar(255) CHARACTER SET utf8mb4 COLLATE utf…

Windows Server修改远程桌面端口

新建入站规则 填写端口 允许连接 修改远程桌面端口 winR打开注册表 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp修改PortNumber为新端口 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wi…

根据 IP 地址配置子网示例(下挂 hub 接不同 vlan 终端)

我们一般根据端口配置子网比较简单&#xff0c;但是如果换接口&#xff0c;就又要到交换机上重新配置端口所属 vlan 了&#xff0c;紧急情况下&#xff0c;还是比较耽误时间的。但如果根据IP地址配置 vlan&#xff0c;则可以插在交换机上任意端口&#xff0c;排障时比较节省时间…

深入理解Linux线程:从基础到进阶的全面指南

目录 一.线程概念1.理解Linux下的线程2.线程优缺点与异常3.线程VS进程4.再谈进程地址空间 二.线程控制1.线程的创建使用2.线程在进程地址空间的结构3.初窥多线程4.多线程抢票 三.线程互斥1.进程线程间的互斥相关背景概念2.互斥锁 四.线程安全1.线程安全和可重入函数2.死锁3.线程…

人工智能时代:程序员的核心竞争力重塑之旅

人工智能时代&#xff1a;程序员的核心竞争力重塑之旅 在人工智能&#xff08;AI&#xff09;技术日新月异的今天&#xff0c;程序员的角色与职责正经历着前所未有的变革。随着自动化、智能化工具的普及&#xff0c;许多传统编程任务被高效替代&#xff0c;这不禁让人思考&…

【基础算法总结】BFS 解决 FloodFill 算法

BFS 解决 FloodFill 算法 1.图像渲染2.岛屿数量3.岛屿的最大面积4.被围绕的区域 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; FloodFill 算…