黑马瑞吉外卖之购物车功能开发(添加购物车和购物车数据展示)

news2025/7/31 23:24:36

黑马瑞吉外卖之购物车功能

  • 前端界面分析
  • 后台购物车功能逻辑实现

前端界面分析

当我们点击选择规格的时候,数据参数item会传入按钮绑定的方法中
在这里插入图片描述

在这里插入图片描述
我们点击到这个按钮的时候,那么就会绑定到这个方法。这个方法会将数据给这个窗体中的数据项赋值。这个diaglogFlavor其实就是定义初始化在vue的data里面。其实是可以看作一个列表。
在这里插入图片描述

在这里插入图片描述
这里会将show这个字段设置为true,那么据一定是一个标志的了,于是我们定位到上面的需要它的地方。到这里的时候就还会非常清楚了,这里的flag为true,这个这里就会执行这样的一个展示。具体的展示就是divCart,然后其实就是一个大的div。

在这里插入图片描述

在这里插入图片描述
这里就是具体的数据展示了。具体的呢,就是这样的一些数据,如下。

然后下面的数据包是怎么样展示出来的呢?

在这里插入图片描述
这里其实就是对口味规格进行了遍历。这样就展示出来了这样的数据。

在这里插入图片描述
当我们点击选择的时候,那么就会绑定到一个按钮。这里就会传入数据。

在这里插入图片描述

当我们点击flavorClick按钮的时候就会跳到这个方法。
在这里插入图片描述
那么选中的口味数据就会被赋值上。然后整个框的下面应该就是加入购物车的选择。当我们点击机器如购物车的时候就应该是一个按钮绑定方法,这个方法一定会向后端提交数据请求。那么就是走到这里的这个方法。

在这里插入图片描述
然乎我们定位到加入购物车的这个按钮所绑定给的方法。下面这里就是进行了一些数据的·遍历赋值,当然如果我们美誉选择口味数据的时候就点击加入购物车,这里就会提示让你请选择数据。

在这里插入图片描述

flag已经在上面设置为了true.r然后这里按照循环下面的走下来就是。

那么其实就是走到了这里。addCart。
在这里插入图片描述

然后呢,我们点位到这个addCart()这个方法。这个方法的逻辑就写在了这里。

在这里插入图片描述
其实这里还有一个调用的提交的请求接口。
那么我们就需要定位到这个addCartApi这个方法。

在这里插入图片描述
最终我们就来到了实际的js里面缩写的据具体的发送请求数据的接口。
在这里插入图片描述
然后就是这样啦!前端后面当然会接收数据,然后根据后端返回的数据做出响应即可。

后台购物车功能逻辑实现

这里同样按照原来的需要数据库表的设计,以及实体类。这是最为初步的操作。
这些字段都是十分好理解的。
在这里插入图片描述

id当然就是购物车的主键id,name当然就是所选的菜品或者套餐,然后image就是其实作为图片路径,将来要展示具体的图片的时候,我们就会需要这个字段的属性,然后就是user_id,这是比较重要的一个部分,因为这个购物车表中会添加很多的数据,我们需要按照片不同的用户来区分不同的用户的购物车,当然没非常重要的就是,如果用户登录到前台页面,所展示也就是他的id下面所关联到的购物车数据。dish_id和setmeal_id就自然很清楚,如果你的购物车有加入这些关系的数据那么这些字段下面就会有值,否则就没有。下面的不说了。

然后需要根据这样的表设计我们的实体类。还有mybatisplus框架搭建好就可以。
那么后台我们需要做的是什么,首先需要做的就是一个添加,因为我们刚刚做的就是一个添加的功能。点击按钮然后添加。就是这样,所以那么我们据先完成这样的功能。

后台逻辑如下

  @Autowired
    private ShoppingCartService shoppingCartService;
