Files
2020-12-06 23:51:25 +08:00

646 lines
19 KiB
Vue
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.

<template>
<view class="bargain on">
<!-- 在header上加 on 为请求支援 -->
<!-- 当前登录的用户和url上携带的用户id不一致视为被邀请砍价 -->
<view class="wrapper bargain-box on user" v-if="bargainUserInfo && bargainUid != userInfo.uid">
<!-- <view class="people">
{{ bargainShare.lookCount }}人查看 丨 {{ bargainShare.shareCount }}人分享 丨 {{ bargainShare.userCount }}人参与
</view> -->
<!-- 帮助砍价、帮砍成功:-->
<view class="pictxt acea-row row-center-wrapper ">
<div class="bargain-header">
<view class="pictrue"><image :src="bargainUserInfo.avatar" /></view>
<view class="text">
{{ bargainUserInfo.nickname }}
<text>邀请您帮忙砍价</text>
</view>
</div>
</view>
</view>
<view class="wrapper bargain-box time on">
<div class="pictxt ">
<count-down
:isDay="true"
:tipText="'倒计时 '"
:dayText="' 天 '"
:hourText="' 时 '"
:minuteText="' 分 '"
:secondText="' 秒'"
:datatime="goodsDetail.stopTime"
></count-down>
</div>
</view>
<view class="wrapper bargain-box bargain-product">
<view class="pictxt acea-row row-between-wrapper" @click="openAlone">
<view class="pictrue">
<image :src="goodsDetail.image" />
<view class="bargain_view">
查看商品
<view class="iconfont icon-jiantou iconfonts"></view>
</view>
</view>
<view class="text acea-row row-column-around">
<view class="line2" v-text="goodsDetail.title"></view>
<view class="money font-color-red">
已砍至: ¥
<text class="num" v-text="bargainHelpCount.remainingPrice"></text>
</view>
<view class="acea-row row-middle">
<view class="successNum" v-text="'原价' + goodsDetail.price"></view>
<view class="successNum" v-text="'已有' + bargainSumCount + '人砍价成功'"></view>
</view>
</view>
</view>
<!-- 砍价进度条 -->
<view class="cu-progress acea-row row-middle round margin-top">
<view class="acea-row row-middle bg-red" :style="{ width: bargainHelpCount.pricePercent + '%' }"></view>
</view>
<!-- 砍价进度条下的金额 -->
<view class="balance acea-row row-between-wrapper">
<view v-text="'已砍' + bargainHelpCount.alreadyPrice + '元'"></view>
<view v-if="bargainHelpCount.price === 0">砍价成功</view>
<view v-else v-text="'还剩' + bargainHelpCount.price + '元'"></view>
</view>
<!-- 砍价成功:-->
<!--
surplusPrice 砍价剩余金额为0
bargainUid 砍价人为发起砍价用户
userBargainStatus 砍价状态为
-->
<view class="bargainSuccess" v-if="pay">
<span class="iconfont icon-xiaolian"></span>
恭喜您砍价成功,快去支付吧~
</view>
<!-- 参与砍价按钮 同一人-->
<view v-if="participate" class="bargainBnt" @click="goParticipate">立即发起砍价</view>
<!-- 邀请好友按钮 -->
<view v-if="inviteFriends" class="bargainBnt" @click="goPoster">邀请好友帮砍价</view>
<!-- 帮砍好友砍按钮 -->
<view v-if="helpFriendsBargain" class="bargainBnt" @click="getBargainHelp">帮好友砍一刀</view>
<!-- 发起砍价按钮 非同一人-->
<view v-if="bargain" class="bargainBnt" @click="getBargainStart">我也要砍价</view>
<!-- 支付按钮 -->
<view class="bargainBnt" @click="goPay" v-if="pay">立即支付</view>
<view class="bargainBnt on" @click="goList">抢更多商品</view>
<view class="tip">
已有
<span class="font-color-red" v-text="bargainHelpCount.count"></span>
位好友成功帮您砍价
</view>
<view class="lock"></view>
</view>
<view class="bargainGang bargain-box">
<view class="title font-color-red acea-row row-center-wrapper">
<view class="pictrue"><image src="@/static/images/left.png" /></view>
<view class="titleCon">砍价帮</view>
<view class="pictrue on"><image src="@/static/images/left.png" /></view>
</view>
<view class="list">
<view class="item acea-row row-between-wrapper" v-for="(item, bargainHelpListIndex) in bargainHelpList" :key="bargainHelpListIndex">
<view class="pictxt acea-row row-between-wrapper">
<view class="pictrue"><image :src="item.avatar" /></view>
<view class="text">
<view class="name line1" v-text="item.nickname"></view>
<view class="line1" v-text="item.add_time"></view>
</view>
</view>
<view class="money font-color-red">
<text class="iconfont icon-kanjia"></text>
砍掉{{ item.price }}
</view>
</view>
</view>
<view class="load font-color-red" v-if="!helpListStatus" @click="getBargainHelpList">点击加载更多</view>
<view class="lock"></view>
</view>
<view class="goodsDetails bargain-box">
<view class="title font-color-red acea-row row-center-wrapper">
<view class="pictrue"><image src="@/static/images/left.png" /></view>
<view class="titleCon">商品详情</view>
<view class="pictrue on"><image src="@/static/images/left.png" /></view>
</view>
<view class="conter" v-html="goodsDetail.description"></view>
<view class="lock"></view>
</view>
<view class="goodsDetails bargain-box">
<view class="title font-color-red acea-row row-center-wrapper">
<view class="pictrue"><image src="@/static/images/left.png" /></view>
<view class="titleCon">活动规则</view>
<view class="pictrue on"><image src="@/static/images/left.png" /></view>
</view>
<view class="conter" v-html="goodsDetail.rule"></view>
</view>
<view class="bargainTip" :class="active === true ? 'on' : ''">
<view class="cutOff" v-if="bargainUid === userInfo.uid">
您已砍掉
<text class="font-color-red" v-text="bargainHelpPrice"></text>
听说分享次数越多砍价成功的机会越大哦
</view>
<view class="cutOff on" v-else>
<view class="help font-color-red" v-text="'成功帮砍' + bargainHelpPrice + '元'"></view>
您也可以砍价低价拿哦快去挑选心仪的商品吧~
</view>
<view class="tipBnt" @click="goPoster" v-if="bargainUid === userInfo.uid">邀请好友帮砍价</view>
<view class="tipBnt" @click="getBargainStart" v-else>我也要参与</view>
</view>
<view class="mask" @touchmove.prevent :hidden="active === false" @click="close"></view>
</view>
</template>
<script>
import CountDown from '@/components/CountDown';
import {
getBargainDetail,
getBargainShare,
getBargainStart,
getBargainHelp,
getBargainHelpPrice,
getBargainHelpList,
getBargainHelpCount,
getBargainStartUser
} from '@/api/activity';
import { postCartAdd } from '@/api/store';
import { mapGetters } from 'vuex';
import {} from '@/libs/wechat';
import { isWeixin, parseQuery, handleQrCode } from '@/utils/index';
const NAME = 'DargainDetails';
export default {
name: 'DargainDetails',
components: {
CountDown
},
props: {},
data: function() {
return {
bargainId: 0, //砍价编号
bargainSumCount: 0, //砍价成功人数
activeMsg: '',
active: false,
bargainHelpPrice: 0, //砍掉金额
bargainHelpList: [],
helpListStatus: false, //砍价列表是否获取完成 false 未完成 true 完成
page: 1, //页码
limit: 2, //数量
pricePercent: 0, //砍价进度条
bargainShare: {}, // 砍价分享的消息
bargainHelpCount: {}, // 砍价的信息数据
goodsDetail: {}, // 商品的详情
bargainUserInfo: [], // 开启砍价用户信息
bargainUid: 0, // 参与砍价的用户
pay: false, // 支付
bargain: false, // 发起砍价
participate: false, // 参与砍价
inviteFriends: false, // 邀请好友
helpFriendsBargain: false, // 帮好友砍
bargainSuccess: false, // 帮好友砍价成功
mainBargainSuccess: false // 砍价成功
};
},
computed: mapGetters(['userInfo', 'isLogin']),
mounted: function() {
this.mountedStart();
},
methods: {
// 开始处理砍价逻辑
mountedStart: function() {
var that = this;
let url = handleQrCode();
// bargainId 砍价商品id
// bargainUid 发起砍价人
if (url) {
// 通过二维码进来
that.bargainId = url.bargainId;
that.bargainUid = url.partake;
} else {
// 正常途径进来
that.bargainId = that.$yroute.query.id;
that.bargainUid = that.$yroute.query.partake;
}
if (this.bargainUid == 0 || !this.bargainUid) {
// url未携带用户uid填上登录用户uid跳转
that.bargainUid = that.userInfo.uid;
}
console.log(this);
// 获取商品详情
that.getBargainDetail();
// 砍价数据统计
that.getBargainShare(0);
if (that.bargainUid !== that.userInfo.uid) {
that.getBargainStartUser();
}
},
// 发起砍价
goParticipate() {
//发起人和当前用户为同一人
if (this.bargainUid === this.userInfo.uid) {
// 变更为当前用户砍价页面
this.getBargainStart();
} else {
// 发起人与当前用户非同一人,变更为发起人的砍价页面
this.getBargainStartUser();
}
this.getBargainHelpCount();
},
// 查看商品
openAlone: function() {
this.$yrouter.push({
path: '/pages/shop/GoodsCon/index',
query: {
id: this.goodsDetail.productId
}
});
},
// 砍价完成,去支付
goPay: function() {
var data = {};
var that = this;
data.productId = that.goodsDetail.productId;
data.cartNum = that.goodsDetail.num;
data.uniqueId = '';
data.bargainId = that.bargainId;
data.new = 1;
postCartAdd(data)
.then(res => {
that.$yrouter.push({
path: '/pages/order/OrderSubmission/index',
query: {
id: res.data.cartId
}
});
})
.catch(err => {
uni.showToast({
title: err.msg || err.response.data.msg || err.response.data.message,
icon: 'none',
duration: 2000
});
});
},
// 生成海报
goPoster: function() {
var that = this;
that.getBargainShare(that.bargainId);
this.$yrouter.push({
path: '/pages/activity/Poster/index',
query: {
id: that.bargainId,
type: 2
}
});
},
// 跳转砍价商品列表
goList: function() {
this.$yrouter.push({
path: '/pages/activity/GoodsBargain/index'
});
},
//砍价分享
//bargainId 0 获取 查看人数 分享人数 参与人数
//bargainId 砍价产品编号 添加分享次数 获取 查看人数 分享人数 参与人数
getBargainShare: function(bargainId) {
var that = this;
getBargainShare({
bargainId: bargainId
}).then(res => {
that.bargainShare = res.data;
});
},
// 获取产品详情
getBargainDetail: function() {
var that = this;
uni.showLoading({
title: '加载中',
mask: true
});
getBargainDetail(that.bargainId)
.then(res => {
uni.hideLoading();
that.goodsDetail = res.data.bargain;
that.goodsDetail.description = that.goodsDetail.description.replace(/\<img/gi, '<img style="max-width:100%;height:auto;"');
that.goodsDetail.rule = that.goodsDetail.rule.replace(/\<img/gi, '<img style="max-width:100%;height:auto;"');
that.goodsDetail.stopTime = that.goodsDetail.stopTime / 1000;
that.getBargainHelpCount();
})
.catch(res => {
uni.hideLoading();
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
});
},
// 开启砍价-发起人与当前用户非同一人
getBargainStart: function() {
var that = this;
getBargainStart({
bargainId: that.bargainId
})
.then(() => {
that.bargainUid = that.userInfo.uid;
that.getBargainHelp();
that.getBargainHelpCount();
})
.catch(res => {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
});
},
// 参与砍价
getBargainHelp: function() {
var that = this;
if (this.bargainHelpCount.price === 0 && that.bargainUid !== that.userInfo.uid) {
return uni.showToast({
title: '好友已经砍价成功',
icon: 'success',
duration: 2000
});
}
var data = {
bargainId: that.bargainId,
bargainUserUid: that.bargainUid
};
getBargainHelp(data)
.then(res => {
that.activeMsg = res.data.status;
if (res.data.status === 'SUCCESSFUL' && that.bargainUid !== that.userInfo.uid) {
uni.showToast({
title: '您已经砍过了',
icon: 'none',
duration: 2000
});
return;
}
that.helpListStatus = false;
that.page = 1;
that.bargainHelpList = [];
that.getBargainHelpPrice();
})
.catch(res => {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
});
},
//获取砍掉的金额
getBargainHelpPrice: function() {
var that = this;
getBargainHelpPrice({
bargainId: that.bargainId,
bargainUserUid: that.bargainUid
})
.then(res => {
that.bargainHelpPrice = res.data.price;
that.getBargainHelpCount();
that.getBargainHelpList();
switch (that.activeMsg) {
case 'SUCCESSFUL':
break;
case 'SUCCESS':
that.active = true;
break;
}
})
.catch(res => {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
});
},
// 砍价帮助列表
getBargainHelpList: function() {
var that = this;
if (that.helpListStatus === true) return;
getBargainHelpList({
bargainId: that.bargainId,
bargainUserUid: that.bargainUid,
page: that.page,
limit: that.limit
})
.then(res => {
that.helpListStatus = res.data.length < that.limit;
that.page++;
if (res.data) {
that.bargainHelpList.push.apply(that.bargainHelpList, res.data);
}
})
.catch(err => {
if (!err.msg) {
return;
}
uni.showToast({
title: err.msg || err.response.data.msg || err.response.data.message,
icon: 'none',
duration: 2000
});
});
},
// 砍价 砍价帮总人数、剩余金额、进度条、已经砍掉的价格
getBargainHelpCount: function() {
getBargainHelpCount({
bargainId: this.bargainId,
bargainUserUid: this.bargainUid
})
.then(res => {
// 剩余砍价金额,显示已砍至¥** 使用 = 商品价格 - 已经砍掉的金额
let remainingPrice = (this.goodsDetail.price - res.data.alreadyPrice).toFixed(2);
this.bargainHelpCount = {
...res.data,
remainingPrice
};
this.handleButtonStatus();
})
.catch(err => {
if (!err.msg) {
return;
}
uni.showToast({
title: err.msg || err.response.data.msg || err.response.data.message,
icon: 'none',
duration: 2000
});
});
},
// 判断是否可以支付
handleButtonStatus() {
// 砍价按钮分为
// 1.参与砍价 ==> 发起人与当前用户为同一人 && 未参与
if (this.bargainUid === this.userInfo.uid && this.bargainHelpCount.status == 0) {
this.participate = true;
} else {
this.participate = false;
}
// 2.邀请好友 ==> 发起人与当前用户同一人 && 已参与未过期 && 剩余金额>0
if (this.bargainUid === this.userInfo.uid && this.bargainHelpCount.status == 1 && this.bargainHelpCount.price > 0) {
this.inviteFriends = true;
} else {
this.inviteFriends = false;
}
// 3.帮好友砍价 ==> 发起人与当前用户非一人 && 未参与未过期 && 剩余金额>0 && 为砍价
if (
this.bargainUid != this.userInfo.uid &&
this.bargainHelpCount.status == 1 &&
// this.bargainHelpCount.userBargainStatus &&
this.bargainHelpCount.price > 0
) {
this.helpFriendsBargain = true;
} else {
this.helpFriendsBargain = false;
}
// 4.支付 ==> 发起人与当前用户同一人 && 已参与未过期 && 剩余金额<=0
if (this.bargainUid === this.userInfo.uid && this.bargainHelpCount.status == 1 && this.bargainHelpCount.price <= 0) {
this.pay = true;
} else {
this.pay = false;
}
// 5.砍价人发起新的砍价 ==> 发起人与当前用户非一人 && 未参与
if (this.bargainUid != this.userInfo.uid) {
this.bargain = true;
} else {
this.bargain = false;
}
// 砍价弹窗
// 1.发起人砍价成功 ==> 发起人与当前用户同一人 && 已参与未过期
// 2.砍价人砍价成功 ==> 发起人与当前用户非一人 && 已参与未过期
// 3.已砍价 ==> 已参与 && 砍价状态为 true
},
// 获取开启砍价用户信息
// 参与砍价,为同一人发起砍价后
getBargainStartUser: function() {
var that = this;
getBargainStartUser({
bargainId: that.bargainId,
bargainUserUid: that.bargainUid
})
.then(res => {
that.bargainUserInfo = res.data;
that.getBargainHelpList();
})
.catch(res => {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
});
},
// 关闭弹窗
close: function() {
this.active = false;
},
// 设置微信分享
onShareAppMessage: function() {
return {
title: this.storeInfo.title,
imageUrl: this.storeInfo.image,
path: 'pages/activity/DargainDetails/index?id=' + this.storeInfo.id + '&spread=' + uni.getStorageSync('uid'),
success(res) {
uni.showToast({
title: '分享成功'
});
},
fail(res) {
uni.showToast({
title: '分享失败',
icon: 'none'
});
}
};
}
},
onShareAppMessage() {
return {
path: `/pages/activity/DargainDetails/index/?id=${this.$yroute.query.id}&partake=${this.userInfo.uid}`
};
}
};
</script>
<style lang="less">
.bargain {
&.on {
.bargain-box {
background: #fff;
width: auto;
margin: 0 20rpx;
border: 0;
}
.header {
height: auto;
text-align: left;
.time {
text-align: left;
font-size: 24rpx;
margin: 0;
padding: 0;
padding: 20rpx;
width: auto;
height: auto;
}
}
}
}
page {
background-color: #f5f5f5 !important;
}
.bargainBnt_hui {
font-size: 0.3 * 100rpx;
font-weight: bold;
color: #fff;
width: 6 * 100rpx;
height: 0.8 * 100rpx;
border-radius: 0.4 * 100rpx;
background: #bbb;
text-align: center;
line-height: 0.8 * 100rpx;
margin-top: 0.32 * 100rpx;
}
.bargain_view {
left: 0;
right: 0;
height: 0.48 * 100rpx;
background: rgba(0, 0, 0, 0.5);
opacity: 1;
border-radius: 0 0 0.06 * 100rpx 0.06 * 100rpx;
position: absolute;
bottom: 0;
font-size: 0.22 * 100rpx;
color: #fff;
text-align: center;
line-height: 0.48 * 100rpx;
}
.iconfonts {
font-size: 0.22 * 100rpx;
}
</style>