动态获取数据并按顺序组合

当有多个select,且选中后会按顺序组合:
第一列选中: “壹”,“贰”
第二列选中: “a”,“b”
那么组合后的数据为:“壹,a”,“壹,b”,“贰,a”,“贰,b”;依次类推.
该数据存储在前端,删除搜选项后需要再次返回所有数据。reScreenCondition字段为协助数据处理.
在这里插入图片描述

编写样式

      <div v-for="(nqItem, nqIndex) in screenCondition" :key="nqIndex" class="nq-item-container"><el-dropdown trigger="click" ref="dropdown"><span class="nq-item-title">{{nqItem.title}}<i class="el-icon-arrow-down el-icon--right"></i></span><el-dropdown-menu slot="dropdown" v-show="showDiv" class="custom-dropdown-menu" @click.stop="stopPropagation" @mousedown.prevent><el-inputsize="mini"v-model="nqItem.keyWord"placeholder="请输入搜索内容"@input="filterItems"></el-input><el-dropdown-item><span  @click.stop="stopPropagation" @mousedown.prevent><el-checkboxv-model="nqItem.selectAll"@change="(query) => handleSelectAllChange(query, nqItem, nqIndex)">全选</el-checkbox><el-checkbox-group class="column" v-model="nqItem.obj" @change="(query) => handleCheckboxChange(query, nqItem, nqIndex)"><el-checkboxv-for="item in nqItem.values" :key="item":label="item"></el-checkbox></el-checkbox-group></span></el-dropdown-item><div class="dropdown-footer-wrapper"><el-button size="mini" type="primary" @click="handleConfirm({nqItem: nqItem, nqIndex: nqIndex})">确定</el-button></div></el-dropdown-menu></el-dropdown></div>

定义数据

