|
|
|
|
//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) { //如果移动距离小于等于0,container位置不变
|
|
|
|
|
left = "margin-left:0px";
|
|
|
|
|
} else if (disX > 0) { //移动距离大于0,container 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"
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
})
|