//    添加购物车
    @PostMapping("/add")
    public R_<ShoppingCart> add(@RequestBody ShoppingCart shoppingCart, HttpSession session)
    {
        log.info("购物车数据{}",shoppingCart);
        //这只用户id指定是哪个用户的购物车数据
//        查询当前用户的菜品或者套餐是否在购物车上
//        如果已经存在就在原来的数量的基础上进行加一
//        如果不存在,则添加到购物车,数量默认是一
//        获得当前用户的id
       Long userId = (Long) session.getAttribute("user");

//        将这个id设置到购物车当中去
        shoppingCart.setUserId(userId);
//        查询当前菜品或者套餐是否在购物车当中、
//        还需要判断当前添加的是套餐还是菜品
        Long dishId = shoppingCart.getDishId();
        LambdaQueryWrapper<ShoppingCart> shoppingCartLambdaQueryWrapper = new LambdaQueryWrapper<>();
//        添加用户条件
        shoppingCartLambdaQueryWrapper.eq(ShoppingCart::getUserId,userId);
        if(dishId!=null)
        {
//            添加的是菜品
            shoppingCartLambdaQueryWrapper.eq(ShoppingCart::getDishId,dishId);

        }else {
//            添加的是套餐
            shoppingCartLambdaQueryWrapper.eq(ShoppingCart::getSetmealId,shoppingCart.getSetmealId());
        }
//        查询当前菜品或者套餐是否在购物车当中,如果能够查出来,说明已经存在
        ShoppingCart one = shoppingCartService.getOne(shoppingCartLambdaQueryWrapper);
       if(one!=null)
       {
//           如果已经存在,那么就在原先的数量上加一
           Integer number = one.getNumber();
           one.setNumber(number+1);
           shoppingCartService.updateById(one);
       }else {
           shoppingCart.setNumber(1);
           shoppingCart.setCreateTime(LocalDateTime.now());
           shoppingCartService.save(shoppingCart);
           one = shoppingCart;

       }
      return R_.success(one);
    }

这样我们就完整了具体的功能。为什么还需要返回,当然了,因为数据添加成功以后就可以将这个购车的数据返回出去,因为我们取到成功的状态和数据。

在这里插入图片描述
当然这个展示查询的话一定是需要我们后台给的购物车的查询接口的。在这里插入图片描述
在这里插入图片描述

那么controller就是这样去写了

   查看购物车
    @GetMapping("/list")
    public R_<List<ShoppingCart>> list(HttpSession session)
    {
        log.info("查看购物车:{}");
        LambdaQueryWrapper<ShoppingCart> shoppingCartLambdaQueryWrapper = new LambdaQueryWrapper<>();

        shoppingCartLambdaQueryWrapper.eq(ShoppingCart::getUserId,(Long)session.getAttribute("user"));

        shoppingCartLambdaQueryWrapper.orderByAsc(ShoppingCart::getCreateTime);
        List<ShoppingCart> list = shoppingCartService.list(shoppingCartLambdaQueryWrapper);


       return R_.success(list);
    }

这个是查看购物车,效果就是这个样子

在这里插入图片描述

这是整体界面最后添加的结果,下面是套餐添加后的界面,

按照这个瑞吉外卖的前端设计的话,点菜需要选择口味这些规格,套餐的话则不需要去选择规格了。认为是固定的。效果就是这个样子
在这里插入图片描述
懒惰今天更一篇。文章全部包含前后端的逻辑分析。

请添加图片描述

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

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

相关文章

【linux】【platform[1]】简述device和driver几种匹配方式

文章目录0.env10. 简述20. 测试源码1. driver2. device2.1 方式一&#xff1a;DTS2.2 方式二&#xff1a;ACPI2.3 方式三&#xff1a;id table2.4 方式四&#xff1a;NAME3. 测试log0.env ARM 32bit linux4.4.6010. 简述 主要讲述了几种device和driver匹配的方式以及demo框架文…

82055-94-5|N3-PEG-N3|Azide-PEG-Azide|叠氮PEG叠氮可修饰蛋白质

