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.rhkb.cn/news/175912.html

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

相关文章

Python爬虫程序中的504错误:原因、常见场景和解决方法

概述 在编写Python爬虫程序时&#xff0c;我们经常会遇到各种错误和异常。其中&#xff0c;504错误是一种常见的网络错误&#xff0c;它表示网关超时。是指客户端与服务器之间的网关通信过程中&#xff0c;服务器在规定的时间内没有返回响应&#xff0c;导致请求超时。此类错误…

【Qt控件之QMessageBox】详解

Qt控件之QMessageBox 描述基于属性的API富文本和文本格式属性严重程度以及图标和Pixmap属性静态函数API 高级用法默认按钮和退出按钮示例使用场景 描述 QMessageBox类提供了一个模态对话框&#xff0c;用于通知用户或向用户提问并接收答案。 消息框显示一个主要文本以提醒用户…

从小白到精通:揭秘perf工具的全部功能与操作技巧

揭秘perf工具的全部功能与操作技巧 一、引言二、理解perf工具的基本概念三、安装与配置perf工具3.1、不同操作系统的perf工具安装3.2、perf工具的配置选项和环境设置 四、perf工具的常用命令和功能4.1、perf工具的基本命令结构和常用参数4.2、perf工具的常见用法和功能4.3、per…

解决恶意IP地址攻击:保卫网络安全的有效方法

随着互联网的发展&#xff0c;网络安全威胁变得日益复杂&#xff0c;其中包括恶意IP地址攻击。这些攻击通常是网络犯罪分子的手段之一&#xff0c;用于入侵系统、窃取数据或进行其他恶意活动。本文将探讨如何解决恶意IP地址攻击&#xff0c;以保护网络安全。 恶意IP地址攻击是…

关于测试组件junit切换testng的示例以及切换方式分享

文章目录 概要首先看看junit和testng的区别实践篇摸拟业务逻辑代码简单对象数据层摸拟类业务逻辑层摸拟类后台任务摸拟类 基于springmockjunit基于springmocktestng 示例的差异点junit与testng的主要变动不大,有以下几个点需要注意注解部分在before,after中testng多出按配置执行…

华为数通方向HCIP-DataCom H12-831题库(多选题:101-120)

第101题 LSR对收到的标签进行保留,且保留方式有多种,那么以下关于LDP标签保留一自由方式的说法 A、保留邻居发送来的所有标签 B、需要更多的内存和标签空间 C、只保留来自下一跳邻居的标签,丢弃所有非下一跳铃邻居发来的标签 D、节省内存和标签空间 E、当IP路由收敛、下一跳…

verilog语言学习

1. 时延 2. 一位全加器设计&#xff1a;三种建模方式 实际的设计中往往是这三种设计模式的混合 3. 4. 5. 6. 7. 建立模型时信号的连接&#xff08;重点&#xff09; 8. initial语句 9. always语句 在always中不能同时判断同一个信号的上升沿&#xff08;posedge&#xff0…

简单明了!网关Gateway路由配置filters实现路径重写及对应正则表达式的解析

问题背景&#xff1a; 前端需要发送一个这样的请求&#xff0c;但出现404 首先解析请求的变化&#xff1a; http://www.51xuecheng.cn/api/checkcode/pic 1.请求先打在nginx&#xff0c;www.51xuecheng.cn/api/checkcode/pic部分匹配到了之后会转发给网关进行处理变成localho…

软件测试之BUG篇(定义,创建,等级,生命周期)

目录 1. BUG 的定义 2. 如何创建 BUG 3. BUG 等级 4. BUG 生命周期 高频面试题&#xff1a; 1. BUG 的定义 当且仅当产品规格书存在且正确时&#xff0c;程序的实现和规格书的要求不匹配时&#xff0c;那就是软件错误。当产品规格说明书没有提到的功能时&#xff0c;以用户…

如何使用drawio画流程图以及导入导出

画一个基本的流程图 你可以在线使用drawio, 或者drawon创建很多不同类型的图表。 如何使用编辑器&#xff0c;让我们以一个最基本的流程图开始。 流程图&#xff0c;就是让你可视化的描述一个过程或者系统。 图形和很少部分的文字表达就可以让读者很快的理解他们需要什么。 创…

