当前位置: 首页 > 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.lryc.cn/news/621516.html

相关文章:

  • 一文打通 AI 知识脉络:大语言模型等关键内容详解
  • Docker容器定时任务时区Bug导致业务异常的环境变量配置解决方案
  • Vue3 + Element Plus 实现可搜索、可折叠、可拖拽的部门树组件
  • 【Redis】Redis典型应用——缓存
  • Redis 官方提供免费的 30 MB 云数据库
  • AI客户维护高效解决方案
  • [Chat-LangChain] 前端用户界面 | 核心交互组件 | 会话流管理
  • 制造装配、仓储搬运、快递装卸皆适配!MinkTec 弯曲形变传感器助力,让人体工学改变劳动生活
  • 测试工程师应当具备的能力
  • 专题三_二分_在排序数组中查找元素的第一个和最后一个位置
  • 手机分身空间:空间自由切换,一机体验双重生活!
  • FCC认证三星XR头显加速全球量产,微美全息AI+AR技术引领智能眼镜硬件创新
  • FreeRTOS多核支持
  • PaddleNLP进行Bart文本摘要训练
  • JavaScript 流程控制语句详解
  • 稳定且高效:GSPO如何革新大型语言模型的强化学习训练?
  • SpringCloud -- Nacos详细介绍
  • 跨网络 SSH 访问:借助 cpolar 内网穿透服务实现手机远程管理 Linux
  • 搭建前端开发环境 安装nvm nodejs pnpm 配置环境变量
  • Spark03-RDD01-简介+常用的Transformation算子
  • SQL:生成日期序列(填补缺失的日期)
  • 完整技术栈分享:基于Hadoop+Spark的在线教育投融资大数据可视化分析系统
  • 【Docker】关于hub.docker.com,无法打开,国内使用dockers.xuanyuan.me搜索容器镜像、查看容器镜像的使用文档
  • 关于截屏时实现游戏暂停以及本地和上线不同步问题
  • Java研学-SpringCloud(四)
  • Flink Stream API 源码走读 - keyBy
  • 转换一个python项目到moonbit,碰到报错输出:编译器对workflow.mbt文件中的类方法要求不一致的类型注解,导致无法正常编译
  • Vue响应式系统在超大型应用中的性能瓶颈
  • 中年海尔,是时候押注新方向了
  • 训练大模型的前提:数据治理工程:从原始数据到高质量语料的系统化治理实践