金诚优选前端代码
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

<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>