多租户商城-商户小程序端
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.
 
 
 

334 lines
7.9 KiB

<template>
<view class="memberCenter">
<global-loading />
<view class="avatarTop">
<view class="avatarBox">
<image :src="memberData.headImage"></image>
</view>
<view class="nameBox">
<view class="name fs36">{{memberData.name}}</view>
<view class="level">
<image :src="levelInfo.memberLevelIcon"></image>
</view>
</view>
</view>
<view class="signInfoBox">
<view class="accumulate flex-items flex-sp-between">
<view class="accumulateTit">
<label class="fs6">已累计签到</label>
<text class="fs6">{{signDate}}</text>
</view>
<view class="toSignBtn fs24" :class="{active: currentData === upDate}" @click="signInFn">
{{ currentData === upDate ? '已签到' : '立即签到'}}</view>
</view>
<view class="points">
<label>{{currentData === upDate ? '明' : '今'}}日签到可获得<text>{{recordList.length === 0 ? '10积分' : ''}}</text></label>
<text v-if="recordList.length === 1">20积分</text>
<text v-if="recordList.length === 2">30积分</text>
<text v-if="recordList.length === 3">40积分</text>
<text v-if="recordList.length === 4">50积分</text>
<text v-if="recordList.length === 5">60积分</text>
<text v-if="recordList.length === 6">100积分</text>
</view>
<view class="signDateList">
<view class="signItem" v-for="(item, index) of recordList" :key="item.signinId">
<view class="topIcon">
<image src="https://ceres.zkthink.com/static/img/member/signIcon.png"></image>
</view>
<view class="dateInfo">{{ index + 1 }}天</view>
</view>
<view class="signItem" v-for="index of noSign" :key="index">
<view class="topIcon">
<image src="https://ceres.zkthink.com/static/img/member/signIcon2.png"></image>
</view>
<!-- #ifdef MP-WEIXIN -->
<view class="dateInfo">{{recordList.length+index+1}}</view>
<!-- #endif -->
<!-- #ifdef H5 -->
<view class="dateInfo">{{recordList.length+index}}</view>
<!-- <view class="dateInfo">{{index+1}}</view> -->
<!-- #endif -->
</view>
</view>
<view class="fs24 font-color-71521B">连续签到可获得超额奖励哦</view>
</view>
<view class="signInList">
<view class="signTit fs30 font-color-333">签到明细</view>
<view class="signInBox" v-if="historyList.length !==0">
<view class="signItem flex-items flex-sp-between" v-for="item of historyList" :key="item.signinId">
<view class="itemLeft flex-items">
<view class="leftInfo">
<label class="fs28 font-color-333">签到</label>
<view class="fs24 font-color-999">{{item.createTime}}</view>
</view>
</view>
<view class="rightBtn">+{{item.growth}}</view>
</view>
</view>
<view v-if="historyList.length === 0" class="fs24 noHistory">暂无签到记录~</view>
</view>
</view>
</template>
<script>
import NET from "../../utils/request";
import API from "../../config/api";
export default {
name: "index",
data() {
return {
growingValue: 80,
growingMax: 3500,
memberData: {},
recordList: {},
historyList: [],
page: 1,
pageSize: 5,
levelInfo: {},
noSign: 7,
signDate: 0,
currentData: '',
upDate: '',
loadingType:false, //判断是否触发onReachBottom
}
},
onLoad() {
this.getDate();
this.memberData = uni.getStorageSync('storage_userInfo');
this.levelInfo = uni.getStorageSync('storage_levelInfo');
this.getSelectSigninRecordList()
this.getSelectSigninHistory()
},
onReachBottom(){
if(this.loadingType){
uni.stopPullDownRefresh()
}else{
this.page = this.page+1
this.getSelectSigninHistory()
}
},
methods: {
getSelectSigninRecordList() {
this.noSign = 7
this.signDate = 0
// 获取签到
// uni.showLoading({
// mask: true,
// title: '加载中...',
// })
NET.request(API.selectSigninRecordList, {}, 'GET').then(res => {
uni.hideLoading()
this.recordList = res.data
this.noSign = this.noSign - this.recordList.length
// this.signDate = this.recordList.length
let newDate = this.recordList[this.recordList.length - 1]
this.upDate = newDate.createTime.slice(0, 10)
}).catch(res => {})
},
getSelectSigninHistory() {
// 获取签到历史
let param = ''
param = {
page: this.page,
pageSize: this.pageSize,
}
// uni.showLoading({
// mask: true,
// title: '加载中...',
// })
NET.request(API.selectSigninHistory, param, 'GET').then(res => {
if(res.data.list.length===0){
this.loadingType = true
this.page = this.page
}
uni.hideLoading()
this.historyList = this.historyList.concat(res.data.list);
this.signDate = res.data.total
}).catch(res => {
uni.hideLoading()
})
},
// 签到
signInFn() {
if (this.upDate !== this.currentData) {
// uni.showLoading({
// mask: true,
// title: '请稍等...',
// })
NET.request(API.signIn, {}, 'POST').then(res => {
uni.hideLoading()
uni.showToast({
title: '签到成功!',
icon: 'none'
})
this.getSelectSigninRecordList()
this.getSelectSigninHistory()
}).catch(res => {})
}
},
getDate() {
const year = new Date().getFullYear()
const month = new Date().getMonth() + 1 < 10 ? '0' + (new Date().getMonth() + 1) : (new Date().getMonth() +
1)
const date = new Date().getDate() < 10 ? '0' + new Date().getDate() : new Date().getDate()
this.currentData = year + '-' + month + '-' + date
}
}
}
</script>
<style lang="scss" scoped>
page {
background: #F8F8F8;
}
.memberCenter {
border-top: 2rpx solid #4b4b4b;
background: url("https://ceres.zkthink.com/static/img/member/memberSignBg.png") no-repeat left top;
background-size: contain;
min-height: 900rpx;
padding: 0 20rpx;
.avatarTop {
text-align: center;
margin-top: 30rpx;
}
.avatarBox {
margin-bottom: 20rpx;
image {
width: 110rpx;
height: 110rpx;
border: 5rpx solid #FFFFFF;
border-radius: 50%;
}
}
.nameBox {
.name {
font-size: 36rpx;
color: #FFFFFF;
font-weight: bold;
}
.level {
image {
width: 172rpx;
height: 50rpx;
}
}
}
.signInList {
background: #FFFFFF;
border-radius: 20rpx;
padding: 30rpx;
.signTit {
font-weight: bold;
height: 92rpx;
line-height: 92rpx;
}
.signInBox {
.signItem {
border-top: 2rpx solid #F3F4F5;
padding: 30rpx 0;
.itemLeft {
image {
width: 92rpx;
height: 92rpx;
margin-right: 30rpx;
}
}
}
.rightBtn {
width: 160rpx;
height: 58rpx;
line-height: 58rpx;
background: #F6EEDB;
border-radius: 10rpx;
color: #C5AA7B;
text-align: center;
}
}
}
.signInfoBox {
height: 366rpx;
border: 2rpx solid rgba(0, 0, 0, 0);
background: linear-gradient(88deg, #D8BD8D 0%, #EFD8AB 100%);
border-radius: 10rpx;
margin-top: 40rpx;
padding: 30rpx 40rpx;
box-sizing: border-box;
.accumulate {
.points {
margin-top: 15rpx;
margin-bottom: 30rpx;
}
label {
color: #71521B;
}
text {
color: #C83732;
margin-left: 20rpx
}
.toSignBtn {
width: 160rpx;
height: 58rpx;
line-height: 58rpx;
background: #333333;
border-radius: 10rpx;
color: #FFEBC4;
text-align: center;
}
.active {
opacity: 0.8;
}
.accumulateTit {
font-weight: bold;
}
}
.signDateList {
display: flex;
flex-flow: wrap;
justify-content: space-around;
margin: 20rpx 0;
.signItem {
text-align: center;
.topIcon {
image {
width: 60rpx;
height: 60rpx;
}
}
}
.active {}
}
}
.noHistory {
color: #999999;
height: 100rpx;
line-height: 100rpx;
border-top: 2rpx solid #F3F4F5;
}
}
</style>