572 lines
15 KiB
JavaScript
572 lines
15 KiB
JavaScript
// packageF/cart_share/cart_share.js
|
||
var app = getApp();
|
||
Page({
|
||
/**
|
||
* 页面的初始数据
|
||
*/
|
||
data: {
|
||
share_id: "",
|
||
set: {},
|
||
member: {},
|
||
cartList: [], //商品列表
|
||
eachCheckList: [], //选中商品列表
|
||
checkAll: false,
|
||
selectBol: true,
|
||
|
||
showCouponDetail: false, //优惠券弹窗
|
||
good_clicktag: 0,
|
||
all_get_coupon: false,
|
||
share_coupons: [], //分享优惠券
|
||
coupons: [], //自己的优惠券
|
||
old_coupons: [],
|
||
coupons_temp: {}, //折叠优惠券显示数量
|
||
checkCouponList: [], //选中的优惠券
|
||
|
||
language: "",
|
||
timer: null,
|
||
|
||
showWechatshar: false,
|
||
path: "/packageF/cart_share/cart_share",
|
||
imageUrl: "",
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面加载
|
||
*/
|
||
onLoad: function (options) {
|
||
if (options.sid) {
|
||
this.setData({
|
||
share_id: options.sid,
|
||
path: `/packageF/cart_share/cart_share?sid=${options.sid}`
|
||
});
|
||
}
|
||
},
|
||
/**
|
||
* 生命周期函数--监听页面初次渲染完成
|
||
*/
|
||
onReady: function () {
|
||
let language = wx.getStorageSync('langIndex');
|
||
this.setData({
|
||
'language': language.en
|
||
});
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面显示
|
||
*/
|
||
onShow: function () {
|
||
this.getData();
|
||
},
|
||
getData() {
|
||
let url = app.getNetAddresss("plugin.cart-sharing.frontend.cart.get-sharing-data"); // 从购物车过来 分享者
|
||
if (this.data.share_id) {
|
||
url = app.getNetAddresss("plugin.cart-sharing.frontend.cart.receive-page-data"); // 被分享
|
||
url += "&share_id=" + this.data.share_id;
|
||
}
|
||
app._getNetWork({
|
||
url: url,
|
||
success: (resdata) => {
|
||
var response = resdata.data;
|
||
if (response.result == 1) {
|
||
if (this.data.share_id) {
|
||
this.setData({
|
||
cartList: response.data.goods || [],
|
||
share_coupons: response.data.coupons || [],
|
||
});
|
||
this.checkAllCoupon();
|
||
this.setData({
|
||
imageUrl: this.data.cartList[0] ? this.data.cartList[0].thumb : '',
|
||
});
|
||
} else {
|
||
this.setData({
|
||
cartList: response.data.cart_list,
|
||
coupons: response.data.coupons || []
|
||
});
|
||
this.initSelectCoupon(this.data.coupons);
|
||
}
|
||
this.setData({
|
||
set: response.data.set,
|
||
member: response.data.member
|
||
});
|
||
} else {
|
||
app.tips(response.msg);
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
shareGoods() {
|
||
// 保存分享商品
|
||
console.log("分享商品");
|
||
if (this.data.eachCheckList.length == 0 && this.data.share_coupons.length == 0) {
|
||
return;
|
||
}
|
||
let goods = [];
|
||
let imgUrl = "";
|
||
let link = `/packageF/cart_share/cart_share?sid=`;
|
||
this.data.cartList.map((good) => {
|
||
if (this.data.eachCheckList.includes(String(good.goods_id))) {
|
||
if (!imgUrl) {
|
||
imgUrl = good.goods.thumb;
|
||
this.setData({
|
||
imageUrl: imgUrl
|
||
});
|
||
}
|
||
goods.push({
|
||
goods_id: good.goods_id,
|
||
amount: good.total,
|
||
option_id: good.goods_option ? good.goods_option.id : ''
|
||
});
|
||
}
|
||
});
|
||
|
||
let urlStr = app.getNetAddresss("plugin.cart-sharing.frontend.cart.save-sharing-goods");
|
||
|
||
wx.showLoading({
|
||
title: '生成中',
|
||
mask: true
|
||
});
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
goods: goods
|
||
},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result === 1) {
|
||
link = link + res.data.share_id;
|
||
this.setData({
|
||
path: link
|
||
});
|
||
if (this.data.share_coupons.length > 0) {
|
||
this.shareCoupon(res.data.share_id);
|
||
} else {
|
||
wx.hideLoading();
|
||
this.setData({
|
||
showWechatshar: true
|
||
});
|
||
}
|
||
} else {
|
||
app.tips(res.msg);
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
|
||
},
|
||
shareCoupon(share_id) {
|
||
// 保存分享优惠券
|
||
let coupon = [];
|
||
this.data.share_coupons.map((item) => {
|
||
coupon.push({
|
||
coupon_id: item.coupon_id,
|
||
amount: item.num
|
||
});
|
||
});
|
||
let urlStr = app.getNetAddresss("plugin.cart-sharing.frontend.cart.save-sharing-coupon");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
share_id: share_id,
|
||
coupon: coupon
|
||
},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
wx.hideLoading();
|
||
if (res.result === 1) {
|
||
//成功就弹窗
|
||
this.setData({
|
||
showWechatshar: true
|
||
});
|
||
} else {
|
||
app.tips(res.msg);
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
getCoupon(e) {
|
||
let data = e.currentTarget.dataset.coupon;
|
||
let index = e.currentTarget.dataset.index;
|
||
// 领取优惠券
|
||
let couponData = [];
|
||
if (data == "all" && this.data.all_get_coupon) {
|
||
// 领完就别领了
|
||
return;
|
||
}
|
||
if (data == "all") {
|
||
this.data.share_coupons.map((item) => {
|
||
couponData.push({
|
||
coupon_id: item.id,
|
||
type: item.share_type
|
||
});
|
||
});
|
||
} else {
|
||
couponData.push({
|
||
coupon_id: data.id,
|
||
type: data.share_type
|
||
});
|
||
}
|
||
|
||
let urlStr = app.getNetAddresss("plugin.cart-sharing.frontend.cart.receive-coupon");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
share_id: this.data.share_id,
|
||
couponData: couponData
|
||
},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result === 1) {
|
||
if (data == "all") {
|
||
this.setData({
|
||
all_get_coupon: true
|
||
});
|
||
} else {
|
||
this.checkAllCoupon();
|
||
data.sharing_status = 1;
|
||
}
|
||
this.setData({
|
||
["share_coupons[" + index + "]"]: data,
|
||
});
|
||
app.tips("领取成功");
|
||
} else {
|
||
app.tips(res.msg);
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
|
||
},
|
||
checkAllCoupon() {
|
||
let flag = true;
|
||
this.data.share_coupons.map((item) => {
|
||
if (item.sharing_status == 0) {
|
||
flag = false;
|
||
}
|
||
});
|
||
this.setData({
|
||
all_get_coupon: flag
|
||
});
|
||
},
|
||
addIntoCart() {
|
||
// 加入购物车
|
||
let goods_data = [];
|
||
this.data.cartList.map((good) => {
|
||
if (this.data.eachCheckList.includes(String(good.goods_id))) {
|
||
goods_data.push({
|
||
goods_id: good.goods_id,
|
||
total: good.total,
|
||
option_id: good.option_id || ''
|
||
});
|
||
}
|
||
});
|
||
let urlStr = app.getNetAddresss("member.member-cart.batch-store");
|
||
app._postNetWork({
|
||
url: urlStr,
|
||
data: {
|
||
goods_data: goods_data
|
||
},
|
||
success: (resdata) => {
|
||
let res = resdata.data;
|
||
if (res.result === 1) {
|
||
if (res.data.error.length > 0) {
|
||
let msg = "";
|
||
this.data.cartList.map((good) => {
|
||
if (res.data.error.includes(good.goods_id)) {
|
||
msg = msg + good.title + '、';
|
||
}
|
||
});
|
||
app.confirm(msg.slice(0, -1) + "加入购物车失败,请重新选择!", '', false);
|
||
} else {
|
||
app.tips("加入成功");
|
||
}
|
||
} else {
|
||
app.tips(res.msg);
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
console.log(res);
|
||
},
|
||
});
|
||
},
|
||
//初始化优惠券
|
||
initSelectCoupon(coupon) {
|
||
let coupon_data = coupon;
|
||
let result = [];
|
||
let temp = {};
|
||
|
||
for (let i = 0; i < coupon_data.length; i++) {
|
||
let num = 0; //优惠券数量
|
||
coupon_data[i].valid = true;
|
||
coupon_data[i].checked = false;
|
||
let _data = coupon_data[i];
|
||
result.push(_data);
|
||
temp[coupon_data[i].coupon_id] = {};
|
||
temp[coupon_data[i].coupon_id].num = num;
|
||
}
|
||
this.setData({
|
||
coupons_temp: temp,
|
||
coupons: result
|
||
});
|
||
// console.log(this.data.coupons, this.data.coupons_temp,"coupons_temp");
|
||
},
|
||
//选择优惠券
|
||
selectCoupon(e, num) {
|
||
let couponBol = e.detail;
|
||
let index = e.currentTarget.dataset.index;
|
||
let item = e.currentTarget.dataset.item;
|
||
// console.log(couponBol, index, item,num);
|
||
this.setData({
|
||
["coupons[" + index + "].checked"]: couponBol,
|
||
});
|
||
this._screenCoupon(couponBol, item, num);
|
||
},
|
||
//筛选数据优惠券状态
|
||
_screenCoupon(couponBol, valObj, num) {
|
||
let tarValue = valObj;
|
||
let checkCouponList = this.data.checkCouponList;
|
||
if (this.data.checkCouponList.length > 0) {
|
||
for (let i = 0; i < this.data.checkCouponList.length; i++) {
|
||
if (this.data.checkCouponList[i].coupon_id == tarValue.coupon_id) {
|
||
checkCouponList.splice(i, 1);
|
||
}
|
||
}
|
||
}
|
||
if (couponBol) {
|
||
//选中添加
|
||
tarValue.num = num || 1;
|
||
checkCouponList.push(tarValue);
|
||
} else {
|
||
tarValue.num = 0;
|
||
}
|
||
//开启折叠优惠券并且为点击复选框为选中状态
|
||
this.data.coupons_temp[tarValue.coupon_id].num = couponBol ? num || 1 : 0;
|
||
this.setData({
|
||
coupons_temp: this.data.coupons_temp
|
||
});
|
||
this.setData({
|
||
checkCouponList: checkCouponList
|
||
});
|
||
},
|
||
changeCoupon(e) {
|
||
let valObj = e.target.dataset.item;
|
||
let num = e.detail;
|
||
let index = e.target.dataset.index;
|
||
// console.log("=================", e.detail, valObj);
|
||
if (num > valObj.count) {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: "数量已达上限",
|
||
duration: 2000,
|
||
});
|
||
clearTimeout(this.data.timer);
|
||
this.data.timer = setTimeout(() => {
|
||
// 注意此时修改 value 后会再次触发 change 事件
|
||
this.data.coupons_temp[valObj.coupon_id].num = valObj.count;
|
||
this.setData({
|
||
coupons_temp: this.data.coupons_temp,
|
||
});
|
||
}, 200);
|
||
return;
|
||
} else if (num == "" || num == undefined || num == 0) {
|
||
wx.showToast({
|
||
icon: "none",
|
||
title: "暂不使用请取消勾选",
|
||
duration: 2000,
|
||
});
|
||
return;
|
||
} else {
|
||
clearTimeout(this.data.timer);
|
||
valObj.num = num;
|
||
this.data.coupons_temp[valObj.coupon_id].num = num;
|
||
this.setData({
|
||
coupons_temp: this.data.coupons_temp,
|
||
});
|
||
}
|
||
|
||
// clearTimeout方法,以便控制连续触发带来的无用调用
|
||
let value = {
|
||
detail: true,
|
||
currentTarget: {
|
||
dataset: {
|
||
index: index,
|
||
item: valObj,
|
||
},
|
||
},
|
||
};
|
||
if (this.data.timeoutId) {
|
||
clearTimeout(this.data.timeoutId); // 先清除之前的延时,并在下面重新开始计算时间
|
||
}
|
||
this.data.timeoutId = setTimeout(() => {
|
||
// 100毫秒以后执行方法
|
||
this.selectCoupon(value, num);
|
||
}, 200); // 如果还没有执行就又被触发,会根据上面的clearTimeout来清除并重新开始计算
|
||
},
|
||
openCoupon() {
|
||
this.setData({
|
||
showCouponDetail: true,
|
||
old_coupons: JSON.parse(JSON.stringify(this.data.coupons)),
|
||
checkCouponList: JSON.parse(JSON.stringify(this.data.share_coupons)),
|
||
});
|
||
},
|
||
sureCoupon() {
|
||
this.setData({
|
||
showCouponDetail: false,
|
||
share_coupons: JSON.parse(JSON.stringify(this.data.checkCouponList))
|
||
});
|
||
},
|
||
cancelCoupon() {
|
||
this.setData({
|
||
showCouponDetail: false,
|
||
coupons: JSON.parse(JSON.stringify(this.data.old_coupons))
|
||
});
|
||
},
|
||
//点击全选
|
||
allSelect(event) {
|
||
let bol = event.detail;
|
||
this.setData({
|
||
checkAll: bol,
|
||
});
|
||
this.selectBolfun('1');
|
||
if (this.data.selectBol) {
|
||
// console.log(this.selectBol, event, "全选");
|
||
if (this.data.checkAll) {
|
||
let all_carts_id = [];
|
||
this.data.cartList.map((item) => {
|
||
all_carts_id.push(String(item.goods_id));
|
||
});
|
||
this.data.eachCheckList = JSON.parse(JSON.stringify(all_carts_id));
|
||
} else {
|
||
this.data.eachCheckList = [];
|
||
}
|
||
this.setData({
|
||
eachCheckList: this.data.eachCheckList
|
||
});
|
||
}
|
||
},
|
||
selectBolfun(num) {
|
||
// 判断点击是否点击全选 '1', 防止多次触发this.eachCheckList[c_index]变化allSelectHandle
|
||
num === '1' ? this.data.selectBol = true : this.data.selectBol = false;
|
||
},
|
||
|
||
//选择商品监听 this.eachCheckList变化会触发
|
||
allSelectHandle(event) {
|
||
let value = event.detail;
|
||
this.selectBolfun('0');
|
||
// console.log(this.data.selectBol,value, "value",this.data.cartList);
|
||
if (!this.data.selectBol) {
|
||
this.data.checkAll = value.length === this.data.cartList.length;
|
||
this.setData({
|
||
checkAll: this.data.checkAll,
|
||
eachCheckList: value
|
||
});
|
||
}
|
||
// console.log(this.data.eachCheckList,"this.eachCheckList");
|
||
},
|
||
//商品输入框输入绑定
|
||
goodinpbtn(e) {
|
||
let index = e.currentTarget.dataset.index;
|
||
let goodval = e.detail.value;
|
||
this.setData({
|
||
[`cartList[${index}].total`]: goodval,
|
||
});
|
||
},
|
||
numberLeft(e) {
|
||
let index = e.currentTarget.dataset.index;
|
||
// console.log(this.cartList[index].total);
|
||
if (this.data.cartList[index].total <= 1) {
|
||
app.tips("商品数量不能为负数或零");
|
||
return;
|
||
}
|
||
this.setData({
|
||
[`cartList[${index}].total`]: Number(this.data.cartList[index].total) - 1,
|
||
});
|
||
// this.changeCount(this.cartList[index].total, this.cartList[index].goods_id, index);
|
||
},
|
||
|
||
numberRight(e) {
|
||
let index = e.currentTarget.dataset.index;
|
||
this.data.cartList[index].total = Number(this.data.cartList[index].total) + 1;
|
||
if (this.data.cartList[index].stock && this.data.cartList[index].total > this.data.cartList[index].stock) {
|
||
app.tips(`该商品库存只剩${this.data.cartList[index].stock}件`);
|
||
this.data.cartList[index].total = this.data.cartList[index].stock;
|
||
// return;
|
||
}
|
||
this.setData({
|
||
[`cartList[${index}].total`]: this.data.cartList[index].total,
|
||
});
|
||
},
|
||
onClose() {
|
||
this.setData({
|
||
showWechatshar: false
|
||
});
|
||
},
|
||
|
||
//跳转商品详情
|
||
toGoodsInfo(e) {
|
||
let goods_id = e.currentTarget.dataset.goodsid;
|
||
wx.navigateTo({
|
||
url: "/packageA/detail_v2/detail_v2?id=" + goods_id,
|
||
});
|
||
},
|
||
gotoCart() {
|
||
wx.reLaunch({
|
||
url: "/packageG/pages/buy/cart_v2/cart_v2",
|
||
});
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面隐藏
|
||
*/
|
||
onHide: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 生命周期函数--监听页面卸载
|
||
*/
|
||
onUnload: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 页面上拉触底事件的处理函数
|
||
*/
|
||
onReachBottom: function () {
|
||
|
||
},
|
||
|
||
/**
|
||
* 用户点击右上角分享
|
||
*/
|
||
onShareAppMessage: function () {
|
||
let description = `${this.data.member.nickname}${this.data.set.title}` + (this.data.eachCheckList.length > 0 ? `(共${this.data.eachCheckList.length}款商品)` : '');
|
||
if (this.data.share_id) {
|
||
description = `${this.data.member.nickname}${this.data.set.title}` + (this.data.cartList.length > 0 ? `(共${this.data.cartList.length}款商品)` : '');
|
||
}
|
||
return {
|
||
title: description,
|
||
path: this.data.path,
|
||
imageUrl: this.data.imageUrl,
|
||
};
|
||
},
|
||
onShareTimeline() {
|
||
let description = `${this.data.member.nickname}${this.data.set.title}` + (this.data.eachCheckList.length > 0 ? `(共${this.data.eachCheckList.length}款商品)` : '');
|
||
if (this.data.share_id) {
|
||
description = `${this.data.member.nickname}${this.data.set.title}` + (this.data.cartList.length > 0 ? `(共${this.data.cartList.length}款商品)` : '');
|
||
}
|
||
return {
|
||
title: description,
|
||
imageUrl: this.data.imageUrl,
|
||
};
|
||
}
|
||
}); |