首页 > 其他分享 >elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择

elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择

时间:2023-06-03 12:08:06浏览次数:52  
标签:el name elementUI 代码 多列 下拉框 icon


效果展示(多列可以配置)

  一、icon下拉框的多列选择:

elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择_javascript


elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择_javascript_02

  二、常规、通用下拉框的多列选择:

elementUI中<el-select>下拉框选项过多的页面优化方案——多列选择_javascript_03

【注】第二种常规、通用下拉框的多列选择,是在第一种的前端代码上删除几行代码就行(把icon显示标签删去),所以下面着重介绍第一种icon下拉框的多列选择。

思路

  不使用下拉框标签<el-option>来做,使用elementUI提供的popover弹窗来做。

  popover弹窗官方文档以及演示地址:https://element.eleme.cn/#/zh-CN/component/popover#events

具体代码(复制粘贴即可使用)

   一、html代码:

<el-form-item label="icon" prop="icon">
	<el-popover placement="bottom-start" width="460" trigger="click" @show="resetIconName()" >
		<div class="icon-body">
		
			<el-input v-model="icon_name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input.native="filterIcons">
				<i slot="suffix" class="el-icon-search el-input__icon" ></i>
			</el-input>
			
			<div class="icon-list">
				<div v-for="(item, index) in iconList" :key="index" @click="selectedIcon(item)">
					<i :class="item" style="height: 30px;width: 16px;" ></i>
					<span>{{ item }}</span>
				</div>
			</div>
			
		</div>
		
		<el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly>
			<i v-if="form.icon" slot="prefix" :class="form.icon" style="height: 32px;width: 16px;"></i>
			<i v-else slot="prefix" class="el-icon-search" style="height: 32px;width: 16px;" ></i>
		</el-input>
	</el-popover>
</el-form-item>

【代码讲解】首先,肯定是在一个<el-form>下的<el-form-item>里面的表单项做的;<el-popover>标签的API可以参考上面贴的官方地址,主要是提供一个点击之后在下面附带的弹窗;弹窗中,我们设置一个输入框来进行选择值的搜索,下方(即<div class="icon-list">部分)用于多列显示我们想选择的值。

  二、vue代码:

new Vue({
        data: {
            // 表单: 收集`新增和修改弹窗`的表单数据
            form: {
                "icon": ''
            },
            // icon的搜索关键字
            icon_name:'',
            // 可选icon列表
            icons: ["el-icon-platform-eleme","el-icon-eleme","el-icon-delete-solid","el-icon-delete","el-icon-s-tools"],
            // 用于在页面显示的icon列表
            iconList: []
        },
        mounted: function () {   //自动触发写入的函数
            this.iconList = this.icons;
        },
        methods: {
            /** 过滤搜索icon */
            filterIcons() {
                this.iconList = this.icons;
                if (this.icon_name) {
                    this.iconList = this.iconList.filter(item => item.includes(this.icon_name))
                }
            },
            /** 选中icon */
            selectedIcon(name) {
                this.form.icon = name;
                document.body.click()
            },
            /** 重置搜索icon的关键值 */
            resetIconName(){
                this.icon_name = '';
            }
        }
    })

  三、css代码:

<style rel="stylesheet/scss" >
        .icon-body {
            width: 100%;
            padding: 10px;
        }
        .icon-body .icon-list {
            height: 200px;
            overflow-y: scroll;
        }
        .icon-body .icon-list div {
            height: 30px;
            line-height: 30px;
            margin-bottom: -5px;
            cursor: pointer;
            // 这里是控制显示几列的地方 3列就是 1/3 = 33%
            width: 49%;
            float: left;
        }
        .icon-body .icon-list span {
            fill: currentColor;
            overflow: hidden;
        }
    </style>

其他(把icon图表显示删除,非必须)

  删除html代码里面有关icon的就行,其他不用动,删除后代码如下:

<el-form-item label="icon" prop="icon">
	<el-popover placement="bottom-start" width="460" trigger="click" @show="resetIconName()" >
		<div class="icon-body">
		
			<el-input v-model="icon_name" style="position: relative;" clearable placeholder="请输入图标名称" @clear="filterIcons" @input.native="filterIcons">
			</el-input>
			
			<div class="icon-list">
				<div v-for="(item, index) in iconList" :key="index" @click="selectedIcon(item)">
					<span>{{ item }}</span>
				</div>
			</div>
			
		</div>
		
		<el-input slot="reference" v-model="form.icon" placeholder="点击选择图标" readonly>
		</el-input>
	</el-popover>
