vue3 ts项目结合vant4 复选框+气泡弹框实现一个类似Select样式的下拉选择功能

由于最近写项目接触到了移动端,需要实现一个类似于select下拉组件,如下图:

​​​​​

本来想使用vant现有组件直接使用,但是只找到了下拉菜单那种的组件,不满足这个项目的需求,于是我就自己将vant 气泡弹框结合复选框,实现了一个类似element Plus里select下拉选择的组件。

1.可多选的下拉组件

1.结构代码:

2.样式代码:

3.逻辑代码

const pathWarningBack = computed(() => return route?.path?.includes('/tabs/phm/warning') || false)

const warnLevelList = ref(['一般', '中等', '严重'])

const selectForm = ref({ level: [warnLevelList.value[0]] })

// 下拉选择

const levelPopover = ref(false)

// 复选框 全选状态

const isLevelCheckAll = ref(true)

// 全选不确定状态

const isLevelIndet = ref(true)

// 默认选中下拉列表的第一项

const levelAll = ref<string[]>([warnLevelList.value[0]])

// 支持全选

function checkAllChange(val: boolean, params: string) {

if (params === '等级') {

levelAll.value = val ? warnLevelList.value : [warnLevelList.value[0]]

isLevelIndet.value = false

}

}

// 多选选中

function checkedResultChange(value: string[], params: string) {

const checkedCount = value.length

if (params === '等级') {

selectForm.value.level = value

isLevelCheckAll.value = checkedCount === warnLevelList.value.length

isLevelIndet.value = checkedCount > 0 && checkedCount < warnLevelList.value.length

}

}

2.可单选的下拉选择组件

1.结构代码:

2.样式代码:

3.逻辑代码

// 下拉选择

const namePopover = ref(false)

const warnNameList = ref([modelSystem(GetPrecent(1000, 1500), '模型名称'), modelSystem(GetPrecent(1500, 2000), '模型名称')])

const selectForm = ref({ name: [warnNameList.value[0]] })

// 单选状态

const checkedWN = ref(warnNameList.value[0])

// 单选选中

function radioChecked(value: string, params: string) {

if (params === '名称') {

selectForm.value.name = [value]

}

}

相关推荐
之歆11 分钟前
DAY_18深度解析:数据类型转换与运算符全攻略(上)
前端·javascript
大家的林语冰19 分钟前
pnpm 11 发布,弃用 JSON 和 npm CLI,进化为纯 ES6 模块,新增 pnpm pack-app 等命令,供应链保护默认启用,要求 Node
前端·javascript·node.js
漓漾li29 分钟前
每日面试题-前端2
前端·react.js·面试
Alice-YUE38 分钟前
深入解析 JS 事件循环:浏览器与 Node.js 的差异全解析
前端·javascript·笔记·学习
HYCS40 分钟前
用pixijs实现fabricjs(二):对象的基础位置信息
前端·javascript·canvas
Alice-YUE41 分钟前
【无标题】
开发语言·javascript·ecmascript
淸湫43 分钟前
项目中使用了全局权限管理,请详细描述如何通过Vue Router的路由守卫来实现全局权限控制?
前端·vue.js
Twsit丶1 小时前
ECMAScript 常用特性整理(ES6 — ES13)
javascript
雪铃儿1 小时前
Shorebird 之外,Flutter Android 热更新还有什么选择
android·前端
李剑一1 小时前
前端必看 | Vue 刷新页面,生命周期钩子直接 "罢工",原来问题在这?90% 开发者都栽过!
前端·vue.js