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.
458 lines
11 KiB
458 lines
11 KiB
<template>
|
|
<view>
|
|
<view class="bargain_contanier">
|
|
<view class="bargain_head">
|
|
<image mode="widthFix" src="https://cdn.ibrand.cc/heads%20%281%29.png"></image>
|
|
</view>
|
|
<view class="rule" @tap="changeRule">
|
|
活动规则
|
|
</view>
|
|
<view class="body_box">
|
|
<view class="bargain_body" v-for="(items,idx) in list" :key="idx">
|
|
<view v-for="(item,index) in items" :key="index">
|
|
<view class="bargain_goods">
|
|
<view class="goods_left">
|
|
<image mode="widthFix" :src="item.goods.img"></image>
|
|
</view>
|
|
<view class="goods_right">
|
|
<view class="goods_name">{{item.goods.name}}</view>
|
|
<view class="number">剩余{{item.store_nums}}砍价名额</view>
|
|
<view class="past_price">原价 ¥<span>{{item.goods.max_price}}</span></view>
|
|
<view class="right_foot">
|
|
<view class="new_price">
|
|
砍后价¥{{item.price}}
|
|
</view>
|
|
<!-- #ifdef MP-WEIXIN -->
|
|
<view class="btn" @tap.native.stop="clickBargain" :data-id="item.id">
|
|
发起砍价
|
|
|
|
</view>
|
|
<button class="bind-btn" open-type="getUserInfo" @getuserinfo="bindUserInfo" style="opacity: 0;" v-if="token && !user_info_fill">
|
|
|
|
</button>
|
|
|
|
<!-- #endif -->
|
|
|
|
<!-- #ifdef APP-PLUS ||H5 -->
|
|
<view class="btn" @tap="clickBargain" :data-id="item.id">
|
|
发起砍价
|
|
</view>
|
|
<!-- #endif -->
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
<view class="box_body" v-if="show" @tap.stop="changeRule" @touchmove.stop="true">
|
|
<scroll-view scroll-y class="rule_box">
|
|
<text>{{rule}}</text>
|
|
</scroll-view>
|
|
<view class="iconfont icon-close" @tap.stop="changeRule"></view>
|
|
</view>
|
|
</view>
|
|
|
|
</view>
|
|
|
|
</template>
|
|
|
|
<script>
|
|
import uParse from '@/components/gaoyia-parse/parse.vue';
|
|
import {
|
|
pageLogin,
|
|
getUrl,
|
|
config,
|
|
is
|
|
} from '@/common/js/utils.js';
|
|
export default {
|
|
components: {
|
|
uParse
|
|
},
|
|
data() {
|
|
return {
|
|
show: false,
|
|
rule: '京东方公安三季度非附近的双方各见风使舵公开',
|
|
list: [],
|
|
prices: [],
|
|
page: 1,
|
|
more: true,
|
|
user_info_fill:0,//用户是否完善信息
|
|
token:''
|
|
}
|
|
},
|
|
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;
|
|
var url = origin+'/pages/bargain/index/index';
|
|
window.location.href = this.$config.GLOBAL.baseUrl+'oauth/wxOauth?redirect_url='+encodeURIComponent(url);
|
|
}
|
|
} else{
|
|
let url = getUrl();
|
|
wx.navigateTo({
|
|
url:'/pages/user/loginType/loginType?url='+url
|
|
})
|
|
}
|
|
}
|
|
// #endif
|
|
var windowHeight = wx.getSystemInfoSync().windowHeight //获取设备的高度
|
|
var token = this.$cookieStorage.get('user_token');
|
|
this.token = token;
|
|
this.Height = windowHeight;
|
|
this.getReduceList(1);
|
|
this.getHelpText();
|
|
if(token){
|
|
this.getUserInfo()
|
|
}
|
|
|
|
|
|
},
|
|
//下拉刷新
|
|
onReachBottom(){
|
|
if(this.more){
|
|
let page = this.page + 1;
|
|
this.getReduceList(page);
|
|
} else {
|
|
wx.showToast({
|
|
image: '../../../static/error.png',
|
|
title: '再拉也没有啦'
|
|
});
|
|
}
|
|
},
|
|
methods: {
|
|
//h5微信登陆
|
|
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()
|
|
|
|
})
|
|
|
|
},
|
|
//绑定用户信息
|
|
bindUserInfo(e) {
|
|
console.log(e)
|
|
if (e.detail.encryptedData) {
|
|
this.updateUserInfo(e.detail);
|
|
}
|
|
},
|
|
updateUserInfo(data) {
|
|
wx.showLoading({
|
|
title: '更新中',
|
|
mask: true
|
|
});
|
|
this.$http.get({
|
|
api: 'api/user/bindUserMiniInfo',
|
|
data: data,
|
|
header: {
|
|
Authorization: this.$cookieStorage.get('user_token')
|
|
}
|
|
}).then(res => {
|
|
res = res.data;
|
|
if (res.status) {
|
|
wx.showModal({
|
|
content:"用户信息更新完成,请砍价",
|
|
showCancel:false
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
});
|
|
}
|
|
wx.hideLoading();
|
|
});
|
|
},
|
|
|
|
//获取用户信息
|
|
getUserInfo() {
|
|
this.$http.get({
|
|
api: 'api/me',
|
|
header: {
|
|
Authorization: this.$cookieStorage.get('user_token')
|
|
}
|
|
}).then(res => {
|
|
res = res.data;
|
|
if (res.status) {
|
|
this.user_info_fill = res.data.user_info_fill
|
|
}
|
|
});
|
|
},
|
|
|
|
// 点击发起砍价按钮
|
|
clickBargain(e) {
|
|
let token = this.$cookieStorage.get('user_token');
|
|
if (token) {
|
|
// 发起砍价请求
|
|
let id = e.currentTarget.dataset.id;
|
|
this.id = id;
|
|
this.postReduce(id);
|
|
} else {
|
|
// #ifdef MP-WEIXIN || APP-PLUS
|
|
var url = getUrl();
|
|
// #endif
|
|
// #ifdef H5
|
|
var url = getUrl();
|
|
// #endif
|
|
wx.showModal({
|
|
content: '请先登录',
|
|
success: res => {
|
|
if (res.confirm) {
|
|
// #ifdef APP-PLUS || MP-WEIXIN
|
|
wx.navigateTo({
|
|
url: '/pages/user/register/register?url=' + url
|
|
});
|
|
// #endif
|
|
|
|
// #ifdef H5
|
|
wx.navigateTo({
|
|
url: '/pages/user/register/register?url=' + encodeURIComponent(url)
|
|
});
|
|
// #endif
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
},
|
|
// 发起砍价的请求
|
|
postReduce(reduce_id) {
|
|
wx.showLoading({
|
|
title: "请求中",
|
|
mask: true
|
|
});
|
|
let token = this.$cookieStorage.get('user_token');
|
|
this.$http.post({
|
|
api: 'api/reduce',
|
|
header: {
|
|
Authorization: token
|
|
},
|
|
data: {
|
|
reduce_id: reduce_id
|
|
}
|
|
}).then(res => {
|
|
res = res.data;
|
|
if (res.status) {
|
|
this.reduce_items_id = res.data.reduce_items_id
|
|
// 判断是否可以跳砍价页面,如果不能就需要跳到订单详情页去
|
|
this.getReduceShowItem();
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
})
|
|
|
|
}
|
|
wx.hideLoading()
|
|
|
|
}).catch(rej => {
|
|
wx.showModal({
|
|
content: rej.message || '请求失败',
|
|
showCancel: false
|
|
})
|
|
wx.hideLoading()
|
|
})
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
// 获取砍价的规则
|
|
getHelpText() {
|
|
this.$http.get({
|
|
api: 'api/reduce/help/text'
|
|
}).then(res => {
|
|
|
|
res = res.data;
|
|
if (res.status) {
|
|
this.setData({
|
|
rule: res.data.reduce_help_text
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
})
|
|
|
|
}
|
|
}).catch(rej => {
|
|
wx.showModal({
|
|
content: rej.message || '请求失败',
|
|
showCancel: false
|
|
})
|
|
})
|
|
},
|
|
// 请求是否是可以跳到砍价详情页
|
|
getReduceShowItem() {
|
|
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 => {
|
|
res = res.data;
|
|
if (res.status) {
|
|
if (res.data.order != null) {
|
|
if (res.data.order.status == 1) {
|
|
{
|
|
wx.navigateTo({
|
|
url: `/pages/order/detail/detail?no=${res.data.order.order_no}`
|
|
})
|
|
}
|
|
} else {
|
|
wx.navigateTo({
|
|
url: `/pages/bargain/detail/detail?reduce_items_id=${this.reduce_items_id}&id=${this.id}`
|
|
})
|
|
}
|
|
} else {
|
|
wx.navigateTo({
|
|
url: `/pages/bargain/detail/detail?reduce_items_id=${this.reduce_items_id}&id=${this.id}`
|
|
})
|
|
}
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
})
|
|
|
|
}
|
|
})
|
|
},
|
|
|
|
// 弹起活动规则
|
|
changeRule() {
|
|
this.setData({
|
|
show:!this.show
|
|
})
|
|
},
|
|
// 获取页面列表数据
|
|
getReduceList(page) {
|
|
wx.showLoading({
|
|
title: "加载中",
|
|
mask: true
|
|
});
|
|
this.$http.get({
|
|
api: 'api/reduce/list',
|
|
data: {
|
|
page:page
|
|
}
|
|
}).then(res => {
|
|
|
|
res = res.data;
|
|
if (res.status) {
|
|
let pages = res.meta.pagination;
|
|
let current_page = pages.current_page;
|
|
let total_pages = pages.total_pages;
|
|
this.setData({
|
|
[`list.${page-1}`]: res.data,
|
|
more: current_page < total_pages,
|
|
page: current_page
|
|
})
|
|
} else {
|
|
wx.showModal({
|
|
content: res.message || '请求失败',
|
|
showCancel: false
|
|
})
|
|
}
|
|
|
|
this.setData({
|
|
show: false
|
|
})
|
|
wx.hideLoading()
|
|
}).catch(rej => {
|
|
wx.hideLoading()
|
|
wx.showModal({
|
|
content: rej.message || '请求失败',
|
|
showCancel: false
|
|
})
|
|
})
|
|
|
|
},
|
|
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 "index";
|
|
</style>
|