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();
}
}
}