uniapp/pages_promotion/bale/public/js/detail.js

343 lines
8.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

export default {
data() {
return {
info: null,
timeMachine: null,
page: 1,
goodsList: [],
cart: {},
totalPrice: 0.00,
totalNum: 0,
goodsSkuDetail: null,
skuList: [],
cartShow: false,
isSub: false,
token: null,
//分享建立上下级所需id
memberId: 0,
};
},
onLoad(data) {
if (data.id) this.id = data.id;
if (data.scene) {
var sceneParams = decodeURIComponent(data.scene);
sceneParams = sceneParams.split('&');
if (sceneParams.length) {
sceneParams.forEach(item => {
if (item.indexOf('id') != -1) this.id = item.split('-')[1];
});
}
}
//小程序分享接收source_member
if (data.source_member) {
uni.setStorageSync('source_member', data.source_member);
}
// 小程序扫码进入接收source_member
if (data.scene) {
var sceneParams = decodeURIComponent(data.scene);
sceneParams = sceneParams.split('&');
if (sceneParams.length) {
sceneParams.forEach(item => {
if (item.indexOf('sku_id') != -1) this.skuId = item.split('-')[1];
if (item.indexOf('m') != -1) uni.setStorageSync('source_member', item.split('-')[1]);
if (item.indexOf('is_test') != -1) uni.setStorageSync('is_test', 1);
});
}
}
this.getBaleInfo();
},
onShow() {
//记录分享关系
if (uni.getStorageSync('token') && uni.getStorageSync('source_member')) {
this.$util.onSourceMember(uni.getStorageSync('source_member'));
}
},
methods: {
/**
* 查询活动信息
*/
getBaleInfo() {
this.$api.sendRequest({
url: '/bale/api/bale/detail',
data: {
bale_id: this.id
},
success: res => {
if (res.code == 0 && res.data) {
this.info = res.data;
if (this.info.status == 1) {
this.timeMachine = this.$util.countDown(this.info.end_time - res.timestamp);
} else if (this.info.status == 2) {
this.$util.showToast({
title: '该活动已关闭'
});
setTimeout(() => {
this.$util.redirectTo('/pages/index/index');
}, 1500);
}
} else {
this.$util.showToast({
title: '未找到活动'
});
setTimeout(() => {
this.$util.redirectTo('/pages/index/index');
}, 1500);
}
},
fail: res => {
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
}
})
},
/**
* 查询商品列表
* @param {Object} mescroll
*/
getGoodsList(mescroll) {
let newArr = [];
if (this.info.sku_list_count == 0) {
this.emptyShow = true;
} else {
newArr = this.info.sku_list.splice(0, mescroll.size);
}
mescroll.endSuccess(newArr.length);
//设置列表数据
if (mescroll.num == 1) this.goodsList = []; //如果是第一页需手动制空列表
this.goodsList = this.goodsList.concat(newArr); //追加新数据
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
},
imageError(index) {
this.goodsList[index].sku_image = this.$util.getDefaultImage().goods;
this.$forceUpdate();
},
/**
* 单规格数量增加
* @param {Object} data
*/
singleSkuPlus(data) {
if (this.cart['goods_' + data.goods_id] != undefined) {
var num = this.cart['goods_' + data.goods_id].num;
if ((num + 1) > data.stock) {
this.$util.showToast({
title: '库存不足'
});
return;
}
this.cart['goods_' + data.goods_id].num += 1;
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id].num += 1;
} else {
this.cart['goods_' + data.goods_id] = {
num: 1
}
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id] = data;
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id].num = 1;
}
this.totalNum += 1;
this.cart = Object.assign({}, this.cart)
},
/**
* 单规格数量减少
* @param {Object} data
*/
singleSkuReduce(data) {
if (this.cart['goods_' + data.goods_id] != undefined) {
var num = this.cart['goods_' + data.goods_id]['sku_' + data.sku_id].num;
this.cart['goods_' + data.goods_id].num -= 1;
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id].num -= 1;
this.totalNum -= 1;
if ((num - 1) == 0) {
delete this.cart['goods_' + data.goods_id]['sku_' + data.sku_id];
if (Object.keys(this.cart['goods_' + data.goods_id]).length == 1) {
delete this.cart['goods_' + data.goods_id];
}
}
this.cart = Object.assign({}, this.cart)
}
},
/**
* 多规格选择
*/
manySkuSelect(data) {
if (typeof data.sku_spec_format == 'string' && data.sku_spec_format) data.sku_spec_format = JSON.parse(data
.sku_spec_format);
if (typeof data.goods_sku_spec_format == 'string' && data.goods_sku_spec_format) data.goods_spec_format =
JSON.parse(data.goods_sku_spec_format);
data.bale_id = this.id;
data.activity_sku_ids = this.info.sku_ids.split(',');
this.goodsSkuDetail = data;
setTimeout(() => {
this.$refs.goodsSku.show("bale", () => {});
}, 100)
},
refreshGoodsSkuDetail(goodsSkuDetail) {
Object.assign(this.goodsSkuDetail, goodsSkuDetail);
},
joinCart(data) {
if (this.cart['goods_' + data.goods_id] != undefined) {
if (this.cart['goods_' + data.goods_id]['sku_' + data.sku_id] != undefined) {
this.cart['goods_' + data.goods_id].num += (data.num - this.cart['goods_' + data.goods_id]['sku_' +
data.sku_id
].num);
this.totalNum += (data.num - this.cart['goods_' + data.goods_id]['sku_' + data.sku_id].num);
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id].num = data.num;
} else {
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id] = data.detail;
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id].num = data.num;
this.cart['goods_' + data.goods_id].num += data.num;
this.totalNum += data.num;
}
} else {
this.cart['goods_' + data.goods_id] = {
num: data.num
}
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id] = data.detail;
this.cart['goods_' + data.goods_id]['sku_' + data.sku_id].num = data.num;
this.totalNum += data.num;
}
this.cart = Object.assign({}, this.cart)
this.$refs.goodsSku.hide();
},
openCartPopup() {
if (!this.skuList.length) return;
this.cartShow = !this.cartShow;
},
closeCartPopup() {
this.cartShow = false;
},
clearCart() {
this.cart = {};
this.totalNum = 0;
this.closeCartPopup();
},
submit() {
if (!uni.getStorageSync('token')) {
setTimeout(() => {
this.$refs.login.open('/pages_promotion/bale/detail?id=' + this.id);
});
} else {
if (this.isSub) return;
this.isSub = true;
let sku = [];
this.skuList.forEach((item) => {
sku.push({
sku_id: item.sku_id,
num: item.num
})
})
uni.setStorage({
key: 'baleOrderCreateData',
data: {
bale_id: this.id,
sku_list_json: JSON.stringify(sku)
},
success: () => {
this.isSub = false;
this.$util.redirectTo('/pages_promotion/bale/payment');
}
});
}
}
},
filters: {
/**
* 金额格式化输出
* @param {Object} money
*/
moneyFormat(money) {
return parseFloat(money).toFixed(2);
},
/**
* 输出规格
* @param {Object} money
*/
sku(data) {
let sku = '';
if (data) {
sku = data.sku_name.replace(data.goods_name, '');
}
return sku;
}
},
watch: {
cart: {
deep: true,
handler: function(newV, oldV) {
let sku_list = [],
start = 1;
for (let key in this.cart) {
let goods = this.cart[key];
for (let skuKey in goods) {
if (skuKey.indexOf('num') == -1) {
let item = goods[skuKey];
item.start = start;
item.end = start + item.num;
sku_list.push(goods[skuKey]);
start += item.num;
}
}
}
this.skuList = sku_list;
}
},
totalNum: function(newV) {
if (newV > 0) {
if (newV % this.info.num == 0) {
this.totalPrice = this.info.price * (newV / this.info.num);
} else {
let multiple = Math.floor(newV / this.info.num),
money = parseFloat(multiple * this.info.price),
num = multiple * this.info.num;
for (let i = 0; i < newV % this.info.num; i++) {
num += 1;
for (let j = 0; j < this.skuList.length; j++) {
let item = this.skuList[j];
if (num >= item.start && num < item.end) {
money += parseFloat(item.price);
break;
}
}
}
this.totalPrice = money;
}
} else {
this.totalPrice = 0;
}
}
},
/**
* 自定义分享内容
*/
onShareAppMessage() {
var route = this.$util.getCurrentShareRoute(this.memberId);
var path = route.path;
return {
title: '这些商品' + this.info.price + '元任选' + this.info.num + '件',
imageUrl: '',
path: path,
success: res => {},
fail: res => {}
};
},
// 分享到微信朋友圈
// #ifdef MP-WEIXIN
onShareTimeline() {
var title = '这些商品' + this.info.price + '元任选' + this.info.num + '件';
var route = this.$util.getCurrentShareRoute(this.memberId);
var query = route.query;
return {
title: title,
query: query,
imageUrl: '',
};
},
// #endif
}