如何看待2023年大量劝入C++?

如何看待2023年大量劝入C&#xff1f; 这一段陆陆续续很多人关注这个话题&#xff0c;想提醒大家&#xff0c;c真的很看重领域行业经验&#xff0c;在这里&#xff0c;c只是个工具&#xff0c;相反是这个行业的知识更重要&#xff0c; 最近很多小伙伴找我&#xff0c;说想要一…

制作一个简单的C语言词法分析程序

1.分析组成 C语言的程序中&#xff0c;有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表&#xff0c;给出对应的识别码&#xff0c;然后跟据对应的表格来写出程序 2.程序设计 程序主要有循环判断构成。不需推理即可产生的符号我…

【机器学习可解释性】4.SHAP 值

机器学习可解释性 1.模型洞察的价值2.特征重要性排列3.部分依赖图4.SHAP 值5.SHAP值的高级使用 正文 理解各自特征的预测结果&#xff1f; 介绍 您已经看到(并使用)了从机器学习模型中提取一般解释技术。但是&#xff0c;如果你想要打破模型对单个预测的工作原理? SHAP 值…

大促期间如何应对低价链接

一年一度的大促双十一即将来临&#xff0c;品牌商、经销商在忙着出货&#xff0c;消费者也在积极比价&#xff0c;大促最直观的感觉就是价格&#xff0c;没有低价的大促是没有意义的&#xff0c;所以品牌要管的不是低价产品&#xff0c;而是在不受规则下的低价行为。 力维网络有…

maven:编译出现Process terminated解决方法(超全)

maven:编译出现Process terminated解决方法&#xff08;超全&#xff09; 一. 情况一&#xff1a;配置文件 settings. xml 出错&#xff08;解决方法1&#xff09;1.1 项目编译报错如下&#xff1a;1.2 点击【项目名】提示找到出错文件1.3 点击查看出错文件1.4 原因及解决办法 …

Matlab论文插图绘制模板第123期—水平正负柱状图

在之前的文章中&#xff0c;分享了很多Matlab柱状图的绘制模板&#xff1a; 进一步&#xff0c;再来看一种特殊的柱状图&#xff1a;水平正负柱状图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下…

省钱兄短剧短视频视频滑动播放模块源码支持微信小程序h5安卓IOS

# 开源说明 开源省钱兄短剧系统的播放视频模块&#xff08;写了测试弄了好久才弄出来、最核心的模块、已经实战了&#xff09;&#xff0c;使用uniapp技术&#xff0c;提供学习使用&#xff0c;支持IOSAndroidH5微信小程序&#xff0c;使用Hbuilder导入即可运行 #注意&#xff…

[红蓝攻防]MDOG(全新UI重制版)为Xss跨站而生,数据共享,表单劫持,URL重定向

项目:https://github.com/MartinxMax/MDOG 说明 功能Cookie窃取表单劫持(钓鱼账密)重定向流量劫持多平台数据推送钉钉数据推送 运行窗口 ./dist目录下已生成exe文件,双击打开 Cookie窃取 点击运行服务,复制以上的payload,payload怎么变形那么你可已去混淆 payload在页面执…

chatgpt论文润色 降重

用chatgpt最好要给他范例。chatgpt降重原理&#xff1a; https://www.bilibili.com/video/BV1Eh411M7Ug/?spm_id_from333.337.search-card.all.click&vd_sourceebc47f36e62b223817b8e0edff181613 一. 中文论文翻译成英文 广义零样本学习是我的研究方向&#xff0c;下面…

网络爬虫适合什么代理IP?如何使用?

在互联网时代之下&#xff0c;大数据对各行各业的发展有着重要的推动作用&#xff0c;而说到数据采集&#xff0c;必不可少的就是去使用爬虫工作。 一、什么是网络爬虫&#xff1f; 它是一种按照一定的规则自动游览、检索网页信息的程序或者脚本&#xff0c;通过自动请求目标…