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

uniapp 卡片勾选

前言

公司的app项目使用的uniapp,项目里有一个可勾选的卡片功能,效果图如下:
在这里插入图片描述
找了一圈没找到什么太好的组件,于是就自己简单写了一个,记录一下。避免以后还会用到

代码

<template><view class="card-selection"><checkbox-group ="checkboxChange"><view v-for="(item, index) in checkboxList" :key="index"><!-- 顶部标题部分 --><slot name="header" :row="item" :rowIndex="index"></slot><label><view v-if="item.checkboxShow" class="card-selection-item" :style="itemStyle"><!-- 左侧复选框 --><view class="item1"><checkbox :value="item[rowKey]" :disabled="item.checkboxDisabled":checked="item.checkboxChecked" /></view><!-- 右侧自定义插槽内容 --><view class="item2"><slot name="default" :row="item"></slot></view></view></label></view></checkbox-group></view>
</template><script>export default {props: {// 唯一值rowKey: {type: String,default: 'id'},// 样式itemStyle: {type: String,default: ''}},data() {return {// 列表checkboxList: [],// 记录已经勾选了的数据hasCheckedList: []}},methods: {// 初始化init(list) {this.checkboxList = []// 添加选中、禁用、是否显示等属性list.forEach(item => {item.checkboxChecked = falseitem.checkboxDisabled = falseitem.checkboxShow = truethis.checkboxList.push(item)})},// 复选框勾选checkboxChange(e) {this.hasCheckedList = e?.detail?.value || []//console.log("复选框勾选数据:", this.hasCheckedList)// 返回给父组件勾选的值const checkedList = this.checkboxList.filter(item => this.hasCheckedList.includes(item[this.rowKey]))// 修改被勾选的数据的checkboxCheckedthis.checkboxList.forEach(item => {item.checkboxChecked = this.hasCheckedList.includes(item[this.rowKey])})//console.log("数据列表:",this.checkboxList)this.$emit('checkboxChange', {checkedValueList: this.hasCheckedList,checkedList: checkedList})console.log("复选框勾选数据:", {checkedValueList: this.hasCheckedList,checkedList: checkedList})},// 复选框禁用逻辑checkboxDisabled(callback) {this.checkboxList.forEach(item => {item.checkboxDisabled = Boolean(callback(item))})},// 复选框勾选逻辑checkboxCheckd(callback) {this.checkboxList.forEach(item => {//console.log("复选框勾选:", item, callback(item))item.checkboxChecked = Boolean(callback(item))})// 自动勾选不会触发checkboxChange事件,这里需要手动更新let valueList = this.checkboxList.filter(item => item.checkboxChecked).map(item => item[this.rowKey])this.checkboxChange({detail:{value:valueList}})this.$forceUpdate()},// 清空勾选clearChecked() {this.checkboxList.forEach(item => {item.checkboxChecked = false})// 自动勾选不会触发checkboxChange事件,这里需要手动更新let valueList = this.checkboxList.filter(item => item.checkboxChecked).map(item => item[this.rowKey])this.checkboxChange({detail:{value:valueList}})},// 清空禁用clearDisabled() {this.checkboxList.forEach(item => {item.checkboxDisabled = false})},// 控制数据的显示和隐藏,用于可能出现数据筛选的情况showCheckboxData(callback) {this.checkboxList.forEach(item => {item.checkboxShow = Boolean(callback(item))})}},}
</script><style lang="scss" scoped>.card-selection-item {padding: 10px;display: flex;.item1 {width: 30px;height: 30px;flex-shrink: 0;}.item2 {flex-shrink: 1;width: 100%;}}
</style>

没啥复杂的代码,看一下代码就能知道如何使用。效果图如下:
在这里插入图片描述

http://www.lryc.cn/news/338326.html

相关文章:

  • 乐趣Python——文件与数据:挥别乱糟糟的桌面
  • docker nginx-lua发送post json 请求
  • 阿里面试总结 一
  • 多线程(49)定义无锁、阻塞、非阻塞和无等待算法
  • (一)ffmpeg 入门基础知识
  • 【软件测试】个人博客系统测试
  • 20240410解决OK3588-C的核心板刷机之后无法启动的问题
  • 仅需三步就能成为大语言模型Prompt Engineer提示词工程大神
  • RuleEngine规则引擎底层改造AviatorScript 之公式规则
  • Vue项目(H5)与微信小程序来回跳转
  • 设计模式-单一职责原则
  • vue和nunjucks的变量插值的形式{{}}冲突
  • 多语言婚恋交友APP开发流程一览
  • RUM 最佳实践-交互延迟的探索与发现
  • spring boot 集成 flyway依赖 做数据库迁移,让部署没烦恼
  • TCP协议--传输机制
  • 句柄ros::NodeHandle nh(“~“)与nh对launch文件参数配置(param)的影响
  • C++_List的学习
  • centos 7.9 nginx本地化安装,把镜像改成阿里云
  • JVM规范中的运行时数据区
  • Stable Diffusion文生图技术详解:从零基础到掌握CLIP模型、Unet训练和采样器迭代
  • SDK-0.7.8-Release-实体管理 - ApiHug-Release
  • 3. DAX 时间函数-- DATE 日期--一生二,二生三,三生万物
  • c 解数独(通用方法,适用于9×9 数独)
  • 一篇文章深入学习Java的AQS(AbstractQueuedSynchronizer)
  • Linux sed
  • 【MySQL】MySQL在Centos 7环境安装
  • 【CSS】一篇文章讲清楚screen、window和html元素的位置:top、left、width、height
  • 铸造大型基础平板的结构应该怎样设计
  • 医院预约系统微信小程序APP前后端