forked from zhongyuanhaiju/uniapp
391 lines
11 KiB
JavaScript
391 lines
11 KiB
JavaScript
export default {
|
||
data() {
|
||
return {
|
||
posterApi: '/pintuan/api/goods/poster',
|
||
goodsRoute: '/pages_promotion/pintuan/detail',
|
||
groupId: 0,
|
||
pintuan_id: 0,
|
||
|
||
pintuanList: [],
|
||
currentPintuan: {
|
||
headimg: '',
|
||
timeMachine: {}
|
||
},
|
||
openPopup: false,
|
||
timestamp: '',
|
||
newList: [],
|
||
pintuanPopShow:false,
|
||
groupId:0,
|
||
groupDetail:null,
|
||
pintuan_num_field:'pintuan_num'
|
||
}
|
||
},
|
||
onLoad(data) {
|
||
this.pintuan_id = data.pintuan_id || 0;
|
||
if (data.id) {
|
||
this.pintuan_id = data.id;
|
||
}
|
||
this.groupId = data.group_id || 0;
|
||
|
||
// 小程序扫码进入
|
||
if (data.scene) {
|
||
var sceneParams = decodeURIComponent(data.scene);
|
||
sceneParams = sceneParams.split('&');
|
||
if (sceneParams.length) {
|
||
sceneParams.forEach(item => {
|
||
if (item.indexOf('id') != -1) this.pintuan_id = item.split('-')[1];
|
||
if (item.indexOf('group_id') != -1) this.group_id = item.split('-')[1];
|
||
});
|
||
}
|
||
}
|
||
// #ifdef MP-WEIXIN
|
||
this.getShareImg();
|
||
// #endif
|
||
},
|
||
async onShow() {
|
||
await this.getGoodsSkuDetail();
|
||
this.getPintuanGroupList();
|
||
if(this.groupId > 0) this.getGroupDetail();
|
||
},
|
||
methods: {
|
||
// 获取拼团商品详情
|
||
async getGoodsSkuDetail() {
|
||
let res = await this.$api.sendRequest({
|
||
url: '/pintuan/api/goods/detail',
|
||
async: false,
|
||
data: {
|
||
pintuan_id: this.pintuan_id
|
||
}
|
||
});
|
||
let data = res.data;
|
||
if (data.goods_sku_detail != null) {
|
||
this.goodsSkuDetail = data.goods_sku_detail;
|
||
|
||
this.skuId = this.goodsSkuDetail.sku_id;
|
||
this.goodsSkuDetail.group_id = this.groupId;
|
||
this.goodsSkuDetail.pintuan_num_field = this.pintuan_num_field;
|
||
//拼团倒计时
|
||
if ((this.goodsSkuDetail.end_time - res.timestamp) > 0) {
|
||
this.goodsSkuDetail.timeMachine = this.$util.countDown(this.goodsSkuDetail.end_time - res
|
||
.timestamp);
|
||
} else {
|
||
this.$util.showToast({
|
||
title: "活动已结束",
|
||
});
|
||
setTimeout(() => {
|
||
this.$util.redirectTo('/pages/goods/detail', {
|
||
goods_id: this.goodsSkuDetail.goods_id
|
||
}, 'redirectTo');
|
||
}, 1000);
|
||
}
|
||
|
||
// 分享参数、链接
|
||
this.shareQuery = 'pintuan_id=' + this.pintuan_id + '&group_id=' + this.groupId;
|
||
this.shareUrl = this.goodsRoute + '?' + this.shareQuery;
|
||
|
||
// 在线客服聊天参数
|
||
this.chatRoomParams = {
|
||
sku_id: this.goodsSkuDetail.sku_id,
|
||
type: 'pintuan',
|
||
type_id: this.goodsSkuDetail.pintuan_id
|
||
};
|
||
|
||
// 海报参数
|
||
this.posterParams = {
|
||
id: this.pintuan_id
|
||
};
|
||
|
||
// 处理商品数据
|
||
this.handleGoodsSkuData();
|
||
|
||
this.goodsSkuDetail.show_price = (this.goodsSkuDetail.group_id == 0 ? this.goodsSkuDetail
|
||
.promotion_price : this.goodsSkuDetail.pintuan_price);
|
||
|
||
this.goodsSkuDetail.save_price = (this.goodsSkuDetail.price - this.goodsSkuDetail.show_price) > 0 ?
|
||
(this.goodsSkuDetail
|
||
.price - this.goodsSkuDetail.show_price).toFixed(2) : 0;
|
||
|
||
if (this.$refs.loadingCover) this.$refs.loadingCover.hide();
|
||
} else {
|
||
this.$util.redirectTo('/pages_tool/goods/not_exist', {}, 'redirectTo');
|
||
}
|
||
},
|
||
refreshPintuan(){
|
||
//阶梯参团关闭开团选择后重置价格
|
||
if(this.goodsSkuDetail.pintuan_type == 'ladder' && this.groupDetail){
|
||
if(this.groupDetail.pintuan_num == this.goodsSkuDetail.pintuan_num){
|
||
this.goodsSkuDetail.pintuan_num_field = 'pintuan_num';
|
||
}else if(this.groupDetail.pintuan_num == this.goodsSkuDetail.pintuan_num_2){
|
||
this.goodsSkuDetail.pintuan_num_field = 'pintuan_num_2';
|
||
}else if(this.groupDetail.pintuan_num == this.goodsSkuDetail.pintuan_num_3){
|
||
this.goodsSkuDetail.pintuan_num_field = 'pintuan_num_3';
|
||
}
|
||
setTimeout(() => {
|
||
this.$refs.goodsSku.getPintuanGoodsSkuInfo();
|
||
}, 500)
|
||
// 处理商品数据
|
||
this.goodsDetailViewInit();
|
||
this.$forceUpdate();
|
||
}
|
||
|
||
},
|
||
pintuanPirce(data){
|
||
if(data.pintuan_type == 'ordinary'){
|
||
return data.pintuan_price;
|
||
}else{
|
||
if(data.pintuan_num_field == 'pintuan_num') return data.pintuan_price;
|
||
if(data.pintuan_num_field == 'pintuan_num_2') return data.pintuan_price_2;
|
||
if(data.pintuan_num_field == 'pintuan_num_3') return data.pintuan_price_3;
|
||
}
|
||
},
|
||
// 发起拼团
|
||
pintuan(isPromotion = true, group_id = 0) {
|
||
if (!uni.getStorageSync('token')) {
|
||
if (!this.source_member) {
|
||
this.$refs.login.open(this.shareUrl);
|
||
} else {
|
||
this.$refs.login.open(this.shareUrl + '&source_member=' + this.source_member);
|
||
}
|
||
return;
|
||
}
|
||
|
||
// #ifdef MP-WEIXIN
|
||
this.$util.subscribeMessage('PINTUAN_COMPLETE,PINTUAN_FAIL');
|
||
// #endif
|
||
|
||
if(this.groupDetail && this.groupDetail.status == 2 && this.groupDetail.order_id){
|
||
let that = this;
|
||
uni.showModal({
|
||
title: '提示',
|
||
content: '您有一个拼团订单待付款,是否现在跳转支付?',
|
||
success: function (res) {
|
||
if (res.confirm) {
|
||
that.$util.redirectTo('/pages_rush/order/detail', {'order_id':that.groupDetail.order_id});
|
||
} else if (res.cancel) {
|
||
|
||
}
|
||
}
|
||
});
|
||
|
||
return;
|
||
}
|
||
|
||
if (isPromotion) {
|
||
this.resetPrice();
|
||
this.goodsSkuDetail.group_id = 0;
|
||
}else if(group_id){
|
||
this.goodsSkuDetail.group_id = group_id;
|
||
}else{
|
||
this.goodsSkuDetail.group_id = this.groupId;
|
||
}
|
||
this.$forceUpdate();
|
||
this.$refs.goodsSku.show("pintuan", () => {
|
||
this.resetPrice();
|
||
this.getCartCount();
|
||
});
|
||
},
|
||
// 立即购买
|
||
buyNow() {
|
||
if (!uni.getStorageSync('token')) {
|
||
if (!this.source_member) {
|
||
this.$refs.login.open(this.shareUrl);
|
||
} else {
|
||
this.$refs.login.open(this.shareUrl + '&source_member=' + this.source_member);
|
||
}
|
||
return;
|
||
}
|
||
this.$refs.goodsSku.show("buy_now", () => {
|
||
this.getCartCount();
|
||
});
|
||
},
|
||
// 获取拼团组列表
|
||
getPintuanGroupList() {
|
||
this.$api.sendRequest({
|
||
url: "/pintuan/api/pintuangroup/lists",
|
||
data: {
|
||
goods_id: this.goodsSkuDetail.goods_id
|
||
},
|
||
success: res => {
|
||
let data = res.data;
|
||
this.timestamp = res.timestamp
|
||
if (data != null && data.length) {
|
||
this.pintuanList = data;
|
||
for (let i = 0; i < this.pintuanList.length; i++) {
|
||
if (this.pintuanList[i]['end_time'] > res.timestamp) {
|
||
this.pintuanList[i].timeMachine = this.$util.countDown(this.pintuanList[i][
|
||
'end_time'
|
||
] - res.timestamp);
|
||
this.pintuanList[i].currentTime = res.timestamp;
|
||
} else {
|
||
this.pintuanList[i].timeMachine = null;
|
||
}
|
||
}
|
||
this.newList = this.pintuanList.filter(item => {
|
||
return item.end_time > res.timestamp;
|
||
});
|
||
this.$forceUpdate();
|
||
}
|
||
}
|
||
});
|
||
},
|
||
// 初始化渲染数据
|
||
getGroupDetail() {
|
||
this.$api.sendRequest({
|
||
url: '/pintuan/api/pintuangroup/info',
|
||
data: {
|
||
group_id: this.groupId
|
||
},
|
||
success: res => {
|
||
this.kill = res.data.pintuan_num - res.data.pintuan_count;
|
||
if (res.code == 0) {
|
||
if (res.data.end_time > res.timestamp) {
|
||
res.data.timeMachine = this.$util.countDown(res.data.end_time - res.timestamp);
|
||
} else {
|
||
res.data.timeMachine = null;
|
||
}
|
||
this.groupDetail = res.data;
|
||
this.pintuanPopShow = true;
|
||
if(this.groupDetail && this.groupDetail.status != 2){
|
||
this.groupId = 0;
|
||
this.goodsSkuDetail.group_id = 0;
|
||
this.resetPrice();
|
||
}
|
||
if(this.goodsSkuDetail.pintuan_type == 'ladder'){
|
||
if(this.groupDetail.pintuan_num == this.goodsSkuDetail.pintuan_num){
|
||
this.goodsSkuDetail.pintuan_num_field = 'pintuan_num';
|
||
}else if(this.groupDetail.pintuan_num == this.goodsSkuDetail.pintuan_num_2){
|
||
this.goodsSkuDetail.pintuan_num_field = 'pintuan_num_2';
|
||
}else if(this.groupDetail.pintuan_num == this.goodsSkuDetail.pintuan_num_3){
|
||
this.goodsSkuDetail.pintuan_num_field = 'pintuan_num_3';
|
||
}
|
||
|
||
}
|
||
}
|
||
this.$forceUpdate();
|
||
}
|
||
});
|
||
},
|
||
//打开拼团弹出框
|
||
openPinTuan(groupId, pintuan_num, time, headimg, head_id) {
|
||
if (this.memberId == head_id) {
|
||
this.$util.showToast({
|
||
title: "您不能参与自己的团"
|
||
});
|
||
return;
|
||
}
|
||
this.openPopup = true;
|
||
this.currentPintuan = {
|
||
groupId: groupId,
|
||
pintuan_num: pintuan_num,
|
||
timeMachine: this.$util.countDown(time),
|
||
headimg: headimg
|
||
};
|
||
this.$refs.pintuanPopup.open(() => {
|
||
this.goodsSkuDetail.group_id = 0;
|
||
this.openPopup = false;
|
||
});
|
||
},
|
||
closePinTuanPopup() {
|
||
this.$refs.pintuanPopup.close();
|
||
},
|
||
//参与拼团
|
||
joinPintuan() {
|
||
this.closePinTuanPopup();
|
||
this.goodsSkuDetail.group_id = this.currentPintuan.groupId;
|
||
this.goodsSkuDetail.show_price = this.goodsSkuDetail.pintuan_price;
|
||
this.goodsSkuDetail.save_price = (this.goodsSkuDetail.price - this.goodsSkuDetail.show_price) > 0 ? (this
|
||
.goodsSkuDetail
|
||
.price - this.goodsSkuDetail.show_price).toFixed(2) : 0;
|
||
this.$forceUpdate();
|
||
this.pintuan(false,this.currentPintuan.groupId);
|
||
},
|
||
pintuanImageError(index) {
|
||
this.pintuanList[index].headimg = this.$util.getDefaultImage().head;
|
||
this.$forceUpdate();
|
||
},
|
||
// 重置价格
|
||
resetPrice() {
|
||
// this.goodsSkuDetail.group_id = 0;
|
||
// this.goodsSkuDetail.show_price = this.goodsSkuDetail.promotion_price;
|
||
this.goodsSkuDetail.show_price = (this.goodsSkuDetail.group_id == 0 ? this.goodsSkuDetail
|
||
.promotion_price : this.goodsSkuDetail.pintuan_price);
|
||
|
||
this.goodsSkuDetail.save_price = (this.goodsSkuDetail.price - this.goodsSkuDetail.show_price) > 0 ? (this
|
||
.goodsSkuDetail
|
||
.price - this.goodsSkuDetail.show_price).toFixed(2) : 0;
|
||
this.$forceUpdate();
|
||
},
|
||
cutStrByte(str, len) {
|
||
if (!str || !len) {
|
||
//校验参数
|
||
return '';
|
||
}
|
||
let code = '1', // 默认返回code值,已截断
|
||
strLen = str.length, // 原字符串长度
|
||
cutStr;
|
||
if (strLen <= len / 2) {
|
||
//如果字符串长度小于截取长度的一半,则返回全部字符串
|
||
cutStr = str;
|
||
code = '0';
|
||
} else {
|
||
let strByteCount = 0; //遍历字符串
|
||
for (let i = 0; i < strLen; i++) {
|
||
strByteCount += this.getByteLen(str.charAt(i)); //中文字符字节加2 否则加1
|
||
if (strByteCount > len) {
|
||
//i从0开始 截断时大于len 只截断到第i个
|
||
cutStr = str.substring(0, i);
|
||
break;
|
||
} else if (strByteCount == len) {
|
||
cutStr = str.substring(0, i + 1);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (!cutStr) {
|
||
//cutstr为空,没有截断字符串
|
||
cutStr = str;
|
||
code = '0';
|
||
}
|
||
return cutStr;
|
||
},
|
||
getByteLen(val) {
|
||
//获取字节长度,全角字符两个单位长度,半角字符1个单位长度
|
||
let len = 0;
|
||
if (!val) {
|
||
return len;
|
||
}
|
||
for (let i = 0; i < val.length; i++) {
|
||
if (!val[i]) {
|
||
continue;
|
||
}
|
||
// 全角
|
||
if (val[i].match(/[^\x00-\xff]/gi) != null) {
|
||
len += 2;
|
||
} else {
|
||
len += 1;
|
||
}
|
||
}
|
||
return len;
|
||
},
|
||
/**
|
||
* 获取分享图
|
||
*/
|
||
getShareImg(){
|
||
let posterParams = {
|
||
id: this.pintuan_id
|
||
};
|
||
|
||
this.$api.sendRequest({
|
||
url: '/pintuan/api/goods/shareimg',
|
||
data: {
|
||
page: '/pages_promotion/pintuan/detail',
|
||
qrcode_param: JSON.stringify(posterParams)
|
||
},
|
||
success: res => {
|
||
if (res.code == 0) this.shareImg = res.data.path;
|
||
}
|
||
})
|
||
}
|
||
}
|
||
}
|