微信小程序 - 日历签到编写


预览图

运行代码  代码资源包

wxml

签到头部

为了方便,我在这里写了两个头部,已签到用这种

<view class="headers_wrapper" wx:if="{{signtype=='2'}}">
    <view class="for_headerleft"><image src="../../images/calendar2.png" ></image></view>
    <view class="for_headerright">
        <view class="for_headerright_list">今日已签到</view>
        <view class="for_headerright_list1">已连续签到<span>{{seriesCount}}</span></view>
        <view class="for_headerright_list2">再连续签到<span>{{series_gos}}</span>天即可获得更多奖励</view>
    </view>
</view>

未签到

<view class="headers_wrapper" wx:if="{{signtype=='1'}}">
    <view class="for_headerleft"><image src="../../images/calendar1.png" ></image></view>
    <view class="for_headerright">
        <view class="for_headerright_list">今日未签到</view>
        <view class="for_headerright_list1">已连续签到<span>{{seriesCount}}</span></view>
        <view class="for_headerright_list2">再连续签到<span>{{series_gos}}</span>天即可获得更多奖励</view>
    </view>
</view>

日历wxml

<view class="containers">
    <view class="clearPadding">
        <view class="calendar">
            <view class="calen_header">
                <button class='calendar_month_prev' bindtap="sign_prev">
                    <image src="../../images/cle_btn.png"  bindtap="sign_prev"></image>
                </button>
                <button class='calendar_month_next' bindtap="sign_next">
                    <image src="../../images/cle_btn.png" ></image>
                </button>
            </view>
            <view class="calenbox">
                <view class="calendar_thisday">
                    <text>{{showYear}}</text><text>{{showMonth}}</text></view>
            </view>
            <view class="calendar_wrapper">
                <view class="week_day">
                    <view class="weeklist"></view>
                    <view class="weeklist"></view>
                    <view class="weeklist"></view>
                    <view class="weeklist"></view>
                    <view class="weeklist"></view>
                    <view class="weeklist"></view>
                    <view class="weeklist"></view>
                </view>
                <view>
                    <view class="month_day">
                        <view class="day_list"  wx:for="{{signDays[0]}}"  wx:key="un" wx:for-index="index"  wx:for-item="item">{{item == null ? '' : item.normalday}}
                            <view class="day_hover" wx:if="{{item.signday=='is'}}"></view>
                        </view>
                    </view>
                    <view class="month_day">
                        <view class="day_list"  wx:for="{{signDays[1]}}"  wx:key="un" wx:for-index="index"  wx:for-item="item">{{item == null ? '' : item.normalday}}<view class="day_hover" wx:if="{{signs.indexof(item)>-1}}"></view>
                         <view class="day_hover" wx:if="{{item.signday=='is'}}"></view>
                        </view>
                    </view>
                    <view class="month_day">
                        <view class="day_list"  wx:for="{{signDays[2]}}"  wx:key="un" wx:for-index="index"  wx:for-item="item">{{item == null ? '' : item.normalday}}
                            <view class="day_hover" wx:if="{{item.signday=='is'}}"></view>
                        </view>
                    </view>
                    <view class="month_day">
                        <view class="day_list"  wx:for="{{signDays[3]}}"  wx:key="un" wx:for-index="index"  wx:for-item="item">{{item == null ? '' : item.normalday}}
                            <view class="day_hover" wx:if="{{item.signday=='is'}}"></view>
                        </view>
                    </view>
                    <view class="month_day">
                        <view class="day_list"  wx:for="{{signDays[4]}}"  wx:key="un" wx:for-index="index"  wx:for-item="item">{{item == null ? '' : item.normalday}}
                            <view class="day_hover" wx:if="{{item.signday=='is'}}"></view>
                        </view>
                    </view>
                    <view class="month_day">
                        <view class="day_list"  wx:for="{{signDays[5]}}"  wx:key="un" wx:for-index="index"  wx:for-item="item">{{item == null ? '' : item.normalday}}
                            <view class="day_hover" wx:if="{{item.signday=='is'}}"></view>
                        </view>
                    </view>
                </view>
                <!--控制月份日历输出-->
            </view>
            <view class="text-center"  wx:if="{{signtype=='1'}}">
                <button class="btn-qiandao"  bindtap="sign_start" >签到</button>
            </view>
            <view class="text-center"  wx:if="{{signtype=='2'}}">
                <button class="btn-qiandao1" bindtap="sign_end" >已签到</button>
            </view>
        </view>
    </view>
</view>

签到奖励部分,略。

js:

data部分

