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

element -plus table的二次封装

个人简介

博主写了对element-plus的表格和表单的封装 大家支持一下
[表格]https://gitee.com/childe-jia/table-vue3
[表单] https://gitee.com/childe-jia/form-render

Introduction

WHAT

i-table 基于元素 element-plus,但不限于元素 element-plus 组件。在完全继承 element-plus 元素的 table 属性的基础上,进行了扩展。一些非表格组件或自定义组件,因此,用户可以使用一段 json 来呈现完整的表格。

WHY

在我们的日常开发中,有很多有表格的页面,通常表格结构相似,逻辑重复。i-table 没有复杂的逻辑。它只转换 JSON 来呈现表格项,节省了编写业务逻辑的时间和精力,并减少了重复代码。

Features

  • 用 json 呈现表格
  • 支持数据列配置及插槽
  • 支持操作列配置及插槽
  • 支持多选框配置
  • 支持分页显示
  • 支持响应式表格

Links

  • vue2&&vue3–render 函数(h)
  • vue2 与 vue3 生命周期的区别
  • vue2 与 vue3 v-model 的区别
  • vue2 版本
  • element-plus 表单的封装

Quick Start

git clone https://gitee.com/childe-jia/table-vue3.git
拉下项把 src\components\i-table 下组件放入自己项目 可跟业务场景自行修改
<template><!--region table 表格--><app-table:list="list":total="total":otherHeight="otherHeight":options="options":pagination="pagination":columns="columns":operates="operates"@handleSizeChange="handleSizeChange"@handleIndexChange="handleIndexChange"@handleSelectionChange="handleSelectionChange"@sortChange="sortChange"></app-table>
</template><script setup>
import { ref, reactive, h, resolveComponent } from "vue";
import appTable from "./components/i-table/table.vue";
let total = ref(1000);let list = reactive([{id: 1,title: "标题",state: 1,author: "张三",phone: "12346788901",email: "1234556778@qq.com",createDate: "2023-04-23 16:11:38",zero: null,isOpend: true,headimgurl: "https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png",},
]);
let otherHeight = ref(288);
let columns = reactive([{prop: "id",label: "编号",align: "center",el: {// element ui的一些props...sortable: true, //开启排序},},{prop: "author",label: "作者",align: "center",width: 120,},{prop: "phone",label: "联系方式",align: "center",width: 160,show: false, //控制这一列是否展示},{prop: "zero",label: "邮箱",align: "center",width: 240,},{prop: "createDate",label: "发布时间",align: "center",width: 180,formatter: (row, column, cellValue) => {return row.createDate;},},{prop: "title",label: "标题",align: "center",formatter: (row, column, cellValue) => {return `<span style="white-space: nowrap;color: dodgerblue;">${row.title}</span>`;},},{prop: "state",label: "状态",align: "center",width: "160",render: (params) => {const fieldValue = params.row.state;const textMapping = {0: { type: "success", text: "上架" },1: { type: "info", text: "下架" },2: { type: "danger", text: "审核中" },};const type = textMapping.hasOwnProperty(fieldValue)? textMapping[fieldValue].type: "default"; // 默认类型,可以根据需要修改const labelText = textMapping.hasOwnProperty(fieldValue)? textMapping[fieldValue].text: "未知"; // 默认显示字段值,可以根据需要修改return h(resolveComponent("el-tag"), { type }, () => labelText);},},{prop: "switch",label: "开关",align: "center",width: "160",render: (params) => {return h(resolveComponent("el-switch"), {size: "default",modelValue: params.row.isOpend,onChange: (events) => {changeMsgStatus(events, params);},});},},{prop: "headimgurl",label: "头像",align: "center",render: (params) => {return h(resolveComponent("el-avatar"),{size: 44,src: params.row.headimgurl,// 图片加载失败展示默认图片onError: (e) => {return true;},},() => [h("img", {src: "https://cube.elemecdn.com/e/fd/0fc7d20532fdaf769a25683617711png.png",}),]);},},{prop: "link",label: "查看",align: "center",width: "160",render: (params) => {return h(resolveComponent("el-link"),{type: "primary",underline: false,onClick: (e) => {handleDetail(params);},},() => "查看");},},
]);
const operates = reactive({width: 200,fixed: "right",list: [{label: "编辑",type: "primary",plain: true,link: true,show: (index, row) => {return true;},icon: "Edit",disabled: false,method: (index, row) => {console.log("编辑");handleEdit(index, row);},},{label: "删除",type: "primary",icon: "Delete",plain: true,link: true,show: true,disabled: (index, row) => {return false;},method: (index, row) => {console.log("删除");handleDel(index, row);},},{label: "测试下拉1",type: "primary",icon: "el-icon-delete",show: true,disabled: (index, row) => {return false;},method: (index, row) => {console.log("测试下拉1");handleDel(index, row);},},{label: "测试下拉2",type: "primary",icon: "el-icon-delete",show: true,disabled: (index, row) => {return false;},method: (index, row) => {console.log("测试下拉2");handleDel(index, row);},},],
});
const pagination = reactive({pageIndex: 1,pageSize: 20,
});
const options = reactive({stripe: true, // 是否为斑马纹 tableloading: false, // 是否添加表格loading加载动画highlightCurrentRow: true, // 是否支持当前行高亮显示mutiSelect: true, // 是否支持列表项选中功能border: true, //是否显示边框numbers: true, //是否显示序号selectable() {//禁用选中return true;},headerCellStyle: { backgroundColor: "#FFF" }, //表头颜色
});
const handleSizeChange = (pagination) => {console.log("pagination", pagination);
};
const handleIndexChange = (pagination) => {console.log("pagination", pagination);
};
const handleSelectionChange = (val) => {console.log("val:", val);
};
const handleEdit = (index, row) => {console.log(" index:", index);console.log(" row:", row);
};
const handleDel = (index, row) => {console.log(" index:", index);console.log(" row:", row);
};
const sortChange = (data) => {console.log(data);
};
const changeMsgStatus = (ev, params) => {console.log(ev, params);list[0].isOpend = !list[0].isOpend;
};
const handleDetail = (params) => {console.log(params);
};
</script>

Props

export default {// ...props: {noStatic: false, // 是否计算表格高度options: {type: Object,default: {stripe: false, // 是否为斑马纹 tableloading: false, // 是否添加表格loading加载动画highlightCurrentRow: false, // 是否支持当前行高亮显示mutiSelect: false, // 是否支持列表项选中功能border: false, //是否显示边框selectable: () => {//是否可以选中return false;},},}, // table 表格的控制参数total: {type: Number,default: 0,}, // 总数list: {type: Array,default: [], // prop:表头绑定的地段,label:表头名称,align:每列数据展示形式(left, center, right),width:列宽}, // 数据列表customHeight: {//与noStatic一起使用type: Number,default: 320,},columns: {type: Array,default: [], // 需要展示的列 === prop:列数据对应的属性,label:列名,align:对齐方式,width:列宽},operates: {type: Object,defaultt: () => {}, // width:按钮列宽,fixed:是否固定(left,right),按钮集合 === label: 文本,type :类型(primary / success / warning / danger / info / text),show:是否显示,icon:按钮图标,plain:是否朴素按钮,disabled:是否禁用,method:回调方法},otherHeight: {type: Number,default: 180,}, // 计算表格的高度pagination: {type: Object,default: null, // 分页参数 === pageSize:每页展示的条数,pageIndex:当前页,pageArray: 每页展示条数的控制集合,默认 _page_array},},
};

Methods

support all el-table’s methods

Inspiration

thanks to Vue2.5 结合 Element UI 之 Table 和 Pagination 组件实现分页

相关文章:

element -plus table的二次封装

个人简介 博主写了对element-plus的表格和表单的封装 大家支持一下 [表格]https://gitee.com/childe-jia/table-vue3 [表单] https://gitee.com/childe-jia/form-render Introduction WHAT i-table 基于元素 element-plus&#xff0c;但不限于元素 element-plus 组件。在完…...

windows应用软件扫描报告 不告谱 要钱

chatGPT开路&#xff0c;帮找。 当你想要查找Windows软件的漏洞而不涉及查看源代码时&#xff0c;你可以使用一些专门设计用于扫描漏洞的工具。这些工具通常会检查已安装的软件和操作系统的漏洞&#xff0c;并提供建议或修补程序。以下是一些可以用于查找Windows软件漏洞的工具…...

世界前沿技术发展报告2023《世界航空技术发展报告》(七)机载系统与武器技术

&#xff08;七&#xff09;机载系统与武器技术 1.机载系统技术1.1 美国推进商用5G技术在航空装备中的应用1.2 人工智能技术在航空中的应用日益增多1.3 美国空军研究实验室推出综合座舱感知技术1.4 美国空军为固定翼飞机驾驶员选定新一代头盔1.5 美国DARPA探索通过机载光能量中…...

JAVA 学习笔记——抽象类

概念&#xff1a; 当定义一个类时&#xff0c;常常需要定义一些成员方法来描述类的行为特征&#xff0c;但有时这些方法的实现方式是无法确定的。 例如&#xff0c;前面在定义 Animal 类时&#xff0c;walk()方法用于描述动物的行走行为&#xff0c;但是针对不同的动物&#…...

磁盘调度算法之先来先服务(FCFS),最短寻找时间优先(SSTF),扫描算法(SCAN,电梯算法),LOOK调度算法

目录 1.一次磁盘读/写操作需要的时间1.寻找时间2.延迟时间3.传输时间4.影响读写操作的因素 2.磁盘调度算法1.先来先服务(FCFS)1.例题2.优缺点 2.最短寻找时间优先(SSTF)1.例题2.优缺点3.饥饿的原因 3.扫描算法(SCAN)1.例题2.优缺点 4.LOOK调度算法1.例题2.优点 5.循环扫描算法(…...

postman接口测试—Restful接口开发与测试

开发完接口&#xff0c;接下来我们需要对我们开发的接口进行测试。接口测试的方法比较多&#xff0c;使用接口工具或者Python来测试都可以&#xff0c;工具方面比如之前我们学习过的Postman或者Jmeter &#xff0c;Python脚本测试可以使用Requests unittest来测试。 测试思路…...

RK3568-emmc控制器

emmc控制器 eMMC主机控制器具有高度的可配置性和可编程性&#xff0c;并提供高性能的eMMC主机控制器&#xff0c;以AXI作为数据传输的总线接口&#xff08;主接口&#xff09;&#xff0c;以AHB作为其从接口。 它支持以下功能&#xff1a; - 支持SD-HCI主机版本4模式或更少的 …...

02-操作符及类型转换与控制流程语句

操作符及类型转换与控制流程语句 1.操作符1.1.算数运算符正常的数据运算进行数据运算时&#xff0c;除外&#xff0c;其他运算符可以自动将字符串数字隐形转成数字 1.2.一元运算符JavaScript中有8种常用的一元运算符 (正号)1.的第一种用法:进行数据相加2.放在数据的前面&#…...

判断一个字符串中是否包含中文字符

下面我将为你提供三种常用的方法&#xff1a; 方法一&#xff1a;使用正则表达式 import java.util.regex.Pattern; import java.util.regex.Matcher;public class ChineseCharacterChecker {public static boolean containsChineseCharacters(String input) {String regex …...

软件测试面试怎样介绍自己的测试项目?会问到什么程度?

想知道面试时该怎样介绍测试项目&#xff1f;会问到什么程度&#xff1f;那就需要换位思考&#xff0c;思考HR在这个环节想知道什么。 HR在该环节普遍想获得的情报主要是下面这2个方面&#xff1a; 1&#xff09;应聘者的具体经验和技术能力&#xff0c; 2&#xff09;应聘者的…...

莫名其妙el-table不显示问题

完全复制element-ui中table代码&#xff0c;发现表格仍然不显示&#xff0c;看别人都说让降低版本&#xff0c;可我不想降低啊&#xff0c;不然其他组件有可能用不了&#xff0c;后来发现可以通过配置vite.config.js alias: {: path.resolve(__dirname, src),vue: vue/dist/vue…...

ElasticSearch复杂数据类型

ElasticSearch入门到实战教程&#xff1a;点击查看 1. 对象类型&#xff08;object&#xff09; 一个字段下需要多种类型的属性字段&#xff0c;属性 attr 有身高、体重&#xff0c;添加映射语句如下&#xff1a; POST indexname/_mapping {"properties": {"…...

JavaScript_Pig Game保存当前分数

上个文章我们基本上完成了摇色子和切换当前玩家的功能。 现在我们开始写用户选择不再摇骰子的话&#xff0c;我们将用户的当前分数存入到持有分数中&#xff01; ● 首先我们应该利用一个数组去存储两个用户的分数 const scores [0, 0];● 接着我们利用数组来对分数进行累…...

2023/10/30 JAVA学习

JAVA浮点型运算会出现精度问题 如果没break,不会立刻停止,会执行下一个语句,并且不会判断条件,执行完后break 也可以这样写定义动态数组 两个变量地址相同,指向了同一个数组对象,所以更改一个另一个也会进行更改 方法其实就是函数 OUT: 外部标签,一种神奇的方式, print是输出括…...

测试八股文-Selenium

测试八股文-Selenium 总结了一些selenium的常见问题&#xff0c;欢迎评论区补充&#xff0c;如需教学辅导可私信作者 什么是Selenium&#xff1f; Selenium是一个自动化测试框架&#xff0c;用于模拟用户在Web应用程序中的交互行为。它支持多种语言&#xff0c;包括Java、Py…...

数据库第8章作业

ps&#xff1a;本篇只为记录和分享 一. 单选题&#xff08;共20题&#xff09; 1. (单选题)E-R图是数据库设计的工具之一&#xff0c;它适用于建立数据库的&#xff08; &#xff09;。 A. 概念模型B. 物理模型C. 逻辑模型D. 结构模型 我的答案: A :概念模型; 2. (单选题)数…...

【OpenCV实现平滑图像金字塔,轮廓:入门】

文章目录 概要图像金字塔轮廓&#xff1a;入门 概要 文章内容的概要&#xff1a; 平滑图像金字塔&#xff1a; 图像金字塔是什么&#xff1f; 图像金字塔是指将原始图像按照不同的分辨率进行多次缩小&#xff08;下采样&#xff09;得到的一系列图像。这种处理方式常用于图像…...

Java JVM垃圾回收确定垃圾的两种方式,GC Root

文章目录 前言一、如何确定是垃圾&#xff1f;引用计数法根可达路径法 二、GC Root1、以下可作为GC Root对象2、判断可回收&#xff1a;GC Root不可达3、真正宣告对象死亡需经过两次标记过程&#xff08;重要&#xff09; 前言 对于Java两种确定对象为可回收的两种方式&#x…...

java集合之List接口实现类常用方法详解

目录 一、List集合概述 二、ArrayList类 三、ArrayList常用方法实例 四、LinkedList类 五、Linkedist常用方法实例 一、List集合概述 java.util.List接口继承自Collection接口&#xff0c;是单列集合的一个分支&#xff0c;通常将实现了List接口的对象称为List集合&#x…...

三分钟带你了解JS、原型、原型链

1.什么是JS&#xff1f; JavaScript是一种基于对象的脚本语言&#xff0c;它不仅可以创建对象&#xff0c;也能使用现有的对象&#xff1b; 它是基于原型编程、多范式的动态脚本语言&#xff0c;并且支持面向对象、命令式、声明式、函数式编程范式&#xff1b; 白话一点说就是…...

利用ngx_stream_return_module构建简易 TCP/UDP 响应网关

一、模块概述 ngx_stream_return_module 提供了一个极简的指令&#xff1a; return <value>;在收到客户端连接后&#xff0c;立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量&#xff08;如 $time_iso8601、$remote_addr 等&#xff09;&a…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

DBAPI如何优雅的获取单条数据

API如何优雅的获取单条数据 案例一 对于查询类API&#xff0c;查询的是单条数据&#xff0c;比如根据主键ID查询用户信息&#xff0c;sql如下&#xff1a; select id, name, age from user where id #{id}API默认返回的数据格式是多条的&#xff0c;如下&#xff1a; {&qu…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...