You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1424 lines
39 KiB
1424 lines
39 KiB
<template>
|
|
<view class="details_contanier">
|
|
<view class="details_head" v-if='detailsMessage && detailsMessage.user && detailsMessage.user.meta' >
|
|
<view class="head_photo">
|
|
<image :src="detailsMessage.user.meta.avatar" />
|
|
</view>
|
|
<view class="head_message">
|
|
<view class="name">
|
|
{{detailsMessage.user.meta.nick_name}}
|
|
</view>
|
|
<view class="notice">
|
|
在果酱小店发现好物,一起来砍价拿
|
|
</view>
|
|
</view>
|
|
<view class="rule" @tap="showRule">
|
|
活动规则
|
|
</view>
|
|
</view>
|
|
<view class="details_body" v-if='detailsMessage'>
|
|
<view class="goods_message" v-if='detailsMessage.reduce'>
|
|
<view class="goods_left" v-if='detailsMessage.reduce.goods'>
|
|
<image :src="detailsMessage.reduce.goods.img" mode="widthFix" />
|
|
</view>
|
|
<view class="goods_right" v-if='detailsMessage.reduce.goods'>
|
|
<view class="goods_name">
|
|
{{detailsMessage.reduce.goods.name}}
|
|
</view>
|
|
<view class="past_price" v-if='detailsMessage.reduce.goods'>
|
|
原价¥{{detailsMessage.reduce.goods.max_price}}
|
|
</view>
|
|
<view class="new_price">
|
|
砍后价¥{{detailsMessage.reduce.price}}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="text_message" v-if="overTime == false && overActivity == false" :style="{marginLeft:left+'%'}">
|
|
已砍{{detailsMessage.reduce_amount}}元
|
|
</view>
|
|
<view class="text-copy" v-if="overTime==true || overActivity==true" :style="{marginLeft:left+'%'}">
|
|
已砍{{detailsMessage.reduce_amount}}元
|
|
</view>
|
|
<view class="bar">
|
|
<progress :percent="detailsMessage.progress_par*100" :color="'#' + setColor" border-radius="3px" />
|
|
</view>
|
|
<view class="tips" v-if="overTime == false && overActivity == false">
|
|
已砍{{detailsMessage.reduce_amount}}元,还可砍{{detailsMessage.reduce_surplus_amount}}元
|
|
</view>
|
|
<view class="tips" v-if="overTime == true && overActivity == false">
|
|
很遗憾超时了,本次砍价失败
|
|
</view>
|
|
<view class="tips" v-if="overActivity == true">
|
|
很遗憾活动已结束
|
|
</view>
|
|
<view class="tips" v-if="is_leader == 0 && overActivity == false &&overTime == false">
|
|
帮我砍价,你拿红包,新人有礼
|
|
</view>
|
|
<!-- 后台没设置可提前购买-->
|
|
<button class="btn" open-type='share' v-if="is_leader == 1 && buy == false && overTime == false && overActivity == false">
|
|
<text>{{message}}</text>
|
|
</button>
|
|
<view class="btn" @tap="goStore" v-if="is_leader==1 &&overActivity==true">去商城看看</view>
|
|
<view class="btn" @tap="goStore" v-if="is_leader==0 && overTime==true ">去商城看看</view>
|
|
<!-- 后台设置了可提前购买-->
|
|
<view class="can_buy" v-if="is_leader==1 && buy && overTime==false && overActivity==false">
|
|
<!-- #ifdef MP-WEIXIN || APP-PLUS-->
|
|
<view class="invite" v-if="over==false" @tap="helpShare">
|
|
<text>{{message}}</text>
|
|
</view>
|
|
<!-- #endif -->
|
|
<!-- #ifdef H5 -->
|
|
<view class="invite" v-if="over==false" @tap="togglePopup('middle-img')">
|
|
<text>{{message}}</text>
|
|
</view>
|
|
<!-- #endif -->
|
|
<view class="now_buy" @tap="showSelect" v-if="over==false">马上购买</view>
|
|
<!-- 活动未结束但是用户砍价已完成-->
|
|
<view class="btn" @tap="showSelect" v-if="over==true && pay==false">{{detailsMessage.reduce_surplus_amount}}元购买商品</view>
|
|
<view class="btn" @tap="goStore" v-if="over==true && pay==true">订单已支付,去商城看看</view>
|
|
</view>
|
|
<!-- 用户时间结束-->
|
|
<view class="btn2" v-if="is_leader==1 && overTime==true && overActivity==false">
|
|
<view class="child_btn1" @tap="bargainAgin">
|
|
重新发起砍价
|
|
</view>
|
|
<view class="child_btn2" @tap.stop="goStore">
|
|
去商城看看
|
|
</view>
|
|
</view>
|
|
<view class="btn" @tap="bargain" v-if="is_leader==0 && step==1 && overTime==false && overActivity==false">
|
|
<text>{{message}}</text>
|
|
</view>
|
|
|
|
<view class="btn2" v-if="is_leader==0 && step==2 && overActivity==false">
|
|
<view class="child_btn1" @tap="joinBargain">
|
|
{{message}}
|
|
</view>
|
|
<!-- #ifdef MP-WEIXIN || APP-PLUS -->
|
|
<view class="child_btn2" @tap="helpShare" v-if="over==false">
|
|
帮好友分享
|
|
</view>
|
|
<!-- #endif -->
|
|
|
|
<!-- #ifdef H5 -->
|
|
<view class="child_btn2" @tap="togglePopup('middle-img')" v-if="over==false">
|
|
帮好友分享
|
|
</view>
|
|
<!-- #endif -->
|
|
<view class="child_btn2" @tap="goStore" v-else>
|
|
去商城看看
|
|
</view>
|
|
</view>
|
|
<view class="count_down" v-if="overTime==false && overActivity==false">
|
|
<!-- <seckill :end="detailsMessage.ends_at" :starts="detailsMessage.starts_at" :server="server" typename="砍价"></seckill> -->
|
|
<countdown :value="detailsMessage.ends_at" detail-class="text-color"></countdown>
|
|
</view>
|
|
<view class="person_number" v-if="overActivity==false">
|
|
<view class="left"></view>
|
|
<view class="right"></view>
|
|
<view class="title" v-if="overActivity==false">
|
|
砍价英雄榜
|
|
</view>
|
|
<view class="person_tips" v-if="detailsMessage.users && detailsMessage.users.length==0 && overActivity==false">
|
|
快去邀请英雄助力吧
|
|
</view>
|
|
<view class="person_list" v-if="detailsMessage.users && detailsMessage.users.length!==0 && overActivity==false">
|
|
<view class="hero_box" v-for="(item,index) in detailsMessage.users" :key='index'>
|
|
<view class="hero_message">
|
|
<view class="head_img">
|
|
<image :src="item.meta.avatar" />
|
|
</view>
|
|
<view class="message_box">
|
|
<view class="message_name">
|
|
{{item.meta.nick_name}}
|
|
</view>
|
|
<view class="message_share">
|
|
分享给好友,免费拿好货
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="reduce_money">
|
|
已成功砍掉{{item.reduce_amount}}元
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!-- 活动规则弹层-->
|
|
<view class="box_body" v-if="show" @tap.stop="closeRule" @touchmove.stop="true">
|
|
<scroll-view scroll-y class="rule_box" @tap.stop="showRule">
|
|
<u-parse :content="rule" />
|
|
</scroll-view>
|
|
<view class="iconfont icon-close" @tap="closeRule"></view>
|
|
</view>
|
|
<!-- 砍价成功弹层-->
|
|
<view class="box_body" @touchmove.stop="true" v-if="showNotice && is_leader==0" @tap="closeNotice">
|
|
<view class="notice_box" @tap.stop="showNoticeInfo">
|
|
<view class="iconfont icon-xiaolian1"></view>
|
|
<view class="thanks">
|
|
<text>谢英雄拔刀相助,为我</text>
|
|
<text>砍掉{{reduce_amount}}元</text>
|
|
</view>
|
|
<view class="true_btn" @tap.stop="closeNotice">
|
|
确定
|
|
</view>
|
|
<view class="gostore" @tap.stop="goStore">
|
|
去商城看看
|
|
</view>
|
|
</view>
|
|
<view class="iconfont icon-close" @tap="closeNotice"></view>
|
|
</view>
|
|
<!-- 分享弹层-->
|
|
<view class="box_body" @touchmove.stop="true" v-if="showShare">
|
|
<view class="share_box">
|
|
<view class="share_way">
|
|
<!-- #ifdef MP-WEIXIN -->
|
|
<button class="friends" open-type="share">
|
|
<view class="iconfont icon--weixin">
|
|
|
|
</view>
|
|
<view class="text">
|
|
微信好友
|
|
</view>
|
|
</button>
|
|
<!-- #endif -->
|
|
<!-- #ifdef APP-PLUS -->
|
|
<button class="friends" @click="shareapp">
|
|
<view class="iconfont icon--weixin">
|
|
|
|
</view>
|
|
<view class="text">
|
|
微信好友
|
|
</view>
|
|
</button>
|
|
<!-- #endif -->
|
|
<view class="post" @tap="createShareImg">
|
|
<view class="iconfont icon-tupian">
|
|
|
|
</view>
|
|
<view class="text">
|
|
海报分享
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="exit" @tap="closeShare">取消</view>
|
|
</view>
|
|
</view>
|
|
<view class="maks" :class="!show_select ? 'cur' : ''" @tap="closeSelect">
|
|
|
|
</view>
|
|
<view class="detail-popup" v-show="!show_select">
|
|
<view class="select_goods_container">
|
|
<!--关闭按钮-->
|
|
<view class="select_goods_cloese" @tap="closeSelect"></view>
|
|
<view class="select_goods_header">
|
|
|
|
<view class="img_box">
|
|
<image v-if="select_product && select_product.img" :src="select_product.img" :alt="select_product.sku"></image>
|
|
<image v-else :src="detailsMessage.reduce.goods.img" alt></image>
|
|
</view>
|
|
|
|
<view class="price_item">
|
|
<span v-if="select_product">
|
|
<text>¥{{time_price}}</text>
|
|
</span>
|
|
<span style="font-weight:bold;color:#ee2b1d;" v-else>
|
|
{{price_interval}}
|
|
</span>
|
|
<!--<text v-else>¥{{price}}</text>-->
|
|
<!--<text v-else>{{detailData.meta.groupon.groupon_price}}</text>-->
|
|
<!-- <text v-if="detailData.data.shop_show_store == 1">库存{{store_count}}</text> -->
|
|
</view>
|
|
|
|
</view>
|
|
|
|
<view class="select_spec">
|
|
<view class="spec_line" v-for="(spec,index) in specs" :key="index">
|
|
<view class="spec_title">{{spec.label}}</view>
|
|
<view class="spec_value">
|
|
<view class="spec_block" :class=" !!item.disabled ? 'disabled' : '' " v-for="(item,index) in spec.values"
|
|
:key="index" :data-key="index" :data-index="item.index" :data-disabled="item.disabled ? 1 : 0" :data-id="item.id"
|
|
:data-active="item.active ? 1 : 0" @tap="selectSpec">
|
|
|
|
<view class="spec_text" v-if="(item.alias || item.value) && item.spec_img !== ''">
|
|
{{item.alias || item.value}}
|
|
|
|
<view v-if="!!item.active" class="border-color">
|
|
|
|
</view>
|
|
</view>
|
|
<view class="spec_text" v-if="!item.spec_img && !item.color">
|
|
{{item.alias || item.value}}
|
|
|
|
<view v-if="!!item.active" class="border-color">
|
|
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<!--<view class="spec_list" v-if="{{spec.id != 2}}">尺码表</view>-->
|
|
</view>
|
|
</view>
|
|
|
|
<view class="spec_line">
|
|
<view class="num_title">数量</view>
|
|
<view class="num_value">
|
|
<text :data-index="0">-</text>
|
|
<view class="none_border">
|
|
<input @input="modifyCount" :value="select_count" type="number" confirm-type="done" />
|
|
</view>
|
|
<text :data-index="1">+</text>
|
|
|
|
</view>
|
|
<!-- <view class="purchase" v-if="detailData.data.user_limit">
|
|
本商品每人限购{{detailData.data.user_limit}}件
|
|
</view> -->
|
|
</view>
|
|
|
|
<button class="button" v-if="!canBuy" type="primary" @tap="confirmF">确定</button>
|
|
<button class="button" v-else type="primary" @tap="confirmF">确定</button>
|
|
|
|
<!--<view class="button {{ canBuy ? 'disabled' : '' }}" bindtap="confirm">-->
|
|
|
|
<!--<!–<submit-button v-ref:button bindsubmit="confirm" :status="disallow_cart ? 'disabled' : 'normal'">确定</submit-button>–>-->
|
|
<!--</view>-->
|
|
</view>
|
|
</view>
|
|
|
|
</view>
|
|
<view class="share-img-box" :class="share_img ? 'cur' : ''" v-if="showShareImg">
|
|
<view class="imgs-box">
|
|
<view class="img">
|
|
<image :src="shareImg"></image>
|
|
</view>
|
|
<view class="text">
|
|
保存图片后,可分享到朋友圈
|
|
</view>
|
|
<view class="save" @tap="downImg">
|
|
保存图片
|
|
</view>
|
|
<i class="iconfont icon-delete" @tap="changeImg"></i>
|
|
</view>
|
|
</view>
|
|
<!--用户拒绝下载图片授权弹出-->
|
|
<alert :is_refused="is_refused" @close="closeAlert"></alert>
|
|
<!-- h5分享 -->
|
|
<!-- #ifdef H5 -->
|
|
<view class='shoppop'>
|
|
<uni-popup :show="type === 'middle-img'" position="top" mode="fixed" @hidePopup="togglePopup('')">
|
|
<view class="uni-center center-box">
|
|
<image style="position: absolute; top: 0;right:0" @tap="togglePopup('')" class="image" src="/static/ico-share-wechat.png" />
|
|
</view>
|
|
</uni-popup>
|
|
</view>
|
|
<!-- #endif -->
|
|
</view>
|
|
|
|
</template>
|
|
|
|
<script>
|
|
// 引入安卓权限
|
|
import permision from "@/common/js/permission.js"
|
|
import alert from "@/components/alert/alert";
|
|
import countdown from "@/components/Countdown/Countdown.vue";
|
|
import uParse from '@/components/gaoyia-parse/parse.vue';
|
|
export default {
|
|
data() {
|
|
return{
|
|
userInfo: {},
|
|
left: 0,
|
|
select_count: 1,
|
|
show: false, //控制活动规则的显示
|
|
rule: '', //活动规则
|
|
number: 17,
|
|
skuTable: {},
|
|
is_leader: 0, //1为自己,0为好友
|
|
message: '',
|
|
showShare: false, //显示分享
|
|
showNotice: false, //控制砍价后弹框显示
|
|
theReduce: 10, //
|
|
step: 1, //控制好友按钮显示,1为还未助力;2为助力成功;3为助力失败
|
|
showTell: false, //控制活动结束,好友新开零元拿显示的弹层
|
|
buy: true, //系统是否设置了可提前购买
|
|
over: false, //砍价是否完成
|
|
overTime: false, //用户时间是否超时
|
|
overActivity: false, //活动是否结束
|
|
ends_at: '', //结束时间
|
|
starts_at: '', //开始时间
|
|
setColor: 'fb5054', //进度条的颜色
|
|
page: 1, //页
|
|
show_select: true, //选尺寸
|
|
heroList: [], //砍价英雄榜的数据
|
|
showShareImg: false, //展示分享图片
|
|
pay: false, //是否已经支付
|
|
canBuy: true,
|
|
detailsMessage:'',
|
|
reduce_id:'',
|
|
id:'',
|
|
goods_id:'',
|
|
name:'',
|
|
store_count:'',
|
|
market_price:'',
|
|
time_price:'',
|
|
select_product:{},
|
|
price_interval:'',
|
|
specs:[],
|
|
price:'',
|
|
show_ten:'',
|
|
reduce_amount:'',
|
|
share_img:'',
|
|
shareImg:'',
|
|
is_refused:false,
|
|
reduce_items_id:'',
|
|
type: 0
|
|
}
|
|
},
|
|
components: {
|
|
countdown,
|
|
uParse,
|
|
alert
|
|
},
|
|
onLoad(e) {
|
|
// #ifdef H5
|
|
var token = this.$cookieStorage.get('user_token');
|
|
if(!token){
|
|
var env = {
|
|
isIPad: /ipad/i.test(window.navigator.userAgent),
|
|
isIphone: /iphone|ipad|ipod/i.test(window.navigator.userAgent),
|
|
isWechat: /MicroMessenger/i.test(window.navigator.userAgent)
|
|
}
|
|
if(env.isWechat){
|
|
if(e.openid){
|
|
this.$cookieStorage.set('openid',e.openid)
|
|
}
|
|
var openid = this.$cookieStorage.get('openid') || e.openid;
|
|
if(openid){
|
|
this.postNewQuickLogin(openid);
|
|
} else{
|
|
let origin = window.location.origin;
|
|
let url = origin+'/pages/bargain/detail/detail?reduce_items_id='+e.reduce_items_id;
|
|
window.location.href = this.$config.GLOBAL.baseUrl+'oauth/wxOauth?redirect_url='+encodeURIComponent(url);
|
|
}
|
|
} else{
|
|
let url = getUrl()+'?reduce_items_id='+e.reduce_items_id;
|
|
wx.navigateTo({
|
|
url:'/pages/user/loginType/loginType?url='+url
|
|
})
|
|
}
|
|
}
|
|
// #endif
|
|
var reduce_items_id = decodeURIComponent(e.scene)
|
|
if (reduce_items_id > 0) {
|
|
|
|
this.setData({
|
|
reduce_items_id: reduce_items_id
|
|
})
|
|
this.getMessage()
|
|
}
|
|
this.getServer()
|
|
if (e.reduce_items_id) {
|
|
this.reduce_items_id = e.reduce_items_id;
|
|
this.getMessage()
|
|
|
|
}
|
|
if (this.overTime == true || this.overActivity == true) {
|
|
this.setData({
|
|
setColor: 'AAAAAA'
|
|
})
|
|
}
|
|
var windowHeight = wx.getSystemInfoSync().windowHeight //获取设备的高度
|
|
this.Height = windowHeight;
|
|
this.showWitch();
|
|
|
|
},
|
|
onShow() {
|
|
this.getRule()
|
|
},
|
|
onShareAppMessage(res) {
|
|
if (res.from === 'button') {
|
|
// 来自页面内转发按钮
|
|
this.closeShare();
|
|
}
|
|
return {
|
|
title: '砍价帮帮忙',
|
|
path: `/pages/bargain/detail/detail?reduce_items_id=${this.reduce_items_id}`
|
|
}
|
|
},
|
|
onPullDownRefresh() {
|
|
this.getMessage()
|
|
|
|
},
|
|
methods: {
|
|
postNewQuickLogin(open_id){
|
|
wx.showLoading({
|
|
title: '正在登录',
|
|
mask: true
|
|
});
|
|
this.$http.post({
|
|
api:'api/oauth/newQuickLogin',
|
|
data:{
|
|
open_id:open_id
|
|
}
|
|
}).then(res=>{
|
|
res = res.data;
|
|
if(res.status){
|
|
if(res.data.access_token){
|
|
var access_token = res.data.token_type + ' ' + res.data.access_token;
|
|
var expires_in = res.data.expires_in || 315360000;
|
|
this.$cookieStorage.set("user_token", access_token, expires_in);
|
|
//如果用户没有绑定手机号
|
|
if(res.data.has_bind_mobile == 0){
|
|
wx.reLaunch({
|
|
url:'/pages/user/bindingphone/bindingphone'
|
|
})
|
|
}
|
|
} else{
|
|
wx.showModal({
|
|
content: res.message || '请求失败,请重试',
|
|
showCancel: false
|
|
});
|
|
|
|
}
|
|
|
|
} else{
|
|
wx.showModal({
|
|
content: res.message || '请求失败,请重试',
|
|
showCancel: false
|
|
});
|
|
}
|
|
wx.hideLoading()
|
|
}).catch(rej=>{
|
|
wx.showModal({
|
|
content: rej.message || '请求失败,请重试',
|
|
showCancel: false
|
|
});
|
|
wx.hideLoading()
|
|
|
|
})
|
|
},
|
|
togglePopup(type) {
|
|
this.type = type;
|
|
},
|
|
closeAlert() {
|
|
this.setData({
|
|
is_refused: false
|
|
});
|
|
},
|
|
shareapp(){
|
|
var reduce_items_id = this.reduce_items_id;
|
|
uni.getProvider({
|
|
service:'share',
|
|
success:function(res){
|
|
uni.share({
|
|
provider: "weixin",
|
|
scene: "WXSceneSession",
|
|
type: 5,
|
|
title:'砍价帮帮忙',
|
|
imageUrl:'https://cdn.guojiang.club/guojiang_logo.png',
|
|
miniProgram:{
|
|
id:'gh_72e65196278a',//小程序原始id
|
|
path:'pages/bargain/details/details?reduce_items_id='+ reduce_items_id,
|
|
type:0,
|
|
webUrl:'https://guojiang.club'
|
|
},
|
|
success: function (res) {
|
|
console.log("success:" + JSON.stringify(res));
|
|
},
|
|
fail: function (err) {
|
|
console.log("fail:" + JSON.stringify(err));
|
|
}
|
|
});
|
|
}
|
|
})
|
|
this.closeShare();
|
|
|
|
|
|
},
|
|
selectSpec(e) {
|
|
var spec = {
|
|
key: e.currentTarget.dataset.key,
|
|
index: e.currentTarget.dataset.index,
|
|
disabled: Number(e.currentTarget.dataset.disabled),
|
|
active: Number(e.currentTarget.dataset.active),
|
|
id: Number(e.currentTarget.dataset.id)
|
|
};
|
|
if (spec.disabled) return;
|
|
var specs = this.specs;
|
|
|
|
if (!spec.active) {
|
|
for (let item of specs[spec.index].values) {
|
|
if (item.active) {
|
|
item.active = false;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
specs[spec.index].values[spec.key].active = !specs[spec.index].values[spec.key].active;
|
|
spec.active = !spec.active;
|
|
specs[spec.index].select = spec.active ? spec.id : '';
|
|
this.setData({
|
|
specs: specs
|
|
});
|
|
var canBuy = this.disallow_cart();
|
|
this.setData({
|
|
canBuy: canBuy
|
|
}); // this.queryCommodityStore(id, spec.index);
|
|
|
|
this.specStore(this.result, spec.index);
|
|
},
|
|
specStore(result, key) {
|
|
|
|
|
|
var query = {
|
|
id:this.goods_id
|
|
};
|
|
var data = result.data;
|
|
var specs = this.specs;
|
|
|
|
if (key === undefined) {
|
|
specs.forEach(spec => {
|
|
for (let v of spec.values) {
|
|
v.disabled = !data[v.id] || data[v.id].count == 0;
|
|
}
|
|
});
|
|
this.setData({
|
|
specs: specs,
|
|
skuTable: result.table
|
|
});
|
|
specs = this.specs;
|
|
var canBuy = this.disallow_cart();
|
|
this.setData({
|
|
canBuy: canBuy
|
|
});
|
|
specs.forEach(spec => {
|
|
let name = 'spec[' + spec.id + ']';
|
|
|
|
if (query[name]) {
|
|
let id = query[name];
|
|
|
|
for (let v of spec.values) {
|
|
if (v.id == id && !v.disabled && data[v.id] && data[v.id].count) {
|
|
v.active = true;
|
|
spec.select = v.id;
|
|
this.setData({
|
|
specs: specs
|
|
});
|
|
specs = this.specs;
|
|
var canBuy = this.disallow_cart();
|
|
this.setData({
|
|
canBuy: canBuy
|
|
});
|
|
this.specStore(result, v.index);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!spec.select) {
|
|
for (let v of spec.values) {
|
|
if (!v.disabled && data[v.id] && data[v.id].count) {
|
|
v.active = true;
|
|
spec.select = v.id;
|
|
this.setData({
|
|
specs: specs
|
|
});
|
|
specs = this.specs;
|
|
var canBuy = this.disallow_cart();
|
|
this.setData({
|
|
canBuy: canBuy
|
|
}); // this.$emit('specStore', result, v.index);
|
|
|
|
this.specStore(result, v.index);
|
|
return;
|
|
}
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
this.setData({
|
|
specs: specs
|
|
});
|
|
});
|
|
return;
|
|
}
|
|
|
|
var spec = specs[key];
|
|
|
|
if (spec.select) {
|
|
this.setData({
|
|
store_count: data[spec.select].count
|
|
});
|
|
|
|
for (let i = 0; i < specs.length; i++) {
|
|
if (i == key) continue;
|
|
|
|
specs[i].values.forEach(v => {
|
|
|
|
v.disabled = !data[spec.select].specs[v.id].count;
|
|
|
|
});
|
|
|
|
if (specs[i].select) {
|
|
this.setData({
|
|
store_count: data[spec.select].specs[specs[i].select].count
|
|
});
|
|
}
|
|
|
|
this.setData({
|
|
specs: specs
|
|
});
|
|
}
|
|
} else {
|
|
this.setData({
|
|
store_count: this.detailsMessage.reduce.reduce_store_nums
|
|
});
|
|
|
|
for (let i = 0; i < specs.length; i++) {
|
|
if (i == key) continue;
|
|
specs[i].values.forEach(v => {
|
|
v.disabled = !data[v.id] || !data[v.id].count;
|
|
});
|
|
|
|
if (specs[i].select) {
|
|
this.setData({
|
|
store_count: data[specs[i].select].count
|
|
});
|
|
}
|
|
|
|
this.setData({
|
|
specs: specs
|
|
});
|
|
}
|
|
}
|
|
|
|
if (parseInt(this.select_count) > this.store_count) {
|
|
this.setData({
|
|
select_count: String(this.store_count)
|
|
});
|
|
} else if (parseInt(this.select_count) == 0) {
|
|
this.setData({
|
|
select_count: '1'
|
|
});
|
|
}
|
|
|
|
this.setData({
|
|
specs: specs
|
|
});
|
|
var canBuy = this.disallow_cart();
|
|
|
|
|
|
// this.setData({
|
|
// canBuy: canBuy
|
|
// });
|
|
//
|
|
this.canBuy=canBuy;
|
|
},
|
|
|
|
confirmF() {
|
|
if (this.loading) return;
|
|
if (this.disallow_cart()) return;
|
|
this.loading = true;
|
|
|
|
var select_product = this.select_product;
|
|
var select_count = Number(this.select_count)
|
|
var data = this.specs.length ? {
|
|
id: select_product.id,
|
|
name: this.name,
|
|
qty: select_count,
|
|
store_count: this.store_count,
|
|
price: this.time_price,
|
|
market_price: this.market_price,
|
|
attributes: {
|
|
img: select_product.img || this.detailsMessage.reduce.goods.img,
|
|
size: select_product.size,
|
|
color: select_product.color,
|
|
com_id: this.goods_id
|
|
}
|
|
} : {
|
|
id:this.goods_id,
|
|
name: this.detailsMessage.name,
|
|
qty: select_count,
|
|
store_count: this.store_count,
|
|
price: this.time_price,
|
|
market_price: this.detailsMessage.market_price,
|
|
attributes: {
|
|
img: this.detailsMessage.reduce.goods.img,
|
|
com_id:this.goods_id
|
|
}
|
|
};
|
|
if (select_product.sku) {
|
|
data.attributes.sku = select_product.sku;
|
|
}
|
|
this.checkoutImmdeOrder(data)
|
|
},
|
|
disallow_cart() {
|
|
if (!this.specs.length) {
|
|
return !this.store_count;
|
|
}
|
|
|
|
var ids = [],
|
|
select_product = {},
|
|
specs = this.specs; // console.log(this.commodity.sell_price)
|
|
|
|
/* this.setData({
|
|
price: Number(this.commodity.sell_price).toFixed(2)
|
|
}); */
|
|
|
|
for (let spec of specs) {
|
|
if (!spec.select) {
|
|
this.setData({
|
|
/* price: Number(this.commodity.sell_price).toFixed(2), */
|
|
select_product: null
|
|
});
|
|
return true;
|
|
}
|
|
|
|
ids.push(spec.select);
|
|
|
|
for (let v of spec.values) {
|
|
if (v.id == spec.select) {
|
|
|
|
switch (spec.label_key) {
|
|
case 'color':
|
|
select_product.img = v.spec_img;
|
|
select_product.color = v.alias || v.value;
|
|
select_product.bac = v.color;
|
|
break;
|
|
|
|
default:
|
|
select_product.size = v.alias || v.value;
|
|
}
|
|
|
|
break;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
if (this.skuTable) {
|
|
ids = ids[0] > ids[1] ? [ids[1], ids[0]] : ids;
|
|
ids = ids.join('-');
|
|
select_product = Object.assign(select_product, this.skuTable[ids]);
|
|
|
|
}
|
|
var new_bargin_price = Number(select_product.price)-Number(this.detailsMessage.reduce_amount);
|
|
this.setData({
|
|
time_price: new_bargin_price.toFixed(2),
|
|
select_product: select_product
|
|
});
|
|
return false;
|
|
},
|
|
|
|
// 请求sku
|
|
queryCommodityStore(id, key) {
|
|
var that = this;
|
|
this.$http.get({
|
|
api: `api/store/detail/${id}/stock`
|
|
}).then(res => {
|
|
wx.hideLoading();
|
|
res = res.data;
|
|
if (!res.status || !res.data || !res.data.specs) return;
|
|
|
|
if (res.data.specs && typeof key === 'undefined') {
|
|
let specs = [];
|
|
Object.keys(res.data.specs).forEach((key, index) => {
|
|
let value = res.data.specs[key];
|
|
value.select = '';
|
|
value.values = value.list.map(v => {
|
|
return Object.assign({
|
|
index: index,
|
|
active: false,
|
|
disabled: false
|
|
}, v);
|
|
});
|
|
delete value.list;
|
|
specs.push(value);
|
|
});
|
|
that.setData({
|
|
specs: specs
|
|
}); // console.log(specs)
|
|
|
|
var canBuy = this.disallow_cart();
|
|
this.setData({
|
|
canBuy: canBuy
|
|
});
|
|
}
|
|
if (res.data.stores) {
|
|
let data = {};
|
|
Object.keys(res.data.stores).forEach(key => {
|
|
let value = res.data.stores[key];
|
|
value.ids.forEach(id => {
|
|
data[id] = data[id] || {
|
|
count: 0,
|
|
specs: {}
|
|
};
|
|
data[id].count += Number(value.store);
|
|
value.ids.forEach(i => {
|
|
if (i == id) return;
|
|
data[id].specs[i] = {
|
|
count: Number(value.store)
|
|
};
|
|
});
|
|
});
|
|
}); // console.log(data);
|
|
|
|
var result = {
|
|
data,
|
|
table: res.data.stores
|
|
};
|
|
// this.setData({
|
|
// result: result
|
|
// });
|
|
|
|
this.result = result;
|
|
|
|
|
|
that.specStore(result, key); // this.$emit('specStore', result, key);
|
|
}
|
|
});
|
|
},
|
|
//关闭sku
|
|
closeSelect() {
|
|
// var animation = new Animation('show');
|
|
// animation.up().then(() => {
|
|
this.setData({
|
|
show_select: true
|
|
})
|
|
// })
|
|
},
|
|
//获取详情页信息
|
|
getMessage() {
|
|
var token = this.$cookieStorage.get('user_token');
|
|
this.$http.get({
|
|
api: `api/reduce/showItem?reduce_items_id=${this.reduce_items_id}`,
|
|
header: {
|
|
Authorization: token
|
|
},
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
if (res.data.data.status_text !== "进行中" && res.data.data.status_text !== "已下单待支付" && res.data.data.reduce.status_text ==
|
|
"进行中" && res.data.data.time_price !== "0.00") {
|
|
this.overTime = true;
|
|
this.overActivity = false;
|
|
this.setColor = 'AAAAAA';
|
|
} else if (res.data.data.reduce.status_text !== "进行中") {
|
|
this.overActivity = true;
|
|
this.setColor = 'AAAAAA';
|
|
} else if (res.data.data.status_text == "订单已支付") {
|
|
this.pay = true;
|
|
this.over = true;
|
|
} else if (res.data.data.status_text == "进行中" && res.data.data.reduce.status_text == "进行中") {
|
|
this.overTime = false;
|
|
this.overActivity = false;
|
|
this.setColor = 'fb5054';
|
|
}
|
|
if (res.data.data.reduce_surplus_amount == "0.00") {
|
|
this.over = true;
|
|
}
|
|
this.setData({
|
|
detailsMessage: res.data.data,
|
|
is_leader: res.data.data.user_is_leader,
|
|
// is_leader:0,
|
|
reduce_id: res.data.data.reduce_id,
|
|
id: res.data.data.id,
|
|
goods_id: res.data.data.reduce.goods_id,
|
|
name: res.data.data.reduce.goods.name,
|
|
store_count: res.data.data.reduce.store_nums,
|
|
market_price: res.data.data.reduce.goods.market_price,
|
|
time_price: res.data.data.time_price
|
|
})
|
|
this.disallow_cart();
|
|
this.queryCommodityStore(this.goods_id);
|
|
this.showWitch();
|
|
if (this.detailsMessage.progress_par > 0.17 && this.detailsMessage.progress_par < 0.83) {
|
|
let percent = parseInt(this.detailsMessage.progress_par * 100) - 17
|
|
this.setData({
|
|
left: percent
|
|
})
|
|
} else if (this.detailsMessage.progress_par == 0.83 || this.detailsMessage.progress_par > 0.83) {
|
|
this.setData({
|
|
left: 67
|
|
})
|
|
} else {
|
|
this.setData({
|
|
left: 0
|
|
})
|
|
}
|
|
// #ifdef H5
|
|
if (this.$wechat && this.$wechat.isWechat()) {
|
|
var origin = window.location.origin;
|
|
var pathname = window.location.pathname;
|
|
var path = origin+pathname+'?reduce_items_id='+this.reduce_items_id
|
|
this.$wechat.share({
|
|
title:' 砍价帮帮忙',
|
|
img:'https://cdn.guojiang.club/h5_share_logo.png',
|
|
desc:'果酱小店'
|
|
},path);
|
|
}
|
|
// #endif
|
|
|
|
} else {
|
|
wx.showToast({
|
|
title: res.data.data.message,
|
|
icon: none,
|
|
duration: 2000,
|
|
|
|
})
|
|
}
|
|
})
|
|
this.showWitch()
|
|
},
|
|
bargainAgin() {
|
|
|
|
var token = this.$cookieStorage.get('user_token');
|
|
var id = this.reduce_id;
|
|
var data = {
|
|
reduce_id: id,
|
|
restart: 1
|
|
}
|
|
this.$http.post({
|
|
api: `api/reduce`,
|
|
header: {
|
|
Authorization: token
|
|
},
|
|
data: data
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
wx.showToast({
|
|
title: '已重新发起砍价',
|
|
duration: 2500
|
|
})
|
|
this.reduce_items_id = res.data.data.reduce_items_id;
|
|
this.getMessage()
|
|
this.showWitch()
|
|
} else {}
|
|
})
|
|
},
|
|
showWitch() {
|
|
if (this.is_leader == 1) {
|
|
this.setData({
|
|
message: '邀请好友砍价'
|
|
})
|
|
} else if (this.is_leader == 0 && this.step == 1) {
|
|
this.setData({
|
|
message: '帮TA砍价'
|
|
})
|
|
} else if (this.is_leader == 0 && this.step == 2) {
|
|
this.setData({
|
|
message: '我也要去砍价'
|
|
})
|
|
}
|
|
},
|
|
downImg() {
|
|
if (this.shareImg) {
|
|
wx.showLoading({
|
|
title: '正在下载',
|
|
mask: true
|
|
});
|
|
this.$http.dowloadFile({
|
|
api: this.shareImg
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
// #ifdef MP-WEIXIN
|
|
wx.getSetting({
|
|
success: ret => {
|
|
// 如果之前没有授权
|
|
if (!ret.authSetting['scope.writePhotosAlbum']) {
|
|
wx.authorize({
|
|
scope: 'scope.writePhotosAlbum',
|
|
success: rej => {
|
|
this.saveImg(res.tempFilePath);
|
|
},
|
|
// 用户拒绝授权
|
|
fail: ret => {
|
|
this.setData({
|
|
is_refused: true
|
|
});
|
|
wx.hideLoading();
|
|
}
|
|
});
|
|
} else {
|
|
this.saveImg(res.tempFilePath);
|
|
}
|
|
}
|
|
});
|
|
// #endif
|
|
// #ifdef APP-PLUS
|
|
var that = this;
|
|
uni.getSystemInfo({
|
|
success(result) {
|
|
if(result.platform == 'android'){
|
|
that.requestAndroidPermission(res.tempFilePath);
|
|
} else if(result.platform == 'ios'){
|
|
that.requestIosPermission(res.tempFilePath)
|
|
}
|
|
|
|
}
|
|
})
|
|
// #endif
|
|
} else {
|
|
wx.hideLoading();
|
|
wx.showToast({
|
|
title: '下载图片失败',
|
|
icon: 'none'
|
|
});
|
|
}
|
|
}, err => {});
|
|
}
|
|
},
|
|
//ios授权
|
|
requestIosPermission(url){
|
|
var result = permision.judgeIosPermission('photoLibrary');
|
|
if(result){
|
|
this.saveImg(url);
|
|
}else{
|
|
//打开授权,iOS上如果没有调用过的权限,不会出现在权限设置界面。
|
|
permision.gotoAppPermissionSetting()
|
|
}
|
|
},
|
|
// 安卓app授权
|
|
async requestAndroidPermission(url) {
|
|
var result = await permision.requestAndroidPermission("android.permission.WRITE_EXTERNAL_STORAGE")
|
|
var strStatus
|
|
if (result == 1) {
|
|
strStatus = "已获得授权";
|
|
this.saveImg(url);
|
|
} else if (result == 0) {
|
|
strStatus = "未获得授权";
|
|
permision.gotoAppPermissionSetting()
|
|
} else {
|
|
strStatus = "被永久拒绝权限"
|
|
permision.gotoAppPermissionSetting()
|
|
}
|
|
},
|
|
// 保存图片
|
|
saveImg(path) {
|
|
wx.saveImageToPhotosAlbum({
|
|
filePath: path,
|
|
success: res => {
|
|
wx.hideLoading();
|
|
wx.showToast({
|
|
title: '保存图片成功',
|
|
icon: 'success'
|
|
});
|
|
},
|
|
fail: rej => {
|
|
wx.hideLoading();
|
|
wx.showToast({
|
|
title: '保存图片失败',
|
|
icon: 'none'
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
//获取当前时间
|
|
getServer() {
|
|
var date = new Date();
|
|
var seperator1 = "-";
|
|
var seperator2 = ":";
|
|
var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1;
|
|
var strDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
|
|
var server = date.getFullYear() + seperator1 + month + seperator1 + strDate +
|
|
" " + date.getHours() + seperator2 + date.getMinutes() +
|
|
seperator2 + date.getSeconds();
|
|
this.server = server;
|
|
},
|
|
closeTell() {
|
|
this.setData({
|
|
showTell: false
|
|
})
|
|
},
|
|
showTellphone() {
|
|
this.setData({
|
|
showTell: true
|
|
})
|
|
},
|
|
closeShare() {
|
|
this.setData({
|
|
showShare: false
|
|
})
|
|
},
|
|
// 弹出分享
|
|
changeShare() {
|
|
this.setData({
|
|
showShareImg: true
|
|
})
|
|
},
|
|
// 生成海报
|
|
createShareImg() {
|
|
this.showShare = false;
|
|
wx.showLoading({
|
|
title: "生成中",
|
|
mask: true
|
|
})
|
|
var token = this.$cookieStorage.get('user_token') || '';
|
|
this.$http.get({
|
|
api: `api/reduce/share?reduce_items_id=${this.reduce_items_id}`,
|
|
header: {
|
|
Authorization: token
|
|
},
|
|
// data:{
|
|
// goods_id: this.data.showItemDate.multi_groupon_goods_id,
|
|
// }
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
var res = res.data
|
|
if (res.status) {
|
|
this.shareImg = res.data.image;
|
|
//this.getShearImg();
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
})
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
wx.hideLoading();
|
|
this.changeShare();
|
|
})
|
|
},
|
|
closeAlert() {
|
|
this.setData({
|
|
is_refused: false
|
|
})
|
|
},
|
|
helpShare() {
|
|
this.setData({
|
|
showShare: true
|
|
})
|
|
},
|
|
showNoticeInfo() {
|
|
this.setData({
|
|
showNotice: true
|
|
})
|
|
},
|
|
closeNotice() {
|
|
this.setData({
|
|
showNotice: false
|
|
})
|
|
this.getMessage()
|
|
},
|
|
//好友也要零元拿
|
|
joinBargain() {
|
|
if (this.overActivity == true) {
|
|
this.setData({
|
|
showTell: true
|
|
})
|
|
} else {
|
|
wx.navigateTo({
|
|
url: '/pages/bargain/index/index'
|
|
})
|
|
}
|
|
},
|
|
goStore() {
|
|
wx.switchTab({
|
|
url: '/pages/index/index/index'
|
|
})
|
|
},
|
|
bargain() {
|
|
var token = this.$cookieStorage.get('user_token');
|
|
if (this.is_leader == 0) {
|
|
this.$http.post({
|
|
api: `api/reduce/help?reduce_items_id=${this.reduce_items_id}`,
|
|
header: {
|
|
Authorization: token
|
|
}
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
this.setData({
|
|
step: 2
|
|
})
|
|
if (res.data.code == 400) {
|
|
wx.showToast({
|
|
title: res.data.message,
|
|
icon: 'none',
|
|
duration: 2000
|
|
})
|
|
setTimeout(function() {
|
|
this.setData({
|
|
step: 2
|
|
})
|
|
this.showWitch();
|
|
}, 2000)
|
|
} else {
|
|
this.setData({
|
|
showNotice: true,
|
|
step: 2
|
|
})
|
|
}
|
|
if (res.data.data.reduce_amount) {
|
|
this.setData({
|
|
reduce_amount: res.data.data.reduce_amount,
|
|
step: 2
|
|
})
|
|
}
|
|
this.showWitch();
|
|
} else {
|
|
wx.showToast({
|
|
title: '您暂时不能帮好友砍价',
|
|
icon: 'none',
|
|
//duration: 3000
|
|
})
|
|
setTimeout(function() {
|
|
this.setData({
|
|
step: 2
|
|
})
|
|
wx.hideToast()
|
|
//that.showWitch();
|
|
}, 3000)
|
|
}
|
|
this.getMessage()
|
|
})
|
|
this.getMessage()
|
|
|
|
}
|
|
this.getMessage()
|
|
this.showWitch();
|
|
},
|
|
showRule() {
|
|
this.setData({
|
|
show: true
|
|
})
|
|
},
|
|
closeRule() {
|
|
this.setData({
|
|
show: false
|
|
})
|
|
},
|
|
// 获取用户信息
|
|
getUserInfo() {
|
|
var token = this.$cookieStorage.get('user_token')
|
|
this.$http.get({
|
|
api: 'api/me',
|
|
header: {
|
|
Authorization: token
|
|
},
|
|
}).then(res => {
|
|
res = res.data;
|
|
if (res.status) {
|
|
this.setData({
|
|
userInfo: res.data,
|
|
}, () => {
|
|
if (res.data.agent_code) {
|
|
wx.updateShareMenu();
|
|
}
|
|
})
|
|
}
|
|
})
|
|
},
|
|
//选择sku
|
|
showSelect(e) {
|
|
this.setData({
|
|
show_select: false
|
|
})
|
|
},
|
|
// 立即购买
|
|
checkoutImmdeOrder(data) {
|
|
var token = this.$cookieStorage.get('user_token');
|
|
this.$http.post({
|
|
api: 'api/shopping/order/checkout?product_id=' + data.id + '&reduce_items_id='+this.reduce_items_id,
|
|
header: {
|
|
Authorization: token
|
|
},
|
|
data: data
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
res = res.data;
|
|
|
|
if (res.status) {
|
|
this.$cookieStorage.set('local_order', res.data);
|
|
wx.navigateTo({
|
|
url: `/pages/store/order/order?reduce_items_id=${this.reduce_items_id}&bargain=true`
|
|
});
|
|
} else {
|
|
if (res.data && res.data.server_busy) {
|
|
this.show_ten = true;
|
|
} else if (res.message == 'User unbind mobile') {
|
|
wx.showModal({
|
|
content: '请先绑定手机号',
|
|
showCancel: false,
|
|
success: res => {
|
|
if (res.confirm || !res.cancel && !res.confirm) {
|
|
wx.navigateTo({
|
|
url: '/pages/user/phone/phone?url=' + getUrl()
|
|
});
|
|
}
|
|
}
|
|
});
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
|
|
this.loading = false;
|
|
}
|
|
}
|
|
});
|
|
},
|
|
showToast() {
|
|
wx.showToast({
|
|
title: '请选择商品的规格',
|
|
icon: 'none',
|
|
duration: 2000
|
|
})
|
|
},
|
|
changeImg() {
|
|
this.setData({
|
|
showShareImg: false
|
|
})
|
|
},
|
|
//活动规则
|
|
getRule() {
|
|
this.$http.get({
|
|
api: 'api/reduce/help/text'
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
this.setData({
|
|
rule: res.data.data.reduce_help_text
|
|
})
|
|
}
|
|
})
|
|
},
|
|
setData: function(obj) {
|
|
let that = this;
|
|
let keys = [];
|
|
let val, data;
|
|
Object.keys(obj).forEach(function(key) {
|
|
keys = key.split('.');
|
|
val = obj[key];
|
|
data = that.$data;
|
|
keys.forEach(function(key2, index) {
|
|
if (index + 1 == keys.length) {
|
|
that.$set(data, key2, val);
|
|
} else {
|
|
if (!data[key2]) {
|
|
that.$set(data, key2, {});
|
|
}
|
|
}
|
|
|
|
data = data[key2];
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style rel="stylesheet/less" lang="less">
|
|
@import "detail";
|
|
</style>
|