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

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//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"
})
}
})