el-select使用filterable下拉无法关闭得问题
这里推荐一个前端框架 sakuya / SCUI,他里面有个formTable,可以解决很多订单明细保存得问题。基本沿用element-plus的前端使用模式,让表单表格变的非常容易。

这个的供应商插件,当使用filterable后,点击表格重的选项,下拉的表格不会关闭。去掉filterable就可以了
<sc-table-select :table-width="450" :apiObj="apiObj" @change="change" :props="props" :params="params"clearable filterable><el-table-column prop="code" label="编码"></el-table-column><el-table-column prop="name" label="名称"></el-table-column><el-table-column prop="contacts" label="联系人"></el-table-column><el-table-column prop="phone" label="手机号"></el-table-column><el-table-column prop="address" label="地址"></el-table-column><el-table-column prop="creditCode" label="统一社会信用代码"></el-table-column></sc-table-select>
网上有不少同类型的问题element ui el-select点击图标无法关闭下拉框问题
el-select 中加了filterable 点击箭头下拉框回收不去问题
那么如何解决当前的问题呢?选中数据后,这个被执行了两次

是不是visible-change没搞懂是怎么回事,于是按照这个思路去调查,el-select内嵌套el-select—筛选下拉列表遇到的若干问题及解决
el-select二次封装,解决数据量太大导致卡顿问题,实现远程搜索,滚动加载数据,搜索数据回显
visible-change对应的参数官方只有一个,这个跟网上有些资料不一致,可能是版本不同。

