jh-admin/addon/supply/shop/view/cart/cart.html

634 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{extend name="base"/}
{block name="resources"}
<link rel="stylesheet" href="SHOP_SUPPLY_LOCAL_CSS/cart.css">
{/block}
{block name="body"}
<div class="ns-supply-wrap">
<div class="ns-supply-wrap-con">
{include file="addon/supply/shop/view/market_head.html"/}
<div class="ns-supply-cart">
<div class="ns-cart-list-wrap">
</div>
<!-- 购物车为空 -->
{if $count > 0}
<div class="null-cart layui-hide">
{else/}
<div class="null-cart">
{/if}
<div class="null-cart-img"><img src="SHOP_SUPPLY_LOCAL_IMG/shopping_cart.png" /></div>
<div class="null-cart-font">
<p>您的供货单还是空的,赶紧行动吧!您可以:</p>
<p>看看 <a href="{:addon_url('supply://shop/goods/goodslist')}">商品列表</a></p>
</div>
</div>
</div>
</div>
</div>
<script type="text/html" id="cartList">
<div class="ns-cart-wrap layui-form">
<ul class="ns-cart-th">
<li><input type="checkbox" name="" lay-skin="primary" lay-filter="allSelected" checked></li>
<li>商品信息</li>
<li>价格</li>
<li>数量</li>
<li>小计</li>
<li>操作</li>
</ul>
<div class="list">
{{# layui.each(d, function(siteIndex, siteItem) { }}
<div class="item">
<div class="head layui-form">
<input type="checkbox" name="" lay-skin="primary" lay-filter="siteSelected" data-site="{{siteIndex}}" checked>
<a href="#">{{ siteItem.site_name }}</a>
{{# if (siteItem.is_own) { }}
<span class="layui-badge">自营</span>
{{# } }}
</div>
{{# layui.each(siteItem.goodsList, function(goodsIndex, goodsItem) { }}
<ul data-site="{{siteIndex}}" data-sku="{{goodsIndex}}" data-sku_id="{{goodsItem.sku_id}}">
<li>
<input type="checkbox" name="" lay-skin="primary" lay-filter="goodsSelected" data-site="{{siteIndex}}" data-sku="{{goodsIndex}}" data-site_id="{{siteItem.site_id}}" data-cart_id="{{goodsItem.cart_id}}" checked>
</li>
<li class="goods-info-wrap">
<div class="img-wrap" onclick="goodsDetail({{goodsItem.sku_id}})"><img class="img-thumbnail" src="{{ns.img(goodsItem.sku_image)}}" onerror="this.src = 'SHOP_SUPPLY_LOCAL_IMG/default_goods.png' " /></div>
<div class="info-wrap">
<h5 onclick="goodsDetail({{goodsItem.sku_id}})">{{ goodsItem.sku_name }}</h5>
{{# if (goodsItem.sku_spec_format) { }}
{{# var sku_spec = JSON.parse(goodsItem.sku_spec_format) }}
{{# } }}
{{# layui.each(sku_spec, function(k, v) { }}
<span> {{ v.spec_name }}{{ v.spec_value_name }}{{ k < goodsItem.sku_spec_format.length - 1 ? "" : "" }}
</span>
{{# }) }}
</div>
</li>
<li>
<span class="price-text">{{ goodsItem.price }}</span>
</li>
<li class="ns-goods-buy-num">
<span>
<span class="decrease" onclick="changeNum({{siteIndex}}, {{goodsIndex}}, 'down', {{goodsItem.cart_id}})">-</span><input type="text" name="buy_num" class="layui-input" data-id="{{goodsItem.cart_id}}" data-min="{{goodsItem.min_num}}" data-max="{{goodsItem.stock}}" data-site="{{siteIndex}}" data-sku="{{goodsIndex}}" value="{{goodsItem.num}}" data-sku_id="{{goodsItem.sku_id}}"/><span class="increase" onclick="changeNum({{siteIndex}}, {{goodsIndex}}, 'up', {{goodsItem.cart_id}})">+</span>
</span>
</li>
<li>
<strong class="subtotal ns-text-color" data-site="{{siteIndex}}" data-sku="{{goodsIndex}}">{{ goodsItem.total_price }}</strong>
</li>
<li>
<a class="layu-btn" onclick="deleteCart({{goodsItem.cart_id}}, {{siteIndex}}, {{goodsIndex}})">删除</a>
</li>
</ul>
{{# }) }}
</div>
{{# }) }}
</div>
<div class="lose-list" v-if="invalidGoods.length">
</div>
<div class="footer">
<input type="checkbox" name="" title="全选" lay-skin="primary" lay-filter="allSelected" checked>
<ul class="operation">
<li>
<a class="" onclick="deleteCartSelected()">删除</a>
</li>
<!-- <li>
<a class="" onclick="clearInvalidGoods()">清除失效宝贝</a>
</li> -->
</ul>
<div class="sum-wrap">
<div class="selected-sum">
<span>已选商品</span>
<em class="total-count"></em>
<span></span>
</div>
<div class="price-wrap">
<span>合计不含运费</span>
<strong class="ns-text-color"></strong>
</div>
<button class="layui-btn ns-bg-color" onclick="settlement()">结算</button>
</div>
</div>
</div>
</script>
{/block}
{block name="script"}
<script>
$(document).ready(function() {
var count = 0;
$.ajax({
url: ns.url("supply://shop/cart/count"),
dataType: 'JSON',
type: 'POST',
success: function(res) {
if (res.code >= 0) {
count = res.data;
if (count > 0) {
$(".ns-cart-wrap").removeClass("layui-hide");
$(".null-cart").addClass("layui-hide");
} else {
$(".ns-cart-wrap").addClass("layui-hide");
$(".null-cart").removeClass("layui-hide");
}
}
}
})
})
var temp_array = {}, invalidGoods = [], siteIndex = "", goodsIndex = "", repeat_flag = false; //防重复标识
layui.use(['form', 'laytpl'], function() {
var form = layui.form,
laytpl = layui.laytpl;
$.ajax({
url: ns.url("supply://shop/cart/lists"),
dataType: 'JSON',
type: 'POST',
success: function(res) {
if(checkLogin(res)) {
handleCartList(res.data);
if (JSON.stringify(temp_array) != "{}") {
laytpl($("#cartList").html()).render(temp_array, function (html) {
$(".ns-cart-list-wrap").html(html);
form.render();
});
}
totalSum();
$(".ns-goods-buy-num input").blur(function () {
var val = $(this).val(),
min_num = Number($(this).attr("data-min")),
max_num = Number($(this).attr("data-max")),
_price,
id = $(this).attr("data-id");
if(!verifyNum(val, min_num, max_num, this)){
return false;
}else{
goodsNum(id, val);
var that = this;
$.each(temp_array, function (index, item) {
if ($(that).attr("data-site") == index) {
$.each(item.goodsList, function (key, value) {
if ($(that).attr("data-sku") == key) {
var sku_id = $(that).attr("data-sku_id");
var price_json_item = price_json_data[sku_id];
var item_price = 0;
$.each(price_json_item, function(price_key, price_value) {
if (val >= price_value.num) {
item_price = price_value.price;
}
})
value.price = item_price;
$(that).parent().parent().parent().find('.price-text').text(item_price);
value.num = val;
value.total_price = (value.num * Number(value.price)).toFixed(2);
_price = value.total_price
}
})
}
})
$(".subtotal").each(function () {
var site_index = $(this).attr("data-site");
var goods_index = $(this).attr("data-sku");
if (site_index == $(that).attr("data-site") && goods_index == $(that).attr("data-sku")) {
$(this).text("¥" + _price);
}
})
totalSum();
}
})
}
}
});
// 监听复选框
form.on('checkbox(allSelected)', function(data) {
siteIndex = ""; goodsIndex = "";
if (data.elem.checked) {
$("input[lay-filter='allSelected']").prop("checked", true);
$("input[lay-filter='siteSelected']").prop("checked", true);
$("input[lay-filter='goodsSelected']").prop("checked", true);
form.render();
} else {
$("input[lay-filter='allSelected']").prop("checked", false);
$("input[lay-filter='siteSelected']").prop("checked", false);
$("input[lay-filter='goodsSelected']").prop("checked", false);
form.render();
}
renderTemp(siteIndex, goodsIndex, data.elem.checked);
totalSum();
});
form.on('checkbox(siteSelected)', function(data) {
siteIndex = $(data.elem).attr("data-site");
goodsIndex = ""
var siteSelectedNum = $(data.elem).parents(".list").find("input[lay-filter='siteSelected']:checked").length; // 被选中的店铺数量
var siteNum = $(data.elem).parents(".list").find(".item").length; // 店铺总数量
if (data.elem.checked) {
if (siteSelectedNum == siteNum) {
$("input[lay-filter='allSelected']").prop("checked", true);
}
$(data.elem).parents(".item").find("input[lay-filter='goodsSelected']").prop("checked", true);
form.render();
} else {
$("input[lay-filter='allSelected']").prop("checked", false);
$(data.elem).parents(".item").find("input[lay-filter='goodsSelected']").prop("checked", false);
form.render();
}
renderTemp(siteIndex, goodsIndex, data.elem.checked);
totalSum();
});
form.on('checkbox(goodsSelected)', function(data) {
var siteIndex = $(data.elem).attr("data-site");
var goodsIndex = $(data.elem).attr("data-sku");
var selectedNum = $(data.elem).parents(".item").find("input[lay-filter='goodsSelected']:checked").length; // 当前店铺被选中的商品数量
var goodsNum = $(data.elem).parents(".item").find("ul").length; // 当前店铺总商品数量
if (data.elem.checked) {
if (selectedNum == goodsNum) {
$(data.elem).parents(".item").find("input[lay-filter='siteSelected']").prop("checked", true);
var siteSelectedNum = $(data.elem).parents(".list").find("input[lay-filter='siteSelected']:checked").length; // 被选中的店铺数量
var siteNum = $(data.elem).parents(".list").find(".item").length; // 店铺总数量
if (siteSelectedNum == siteNum) {
$("input[lay-filter='allSelected']").prop("checked", true);
}
}
form.render();
} else {
$("input[lay-filter='allSelected']").prop("checked", false);
$(data.elem).parents(".item").find("input[lay-filter='siteSelected']").prop("checked", false);
form.render();
}
renderTemp(siteIndex, goodsIndex, data.elem.checked);
});
})
var price_json_data = {};
// 改变数据结构
function handleCartList(data) {
price_json_data = {};
$.each(data, function(index, item) {
if (item.goods_state == 1 && item.verify_state == 1) {
var price_json = JSON.parse(item.price_json);
price_json_data[item.sku_id] = price_json;
var index = 0;
$.each(price_json, function(key, value) {
if (item.num >= value.num) {
index = key
}
})
item.price = price_json[index].price;
item.total_price = (Number(item.price) * Number(item.num)).toFixed(2);
item.checked = true;
if (!temp_array.hasOwnProperty(item.site_id)) {
temp_array[item.site_id] = {
site_id: item.site_id,
site_name: item.site_name,
is_own: item.is_own,
goodsList: []
}
}
temp_array[item.site_id].goodsList.push(item);
} else {
invalidGoods.push(item);
}
});
}
// 总数量和总价格
function totalSum() {
var total_num = 0, total_price = 0;
$.each(temp_array, function(index, item) {
$.each(item.goodsList, function(goodsIndex, goodsItem) {
if (goodsItem.checked) {
total_price += Number(goodsItem.total_price);
total_num++;
}
})
})
$(".sum-wrap .total-count").text(total_num);
$(".sum-wrap .price-wrap strong").text("¥" + total_price.toFixed(2));
if (total_num == 0) {
$(".sum-wrap>.layui-btn").addClass("layui-btn-disabled");
$(".sum-wrap>.layui-btn").removeClass("ns-bg-color");
} else {
$(".sum-wrap>.layui-btn").removeClass("layui-btn-disabled");
$(".sum-wrap>.layui-btn").addClass("ns-bg-color");
}
}
// 重新整理数据
function renderTemp(siteIndex, goodsIndex, flag) {
$.each(temp_array, function(index, item) {
if (siteIndex && goodsIndex) {
if (index == siteIndex) {
$.each(item.goodsList, function(key, value) {
if (key == goodsIndex) {
value.checked = flag;
}
})
}
} else if (siteIndex && !goodsIndex) {
if (index == siteIndex) {
$.each(item.goodsList, function(key, value) {
value.checked = flag;
})
}
} else {
$.each(item.goodsList, function(key, value) {
value.checked = flag;
})
}
})
totalSum();
}
// 商品详情
function goodsDetail(id) {
location.href = ns.url("supply://shop/goods/detail", {
sku_id: id
});
}
// 删除商品
function deleteCart(id, siteIndex, goodsIndex) {
layer.confirm('是否将该商品从供货单中删除?', function(index){
if (repeat_flag) return;
repeat_flag = true;
delCartGoods(id);
repeat_flag = false;
$(".item ul").each(function() {
var site_index = $(this).attr("data-site"), goods_index = $(this).attr("data-sku");
if (site_index == siteIndex && goods_index == goodsIndex) {
$(this).remove();
}
})
$(".item").each(function() {
if ($(this).find("ul").length == 0) {
$(this).remove();
}
})
delTemp(siteIndex, goodsIndex, "", "");
}, function() {
repeat_flag = false;
layer.close();
});
}
// 删除多个
function deleteCartSelected() {
var id_arr = [], input_arr = [];
$("input[lay-filter='goodsSelected']:checked").each(function(index, item) {
id_arr.push($(item).attr("data-cart_id"));
input_arr.push($(item));
})
layer.confirm('是否将商品从供货单中删除?', function(index){
if (repeat_flag) return;
repeat_flag = true;
delCartGoods(id_arr.toString());
repeat_flag = false;
$.each(input_arr, function(index, item) {
var siteIndex = $(item).attr("data-site"), goodsIndex = $(item).attr("data-sku"), siteId = $(item).attr("data-site_id"), cartId = $(item).attr("data-cart_id");
$(".item ul").each(function(key, value) {
var site_index = $(value).attr("data-site"), goods_index = $(value).attr("data-sku");
if (site_index == siteIndex && goods_index == goodsIndex) {
$(value).remove();
}
})
$(".item").each(function() {
if ($(this).find("ul").length == 0) {
$(this).remove();
}
})
delTemp(siteIndex, goodsIndex, siteId, cartId);
})
}, function() {
repeat_flag = false;
layer.close();
});
}
// 删除购物车商品
function delCartGoods(id) {
$.ajax({
url: ns.url("supply://shop/cart/delete"),
data: {"cart_id": id},
dataType: 'JSON',
type: 'POST',
async: false,
success: function(res) {
if(checkLogin(res)) {
layer.msg(res.message);
$.ajax({
url: ns.url("supply://shop/cart/count"),
dataType: 'JSON',
type: 'POST',
success: function (res) {
if (res.code >= 0) {
var count = res.data;
if (count == 0) {
$(".ns-cart-wrap").addClass("layui-hide");
$(".null-cart").removeClass("layui-hide");
location.href = ns.url("supply://shop/cart/cart", {"count": 0});
}
}
}
})
}
}
})
}
// 删除数据
function delTemp(siteIndex, goodsIndex, siteId, cartId) {
if (!siteId && !cartId) {
var arr = temp_array[siteIndex].goodsList.splice(goodsIndex, 1);
if (temp_array[siteIndex].goodsList.length == 0) {
delete temp_array[siteIndex];
}
} else {
var temp_site = "", temp_cart = "";
$.each(temp_array, function(site, site_v) {
$.each(site_v.goodsList, function(cart, cart_v) {
if (cartId == cart_v.cart_id) {
temp_site = site_v;
temp_cart = cart;
}
if (site_v.goodsList.length == 0) {
temp_array.splice(site, 1)
}
})
})
temp_site.goodsList.splice(temp_cart, 1)
}
totalSum();
}
// 购买数量验证
function verifyNum(val, min_num, max_num, el) {
if (val % 1 != 0 || val < 0) {
layer.msg("购买数量必须为大于0的整数");
return false;
}
if (val < min_num) {
layer.msg("请至少购买"+ min_num +"件商品");
$(el).val(min_num);
$(el).blur();
return false;
}
if (val > max_num) {
layer.msg("库存不足");
$(el).val(max_num);
return false;
}
return true;
}
function changeNum(siteIndex, goodsIndex, str, id) {
var el, val, min_num, max_num, site_index, goods_index, _price;
$("input[name='buy_num']").each(function(index, item) {
site_index = $(item).attr("data-site");
goods_index = $(item).attr("data-sku");
if (site_index == siteIndex && goods_index == goodsIndex) {
el = item;
val = Number($(item).val());
min_num = Number($(item).attr("data-min"));
max_num = Number($(item).attr("data-max"));
}
});
if (str == 'up') {
val++;
} else {
val--;
}
$(el).val(val);
if(!verifyNum(val, min_num, max_num, el)){
return false;
}else{
goodsNum(id, val);
$.each(temp_array, function(index, item) {
if (siteIndex == index) {
$.each(item.goodsList, function(key, value) {
if (goodsIndex == key) {
var sku_id = $(el).attr("data-sku_id");
var price_json_item = price_json_data[sku_id];
var item_price = 0;
$.each(price_json_item, function(price_key, price_value) {
if (val >= price_value.num) {
item_price = price_value.price;
}
})
value.price = item_price;
$(el).parent().parent().parent().find('.price-text').text(item_price);
value.num = val;
value.total_price = (value.num * Number(value.price)).toFixed(2);
_price = value.total_price
}
})
}
})
$(".subtotal").each(function() {
var site_index = $(this).attr("data-site");
var goods_index = $(this).attr("data-sku");
if (site_index == siteIndex && goods_index == goodsIndex) {
$(this).text("¥" + _price);
}
})
totalSum();
}
}
// 改变购买数量
function goodsNum(id, val) {
if (repeat_flag) return;
repeat_flag = true;
$.ajax({
url: ns.url("supply://shop/cart/edit"),
data: {"cart_id": id, "num": val},
dataType: 'JSON',
type: 'POST',
success: function(res) {
repeat_flag = false;
if(checkLogin(res)) {
if (res.code < 0) {
layer.msg(res.message);
}
}
}
})
}
// 结算
function settlement() {
var cart_id_arr = [], num = 0, sku_id = "";
$.each(temp_array, function(siteIndex, siteItem) {
$.each(siteItem.goodsList, function(goodsIndex, goodsItem) {
if (goodsItem.checked) {
cart_id_arr.push(goodsItem.cart_id);
}
})
})
location.href = ns.url("supply://shop/ordercreate/payment", {"cart_ids": cart_id_arr.toString()})
}
</script>
{/block}