data: {
    signDay:[{"signDay":"9"},{"signDay":"11"},{"signDay":"12"},{"signDay":"15"}],
    signs:[1,2,3,5,6,7],
    signtype:"1",
    signDays:[],
    todayDate:"1",
    todayMonth:"",
    todayYear:"",
    nextMonth:"",
    nextYear:"",
    prevYear:"",
    prevMonth:"",
    seriesCount:"99",
    series_gos:"15",
    for_signs:"none",
    powerData:"0",
},

调用自己画的日历js

var yangdate = require("../../utils/sign_in_ss.js");
//   /**
//    *
//    * @authors 杨京葛 (1141407871@qq.com)
//    * @date    2018-05-21 19:26:19
//    * @version $v1.01$
//    */
//
//
// }
var yang_date = {
    //iyear年份
    //iMonth月份
    //that
    //iyear年份
    bulidCal : function(iYear, iMonth,that,signday) {
        var that =that;
        var aMonth = new Array();
        aMonth[0] = new Array(7);
        aMonth[1] = new Array(7);
        aMonth[2] = new Array(7);
        aMonth[3] = new Array(7);
        aMonth[4] = new Array(7);
        aMonth[5] = new Array(7);
        var dCalDate = new Date(iYear, iMonth - 1, 1);
        var iDayOfFirst = dCalDate.getDay();
        //判断当前月份第一天周几
        var curMonthDays = new Date(dCalDate.getFullYear(), (dCalDate.getMonth()+1), 0).getDate();
        //判断当前月份有多少天
        console.log("本月共有 "+ curMonthDays +" 天");
        console.log("本月第一天周 "+ iDayOfFirst);
        var iDaysInMonth = (iMonth, iYear);
        var iVarDate = 1;
        var d, w;
        for (d = iDayOfFirst; d < 7; d++) {
console.log(signday);
            if(signday.indexOf(iVarDate)>-1){
                //console.log(111);
                aMonth[0][d] = {
                    signday:"is",
                    normalday:iVarDate,
                };
            }else{
                //console.log(22);
                aMonth[0][d] = {
                    signday:"nois",
                    normalday:iVarDate,
                };
            }
            iVarDate++;
        }
        //处理每月第一天出现位置
        for (w = 1; w < 6; w++) {
            for (d = 0; d < 7; d++) {
                if (iVarDate <= iDaysInMonth) {
                    if(signday.indexOf(iVarDate)>-1){
                        //console.log(111);
                        aMonth[w][d] = {
                            signday:"is",
                            normalday:iVarDate,
                        };
                    }else{
                        //console.log(22);
                        aMonth[w][d] = {
                            signday:"nois",
                            normalday:iVarDate,
                        };
                    }
                    if(iVarDate==curMonthDays){
                        console.log(aMonth);
                        that.setData({
                            signDays:aMonth,
                        });
                        return aMonth;
                    }else{
                        iVarDate++;
                    }
                }
            }
        }
        //处理每月其他天位置
        console.log(aMonth);
        return aMonth;
    },
    //日历签到完成
};
module.exports = {
    yang_date: yang_date
}

原始数据加载

onLoad: function (options) {
  
    var getToday = new Date();
    var todayDate =getToday.getDate();
    var todayMonths =getToday.getMonth();
    var todayMonth=(todayMonths+1);
    var todayYear =getToday.getFullYear();
    var todayss =getToday.getDate();
    if(todayMonth<10){
           var todayMonthss="0"+todayMonth;
       }else{
           var todayMonthss=todayMonth;
       }
    console.log(todayss);
    var godates = todayYear + "-" + todayMonthss + "-01";//向服务器发送自己需要的签到月份数据
    var that =this;
    wx.request({
        url:  '',
        method:"POST",
        header: {
            "Content-Type": "application/x-www-form-urlencoded",
        },
        data: {
            date:godates,
        },
        success: function (res) {
            if(res.data.status==1){
                console.log(res.data);
                var $datas =res.data.data;//从服务器获取签到数据数组(1,2,3)
                var signDate_arr =new Array();
                var anns = $datas.signDays;
                var count_signday =$datas.seriesCount;
                if(count_signday>9){
                    var series_gos ="0";
                }else if(count_signday<0){
                    var series_gos =99;
                }else{
                    var series_gos =10-parseInt(count_signday);
                }
                that.setData({
                    seriesCount:count_signday,
                    series_gos:series_gos,
                });
                for(var p in anns){//遍历json对象的每个key/value对,p为key
                    var newdats =anns[p];
                    signDate_arr.push(newdats);
                }
                if(signDate_arr.indexOf(todayss)>-1){
                    console.log("当前已签到");
                    that.setData({
                        signtype:"2",
                    });
                }else{
                    console.log("当前未签到");
                    that.setData({
                        signtype:"1",
                    });
                }
                console.log(signDate_arr[0]);
                yangdate.yang_date.bulidCal(todayYear,todayMonth,that,signDate_arr);
                //初始化加载日历
            }else{
                wx.showToast({
                    title: '网络不通畅',
                    icon: 'loading',
                    duration: 1500
                });
            }
        }, error:function () {
            wx.showToast({
                title: '服务器错误',
                icon: 'loading',
                duration: 1500
            });
        }
    });
    this.setData({
        todayDate:todayDate,
        todayMonth:todayMonth,
        todayYear:todayYear,
        prevYear:todayYear,
        nextYear:todayYear,
        prevMonth:todayMonth,
        nextMonth:todayMonth,
        showYear:todayYear,
        showMonth:todayMonth,
    });//存入一份原始月份日期,一份用来跳转的月份
},


