列表的单选和多选以及联动

news2024/11/15 19:50:01

在这里插入图片描述
在这里插入图片描述

<template>
	<view>
		<cu-custom bgColor="bg-gradual-white" :isBack="true">
			<block slot="backText">我的收藏</block>
		</cu-custom>
		<view class="top">
			<view>
				加油站
			</view>
			<view class="editing-container" :class="{ 'editing': !isEditing, 'completed': isEditing }"
				@click="toggleEditing">
				<view v-if="!isEditing">
					<u-icon name="edit-pen" color="#FD893F" size="24"></u-icon>
					<text class="editing-text">编辑</text>
				</view>
				<view v-else>
					<text class="completed-text">完成</text>
				</view>
			</view>
		</view>
		<view style="padding-bottom: 150rpx;">
			<view class="middle">
				<view v-if="list.length > 0" class="card-content" v-for="(item, index) in list" :key="item.id">
					<view class="content-left" style="">
						<checkbox-group @change="updateAllSelected(item)">
							<checkbox v-if="isEditing" :checked="item.isCollect"
								style="margin-right: 20rpx; transform:scale(1.3)"></checkbox>
						</checkbox-group>
						<view>
							<view class="title">
								<view class="left">
									<image class="img" src="https://static.taidoukeji.cn/wxchat/yww/oilIcon.png"
										mode=""></image>
									<view class="name">
										{{item.shopName||'-'}}
										<!-- <span>({{item.map}})</span> -->
									</view>
								</view>
							</view>
							<view class="address">
								{{item.address||'-'}}
							</view>
						</view>
					</view>
				</view>
			</view>
		</view>
		<view v-if="list.length == 0" class="nodata">
			<image src="https://static.youwangs.com/imges/yww_user/null.png" class="nodataImg"></image>
			<view class="f14 c333 f_Regular">暂无数据</view>
		</view>
		<view class="bottom" v-if="isEditing">
			<view>
				<checkbox-group @change="selectAll">
					<checkbox style=" transform:scale(1.3)" :checked="allSelected"></checkbox>
				</checkbox-group>
				<view class="allcheck">
					全选
				</view>
			</view>
			<view class="btn" @click="cancelCollection">取消收藏</view>
		</view>
	</view>
</template>

<script>
	import {
		collectList,
		cancelFavoriteBatchIds
	} from '@/api/oilApi.js'
	export default {
		data() {
			return {
				allSelected: false, // 用于跟踪是否所有项都被选中  
				list: [],
				pageNo: 1,
				pageSize: 10,
				total: 0,
				isEditing: false, // 控制编辑模式的新变量
				noData: false,
			};
		},
		onLoad() {
			this.getCollectList()
		},
		onReachBottom() {
			if (this.list.length < this.total) {
				this.getCollectList(); // 加载下一页  
			}
		},
		methods: {
			// 编辑
			toggleEditing() {
				this.isEditing = !this.isEditing;
			},
			// 收藏列表
			getCollectList() {
				let that = this;
				let params = {
					customId: getApp().globalData.customId,
					pageNo: this.pageNo,
					pageSize: this.pageSize,

				}
				collectList(params).then(res => {
					this.total = res.data.data.total
					this.pageNo = this.pageNo + 1; // 更新页数
					this.list = this.list.concat(res.data.data.list);
				})

			},
			// 单选
			updateAllSelected(item) {
				this.list.forEach(i => {
					if (i.id === item.id) {
						i.isCollect = !i.isCollect
					}
				})
				if (this.list.every(i => i.isCollect === true)) {
					this.allSelected = true
				} else {
					this.allSelected = false
				}
			},
			// 全选
			selectAll(e) {
				this.allSelected = !this.allSelected
				this.list.forEach(i => i.isCollect = this.allSelected)

			},
			// 取消收藏
			cancelCollection() {
				let shopIds = this.list.filter(item => item.isCollect).map(item => item.shopId);
				if (shopIds.length === 0) return;
				cancelFavoriteBatchIds({
					shopIds: shopIds.join(',')
				}).then(res => {
					this.pageNo = 1; // 重置页码
					this.list = []; // 清空列表
					this.allSelected = false; // 重置全选状态
					this.getCollectList(); // 重新加载数据
				})
			}
		}
	}
