element表格自定义筛选

文章目录

  • 前言
  • 一、简介
  • 二、效果展示
  • 三、源码
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

…待续


提示:以下是本篇文章正文内容,下面案例可供参考

一、简介

修改el-table的筛选…待续

二、效果展示

在这里插入图片描述
在这里插入图片描述

三、源码

使用方法

<el-table-columnalign="center"prop="status":column-key="'status'"
><template #header><div class="layout-center-center"><span>路由状态</span><table-filterplaceholder="按路由状态搜索"filter-key="status"sortable:options="routeStatusList"@confirm="handleFilter":checked-list="tempFlow.status_list":sequence="tempFlow.sequence"></table-filter></div></template><template #default="{ row }"><span v-if="row.status == 0" style="color: green">[{{ row.status }}]{{ row.status_desc }}</span><span v-else style="color: red">[{{ row.status }}]{{ row.status_desc }}</span></template>
</el-table-column>

组件源码

<template><div class="table-filter" @click.stop><el-popoverref="popoverRef"popper-class="table-filter-box"placement="bottom":width="250"trigger="click"@show="handleShow"@hide="handleHide"><template #reference><el-icon v-if="showParams.showSelectBox"><ArrowUp /></el-icon><el-icon v-if="!showParams.showSelectBox"><ArrowDown /></el-icon></template><section class="table-filter-btns"><el-inputv-if="filter"v-model="searchKey":placeholder="placeholder"size="mini"class="filte-input"@input="search"/><el-divider v-if="filter" /><el-scrollbar max-height="200px" ref="scrollbarRef" v-if="filter"><div><el-checkboxv-model="checkAll"label="全部"size="large"@change="selectAll"/></div><divclass="infinite-list-item"v-for="option in showOptions":key="option"><el-checkboxv-model="option.checked":label="option.label"size="large"@change="selectItem(option.value, option.checked)"/></div></el-scrollbar><el-divider v-if="filter" /><div v-if="props.sortable"><el-checkbox v-model="sortable_asc" label="ASC" /><el-checkbox v-model="sortable_desc" label="DESC" /></div><el-divider v-if="props.sortable" /><section class="btns"><el-button type="primary" size="small" @click="handleConfirm">筛选</el-button><el-buttonsize="small"color="#ff5722"style="color: #fff"@click="handleCancel">取消</el-button></section></section></el-popover><el-icon v-if="checkedList.length > 0"><Filter /></el-icon><el-icon v-if="sortable_asc"><CaretTop /></el-icon><el-icon v-if="sortable_desc"><CaretBottom /></el-icon></div>
</template><script setup>
import { defineProps, reactive, ref, watch } from "vue";
const props = defineProps({placeholder: {},options: {},filterKey: {},checkedList: {type: Array,default: [],},sequence: {},sortable: {type: Boolean,default: false,},filter: {type: Boolean,default: true,},
});
let curCheckedList = _.cloneDeep(props.checkedList);
let curSequence = props.sequence;
const emit = defineEmits(["confirm"]);const scrollbarRef = ref();
const popoverRef = ref();
let searchKey = ref();
let checkAll = ref(true); //默认全选
let showOptions = ref([]);
let showParams = reactive({showSelectBox: false, //展示下拉框
});
let timer = ""; //处理输入事件的定时器,一次只允许一个定时器存在,避免过度刷新造成的卡顿
let timer_ = "";
let sortable_asc = ref(false);
let sortable_desc = ref(false);
let ifDoSearch = false; // 是否正在处理输入的数据中...
const init = (sequence) => {showOptions.value = _.cloneDeep(props.options);if (curCheckedList.length == props.options.length) {checkAll.value = true;} else {checkAll.value = false;}if (!sequence) {sortable_asc.value = false;sortable_desc.value = false;} else if (sequence == "ASC") {sortable_asc.value = true;} else if (sequence == "DESC") {sortable_desc.value = true;}
};
init(curSequence);// 点击全选
const selectAll = (checked) => {if (checked) {curCheckedList = [];showOptions.value = showOptions.value.map((item) => {item.checked = true;curCheckedList.push(item.value);return item;});} else {showOptions.value = showOptions.value.map((item) => {item.checked = false;return item;});curCheckedList = [];}
};// 勾选当前选项
const selectItem = (id, checked) => {if (checked) {curCheckedList.push(id);if (curCheckedList.length == props.options.length) {checkAll.value = true;}} else {curCheckedList.splice(curCheckedList.indexOf(id), 1);checkAll.value = false;}
};/*** @desc 确认事件*/
const handleConfirm = () => {emit("confirm", {key: props.filterKey,checkedList: curCheckedList,sequence: curSequence,});props.checkedList = _.cloneDeep(curCheckedList);props.sequence = curSequence;popoverRef.value.hide();
};/*** @desc 取消事件*/
const handleCancel = () => {popoverRef.value.hide();curCheckedList = _.cloneDeep(props.checkedList);init(props.sequence);
};// 下拉框展示触发的事件
const handleShow = (e) => {showParams.showSelectBox = true;if (props.filter) {scrollbarRef.value.setScrollTop(0);}
};
const handleHide = (e) => {showParams.showSelectBox = false;
};function search(query) {if (ifDoSearch) {clearTimeout(timer);clearTimeout(timer_);}timer = setTimeout(filterMethod(query), 0);ifDoSearch = true;
}function filterMethod(query) {let tmp = [];if (query !== "") {timer_ = setTimeout(() => {props.options.forEach((item) => {if (item.label.toLowerCase().indexOf(query.toLowerCase()) > -1 ||item.value == -1) {tmp.push(item);}});showOptions.value = tmp;}, 0);} else {showOptions.value = props.options;}ifDoSearch = false;
}watch(() => sortable_asc.value,(newValue, oldValue) => {if (newValue === oldValue) {return;} else if (newValue) {curSequence = "ASC";sortable_desc.value = false;} else if (!newValue) {curSequence = "";}}
);watch(() => sortable_desc.value,(newValue, oldValue) => {if (newValue === oldValue) {return;} else if (newValue) {curSequence = "DESC";sortable_asc.value = false;} else if (!newValue) {curSequence = "";}}
);
</script><style lang="less" scoped>
:deep(.el-divider--horizontal) {margin: 12px 0px;
}
:deep(.el-popper) {padding: 0px;
}
:deep(.el-popover) {padding: 0px;
}
.table-filter {display: inline-block;cursor: pointer;
}
.table-filter-box {height: 25px;line-height: 25px;
}
.table-filter-icon {font: 500;font-size: 18px;
}
.filte-input {width: 100%;
}
.btns {float: right;
}
.infinite-list {padding: 0;margin: 0;list-style: none;
}
</style>


