325 lines
6.8 KiB
JavaScript
325 lines
6.8 KiB
JavaScript
const App = getApp();
|
|
|
|
// 工具类
|
|
import Util from '../../utils/util.js';
|
|
|
|
Page({
|
|
|
|
/**
|
|
* 页面的初始数据
|
|
*/
|
|
data: {
|
|
|
|
isLogin: false,
|
|
|
|
// 商品列表
|
|
goods_list: [],
|
|
|
|
// 当前动作
|
|
action: 'complete',
|
|
|
|
// 选择的商品
|
|
checkedData: [],
|
|
|
|
// 是否全选
|
|
checkedAll: false,
|
|
|
|
// 商品总价格
|
|
cartTotalPrice: '0.00'
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面加载
|
|
*/
|
|
onLoad(options) {
|
|
|
|
},
|
|
|
|
/**
|
|
* 生命周期函数--监听页面显示
|
|
*/
|
|
onShow() {
|
|
let _this = this;
|
|
_this.setData({
|
|
isLogin: App.checkIsLogin()
|
|
});
|
|
if (_this.data.isLogin) {
|
|
// 获取购物车列表
|
|
_this.getCartList();
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 获取购物车列表
|
|
*/
|
|
getCartList() {
|
|
let _this = this;
|
|
App._get('cart/lists', {}, result => {
|
|
const data = result.data
|
|
// 更新购物车数量及角标
|
|
App.setCartTotalNum(data.order_total_num)
|
|
App.setCartTabBadge()
|
|
// 初始化商品选中状态
|
|
_this._initGoodsChecked(data)
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 初始化商品选中状态
|
|
*/
|
|
_initGoodsChecked(data) {
|
|
let _this = this;
|
|
let checkedData = _this.getCheckedData();
|
|
// 将商品设置选中
|
|
data.goods_list.forEach(item => {
|
|
item.checked = Util.inArray(`${item.goods_id}_${item.goods_sku_id}`, checkedData);
|
|
});
|
|
_this.setData({
|
|
goods_list: data.goods_list,
|
|
order_total_price: data.order_total_price,
|
|
action: 'complete',
|
|
checkedAll: checkedData.length == data.goods_list.length,
|
|
});
|
|
// 更新购物车已选商品总价格
|
|
_this.updateTotalPrice();
|
|
},
|
|
|
|
/**
|
|
* 选择框选中
|
|
*/
|
|
onChecked(e) {
|
|
let _this = this,
|
|
index = e.currentTarget.dataset.index,
|
|
goods = _this.data.goods_list[index],
|
|
checked = !goods.checked;
|
|
// 选中状态
|
|
_this.setData({
|
|
['goods_list[' + index + '].checked']: checked
|
|
});
|
|
// 更新选中记录
|
|
_this.onUpdateChecked();
|
|
// 更新购物车已选商品总价格
|
|
_this.updateTotalPrice();
|
|
// 更新全选状态
|
|
_this.setData({
|
|
checkedAll: _this.getCheckedData().length == _this.data.goods_list.length
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 获取选中的商品
|
|
*/
|
|
getCheckedData() {
|
|
let checkedData = wx.getStorageSync('checkedData');
|
|
return checkedData ? checkedData : [];
|
|
},
|
|
|
|
/**
|
|
* 选择框全选
|
|
*/
|
|
onCheckedAll(e) {
|
|
let _this = this,
|
|
goodsList = _this.data.goods_list;
|
|
// 更新商品选中记录
|
|
goodsList.forEach(item => {
|
|
item.checked = !_this.data.checkedAll;
|
|
});
|
|
_this.setData({
|
|
goods_list: goodsList,
|
|
checkedAll: !_this.data.checkedAll
|
|
});
|
|
// 更新购物车已选商品总价格
|
|
_this.updateTotalPrice();
|
|
// 更新选中记录
|
|
_this.onUpdateChecked();
|
|
},
|
|
|
|
/**
|
|
* 更新商品选中记录
|
|
*/
|
|
onUpdateChecked() {
|
|
let _this = this,
|
|
checkedData = [];
|
|
_this.data.goods_list.forEach(item => {
|
|
if (item.checked == true) {
|
|
checkedData.push(`${item.goods_id}_${item.goods_sku_id}`);
|
|
}
|
|
});
|
|
wx.setStorageSync('checkedData', checkedData);
|
|
},
|
|
|
|
/**
|
|
* 切换编辑/完成
|
|
*/
|
|
switchAction(e) {
|
|
let _this = this;
|
|
_this.setData({
|
|
action: e.currentTarget.dataset.action
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 删除商品
|
|
*/
|
|
onDelete() {
|
|
let _this = this,
|
|
cartIds = _this.getCheckedIds();
|
|
if (!cartIds.length) {
|
|
App.showError('您还没有选择商品');
|
|
return false;
|
|
}
|
|
console.log(cartIds);
|
|
wx.showModal({
|
|
title: "提示",
|
|
content: "您确定要移除选择的商品吗?",
|
|
success(e) {
|
|
e.confirm && App._post_form('cart/delete', {
|
|
goods_sku_id: cartIds
|
|
}, result => {
|
|
// 删除选中的商品
|
|
_this.onDeleteEvent(cartIds);
|
|
// 获取购物车列表
|
|
_this.getCartList();
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 商品删除事件
|
|
*/
|
|
onDeleteEvent(cartIds) {
|
|
let _this = this;
|
|
cartIds.forEach((cartIndex) => {
|
|
_this.data.goods_list.forEach((item, goodsIndex) => {
|
|
if (cartIndex == `${item.goods_id}_${item.goods_sku_id}`) {
|
|
_this.data.goods_list.splice(goodsIndex, 1);
|
|
}
|
|
});
|
|
});
|
|
// 更新选中记录
|
|
_this.onUpdateChecked();
|
|
return true;
|
|
},
|
|
|
|
/**
|
|
* 获取已选中的商品
|
|
*/
|
|
getCheckedIds() {
|
|
let _this = this;
|
|
let arrIds = [];
|
|
_this.data.goods_list.forEach(item => {
|
|
if (item.checked === true) {
|
|
arrIds.push(`${item.goods_id}_${item.goods_sku_id}`);
|
|
}
|
|
});
|
|
return arrIds;
|
|
},
|
|
|
|
/**
|
|
* 更新购物车已选商品总价格
|
|
*/
|
|
updateTotalPrice() {
|
|
let _this = this;
|
|
let cartTotalPrice = 0;
|
|
_this.data.goods_list.forEach(item => {
|
|
if (item.checked === true) {
|
|
cartTotalPrice = _this.mathadd(cartTotalPrice, item.total_price);
|
|
}
|
|
});
|
|
_this.setData({
|
|
cartTotalPrice: Number(cartTotalPrice).toFixed(2)
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 递增指定的商品数量
|
|
*/
|
|
onAddCount(e) {
|
|
let _this = this,
|
|
index = e.currentTarget.dataset.index,
|
|
goodsSkuId = e.currentTarget.dataset.skuId,
|
|
goods = _this.data.goods_list[index];
|
|
// order_total_price = _this.data.order_total_price;
|
|
// 后端同步更新
|
|
wx.showLoading({
|
|
title: '加载中',
|
|
mask: true
|
|
});
|
|
App._post_form('cart/add', {
|
|
goods_id: goods.goods_id,
|
|
goods_num: 1,
|
|
goods_sku_id: goodsSkuId
|
|
}, () => {
|
|
// 获取购物车列表
|
|
_this.getCartList();
|
|
}, null, () => {
|
|
wx.hideLoading();
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 递减指定的商品数量
|
|
*/
|
|
onSubCount(e) {
|
|
let _this = this,
|
|
index = e.currentTarget.dataset.index,
|
|
goodsSkuId = e.currentTarget.dataset.skuId,
|
|
goods = _this.data.goods_list[index];
|
|
if (goods.total_num > 1) {
|
|
// 后端同步更新
|
|
wx.showLoading({
|
|
title: '加载中',
|
|
mask: true
|
|
})
|
|
App._post_form('cart/sub', {
|
|
goods_id: goods.goods_id,
|
|
goods_sku_id: goodsSkuId
|
|
}, () => {
|
|
// 获取购物车列表
|
|
_this.getCartList();
|
|
}, null, () => {
|
|
wx.hideLoading();
|
|
});
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 购物车结算
|
|
*/
|
|
submit() {
|
|
let _this = this,
|
|
cartIds = _this.getCheckedIds();
|
|
if (!cartIds.length) {
|
|
App.showError('您还没有选择商品');
|
|
return false;
|
|
}
|
|
wx.navigateTo({
|
|
url: '../flow/checkout?order_type=cart&cart_ids=' + cartIds
|
|
});
|
|
},
|
|
|
|
/**
|
|
* 加法
|
|
*/
|
|
mathadd(arg1, arg2) {
|
|
return (Number(arg1) + Number(arg2)).toFixed(2);
|
|
},
|
|
|
|
/**
|
|
* 减法
|
|
*/
|
|
mathsub(arg1, arg2) {
|
|
return (Number(arg1) - Number(arg2)).toFixed(2);
|
|
},
|
|
|
|
/**
|
|
* 去购物
|
|
*/
|
|
goShopping() {
|
|
wx.switchTab({
|
|
url: '../index/index',
|
|
});
|
|
},
|
|
|
|
}) |