</script>
<style lang="scss">
	/deep/ radio::before,
	checkbox::before {
		right: 1rpx;
		font-size: 26rpx;
		line-height: 20rpx;
	}

	.bottom {
		padding: 25rpx 30rpx 25rpx 67rpx;
		width: 100%;
		position: fixed;
		bottom: var(--window-bottom);
		height: 154rpx;
		background: #FFFFFF;
		display: flex;
		justify-content: space-between;
		align-items: center;
		box-sizing: border-box;
		box-shadow: #999999;

		& view:nth-child(1) {
			display: flex;

			.allcheck {
				margin-left: 30rpx;
			}
		}

		.btn {
			text-align: center;
			line-height: 80rpx;
			color: #fff;
			width: 258rpx;
			height: 80rpx;
			font-size: 32rpx;
			background: #FD893F;
			border-radius: 200rpx 200rpx 200rpx 200rpx;
		}
	}

	.top {
		padding: 20rpx 34rpx 14rpx 34rpx;
		display: flex;
		justify-content: space-between;
		align-items: center;

		& view:nth-child(1) {
			font-family: PingFang SC, PingFang SC;
			font-weight: 800;
			font-size: 32rpx;
			color: #1A1D1F;
		}

		.editing-container {
			background: rgba(253, 137, 63, 0.3);
			border-radius: 200rpx;
			width: 160rpx;
			height: 62rpx;
			line-height: 62rpx;

			& view:nth-child(1) {
				display: flex;
				justify-content: center;
				text-align: center;
				font-size: 28rpx;
				color: #FD893F;
			}
		}

		.completed {
			background-color: #FD893F;
			justify-content: center;
		}

		.editing-text {
			font-size: 28rpx;
			color: #FD893F;
		}

		.completed-text {
			font-size: 28rpx;
			color: #ffffff;
		}

	}

	.middle {
		padding: 10rpx 34rpx 10rpx 34rpx;

		.card-content {
			width: 100%;
			padding: 20rpx 34rpx 20rpx 34rpx;
			background: #FFFFFF;
			border-radius: 16rpx 16rpx 16rpx 16rpx;
			margin-bottom: 28rpx;
			display: flex;
			align-items: center;

			.content-left {
				display: flex;
				flex: 1;
				align-items: center;


				.title {
					display: flex;
					justify-content: space-between;
					// flex: 1, 1, 2;
					margin-bottom: 28rpx;
					align-items: center;

					.left {
						display: flex;

						.img {
							width: 48rpx;
							height: 44rpx;
							margin-right: 10rpx;
						}

						.name {
							font-family: PingFang SC, PingFang SC;
							font-weight: bold;
							font-size: 28rpx;
							color: #000000;

							& span {
								margin-left: 10rpx;
							}
						}
					}
				}
			}

			.address {
				font-family: PingFang SC, PingFang SC;
				font-weight: 500;
				font-size: 24rpx;
				color: #999999;
			}

		}
	}

	.nodata {
		padding-top: 240rpx;
		padding-bottom: 10rpx;
		text-align: center;

		.nodataImg {
			width: 348rpx;
			height: 348rpx;
		}
	}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

地图下载软件与网站收藏(持续更新...)

慢慢记录总结学习工作中用到的有关地图下载的工具和网站 工具 图新地球 中科图新旗下的gis软件&#xff0c;官方地址&#xff1a;传送门 中文软件直接用就行&#xff0c;可以自行配置相关图源&#xff0c;有需要的化可以私信我。 全能地图下载器 Global Mapper Global Ma…

龙腾码支付系统三网免挂个人免签支付兼容易支付带详细教程

一、系统简介 码支付是基于ThinkPhp5.0 FastAdmin 开发的一套新型聚合收款、聚合支付系统&#xff0c;是一款专业的聚合免签收款系统,无需对接其余平台,个码就可收款,灰常的方便快捷,集成实现三网免挂功能,无需挂繁琐的监控软件就可实现回调,更便捷的监控方式,更优的产品质量,更…

苹果电脑上可以使用的快捷回复工具有哪些

很多客服都用苹果电脑回复客户提问&#xff0c;那么苹果电脑上都有哪些工具&#xff0c;可以实现快捷回复呢 摘要 目前&#xff0c;很多客服都用苹果电脑回复客户提问&#xff0c;快捷回复软件就是客服的刚需。众所周知&#xff0c;苹果电脑MAC系统的应用不如Windows系统多&am…

计算机毕业设计选题推荐-课程教学辅助系统-Java/Python项目实战

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Intellij IDEA--选择圆括号(小括号)的内容的插件

原文网址&#xff1a;Intellij IDEA--选择圆括号(小括号)的内容的插件-CSDN博客 简介 本文介绍Intellij IDEA选择圆括号(小括号)内的内容的插件。本插件支持这些括号&#xff1a; "<>", "[]", "{}", "()"。 Java星球&#xf…

[Oracle]面试官:你说说rownum、currval与nextval分别是什么,还有没有其他的?

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/140866513 出自【进步*于辰的博客】 文章目录 1、rownum1.1 介绍1.2 示例 2、nextval、currval2…

【读点论文】自然场景文本检测与识别的深度学习方法,分门别类的给定义做调研,对初入门者非常友好的工作,文本检测,识别,端到端识别

自然场景文本检测与识别的深度学习方法 abstract 许多自然场景图像中都包含丰富的文本,它们对于场景理解有着重要的作用。随着移动互联网技术的飞速发展,许多新的应用场景都需要利用这些文本信息,例如招牌识别和自动驾驶等。因此,自然场景文本的分析与处理也越来越成为计算机…

Spring相关框架整合Drools

7.1 Spring简单整合Drools a.第一步&#xff1a;创建maven工程drools_spring并配置pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLS…