总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

sentinel规则持久化-规则同步nacos-最标准配置

官方参考文档&#xff1a; 动态规则扩展 alibaba/Sentinel Wiki GitHub 需要修改的代码如下&#xff1a; 为了便于后续版本集成nacos&#xff0c;简单讲一下集成思路 1.更改pom 修改sentinel-datasource-nacos的范围 将 <dependency><groupId>com.alibaba.c…

[SUCTF 2019]EasySQL 1

题目环境&#xff1a; 把你的旗子给我&#xff0c;我会告诉你旗子是不是对的。 判断注入类型1回显结果 不是字符型SQL注入 1回显结果 数字型SQL注入 查所有数据库,采用堆叠注入1;show databases;查看所有数据表1;show tables;尝试爆Flag数据表的字段1;show columns from Flag; …

LeetCode | 27. 移除元素

LeetCode | 27. 移除元素 OJ链接 这道题有一个方法是要删除的数据直接后一个数据挪动到前一个数据&#xff0c;这个方法好不好&#xff1f;最坏的情况下时间复杂度是O(N^2) 还有一个方法 定义一个src定义一个dst&#xff0c;原地直接进行赋值&#xff0c;不进行挪动&#xf…

Qt程序执行编译输出内容解释

以这个为例&#xff1a; D:\SoftwareInstall\Qt6\Tools\QtCreator\bin\jom\jom.exe -f Makefile.Debug cd AuthorizeTools\ && ( if not exist Makefile D:\SoftwareInstall\Qt6\5.15.2\msvc2019_64\bin\qmake.exe -o Makefile E:\Coding\project\DigitalCamera\digita…

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库

Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库安装 IndexDB类库引入 localForage测试 新增数据、获取数据 Vue使用 IndexDB vue操作IndexDB数据库 Vue操作IndexDB数据库 大部分场景使用 LocalStore都…

Linux | 进程终止与进程等待

目录 前言 一、进程终止 1、进程终止的几种可能 2、exit 与 _exit 二、进程等待 1、为什么要进程等待 2、如何进行进程等待 &#xff08;1&#xff09;wait函数 &#xff08;2&#xff09;waitpid函数 3、再次深刻理解进程等待 前言 我们前面介绍进程时说子进程退出…

pytorch复现4_Resnet

ResNet在《Deep Residual Learning for Image Recognition》论文中提出&#xff0c;是在CVPR 2016发表的一种影响深远的网络模型&#xff0c;由何凯明大神团队提出来&#xff0c;在ImageNet的分类比赛上将网络深度直接提高到了152层&#xff0c;前一年夺冠的VGG只有19层。Image…

uniapp 关于 video 组件的缩放比例问题

在 container 样式的 padding-bottom 设置比例值 9/16 比例值&#xff1a;56.25% 3/4 比例值&#xff1a;75% <view class"container"><video class"video-box" src"xxx.mp4" /> </view> .container {position: relative;wid…

