java-mall-app/member/member/growth.vue
2024-11-01 16:35:40 +08:00

398 lines
8.8 KiB
Vue

<template>
<view class="page">
<view class="m-product-all">
<view class="m-tab">
<view class="m-navbar">
<view :class="['m-navbar-item', tapindex==1?'m-navbar-item-on':'']" @click="allOrders">
{{__('成长值解读')}}
</view>
<view :class="['m-navbar-item', tapindex==2?'m-navbar-item-on':'']" @click="toBePaid">
{{__('成长值明细')}}
</view>
</view>
</view>
<view :class="[tapindex==1?'':'hide']" style="font-size:28rpx;position:absolute;top:66rpx">
<view style="background:#fff;overflow:hidden">
<view class="what">
<text>{{__('什么是成长值')}}</text>
</view>
<view class="specific">
{{__('成长值是会员通过购物、评价、签到等行为获得的,成长值总额决定了会员等级。')}}
</view>
<view class="contrast">
<text>{{__('会员等级对照表')}}</text>
</view>
<view class="table">
<view class="title">
<label class="title-left">
{{__('会员等级')}}
</label>
<label class="title-right">
{{__('所需成长值')}}
</label>
</view>
<view class="title" v-for="(items, index) in Info" :key="index">
<label class="title-left">
{{items.user_level_name}}
</label>
<label class="title-right">
{{items.user_level_exp}}
</label>
</view>
</view>
</view>
<view style="margin-top:20rpx;background:#fff;overflow:hidden;">
<view class="how">
<text>{{__('如何获取')}}</text>
</view>
<view style="margin-top:30rpx;">
<view class="rule">
<text>{{__('1、购物')}}</text>
<view>{{__('确认后可获得成长值,获取成长值=订单金额*')}}{{growthvalue.exp_consume_rate ? growthvalue.exp_consume_rate : 0}}。</view>
</view>
<view class="rule">
<text>{{__('2、下单')}}</text>
<view>{{__('提交一个订单并且通过审核后最高可获得')}}{{growthvalue.exp_consume_max ? growthvalue.exp_consume_max : 0}}{{__('个成长值。')}}</view>
</view>
<view class="rule">
<text>{{__('3、签到')}}</text>
<view>{{__('每日签到可获得')}}{{growthvalue.exp_login ? growthvalue.exp_login : 0}}{{__('个成长值')}}。</view>
</view>
<view class="rule">
<text>{{__('4、进行商品评价')}}</text>
<view>{{__('购买商品订单交易完成后可获得')}}{{growthvalue.exp_evaluate_good ? growthvalue.exp_evaluate_good : 0}}{{__('个成长值')}}。</view>
</view>
</view>
</view>
</view>
<view :class="(tapindex==2?'':'hide')" style="font-size:28rpx">
<scroll-view v-if="(list.length>0)" scroll-y="true" class="m-orderlist" @scrolltolower="scrollbottom" style="width:100%;height:100%;position:absolute;top:66rpx">
<view class="detail" v-for="(items, i) in list" :key="i">
<view class="detail-left">
<text>{{items.exp_log_desc}}</text>
<view class="time" style="margin-top:20rpx">{{items.exp_log_time}}</view>
</view>
<view class="detail-right">+{{items.exp_log_value}}</view>
</view>
<view class="m-loading-box">
<block v-if="(ispage)">
<view class="u-loadmore">
<label class="u-loading"></label>
<text class="u-loadmore-tips">{{__('正在加载')}}</text>
</view>
</block>
<block v-else>
<view class="u-loadmore u-loadmore-line">
<text class="u-loadmore-tips">{{__('没有更多数据啦!')}}</text>
</view>
</block>
</view>
</scroll-view>
<view redirect="true" class="m-nullpage" v-else>
<view class="m-nullpage-middle">
<view class="m-null-tip">
<text>{{__('亲~您还没有成长值哦')}}</text>
</view>
</view>
</view>
</view>
</view>
</view>
</template>
<script>
import {
mapState,
mapMutations
} from 'vuex'
export default {
data: function() {
return {
list: [],
tapindex: 1,
page: 1,
ispage: true,
flag: true,
Info: "",
growthvalue: "",
windowHeight: 0
}
},
computed: mapState(['Config', 'StateCode', 'notice', 'plantformInfo', 'shopInfo', 'userInfo', 'hasLogin']),
onLoad: function(options) {
uni.setNavigationBarTitle({
title: this.__('成长值')
});
let that = this;
try {
var t = that.$.getSystemInfoSync();
this.setData({
windowHeight: t.windowHeight
})
} catch (n) {
//console.log(" Do something when catch error")
}
var params = {};
// 等级规则
that.$.request({
url: this.Config.URL.user.lists_base_level,
data: params,
success: function(data, status, msg, code) {
if (200 == status) {
that.setData({
Info: data.items
})
}
}
});
// 获取成长经验的途径
that.$.request({
url: this.Config.URL.user.listsExpRule,
data: params,
success: function(data, status, msg, code) {
if (200 == status) {
that.setData({
growthvalue: data
})
}
}
});
this.getMemberGrowthDetailList()
},
methods: {
...mapMutations(['login', 'logout', 'getPlantformInfo', 'forceUserInfo', 'getUserInfo']),
getMemberGrowthDetailList: function() {
var that = this,
params = {
page: this.page,
rows: 20
};
// 列出成长值
that.$.request({
url: this.Config.URL.user.listsExp,
data: params,
success: function(data, status, msg, code) {
if (200 == status && data.items.length > 0) {
if (data.page >= data.total) {
that.setData({
flag: false,
ispage: false,
list: that.list.concat(data.items)
})
} else {
that.setData({
flag: true,
ispage: true,
list: that.list.concat(data.items)
})
}
} else {
that.setData({
flag: false,
ispage: false
})
}
}
});
},
allOrders: function() {
this.setData({
tapindex: 1
})
},
toBePaid: function() {
this.setData({
tapindex: 2
})
},
scrollbottom: function() {
if (this.flag) {
var that = this;
that.setData({
flag: false
}), clearTimeout(t);
var t = setTimeout(function() {
that.setData({
page: that.page + 1
}), that.getMemberGrowthDetailList()
}, 500)
}
}
}
};
</script>
<style lang="scss">
@import "../../styles/_variables";
.m-navbar-item {
padding: 20rpx 0;
font-size: 24rpx;
}
.m-navbar-item:after {
border: none;
}
.m-navbar-item.m-navbar-item-on {
background-color: #fff;
color: $default-skin-bg;
}
.m-navbar-item.m-navbar-item-on::before {
content: " ";
position: absolute;
left: 0;
bottom: 0;
right: 0;
height: 6rpx;
border-bottom: 6rpx solid $default-skin-bg;
color: #CCCCCC;
-webkit-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
z-index: 3;
}
.m-tab {
position: fixed;
width: 100%;
top: var(--window-top);
z-index: 2;
}
.what {
width: 100%;
margin-top: 58rpx;
text-align: center
}
.what text {
font-size: 32rpx;
font-weight: bolder;
color: #333;
}
.specific {
width: 80%;
margin: 26rpx auto 0;
color: #505050;
font-size: 28rpx
}
.contrast {
width: 100%;
margin-top: 40rpx;
text-align: center
}
.contrast text {
font-size: 28rpx;
color: #333
}
.table {
width: 80%;
border-top: 1px solid #d9d9d9;
border-left: 1px solid #d9d9d9;
margin: 40rpx auto;
}
.table .title {
display: flex;
width: 100%
}
.title-left,
.title-right {
width: 50%;
border-bottom: 1px solid #d9d9d9;
border-right: 1px solid #d9d9d9;
text-align: center;
height: 60rpx;
line-height: 60rpx;
font-size: 24rpx;
color: #505050
}
.how {
width: 100%;
margin-top: 30rpx;
text-align: center
}
.how text {
font-size: 32rpx;
font-weight: bolder;
}
.rule {
padding: 14rpx 30rpx;
font-size: 28rpx
}
.rule text {
color: #333
}
.rule view {
margin-top: 10rpx;
color: #505050
}
/* .detail{
display: flex;
justify-content: space-between;
padding: 24rpx 30rpx;
align-items: center;
border-bottom:1px solid #d9d9d9;
background: #fff
} */
.detail {
padding: 24rpx 30rpx;
position: relative;
display: -webkit-box;
display: -webkit-flex;
display: flex;
-webkit-box-align: center;
-webkit-align-items: center;
align-items: center;
justify-content: space-between;
background: #fff
}
.detail::before {
content: " ";
position: absolute;
left: 0;
top: 0;
right: 0;
height: 1px;
border-bottom: 1px solid #ebebe7;
color: #ebebe7;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.detail-left {
color: #333;
}
.detail-left view {
margin-top: 10rpx;
}
.detail-right {
color: #505050
}
</style>