【SpringBoot开发】之商城项目案例(购物车相关操作)

news2024/11/19 19:31:38

  🎉🎉欢迎来到我的CSDN主页!🎉🎉

🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚

🌟推荐给大家我的博客专栏《SpringBoot开发之商城项目系列》。🎯🎯

🎁如果感觉还不错的话请给我关注加三连吧!🎁🎁


前言

        在上一期的博客分享中我们一起学习了商品详情的页面跳转以及其数据绑定显示、点金购物车将商品添加到缓存中进行存储,其中获取用户信息将用户的Id一起携带到我们的缓存中进行存储。今天带来的是对其购物车界面上的一些操作实现。

一、购物车功能完善

1. 购物车商品数量的增减

        我们在对其的js中进行编写我们操作购物车中商品数量的函数方法

function update(el,count){//el代表元素  count代表是数量
	// 	获取到商品的当前数量
		let ele=$(el).parent().find(".mynum");//获取到数量的元素元素
        let num=parseInt(ele.text());//获取到当前的数量
        // 计算新的数量
        num+=count;
	// 	判断数量是否正确
		if (num<=0) return//中断
	// 	数量没错返回到页面
			ele.text(num);

	}

        我们在其操作数量的按钮的元素标签设置点击事件,并且调用其函数

        效果演示如下图所示 

         当然这只是页面上的改变数量并没有在缓存中进行修改,接下来是实现其缓存的改变。

我们首先在redis接口类中编写器改变数量的方法并且其实现 

        我们到购物车的控制层中编写其修改购物车的请求方法

    /**
     * 编写修改购物车的请求接口
     * @param vo
     * @return
     */
    @RequestMapping("/edit")
    @ResponseBody
    public JsonResponseBody<?> edit(User user,CartVo vo){
//      将数据存放到缓存
        redisService.editCart(user,vo);
        return JsonResponseBody.success();
    }

        最后再前端设置向后台发送修改购物车的请求 

	$(".btns .cart").click(function(){
	// 	获取绑定在元素上的商品ID
		let gid= this.dataset.gid
	// 	获取商品数量
		let num = $("div.num span.fl").text()*1;
		alert(gid+":"+num)
	// 	发起请求添加购物车
		$.post('/cart/add',{gid,num}
			,resp=>{
			// 	前端进行判断
				if(resp.code==200){
					alert('添加成功')
				}

			},"json")


	});

       最后是我们的效果展示 

2. 全选与全不选

        我们在cart.js文件中设置全选的点击事件及函数,首先我们将计算总价及总数的函数重写一下。

	//计算总价
	function jisuan(){
		let total=0
		$(".th").each((i,ele)=>{
		// 	获取th中的价格
		let price=	$(ele).find(".myprice").text().replace("¥","")*1
		// 	获取th中的数量
			let num=	$(ele).find(".mynum").text()*1
		// 	放入小计中
			$(ele).find('.sAll').text(price*num);
		// 	判断元素是否选中
		let f=$(ele).find('input[type="checkbox"]').prop("checked")
		if (f) total+=price*num;//选中就计算到总计中
		})
	// 	将总价赋值给总计
		$("#all").text(total)
	}
	//计算总共几件商品
	function zg(){
		var zsl = 0;
		$(".th").each((i,ele)=>{
			// 	获取th中的数量
			let num=	$(ele).find(".mynum").text()*1
			// 	判断元素是否选中
			let f=$(ele).find('input[type="checkbox"]').prop("checked")
			if (f) zsl+=num;//选中就计算到总计中
		})
	// 	将总共的数量赋值给总计
		$("#sl").text(zsl);
	}

       重写当个复选框选择及全选框选中的函数方法 

	/*****************商品单选***********************/
	$("input[type='checkbox']").on('click',function(){
		jisuan();
		zg();
	});
	/*****************商品全选***********************/
	$(".checkAll").on('click',function(){
		$("input[type='checkbox']").prop('checked',this.checked)
		jisuan();
		zg();
	});

         当然我们在修改购物车商品数量的时候也要调用计算的函数

        加下来是我们的演示结果 