</el-form-item>


标签:el,name,elementUI,代码,多列,下拉框,icon
From: https://blog.51cto.com/u_15942590/6407657

相关文章

  • 零代码编程:用ChatGPT将PDF文件的表格批量转为Excel表格
    电脑中有几百个PDF文件,文件内容格式一致,每个PDF文件第一页是一个表格。想把这几百个PDF文件里面的表格都提取出来,转为excel表,该怎么办?打开ChatGPT(一定要用GPT4,编程能力很强。相比之下,gpt3.5弱太多了),输入提示词如下:d盘有一个文件夹:guanlianjiaoyi,里面有很多pdf文件;你的任务是写一个......
  • Debian11安装GNOME-TWEAKS报错WARNING : Shell not installed or running
    先写结论:打开方式是按下Alt+F2弹出命令窗输入gnome-tweaks,就会弹出优化界面,点击扩展就可以按需开启扩展插件。还有一种方法,如果你在安装debian11系统时安装完了GNOME,那么你可以在显示应用程序内找到一个叫工具的软件合集,内有名叫优化的程序。闲聊:不过其实一开始我就注意到了有这......
  • vue+elementUI 合并行3
    1、返回数据为一维数组getData(){that.tableData=res.data.data.list;}2、合并函数挂在vue底层:Vue.prototype.$spanMethodFunc=function(list,props,row,col)写在method内:spanMethodFunc(list,props,row,col){if(col>=props.length||!props[co......
  • vue+elemntUI合并行2
    返回的是一维数组o:[{id:1,name:s;age:11},{id:1,name:s;age:11},{id:2,name:p;age:15}]1、对返回的数据做处理getData(){that.tableData=res.data.data.list;that.getFormatList();//重新合并行},getFormatList(){letrecordObj={};this.re......
  • vue+elementui 合并行
    1,数据格式是二维的如:o:{id:123,prams:{name:aaa,age:11}}的对象第一步:先获取返回的数据为indexInfoList,遍历转化为一维数组 that.indexInfoList.forEach(ele => {if(ele.prams.length>=1){ele.prams.map((related,index)=>{......
  • 数据可视化之Zeppelin
    前言数据可视化这块不是项目的重点,不过为了让大家能有一个更加直观的感受,我们可以选择一些现成的数据可视化工具实现。我们前面分析过,想要查询hive中的数据可以使用hue,不过hue无法自动生成图表。所以我们可以考虑使用Zeppelin,Zeppelin是一个Apache的孵化项目.一个基于web的笔记......
  • CF321E - Ciel and Gondolas
    考虑\(dp_{i,j}\)表示用\(i\)条船载走前\(j\)个人的最小贡献,\(w_{i,j}\)表示区间\([i,j]\)里的人同乘一条船的代价。则\(dp_{i,j}=\min_{1\lek\ltj}(dp_{i-1,k}+w_{k+1,j})\)。我们发现,\(w_{i,j}\)可以通过\(w_{i,j-1}+s_{j,j}-s_{j,i-1}\)递推计算。其中\(s_{i,......
  • 在python中对Excel进行简单的操作
    #表格的操作 #创建表格 wb=Workbook() #打开第一个工作表 wb.active #保存 wb.save("路径+文件名或文件名") #关闭 wb.close() #读取Excel中所有的工作表 wb.get_sheet_names() #访问第一个工作表 wb.worksheets[0] wb.get_sheet_names()[0] #编辑第一个工作表......
  • EvalAI使用——类似kaggle的开源平台,不过没有kernel fork功能,比较蛋疼
    官方的代码https://github.com/Cloud-CV/EvalAI我一直没法成功importyaml配置举办比赛(createachallengeonEvalAI使用https://github.com/Cloud-CV/EvalAI-Starters)。 直到使用第三方的fork:https://github.com/live-wire/EvalAI 下面是介绍的简单使用流程:Aquestionwe’......
  • Use trained sklearn model with pyspark
    Usetrainedsklearnmodelwithpyspark frompysparkimportSparkContextimportnumpyasnpfromsklearnimportensembledefbatch(xs):yieldlist(xs)N=1000train_x=np.random.randn(N,10)train_y=np.random.binomial(1,0.5,N)model=ensemb......