elementui实现表格自定义排序

需求说明:

1、第一行不参与排序
2、实现带%排序
3、实现null值排序
4、实现值相等不排序
5、实现含有占位符‘–‘排序放到最后

效果图如下:

在这里插入图片描述

<template>
<div><template><el-table border :data="previewTableData" style="width:80%;margin:100px auto;" @sort-change="sortChange"><el-table-column :sortable="item.val=='showcityname'?false:'custom'" v-for="(item,index) in tableTitle" :prop="item.val" :label="item.name"></el-table-column></el-table></template>
</div>
</template><script>
export default {data() {return {tableTitle: [{name: "地区",val: "showcityname",},{name: "全为空",val: "date",},{name: "数量",val: "num",},{name: "包含--",val: "address",},{name: "包含null",val: "tag",},{name: "包含%",val: "bai",},],previewTableData: [{date: null,num: 90,address: "--",tag: 2,bai: "100%",all: 1,showcityname: "重庆"},{date: null,num: 22,address: 1,tag: null,bai: "5%",all: 1,showcityname: "南岸"},{date: null,num: 3,address: 3,tag: 30,bai: null,all: 1,showcityname: "江北"},{date: null,num: 45,address: 2,tag: 11,bai: "-2.4%",all: 1,showcityname: "渝北"},{date: null,num: 5,address: "--",tag: 49,bai: "-8%",all: 1,showcityname: "九龙坡"},{date: null,num: 6,address: "--",tag: null,bai: null,all: 1,showcityname: "巴南"},],//   复制一份数据previewTableDataClone: [{date: null,num: 90,address: "--",tag: 2,bai: "100%",all: 1,showcityname: "重庆"},{date: null,num: 22,address: 1,tag: null,bai: "5%",all: 1,showcityname: "南岸"},{date: null,num: 3,address: 3,tag: 30,bai: null,all: 1,showcityname: "江北"},{date: null,num: 45,address: 2,tag: 11,bai: "-2.4%",all: 1,showcityname: "渝北"},{date: null,num: 5,address: "--",tag: 49,bai: "-8%",all: 1,showcityname: "九龙坡"},{date: null,num: 6,address: "--",tag: null,bai: null,all: 1,showcityname: "巴南"},],};},created() {},methods: {sortChange({column,prop,order}) {let arr = [];let obj = {};console.log(column);console.log(prop);console.log(order);let nullArr = [];let otherArr = [];//判断是否都为null,true不执行排序,反之排序let flag = this.previewTableData.every((item) => !item[prop]);let equalVal = this.previewTableData.map((item) => item[prop]);let equalValFlag = false;//判断是否每个值都相等if (equalVal.length) {//和第一个值进行比较equalValFlag = equalVal.every((item) => item == equalVal[0]);}console.log(equalValFlag, "equalValFlag", flag, "flag");if (!flag && !equalValFlag) {console.log("我执行了");this.previewTableData.forEach((item, index) => {if (item.showcityname == "重庆") {console.log(item.showcityname);obj = item;}});if (!this.previewTableData.length) return;if (order == "ascending") {this.previewTableData.forEach((item) => {if (item[prop] && item[prop] !== "--") {otherArr.push(item);} else {nullArr.push(item);}});// this.previewTableData = [...otherArr,...nullArr]this.previewTableData = otherArr.sort((a, b) => {if ((a[prop] + "").includes("%") || (b[prop] + "").includes("%")) {return a[prop].replace("%", "") - b[prop].replace("%", "");} else {return a[prop] - b[prop];}}).concat(nullArr);this.previewTableData.forEach((item, index) => {if (item.showcityname == "重庆") {this.previewTableData.splice(index, 1);}});if (!Object.keys(obj).length) return;this.previewTableData.unshift(obj);} else if (order == "descending") {this.previewTableData.forEach((item) => {if (item[prop] && item[prop] !== "--") {otherArr.push(item);} else {nullArr.push(item);}});// this.previewTableData = [...otherArr,...nullArr]this.previewTableData = otherArr.sort((a, b) => {if ((a[prop] + "").includes("%") ||(b[prop] + "").includes("%")) {return b[prop].replace("%", "") - a[prop].replace("%", "");} else {return b[prop] - a[prop];}}).concat(nullArr);this.previewTableData.forEach((item, index) => {if (item.showcityname == "重庆") {this.previewTableData.splice(index, 1);}});if (!Object.keys(obj).length) return;this.previewTableData.unshift(obj);} else {// this.previewTableDataClone是在接口得到表格数据的时候拷贝了一份,用来还原取消排序时的表格数据this.previewTableData = this.previewTableDataClone}}},},
};
</script><style lang="less" scoped>
/deep/.elx-header--column.col--ellipsis>.elx-cell .elx-cell--title {overflow: hidden;text-overflow: ellipsis;white-space: pre-wrap;
}
</style>

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

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

相关文章

vue三种方式导出报表至excel

1、序言 1.1、源码 源码在下方&#xff0c;复制运行&#xff0c;安装相应的插件即可 1.2、坑 方式一、方式二安装相同插件&#xff1a; npm install xlsx xlsx-style file-saver 导入 xlsx-style 会报如下的错误 解决办法&#xff1a; &#xff08;1&#xff09;去node_modules…

个人对于SAR的粗浅理解

个人对于SAR的粗浅理解 有同学问我是做成像的&#xff0c;让我解释一下SAR成像&#xff0c;我思索了一下&#xff0c;决定这样简单回答&#xff1a; 首先SAR的全称为Synthetic Aperture Radar&#xff0c;即合成孔径雷达&#xff0c;本质还是一种Radar 合成孔径&#xff0c;其…

二叉树刷题总结

题单&#xff1a; 一&#xff0c;相同的树 题目&#xff1a; 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 题目接口&#xff1a; /*** Defin…

STM32实战项目—密码锁

该项目的完整工程可以在博主的资源里找到&#xff0c;仅供参考。 文章目录 一、任务要求二、实现方法2.1 输入密码判断2.2 管理员模式2.3 修改密码 三、程序设计3.1 输入密码判断3.2 进入管理员模式3.3 修改密码 四、问题总结4.1 输入内容一直提示Error4.2 密码判断一直错误 五…

ADB原理,常用命令汇总及示例

一. ADB简介 ADB&#xff0c;即 Android Debug Bridge 是一种允许模拟器或已连接的 Android 设备进行通信的命令行工具&#xff0c;它可为各种设备操作提供便利&#xff0c;如安装和调试应用&#xff0c;并提供对 Unix shell&#xff08;可用来在模拟器或连接的设备上运行各种…

对话小红书剑寒:如何跨方向技术融合,全局优化打造更智能的音视频系统?...

编者按&#xff1a;在 AI 时代&#xff0c;随着 ChatGPT 掀起技术狂潮&#xff0c;构建更智能的音视频系统已经成为音视频领域从业者的共同目标。 然而&#xff0c;音视频系统的智能化&#xff0c;每个从业者对其都有自己独特的视角和理解&#xff0c;正如“一千个人眼中有一千…

基于FreeRTOS的嵌入式设备管理关键技术研究及实现(学习四)

硬件平台 终端设备的硬件选型主要由STM32芯片作为处理器&#xff0c;板载时钟电路和电源电路以及对外通信串口&#xff0c;并挂载AM2302温湿度传感器来实时收集环境相关信息&#xff0c;将收集到的信息通过NB-IoT通信模组上传到云端&#xff0c;从而实现整个环境监测功能。 主…

基于jsp+Servlet+mysql学生信息管理系统V2.0

基于jspServletmysql学生信息管理系统V2.0 一、系统介绍二、功能展示1.项目骨架2.数据库表3.项目内容4.登陆界面5.学生-学生信息6、学生-修改密码7、管理员-学生管理8、管理员-添加学生9.管理员-修改学生信息10.管理员-班级信息11.管理员-教师信息 四、其它1.其他系统实现五.获…

【Linux】LVS负载均衡群集 NAT模式

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 LVS负载均衡群集 NAT模式 一、理解负载均衡群集的原理1.企业群集应用概述2.企业群集分类3.负载均衡群集架构4.负载均衡群集工作模式分析5.NAT模式6.TUN模式7.DR模式 二、LVS虚…

CMU 15-445 -- Tree Indexes - 05

CMU 15-445 -- Tree Indexes - 05 引言Table IndexB TreeB-Tree FamilyB TreeB Tree NodesB Tree OperationsIn Practice Clustered IndexesCompound IndexB Tree Design ChoicesNode SizeMerge ThresholdVariable Length KeysNon-unique IndexesIntra-node Search Optimizatio…

SpringBoot(原理篇)

SpringBoot原理篇 自动配置 bean加载方式 xml方式声明bean 相关类&#xff1a; domain域中的实体类&#xff1a; public class Mouse { }public class Cat { }public class Dog { }测试&#xff1a; public class App1 {public static void main(String[] args) {ClassP…

【hadoop】Linux安装和配置

安装 RedHat Linux 7.4 创建新的虚拟机 选择“自定义&#xff08;高级&#xff09;” 选择“下一步” 选择“稍后安装操作系统” 选择操作系统的类型 设置虚拟机名称和保存路径 下一步 下一步 设置网络类型&#xff0c;选择“使用仅主机模式网络” 下一步 下一步 下一步 设置硬…