因此推断,当select展开的时候就会触发visible-change这个事件,那么什么时候可以触发展开呢?不会不会只要有值输入进去,就会触发呢?
element-UI之el-select的坑,这个有类似的问题,但是却没有解决方案。
在别人的基础上增加了hasClick,点击了做一个标记,然后再清理的时候恢复。
<template><el-select ref="select" v-model="defaultValue" :value-key="defaultProps.value" @focus="handleFocus":size="size" :clearable="clearable" :multiple="multiple" :collapse-tags="collapseTags" :collapse-tags-tooltip="collapseTagsTooltip" :filterable="filterable" :placeholder="placeholder" :disabled="disabled" :filter-method="filterMethod" @remove-tag="removeTag" @visible-change="visibleChange" @clear="clear"><template #empty><div class="sc-table-select__table" :style="{width: tableWidth+'px'}" v-loading="loading"><div class="sc-table-select__header"><slot name="header" :form="formData" :submit="formSubmit"></slot></div><el-table ref="table" :data="tableData" :height="245" :highlight-current-row="!multiple" @row-dblclick="click" @select="select" @select-all="selectAll" stripe border><el-table-column v-if="multiple" type="selection" width="45"></el-table-column><el-table-column v-else type="index" width="45"><template #default="scope"><span>{{scope.$index+(currentPage - 1) * pageSize + 1}}</span></template></el-table-column><slot></slot></el-table><div class="sc-table-select__page"><el-pagination small background layout="prev, pager, next" :total="total" :page-size="pageSize" v-model:currentPage="currentPage" @current-change="reload"></el-pagination></div></div></template></el-select>
</template><script>import config from "@/config/tableSelect";export default {props: {modelValue: null,apiObj: { type: Object, default: () => {} },params: { type: Object, default: () => {} },placeholder: { type: String, default: "请选择" },size: { type: String, default: "default" },clearable: { type: Boolean, default: false },multiple: { type: Boolean, default: false },filterable: { type: Boolean, default: false },collapseTags: { type: Boolean, default: false },collapseTagsTooltip: { type: Boolean, default: false },disabled: { type: Boolean, default: false },tableWidth: {type: Number, default: 400},mode: { type: String, default: "popover" },props: { type: Object, default: () => {} }},data() {return {loading: false,keyword: null,defaultValue: [],tableData: [],pageSize: config.pageSize,total: 0,currentPage: 1,defaultProps: {label: config.props.label,value: config.props.value,page: config.request.page,pageSize: config.request.pageSize,keyword: config.request.keyword},formData: {},select:'',hasClick:false,}},computed: {},watch: {modelValue:{handler(){this.defaultValue = this.modelValuethis.autoCurrentLabel()},deep: true}},mounted() {this.defaultProps = Object.assign(this.defaultProps, this.props);this.defaultValue = this.modelValuethis.autoCurrentLabel()},methods: {handleFocus(){console.log('处理 focus 事件');},//表格显示隐藏回调visibleChange(visible){if(visible){if (this.hasClick){this.blur()return ;}this.currentPage = 1this.keyword = nullthis.formData = {}this.getData()}else{this.autoCurrentLabel()}},//获取表格数据async getData(){this.loading = true;var reqData = {[this.defaultProps.page]: this.currentPage,[this.defaultProps.pageSize]: this.pageSize,[this.defaultProps.keyword]: this.keyword,// 'asId':userInfo.value.currentAsId}Object.assign(reqData, this.params, this.formData)var res = await this.apiObj(reqData);var parseData = config.parseData(res)this.tableData = parseData.rows;this.total = parseData.total;this.loading = false;//表格默认赋值this.$nextTick(() => {if(this.multiple){this.defaultValue.forEach(row => {var setrow = this.tableData.filter(item => item[this.defaultProps.value]===row[this.defaultProps.value] )if(setrow.length > 0){this.$refs.table.toggleRowSelection(setrow[0], true);}})}else{var setrow = this.tableData.filter(item => item[this.defaultProps.value]===this.defaultValue[this.defaultProps.value] )this.$refs.table.setCurrentRow(setrow[0]);}this.$refs.table.setScrollTop(0)})},//插糟表单提交formSubmit(){this.currentPage = 1this.keyword = nullthis.getData()},//分页刷新表格reload(){this.getData()},//自动模拟options赋值autoCurrentLabel(){this.$nextTick(() => {if(this.multiple){this.$refs.select.selected.forEach(item => {item.currentLabel = item.value[this.defaultProps.label]})}else{this.$refs.select.selectedLabel = this.defaultValue[this.defaultProps.label]}})},//表格勾选事件select(rows, row){var isSelect = rows.length && rows.indexOf(row) !== -1if(isSelect){this.defaultValue.push(row)}else{this.defaultValue.splice(this.defaultValue.findIndex(item => item[this.defaultProps.value] == row[this.defaultProps.value]), 1)}this.autoCurrentLabel()this.$emit('update:modelValue', this.defaultValue);this.$emit('change', this.defaultValue);},//表格全选事件selectAll(rows){var isAllSelect = rows.length > 0if(isAllSelect){rows.forEach(row => {var isHas = this.defaultValue.find(item => item[this.defaultProps.value] == row[this.defaultProps.value])if(!isHas){this.defaultValue.push(row)}})}else{this.tableData.forEach(row => {var isHas = this.defaultValue.find(item => item[this.defaultProps.value] == row[this.defaultProps.value])if(isHas){this.defaultValue.splice(this.defaultValue.findIndex(item => item[this.defaultProps.value] == row[this.defaultProps.value]), 1)}})}this.autoCurrentLabel()this.$emit('update:modelValue', this.defaultValue);this.$emit('change', this.defaultValue);},click(row){if(this.multiple){//处理多选点击行}else{this.hasClick = true;this.defaultValue = rowthis.blur()this.autoCurrentLabel()this.$emit('update:modelValue', this.defaultValue);this.$emit('change', this.defaultValue);}},//tags删除后回调removeTag(tag){var row = this.findRowByKey(tag[this.defaultProps.value])this.$refs.table.toggleRowSelection(row, false);this.$emit('update:modelValue', this.defaultValue);},//清空后的回调clear(){this.$emit('update:modelValue', this.defaultValue);this.hasClick = false;},// 关键值查询表格数据行findRowByKey (value) {return this.tableData.find(item => item[this.defaultProps.value] === value)},filterMethod(keyword){console.log('click',this.hasClick)if (this.hasClick){return false;}if(!keyword){this.keyword = null;return false;}this.keyword = keyword;this.getData()},// 触发select隐藏blur(){this.$refs.select.blur();},// 触发select显示focus(){this.$refs.select.focus();}}}
</script><style scoped>.sc-table-select__table {padding:12px;}.sc-table-select__page {padding-top: 12px;}
</style>相关文章:
el-select使用filterable下拉无法关闭得问题
这里推荐一个前端框架 sakuya / SCUI,他里面有个formTable,可以解决很多订单明细保存得问题。基本沿用element-plus的前端使用模式,让表单表格变的非常容易。 这个的供应商插件,当使用filterable后,点击表格重的选项&…...
基于javaweb(springboot)城市地名地址信息管理系统设计和实现
基于javaweb(springboot)城市地名地址信息管理系统设计和实现 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…...
vue iframe实现父页面实时调用子页面方法和内容
父页面标签添加鼠标按下事件 父页方法中建立iframe通信 实时调用子页面方法 实时更改子页面文本内容...
HarmonyOS ArkTS 开发基础/语言
目录 一、ArkUI (方舟开发框架) 概述 1.1 基本概念 1.2 两种开发范式 1.3 不同应用类型支持的开发范式 二、ArkTS 声明式开发范式 2.1 开发能力 2.2 整体架构 三、ArkTS 基础类型 3.1 Any 类型 3.2 数字类型 3.3 字符串类型 3.4 布尔类型 3.5 联合类型 3.6 数组类…...
AI大模型学习
AI大模型学习 在当前技术环境下,AI大模型学习不仅要求研究者具备深厚的数学基础和编程能力,还需要对特定领域的业务场景有深入的了解。通过不断优化模型结构和算法,AI大模型学习能够不断提升模型的准确性和效率,为人类生活和工作…...
2024年【T电梯修理】考试内容及T电梯修理作业考试题库
题库来源:安全生产模拟考试一点通公众号小程序 T电梯修理考试内容根据新T电梯修理考试大纲要求,安全生产模拟考试一点通将T电梯修理模拟考试试题进行汇编,组成一套T电梯修理全真模拟考试试题,学员可通过T电梯修理作业考试题库全真…...
2.vscode 配置python开发环境
vscode用着习惯了,也不想再装别的ide 1.安装vscode 这一步默认已完成 2.安装插件 搜索插件安装 3.选择调试器 Ctrl Shift P(或F1),在打开的输入框中输入 Python: Select Interpreter 搜索,选择 Python 解析器 选择自己安…...
[蓝桥杯 2015 省 B] 生命之树
题目链接 [蓝桥杯 2015 省 B] 生命之树 题目描述 在 X 森林里,上帝创建了生命之树。 他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。 上帝要在这棵树内选出一个节点集合 S S S&…...
为什么Hashtable不允许插入nuIl键和null值?
1、典型回答 浅层次的来回答这个问题的答案是,JDK 源码不支持 Hashtable 插入 value 值为 null,如以下 JDK 源码所示: 也就是 JDK 源码规定了,如果你给 Hashtable 插入 value 值为 null 就会抛出空指针异常。 并且看上面的 JDK …...
【WPF应用4】WPF界面对象编辑
简介 WPF(Windows Presentation Foundation)是.NET框架的一部分,它为开发人员提供了一个用于构建桌面应用程序用户界面的强大平台。WPF界面对象编辑是指在WPF应用程序中创建、设计和修改用户界面元素的过程。这些界面对象不仅包括基本的控件…...
js数组去重常见方法
简单数组 1、使用filter()方法:通过filter()方法遍历数组,返回仅包含首次出现的元素的新数组。 const arr [1, 2, 3, 4, 2, 3, 5]; const list arr.filter((item, index) > arr.indexOf(item) index); console.log(list); // [1, 2, 3, 4, 5]2、…...
【Java Web基础】一些网页设计基础(二)
文章目录 1. Bootstrap导航栏设计1.1 代码copy与删减效果1.2 居中属性与底色设置1.3 占不满问题分析1.4 字体颜色、字体大小、字体间距设置1.5 修改超链接hover颜色,网站首页字体颜色 1. Bootstrap导航栏设计 1.1 代码copy与删减效果 今天设计导航栏,直…...
python中tkinter计算器
本文使用创作助手。 以下是一个用Python的Tkinter库编写的简单计算器的示例代码: import tkinter as tkdef btn_click(btn_val):current_text entry.get()new_text current_text btn_valentry.delete(0, tk.END)entry.insert(tk.END, new_text)def calculate()…...
[嵌入式系统-39]:龙芯1B 开发学习套件 -9-PMON的文件结构
目录 前言: 一、PMON-V1.1 目录结构 二、Targets目录的组成 前言: 参考:龙芯相关 - 心映真的空间 一、PMON-V1.1 目录结构 PMON-V1.1 目录结构 pmon的目录结构大致如下(由linux工具tree生成) |-- Tar…...
[蓝桥杯2012] 罗马数字
罗马数字 题目描述 古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题…...
Thinkphp+workman+redis实现多进程异步任务处理
前言 PHP本身并不直接支持多线程编程,因为PHP的设计初衷是作为一个脚本语言,主要面向的是Web开发。不过我们可以使用一些扩展和库来实现多进程的功能,提高系统性能,比如workerman和swoole。通过多进程异步执行任务。 安装workman…...
牛客NC196 编辑距离(一)【较难 DFS/DP,动态规划,样本对应模型 Java,Go,PHP】
题目 题目链接: https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da 思路 编辑距离问题 什么是两个字符串的编辑距离(edit distance)?给定字符串s1和s2,以及在s1上的如下操作:插入&…...
走进jvm之垃圾回收器篇
这里我想首先说明一下,虽然我们经常会拿垃圾回收器来做比较,虽然想挑选一个最好的收集器出来,但是目前也没有说哪一款收集器是完美的,更不存在万能的收集器,我们也只是对收集器选择最适合场景的一个收集器。 那么作者将…...
rtt自动初始化机制学习
通过以下两篇文章基本能搞懂rtt的自动初始化机制,从此你也可以借鉴写自己的自动初始化段(section)。 1点这里 https://blog.csdn.net/qq_38824401/article/details/119717389 2点这里 https://club.rt-thread.org/ask/article/d686458bbba864f4.html section背景…...
基于SpringBoot和Vue的大学生租房系统的设计与实现
今天要和大家聊的是一款今天要和大家聊的是一款基于SpringBoot和Vue的大学生租房系统的设计与实现。 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同…...
SpringBoot-17-MyBatis动态SQL标签之常用标签
文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
