筆記:修改數量


js:

var TTCart = {
	load : function(){ // 加載購物車數據
		
	},
	init : function(){
		$("#toSettlement").click(function(){
			$("#cartForm").submit();
		});
		
		$("[name=checkItem]").click(function(){
			//計算總價
			TTCart.refreshTotalPrice();
			//將選中的商品填寫到Form表單中
			var itemIds = [];
			$("[name=checkItem]:checked").each(function(i,e){
				itemIds.push($(e).val());
			})
			$("#cartForm [name=itemIds]").val(itemIds.join(","));
			
			//設置全選狀態
			$("[name=toggle-checkboxes]").attr("checked",$("[name=checkItem]:not(:checked)").length==0);
		});
		
		//全選
		$("[name=toggle-checkboxes]").click(function(){
			$("[name=checkItem]").attr("checked",this.checked);
			TTCart.refreshTotalPrice();
//			if(this.checked){
//				$("[name=checkItem]:not(:checked)").click();
//			}else{
//				$("[name=checkItem]:checked").click();
//			}
		});
	},
	itemNumChange : function(){
		$(".increment").click(function(){//+
			var _thisInput = $(this).siblings("input");
			_thisInput.val(eval(_thisInput.val()) + 1);
			$.post("/service/cart/update/num/"+_thisInput.attr("itemId")+"/"+_thisInput.val(),function(data){
				TTCart.refreshTotalPrice();
			});
		});
		$(".decrement").click(function(){//-
			var _thisInput = $(this).siblings("input");
			if(eval(_thisInput.val()) == 1){
				return ;
			}
			_thisInput.val(eval(_thisInput.val()) - 1);
			$.post("/service/cart/update/num/"+_thisInput.attr("itemId")+"/"+_thisInput.val(),function(data){
				TTCart.refreshTotalPrice();
			});
		});
		$(".quantity-form .quantity-text").rnumber(1);//限制只能輸入數字
		//jQuery的change事件,文本框內容更變時執行
		$(".quantity-form .quantity-text").change(function(){
			var _thisInput = $(this);
			$.post("/service/cart/update/num/"+_thisInput.attr("itemId")+"/"+_thisInput.val(),function(data){
				TTCart.refreshTotalPrice();
			});
		});
	},
	refreshTotalPrice : function(){ //重新計算總價
		var total = 0;
		$("[name=checkItem]:checked").each(function(i,e){
			var _this = $(e);
			var _item =_this.parents("div.item").find(".quantity-form .quantity-text");
			total += (eval(_item.attr("itemPrice")) * 10000 * eval(_item.val())) / 10000;
		});
		$(".totalSkuPrice").html(new Number(total/100).toFixed(2)).priceFormat({ //價格格式化插件
			 prefix: '¥',
			 thousandsSeparator: ',',
			 centsLimit: 2
		});
	}
};

$(function(){
	TTCart.init();
	TTCart.load();
	TTCart.itemNumChange();
});

jsp:

<div class="cell p-quantity" for-stock="for-stock-11345721">
		                <div class="quantity-form" data-bind="">
		                    <a href="javascript:void(0);" class="decrement" clstag="clickcart|keycount|xincart|diminish1" id="decrement">-</a>
		                    <input type="text" class="quantity-text" itemPrice="${cart.itemPrice}" itemId="${cart.itemId}" value="${cart.num }" id="changeQuantity-11345721-1-1-0">
		                    <a href="javascript:void(0);" class="increment" clstag="clickcart|keycount|xincart|add1" id="increment">+</a>
		                </div>
		            </div>


<div class="cart-toolbar clearfix">
            <div class="total fr">
                <p><span class="totalSkuPrice">¥<fmt:formatNumber value="${totalPrice / 100}" maxFractionDigits="2" minFractionDigits="2" groupingUsed="true"/></span>總計:</p>
                <p><span id="totalRePrice">- ¥0.00</span>優惠:</p>
            </div>
            <div class="amout fr"><span id="selectedCount">1</span> 件商品</div>
        </div>

