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 = false
					item.checkboxDisabled = false
					item.checkboxShow = true
					this.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]))
				// 修改被勾选的数据的checkboxChecked
				this.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>

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/542312.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

虚幻引擎启动报错记录

0x00007FFEF0C8917C (UnrealEditor-CoreUObject.dll)处(位于 UnrealEditor.exe 中)引发的异常: 0xC0000005: 写入位置 0x0000000000000030 时发生访问冲突。 解决办法&#xff1a;首先查看堆栈信息&#xff0c;我的项目启动是因为默认场景编译不过&#xff0c;进到编辑器配置文…

【Linux实践室】Linux高级用户管理实战指南:用户所属组变更操作详解

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux查看用户所属组2.1.1 &#x1f47b;使…

商城系统必备营销功能——分销裂变

电商流量红利已经过去&#xff0c;现在的电商营销&#xff0c;重点在于私域用户&#xff0c;在于客户资源裂变。人们通过分销裂变挖掘客户资源&#xff0c;能降低获客成本&#xff0c;对于需要解决成本困扰的企业来说&#xff0c;确实是个不错的选择。今天&#xff0c;我们就来…

【MySQL】:深入解析多表查询(下)

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; MySQL从入门到进阶 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1;前言一. 自连接1.1 自连接查询1.2 联合查询 二. 子查询2.1 概述2.2 分类2.3 标量子查…

c++11 标准模板(STL)本地化库 - 平面类别(std::codecvt) - 在字符编码间转换,包括 UTF-8、UTF-16、UTF-32 (四)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 在字符编码间转换&#xff0c;包括 UTF-8、UTF-16、UTF-32 std::…

关于机器学习/深度学习的一些事-答知乎问(一)

如何将领域知识融入到深度学习模型中&#xff1f; 在早期的研究阶段&#xff0c;大多基于经验和对问题的一些理解&#xff0c; 启发式地设计网络&#xff0c; 并通过端到端学习的方式得到解决具体问题的深度模型。这类方法在很多问题如图像识别中取得了巨大的成功&#xff0c;…

Spring Boot统一功能处理(一)

本篇主要介绍Spring Boot的统一功能处理中的拦截器。 目录 一、拦截器的基本使用 二、拦截器实操 三、浅尝源码 初始化DispatcherServerlet 处理请求&#xff08;doDispatch) 四、适配器模式 一、拦截器的基本使用 在一般的学校或者社区门口&#xff0c;通常会安排几个…

前后端分离vue.js+nodejs新闻文章发布论坛网站系统44x94

Vue&#xff1a; Vue是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项目整合。另一方面&#xff0c;当与现代化的工具链以及…

网络篇01 | 入门篇

网络篇01 | 入门篇 01 各层协议目录[网络篇02 | 应用层 kcp&#xff08;王者荣耀&#xff09;](https://blog.csdn.net/qiushily2030/article/details/135835946)[网络篇03 | 应用层 quic](https://blog.csdn.net/qiushily2030/article/details/136192481)网络篇04 | 应用层 mq…

网络篇05 | 应用层 http/https

网络篇05 | 应用层 http/https 01 HTTP请求报文协议&#xff08;Request&#xff09;1&#xff09;Request简述2&#xff09;请求行&#xff08;首行&#xff09;3&#xff09;请求头&#xff08;Request Headers&#xff09;4&#xff09;空行5&#xff09;正文&#xff08;Re…

CCS中实时显示ADC采样波形

CCS软件中带有波形显示工具&#xff0c;在调试代码的过程中可以比较方便的将代码中待观测的变量直接用曲线的方式显示出来。   下面就演示一下如何在CCS中使用波形显示。这里使用28335芯片&#xff0c;用一个简单的工程来测试。 显示单个变量 #include "DSP2833x_Devi…

element-ui中el-radio-group组件绑定点击事件触发多次的解决办法

1、需求 电商首页需求&#xff0c;需要做个单选框&#xff0c;然后点击选中切换图标方向及更换价格升倒序&#xff0c;如下图&#xff1a; 从官网文档看&#xff0c;单选框支持change event&#xff0c;使用click加载按钮处不会触发选中 但是使用 click.native 事件不做处理…

【JVM】面试题汇总

JVM1. 什么是JVM&#xff1f;2. 了解过字节码文件的组成吗&#xff1f;3. 什么是运行时数据区4. 哪些区域会出现内存溢出5. JVM在JDK6-8之间在内存区域上有什么不同 6. 类的生命周期 7. 什么是类加载器&#xff1f;类加载器有哪几种 8. 什么是双亲委派机制&#xff1f;有什么好…

React脚手架的搭建与使用

React脚手架是开发现代Web应用的必备&#xff0c;其充分利用Webpack、Babel、ESlint等工具辅助项目的开发&#xff0c;当然这些工具也无需手动配置即可使用&#xff0c;脚手架的意义更多的是关注的是业务而不是工具的配置&#xff1b;项目的整体技术架构为&#xff1a;react w…

OJ在线编程常见输入输出练习

文章目录 整型输入输出12345 字符串类型输入输出123 整型输入输出 1 #include <stdio.h>int main() {int a, b;while (scanf("%d %d", &a, &b) ! EOF) { if(a0 && b0)break;printf("%d\n", a b);}return 0; }2 #include <stdio…

服装连锁管理系统如何拓展会员?

在服装连锁店的经营管理中&#xff0c;会员制度是提升客户忠诚度、促进销售增长的重要手段之一。拓展会员对于连锁店来说至关重要&#xff0c;可以通过多种方式来吸引新会员并提升会员的活跃度。本文将探讨如何通过拓展会员来提升服装连锁店的经营效益&#xff0c;并提出四点建…

CSS 实现无限波浪边框卡片

CSS 实现无限波浪边框卡片 效果展示 鼠标悬停效果&#xff0c;底部色块的边框是无限滚动的波浪 鼠标没有悬停效果 CSS 知识点 CSS 基础知识回顾使用 radial-gradient 实现波浪边框使用 anumate 属性实现波浪边框动画和控制动画运动 波浪实现原理 波浪边框的实现思路其…

Axure RP中的相关概念及高保真原型构建方法

1 Axure RP中概念介绍 对于构建高保真原型来说&#xff0c;需要知道事件&#xff08;Event&#xff09;、Case、Action等概念。Axure RP中给出这些概念&#xff0c;是为了方便原型的构建&#xff0c;尤其是高保真原型的构建。 事件&#xff08;Event&#xff09;是附着于控件…

如何下载pycharm历史版本

地址&#xff1a;https://www.jetbrains.com/pycharm/download/other.html

GitHub repository - Pulse - Contributors - Network

GitHub repository - Pulse - Contributors - Network 1. Pulse2. Contributors3. NetworkReferences 1. Pulse 显示该仓库最近的活动信息。该仓库中的软件是无人问津&#xff0c;还是在火热地开发之中&#xff0c;从这里可以一目了然。 2. Contributors 显示对该仓库进行过…