VUE 日历签到

<style lang="scss">
@import "../assets/css/px2rem.scss";
.sign-box {
   100%;
  min-height: 100%;
  background: #f5f5f5;
  position: relative;
  .top-box {
    padding: px2rem(40) px2rem(30) px2rem(0);
    background: #4bc7c7;
  }
  .person-box {
    display: flex;
    justify-content: space-around;
    align-items: center;
  }
  .sign-personInfor {
    display: flex;
    color: #fff;
    align-items: center;
    .headImg {
      position: relative;
      margin-right: px2rem(30);
      img {
         px2rem(140);
        height: px2rem(140);
        display: block;
      }
    }
    .nickname {
      p:first-child {
        font-size: px2rem(34);
      }
      p:last-child {
        font-size: px2rem(28);
        span {
          color: #f60;
        }
      }
    }
  }
  .sign-btn {
    font-size: px2rem(34);
    border: 0;
    background: rgba(0, 0, 0, 0.4);
    height: px2rem(70);
    line-height: px2rem(50);
     px2rem(140);
    border-radius: px2rem(14);
    color: #fff;
  }
  .integral-box {
    font-size: px2rem(30);
    color: #fff;
    display: flex;
    justify-content: space-around;
    margin-top: px2rem(20);
    font-size: px2rem(34);
    .sign-price {
      flex: 0 0 40%;
      p {
        text-align: center;
        height: px2rem(80);
        line-height: px2rem(80);
        img {
           px2rem(40);
          margin-right: px2rem(10);
          vertical-align: sub;
        }
      }
    }
  }
    .calender {
        background: #fff;
         100%;
        border-radius: px2rem(10);
        box-shadow: 0 px2rem(4) px2rem(4) rgba($color: #000000, $alpha: 0.2);
        .ui-datepicker-wrapper {
             100%;
            font-size: px2rem(24);
            color: #666;
            box-shadow: px2rem(2) px2rem(2) px2rem(8) px2rem(2) rgba(128,128,128,.3);
            &.ui-datepicker-wrapper-show {
                display: block;
            }
            .ui-datepicker-header {
                height: px2rem(100);
                line-height: px2rem(100);
                text-align: center;
                border-bottom: px2rem(1) solid #eaeaea;
                font-weight: bold;
                .ui-datepicker-curr-month {
                    font-size: px2rem(30);
                }
                .ui-datepicker-btn {
                    height: px2rem(100);
                     px2rem(100);
                }
                .ui-datepicker-prev {
                    background: url(../assets/img/arrow-l.png) no-repeat center center;
                    background-size: px2rem(20) auto;  
                    float: left;
                }
                .ui-datepicker-next {
                    background: url(../assets/img/arrow-r.png) no-repeat center center;
                    background-size: px2rem(20) auto;  
                    float: right;
                }
            }
            .ui-datepicker-body {
                .datepicker-weekday {
                    .weekday-head {
                        display: flex;
                        justify-content: space-around;
                        border-bottom: px2rem(1) solid #777;
                        li {
                            height: px2rem(100);
                            line-height: px2rem(100);
                            font-size: px2rem(30);
                            font-weight: bold;
                        }
                    }
                    .weekday-days {
                        display: flex;
                        justify-content: space-around;
                        flex-wrap: wrap;
                        li {
                            flex: 0 1 14.2%;
                            text-align: center; 
                            height: px2rem(90);
                            line-height: px2rem(90);
                            font-size: px2rem(24);
                            &.active {
                                background: url(../assets/img/right-mark.png) no-repeat center center;
                                background-size: 50% auto;
                            }
                            &.ifDiabled {
                                color: #DDD;
                                visibility: hidden;
                            }
                        }
                    }
                }
            }
        }
    }
}
</style>
<template>
    <div class="sign-box">
        <div class="top-box">
            <div class="person-box">
                <div class="sign-personInfor">
                    <div class="headImg">
                        <img src="../assets/img/head-img.png" alt="">
                    </div>
                    <div class="nickname">
                        <p>我是大橙子</p>
                        <p>您连续签到:<span>7天</span></p>
                    </div>
                </div>
                <button class="sign-btn" @click="signIn">签到</button>
            </div>
            <div class="integral-box">
                <div class="sign-price">
                    <p><img src="../assets/img/red-packet.png" alt="">红包:5.00</p>
                </div>
                <div class="sign-price">
                    <p><img src="../assets/img/banshou.png" alt=""> 小扳手:320</p>
                </div>
            </div>
        </div>
        <div class="calender">
            <div class="ui-datepicker-wrapper ui-datepicker-wrapper-show">
                <div class="ui-datepicker-header">
                    <a href="javascript:;" class="ui-datepicker-btn ui-datepicker-prev" @click="getPrevMonth(1)"></a>
                    <a href="javascript:;" class="ui-datepicker-btn ui-datepicker-next" @click="getNextMonth(2)"></a>
                    <span class="ui-datepicker-curr-month">{{thisMonthDays.year}}年{{thisMonthDays.month}}月</span>
                </div>
                <div class="ui-datepicker-body">
                    <div class="datepicker-weekday">
                        <ul class="weekday-head">
                            <li>日</li>
                            <li>一</li>
                            <li>二</li>
                            <li>三</li>
                            <li>四</li>
                            <li>五</li>
                            <li>六</li>
                        </ul>
                        <!-- active -->
                        <ul class="weekday-days">
                            <li v-for="item in this.thisMonthDays.days" :data-date="thisMonthDays.year+'-'+thisMonthDays.month+'-'+item.showDate" :key="item.id" :class="{active: item.hasMark ==thisMonthDays.year+'-'+thisMonthDays.month+'-'+item.showDate,ifDiabled: !item.ifThisMonthDays}">
                                {{item.showDate}}
                            </li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>
<script>
import Hotcss from "hotcss";
import qs from "qs";
export default {
    name: "signIn",
    data: function() {
        return {
            ret: [],
            thisMonthDays: {},
            daysHtml: '',
            setYear: new Date().getFullYear(),
            setMonth: new Date().getMonth()+1,
            uid: '',
            signMark: []
        };
    },
    created() {
        this.login();
    },
    mounted: function() {
        this.getMonthData(this.setYear,this.setMonth);
        this.getSignData(this.setMonth,this.setYear,this.setMonth);
    },
    methods: {
        login(){
            this.axios.get('http://app.lanbanshou.com/mpdemo/login/translate',{
                params: {
                    openid: 'oFX2IwUkoxBLEmk999HaPrxCB79c'
                }
            }).then((response)=> {
                response = JSON.parse(response.data.obj);
                console.log(response)
                sessionStorage.setItem('uid',response.info.id)
                this.uid = response.info.id;
            }).catch((response)=>{
                console.log(response);
            })
        },
        signIn(){
            this.axios.get('http://192.168.2.88:8080/mpdemo/qiandao/qiandao',{
                params:{
                    uid: this.uid
                }
            }).then((response)=>{
                console.log(response);
                alert(response.data.obj)
            }).catch((response)=>{
                console.log(response);
            })
        },
        fillZero(s) {
            return s < 10 ? '0' + s : s;
        },
        getNextMonth(mon){
            this.setMonth = this.setMonth + 1;
            this.getSignData(this.setMonth,this.setYear,this.setMonth,mon)
            //this.getMonthData(this.setYear,this.setMonth)
        },
        getPrevMonth(mon){
            this.setMonth = this.setMonth - 1;
            this.getSignData(this.setMonth,this.setYear,this.setMonth,mon)

            // this.getMonthData(this.setYear,this.setMonth)
        },
        getMonthData(year,month){
            if(!year || !month){
                var today = new Date();
                year = today.getFullYear();
                month = today.getMonth()+1;
            }
            var firstDay = new Date(year,month - 1, 1);
            var firstDayWeekDay = firstDay.getDay();
            if(firstDayWeekDay === 0) firstDayWeekDay = 7;

            year = firstDay.getFullYear();
            month = firstDay.getMonth() + 1;

            var lastDayOfLastMonth = new Date(year,month-1,0);
            var lastDateOfLastMonth = lastDayOfLastMonth.getDate();

            var preMonthDayCount = firstDayWeekDay - 1;

            var lastDay = new Date(year,month,0);
            var lastDate = lastDay.getDate();
            this.ret = [];
            for (var i = 0; i < 42; i++) {
                var date = i - preMonthDayCount;
                var showDate = date;
                var thisMonth = month;
                var ifThisMonthDays = true;

                if (date <= 0) {
                    //上一月
                    thisMonth = month - 1;
                    showDate = lastDateOfLastMonth + date;
                    ifThisMonthDays = false;
                } else if(date > lastDate){
                    //下一月
                    thisMonth = month + 1;
                    showDate = showDate -lastDate;
                    ifThisMonthDays = false;
                }
                if (thisMonth === 0) thisMonth = 12;
                if (thisMonth === 13) thisMonth = 1;
                this.ret.push({
                    month: thisMonth,
                    date:date,
                    showDate: this.fillZero(showDate),
                    ifThisMonthDays: ifThisMonthDays
                });
            }
            this.signMark.map((obj1,index1)=>{
                var homologous1 = obj1.time.split(' ')[0];
                this.ret.map((obj2,index2)=>{
                    var mark1 = homologous1.split('-')[2];
                    // console.log(mark1);
                    if(obj2.showDate == mark1){
                        obj2.hasMark = homologous1;
                    }
                })
            })
            this.thisMonthDays = {
                year: year,
                month: this.fillZero(month),
                days: this.ret  
            }
            // return {
            //     year: year,
            //     month: month,
            //     days: this.ret
            // };
            console.log({
                year: year,
                month: this.fillZero(month),
                days: this.ret
            });
        },
        getSignData(defaultDate,changeYear,changeMonth,mon){
            console.log(defaultDate,changeYear,changeMonth)
            this.axios.get('http://192.168.2.88:8080/mpdemo/qiandao/sign',{
                params : {
                  uid: sessionStorage.getItem('uid'),
                  time: defaultDate
                }
            }).then((response)=>{
                response = JSON.parse(response.data.obj);
                if(response.code == 404){
                    alert(response.msg)
                    if(mon == 2){
                       this.setMonth = this.setMonth-1; 
                    } else {
                        this.setMonth = this.setMonth+1;
                    }
                    //this.setMonth = new Date().getMonth()+1;
                    return;
                }
                this.signMark = response.list;
                console.log(this.signMark)
                this.getMonthData(changeYear,changeMonth);
            }).catch((response)=>{
                console.log(response)
            })
        },
    }
};
</script>
原文地址:https://www.cnblogs.com/hzx-5/p/9711434.html