Redis(01)| 数据结构

这里写自定义目录标题 Redis 速度快的原因除了它是内存数据库&#xff0c;使得所有的操作都在内存上进行之外&#xff0c;还有一个重要因素&#xff0c;它实现的数据结构&#xff0c;使得我们对数据进行增删查改操作时&#xff0c;Redis 能高效的处理。 因此&#xff0c;这次我…

作为20年老程序员,我如何使用GPT4来帮我写代码

如果你还在用google寻找解决代码bug的方案&#xff0c;那你真的out了&#xff0c;试试gpt4, save my life. 不是小编危言耸听&#xff0c;最近用gpt4来写代码极大地提高了代码生产力和运行效率&#xff0c;今天特地跟大家分享一下。 https://www.promptspower.comhttps://www.…

测开 (Junit 单元测试框架)

目录 了解 Junit 引入相关依赖 1、Junit注解 Test BeforeEach、BeforeAll AfterEach && AfterAll 2、断言 1、Assertions - assertEquals 方法 2、Assertions - assertNotEquals 方法 3、Assertions - assertTrue && assertFalse方法 4、Assertions…

Microsoft365个人版与家庭版有哪些功能区别?

Microsoft 365个人版与家庭版均能享受完整的Microsoft 365功能与权益&#xff0c;稍有不同的是&#xff0c;Microsoft 365家庭版可供6人使用&#xff0c;而个人版是仅供一人使用。 个人版可以同时登入5台设备&#xff0c;家庭版每人也可以登入5台设备&#xff0c;每个人都可以享…

【Linux】centos安装配置及远程连接工具的使用

前言 CentOS 是什么&#xff1f; CentOS社区企业操作系统&#xff08;Community Enterprise Operating System&#xff09; CentOS 是众多 Linux 发行版中的一种。全称&#xff1a; The Community ENTerprise Operating System 。 她是将 Red Hat Enterprise Linux &#xff…

sitespeedio.io 前端页面监控安装部署接入influxdb 到grafana

1.docker部署influxdb,部署1.8一下&#xff0c;不然语法有变化后面用不了grafana模板 docker run -d -p 8086:8086 --name influxdb -v $PWD/influxdb-data:/var/lib/influxdb influxdb:1.7.11-alpine docker exec -it influxdb_id bash #influx create user admin with pass…

Yakit工具篇:WebFuzzer模块之重放和爆破

简介 Yakit的Web Fuzzer模块支持用户自定义HTTP原文发送请求。为了让用户使用简单&#xff0c;符合直觉&#xff0c;只需要关心数据相关信息&#xff0c;Yakit后端(yaklang)做了很多工作。 首先我们先来学习重放请求的操作&#xff0c;在日常工作中可以使用 Web Fuzzer进行请…

无法查看 spring-boot-starter-parent的pom.xml

1. idea版本&#xff1a;2022.3 2. 使用Spring Initializr创建一个简单的spring-boot项目&#xff0c;发现无法查看 spring-boot-starter-parent的pom.xml ctrl鼠标左键 和 ctrl B 都无法进入 3. 解决&#xff1a;清除缓存重启&#xff08;&#x1f927;&#x1f630;&#…

计算机网络_04_传输层

文章目录 1.什么是传输层2.传输层提供了什么服务3.传输层协议TCP 1.什么是传输层 传输层是OSI七层体系架构中的第四层, TCP/IP四层体系架构中的第二层, 从通信和信息处理两方面来看&#xff0c;“传输层”既是面向通信部分的最高层&#xff0c;与下面的三层一起共同构建进行网…

木马免杀(篇三)静态免杀方法

紧接上一篇&#xff0c;是通过 cs 生成 shellcode 并直接用python 调用动态链接库执行 shellcode 。 生成后的exe文件未进行任何处理。 现在学习一些可以绕过静态免杀的方法。即将文件上传到目标不会被杀软查杀&#xff0c;但这只是静态方面。 动态免杀方面还涉及到很多东西&…

联手皇室企业 哪吒汽车发力阿联酋

布局阿联酋,哪吒汽车全球化战略加速落地。10月27日,哪吒汽车与阿联酋知名企业——EIH Automotive &Trading,在上海签署战略合作协议,并宣布2024年将为阿联酋带去多款车型。拥有皇室背景的EIH Automotive &Trading,将成为哪吒汽车在阿联酋的首家战略经销商,加速哪吒汽车…

取消Excel打开密码的两种方法

Excel设置了打开密码&#xff0c;想要取消打开密码是由两种方法的&#xff0c;今天分享这两种方法给大家。 想要取消密码是需要直到正确密码的&#xff0c;因为只有打开文件才能进行取消密码的操作 方法一&#xff1a; 是大家常见的取消方法&#xff0c;打开excel文件之后&a…