【畅购商城】购物车模块之修改购物车以及结算
创始人
2024-02-17 04:42:03

目录

购物车操作:修改

分析

接口

后端实现:更新

前端实现:修改

前端实现:全选

后端实现:删除数据

结算

跳转页面

购物车操作:修改

分析

接口

PUT http://localhost:10010/cart-service/carts

后端实现:更新

步骤一:修改service接口

/*** 更新操作:如果数据存在修改数据,如果数据不存在删除数据* @param user* @param cartVoList*/
public void updateCart(User user, List cartVoList) ;

步骤二:修改service实现类

/*** 更新操作:如果数据存在修改数据,如果数据不存在删除数据* @param user* @param cartVoList*/
public void updateCart(User user, List cartVoList) {//1 获得购物车String key = "cart" + user.getId();String cartStr = stringRedisTemplate.opsForValue().get(key);// 处理是否有购物车Cart cart = JSON.parseObject( cartStr , Cart.class);if(cart == null) {throw new RuntimeException("购物车不存在");}//2 更新//2.1 处理请求数据Map requestMap = new HashMap<>();for (CartVo cartVo : cartVoList) {requestMap.put(cartVo.getSkuid(), cartVo);}//2.2 处理更新和删除Set keySet = new HashSet<>(cart.getData().keySet());
for (Integer skuid : keySet) {CartVo cartRequest = requestMap.get(skuId);if(cartRequest != null) {// 更新cart.updateCart(cartRequest.getSkuid() , cartRequest.getCount() ,cartRequest.getChecked());} else {// 删除cart.deleteCart(skuId);}}//3 保存购物车stringRedisTemplate.opsForValue().set( key , JSON.toJSONString(cart) );
}

步骤三:修改controller

@PutMapping
public BaseResult updateCart(@RequestBody List cartVoList) {//1 获得用户信息// 1.1 获得tokenString token = request.getHeader("Authorization");// 1.2 解析tokenUser loginUser = null;try {loginUser = JwtUtils.getObjectFromToken(token, jwtProperties.getPublicKey(),User.class);} catch (Exception e) {return BaseResult.error("token失效或未登录");}try {this.cartService.updateCart(loginUser ,cartVoList);return BaseResult.ok("成功");} catch (Exception e) {return BaseResult.error("失败");}}

前端实现:修改

  1. 步骤0:修改apiclient.js,添加 updateCart函数
  2. 步骤一:修改flow1.vue 给按钮和文本框添加事件
  3. 步骤二:编写修改对应的事件
  4. 步骤三:编写购物车cart的监听函数,只要数据发生改变立即保存
  5. 步骤四:删除之前绑定js

步骤0:修改apiclient.js,添加 updateCart函数

  updateCart : ( params ) => {return axios.put("/gccartservice/carts" ,params )},

步骤一:修改flow1.vue 给按钮和文本框添加事件

步骤二:编写修改对应的事件

 methods: {minus : function(goods){if( goods.count > 1) {goods.count --;}},plus : function(goods){//可以考虑库存goods.count ++;},updateCount : function(goods,e){console.info(e.target.value);if( /^\d+$/.test( e.target.value) ){goods.count = e.target.value;} else {goods.count = 1;}},

步骤三:编写购物车cart的监听函数,只要数据发生改变立即保存

watch: {//深度监听cart : {async handler(val, oldVal) {//1 更新/删除,数据if(this.token != null){let { data } = await this.$request.updateCart( val )if(data.code == 20000){//alert(data.message);}} else {//未登录localStorage.setItem("cart" , JSON.stringify( val ))}},immediate: false, //true代表如果在 watch 里声明了之后,就会立即先去执行里面的handler方法deep: true      //深度监听,常用于对象下面属性的改变}},

步骤四:删除之前绑定js

前端实现:全选

  1. 步骤一:修改表格
  2. 步骤二:修改样式
  3. 步骤三:添加全选方法
  4. 步骤四:监听购物车数据,修改全选状态

  1. 步骤一:修改表格

 全选

 


步骤二:修改样式

.mycart .col0{width: 5%;}
.mycart .col1{width: 35%;}

步骤三:添加全选方法

 data() {return {cart : [],        //购物车对象allChecked : false,   //全选状态}},
  methods: {checkAll : function(){//所有列表项的状态,与全选的状态,相反this.cart.forEach( g => {g.checked = !this.allChecked;});},},

步骤四:监听购物车数据,修改全选状态

watch: {//深度监听cart : {async handler(val, oldVal) {//1 更新/删除,数据if(this.token != null){let { data } = await this.$request.updateCart( val )if(data.code == 1){//alert(data.message);}} else {//未登录localStorage.setItem("cart" , JSON.stringify( val ))}//2 处理全选let checkCount = 0;this.cart.forEach( g => {if( g.checked ) {checkCount ++;}});//全选状态,选中个数  与 总个数 比较结果this.allChecked = (checkCount == this.cart.length);},immediate: false, //true代表如果在 watch 里声明了之后,就会立即先去执行里面的handler方法deep: true      //深度监听,常用于对象下面属性的改变}},

后端实现:删除数据

  1. 只需要修改数据即可,watch已经完成删除操作
  2. 步骤一:修改html绑定删除事件

步骤二:编写删除函数

 del (index){if(window.confirm("您确定要删除吗?")){this.cart.splice(index , 1)}},

结算

跳转页面

步骤一:给结算绑定事件

  submit : function(){if(this.token != null){//登录//location.href = "flow2.html";this.$router.push('flow2')} else {//确定登录成功后调整的页面localStorage.setItem("returnURL","flow2");//没有登录//location.href = "login";this.$router.push('login')}},

步骤二:编写flow2.vue 组件

步骤三:完善登录

 let returnURL = localStorage.getItem("returnURL");if(returnURL != null){//删除跳转页面缓存localStorage.removeItem("returnURL");//需要跳转页面location.href= returnURL;} else {//默认:跳转首页location.href = "/";}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...