vue2 实现一个input查询 + 下面为chechbox的下拉列表组件

vue2 实现一个input查询 + 下面为chechbox的下拉列表组件

CheckboxSearch

<!-- 快捷筛选 - 关键字查询支持可勾选的下拉 CheckboxSearch -->
<template>
    <div class="checkbox-search">
        <input
            v-model="searchText"
            type="text"
            placeholder="请输入关键字"
            class="ipt"
            @input="handleSearch"
        >
        <div
            v-for="item in filteredItems"
            :key="item.id"
            class="ipt-item"
        >
            <input
                v-model="item.checked"
                type="checkbox"
                class="checkbox"
                @change="handleCheck(item)"
            >
            <span>{{ item.text }}</span>
        </div>
    </div>
</template>

<script>
export default {
    props: {
        items: {
            type: Array,
            required: true
        }
    },
    data() {
        return {
            searchText: '',
            filteredItems: this.items,
            checkArr: []
        };
    },
    methods: {
        handleSearch() {
            this.filteredItems = this.items.filter(item => {
                return item.text.toLowerCase().includes(this.searchText.toLowerCase());
            });
        },
        handleCheck(item) {
            this.checkArr.push(item);
            let resArr = [];
            resArr = this.checkArr.filter(item=>item.checked).map(item=>item.id);
            this.$emit('check', resArr);
        }
    }
};
</script>
<style  lang="scss" scoped>
.checkbox-search {
	background: #fff;
	height: 100%;
	overflow-y: auto;
	padding: 10px 20px;
	width: 100%;
	max-height: 250px;

	.ipt {
		margin-bottom: 10px;
		height: 28px;
		line-height: 28px;
		width: 160px;
		outline: none;
		border-radius: 4px;
		border: 1px solid #ccc;
		padding-left: 5px;
	}

	input::placeholder {
		padding-left: 5px;
		color: #999;
	}

	.ipt-item {
		height: 26px;
		line-height: 26px;
		margin-bottom: 5px;
		color: #666;
	}
	// #2469F1
}
</style>

使用

                    <CheckboxSearch
                        :items="items"
                        @check="handleCheck"
                    />
            items: [
                { id: 1, text: 'Item 11', checked: false },
                { id: 2, text: 'Item 12', checked: false },
                { id: 3, text: 'Item 22', checked: false },
                { id: 4, text: 'Item 33', checked: false },
                { id: 5, text: 'Item 44', checked: false },
                { id: 6, text: 'Item 55', checked: false },
                { id: 7, text: 'Item 66', checked: false },
                { id: 8, text: 'Item 77', checked: false },
                { id: 9, text: 'Item 88', checked: false },
                { id: 10, text: 'Item 99', checked: false },
                { id: 11, text: 'Item 111', checked: false }
            ],
            checkArr: [],

        handleCheck(item) {
            console.log('handleCheck', item);
        },

效果

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值