上一月 下一月切换

sign_prev: function () {
    console.log("上一月");
    var showMonth=this.data.showMonth;
    var todayMonth =this.data.todayMonth;
    if(showMonth=="1"){
        var showMonth="12";
        var showYear=parseInt(this.data.showYear)-1;
    }else{
        var showMonth=parseInt(this.data.showMonth)-1;
        var showYear=this.data.showYear;
    }
    if(parseInt(todayMonth-3)==showMonth){
        wx.showToast({
            title: '不能查看更多了',
            icon: 'loading',
            duration: 1500
        });
        return;
    }
    var that =this;
    if(showMonth<10){
        var showMonths="0"+showMonth;
    }else{
        var showMonths=todayMonth;
    }
    var godates = showYear + "-" + showMonths + "-01";
    wx.request({
        url: '网络请求',
        method:"POST",
        header: {
            "Content-Type": "application/x-www-form-urlencoded",
        },
        data: {
            date:godates,
        },
        success: function (res) {
            if(res.data.status==1){
                console.log(res.data);
                var $datas =res.data.data;
/*从服务器获取上个月签到的日期(1,2,3,4,5)*/
                var signDate_arr =new Array();
                var anns = $datas.signDays;
                for(var p in anns){//遍历json对象的每个key/value对,p为key
                    var newdats =anns[p];
                    signDate_arr.push(newdats);
                }
                console.log(signDate_arr[0]);
        //引入日历默认
                yangdate.yang_date.bulidCal(showYear,showMonth,that,signDate_arr);
                //初始化加载日历
            }else{
                wx.showToast({
                    title: '网络不通畅',
                    icon: 'loading',
                    duration: 1500
                });
            }
        }, error:function () {
            wx.showToast({
                title: '服务器错误',
                icon: 'loading',
                duration: 1500
            });
        }
    });
    this.setData({
        showYear:showYear,
        showMonth:showMonth,
    });
},
sign_next: function () {
    console.log("下一月");
    var showMonth=this.data.showMonth;
    var todayMonth =this.data.todayMonth;
    if(todayMonth==showMonth){
        wx.showToast({
            title: '未签到不能查看',
            icon: 'loading',
            duration: 1500
        });
        return;
    }
    if(showMonth=="12"){
        var showMonth="1";
        var showYear=parseInt(this.data.showYear)+1;
    }else{
        var showMonth=parseInt(this.data.showMonth)+1;
        var showYear=this.data.showYear;
    }


    var that =this;

    if(showMonth<10){
        var showMonths="0"+showMonth;
    }else{
        var showMonths=todayMonth;
    }
    var godates = showYear + "-" + showMonths + "-01";
    wx.request({
        url: baseurl + '/user/getUserSignData',
        method:"POST",
        header: {
            "Content-Type": "application/x-www-form-urlencoded",
            "token": token
        },
        data: {
            date:godates,
        },
        success: function (res) {
            if(res.data.status==1){
                console.log(res.data);
                var $datas =res.data.data;
                var signDate_arr =new Array();
                var anns = $datas.signDays;
                for(var p in anns){//遍历json对象的每个key/value对,p为key
                    var newdats =anns[p];
                    signDate_arr.push(newdats);
                }
                console.log(signDate_arr[0]);
                yangdate.yang_date.bulidCal(showYear,showMonth,that,signDate_arr);
                //初始化加载日历
            }else{
                wx.showToast({
                    title: '网络不通畅',
                    icon: 'loading',
                    duration: 1500
                });
            }
        }, error:function () {
            wx.showToast({
                title: '服务器错误',
                icon: 'loading',
                duration: 1500
            });
        }
    });


    this.setData({
        showYear:showYear,
        showMonth:showMonth,
    });

},

签到,日历内塞入数据,或者执行onload加载数据插入日历



缺点: 代码挺冗杂的,有很多可优化的地方。待解决。

亮点:代码挺容易懂的

  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值