当前位置: 首页 > news >正文

vue3+element下拉多选框组件

在这里插入图片描述
在这里插入图片描述

<!-- 下拉多选 -->
<template><div class="select-checked"><el-select v-model="selected" :class="{ all: optionsAll, hidden: selectedOptions.data.length < 2 }" multipleplaceholder="请选择" :popper-append-to-body="false" collapse-tags popper-class="select-popper"><template v-if="selectedOptions.data.length > 1" #prefix><div class="multi">(多选) x {{ selectedOptions.data.length }}</div></template><el-option class="multiple" :value="item.value" :label="item.label" v-for="(item, key) in optionsData.data":key="key"><el-checkbox v-model="item.check" @change="handleTaskItemChange(item)" style="width: 100%;">{{ item.label }}</el-checkbox></el-option><div class="is-all"><div @click="handleOptionsAllChange(true)">全选</div><div @click="handleOptionsAllChange(false)">反选</div></div></el-select></div>
</template><script setup>
import { ref, reactive, computed, watch, defineProps, onMounted } from 'vue'let props = defineProps({options: {type: Array,required: true}
})let optionsData = reactive({ data: [] })let selectedOptions = reactive({ data: [] })let optionsAll = ref(false)const emit = defineEmits(['selected']);watch(() => props.options, (newVal) => {optionsData.data = newVal;let checkedData = newVal.filter((item) => item.check);selectedOptions.data = checkedData.map((item) => item.value);optionsAll.value = checkedData.length === newVal.length;
}, { immediate: true })onMounted(() => {// 在控件载入时触发父级的selected方法emit('selected', selectedOptions.data);
})const selected = computed({get() {return selectedOptions.data.length > props.options.length ? [''] : selectedOptions.data;},set(value) {selectedOptions.data = value;}
})const handleOptionsAllChange = (isAll) => {optionsData.data.forEach((elm) => {elm.check = isAll;});selectedOptions.data = isAll ? optionsData.data.map((item) => item.value) : [];emit('selected', selectedOptions.data);
}const handleTaskItemChange = (item) => {if (!item.check) {selectedOptions.data = selectedOptions.data.filter((value) => value !== item.value);} else {selectedOptions.data.push(item.value);}optionsAll = selectedOptions.data.length === optionsData.data.length;emit('selected', selectedOptions.data);
}</script><style lang="scss">
.select-checked {width: 420px;height: 30px;.el-input {width: 420px;height: 30px;}// tag删除图标.el-tag__close,.el-icon-close {display: none;}// 标签tag背景.el-tag.el-tag--info {background: transparent;border: 0;display: none;}// 第一个显示名称.hidden {.el-tag.is-closable.el-tag--default {display: block;line-height: 30px;padding-left: 15px;font-weight: 400;color: #333333;}}
}.is-all {display: flex;div {cursor: pointer;margin: 6px 10px;transition: 0.2s;&:hover {opacity: .7;}}
}.multi {font-size: 12px;font-weight: 400;color: #333333;
}
</style>
<style>
.el-select-dropdown.is-multiple.el-select-dropdown__item.selected::after {content: none;
}
</style>

使用:

<selectMulti :options="options" @selected="selected"></selectMulti>let options = [{value: '001',label: '黄金糕',check: false},{value: '002',label: '双皮奶',check: false},{value: '003',label: '蚵仔煎',check: false},{value: '004',label: '龙须面',check: false},{value: '005',label: '北京烤鸭',check: false}
]const selected = (value) => {console.log(value);
}
http://www.lryc.cn/news/135806.html

相关文章:

  • Python科研绘图--Task02
  • [保研/考研机试] KY11 二叉树遍历 清华大学复试上机题 C++实现
  • 【官方中文文档】Mybatis-Spring #简介
  • 稳定扩散ControlNet v1.1 权威指南
  • 【golang】结构体及其方法的使用(struct)
  • 【数据结构】-- 排序算法习题总结
  • 第十章 CUDA流(stream)实战篇
  • 如何进行电脑文件夹分类与整理?
  • kafka-python 消费者消费不到消息
  • 穿起“新架构”的舞鞋,跳一支金融数字化转型的华尔兹
  • SpringBoot 常用注解
  • k8s deployment创建pod流程图
  • C++ 逗号运算符
  • jdbc集成phoneix hbase
  • 16.遍历二叉树,线索二叉树
  • 电商平台按关键字搜索商品淘宝京东拼多多api接口PHP示例
  • 胖小酱之恰恰是什么
  • 豪越科技受邀出席2023中国算力大会
  • python脚本——批量将word文件转换成多张图片
  • FairyGUI编辑器的弹窗操作【插件】
  • Elasticsearch(十三)搜索---搜索匹配功能④--Constant Score查询、Function Score查询
  • 直播系统源码协议探索篇(二):网络套接字协议WebSocket
  • Windows 11 下使用 VMWare Workstation 17 Pro 新建 CentOS Stream 9 64位 虚拟机 并配置网络
  • 生信豆芽菜-缺氧评分的计算
  • C++:通过find/substr分割字符串
  • sql developer 连不上oracle数据库 报错 ORA-01031: insufficient privileges
  • LeetCode 面试题 01.07. 旋转矩阵
  • vue3 pdf、word等文件下载
  • 带你了解SpringBoot---开启Durid 监控
  • matlab 点云精配准(3)——Trimmed ICP