zoukankan      html  css  js  c++  java
  • 前后端分离 ---购物车

    购物车不仅仅可以存在服务端的rredis中和MySQL中

    也可以存在前端的cookie中

    //购物车

        var Cart = function () {

            this.Count = 0;

            this.Total = 0;

            this.Items = new Array();

        };

        //购物车集合对象

        var CartItem = function () {

            this.Id = 0;

            this.Name = "";

            this.Count = 0;

            this.Price = 0;

        };

        //购物车操作

        var CartHelper = function () {

            this.cookieName = "{$member_id}_repast_cart";

            this.Clear = function () {

                var cart = new Cart();

                this.Save(cart);

                return cart;

            };

            //向购物车添加

            this.Add = function (id, name, count, price) {

                var cart = this.Read();

                var index = this.Find(id);

                if(count==0){

                    this.Del(id);

                }else{

                    //如果ID已存在,覆盖数量

                    if (index > -1) {

                        cart.Total -= (((cart.Items[index].Count * 100) * (cart.Items[index].Price * 100)) / 10000);

                        cart.Items[index].Count = count;

                        cart.Total += (((cart.Items[index].Count * 100) * (cart.Items[index].Price * 100)) / 10000);

                    } else {

                        var item = new CartItem();

                        item.Id = id;

                        item.Name = name;

                        item.Count = count;

                        item.Price = price;

                        cart.Items.push(item);

                        cart.Count++;

                        cart.Total += (((item.Count * 100) * (item.Price * 100)) / 10000);

                        // console.log(cart);

                        // cart.Total += (((cart.Items[index].Count * 100) * (cart.Items[index].Price * 100)) / 10000);

                    }

                    cart.Total=Math.round(cart.Total * 100) / 100;

                    this.Save(cart);

                }

                return cart;

            };

            //改变数量

            this.Change = function (id, count) {

                var cart = this.Read();

                var index = this.Find(id);

                cart.Items[index].Count = count;

                this.Save(cart);

                return cart;

            };

            //移出购物车

            this.Del = function (id) {

                var cart = this.Read();

                var index = this.Find(id);

                if (index > -1) {

                    var item = cart.Items[index];

                    cart.Count--;

                    cart.Total = cart.Total - (((item.Count * 100) * (item.Price * 100)) / 10000);

                    cart.Items.splice(index, 1);

                    this.Save(cart);

                }

                return cart;

            };

            //根据ID查找

            this.Find = function (id) {

                var cart = this.Read();

                var index = -1;

                for (var i = 0; i < cart.Items.length; i++) {

                    if (cart.Items[i].Id == id) {

                        index = i;

                    }

                }

                return index;

            };

            //COOKIE操作

            this.Save = function (cart) {

                var source = "";

                for (var i = 0; i < cart.Items.length; i++) {

                    if (source != "") { source += "|$|"; }

                    source += this.ItemToString(cart.Items[i]);

                }

                $.cookie(this.cookieName, source);

            };

            this.Read = function () {

                //读取COOKIE中的集合

                var source = $.cookie(this.cookieName);

                var cart = new Cart();

                if (source == null || source == "") {

                    return cart;

                }

                var arr = source.split("|$|");

                cart.Count = arr.length;

                for (var i = 0; i < arr.length; i++) {

                    var item = this.ItemToObject(arr[i]);

                    cart.Items.push(item);

                    cart.Total += (((item.Count * 100) * (item.Price * 100)) / 10000);

                }

                return cart;

            };

            this.ItemToString = function (item) {

                return item.Id + "||" + escape(item.Name) + "||" + item.Count + "||" + item.Price;

            };

            this.ItemToObject = function (str) {

                var arr = str.split('||');

                var item = new CartItem();

                item.Id = arr[0];

                item.Name = unescape(arr[1]);

                item.Count = arr[2];

                item.Price = arr[3];

                return item;

            };

        };

        //调用

        var xc=new CartHelper();

        //id,名称,数量,价格    数量为0的话直接删除

        xc.Add(id,c_name,num,price);

    这个方法会用的话非常简单~·

  • 相关阅读:
    SQLSERVER 2008 编辑所有或者任意行
    在SQL2008和2012里面怎么让显示全部行和编辑 全部而不是200和1000
    sql server 提取汉字/数字/字母的方法
    [再寄小读者之数学篇](2014-05-12 曲线的弧长计算)
    [复变函数]第23堂课 6.2 用留数定理计算实积分 (续)
    [再寄小读者之数学篇](2014-04-23 行列式的导数)
    [再寄小读者之数学篇](2014-04-22 平方差公式在矩阵中的表达)
    康乐不风流之爱解题的pde灌水王张祖锦
    [复变函数]第22堂课 6.2 用留数定理计算实积分
    [Tex学习笔记]数学公式再次测试
  • 原文地址:https://www.cnblogs.com/weifeng-888/p/10686433.html
Copyright © 2011-2022 走看看