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

vue+element-ui的列表查询条件/筛选条件太多以下拉选择方式动态添加条件(支持全选、反选、清空)

1、此功能已集成到TQueryCondition组件中

2、最终效果

在这里插入图片描述

3、具体源码(新增moreChoose.vue)

<template><el-popoverpopper-class="t_query_condition_more":bind="popoverAttrsBind"ref="popover"v-if="allcheckList.length>0"><div class="inside_box"><div class="inside_box_title"><div>{{popoverAttrsBind.title||'所有条件'}}</div><div class="check-box"><el-buttonsize="mini"type="text"@click="handlecheckAll">{{popoverAttrsBind.allTxt||'全选'}}</el-button><el-buttonsize="mini"type="text"@click="handleReset">{{popoverAttrsBind.clearTxt||'清空'}}</el-button><el-buttonsize="mini"type="text"@click="handleReverseCheck">{{popoverAttrsBind.reverseTxt||'反选'}}</el-button></div></div><el-checkbox-group v-model="checkList" class="inside_box_main" @change="getcheck"><el-checkbox v-for="item of allcheckList" :key="item.name" :label="item.label"></el-checkbox></el-checkbox-group></div><span class="more_dropdown_icon" slot="reference"><span class="out_box">{{popoverAttrsBind.showTxt||'更多'}}</span><i class="el-icon-arrow-down"></i></span></el-popover>
</template>
<script>
export default {name: 'MoreChoose',props: {// 以下拉方式展示更多条件---数据源moreCheckList: {type: Array,default: () => []},// 更多条件--el-popover属性popoverAttrs: {type: Object,default: () => ({})}},data() {return {checkList: [],isCheckList: [], // 已选中allcheckList: this.moreCheckList // 全部可选项}},watch: {// 全部可选项moreCheckList: {handler(list) {this.allcheckList = list},deep: true},// 选中项checkList: {handler(nval, oval) {let list = []oval.forEach(ele => {if (!nval.some(val => val == ele)) {list.push(ele)}})this.isCheckList.forEach((ele, j) => {if (list.filter(val => val == ele.label)[0]) {delete this.isCheckList[j]}})}}},computed: {// 以下拉方式展示更多条件--属性popoverAttrsBind() {const popoverAttrs = { showTxt: '更多', title: '所有条件', allTxt: '全选', reverseTxt: '反选', clearTxt: '清空', ...this.popoverAttrs }return { placement: 'bottom', width: 240, trigger: 'click', ...popoverAttrs }}},methods: {// 全选handlecheckAll() {this.checkList = this.allcheckList.map((item) => item.label)// console.log('全选', this.checkList)this.isCheckList = this.allcheckListconst checkObj = this.analysisObj(this.isCheckList)this.$emit('getCheckList', checkObj)},// 反选handleReverseCheck() {const checkList = JSON.parse(JSON.stringify(this.checkList))this.checkList = []this.isCheckList = []this.allcheckList.forEach((ele, j) => {if (!checkList.filter((item1) => item1 == ele.label)[0]) {this.checkList.push(ele.label)this.isCheckList.push(ele)}})const checkObj = this.analysisObj(this.isCheckList)// console.log('反选', checkObj)this.$emit('getCheckList', checkObj)},// 清空handleReset() {// console.log('清空')this.checkList = []this.isCheckList = []this.$emit('getCheckList', {})},// 单选getcheck(val) {this.allcheckList.forEach((ele, j) => {if (val.filter(item1 => item1 == ele.label)[0]) {this.isCheckList.push(ele)}})// console.log('isCheckList---', this.isCheckList, this.checkList)const checkObj = this.analysisObj(this.isCheckList)// console.log('checkObj--222', checkObj)this.$emit('getCheckList', checkObj)},// 格式化analysisObj(val) {return val.reduce((obj, item) => {obj[item.prop] = {label: item.label,comp: item.comp,bind: item.bind,child: item && item.child,slotName: item && item.slotName,span: item && item.span,defaultVal: item && item.defaultVal}if (item.comp === 'el-select') {obj[item.prop].child = item.list.reduce((acc, cur) => {acc.push({comp: 'el-option',value: cur[item.valueKey || 'key'],bind: {label: cur[item.labelKey || 'label'],key: cur[item.valueKey || 'key']}})return acc}, [])}return obj}, {})}}
}
</script>
<style lang="scss">
.t_query_condition_more.el-popover {padding: 10px 15px;padding-top: 5px;.inside_box {display: flex;flex-direction: column;.inside_box_title {display: flex;justify-content: space-between;align-items: center;}.inside_box_main {display: grid;grid-template-columns: repeat(2, minmax(100px, 50%));.el-checkbox {display: flex;align-items: center;.el-checkbox__label {-webkit-box-sizing: border-box;box-sizing: border-box;overflow: hidden;text-overflow: ellipsis;word-break: break-all;min-width: 90px;}}}}
}
</style>

4、集成到TQueryCondition组件

在这里插入图片描述

注意点:开启以下拉方式展示更多条件禁用展开&收起功能

代码示例

<template><t-layout-page><t-layout-page-item><t-query-conditionref="queryCondition":opts="opts"isDropDownSelectMore:loading="loading":moreCheckList="moreCheckList"@submit="conditionEnter"@getCheckList="getChildCheck"><template #likeTransportNo="{param}"><el-input v-model="param.likeTransportNo" clearable placeholder="自定义插槽输入框" /></template></t-query-condition></t-layout-page-item></t-layout-page>
</template>
<script>
const ADDRESS_TYPES = [{label: '前纺一车间',key: 'W1'},{label: '前纺二车间',key: 'W2'},{label: '前纺三车间',key: 'W3'}
]
export default {name: 'queryData',data() {return {loading: false,queryData: {likeCargoNo: null,likeBookNo: null,likeTransportNo: null,likeCargoName: null,workshopNum: null,workshopNum1: null,date1: null,// date: null,},sexList: [],hobbyList: [],opts: {likeCargoNo: {label: '货源编号',comp: 'el-input'},likeBookNo: {labelRender: () => {return (<el-tooltip content={'自定义label'} placement="top"><div>订单编号</div></el-tooltip>)},placeholder: '自定义label',comp: 'el-input'},likeTransportNo: {label: '运单编号',comp: 'el-input',slotName: 'likeTransportNo',},likeCargoName: {label: '货品名称',comp: 'el-input',bind: {}},workshopNum1: {label: '车间2',comp: 'el-select',child: ADDRESS_TYPES.reduce((acc, cur) => {acc.push({comp: 'el-option',value: cur.key,bind: {label: cur.label,key: cur.key}})return acc}, [])},workshopNum: {label: '车间',comp: 'el-select',changeEvent: 'change',// defaultVal: 'W1',bind: {},child: [{comp: 'el-option',value: 'W1',bind: {label: '前纺一车间',key: 'W1'}},{comp: 'el-option',value: 'W2',bind: {label: '前纺二车间',key: 'W2'}},{comp: 'el-option',value: 'W3',bind: {label: '前纺三车间',key: 'W3'}}]},date1: {label: '日期',comp: 'el-date-picker',bind: {valueFormat: 'yyyy-MM-dd'}},},checkQuery: {}}},computed: {moreCheckList() {return [{ label: '姓名', comp: 'el-input', prop: 'name' },{ label: '年龄', comp: 'el-input', prop: 'age' },{ label: '性别', comp: 'el-select', prop: 'sex', valueKey: "value", list: this.sexList },{label: "爱好", comp: "t-select", prop: 'hobby', span: 2, bind: { multiple: true, optionSource: this.hobbyList, valueKey: "value", },},{ label: '合同号', comp: 'el-input', prop: 'contractNo' },{ label: '供应商', comp: 'el-input', prop: 'supplier' },{ label: '磅单号', comp: 'el-input', prop: 'balanceCode' },{ label: '车牌号', comp: 'el-input', prop: 'license' },{ label: '备注', comp: 'el-input', prop: 'remark' },{ label: '检验员', comp: 'el-input', prop: 'inspector' },{ label: '取样人', comp: 'el-input', prop: 'sampler' },{ label: '审核人', comp: 'el-input', prop: 'reviewer' },{ label: '其他检验项', comp: 'el-input', prop: 'physicsInspection' },{ label: '实际数量', comp: 'el-input', prop: 'factQuantity' }]}},watch: {checkQuery: {handler(nval, oval) {for (let i = 0; i < Object.keys(oval).length; i++) {this.$delete(this.opts, Object.keys(oval)[i])}this.opts = Object.assign({}, this.opts, nval)for (let i = 0; i < Object.keys(this.opts).length; i++) {this.queryData[Object.keys(this.opts)[i]] = null}},deep: true}},created() {this.getList()},// 方法methods: {getList() {this.sexList = [{ label: '男', value: '1' }, { label: '女', value: '2' }]this.hobbyList = [{ label: '吉他', value: '0' },{ label: '看书', value: '1' },{ label: '美剧', value: '2' },{ label: '旅游', value: '3' },{ label: '音乐', value: '4' }]},getChildCheck(val) {this.checkQuery = val},// 点击查询按钮conditionEnter(data) {this.loading = truethis.queryData = dataconsole.log('最终条件', this.queryData)setTimeout(() => {this.loading = false}, 2000)}}
}
</script>

5、以下拉方式展示更多条件–配置参数(Attributes)

参数说明类型默认值
popoverAttrsel-popover配置及中文文案object具体看源码
moreCheckList数据源Array-
-----label标题string-
-----comp组件名称,可直接指定全局注册的组件string,component-
-----prop接收字段(即后台接收字段)string-
-----bind组件配置参数(Attributes)object-
-----slotName自定义输入框插槽string-
-----span控件占用的列宽,默认占用 1 列,最多 4 列 (独占一行)number1
-----defaultVal默认值string-
-----listel-select 组件options 数据Array-

6. 事件(events)

事件名说明回调参数
getCheckList下拉动态添加条件返回选中的条件项

7、demo地址

GitHub源码地址

Gitee源码地址

相关文章

基于ElementUi或Antd再次封装基础组件文档

vue3+ts基于Element-plus再次封装基础组件文档

相关文章:

vue+element-ui的列表查询条件/筛选条件太多以下拉选择方式动态添加条件(支持全选、反选、清空)

1、此功能已集成到TQueryCondition组件中 2、最终效果 3、具体源码(新增moreChoose.vue) <template><el-popoverpopper-class"t_query_condition_more":bind"popoverAttrsBind"ref"popover"v-if"allcheckList.length>0"…...

LLM的训练与推断

LLM的训练与推断 目前比较流行的大模型一般都是自回归模型。在推理时&#xff0c;它类似于RNN&#xff0c;每次计算下一个token的概率。也就是说&#xff0c;如果除去最开始的输入情况下&#xff0c;最终推理长度为n的话&#xff0c;就需要计算n次。但是训练却是并行化的。 在…...

uniapp使用WebSocket uniapp使用WebSocket Uniapp整合WebSocket uniapp使用 websocket

uniapp使用WebSocket uniapp使用WebSocket Uniapp整合WebSocket uniapp使用 websocket 前言1、Socket.js2、main.js引入3、组件中调用 前言 代码中的示例只在 H5、APP环境下成功运行&#xff0c;小程序环境下如果无效&#xff0c;需要使用预编译 - 条件性的编译&#xff0c;适…...

SSH Exporter:基于Prometheus的远程系统性能监控神器

SSH Exporter English | 中文 介绍 SSH Exporter 是一个基于 Prometheus 规范的监控工具&#xff0c;通过 SSH 协议远程收集目标服务器的系统性能数据&#xff0c;如 CPU 使用率、内存使用情况、磁盘和网络 I/O 等&#xff0c;并将这些数据暴露为 Prometheus 格式的 metrics…...

Docker基础概念

Docker 是一个流行的容器化平台&#xff0c;它使开发者能够打包他们的应用程序及其依赖项到一个轻量级、可移植的容器中。这有助于确保应用程序无论在哪里运行都能获得一致的结果。以下是 Docker 的几个基础概念的详细解释&#xff1a; 1. Docker 镜像 (Image) 定义: Docker …...

小白进阶为大神

编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&#xff1f;今天&#xff0c;我就来分享一下这方面的经验和知识…...

2024最新Python和PyCharm的安装教程

Python和PyCharm的安装教程如下&#xff1a; Python安装教程 一、下载Python安装包 访问Python官方网站&#xff1a;Welcome to Python.org。 点击页面上方的“Downloads”链接。 在下载页面&#xff0c;选择“Windows”系统&#xff08;以Windows系统为例&#xff09;&…...

数据库死锁:深入解析与应对策略

在数据库管理系统中&#xff0c;死锁是一个常见且棘手的问题&#xff0c;它可能导致系统性能下降、事务延迟甚至完全阻塞。本文将深入探讨数据库死锁的概念、产生原因、检测方法以及预防与解决策略&#xff0c;帮助读者更好地理解和应对这一挑战。 一、什么是数据库死锁&#…...

Python入门宝藏《看漫画学Python》,495页漫画带你弄清python知识点!简单易懂 | 附PDF全彩版

华为出品的《看漫画学Python》全彩PDF教程是一本适合Python初学者的学习资料&#xff0c;通过漫画的形式将复杂的Python技术问题简单化&#xff0c;使学习过程更加生动有趣。以下是对该教程的内容简介、本书概要及本书目录的详细解析&#xff1a; 内容简介 《看漫画学Python》…...

Webshell管理工具:AntSword(中国蚁剑)

中国蚁剑是一款开源的跨平台网站管理工具&#xff0c;它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。 通俗的讲&#xff1a;中国蚁剑是 一 款比菜刀还牛的shell控制端软件。 一、中国蚁剑下载 1. 下载 AntSword-Loader https://github.com/AntSwordP…...

Java 中的File类

路径分为绝对路径和相对路径。 相对路径肯定是相对谁来说的&#xff0c;一般是一个文件相对于另外一个文件而言的路径。 下面是一个例子&#xff0c;比如index.htm如何找到photo.jpg呢&#xff1f; c:/website/web/index.htmc:/website/img/photo.jpg 所以在index.htm中使用…...

java将map转json字符串或者再将json字符串转回map,java将对象转json字符串或者互想转换,对象集合和json字符串互转

1.导入hutool工具依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>2.直接复制一下代码运行 import cn.hutool.json.JSONUtil;import java.util.Ar…...

数据库管理-第225期 Oracle DB 23.5新特性一览(20240730)

数据库管理225期 2024-07-30 数据库管理-第225期 Oracle DB 23.5新特性一览&#xff08;20240730&#xff09;1 二进制向量维度格式2 RAC上的复制HNSW向量索引3 JSON集合4 JSON_ID SQL函数5 优化的通过网络对NVMe设备的Oracle的原生访问6 DBCA支持PMEM存储7 DBCA支持标准版高可…...

提高生产效率:最佳7大Bug记录工具

本文将分享2024年值得关注的7款Bug记录工具&#xff1a;PingCode、Worktile、禅道、Tapd、CODING、JIRA、Bugzilla。 Bug的管理和跟踪是一个不断挑战的任务&#xff0c;而一个高效的Bug记录工具不仅可以提高团队的生产效率&#xff0c;还能显著降低项目延误的风险。选择合适的工…...

DDOS攻击学习 - kali初学

文章目录 本地ssh配置nmap(网络连接的工具)nmap -sP IP地址nmap -p 1-65535 -A IP地址主机发现Ping扫描端口扫描时序扫描常用扫描方式 指纹识别与探测全端口版本探测防火墙/IDS逃逸报文分段 信息收集IP信息收集WHOIS查询 数据库渗透测试MySQL列举数据库列举MySQL变量 发起请求目…...

【C++】类和对象——流插入和流提取运算符重载

目录 前言ostream和istream自定义类型的流插入重载自定义类型的流提取重载解决私有问题日期类总接口 前言 我们在上一节实现日期类时&#xff0c;在输入和输出打印时&#xff0c;经常会调用两个函数&#xff1a; void Insert()//输入函数{cin >> _year;cin >> _mo…...

Vmware ubuntu20.04 虚拟文件夹

目录 1.vmware 设置 2.ubuntu设置 1.vmware 设置 设置完成后我们开机 2.ubuntu设置 我们打开终端 输入命令 vmware-hgfsclient可以看到你当前的共享文件 然后我们输入以下命令&#xff0c;用于将共享文件夹挂载到虚拟机中 sudo vmhgfs-fuse .host:/ /mnt -o nonempty -o …...

人工智能学习笔记 - 初级篇Ⅱ - 图形可视化 - 第11节: 绘制带填充区域的图表

微信公众号&#xff1a;御风研墨 关注可了解更多。问题或建议&#xff0c;请公众号留言 文章目录 绘制带填充区域的图表应用背景准备工作操作步骤工作原理补充说明最后 绘制带填充区域的图表 应用背景 在数据可视化中&#xff0c;带填充区域的图表可以有效地表示数据范围、趋…...

使用STM32实现一个线性代数计算器

文章目录 背景挑战与困难如何整合编译&#xff1f;error: non-ASM statement in naked function is not supportederror: #pragma import is an ARM Compiler 5 extension, and is not supported by ARM Compiler 6error: redefinition of __FILE 改造demo中的cout改造delete运…...

我在高职教STM32——串口通信(4)

大家好,我是老耿,高职青椒一枚,一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次,同行应该都懂的,老师在课堂上教学几乎是没什么成就感的。正因如此,才有了借助 CSDN 平台寻求认同感和成就感的想法。在这里,我准备陆续把自己花了很多心思的教学设计分享…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

关键领域软件测试的突围之路:如何破解安全与效率的平衡难题

在数字化浪潮席卷全球的今天&#xff0c;软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件&#xff0c;这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下&#xff0c;实现高效测试与快速迭代&#xff1f;这一命题正考验着…...

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.

ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #&#xff1a…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解

文章目录 一、开启慢查询日志&#xff0c;定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...

【java面试】微服务篇

【java面试】微服务篇 一、总体框架二、Springcloud&#xff08;一&#xff09;Springcloud五大组件&#xff08;二&#xff09;服务注册和发现1、Eureka2、Nacos &#xff08;三&#xff09;负载均衡1、Ribbon负载均衡流程2、Ribbon负载均衡策略3、自定义负载均衡策略4、总结 …...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...

Web APIS Day01

1.声明变量const优先 那为什么一开始前面就不能用const呢&#xff0c;接下来看几个例子&#xff1a; 下面这张为什么可以用const呢&#xff1f;因为复杂数据的引用地址没变&#xff0c;数组还是数组&#xff0c;只是添加了个元素&#xff0c;本质没变&#xff0c;所以可以用con…...