You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hunjianghu/杨盼成/pages/shop-cart/index.js

382 lines
12 KiB

6 years ago
//index.js
const api = require('../../utils/request.js')
var app = getApp()
Page({
data: {
goodsList: {
saveHidden: true,
totalPrice: 0,
totalScoreToPay: 0,
allSelect: true,
noSelect: false,
list: []
},
delBtnWidth: 120, //删除按钮宽度单位rpx
},
//获取元素自适应后的实际宽度
getEleWidth: function(w) {
var real = 0;
try {
var res = wx.getSystemInfoSync().windowWidth;
var scale = (750 / 2) / (w / 2); //以宽度750px设计稿做宽度的自适应
// console.log(scale);
real = Math.floor(res / scale);
return real;
} catch (e) {
return false;
// Do something when catch error
}
},
initEleWidth: function() {
var delBtnWidth = this.getEleWidth(this.data.delBtnWidth);
this.setData({
delBtnWidth: delBtnWidth
});
},
onLoad: function() {
this.initEleWidth();
this.onShow();
},
onShow: function() {
var shopList = [];
// 获取购物车数据
var shopCarInfoMem = wx.getStorageSync('shopCarInfo');
if (shopCarInfoMem && shopCarInfoMem.shopList) {
shopList = shopCarInfoMem.shopList
}
this.data.goodsList.list = shopList;
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), shopList);
},
toIndexPage: function() {
wx.switchTab({
url: "/pages/index/index"
});
},
touchS: function(e) {
if (e.touches.length == 1) {
this.setData({
startX: e.touches[0].clientX
});
}
},
touchM: function(e) {
var index = e.currentTarget.dataset.index;
if (e.touches.length == 1) {
var moveX = e.touches[0].clientX;
var disX = this.data.startX - moveX;
var delBtnWidth = this.data.delBtnWidth;
var left = "";
if (disX == 0 || disX < 0) { //如果移动距离小于等于0container位置不变
left = "margin-left:0px";
} else if (disX > 0) { //移动距离大于0container left值等于手指移动距离
left = "margin-left:-" + disX + "px";
if (disX >= delBtnWidth) {
left = "left:-" + delBtnWidth + "px";
}
}
var list = this.data.goodsList.list;
if (index != "" && index != null) {
list[parseInt(index)].left = left;
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
}
}
},
touchE: function(e) {
var index = e.currentTarget.dataset.index;
if (e.changedTouches.length == 1) {
var endX = e.changedTouches[0].clientX;
var disX = this.data.startX - endX;
var delBtnWidth = this.data.delBtnWidth;
//如果距离小于删除按钮的1/2不显示删除按钮
var left = disX > delBtnWidth / 2 ? "margin-left:-" + delBtnWidth + "px" : "margin-left:0px";
var list = this.data.goodsList.list;
if (index !== "" && index != null) {
list[parseInt(index)].left = left;
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
}
}
},
delItem: function(e) {
var index = e.currentTarget.dataset.index;
var list = this.data.goodsList.list;
list.splice(index, 1);
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
},
selectTap: function(e) {
var index = e.currentTarget.dataset.index;
var list = this.data.goodsList.list;
if (index !== "" && index != null) {
list[parseInt(index)].active = !list[parseInt(index)].active;
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
}
},
totalPrice: function() {
var list = this.data.goodsList.list;
var total = 0;
let totalScoreToPay = 0;
for (var i = 0; i < list.length; i++) {
var curItem = list[i];
if (curItem.active) {
total += parseFloat(curItem.price) * curItem.number;
totalScoreToPay += curItem.score * curItem.number;
}
}
this.data.goodsList.totalScoreToPay = totalScoreToPay;
total = parseFloat(total.toFixed(2)); //js浮点计算bug取两位小数精度
return total;
},
allSelect: function() {
var list = this.data.goodsList.list;
var allSelect = false;
for (var i = 0; i < list.length; i++) {
var curItem = list[i];
if (curItem.active) {
allSelect = true;
} else {
allSelect = false;
break;
}
}
return allSelect;
},
noSelect: function() {
var list = this.data.goodsList.list;
var noSelect = 0;
for (var i = 0; i < list.length; i++) {
var curItem = list[i];
if (!curItem.active) {
noSelect++;
}
}
if (noSelect == list.length) {
return true;
} else {
return false;
}
},
setGoodsList: function(saveHidden, total, allSelect, noSelect, list) {
this.setData({
goodsList: {
saveHidden: saveHidden,
totalPrice: total,
allSelect: allSelect,
noSelect: noSelect,
list: list,
totalScoreToPay: this.data.goodsList.totalScoreToPay
}
});
var shopCarInfo = {};
var tempNumber = 0;
shopCarInfo.shopList = list;
for (var i = 0; i < list.length; i++) {
tempNumber = tempNumber + list[i].number
}
shopCarInfo.shopNum = tempNumber;
wx.setStorage({
key: "shopCarInfo",
data: shopCarInfo
})
},
bindAllSelect: function() {
var currentAllSelect = this.data.goodsList.allSelect;
var list = this.data.goodsList.list;
if (currentAllSelect) {
for (var i = 0; i < list.length; i++) {
var curItem = list[i];
curItem.active = false;
}
} else {
for (var i = 0; i < list.length; i++) {
var curItem = list[i];
curItem.active = true;
}
}
this.setGoodsList(this.getSaveHide(), this.totalPrice(), !currentAllSelect, this.noSelect(), list);
},
jiaBtnTap: function(e) {
var that = this
var index = e.currentTarget.dataset.index;
var list = that.data.goodsList.list;
if (index !== "" && index != null) {
// 添加判断当前商品购买数量是否超过当前商品可购买库存
var carShopBean = list[parseInt(index)];
var carShopBeanStores = 0;
api.fetchRequest('/shop/goods/detail', {
id: carShopBean.goodsId
}).then(function(res) {
carShopBeanStores = res.data.data.basicInfo.stores;
if (list[parseInt(index)].number < carShopBeanStores) {
list[parseInt(index)].number++;
that.setGoodsList(that.getSaveHide(), that.totalPrice(), that.allSelect(), that.noSelect(), list);
}
that.setData({
curTouchGoodStore: carShopBeanStores
})
})
}
},
jianBtnTap: function(e) {
var index = e.currentTarget.dataset.index;
var list = this.data.goodsList.list;
if (index !== "" && index != null) {
if (list[parseInt(index)].number > 1) {
list[parseInt(index)].number--;
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
}
}
},
editTap: function() {
var list = this.data.goodsList.list;
for (var i = 0; i < list.length; i++) {
var curItem = list[i];
curItem.active = false;
}
this.setGoodsList(!this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
},
saveTap: function() {
var list = this.data.goodsList.list;
for (var i = 0; i < list.length; i++) {
var curItem = list[i];
curItem.active = true;
}
this.setGoodsList(!this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
},
getSaveHide: function() {
var saveHidden = this.data.goodsList.saveHidden;
return saveHidden;
},
deleteSelected: function() {
var list = this.data.goodsList.list;
/*
for(let i = 0 ; i < list.length ; i++){
let curItem = list[i];
if(curItem.active){
list.splice(i,1);
}
}
*/
// above codes that remove elements in a for statement may change the length of list dynamically
list = list.filter(function(curGoods) {
return !curGoods.active;
});
this.setGoodsList(this.getSaveHide(), this.totalPrice(), this.allSelect(), this.noSelect(), list);
},
toPayOrder: function() {
wx.showLoading();
var that = this;
if (this.data.goodsList.noSelect) {
wx.hideLoading();
return;
}
// 重新计算价格,判断库存
var shopList = [];
var shopCarInfoMem = wx.getStorageSync('shopCarInfo');
if (shopCarInfoMem && shopCarInfoMem.shopList) {
// shopList = shopCarInfoMem.shopList
shopList = shopCarInfoMem.shopList.filter(entity => {
return entity.active;
});
}
if (shopList.length == 0) {
wx.hideLoading();
return;
}
var isFail = false;
var doneNumber = 0;
var needDoneNUmber = shopList.length;
for (let i = 0; i < shopList.length; i++) {
if (isFail) {
wx.hideLoading();
return;
}
let carShopBean = shopList[i];
// 获取价格和库存
if (!carShopBean.propertyChildIds || carShopBean.propertyChildIds == "") {
api.fetchRequest('/shop/goods/detail', {
id: carShopBean.goodsId
}).then(function(res) {
doneNumber++;
if (res.data.data.properties) {
wx.showModal({
title: '提示',
content: res.data.data.basicInfo.name + ' 商品已失效,请重新购买',
showCancel: false
})
isFail = true;
wx.hideLoading();
return;
}
if (res.data.data.basicInfo.stores < carShopBean.number) {
wx.showModal({
title: '提示',
content: res.data.data.basicInfo.name + ' 库存不足,请重新购买',
showCancel: false
})
isFail = true;
wx.hideLoading();
return;
}
if (res.data.data.basicInfo.minPrice != carShopBean.price) {
wx.showModal({
title: '提示',
content: res.data.data.basicInfo.name + ' 价格有调整,请重新购买',
showCancel: false
})
isFail = true;
wx.hideLoading();
return;
}
if (needDoneNUmber == doneNumber) {
that.navigateToPayOrder();
}
})
} else {
api.fetchRequest('/shop/goods/price', {
goodsId: carShopBean.goodsId,
propertyChildIds: carShopBean.propertyChildIds
}).then(function(res) {
doneNumber++;
if (res.data.data.stores < carShopBean.number) {
wx.showModal({
title: '提示',
content: carShopBean.name + ' 库存不足,请重新购买',
showCancel: false
})
isFail = true;
wx.hideLoading();
return;
}
if (res.data.data.price != carShopBean.price) {
wx.showModal({
title: '提示',
content: carShopBean.name + ' 价格有调整,请重新购买',
showCancel: false
})
isFail = true;
wx.hideLoading();
return;
}
if (needDoneNUmber == doneNumber) {
that.navigateToPayOrder();
}
})
}
}
},
navigateToPayOrder: function() {
wx.hideLoading();
wx.navigateTo({
url: "/pages/to-pay-order/index"
})
}
})