3. 删除与批量删除

         删除有两种方法进行删除,一种是表格右侧的删除按钮,一种是选中复选框后的删除。下面我们来进行写方法

         编写其接口方法及实现其方法

         编写后台控制层的请求方法

    /**
     * 编写修改购物车的请求接口
     * @param ids
     * @return
     */
    @RequestMapping("/del")
    @ResponseBody
    public JsonResponseBody<?> del(User user,@RequestParam("ids[]") List<String> ids){
//      将数据存放到缓存
        redisService.delCart(user,ids);
        return JsonResponseBody.success();
    }

        编写前端的js函数

	//删除购物车商品
	$('.del').click(function(){
	// 	获取页面上绑定的属性
	let gid=$(this).attr('data-gid')
		// 定义一个数组,存放要删除的商品ID
		let ids=[]
		if (gid){//有id
			ids.push(gid)//将Id放入数组中
		}else{//没有id
			// 遍历所有的行
			$(".th").each((i,ele)=>{
				// 	判断元素是否选中
				let f=$(ele).find('input[type="checkbox"]').prop("checked")
				//
				if (f) {//选中
					let id= $(ele).find('.mynum').attr('data-gid')//获取选中的商品id
					//将Id放入数组中
					ids.push(id)
					}
			})
		}
	// 判断Ids是否有值
		if(ids.length>0){
		// 	发送请求
			$.post('/cart/del',{ids},resp=>{
				if (resp===200){//删除成功
					alert("删除成功");
					// 刷新
					location.reload(true);
				}
			},"json")
		}
	})

        下面进行效果测试  

         由上图所知,当我们删除完用户购物车中所有的商品时会出想错误,我们只需要找到指定的请求方法,在查询数据时进行判断,若有数据则携带数据跳转购物车界面,没有数据直接跳转购物车界面 


 🎉🎉本期的博客分享到此结束🎉🎉

📚📚各位老铁慢慢消化📚📚

🎯🎯下期博客博主会带来新货🎯🎯

🎁三连加关注,阅读不迷路 !🎁

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

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

相关文章

GZ075 云计算应用赛题第4套

2023年全国职业院校技能大赛&#xff08;高职组&#xff09; “云计算应用”赛项赛卷4 某企业根据自身业务需求&#xff0c;实施数字化转型&#xff0c;规划和建设数字化平台&#xff0c;平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”&#xff0c;拟采用开源OpenSt…

Pytorch上采样

文章目录 Upsample特殊上采样 Upsample 所谓上采样&#xff0c;实则是一个插值过程。所以上采样对象在初始化时&#xff0c;需要指定一个插值类型&#xff0c;Upsample是torch.nn中最基础的上采样类&#xff0c;初始化参数如下 Upsample(sizeNone, scale_factorNone, modenea…

计算机组成原理 主存和CPU连接与主存提速方案

文章目录 主存与CPU的连接译码器线选法译码片选法总结 位拓展字拓展字位同时拓展 主存提速方案存储周期双端口RAM多模块存储器单体多字存储器多模块多体并行存储器存储器高位交叉编址低位交叉编址 主存与CPU的连接 #mermaid-svg-3wv6WzRP2BvKEHQZ {font-family:"trebuchet…

GZ075 云计算应用赛题第1套

2023年全国职业院校技能大赛(高职组) “云计算应用”赛项赛卷1 某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenStack搭建企业内部私有云平台,开源Kubernetes搭建云原生服务平台,…

HTML5 和 CSS3 新特性(常用)

HTML5 的新特性 HTML5 的新增特性主要是针对于以前的不足&#xff0c;增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题&#xff0c;基本是 IE9 以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这 些新特性。 HTML…

Linux CPU 数据 Metrics 指标解读

过去从未仔细了解过使用 top 和 htop 等命令时显式的CPU信息&#xff0c;本文我们详解解读和标注一下各个数据项的含义&#xff0c;同时和 Ganglia 显式的数据做一个映射。开始前介绍一个小知识&#xff0c;很多查看CPU的命令行工具都是 cat /proc/stat 里的数据&#xff0c;所…

Element-ui自定义input框非空校验

1、vue自定义非空指令&#xff1a; main.js中自定义非空指令 当input框或下拉框中数据更新时&#xff0c;触发校验 Vue.directive(isEmpty,{update:function(el,binding,vnode){if(vnode.componentInstance.value""){el.classList.add("is-required");}e…

使用echarts的bmap配置项绘制区域轮廓遮罩

示例图 代码 <template><div id"map" style"width: 100%; height: 100vh"></div> </template><script> import * as echarts from "echarts"; import "echarts/extension/bmap/bmap"; export default…

软件测试/测试开发丨Pytest结合数据驱动

安装yaml pip install pyyaml pytest结合数据驱动yaml 工程目录结构 数据准备 读取excel文件 openpyxl库的安装 openpyxl库的操作 pytest结合csv实现数据驱动 csv文件介绍 pytest结合json实现数据驱动 最后感谢每一个认真阅读我文章的人&#xff0c;礼尚往来总是要有的&…