可用来修饰蛋白质、多肽以及其他材料的叠氮-PEG-叠氮&#xff0c;其英文名为N3-PEG-N3或Azide-PEG-Azide&#xff0c;它所属分类为Azide PEG。 该peg试剂的分子量均可定制&#xff0c;有&#xff1a;叠氮-PEG-叠氮 2000、叠氮peg叠氮 1000、叠氮-聚乙二醇-叠氮 5000、N3-PEG-N…

天宇优配|国产海上风电装备大突破,行业复合增速将超3

在全球加紧应对气候变化以及能源供应严重的布景下&#xff0c;海优势电工业面对历史性开展机会。 全球单机容量最劲风电机组下线 据央视新闻&#xff0c;近日&#xff0c;我国自主研制的16兆瓦海优势电机组在福建三峡海优势电世界工业园下线。单机容量16兆瓦海优势电机组&…

MCE 抗乳腺癌化合物库上线丨靶向乳腺癌知多少?

乳腺癌是全世界女性最常见的恶性肿瘤&#xff0c;世界卫生组织 (WHO) 数据显示&#xff0c;全球每年大约有 210 万女性受乳腺癌影响&#xff0c;乳腺癌死亡率在女性肿瘤中居于首位。 认识乳腺癌 ■ 什么是乳腺癌&#xff1f; 乳腺癌 (Breast cancer) 是一种具有多种亚型的异质…

PG::Ha-natraj

nmap -Pn -p- -T4 --min-rate1000 192.168.134.80 nmap -Pn -p 22,80 -sCV 192.168.134.80 查看80端口的页面 未发现可利用的信息&#xff0c;对路径进行爆破 在/console目录下发现file.php 测试发现有本地文件包含 未发现别的利用方式&#xff0c;结合之前做过的靶机&am…

JAVA多线程2_Lock

文章目录一、ReentrantLock类1.使用ReentrantLock2.使用ReentrantLock实现多对多3.公平锁与非公平锁4.ReentrantLock类其他方法的使用二、ReentrantReadWriteLock类1.读读共享2.写写互斥3.读写互斥4.写读互斥总结一、ReentrantLock类 1.使用ReentrantLock 创建reentrantlock.s…

【计算机毕业设计】36.网易购商城购物平台源码

一、系统截图&#xff08;需要演示视频可以私聊 摘 要 本毕业设计的内容是设计并且实现一个基于JSP技术的网易购购物平台。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。网易购购物平台的功能已基本实现&#xff0c;主…

sqli-labs/Less-62

欢迎界面提示我们一共由130次机会 而且还是以id作为注入点 每次重置都会随机分配表名、字段名、表格数据 首先判断注入类型 输入id1 and 12 回显如下 说明不属于数字型 接着输入1 回显如下 没有回显 说明注入点带有单引号 佐证一下吧 输入1-- 回显如下 说明不是纯粹的单引号…

【Redis技术探索】「高可用架构模式」哨兵(sentinel)模式实现主从故障互切换模式详解

哨兵&#xff08;sentinel&#xff09;模式实现主从故障互切换模式详解Redis的多种模式Redis单机模式Redis单机模式的优点Redis单机模式的缺点Redis主从复制旧版本配置新版本配置查看主节点信息主从模式的优点主从复制的弊端Redis哨兵模式分析哨兵结构组成哨兵模式的主从切换Re…

ROS-TCP-Connector and ROS-TCP-Endpoint

Unity官方提供了和ROS交互的接口&#xff1a;ROS-TCP-Connector and ROS-TCP-Endpoint。有了这两个Unity就能够更好的和真实机器人做交互。两个接口的实现基于ROS#、ros_bridge&#xff0c;所以基本上以后用这个就可以了。 源码如下&#xff1a;   ROS-TCP-Endpoint&#xff…

学生党蓝牙耳机怎么选?四款性价比高的蓝牙耳机推荐