<div class="total fr">
                  總計(不含運費):
                  <span class="totalSkuPrice">¥<fmt:formatNumber value="${totalPrice / 100}" maxFractionDigits="2" minFractionDigits="2" groupingUsed="true"/></span>
              </div>

controller:

 /**
     * 修改購買商品的數量
     * 
     * @param itemId
     * @return
     */
    @RequestMapping(value = "cart/update/num/{itemId}/{num}", method = RequestMethod.POST)
    public ResponseEntity<Void> updateItemFromCart(@PathVariable("itemId") Long itemId,
            @PathVariable("num") Integer num, HttpServletRequest request, HttpServletResponse response) {
        // 判斷用戶是否登錄
        User user = UserThreadLocal.get();
        if (null == user) {
            // 未登錄
            this.cartCookieService.updateItemToCart(itemId, num, request, response);
        } else {
            // 已登錄
            this.cartService.updateItemToCart(itemId, num);
        }

        return ResponseEntity.status(HttpStatus.NO_CONTENT).build();
    }

service:

package com.taotao.cart.service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.taotao.cart.pojo.Cart;
import com.taotao.cart.pojo.Item;
import com.taotao.common.utils.CookieUtils;

@Service
public class CartCookieService {

    public static final String COOKIE_CART = "TT_CART";

    private static final ObjectMapper MAPPER = new ObjectMapper();

    private static final Integer COOKIE_TIME = 60 * 60 * 24 * 30 * 3;

    @Autowired
    private ItemService itemService;

    public void addItemToCart(Long itemId, HttpServletRequest request, HttpServletResponse response) {
        try {
            List<Cart> carts = this.queryCartList(request);
            Cart cart = null;
            for (Cart c : carts) {
                if (c.getItemId().intValue() == itemId.intValue()) {
                    // 該商品已經存在
                    cart = c;
                    break;
                }
            }

            if (null == cart) {
                // 不存在
                // 查詢商品數據
                Item item = this.itemService.queryItemById(itemId);

                cart = new Cart();
                cart.setCreated(new Date());
                cart.setUpdated(cart.getCreated());
                cart.setId(null);
                cart.setItemId(itemId);
                cart.setItemImage(item.getImages()[0]);
                cart.setItemPrice(item.getPrice());
                cart.setItemTitle(item.getTitle());
                cart.setNum(1);// TODO
                carts.add(cart);
            } else {
                // 存在
                cart.setNum(cart.getNum() + 1);// TODO
            }

            // 將carts集合寫入到cookie中
            CookieUtils.setCookie(request, response, COOKIE_CART, MAPPER.writeValueAsString(carts),
                    COOKIE_TIME, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public List<Cart> queryCartList(HttpServletRequest request) {
        try {
            String cookieCart = CookieUtils.getCookieValue(request, COOKIE_CART, true);
            if (StringUtils.isEmpty(cookieCart)) {
                return new ArrayList<Cart>(0);
            }
            return MAPPER.readValue(cookieCart,
                    MAPPER.getTypeFactory().constructCollectionType(List.class, Cart.class));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return new ArrayList<Cart>(0);
    }

    public void deleteItemToCart(Long itemId, HttpServletRequest request, HttpServletResponse response) {
        List<Cart> carts = this.queryCartList(request);
        for (Cart c : carts) {
            if (c.getItemId().intValue() == itemId.intValue()) {
                // 該商品已經存在
                carts.remove(c);
                break;
            }
        }

        try {
            // 將carts集合寫入到cookie中
            CookieUtils.setCookie(request, response, COOKIE_CART, MAPPER.writeValueAsString(carts),
                    COOKIE_TIME, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void updateItemToCart(Long itemId, Integer num, HttpServletRequest request,
            HttpServletResponse response) {
        List<Cart> carts = this.queryCartList(request);
        for (Cart c : carts) {
            if (c.getItemId().intValue() == itemId.intValue()) {
                // 該商品已經存在
                c.setNum(num);
                break;
            }
        }

        try {
            // 將carts集合寫入到cookie中
            CookieUtils.setCookie(request, response, COOKIE_CART, MAPPER.writeValueAsString(carts),
                    COOKIE_TIME, true);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章