509 lines
11 KiB
Vue
509 lines
11 KiB
Vue
|
<template>
|
|||
|
<view class="integral">
|
|||
|
<view class="header" :class="'bg-' + themeColor.name">
|
|||
|
<view class="title">当前步数</view>
|
|||
|
<text class="num">
|
|||
|
{{
|
|||
|
(todayStep) ||
|
|||
|
'0'
|
|||
|
}}
|
|||
|
</text>
|
|||
|
|
|||
|
<view class="line" />
|
|||
|
<view class="nav">
|
|||
|
<view class="item" @tap="stepToBlance">
|
|||
|
<text class="num">
|
|||
|
兑换
|
|||
|
</text>
|
|||
|
<text class="title">兑换积分</text>
|
|||
|
</view>
|
|||
|
<view class="item">
|
|||
|
<text class="num">
|
|||
|
{{
|
|||
|
(
|
|||
|
allowStep ) || '0'
|
|||
|
}}
|
|||
|
</text>
|
|||
|
<text class="title">可兑换步数</text>
|
|||
|
</view>
|
|||
|
<view class="item">
|
|||
|
<text class="num">
|
|||
|
{{
|
|||
|
(allowStep/1000) ||
|
|||
|
'0'
|
|||
|
}}
|
|||
|
</text>
|
|||
|
<text class="title">可兑换积分</text>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="tab">
|
|||
|
<view class="item" :class="current === index ? `text-${themeColor.name} on` : ''" v-for="(item, index) in navList"
|
|||
|
:key="index" @tap="nav(index)">
|
|||
|
{{ item.name }}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<view class="wrapper">
|
|||
|
<view class="list1" :hidden="current !== 1">
|
|||
|
<view class="tip acea-row row-middle">
|
|||
|
<span class="iconfont icon-shuoming"></span>提示:
|
|||
|
</view>
|
|||
|
<view class="list b-b" v-for="(item, index) in integralList" :key="index">
|
|||
|
<view class="wrapper">
|
|||
|
<view class="address-box">
|
|||
|
{{ index+1 }}
|
|||
|
</view>
|
|||
|
<view class="u-box">
|
|||
|
{{ item.userName }}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<text class="change-num" :class="
|
|||
|
userInfo.id==item.userId ? 'change-num-add' : 'change-num-reduce'
|
|||
|
">{{ item.step }}</text>
|
|||
|
</view>
|
|||
|
<rf-load-more class="load-more" :status="loadingType"></rf-load-more>
|
|||
|
</view>
|
|||
|
<view class="list1" :hidden="current !== 0">
|
|||
|
<view class="tip acea-row row-middle">
|
|||
|
<span class="iconfont icon-shuoming"></span>提示:
|
|||
|
</view>
|
|||
|
<view class="list b-b" v-for="(item, index) in integralOrderList" :key="index">
|
|||
|
<view class="wrapper">
|
|||
|
<view class="address-box">
|
|||
|
{{ index+1 }}
|
|||
|
</view>
|
|||
|
<view class="u-box">
|
|||
|
{{ item.data }}
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<text class="change-num" :class="
|
|||
|
true ? 'change-num-add' : 'change-num-reduce'
|
|||
|
">{{ item.step }}</text>
|
|||
|
</view>
|
|||
|
<rf-load-more class="load-more" :status="loadingType"></rf-load-more>
|
|||
|
</view>
|
|||
|
</view>
|
|||
|
<!--加载动画-->
|
|||
|
<rfLoading isFullScreen :active="loading"></rfLoading>
|
|||
|
</view>
|
|||
|
</template>
|
|||
|
<script>
|
|||
|
/**
|
|||
|
* @des 积分中心
|
|||
|
*
|
|||
|
* @author 237524947@qq.com
|
|||
|
* @date 2020-01-10 15:24
|
|||
|
* @copyright 2019
|
|||
|
*/
|
|||
|
import {
|
|||
|
runData,
|
|||
|
selectOrderBYStep,stepToBlance,
|
|||
|
queryStepData
|
|||
|
} from '@/api/userInfo';
|
|||
|
import rfLoadMore from '@/components/rf-load-more/rf-load-more.vue';
|
|||
|
|
|||
|
import moment from '@/common/moment';
|
|||
|
export default {
|
|||
|
name: 'Integral',
|
|||
|
components: {
|
|||
|
rfLoadMore
|
|||
|
},
|
|||
|
data() {
|
|||
|
return {
|
|||
|
navList: [{
|
|||
|
name: '我的步数'
|
|||
|
}, {
|
|||
|
name: '步数排名'
|
|||
|
}],
|
|||
|
current: 0,
|
|||
|
allowStep:0,
|
|||
|
todayStep:0,
|
|||
|
pointAdd: 0,
|
|||
|
pointMin: 0,
|
|||
|
integralList: [],
|
|||
|
integralOrderList: [],
|
|||
|
loadingType: 'more',
|
|||
|
pageNum: 0,
|
|||
|
userInfo: {},
|
|||
|
loading: true
|
|||
|
};
|
|||
|
},
|
|||
|
// 小程序分享
|
|||
|
// 下拉刷新
|
|||
|
onPullDownRefresh() {
|
|||
|
|
|||
|
this.initData();
|
|||
|
setTimeout(() => {
|
|||
|
uni.stopPullDownRefresh();
|
|||
|
}, 250);
|
|||
|
},
|
|||
|
onShareAppMessage() {
|
|||
|
if (!this.hasLogin) {
|
|||
|
let userInfo = uni.getStorageSync('userInfo')
|
|||
|
return {
|
|||
|
title: `邀请好友获取步数来兑换奖品吧!`,
|
|||
|
path: '/pages/index/index?recommondCode='+userInfo.selfRecommendCode
|
|||
|
};
|
|||
|
} else {
|
|||
|
return {
|
|||
|
title: `邀请好友获取步数来兑换奖品吧!`,
|
|||
|
path: '/pages/index/index'
|
|||
|
};
|
|||
|
}
|
|||
|
|
|||
|
},
|
|||
|
onLoad(option) {
|
|||
|
this.initData(option);
|
|||
|
},
|
|||
|
filters: {
|
|||
|
time(val) {
|
|||
|
return moment(val * 1000).format('YYYY-MM-DD HH:mm:ss');
|
|||
|
},
|
|||
|
numFilter(val) {
|
|||
|
return val >= 0 ? `+${val.toString()}` : val;
|
|||
|
}
|
|||
|
},
|
|||
|
// 加载更多
|
|||
|
onReachBottom() {
|
|||
|
if (this.loadingType === 'nomore') return;
|
|||
|
this.pageNum++;
|
|||
|
this.getIntegralListList();
|
|||
|
},
|
|||
|
methods: {
|
|||
|
toCategory() {
|
|||
|
this.$mRouter.reLaunch({
|
|||
|
route: '/pages/category/category'
|
|||
|
});
|
|||
|
},
|
|||
|
nav(index) {
|
|||
|
this.loading = true;
|
|||
|
this.current = index;
|
|||
|
this.pageNum = 0;
|
|||
|
this.integralOrderList.length = 0;
|
|||
|
if (index == 1) {
|
|||
|
this.selectOrderBYStep();
|
|||
|
} else {
|
|||
|
this.queryStepData();
|
|||
|
}
|
|||
|
|
|||
|
},
|
|||
|
async stepToBlance(){
|
|||
|
console.log(this.allowStep)
|
|||
|
if(this.allowStep<1001){
|
|||
|
this.$mHelper.toast('步数不够1000,不能兑换');
|
|||
|
return false;
|
|||
|
}
|
|||
|
await this.$http
|
|||
|
.get(`${stepToBlance}`, {
|
|||
|
|
|||
|
})
|
|||
|
.then(r => {
|
|||
|
|
|||
|
this.$mHelper.toast('成功兑换'+r+'个积分');
|
|||
|
this.pageNum = 0;
|
|||
|
this.integralOrderList.length = 0;
|
|||
|
this.initData();
|
|||
|
});
|
|||
|
},
|
|||
|
initData(option) {
|
|||
|
// if (false) {
|
|||
|
if (this.$mStore.getters.hasLogin) {
|
|||
|
var baseUrl = `${this.$mConfig.baseUrl}`;
|
|||
|
let aStep =0;
|
|||
|
uni.authorize({
|
|||
|
scope: 'scope.werun',
|
|||
|
success() {
|
|||
|
wx.getWeRunData({
|
|||
|
success: function(res) {
|
|||
|
wx.request({
|
|||
|
url: baseUrl + `${runData}`,
|
|||
|
method: 'post',
|
|||
|
header: {
|
|||
|
'content-type': 'application/json',
|
|||
|
'Authorization': 'Bearer ' + uni.getStorageSync('accessToken')
|
|||
|
},
|
|||
|
data: {
|
|||
|
iv: res.iv,
|
|||
|
encryptedData: res.encryptedData,
|
|||
|
sessionKey: uni.getStorageSync('sessionKey')
|
|||
|
},
|
|||
|
success: res => {
|
|||
|
|
|||
|
uni.setStorageSync('todayStep', res.data.data.currentStep)
|
|||
|
uni.setStorageSync('allowStep', res.data.data.allowStep)
|
|||
|
|
|||
|
},
|
|||
|
fail: err => {
|
|||
|
console.log(err)
|
|||
|
wx.showModal({
|
|||
|
title: '提示',
|
|||
|
content: err,
|
|||
|
showCancel: false,
|
|||
|
confirmText: '知道了'
|
|||
|
})
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
})
|
|||
|
this.allowStep=uni.getStorageSync('allowStep')
|
|||
|
this.todayStep=uni.getStorageSync('todayStep')
|
|||
|
}
|
|||
|
this.userInfo = uni.getStorageSync('userInfo') || undefined;
|
|||
|
|
|||
|
if (option && option.index == 1) {
|
|||
|
this.nav(1)
|
|||
|
this.selectOrderBYStep();
|
|||
|
} else {
|
|||
|
this.queryStepData();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
},
|
|||
|
|
|||
|
|
|||
|
async queryStepData() {
|
|||
|
await this.$http
|
|||
|
.get(`${queryStepData}`, {
|
|||
|
pageNum: this.pageNum,
|
|||
|
|
|||
|
})
|
|||
|
.then(r => {
|
|||
|
this.loading = false;
|
|||
|
if (r.rows) {
|
|||
|
this.loadingType = r.rows.length === 10 ? 'more' : 'nomore';
|
|||
|
this.integralOrderList = [...this.integralOrderList, ...r.rows];
|
|||
|
}
|
|||
|
})
|
|||
|
.catch(() => {
|
|||
|
this.loading = false;
|
|||
|
});
|
|||
|
uni.setStorageSync('todayStep', this.integralOrderList[0].step)
|
|||
|
this.allowStep=uni.getStorageSync('allowStep')
|
|||
|
this.todayStep=uni.getStorageSync('todayStep')
|
|||
|
},
|
|||
|
async selectOrderBYStep() {
|
|||
|
await this.$http
|
|||
|
.get(`${selectOrderBYStep}`, {
|
|||
|
pageNum: this.pageNum,
|
|||
|
})
|
|||
|
.then(r => {
|
|||
|
this.loading = false;
|
|||
|
this.integralList = r;
|
|||
|
var count = 0;
|
|||
|
this.integralList.forEach(level => {
|
|||
|
console.log(level.step+',,'+level.userId)
|
|||
|
count++;
|
|||
|
if (level.userId == this.userInfo.id) {
|
|||
|
|
|||
|
if (count > 99) {
|
|||
|
uni.setStorageSync('todayRank', '99+' )
|
|||
|
} else { let counts=1;
|
|||
|
counts=count;
|
|||
|
uni.setStorageSync('todayRank', counts)
|
|||
|
}
|
|||
|
throw Error();
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
})
|
|||
|
.catch(() => {
|
|||
|
this.loading = false;
|
|||
|
});
|
|||
|
}
|
|||
|
}
|
|||
|
};
|
|||
|
</script>
|
|||
|
<style scoped lang="scss">
|
|||
|
page {
|
|||
|
background-color: $color-white;
|
|||
|
}
|
|||
|
|
|||
|
.integral {
|
|||
|
background-color: $color-white;
|
|||
|
/* #ifndef H5 */
|
|||
|
height: 100vh;
|
|||
|
|
|||
|
/* #endif */
|
|||
|
.header {
|
|||
|
opacity: 0.9;
|
|||
|
background-repeat: no-repeat;
|
|||
|
background-size: 100% 100%;
|
|||
|
width: 100%;
|
|||
|
height: 420upx;
|
|||
|
font-size: $font-base;
|
|||
|
color: #fff;
|
|||
|
padding: 20upx 0;
|
|||
|
text-align: center;
|
|||
|
position: relative;
|
|||
|
|
|||
|
.title {
|
|||
|
font-size: $font-sm;
|
|||
|
margin: 10upx 0;
|
|||
|
}
|
|||
|
|
|||
|
.num {
|
|||
|
/*<!--color: $base-color;-->*/
|
|||
|
font-size: $font-lg + 20upx;
|
|||
|
font-weight: lighter;
|
|||
|
line-height: 1;
|
|||
|
}
|
|||
|
|
|||
|
.line {
|
|||
|
width: 10%;
|
|||
|
height: 3upx;
|
|||
|
background-color: #fff;
|
|||
|
margin: 20upx auto 30upx;
|
|||
|
}
|
|||
|
|
|||
|
.nav {
|
|||
|
width: 100%;
|
|||
|
display: flex;
|
|||
|
|
|||
|
.item {
|
|||
|
flex: 1;
|
|||
|
|
|||
|
.num {
|
|||
|
font-size: $font-lg + 4upx;
|
|||
|
display: block;
|
|||
|
line-height: 1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.tab {
|
|||
|
position: absolute;
|
|||
|
bottom: -2upx;
|
|||
|
display: flex;
|
|||
|
width: 80%;
|
|||
|
margin: 0 10%;
|
|||
|
border-radius: 20upx 20upx 0 0;
|
|||
|
background-color: #f7f7f7;
|
|||
|
height: 80upx;
|
|||
|
line-height: 80upx;
|
|||
|
font-size: $font-base;
|
|||
|
color: #bbb;
|
|||
|
|
|||
|
.item {
|
|||
|
flex: 1;
|
|||
|
text-align: center;
|
|||
|
line-height: 80upx;
|
|||
|
}
|
|||
|
|
|||
|
.on {
|
|||
|
background-color: #fff;
|
|||
|
font-weight: bold;
|
|||
|
border-radius: 20upx 0 0 0;
|
|||
|
}
|
|||
|
|
|||
|
.on:last-child {
|
|||
|
border-radius: 0 20upx 0 0;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.wrapper .list1 {
|
|||
|
background-color: #fff;
|
|||
|
|
|||
|
.tip {
|
|||
|
font-size: $font-sm;
|
|||
|
width: 90%;
|
|||
|
margin: $spacing-base 5%;
|
|||
|
height: 64upx;
|
|||
|
line-height: 64upx;
|
|||
|
border-radius: 30upx;
|
|||
|
background-color: #fff5e2;
|
|||
|
border: 1px solid #ffeac1;
|
|||
|
color: #c8a86b;
|
|||
|
text-align: center;
|
|||
|
}
|
|||
|
|
|||
|
.list {
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
padding: 20upx 36upx;
|
|||
|
background: #fff;
|
|||
|
position: relative;
|
|||
|
|
|||
|
.wrapper {
|
|||
|
display: flex;
|
|||
|
flex-direction: column;
|
|||
|
flex: 1;
|
|||
|
|
|||
|
.address-box {
|
|||
|
display: flex;
|
|||
|
align-items: center;
|
|||
|
font-size: $font-base;
|
|||
|
color: $font-color-dark;
|
|||
|
}
|
|||
|
|
|||
|
.u-box {
|
|||
|
color: $font-color-light;
|
|||
|
font-size: $font-sm;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.change-num {
|
|||
|
font-size: $font-lg + 4upx;
|
|||
|
color: $font-color-base;
|
|||
|
}
|
|||
|
|
|||
|
.change-num-add {
|
|||
|
color: #16ac57;
|
|||
|
}
|
|||
|
|
|||
|
.change-num-reduce {
|
|||
|
color: $base-color;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.wrapper .list2 {
|
|||
|
/*background-color: #F76260;*/
|
|||
|
}
|
|||
|
|
|||
|
.wrapper .list2 .item {
|
|||
|
background-image: linear-gradient(to right, #fff7e7 0%, #fffdf9 100%);
|
|||
|
width: 90%;
|
|||
|
margin: $spacing-base 5%;
|
|||
|
height: 120upx;
|
|||
|
line-height: 120upx;
|
|||
|
position: relative;
|
|||
|
border-radius: 20upx;
|
|||
|
padding: 0 20upx;
|
|||
|
display: flex;
|
|||
|
}
|
|||
|
|
|||
|
.wrapper .list2 .item .pictrue {
|
|||
|
width: 60upx;
|
|||
|
height: 100upx;
|
|||
|
margin: 20upx 0;
|
|||
|
|
|||
|
image {
|
|||
|
width: 80%;
|
|||
|
height: 80%;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
.wrapper .list2 .item .name {
|
|||
|
flex: 1;
|
|||
|
font-size: $font-sm;
|
|||
|
font-weight: bold;
|
|||
|
color: #c8a86b;
|
|||
|
margin: 0 20upx;
|
|||
|
}
|
|||
|
|
|||
|
.wrapper .list2 .item .earn {
|
|||
|
font-size: $font-sm;
|
|||
|
color: #c8a86b;
|
|||
|
border: 2upx solid #c8a86b;
|
|||
|
text-align: center;
|
|||
|
height: 48upx;
|
|||
|
margin: 36upx 0;
|
|||
|
width: 120upx;
|
|||
|
border-radius: 10upx;
|
|||
|
}
|
|||
|
</style>
|