613 lines
15 KiB
JavaScript
613 lines
15 KiB
JavaScript
// packageE/orderullPackage/orderullPackage.js
|
||
var app = getApp();
|
||
Page({
|
||
|
||
/**
|
||
* 页面的初始数据
|
||
*/
|
||
data: {
|
||
cartsNum: 0, //购物车数量
|
||
cartList: [],
|
||
categoryList: [], //顶部分类导航
|
||
activeCat: null,
|
||
goodList: [],
|
||
sortOption: [{
|
||
value: "id",
|
||
name: "综合排序"
|
||
},
|
||
{
|
||
value: "price",
|
||
name: "价格最低"
|
||
},
|
||
{
|
||
value: "discount",
|
||
name: "优惠力度"
|
||
}
|
||
],
|
||
activeSort: "id",
|
||
activity_gid: 0,
|
||
activity_index: 0,
|
||
showgp: false,
|
||
popupSpecs: false,
|
||
goodinfo: {},
|
||
freight: null,
|
||
page: 1, //分页数,当前页数
|
||
isLoadMore: true, //判断是否要加载更多的标志
|
||
total_page: 0, //总页数
|
||
|
||
orderCart: [], //记录下单页传递的购物车id
|
||
showCarList: false,
|
||
// 购物车配送方式冲突
|
||
dispatch_types: [],
|
||
showChoose: false,
|
||
radioChoose: ""
|
||
},
|
||
options: {
|
||
multipleSlots: true // 在组件定义时的选项中启用多slot支持
|
||
},
|
||
/**
|
||
* 生命周期函数--监听页面加载
|
||
*/
|
||
onLoad: function (options) {
|
||
if (options.cart_id) {
|
||
let cartStr = JSON.parse(options.cart_id); //注意!! [].split(',')会返回[""],此时再.map[Number]会返回[0],要处理
|
||
if (cartStr[0] === "") {
|
||
cartStr = [];
|
||
}
|
||
this.data.orderCart = cartStr.map(Number);
|
||
}
|
||
this.getCategory();
|
||
},
|
||
|
||
|
||
getCategory() {
|
||
//获取分类列表
|
||
let urlStr = app.getNetAddresss("goods.postage-included-category.index");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result == 1) {
|
||
this.setData({
|
||
categoryList: res.data
|
||
});
|
||
if (res.data && res.data.length > 0) {
|
||
this.setData({
|
||
activeCat: res.data[0].id
|
||
});
|
||
this.changeSort();
|
||
}
|
||
} else {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
changeCategory(e) {
|
||
let _id = e.currentTarget.dataset.id;
|
||
this.setData({
|
||
activeCat: _id //记录当前选择的分类
|
||
});
|
||
this.changeSort();
|
||
},
|
||
changeSort(e) {
|
||
let _sort = null;
|
||
if (e && e.currentTarget.dataset && e.currentTarget.dataset.value) {
|
||
_sort = e.currentTarget.dataset.value;
|
||
this.setData({
|
||
activeSort: _sort //记录当前选择的排序方式
|
||
});
|
||
}
|
||
this.setData({
|
||
goodList: []
|
||
});
|
||
let _json = {
|
||
category_id: this.data.activeCat,
|
||
sort: _sort || "id"
|
||
};
|
||
let urlStr = app.getNetAddresss("goods.postage-included-category.goods");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: _json,
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result == 1) {
|
||
this.setData({
|
||
goodList: res.data.data, //商品列表
|
||
isLoadMore: true,
|
||
total_page: res.data.last_page,
|
||
page: 1
|
||
});
|
||
this.getCartList();
|
||
} else {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
getCartList() {
|
||
//获取购物车列表,该列表继承商城购物车,只返回通过接口postageIncludedCategory.member-cart.store添加的购物车数据
|
||
let urlStr = app.getNetAddresss("postageIncludedCategory.member-cart.index");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result == 1) {
|
||
this.setData({
|
||
cartList: res.data
|
||
});
|
||
this.setGoodTotal();
|
||
this.getFreight();
|
||
} else {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
setGoodTotal() {
|
||
this.data.cartsNum = 0;
|
||
// 计算设置当前商品列表中是否有已加入购物车的数据,有则显示购物车数量
|
||
for (let index = 0; index < this.data.cartList.length; index++) {
|
||
this.data.cartsNum += this.data.cartList[index].total;
|
||
for (let j = 0; j < this.data.goodList.length; j++) {
|
||
if (index == 0 && this.data.goodList[j].total) {
|
||
this.data.goodList[j].total = 0; //初始化置0
|
||
}
|
||
if (this.data.cartList[index].goods_id == this.data.goodList[j].id) {
|
||
let _total = 0;
|
||
if (this.data.cartList[index].option_id == 0) {
|
||
// 无规格
|
||
_total = this.data.cartList[index].total; //设置商品的购物车数量
|
||
} else {
|
||
// 有规格
|
||
_total = this.data.goodList[j].total || 0;
|
||
_total += this.data.cartList[index].total;
|
||
}
|
||
this.data.goodList[j].total = _total; //设置商品的购物车数量
|
||
this.data.goodList[j].card_id = this.data.cartList[index].id; //设置商品的购物车id
|
||
}
|
||
}
|
||
}
|
||
this.setData({
|
||
cartsNum: this.data.cartsNum,
|
||
goodList: this.data.goodList
|
||
});
|
||
},
|
||
getFreight() {
|
||
// 计算运费,
|
||
let _cart_ids = [];
|
||
this.data.cartList.forEach(item => {
|
||
_cart_ids.push(item.id);
|
||
});
|
||
|
||
let _cartArrConcat = _cart_ids.concat(this.data.orderCart);
|
||
let _cartArr = new Set(_cartArrConcat);
|
||
_cartArr = [..._cartArr];
|
||
|
||
let urlStr = app.getNetAddresss("postageIncludedCategory.cart-list.index");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
cart_ids: _cartArr.join(",")
|
||
},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result == 1) {
|
||
// postage_included_msg为空时,说明符合包邮条件了
|
||
this.setData({
|
||
freight: res.data.postage_included_msg && res.data.postage_included_msg != "" ? Number(res.data.postage_included_msg) : 0
|
||
});
|
||
} else {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
_getMoreData() {
|
||
let that = this;
|
||
let urlStr = app.getNetAddresss("goods.postage-included-category.goods");
|
||
that.data.isLoadMore = false; // 防止多次请求分页数据
|
||
if (this.data.page >= this.data.total_page) {
|
||
return;
|
||
} else {
|
||
this.data.page = this.data.page + 1;
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
showToastIn: false,
|
||
data: {
|
||
page: this.data.page,
|
||
category_id: this.data.activeCat,
|
||
sort: this.data.activeSort
|
||
},
|
||
success: function (resdata) {
|
||
let res = resdata.data;
|
||
if (res.result == 1) {
|
||
that.setData({
|
||
isLoadMore: true,
|
||
goodList: that.data.goodList.concat(res.data.data)
|
||
});
|
||
} else {
|
||
that.setData({
|
||
page: that.data.page - 1,
|
||
isLoadMore: false
|
||
});
|
||
return;
|
||
}
|
||
},
|
||
fail: function (res) {
|
||
console.log(res.msg);
|
||
}
|
||
});
|
||
}
|
||
},
|
||
addCart(e) {
|
||
console.log(e.detail);
|
||
let _data = e.detail;
|
||
this.setData({
|
||
activity_index: _data.index
|
||
});
|
||
if (_data.isSpecs) {
|
||
this.showGoodDetail(_data, true); //规格商品,显示规格弹窗
|
||
return;
|
||
}
|
||
this.addMemberCart({
|
||
id: _data.id,
|
||
total: "1",
|
||
index: _data.index
|
||
});
|
||
},
|
||
addMemberCart(_data) {
|
||
//添加到购物车,当前的加入购物车数据会影响到商城购物车的数据;如果商城购物车有,则修改数量;没有则加入购物车
|
||
// 但当前页面只显示在当前操作的商品的购物车数据,
|
||
if (!_data.id) return;
|
||
let _json = {
|
||
goods_id: _data.id,
|
||
total: _data.total || 1,
|
||
option_id: _data.option_id || 0
|
||
};
|
||
|
||
let urlStr = app.getNetAddresss("postageIncludedCategory.member-cart.store");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: _json,
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
if (res.result == 1) {
|
||
this.setData({
|
||
popupSpecs: false,
|
||
showgp: false,
|
||
['goodList[' + _data.index + '].total']: _data.total
|
||
});
|
||
}
|
||
this.getCartList();
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
showGoodDetail(e, _spec) {
|
||
let _data = e.detail ? e.detail : e;
|
||
if (this.data.activity_gid == _data.id) {
|
||
let _showPopup = !_spec ? 'showgp' : 'popupSpecs';
|
||
this.setData({
|
||
[_showPopup]: true
|
||
});
|
||
return;
|
||
}
|
||
this.setData({
|
||
activity_gid: _data.id
|
||
});
|
||
let urlStr = app.getNetAddresss("goods.goods.get-goods-page");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
id: Number(_data.id)
|
||
},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result == 1) {
|
||
let name = !_spec ? "showgp" : 'popupSpecs';
|
||
this.setData({
|
||
[name]: true,
|
||
goodinfo: res.data.get_goods,
|
||
});
|
||
} else {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
close_yz_specs_popup(e) {
|
||
this.setData({
|
||
popupSpecs: false,
|
||
});
|
||
if (e.detail.clicktype == 1) {
|
||
//点击确认按钮
|
||
if (e.detail.cartid) {
|
||
// 有购物车记录
|
||
this.updateCart(e.detail.cartid, e.detail.goodsCount);
|
||
} else {
|
||
// 新加入购物车
|
||
this.addMemberCart({ id: this.data.activity_gid, total: e.detail.goodsCount, option_id: e.detail.optionsId||0, index: this.data.activity_index });
|
||
}
|
||
}
|
||
},
|
||
openCartListPopup() {
|
||
this.setData({
|
||
showCarList: true
|
||
});
|
||
},
|
||
close_yz_cartList_popup() {
|
||
this.setData({
|
||
showCarList: false
|
||
});
|
||
},
|
||
changeCart(_data) {
|
||
// 更新购物车数量
|
||
let e = _data.detail ? _data.detail : _data;
|
||
if (!e.cartId) {
|
||
return;
|
||
}
|
||
if (Number(e.num) == 0) {
|
||
//删除购物车
|
||
this.destroyCart(e.cartId);
|
||
return;
|
||
}
|
||
|
||
let urlStr = app.getNetAddresss("cart.list.updateNumV2");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
id: e.cartId,
|
||
num: e.num
|
||
},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
if (res.result == 1) {
|
||
this.setData({
|
||
popupSpecs: false,
|
||
showgp: false
|
||
});
|
||
if (e.index) {
|
||
this.setData({
|
||
['goodList[' + e.index + '].total']: e.num
|
||
});
|
||
}
|
||
this.getCartList();
|
||
}
|
||
|
||
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
|
||
},
|
||
destroyCart(_id) {
|
||
let urlStr = app.getNetAddresss("cart.list.destroy");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
ids: _id
|
||
},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
this.getCartList();
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
// 购物车列表组件里的步进器 ============ start ==================
|
||
changeCarList(e) {
|
||
let _total = e.detail.name == "plus" ? e.detail.total + 1 : e.detail.name == "minus" ? e.detail.total - 1 : e.detail.total;
|
||
this.changeCart({
|
||
cartId: e.detail.id,
|
||
num: _total
|
||
});
|
||
},
|
||
// 购物车列表组件里的步进器 ============ end ==================
|
||
typeChange(event) {
|
||
this.setData({
|
||
radioChoose: Number(event.detail),
|
||
});
|
||
},
|
||
// 检查购物车商品列表是否有配送方式冲突
|
||
checkGoods() {
|
||
let _cart_ids = [];
|
||
this.data.cartList.forEach(item => {
|
||
_cart_ids.push(item.id);
|
||
});
|
||
|
||
let _cartArrConcat = _cart_ids.concat(this.orderCart);
|
||
let _cartArr = new Set(_cartArrConcat);
|
||
_cartArr = [..._cartArr];
|
||
let urlStr = app.getNetAddresss("memberCart.checkout");
|
||
urlStr += "&cart_ids=" + _cartArr.join(",");
|
||
app._getNetWork({
|
||
url: urlStr,
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result == 1) {
|
||
if (res.data.need_choose == 1) {
|
||
this.setData({
|
||
dispatch_types: res.data.dispatch_types,
|
||
showChoose: true
|
||
});
|
||
} else {
|
||
this.toOrder();
|
||
}
|
||
} else {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: res.msg,
|
||
duration: 1000,
|
||
});
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
toOrder() {
|
||
this.initData();
|
||
//当前是否是从下单页跳转过来的
|
||
let _cart_ids = [];
|
||
let _cartArr = [];
|
||
if (this.data.showChoose && !this.data.radioChoose) {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: '请先选择配送方式',
|
||
duration: 1000,
|
||
});
|
||
return;
|
||
}
|
||
|
||
if (this.data.showChoose) {
|
||
// 配送方式有冲突
|
||
for (let i = 0; i < this.data.dispatch_types[this.data.radioChoose].member_carts.length; i++) {
|
||
_cartArr.push(this.data.dispatch_types[this.data.radioChoose].member_carts[i].id);
|
||
}
|
||
} else {
|
||
this.data.cartList.forEach(item => {
|
||
_cart_ids.push(item.id);
|
||
});
|
||
let _cartArrConcat = _cart_ids.concat(this.data.orderCart);
|
||
_cartArr = new Set(_cartArrConcat);
|
||
_cartArr = [..._cartArr]; //去重
|
||
}
|
||
|
||
setTimeout(() => {
|
||
//跳转下单页
|
||
wx.navigateTo({
|
||
url: '/packageD/buy/myOrder_v2/myOrder_v2?tag=-1&cart_ids=' + JSON.stringify(_cartArr)
|
||
});
|
||
}, 80);
|
||
},
|
||
initData() {
|
||
this.setData({
|
||
showgp: false,
|
||
popupSpecs: false,
|
||
showCarList: false,
|
||
showChoose: false
|
||
});
|
||
},
|
||
showgoodspecs(){
|
||
this.setData({
|
||
popupSpecs: true
|
||
});
|
||
},
|
||
closeChoose(){
|
||
this.setData({
|
||
showChoose: false
|
||
});
|
||
},
|
||
/**
|
||
* 生命周期函数--监听页面初次渲染完成
|
||
*/
|
||
onReady: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面显示
|
||
*/
|
||
onShow: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面隐藏
|
||
*/
|
||
onHide: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面卸载
|
||
*/
|
||
onUnload: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面相关事件处理函数--监听用户下拉动作
|
||
*/
|
||
onPullDownRefresh: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面上拉触底事件的处理函数
|
||
*/
|
||
onReachBottom: function () {
|
||
if (this.data.isLoadMore) {
|
||
this._getMoreData();
|
||
} else {
|
||
console.log('没有更多数据');
|
||
}
|
||
},
|
||
|
||
/**
|
||
* 用户点击右上角分享
|
||
*/
|
||
onShareAppMessage: function () {
|
||
|
||
}
|
||
}); |