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

463 lines
12 KiB

<template>
<view>
<global-loading />
<view class="signBox" v-if="ifShow">
<view class="signBg">
<view class="signDayNumBox flex-center" v-if="continuousNum">
<view class="signDayNum fs28">
当前周期已连续签到
<text class="fs40">{{ continuousNum || '0' }}</text>
</view>
</view>
<view v-if="currentDay == lastDay" class="signState flex-center mar-top-30">
<view class="signStateBg flex-items flex-center noSign">
<text class="fs48">已签到</text>
</view>
</view>
<view v-if="currentDay != lastDay" class="signState flex-center mar-top-30" @click="signInFn" >
<view class="signStateBg flex-items flex-center">
<text class="fs48">未签到</text>
</view>
</view>
<view class="calendarBox">
<view class="calendarBg">
<view class="calendar-box">
<view class="month">
<view class="u-arrow u-arrow-left" @click="lastMonth"></view>
<view class="font-color-252744">{{year}}年{{month}}月</view>
<view class="u-arrow u-arrow-right" @click="nextMonth"></view>
<picker v-if="checkDate" class="picker" mode="date" fields="month" @change="changeDate" />
</view>
<view class="week">
<view :style="'color:'+(weeks==weeked?bgweek:'')+';'" v-for="weeks in weekArr">{{weeks}}</view>
</view>
<view class="day">
<view
class="dayItem"
v-for="(days,index) in dayArr"
:key="index"
@click="signToday(days,index)"
>
<view
:class="[
{'checkday':days.date==''},
{'choose':days.date==currentDay},
{'select': days.select === 1}
]"
class="dayValue"
>{{days.day}}</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="redEnvelope mar-top-20">
<view class="redEnvelopeBg flex-items flex-end">
<view>
<view class="fs32 font-color-333">积分兑换红包优惠券</view>
<view class="fs24 font-color-999 mar-top-10">各种大额红包等你兑换哦</view>
<view class="fs24 font-color-FFF exchangeBtn mar-top-20" @click="goToexchange">马上兑换</view>
</view>
</view>
</view>
<!-- 签到弹窗 -->
<tui-modal :show="signTips" :custom="true" :fadein="true">
<view class="Put-box1">
<view class="text-align fs32 fs-bold font-color-252744">
签到成功
</view>
<view class="mar-top-40 text-align fs28 font-color-252744">
今日签到成功签到积分可以在我的积分内兑换商品
</view>
<view class="flex-display flex-sp-between">
<view class="btn" @click="signTips = false">
取消
</view>
<view class="btn submit" @click="signTips = false">
确定
</view>
</view>
</view>
</tui-modal>
</view>
</view>
</template>
<script>
import tuiModal from "@/components/modal/modal";
import dateUtil from "@/utils/dateUtil"
const NET = require('../../utils/request')
const API = require('../../config/api')
export default {
components: {
tuiModal
},
name: "sign",
data() {
return {
signList: [],
year: new Date().getFullYear(), // 当前年
month: new Date().getMonth() + 1, // 当前月
continuousNum: '', // 连续签到天数
currentDay: dateUtil.formatDate(),
currentMonth: dateUtil.formatMonth(),
lastDay: '',
weeked: '', // 今天周几
dayArr: [], // 当前月每日
day: new Date().getDate(), // 当前日
weekArr: ['日', '一', '二', '三', '四', '五', '六'], // 每周
type: 'sign',
checkDate: true,
bgweek: '#C5AA7B',
bgday: '#C5AA7B',
signTips: false,
ifShow: false
}
},
onLoad() {
this.getSignData()
},
methods: {
getSignData() {
// uni.showLoading({
// mask: true,
// title: '请稍等...',
// })
let selectMonth = this.year + '-' + this.formatNum(this.month)
const that = this
NET.request(API.selectByMonth,
{
month: `${this.year}-${this.formatNum(this.month)}`
},
'POST')
.then(res => {
// uni.hideLoading()
that.ifShow = true
that.signList = res.data
// 初始日期
that.initDate()
// 今天日期
if (that.currentMonth === selectMonth) {
that.continuousNum = that.signList[that.signList.length - 1].continueDay || 0;
that.lastDay = that.signList[that.signList.length - 1].createTime.substring(0,10);
}
// 今天周几
that.weeked = that.weekArr[new Date().getDay()];
// 签到功能
if (that.type !== 'calendar') {
for (let i in that.dayArr) {
that.$set(this.dayArr[i], 'flag', false);
}
}
that.signList.forEach((item) => {
item['day'] = parseInt(item.createTime.slice(8, 10))
})
for (let i = 0; i < that.signList.length; i++) {
for (let j = 0; j < that.dayArr.length; j++) {
if (that.signList[i].day === that.dayArr[j].day && that.dayArr[j].date !== '') {
that.dayArr[j].select = 1
}
}
}
}).catch(res => {})
},
signDate(event) {
},
// 签到
signInFn() {
// uni.showLoading({
// mask: true,
// title: '请稍等...',
// })
NET.request(API.creditSignIn, {}, 'POST').then(res => {
// uni.hideLoading()
this.getSignData()
this.signTips = true
}).catch(res => {})
},
// 格式化日期位数
formatNum(num) {
return num < 10 ? ('0' + num) : num;
},
// 选择年月
changeDate(e) {
let that = this;
that.year = parseInt(e.detail.value.split('-')[0]);
that.month = parseInt(e.detail.value.split('-')[1]);
this.getSignData()
},
// 点击签到
signToday(obj, index) {
},
// 初始化日期
initDate() {
let that = this;
that.dayArr = [];
// 当前月总天数
let totalDay = new Date(that.year, that.month, 0).getDate();
// 遍历总天数将日期逐个添加至数组
for (let i = 1; i <= totalDay; i++) {
// 得到需补充天数
let value = (new Date(that.year, that.month - 1, i)).getDay();
// 补充前面空白日期
if (i === 1 && value !== 0) that.addBefore(value);
// 添加本月日期
let obj = {};
obj.date = that.year + '-' + that.formatNum(that.month) + '-' + that.formatNum(i);
obj.day = i;
obj.select = 0
that.dayArr.push(obj);
// 补充后面空白日期
if (i === totalDay && value !== 6) that.addAfter(value);
}
},
// 补充前面空白日期
addBefore(value) {
let that = this;
let totalDay = new Date(that.year, that.month - 1, 0).getDate();
for (let i = 0; i < value; i++) {
let obj = {};
obj.date = '';
obj.day = totalDay - (value - i) + 1;
that.dayArr.push(obj);
}
},
// 补充后空白日期
addAfter(value) {
let that = this;
for (let i = 0; i < (6 - value); i++) {
let obj = {};
obj.date = '';
obj.day = i + 1;
that.dayArr.push(obj);
}
},
// 上一个月
lastMonth() {
let that = this;
if (that.month === 1) {
that.year -= 1;
that.month = 12;
} else {
that.month -= 1;
}
that.getSignData();
},
// 下一个月
nextMonth() {
let that = this;
if (that.month === 12) {
that.year += 1;
that.month = 1;
} else {
that.month += 1;
}
that.getSignData();
},
goToexchange() {
uni.navigateTo({
url: '../../pages_category_page1/integral/index?tabActive=2'
})
}
}
}
</script>
<style lang="scss" scoped>
page {
background: #F8F8F8;
}
.signBox {
padding-bottom: 50rpx;
.signBg {
background: url("@/static/images/temp/signBg.png") no-repeat left top;
background-size: contain;
min-height: 702rpx;
padding-top: 160rpx;
.signDayNumBox {
width: 100%;
.signDayNum {
color: #CBCCDE;
text {
color: #ffffff;
margin: 0 10rpx;
}
}
}
.signState {
.signStateBg {
width: 304rpx;
height: 304rpx;
background: url("@/static/images/temp/signState.png") no-repeat left top;
background-size: contain;
text {
color: #C83732;
}
}
.noSign {
background: url("@/static/images/temp/signState1.png") no-repeat left top;
background-size: contain;
text {
color: #FFFFFF;
}
}
}
.checked {
.signStateBg {
text {
color: #FFFFFF;
}
}
}
.calendarBox {
padding: 0 20rpx;
min-height: 300rpx;
.calendarBg {
border-radius: 16rpx;
background: #FAFAFA;
box-shadow: 0 10rpx 20rpx rgba(0, 0, 0, 0.05);
overflow: hidden;
}
}
}
.redEnvelope {
padding: 0 20rpx;
.redEnvelopeBg {
height: 230rpx;
background: url("http://36.138.125.206:8081/ceres-local-file/static/images/redEnvelopeBg.png") no-repeat left top;
background-size: contain;
padding-right: 50rpx;
.exchangeBtn {
width: 160rpx;
height: 56rpx;
line-height: 56rpx;
background: #C83732;
border-radius: 8rpx;
text-align: center;
}
}
}
}
.calendar-box {
width: 100%;
flex-direction: column;
justify-content: center;
}
.calendar-box,
.month,
.week,
.day {
display: flex;
align-items: center;
justify-content: space-between;
}
.month,
.week,
.day {
width: 100%;
}
.month {
height: 96rpx;
padding: 0 50rpx;
position: relative;
background: #EDEEFE;
.u-arrow {
border-top: 4rpx solid #666;
border-right: 4rpx solid #666;
}
}
.picker {
width: 160rpx;
height: 40rpx;
position: absolute;
top: 20rpx;
left: 50%;
transform: translate(-50%, -50%);
}
.day {
flex-wrap: wrap;
.dayValue {
}
}
.week>view,
.day>view.dayItem {
width: 100rpx;
height: 100rpx;
position: relative;
line-height: 100rpx;
display: flex;
justify-content: center;
align-items: center;
}
.dayValue {
width: 60rpx;
height: 60rpx;
text-align: center;
position: relative;
line-height: 60rpx;
}
.checkday {
color: #999;
}
.select {
background: #EDEEFE;
color: #252744;
border-radius: 50%;
}
.choose {
color: #FFFFFF;
background: #545784;
border-radius: 50%;
}
.circle {
width: 10rpx;
height: 10rpx;
border-radius: 50%;
position: absolute;
bottom: 10%;
left: 50%;
transform: translate(-50%, -50%);
}
.sign {
background-color: #0089fe;
}
.repair {
background-color: #f4a01a;
}
.Put-box1 {
.btn {
text-align: center;
margin-top: 40rpx;
border: 1rpx solid #252744;
border-radius: 40rpx;
height: 80rpx;
line-height: 80rpx;
width: 240rpx;
color: #252744;
}
.submit {
background-color: #252744;
color: #ffffff;
}
}
</style>