Halcon底帽运算bottom_hat

Halcon底帽运算 底帽运算的原理是用原始的二值图像减去闭运算的图像。闭运算的目的是对某些局部区域进行“填补”&#xff0c;如填空洞、使分离的边缘相连接等。而底帽运算正是用来提取这些用于填补的区域的。图&#xff08;a&#xff09;为从二值图像中提取出的亮的区域&…

RKE安装k8s及部署高可用rancher,证书在外面的LB(nginx中)

一 了解 Rancher 1 推荐架构 安装 Rancher 的方式有两种&#xff1a;单节点安装和高可用集群安装。因为单节点安装只适用于测试和 demo 环境&#xff0c;而且单节点安装和高可用集群安装之间不能进行数据迁移&#xff0c;所以推荐从一开始就使用高可用集群安装的方式安装 Ran…

Vue Cli inspect

Vue Cli inspect vue-cli-service inspect&#xff1a;可以使用 vue-cli-service inspect 来审查一个 Vue CLI 项目的 webpack config 使用方法&#xff1a; 1、输出在控制台&#xff1a;vue-cli-service inspect 2、输在在文件中&#xff1a;vue-cli-service inspect -->…

阿里云迁移AWS视频点播技术攻坚

文章目录 &#x1f437; 背景&#x1f9a5; 简述&#x1f425; Aws服务&#x1f99c; AWS CloudFormation&#x1f41e; 问题&#x1f409; 落地方案&#x1f989; Aws vs Aliyun&#x1f344; 避坑指南 &#x1f437; 背景 由于AWS整体成本略低于阿里云&#xff0c;公司决定将…

k8s集群部署Harbor镜像仓库

部署k8s集群参考 https://blog.csdn.net/m0_59933574/article/details/134936188?spm1001.2014.3001.5502https://blog.csdn.net/m0_59933574/article/details/134936188?spm1001.2014.3001.5502 安装Harbor 准备一台干净服务器&#xff0c;关闭防火墙与selinux 下载dock…

rime中州韵 inputShow lua Filter

在 rime中州韵 inputShow lua Translator 一文中&#xff0c;我们通过 inputShow.lua 定制了 inputShow_translator&#xff0c;这使得我们的输入方案可以将用户输入的字符透传到候选列表中来。如下&#x1f447;&#xff1a; &#x1f446;上图中我们在候选列表中看到了 inpu…

C# WinForm MessageBox自定义按键文本 COM组件版

c# 更改弹窗MessageBox按钮文字_c# messagebox.show 字体-CSDN博客 需要用到大佬上传到百度云盘的Hook类&#xff0c;在大佬给的例子的基础上改动了点。 应用时自己加GUID和ProgID。 组件实现&#xff1a; using System; using System.Collections.Generic; using System.L…

Flink Watermark和时间语义

Flink 中的时间语义 时间语义&#xff1a;EventTime&#xff1a;事件创建时间&#xff1b;Ingestion Time&#xff1a;数据进入 Flink 的时间&#xff1b;Processing Time&#xff1a;执行操作算子的本地系统时间&#xff0c;与机器无关。不同的时间语义有不同的应用场合&#…

MySQL之四大引擎、建库建表以及账号管理

目录 一.四大引擎 1.1 InnoDB 1.2 MyISAM 1.3 MEMORY 1.4 Archive 二.数据库管理 2.1 元数据库简介 2.2 元数据库分类 2.3 数据库的增删改查及使用 2.4 MySQL库权限相关 三.数据表管理 3.1 三大范式 3.2 基本数据类型 3.2.1 优化原则 3.2.2 分类 四.数据库账号管理 4.1 相同…

LabVIEW在高精度机器人视觉定位系统中的应用

在现代工业自动化中&#xff0c;精确的机器人视觉定位系统对于提高生产效率和产品质量至关重要。LabVIEW软件&#xff0c;以其卓越的图像处理和自动化控制功能&#xff0c;在这一领域发挥着重要作用。本案例将展示LabVIEW如何帮助开发和实现一个高精度的机器人视觉定位系统&…

【WPF.NET开发】WPF中的输入

本文内容 输入 API事件路由处理输入事件文本输入触摸和操作侧重点鼠标位置鼠标捕获命令输入系统和基元素 Windows Presentation Foundation (WPF) 子系统提供了一个功能强大的 API&#xff0c;用于从各种设备&#xff08;包括鼠标、键盘、触摸和触笔&#xff09;获取输入。 本…