随着时代的发展&#xff0c;人们越来越追求事物的使用体验感。便捷的蓝牙耳机成为更多人的选择&#xff0c;对于学生党来说&#xff0c;蓝牙耳机的重要性不言而喻。接下来&#xff0c;我来推荐几款适合学生党的蓝牙耳机。 1、南卡小音舱蓝牙耳机 综合得分&#xff1a;96分(满…

骨传导耳机伤耳朵吗?带你一分钟了解骨传导耳机

最近听到最多的一句话就是&#xff1a;骨传导耳机伤耳朵吗&#xff1f;骨传导耳机不会伤害耳朵&#xff0c;反而更能保护耳朵。骨传导耳机是不入耳的&#xff0c;既不伤耳&#xff0c;还能保护耳部。骨传导耳机我用过很多款&#xff0c;知道有哪些骨传导耳机是比较好的&#xf…

产品公开后就不能再申请专利了吗?

问题一&#xff1a;申请专利会导致产品技术泄密吗&#xff1f; 很多人担心申请专利后会导致自己的专利技术公之于众&#xff0c;会让同行模仿生产。其实&#xff0c;我们不妨反向思考一下&#xff0c;假如我们没有申请专利&#xff0c;我们销售生产出去的产品就不容易被模仿吗…

华为机试 - TLV解析Ⅰ

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 TLV编码是按[Tag Length Value]格式进行编码的&#xff0c;一段码流中的信元用Tag标识&#xff0c;Tag在码流中唯一不重复&#xff0c;Length表示信元Value的长度&#xff0c;Value表示信元的值。 码…

【Canvas】JavaScript用Canvas制作美丽的对称图案

生活中有看到一个对称图案&#xff0c;看着很美&#xff0c;于是想到&#xff0c;试试用Canvas试着画对称图形来&#xff0c;想到就做&#xff0c;自己还真捣鼓出来了&#xff0c;自己弄了好多的对称图这里就不晒出来了&#xff0c;接下来讲讲怎么做&#xff0c;有兴趣的同学可…

java 自定义生成验证码

目录说明效果展示Base64编码的文件类型枚举类验证码默认常量值验证码生成工具类使用说明 项目登录或者其他重要的操作中都要生成验证码&#xff0c;其重要性在此不多说。 主要是介绍自己封装的验证码生成工具类的使用。 建议安装lombok插件,不使用此插件则需要手动生成get、s…

cron表达式,结构、字段说明、特殊字符说明、常用表达式

1.cron表达式的结构 Cron表达式是一个字符串&#xff0c;结构非常简单。Cron表达式从左到右分为6或7个字段&#xff0c;每个字段代表一个含义&#xff0c;用空格隔开。如下图所示&#xff1a; 2.cron表达式中各个字段的说明和规则 Cron一共有7位&#xff0c;最后一位是年份&…

浅析资源调度框架YARN

第一章 资源调度框架YARN理论 1.1 YARN概述 分布式操作系统 hadoop 1.xMapReduce主从架构 主节点JobTracker 从节点TaskTrackerslot hadoop 2.xMapReduce编程API YARN主从架构 主节点ResourceManager 从节点NodeManagerContainer hadoop 3.xCommonHDFS 纠删码 …

关于升级高德地图导航9.5.0的问题 ‘com.amap.api:navi-3dmap:9.5.0_3dmap9.5.0‘

最近打开项目&#xff0c;发现高德有新版本更新&#xff0c;果断更新。哈哈哈哈。然而结果好像并没有这么简单。要是世界上什么事情这么简单就好了。年轻人。还是太年轻了啊。 然后更新完最新的依赖 /*高德地图远程依赖*/implementation com.amap.api:navi-3dmap:9.5.0_3dmap9…

I/O 设备(输入/输出设备)

文章目录I/O 设备输入设备输出设备1&#xff0c;显示器2&#xff0c;打印机3&#xff0c;投影仪I/O 设备 输入设备 借助计算机的输入设备&#xff0c;用户能够轻松地将数据或者指令传递给计算机。同时&#xff0c;计算机中的 CPU 会接收用户输入的指令或数据&#xff0c;并对…