【持续集成_02课_Jenkins+Git+Gogs综合应用】

https://www.cnblogs.com/xfeiyun/p/17510472.html Jenkins部署及持续集成——傻瓜式教程-腾讯云开发者社区-腾讯云 一、Jenkins安装 Jenkins由Java语言编写而成&#xff0c;安装包即是一个war包。因此&#xff0c;Jenkins的运行启动依赖于Java环境&#xff0c;同时&#xf…

GPT-4o mini一手测评:懂得不多,但答得极快

在性能方面,GPT-4o mini 在 MMLU 上的得分为 82%,在 LMSYS 排行榜的聊天方面分数优于 GPT-4。 OpenAI 突然上线新模型 GPT-4o mini, 声称要全面取代 GPT-3.5 Turbo。 在性能方面,GPT-4o mini 在 MMLU 上的得分为 82%,在 LMSYS 排行榜的聊天方面分数优于 GPT-4。 在价格…

收银系统源码-门店折扣活动应该怎么做

系统概况&#xff1a; 专门为零售行业的连锁店量身打造的收银系统&#xff0c;适用于常规超市、生鲜超市、水果店、便利店、零食专卖店、服装店、母婴用品、农贸市场等类型的门店使用。同时线上线下数据打通&#xff0c;线下收银的数据与小程序私域商城中的数据完全同步&#…

智能仪表板DevExpress Dashboard v24.1 - 新增级联参数过滤

使用DevExpress Analytics Dashboard&#xff0c;再选择合适的UI元素&#xff08;图表、数据透视表、数据卡、计量器、地图和网格&#xff09;&#xff0c;删除相应参数、值和序列的数据字段&#xff0c;就可以轻松地为执行主管和商业用户创建有洞察力、信息丰富的、跨平台和设…

Nuxt3: SEO优化——抽取页面内部Style标签样式

一、需求描述 升级Nuxt 3.12.4之后发现html增大&#xff0c;页面有大量的Style标签引入的css&#xff1a; 为了减少页面加载大小&#xff0c;需要将这些css抽取到独立的css文件中。 二、解决方案 Nuxt官网提供的有关extract css的有关配置大致有以下情况&#xff1a; 在nux…

问界M7是不是换壳东风ix7? 这下有答案了

文 | AUTO芯 作者 | 谦行 终于真相大白了 黑子们出来挨打啊 问界M7是换壳的东风ix7&#xff1f; 你们没想到&#xff0c;余大嘴会亲自出来正面回应吧 瞧瞧黑子当时乐的 问界你可以啊&#xff01;靠改名字造车呢&#xff1f; 还有更过分的&#xff0c;说M7是东风小康ix7…

新买的电脑硬盘怎么分区?让数据管理无忧

随着科技的飞速发展&#xff0c;电脑已经成为我们日常生活和工作中不可或缺的工具。当我们购买了一台新电脑或者更换了新的硬盘后&#xff0c;为了更好地管理数据和提高电脑性能&#xff0c;对硬盘进行分区是一个明智的选择。那么&#xff0c;新买的电脑硬盘怎么分区呢&#xf…

多人同屏渲染例子——2、VAT的实现

Unity引擎制作万人同屏效果 大家好&#xff0c;我是阿赵。 之前分析了多人同屏的一些思路。在我的思路里面&#xff0c;把角色骨骼动画转换成顶点动画是一个比较中心的思想。 一、资源分析 比如我这里有一只狼的模型&#xff1a; 它的身上挂着Animator&#xff0c;通过骨骼动画…

从C++看C#托管内存与非托管内存

进程的内存 一个exe文件&#xff0c;在没有运行时&#xff0c;其磁盘存储空间格式为函数代码段全局变量段。加载为内存后&#xff0c;其进程内存模式增加为函数代码段全局变量段函数调用栈堆区。我们重点讨论堆区。 托管堆与非托管堆 C# int a10这种代码申请的内存空间位于函…

(亲测)taro不是内部或外部命令,也不是可运行的程序 或批处理文件。

目录 报错 原因 解决方法&#xff08;亲测&#xff09; 报错 报错&#xff1a;taro不是内部或外部命令&#xff0c;也不是可运行的程序 或批处理文件。 原因 全局成功安装后&#xff0c;taro指令还是不能使用&#xff0c;此时需要手动添加环境变量。 解决方法&#xff08…

python字符串数据容器练习(replace,split,count)

一、要求 二、代码实现 str "itheima itcast boxuegu" num str.count("it") print(f"[num]") str1 str.replace(" " , "|") print(str1) str2 str1.split("|") print(str2) 三、知识点总结 Python字符串是由…

深入理解Vue slot的原理

文章目录 前言为什么需要插槽作用域插槽插槽的原理总结 前言 插槽是Vue中一个重要的特性&#xff0c;它有很多种用法&#xff1a;默认插槽、具名插槽、作用域插槽。尤其作用域插槽&#xff0c;还有一堆特性&#xff0c;比如解构prop&#xff0c;解构prop的时候还可以进行属性名…