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.
771 lines
21 KiB
771 lines
21 KiB
<template>
|
|
<view class="">
|
|
<view id="call">
|
|
<view class="call-box" @tap="jumpDetail">
|
|
<image mode="widthFix" :src="info.data.free.img" alt></image>
|
|
<view class="name" v-if="info.data.free.label!=undefined">
|
|
{{info.data.free.label}}
|
|
</view>
|
|
</view>
|
|
<view class="time-box" :class="info.data.free.activity_status == 'OnGoing' ? 'active' : ''" v-if="info.free.activity_status == 'NoBegin'">
|
|
<seckill :end="info.data.free.ends_at" :starts="info.data.free.starts_at" typename="集call" :server="info.data.free.server_time" mold="list" @starts="isStarts" @end="isEnd"></seckill>
|
|
</view>
|
|
<view class="call-user">
|
|
<image v-if="info.data.task_user_avatar" :src="info.data.task_user_avatar"></image>
|
|
<image v-else src="http://ovef29y3v.bkt.clouddn.com/%E5%A4%B4%E5%83%8F_%E7%94%BB%E6%9D%BF%201.png"></image>
|
|
<view class="call-status">
|
|
<view v-if="!info.meta.is_call && info.data.gap_task != 0">还差 <span>{{info.data.gap_task}}</span> 个Call就可以免费领取礼品了,求助攻~</view>
|
|
<view v-if="info.data.gap_task == 0 && !info.meta.is_call">我已集满</view>
|
|
<view v-if="info.meta.is_call && Brand_name != 'UTO'">感谢你为我打Call~</view>
|
|
<view v-if="info.meta.is_call && Brand_name == 'UTO'">听说给我点赞的朋友都变好看了~</view>
|
|
<!--<view class="receive" wx:if="{{info.data.gap_task == 0}}">立即领取 》</view>-->
|
|
</view>
|
|
</view>
|
|
<view class="share-box" :style="'color: ' + config.mainColor" v-if="info.data.free.activity_status == 'OnGoing'">
|
|
<button class="friends claa-btn" :style="'background: ' + config.mainColor" v-if="!info.meta.is_call && info.data.gap_task != 0 && !token" open-type="getUserInfo" @getuserinfo="bindUserInfo">帮TA打call</button>
|
|
<view class="friends" :style="'background: ' + config.mainColor + '; border-color: ' + config.mainColor" v-if="!info.meta.is_call && info.data.gap_task != 0 && token" @tap="beforCall">帮TA打call</view>
|
|
<button class="friend share-btn" :style="'color: ' + config.mainColor" v-if="info.meta.is_call && info.data.gap_task != 0" open-type="share">帮TA分享</button>
|
|
<view class="friends" :style="'background: ' + config.mainColor + '; border-color: ' + config.mainColor" v-if="info.meta.is_call || info.data.gap_task == 0" @tap="jumpCall">我也要领取</view>
|
|
</view>
|
|
<view class="no-active" v-if="info.data.free.activity_status == 'NoBegin'">
|
|
活动未开始
|
|
</view>
|
|
<view class="call-num">
|
|
<view class="text mx-1px-bottom">
|
|
已有 {{info.data.count_task}} 人为他打Call
|
|
</view>
|
|
<view class="item-box">
|
|
<view class="call-num-item" :style="'height: ' + itemHeight + 'px;'" v-for="(item, index) in callList" :key="index">
|
|
<view class="info">
|
|
<image v-if="item.id && !item.meta.avatar" src="http://ovef29y3v.bkt.clouddn.com/%E5%A4%B4%E5%83%8F_%E7%94%BB%E6%9D%BF%201.png"></image>
|
|
<image v-else :src="item.meta.avatar"></image>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="text-info mx-1px-top" @tap="infoF">
|
|
集Call说明
|
|
</view>
|
|
</view>
|
|
<view class="home" @tap="jump">
|
|
<i class="iconfont icon-home"></i>
|
|
首页
|
|
</view>
|
|
<view class="ibrand-author" v-if="author" @tap="jumpAuthor">
|
|
<i class="iconfont icon-dibu"></i>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="call-goods" v-if="info.data.recommend_goods && info.data.recommend_goods.length">
|
|
<view class="title mx-1px-bottom">
|
|
相关推荐
|
|
</view>
|
|
<view class="content">
|
|
<view class="like_list">
|
|
<view class="like_box" v-for="(item, index) in info.data.recommend_goods" :key="index" :data-id="item.id" @tap="jumpStore">
|
|
<view>
|
|
<view class="like_image">
|
|
<image class="responsive" :src="item.img" alt></image>
|
|
</view>
|
|
<view class="like_name">
|
|
{{item.name}}
|
|
</view>
|
|
<view class="like_money">
|
|
¥{{item.sell_price}}
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
|
|
<view id="coupon-box" v-if="!coupon.has_get && coupon.discount">
|
|
<view class="mask">
|
|
|
|
</view>
|
|
<view class="coupon-body">
|
|
<view class="title">
|
|
优惠券
|
|
</view>
|
|
<view class="tips">
|
|
<view>
|
|
Hi,亲爱的会员
|
|
</view>
|
|
<view>
|
|
这是我送给你的优惠券,快去领取吧!
|
|
</view>
|
|
</view>
|
|
<view class="coupon" v-for="(item, index) in coupon.discount" :key="index">
|
|
<view class="left">
|
|
<view class="icon">
|
|
<i class="iconfont icon-xingzhuang"></i>
|
|
</view>
|
|
<view class="text-box">
|
|
<view class="title nowarp">
|
|
{{item.title}}
|
|
</view>
|
|
<view class="info">
|
|
仅支持商城使用
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="right">
|
|
<text class="money" v-if="item.action_type.type == 'cash'">¥</text>
|
|
<sapn>{{ item.action_type.value }}</sapn>
|
|
|
|
<text class="money" v-if="item.action_type.type == 'discount'">折</text>
|
|
</view>
|
|
</view>
|
|
|
|
<view class="close iconfont icon-yiquxiao" @tap="closeCoupon">
|
|
|
|
</view>
|
|
<view class="btn" v-if="token" @tap="getCoupon">
|
|
立即领取
|
|
</view>
|
|
<button class="btn" v-else open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
|
|
立即领取
|
|
</button>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
|
|
import seckill from "@/components/seckill/seckill";
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
itemHeight: '',
|
|
callList: '',
|
|
info: '',
|
|
init: false,
|
|
task_id: '',
|
|
token: "",
|
|
userInfo: '',
|
|
shop_id: '',
|
|
unionInFo: '',
|
|
openInFo: '',
|
|
author: config.PACKAGES.author,
|
|
list: [{
|
|
id: 1,
|
|
value: 1
|
|
}, {
|
|
id: 2,
|
|
value: 2
|
|
}],
|
|
Brand_name: '',
|
|
config: '',
|
|
coupon: '',
|
|
code: ''
|
|
};
|
|
},
|
|
|
|
components:{
|
|
seckill
|
|
},
|
|
|
|
onShareAppMessage(res) {
|
|
return {
|
|
title: '快来帮我免费领取|' + this.info.data.free.label,
|
|
imageUrl: this.info.data.free.img,
|
|
path: '/pages/store/shareCall/shareCall?task_id=' + this.info.data.id
|
|
};
|
|
},
|
|
|
|
onShow() {
|
|
var token = this.$cookieStorage.get('user_token');
|
|
|
|
this.token=token;
|
|
// 用来区分是哪个项目
|
|
|
|
/*if(config.BRAND.name == 'nu') {
|
|
this.userAuthorize();
|
|
}*/
|
|
|
|
this.queryTaskInfo(this.task_id);
|
|
|
|
if (!this.token) {
|
|
this.getOpenid();
|
|
}
|
|
},
|
|
|
|
onLoad(e) {
|
|
// 第三方平台配置颜色
|
|
var gbConfig = this.$cookieStorage.get('globalConfig') || '';
|
|
var init = this.$cookieStorage.get('init');
|
|
this.setData({
|
|
config: gbConfig,
|
|
author: init ? init.other_technical_support : ''
|
|
});
|
|
|
|
if (!gbConfig) {
|
|
let extConfig = {};
|
|
|
|
if (extConfig) {
|
|
this.setData({
|
|
config: extConfig
|
|
});
|
|
}
|
|
}
|
|
|
|
wx.getSystemInfo({
|
|
success: res => {
|
|
// this.setData({
|
|
// itemHeight: (res.screenWidth - 14) / 12.5
|
|
// });
|
|
|
|
this.itemHeight=(res.screenWidth-14)/12.5;
|
|
}
|
|
});
|
|
|
|
if (e.scene) {
|
|
this.setData({
|
|
task_id: decodeURIComponent(e.scene)
|
|
});
|
|
}
|
|
|
|
if (e.task_id) {
|
|
this.setData({
|
|
task_id: e.task_id
|
|
});
|
|
}
|
|
},
|
|
|
|
components: {
|
|
seckill
|
|
},
|
|
props: {},
|
|
methods: {
|
|
jumpAuthor() {
|
|
wx.navigateTo({
|
|
url: '/pages/index/author/author'
|
|
});
|
|
},
|
|
|
|
infoF() {
|
|
wx.showModal({
|
|
title: '集Call说明',
|
|
content: this.info.data.free.content,
|
|
showCancel: false
|
|
});
|
|
},
|
|
|
|
jump() {
|
|
wx.switchTab({
|
|
url: '/pages/index/index/index'
|
|
});
|
|
},
|
|
|
|
jumpDetail() {
|
|
wx.navigateTo({
|
|
url: '/pages/store/detail/detail?id=' + this.info.data.free.freeable_id
|
|
});
|
|
},
|
|
|
|
jumpEnd() {
|
|
wx.redirectTo({
|
|
url: '/pages/store/detail/detail?id=' + this.info.free.freeable_id
|
|
});
|
|
},
|
|
|
|
jumpCall() {
|
|
if (this.token) {
|
|
wx.redirectTo({
|
|
url: '/pages/store/call/call?id=' + this.info.data.free_id
|
|
});
|
|
} else {
|
|
wx.showModal({
|
|
content: '请先登录',
|
|
success: res => {
|
|
if (res.confirm || !res.cancel && !res.confirm) {
|
|
pageLogin(getUrl());
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
jumpStore(e) {
|
|
var id = e.currentTarget.dataset.id;
|
|
wx.redirectTo({
|
|
url: '/pages/store/detail/detail?id=' + id
|
|
});
|
|
},
|
|
|
|
// 查询信息
|
|
queryTaskInfo(id) {
|
|
var token = this.$cookieStorage.get('user_token') || '';
|
|
wx.showLoading({
|
|
title: "加载中",
|
|
mask: true
|
|
});
|
|
this.$http.get({
|
|
api: 'api/free_event/task/getTaskForUser/' + id,
|
|
data: {
|
|
open_id: this.$cookieStorage.get('user_open_id') || ''
|
|
},
|
|
header: {
|
|
Authorization: token
|
|
}
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
res = res.data;
|
|
|
|
if (res.status) {
|
|
if (res.meta.is_self) {
|
|
wx.redirectTo({
|
|
url: '/pages/store/call/call?id=' + res.data.free_id
|
|
});
|
|
return;
|
|
}
|
|
|
|
var list = Array(res.data.free.per_count - res.data.count_task).fill({
|
|
meta: {
|
|
avatar: ''
|
|
}
|
|
});
|
|
var newList = res.data.items.concat(list);
|
|
this.setData({
|
|
info: res,
|
|
callList: newList // init: true
|
|
|
|
});
|
|
/*
|
|
NoBegin 未开始
|
|
OnGoing 进行中
|
|
End 结束
|
|
*/
|
|
// 如果活动未开始,不显示转发按钮
|
|
|
|
if (res.data.free.activity_status == 'NoBegin') {
|
|
wx.hideShareMenu();
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false,
|
|
success: res => {
|
|
if (res.confirm || !res.cancel && !res.confirm) {
|
|
wx.redirectTo({
|
|
url: '/pages/store/callList/callList'
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false,
|
|
success: res => {
|
|
if (res.confirm || !res.cancel && !res.confirm) {
|
|
wx.redirectTo({
|
|
url: '/pages/store/callList/callList'
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
wx.hideLoading();
|
|
}).catch(rej => {
|
|
wx.hideLoading();
|
|
wx.showModal({
|
|
content: '内部错误',
|
|
showCancel: false,
|
|
success: res => {
|
|
if (res.confirm || !res.cancel && !res.confirm) {
|
|
wx.redirectTo({
|
|
url: '/pages/store/callList/callList'
|
|
});
|
|
}
|
|
}
|
|
});
|
|
});
|
|
},
|
|
|
|
beforCall() {
|
|
if (this.token) {
|
|
this.call();
|
|
}
|
|
},
|
|
|
|
// 关闭优惠券弹出
|
|
closeCoupon() {
|
|
this.setData({
|
|
'coupon.has_get': true
|
|
});
|
|
},
|
|
|
|
// 获取手机号
|
|
getPhoneNumber(e) {
|
|
if (e.detail.encryptedData) {
|
|
wx.login({
|
|
success: res => {
|
|
if (res.code) {
|
|
this.setData({
|
|
code: res.code
|
|
}, res => {
|
|
this.phone(e);
|
|
});
|
|
} else {
|
|
wx.showModal({
|
|
content: " 获取code失败",
|
|
showCancel: false
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
// 利用手机号登录
|
|
phone(e) {
|
|
wx.showLoading({
|
|
title: '正在登录',
|
|
mask: true
|
|
});
|
|
this.$http.post({
|
|
api: 'api/oauth/MiniProgramMobileLogin',
|
|
data: {
|
|
open_type: 'miniprogram',
|
|
code: this.code,
|
|
encryptedData: e.detail.encryptedData,
|
|
iv: e.detail.iv,
|
|
open_id: this.$cookieStorage.get('user_open_id') || ''
|
|
}
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
res = res.data;
|
|
|
|
if (res.access_token) {
|
|
var access_token = res.token_type + ' ' + res.access_token;
|
|
var expires_in = res.expires_in || 315360000;
|
|
this.$cookieStorage.set("user_token", access_token, expires_in); // 领取优惠券
|
|
|
|
this.getCoupon();
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败,请重试',
|
|
showCancel: false
|
|
});
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: '请求失败,请重试',
|
|
showCancel: false
|
|
});
|
|
}
|
|
|
|
wx.hideLoading();
|
|
}).catch(rej => {
|
|
wx.hideLoading();
|
|
wx.showModal({
|
|
content: '请求失败,请重试',
|
|
showCancel: false
|
|
});
|
|
});
|
|
},
|
|
|
|
// 获取优惠券信息
|
|
getCouponInfo() {
|
|
var token = this.$cookieStorage.get('user_token') || '';
|
|
this.$http.get({
|
|
api: 'api/free_event/getCouponList',
|
|
header: {
|
|
Authorization: token
|
|
}
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
res = res.data;
|
|
|
|
if (res.status) {
|
|
this.setData({
|
|
coupon: res.data
|
|
});
|
|
console.log(res);
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
}).catch(err => {
|
|
wx.showModal({
|
|
content: '内部错误',
|
|
showCancel: false
|
|
});
|
|
});
|
|
},
|
|
|
|
// 领取优惠券
|
|
getCoupon() {
|
|
wx.showLoading({
|
|
title: '领取中',
|
|
mask: true
|
|
});
|
|
var discount_ids = [];
|
|
this.coupon.discount.forEach(item => {
|
|
discount_ids.push(item.id);
|
|
});
|
|
var token = this.$cookieStorage.get('user_token') || '';
|
|
this.$http.post({
|
|
api: 'api/coupon/getCouponConvertBatch',
|
|
data: {
|
|
discount_ids: discount_ids
|
|
},
|
|
header: {
|
|
Authorization: token
|
|
}
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
res = res.data;
|
|
|
|
if (res.status) {
|
|
wx.showModal({
|
|
content: '领取成功',
|
|
showCancel: false
|
|
});
|
|
this.closeCoupon();
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
|
|
wx.hideLoading();
|
|
}).catch(err => {
|
|
wx.hideLoading();
|
|
wx.showModal({
|
|
content: '内部错误',
|
|
showCancel: false
|
|
});
|
|
});
|
|
},
|
|
|
|
// 绑定用户信息
|
|
bindUserInfo(e) {
|
|
if (e.detail.encryptedData) {
|
|
this.call(this.open_id, e.detail.userInfo);
|
|
}
|
|
},
|
|
|
|
// 打Call
|
|
call(open_id, user_info) {
|
|
var token = this.$cookieStorage.get('user_token');
|
|
wx.showLoading({
|
|
title: "正在打Call",
|
|
mask: true
|
|
});
|
|
this.$http.post({
|
|
api: 'api/free_event/task/call',
|
|
data: {
|
|
task_id: this.task_id,
|
|
open_id: open_id || this.$cookieStorage.get('user_open_id') || '',
|
|
userInfo: user_info
|
|
},
|
|
header: {
|
|
Authorization: token
|
|
}
|
|
}).then(res => {
|
|
if (res.statusCode = 200) {
|
|
res = res.data;
|
|
|
|
if (res.status) {
|
|
this.queryTaskInfo(this.task_id);
|
|
this.getCouponInfo();
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
|
|
wx.hideLoading();
|
|
}).catch(rej => {
|
|
wx.hideLoading();
|
|
wx.showModal({
|
|
content: '内部错误',
|
|
showCancel: false
|
|
});
|
|
});
|
|
},
|
|
|
|
// 获取open_id
|
|
getOpenid() {
|
|
wx.showLoading({
|
|
title: "正在登录",
|
|
mask: true
|
|
});
|
|
wx.login({
|
|
success: res => {
|
|
if (res.code) {
|
|
this.autoLogin(res.code);
|
|
} else {
|
|
wx.hideLoading();
|
|
wx.showToast({
|
|
title: '获取code失败',
|
|
image: '../../../static/error.png'
|
|
});
|
|
}
|
|
}
|
|
});
|
|
},
|
|
|
|
// 自动登录
|
|
autoLogin(code) {
|
|
this.$http.post({
|
|
api: 'api/mini/program/login',
|
|
data: {
|
|
code: code
|
|
}
|
|
}).then(res => {
|
|
if (res.statusCode == 200) {
|
|
res = res.data;
|
|
|
|
if (res.access_token) {
|
|
var access_token = res.token_type + ' ' + res.access_token;
|
|
var expires_in = res.expires_in || 315360000;
|
|
this.$cookieStorage.set("user_token", access_token, expires_in); // this.call();
|
|
} else if (res.data && res.data.open_id) {
|
|
this.$cookieStorage.set('user_open_id', res.data.open_id); // this.getUserAuthorize(res.data.open_id)
|
|
// this.call(res.data.open_id)
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '获取数据失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '获取数据失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
|
|
wx.hideLoading();
|
|
}).catch(rej => {
|
|
wx.hideLoading();
|
|
wx.showModal({
|
|
content: '获取数据失败',
|
|
showCancel: false
|
|
});
|
|
});
|
|
},
|
|
|
|
// 获取用户授权
|
|
getUserAuthorize(open_id) {
|
|
wx.getSetting({
|
|
success: res => {
|
|
if (!res.authSetting['scope.userInfo']) {
|
|
wx.authorize({
|
|
scope: 'scope.userInfo',
|
|
success: res => {
|
|
wx.getUserInfo({
|
|
lang: 'zh_CN',
|
|
success: res => {
|
|
this.$cookieStorage.set('Wechat_user_info', res);
|
|
this.call(open_id, res.userInfo);
|
|
}
|
|
});
|
|
},
|
|
fail: ret => {
|
|
wx.showModal({
|
|
content: '需要授权才能完成打Call',
|
|
showCancel: false,
|
|
success: res => {
|
|
if (res.confirm || !res.cancel && !res.confirm) {
|
|
wx.openSetting({
|
|
success: res => {
|
|
if (res.authSetting['scope.userInfo']) {
|
|
wx.getUserInfo({
|
|
lang: 'zh_CN',
|
|
success: ret => {
|
|
this.$cookieStorage.set('Wechat_user_info', ret);
|
|
this.call(open_id, ret.userInfo);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
wx.getUserInfo({
|
|
lang: 'zh_CN',
|
|
success: res => {
|
|
this.$cookieStorage.set('Wechat_user_info', res);
|
|
this.call(open_id, res.userInfo);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
},
|
|
|
|
// 开始
|
|
isStarts(e) {
|
|
if (this.info.free.activity_status == 'NoBegin') {
|
|
this.queryTaskInfo(this.id);
|
|
}
|
|
},
|
|
|
|
// 结束
|
|
isEnd(e) {
|
|
if (this.info.free.activity_status == 'OnGoing') {
|
|
this.jumpEnd();
|
|
}
|
|
},
|
|
|
|
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];
|
|
});
|
|
});
|
|
}
|
|
},
|
|
computed: {},
|
|
watch: {}
|
|
};
|
|
</script>
|
|
<style rel="stylesheet/less" lang="less">
|
|
@import "shareCall";
|
|
</style>
|