基于element+vue,结合el-select,自定义内置筛选框的下拉框组件

基于element+vue,结合el-select,自定义内置筛选框的下拉框组件

效果如下:
在这里插入图片描述

代码如下:

<template>
    <div class="m-t50 m-l50">
        <el-select class="phoneAreaCodeSelect" popper-class="select-down" v-model="mobileCode" placeholder="请选择" @visible-change="changeSelect">
            <div class="phoneAreaCodeSelect-top" :style="phoneAreaCodeListShow.length==0?'position:inherit;margin-top:-6px;':''">
                <div class="dropDownSearchBox el-input f-r a-c">
                    <input type="text" placeholder="搜索" class="dropDownSearchInput el-input__inner" v-model="dropDownSearchValue" @keyup="dropDownSearch">
                    <span class="f-r a-c el-input__suffix">
                        <span class="el-input__suffix-inner">
                            <i class="el-input__icon el-icon-search"></i>
                        </span>
                    </span>
                </div>
            </div>
            <div class="phoneAreaCodeSelect-bottom" :style="phoneAreaCodeListShow.length==0?'margin-top:0;':''">
                <el-option :label="item.name" :key="index" :value="item.code" v-for="(item, index) in phoneAreaCodeListShow">
                    <span>({{ item.code }})</span>
                    <span style="color: #8492a6; font-size: 13px">{{ item.name }}</span>
                </el-option>
            </div>
        </el-select>
    </div>
</template>

<script>
import typeService from "@/services/common/type";

export default {
    components: {},
    data() {
        return {
            mobileCode:"",
            phoneAreaCodeListAll:[],
            phoneAreaCodeListShow:[],
            dropDownSearchValue: '',
        }
    },
    mounted() {
         this.getPhoneAreaCodeList();
    },
    methods: {
        //获取电话号码区域号列表
        async getPhoneAreaCodeList() {
            let { list } = await typeService.getPhoneAreaCodeList();
            this.phoneAreaCodeListAll = list;
            this.phoneAreaCodeListShow = list;
        },

        //下拉框根据关键字搜索
        dropDownSearch () {
            let _this = this;
            _this.mobileCode = "";
            _this.phoneAreaCodeListShow = _this.phoneAreaCodeListAll.filter(_this.filterSearch);
        },
 
        //根据关键字筛选区域号列表
        filterSearch (item) {
            return item.name.includes(this.dropDownSearchValue);
        },

        //切换下拉框显隐
        changeSelect(e){
            //隐藏下拉框时,重置搜索框及下拉列表
            if(!e){
                this.dropDownSearchValue = "";
                this.phoneAreaCodeListShow = this.phoneAreaCodeListAll;
            }
        },
    }
}
</script>

<style lang='less' scoped>
.phoneAreaCodeSelect {
    border: 1px solid #089BAB;
    border-radius: 7px;
}
.phoneAreaCodeSelect-top {
    width: 100%;
    height: 34px;
    position: absolute;
    z-index: 5;
    top: 0;
    background-color: #ffffff;
}
.phoneAreaCodeSelect-bottom {
    margin-top: 40px;
    .el-select-dropdown__item {
        width: 368px;
        height: 33px;
    }
}
.dropDownSearchBox {
    width: calc(100% - 18px);
    margin-left: 9px;
    margin-right: 9px;
    margin-top: 8px;
    .el-input__inner::placeholder {
        font-size: 12px;
    }
}
.dropDownSearchInput {
    height: 26px;
    background-color: rgb(245, 247, 250);
    border-radius: 6px;
}
.select-down .el-scrollbar {
    display: block !important;
}
</style>

如有漏洞,欢迎宝子们互动指教吖!!!!!!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值