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.value0)

// 单选选中

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

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

selectForm.value.name = value

}

}

相关推荐
拾年27517 分钟前
React Hooks 进阶篇:useMemo / useCallback / useReducer / useImperativeHandle,用「算账 +
前端·javascript·react.js
Jackson__24 分钟前
面试官:如何在老项目中使用新框架,并实现通信?
前端·javascript·面试
拾年27527 分钟前
React Hooks 保姆级教程:把组件想象成失忆的打工人,4 个 Hook 带你原地起飞
前端·javascript·react.js
mmsx33 分钟前
一个 Bug 修了 12 轮,根因只有一句话:AI 编程时代,日志才是唯一的真相
前端
默_笙34 分钟前
😝 5 亿次循环卡死页面?我用 Web Worker 把它扔进后台线程,页面丝滑如初
前端·javascript
CAD老兵36 分钟前
一行代码集成 DWG/DXF 图纸查看:测量批注,数据不出站
前端·javascript·github
小林ixn37 分钟前
单例模式:从弹窗管理到全局状态,一个模式搞定
前端·javascript·设计模式
AI编程实验室38 分钟前
Node.js Agent Handoff 仓库扫描 MVP:忽略规则、include 通配与稳定输出实现
前端·ai编程
猫不易39 分钟前
从 Virtual DOM 到 Vapor:Vue 3.6 的另一条路
前端·vue.js
光影少年1 小时前
react navite性能优化 & 常见坑
前端·react native·掘金·金石计划