return {showDiv: true,searchQuery: '',indexListName: '', // 指标名称titleindexModeList: [],indexMode: [],// 指标方式maxSelections: 50, // 最多拼接50个组合screenCondition: {"sqDate": [{"attrGroupList": [{"title": "page_title","values": ["壹","贰"],"cell": "cell1"},{"title": "userid","values": ["a","b"],"cell": "cell2"// 代表具体哪一列}]}]},reScreenCondition: [], // 数据是复制screenCondition,做全选搜选处理// 新增一个对象来跟踪 checked 状态checkboxStates: {},}

监听搜索项

 watch: {searchQuery(newVal) {this.filterItems(newVal);},},

初始化组件

 mounted() {document.addEventListener('click', this.hideDivIfClickedOutside);// 在组件创建时,为 screenCondition 中的每个 values 元素初始化复选框状态this.screenCondition.forEach(condition => {condition.values.forEach(cell => {this.$set(this.checkboxStates, cell, false);});});},

具体数据处理

/** 分组确认按钮*/handleConfirm(obj) {let indexObj = this.screenCondition[obj.nqIndex]indexObj.arr = indexObj.obj?.map(git => {return {label: git,value: obj.nqItem.cell + '&' + git}})},/** 阻止事件冒泡到父元素*/stopPropagation(event) {event.stopPropagation();},hideDivIfClickedOutside(event) {if (!this.$el.contains(event.target)) {this.showDiv = false;}},/** 搜选*/filterItems() {// 获取每列关键字let nice = this.screenCondition?.map(real => {return {cell: real.cell,keyWord: real.keyWord}})// 使reScreenCondition关键字this.screenCondition.forEach(lik => {this.reScreenCondition.forEach(cill => {if (lik.title === cill.title) {cill.keyWord = lik.keyWord}})})// 根据关键字过滤数据this.screenCondition = this.reScreenCondition?.map(ill => {let filteredValues = [];nice.forEach(optin => {if (optin.cell === ill.cell) {if (ill.keyWord) {filteredValues = ill.values.filter(ear => ear.includes(optin.keyWord));} else {filteredValues = ill.values}}});// 如果filteredValues有数据,则返回一个新的对象,包含ill的其它属性和筛选后的valuesif (filteredValues.length > 0) {return {...ill, // 保留ill对象的其它属性values: filteredValues, // 使用筛选后的valuesobj: filteredValues // 使用筛选后的values};}// 如果没有找到包含关键字的值,可以选择返回null或者不返回任何内容(由你的逻辑决定)return null;}).filter(result => result !== null); // 过滤掉null值,确保searchList只包含有效的对象},/** 全选*/handleSelectAllChange(query, nqItem, nqIndex) {if (query === undefined) {this.screenCondition = this.screenCondition?.map(item => {this.$set(item, 'selectAll', true)// 复制当前的 item 对象const newItem = { ...item };// 添加一个新的数组属性 obj,其中包含一个空对象  默认全部选中newItem.obj =  newItem?.values ? newItem?.values : [];newItem.arr = item.values?.map(git => {return {label: git,value: item.cell + '&' + git}})// 返回新的对象return newItem;})this.reScreenCondition = this.reScreenCondition?.map(item => {this.$set(item, 'selectAll', true)// 复制当前的 item 对象const newItem = { ...item };// 添加一个新的数组属性 obj,其中包含一个空对象  默认全部选中newItem.obj =  newItem?.values ? newItem?.values : [];newItem.arr = item.values?.map(git => {return {label: git,value: item.cell + '&' + git}})// 返回新的对象return newItem;})} else {if (query) {this.$set(nqItem, 'selectAll', query)nqItem.obj = query ? nqItem.values : [];} else {nqItem.obj = []}}},/** check选项*/handleCheckboxChange(query, nqItem, nqIndex) {let checkedCount = query.length;nqItem.selectAll = checkedCount === nqItem.values.length;},

组件销毁

beforeDestroy() {// 组件销毁前移除监听器,防止内存泄漏document.removeEventListener('click', this.hideDivIfClickedOutside);},

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

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

相关文章

Docker 的数据管理 端口映射 容器互联 镜像的创建

目录 概念 概念 管理 Docker 容器中数据主要有两种方式&#xff1a;数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。总结&#xff1a;因为容器数据是临时保存的为了安全&#xff0c;就要让数据保持持久化。 1&#…

AI绘画的算法原理:从生成模型到Diffusion

近年来&#xff0c;AI绘画技术引起了广泛关注&#xff0c;让我们深入探讨其背后的技术原理和发展历程。本文将以通俗易懂的方式&#xff0c;介绍AI绘画的核心算法&#xff0c;从生成模型到Diffusion。 1. 计算机如何生成图画&#xff1f; AI绘画的核心在于生成模型&#xff08…

Redis入门到通关之数据结构解析-IntSet

文章目录 概述IntSet升级简易源码总结 欢迎来到 请回答1024 的博客 &#x1f34e;&#x1f34e;&#x1f34e;欢迎来到 请回答1024的博客 关于博主&#xff1a; 我是 请回答1024&#xff0c;一个追求数学与计算的边界、时间与空间的平衡&#xff0c;0与1的延伸的后端开发者。 …

机器学习和深度学习-- 李宏毅(笔记与个人理解)Day22

Day 22 Transformer seqence to seqence 有什么用呢&#xff1f; Encoder how Block work 仔细讲讲Residual 的过程&#xff1f; 重构 Decoder - AutoRegressive Mask 由于是文字接龙&#xff0c;所以无法考虑右边的 info 另一种decoder Encoder to Decoder – Cross Attend…

jsp servlet 学生信息管理系统

一、角色划分 1、超级管理员 2、学生 二、模块展示 1、登录 2、列表页面【超级管理员展示所有用户信息、学生只展示当前登录用户信息】 3、新增 4、编辑 三、数据库【mysql】 四、运行演示 jsp servlet 学生信息管理系统

Spark高可用模式和Spark分布式Yarn环境安装

Spark分布式HA环境安装 图-12 高可用模式原理 因为在目前情况下&#xff0c;集群中只有一个Master&#xff0c;如果master挂掉&#xff0c;便无法对外提供新的服务&#xff0c;显然有单点故障问题&#xff0c;解决方法就是master的ha。 有两种方式解决单点故障&#xff0c;一…

网络通信安全

一、网络通信安全基础 TCP/IP协议简介 TCP/IP体系结构、以太网、Internet地址、端口 TCP/IP协议简介如下&#xff1a;&#xff08;from文心一言&#xff09; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff0…

Java使用IText根据pdf模板创建pdf文件

1.导包 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-as…

算法学习笔记Day9——动态规划基础篇

一、介绍 本文解决几个问题&#xff1a;动态规划是什么&#xff1f;解决动态规划问题有什么技巧&#xff1f;如何学习动态规划&#xff1f; 1. 动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法&#xff0c;只不过在计算机问题上应用比较多&#xff…

kotlin 编写一个简单的天气预报app (七)使用material design

一、优化思路 对之前的天气预报的app进行了优化&#xff0c;原先的天气预报程序逻辑是这样的。 使用text和button组合了一个输入城市&#xff0c;并请求openweathermap对应数据&#xff0c;并显示的功能。 但是搜索城市的时候&#xff0c;可能会有错误&#xff0c;比如大小写…

超市火灾烟雾蔓延及人员疏散的matlab模拟仿真,带GUI界面

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 出口在人员的视野范围内时&#xff0c;该元胞选择朝向引导点的方向运动。出口不在人员的视野范围内时&#xff0c;作随机运动&#xff0c;8个方向的运动概率相等。…

深度学习| 注意力机制

注意力机制 为什么需要注意力机制Seq2Seq问题Transfomer Attention注意力机制分类软硬注意力注意力域 为什么需要注意力机制 这个可以从NLP的Seq2Seq问题来慢慢理解。 Seq2Seq问题 Seq2Seq&#xff08;Sequence to Sequence&#xff09;&#xff1a;早期很多模型中&#xff…

清除git缓存后,每次pull或者push都需要输入用户名密码

git bash进入你的项目目录&#xff0c;输入&#xff1a;git config --global credential.helper store 然后在文件下pull一下&#xff0c;输入一次用户名密码后&#xff0c;再次pull或者push就不需要输入了。 亲测有用哦

挑战一周完成Vue3项目Day2:路由配置+登录模块+layout组件+路由鉴权

一、路由配置 经过分析&#xff0c;项目一共需要4个一级路由&#xff1a;登录&#xff08;login&#xff09;、主页&#xff08;home&#xff09;、404、任意路由&#xff08;重定向到404&#xff09;。 1、安装路由插件 pnpm install vue-router 2、创建路由组件 在src目…

区块链安全应用-------压力测试

基于已有的链进行测试&#xff08;build_chain默认建的链 四个节 点&#xff09;&#xff1a; 第一步&#xff1a;搭链 1. 安装依赖 在ubuntu操作系统中&#xff0c;操作步骤如下&#xff1a; sudo apt install -y openssl curl 2. 创建操作目录, 下载安装脚本 ## 创建操作…

Selenium web自动化测试环境搭建

Selenium web自动化环境搭建主要要经历以下几个步骤&#xff1a; 1、安装python 在python官网&#xff1a;Welcome to Python.org&#xff0c;根据各自对应平台如&#xff1a;windows&#xff0c;下载相应的python版本。 ​ 下载成功后&#xff0c;点击安装包&#xff0c;一直…

CMakeLists.txt中如何添加编译选项?

1. 引子 编译器有多种可供选择&#xff0c;如g、c、clang等&#xff0c;如下以c作为示例。 2. 使用CMAKE_CXX_FLAGS添加编译选项 在Makefile中可能用类似如下的指令来添加编译选项&#xff1a; /usr/bin/c -Wall -Wextra -Wno-sign-compare -Wno-unused-variable -Wno-unuse…

【Node.js】02 —— Path模块全解析

&#x1f31f;Node.js之Path模块探索&#x1f308; &#x1f4da;引言 在Node.js的世界中&#xff0c;path模块就像一把万能钥匙&#x1f511;&#xff0c;它帮助我们理解和操作文件与目录的路径。无论你是初入Node.js殿堂的新手&#xff0c;还是久经沙场的老兵&#xff0c;理…

什么样的内外网文档摆渡,可以实现安全高效传输?

内外网文档摆渡通常指的是在内网&#xff08;公司或组织的内部网络&#xff09;和外网&#xff08;如互联网&#xff09;之间安全地传输文件的过程。这个过程需要特别注意安全性&#xff0c;因为内网往往包含敏感数据&#xff0c;直接连接内网和外网可能会带来安全风险。因此会…

git 命令怎么回退到指定的某个提交 commit hash 并推送远程分支?

问题 如下图&#xff0c;我要回退到 【002】Babel 的编译流程 这一次提交 解决 1、先执行下面命令&#xff0c;输出日志&#xff0c;主要就是拿到提交 commit 的 hash&#xff0c;上图红框即可 git log或者 vscode 里面直接右击&#xff0c;copy sha 2、执行下面命令回退 g…