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

Vue3 Element-plus 封装Select下拉复选框选择器

废话不多说,样式如下,代码如下,需要自取
在这里插入图片描述

<template><el-selectv-model="selectValue"class="checkbox-select"multiple:placeholder="placeholder":style="{ width: width }"@change="changeSelect"><div class="checkboxWrapper"><el-checkbox v-model="checked"> 全选 </el-checkbox></div><el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"><el-checkbox :model-value="selectValue.includes(item.value)">{{ item.label }}</el-checkbox></el-option></el-select>
</template><script setup lang="ts">
import { computed } from 'vue'
import { useVModel } from '@vueuse/core'interface Option {label: stringvalue: number
}interface Props {modelValue: number[]options: Option[]placeholder?: stringwidth?: string
}interface Emits {(e: 'update:modelValue', value: number[]): void(e: 'change', value: number[]): void
}const props = withDefaults(defineProps<Props>(), {placeholder: '请选择',width: '200px',
})const emit = defineEmits<Emits>()defineOptions({name: 'CheckboxSelect',
})// 使用useVModel处理数据同步
const selectValue = useVModel(props, 'modelValue', emit)// 计算全选状态
const checked = computed({get: () => {const resValues = props.options.map((item) => item.value)return selectValue.value.length === resValues.length},set: (value: boolean) => {const resValues = props.options.map((item) => item.value)if (!value) {// 如果checkbox为false,则为反选,选择数组为空emit('update:modelValue', [])} else {// 如果checkbox为true,则为全选,选择数组添加所有数据emit('update:modelValue', [...resValues])}},
})// 选择变化处理
const changeSelect = (val: number[]) => {emit('change', val)
}
</script><style scoped>
.checkbox-select {width: 100%;
}.checkboxWrapper {padding: 0px 20px;
}/* 选项复选框样式 */
:deep(.el-select-dropdown__item .el-checkbox) {width: 100%;margin: 0;
}:deep(.el-select-dropdown__item .el-checkbox .el-checkbox__label) {padding-left: 8px;
}
</style>
 <CheckboxSelectv-model="searchForm.statusList":options="statusOptions"placeholder="请选择状态"width="200px"@change="changeHandle"
/>// 搜索表单
const searchForm = reactive({statusList: [] as number[], // 多选数组
})// 状态选项
const statusOptions = ref([{ label: '启用', value: 1 },{ label: '禁用', value: 2 },
])// 选择变化处理
const changeHandle = (val: number[]) => {console.log(val, '状态选择变化')
}
http://www.dtcms.com/a/332604.html

相关文章:

  • Vue3 + Element Plus 实现可搜索、可折叠、可拖拽的部门树组件
  • 基于element-plus的基础表单样式
  • [微服务]ELK Stack安装与配置全指南
  • Pytest项目_day17(随机测试数据)
  • 大模型微调分布式训练-大模型压缩训练(知识蒸馏)-大模型推理部署(分布式推理与量化部署)-大模型评估测试(OpenCompass)
  • 专题:2025跨境电商市场布局、供应链与产业带赋能报告 |附130+份报告PDF、原数据表汇总下载
  • Sparse-ICP—(3) 点到面稀疏迭代最近点算法(matlab版)
  • PDF Replacer:高效便捷的PDF文档内容替换专家
  • 国内多光谱相机做得好的厂家有哪些?-多光谱相机品牌厂家
  • 8月4日实训考察:重庆五一职院走进成都国际影像产业园
  • ffmpeg-调整视频分辨率
  • 网站与政务新媒体自查情况的报告工具功能
  • Web攻防-大模型应用LLM搭建接入第三方内容喂养AI插件安全WiKI库技术赋能
  • 编程练习---邮费计算
  • 计算机网络 THU 考研专栏简介
  • SDN控制器是什么?它在网络里的作用相当于什么?
  • Easy Rules 规则引擎详解
  • 数据结构:二叉树的表示方式(Representation of Binary Trees)
  • 基于MIMO的MATLAB预编码
  • 【Kubernetes知识点问答题】kubernetes 控制器
  • 力扣400:第N位数字
  • JavaScript性能优化30招
  • 「 CentOS7 安装部署k8s」
  • 2025新版 工业级定位系统哪家技术好?
  • 用3D打印重新定义骑行-中科米堆CASAIM自行车座椅个性化设计
  • 源网荷储充:零碳园区实现 “净零排放” 的系统解决方案
  • WinForm 简单用户登录记录器实现教程
  • 【3D图像技术分析及实现】3DGS与深度学习网络结合以实现跨场景迁移的研究调研
  • LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。
  • Product Hunt 每日热榜 | 2025-08-15