显示勾选的购物车数据【项目 商城】

简介: 显示勾选的购物车数据【项目 商城】

显示勾选的购物车数据



1 持久层

1.1 规划查询的SQL语句

用户在购物车列表页中通过随机勾选相关的商品,在点击“结算”按钮户,跳转到结算页面,在这个页面中需要展示用户在上个页面所勾选的购物车对应的数据。列表的展示,而展示的内容还是在购物车的表。两个页面需要将用户勾选的多个cid传递给下一个页面。

SELECT cid,uid,pid,
    t_cart.price,t_cart.num 
    t_product_title,t_product.image,
    t_product.price AS realprice
FROM t_cart LEFT JOIN t_product on t_cart.pid=t_product.id
WHERE cid IN (?,?,?)
ORDER t_cart.created_time DESC

1.2 接口与抽象方法

      List<CartVO> findVOByCid(Integer[] cids);

1.3 配置SQL映射

  <select id="findVOByCid" resultType="com.cy.store.vo.CartVO">
        SELECT cid, uid, pid, t_cart.price, t_cart.num, t_product.title, t_product.price AS realPrice, t_product.image
        FROM t_cart LEFT JOIN t_product ON t_cart.pid = t_product.id
        WHERE cid  IN (<foreach collection="array" item="cid" separator=",">#{cid}</foreach>) ORDER BY t_cart.created_time DESC
    </select>

CartMapper–findVOByCid


测试

进行单元测试

    @Test
    public void findVOByCid(){
        Integer [] cids={1,2,3};
        List<CartVO> list = cartMapper.findVOByCid(cids);
        for (CartVO cartVO:
                list) {
            System.out.println(cartVO) ;
        }
    }

CartMapperTests–findVOByCid


2 业务层

2.1 规划异常

没有

2.1 实现接口与抽象方法

    List<CartVO> getVOByCid(Integer uid,Integer[] cids);

2.2 实现抽象方法

  @Override
    public List<CartVO> getVOByCid(Integer uid, Integer[] cids) {
        List<CartVO> list = cartMapper.findVOByCid(cids);
        Iterator<CartVO> it = list.iterator();
        while (it.hasNext()){
            CartVO cartVO = it.next();
            if (!cartVO.getUid().equals(uid)){//表示当前的数据不属于当前用户
                //从集合中移除元素
                list.remove(cartVO);
            }
        }
        return list;
    }

CartService–getVOByCid


测试

3 控制器

3.1 设计请求

/carts/list
Integer cids,HttpSession session
POST
JsonResult<List<CartVO>>

3.2 处理请求

  @RequestMapping("/list")
    public JsonResult<List<CartVO>> getVOByCid(Integer[] cids,HttpSession session) {
        List<CartVO> data = cartService.getVOByCid(getuidFromSession(session),cids);
        return new JsonResult<>(OK,data);
    }

CartController–getVOByCid


测试

cid一定得是当前登录的用户的

http://localhost:8080/carts/list?cids=4&cids=5


前端页面

1.将cart.html中“结算”按钮属性更改为type=submit

2.orderConfirm.html页面中添加自动加载从上个页面中传递过来的cids数据,再去请求ajax,中进行填充当前页面的某个区域。

<!--    <script src="../js/orderConfirm.js" type="text/javascript" charset="utf-8"></script>-->
      // <!-- showCartList  -->
      function showCartList() {
        $("#cart-list").empty();
        console.log(location.search.substr(1))
        $.ajax({
          url: "/carts/list",
          data: location.search.substr(1),
          type: "GET",
          dataType: "JSON",
          success: function(json) {
            let list = json.data;
            console.log("count=" + list.length);
            let allCount = 0;
            let allPrice = 0;
            for (let i = 0; i < list.length; i++) {
              console.log(list[i].title);
              let tr = '<tr>'
                  + '<td><img src="..#{image}collect.png" class="img-responsive" /></td>'
                  + '<td><input type="hidden" name="cids" value="#{cid}" />#{title}</td>'
                  + '<td>¥<span>#{realPrice}</span></td>'
                  + '<td>#{num}</td>'
                  + '<td>¥<span>#{totalPrice}</span></td>'
                  + '</tr>';
              tr = tr.replace(/#{cid}/g, list[i].cid);
              tr = tr.replace(/#{image}/g, list[i].image);
              tr = tr.replace(/#{title}/g, list[i].title);
              tr = tr.replace(/#{realPrice}/g, list[i].realPrice);
              tr = tr.replace(/#{num}/g, list[i].num);
              tr = tr.replace(/#{totalPrice}/g, list[i].realPrice * list[i].num);
              $("#cart-list").append(tr);
              allCount += list[i].num;
              allPrice += list[i].realPrice * list[i].num;
            }
            $("#all-count").html(allCount);
            $("#all-price").html(allPrice);
          }
        });
      }
      // <!-- showCartList  -->

orderConfirm–showCartList


测试



确认订单页显示收货地址列表



前端页面

1.收货地址存放在select下拉列表中,将查询到的当前登录用户的收货地址动态的加载到下拉列表中。从数据库的角度,是一个select查询语句。已经编写了根据用户的uid查询用户的地址数据。


2.OrderConfirm.html页面中,收货地址数据的展示需要自动进行加载,需要将方法的逻辑放在ready()函数中。


      $(document).ready(function() {
        showAddressList();
        showCartList();
      });

3.声明和调用showAddressList()方法,方法中发送ajax请求即可。

      // showAddressList
      function showAddressList() {
        //清空select下拉列表的内容
        $("#address-list").empty();
        $.ajax({
          url: "/addresses",
          type: "GET",
          dataType: "JSON",
          success: function(json) {
            let list = json.data;
            console.log("count=" + list.length);
            for (let i = 0; i < list.length; i++) {
              console.log(list[i].name);
              let opt = '<option value="#{aid}">#{name} | #{tag} | #{province}#{city}#{area}#{address} | #{phone}</option>';
              opt = opt.replace(/#{aid}/g, list[i].aid);
              opt = opt.replace(/#{tag}/g, list[i].tag);
              opt = opt.replace("#{name}", list[i].name);
              opt = opt.replace("#{province}", list[i].provinceName);
              opt = opt.replace("#{city}", list[i].cityName);
              opt = opt.replace("#{area}", list[i].areaName);
              opt = opt.replace("#{address}", list[i].address);
              opt = opt.replace("#{phone}", list[i].phone);
              $("#address-list").append(opt);
            }
          }
        });
      }
      // showAddressList

orderConfirm.html–showAddressList


测试

4.先登录,在访问项目的结算页面,测试收货地址的列表加载功能。

READ–显示勾选的购物车数据

相关文章
|
4月前
|
前端开发 JavaScript
|
2月前
购物车的功能——界面源码
购物车的功能——界面源码
12 1
|
7月前
|
开发者
【 uniapp - 黑马优购 | 购物车页面(1)】如何创建购物车编译模式、 商品列表区域实现
【 uniapp - 黑马优购 | 购物车页面(1)】如何创建购物车编译模式、 商品列表区域实现
122 0
|
9月前
|
SQL 存储 前端开发
显示购物车列表【项目 商城】
显示购物车列表【项目 商城】
36 0
|
9月前
|
SQL 前端开发
显示商品详情【项目 商城】
显示商品详情【项目 商城】
68 0
|
9月前
|
SQL XML 前端开发
收货地址列表展示【项目 商城】
收货地址列表展示【项目 商城】
66 0
|
11月前
|
前端开发
ShopEx后台商品管理左侧菜单显示空白问题原因及修复
ShopEx后台商品管理左侧菜单显示空白问题原因及修复
uniapp——添加购物车数据以及删除购物车数据
添加购物车数据以及删除购物车数据
133 0
Axure教程:外卖订单平台——用中继器做商品列表购物车
Axure教程:外卖订单平台——用中继器做商品列表购物车
Axure教程:外卖订单平台——用中继器做商品列表购物车
|
存储 JSON 前端开发
【瑞吉外卖】day09:用户地址簿功能、菜品展示、购物车、下单(一)
【瑞吉外卖】day09:用户地址簿功能、菜品展示、购物车、下单
228 0
【瑞吉外卖】day09:用户地址簿功能、菜品展示、购物车、下单(一)