egg(95)--egg之商品加入购物车

news/2024/12/14 17:38:01

流程

  1. 选择版本,
  2. 选择颜色,
  3. 加入购物车

router.js

router.get('/addCart', controller.default.cart.addCart);

view

app/view/default/product_info.html

选中版本,选中颜色,然后点击加入购物车

<input class="jrgwc" type="button" name="addCart" id="addCart" value="加入购物车" />
            $(function() {
                $('#addCart').click(function() {
                    var goods_id = $('#color_list .active').attr('goods_id');
                    var color_id = $('#color_list .active').attr('color_id');
                    location.href = "/addCart?goods_id=" + goods_id + '&color_id=' + color_id;
                })
            })

controller

app/controller/default/cart.js

根据传过来的good_idcolor_id,查找商品和商品颜色

    async addCart() {
        var goods_id = this.ctx.request.query.goods_id;

        var color_id = this.ctx.request.query.color_id;

        //1、获取商品信息

        var goodsResult = await this.ctx.model.Goods.find({ "_id": goods_id });

        var colorResult = await this.ctx.model.GoodsColor.find({ "_id": color_id });


        console.log(goodsResult);

        if (goodsResult.length == 0 || colorResult.length == 0) {

            this.ctx.status = 404;
            this.ctx.body = '错误404'; //404

        } else {

            // 赠品

            var goodsGiftIds = this.ctx.service.goods.strToArray(goodsResult[0].goods_gift);
            var goodsGift = await this.ctx.model.Goods.find({
                $or: goodsGiftIds
            });


            var currentData = {
                _id: goods_id,
                title: goodsResult[0].title,
                price: goodsResult[0].shop_price,
                goods_version: goodsResult[0].goods_version,
                num: 1,
                color: colorResult[0].color_name,
                goods_img: goodsResult[0].goods_img,
                goods_gift: goodsGift,
                /*赠品*/
                checked: true /*默认选中*/
            }

            //2、判断购物车有没有数据

            var cartList = this.service.cookies.get('cartList');

            if (cartList && cartList.length > 0) { //存在

                //4、判断购物车有没有当前数据  
                if (this.service.cart.cartHasData(cartList, currentData)) {

                    for (var i = 0; i < cartList.length; i++) {
                        if (cartList[i]._id == currentData._id) {
                            cartList[i].num = cartList[i].num + 1;
                        }
                    }
                    this.service.cookies.set('cartList', cartList);

                } else {
                    //如果购物车里面没有当前数据   把购物车以前的数据和当前数据拼接 然后重新写入

                    var tempArr = cartList;
                    tempArr.push(currentData);
                    this.service.cookies.set('cartList', tempArr);
                }
            } else {

                // 3、如果购物车没有任何数据  直接把当前数据写入cookies
                var tempArr = [];
                tempArr.push(currentData);
                this.service.cookies.set('cartList', tempArr);
            }
            this.ctx.body = '加入购物车成功';
        }
    }

service

app/service/cookies.js
class CookiesService extends Service {
    set(key, value, expires) {
        expires = expires ? expires : 24 * 3600 * 1000;
        this.ctx.cookies.set(key, JSON.stringify(value), {
            maxAge: expires,
            httpOnly: true,
            encrypt: true
        })
    }

    get(key) {
        var data = this.ctx.cookies.get(key, {
            encrypt: true
        });

        if (data) {
            return JSON.parse(data);
        }
        return null;
    }
}

效果

clipboard.png

clipboard.png


http://www.niftyadmin.cn/n/3174281.html

相关文章

DApp数据排行榜

SpiderStore Dapp数据排行&#xff1a;以太坊&#xff08;ETH&#xff09;Dapp总数1294&#xff0c;24小时活跃用户12921&#xff0c;24小时交易额9076.1976ETH&#xff0c;24小时交易笔数52014&#xff0c;Dapp智能合约数4511&#xff0c;SpiderStore代理游戏《加密英雄》以24…

cadence SPB17.4 - orcad - WARNING(ORCAP-36038): “No_connect“ property on Pin ‘‘ ignored for

文章目录cadence SPB17.4 - orcad - WARNING(ORCAP-36038): "No_connect" property on Pin ignored for概述以U1.A0为例ENDcadence SPB17.4 - orcad - WARNING(ORCAP-36038): “No_connect” property on Pin ‘’ ignored for 概述 原理图画完了, DRC通过. 出网表…

LCS(打印路径) POJ 2250 Compromise

题目传送门 题意&#xff1a;求单词的最长公共子序列&#xff0c;并要求打印路径 分析&#xff1a;LCS 将单词看成一个点&#xff0c;dp[i][j] dp[i-1][j-1] 1 (s1[i] s2[j]), dp[i][j] max (dp[i-1][j], dp[i][j-1]) 代码&#xff1a; #include <cstdio> #include &…

解决npm不支持Nodejs版本的问题

本来今天是打算使用git bash安装babel的&#xff0c;但是在使用npm的时候发现崩了&#xff0c;出现了类似以下的情况&#xff08;我的Nodejs版本是11.6.0&#xff09;。 网上谷歌了下说是因为NodeJs的版本太高了&#xff0c;npm不支持安装的Nodejs版本。看了下npm -v&#xff0…

阿里云Aliplayer高级功能介绍(一):视频截图

基本介绍 H5 Video是不提供截图的API的&#xff0c; 视频截图需要借助Canvas&#xff0c;通过Canvas提供的drawImage方法&#xff0c;把Video的当前画面渲染到画布上&#xff0c; 最终通过toDataURL方法可以导出图片的base64编码&#xff0c;基本就完成了图片截图的功能。 功能…

在Linux和Mac OS X系统上运行.NET

.NET Core运行时已经看到了实现真正的跨平台的美好前景&#xff0c;它最终出现在Linux和Mac OS X平台上。在上周举办的Microsoft Build大会上&#xff0c;来自微软的项目经理Habib Heydarian为听众分析了这一举措对开发者们所带来的益处&#xff0c;并告诉开发者们如何开始探索…

Hive文件的存储格式

hive文件存储格式包括以下几类&#xff1a; TEXTFILE SEQUENCEFILE RCFILE 自定义格式 其中TEXTFILE为默认格式&#xff0c;建表时不指定默认为这个格式&#xff0c;导入数据时会直接把数据文件拷贝到hdfs上不进行处理。 SequenceFile,RCFile格式的表不能直接从本地文件导入数据…

javascript-对象、数组转换为json字符串

http://jingyan.baidu.com/article/925f8cb8145b48c0dde056f5.html 上图&#xff0c; 蓝色是代码&#xff0c;红色是执行结果。 第1段蓝色是&#xff1a;对象转json字符串 第2段蓝色是&#xff1a;数组转json字符串 其实核心的方法就是&#xff1a;JSON.stringify() 参数&#…