forked from zhongyuanhaiju/uniapp
343 lines
8.9 KiB
JavaScript
343 lines
8.9 KiB
JavaScript
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
|
||
}
|