微信小程序> 小程序签到功能实现

小程序签到功能实现

浏览量:1474 时间: 来源:weixin_30834019

最近接到一个任务,是给一个线上的小程序添加一个签到的功能,具体功能包括:

1:按7天一轮显示时间

2:只计算连续签到天数,断签后自动归零

3:签到之后可以获得积分,连续签到前六天每天积分为1,六天之后每天积分为3

接到任务后,曾经尝试自己写界面,奈何道行太浅,都被领导否决了,无奈之下,便在网上找一些大神写的界面,最终找到一个还不错的,可惜没有后端,后来在大神同事的帮助下写了一个还算可以的后端功能,总算做出了草稿,具体代码如下,各位将就看一下。

 

前端(前端界面原创链接: https://blog.csdn.net/weixin_42211816/article/details/81985084)

wxml

 

<!--pages/signIn/signIn.wxml--><view class='signIn'>  <view class='sign-com'>    <view class='thead'>      <view class='tt'>您已连续签到</view>        <view class='mm'>          <label class='n'>            {{signNum}}          </label>            天        </view>        <view class='pp'>连续签到7日后每日得3分</view>    </view>    <view class='modle'>        <view class='mol'>          <view class='mol-line'></view>            <view class='mol-ites'>              <view class="ite {{signNum>=min?'hover':''}}" data-n='{{min}}'>                <label class='n'>+{{min<7?1:3}}</label>  <!-- 若签到天数小于7天,则每天签到得1积分,若大于或等于7天,则每天签到得3积分 -->              </view>              <view class="ite {{signNum>=min+1?'hover':''}}" data-n='{{min+1}}'>                <label class='n'>+{{min+1<7?1:3}}</label>              </view>                <view class="ite {{signNum>=min+2?'hover':''}}" data-n='{{min+2}}'>                <label class='n'>+{{min+2<7?1:3}}</label>              </view>              <view class="ite {{signNum>=min+3?'hover':''}}" data-n='{{min+3}}'>                <label class='n'>+{{min+3<7?1:3}}</label>              </view>              <view class="ite {{signNum>=min+4?'hover':''}}" data-n='{{min+4}}'>                <label class='n'>+{{min+4<7?1:3}}</label>              </view>              <view class="ite {{signNum>=min+5?'hover':''}}" data-n='{{min+5}}'>                <label class='n'>+{{min+5<7?1:3}}</label>              </view>              <view class="ite {{signNum>=min+6?'hover':''}}" data-n='{{max}}'>                <label class='n'>+{{min+6<7?1:3}}</label>              </view>            </view>        </view>        <view class='moday'>          <label class='dd'>{{min}}天</label>          <label class='dd'>{{min+1}}天</label>          <label class='dd'>{{min+2}}天</label>          <label class='dd'>{{min+3}}天</label>          <label class='dd'>{{min+4}}天</label>          <label class='dd'>{{min+5}}天</label>          <label class='dd'>{{min+6}}天</label>        </view>      </view>    <view class='the-btn'>      <button type='button' class='btn' bindtap='bindSignIn' data-num="{{signNum}}" disabled='{{signState}}'        data-min="{{min}}" data-max="{{max}}" data-be="{{be}}">        签到      </button>    </view>  </view></view><view class='explax'>  <view class=''>日期开始:{{min}} </view>  <view class=''>日期结束:{{max}} </view>  <view class=''>签到数:{{signNum}}天</view>  <view class=''>切换周期的倍数:{{be}}</view></view>

 

 

wxss

/* pages/signIn/signIn.wxss */.signIn{ width: 100%; height: auto;}.sign-com{ width: 100%; height: auto; padding: 0 30rpx; box-sizing: border-box; overflow: hidden; }.sign-com .thead{ width: 100%; text-align: center; padding: 50rpx 0 35rpx;}.sign-com .thead .tt{ font-size: 24rpx;}.sign-com .thead .mm{ margin-top: 10rpx; font-size: 24rpx;}.sign-com .thead .mm .n{ font-size: 66rpx; margin-right: 25rpx;}.sign-com .thead .pp{ color: #999; font-size: 24rpx; margin-top: 10rpx;}.sign-com .modle{ width: 100%; height: 100rpx; margin-top: 10rpx; }.sign-com .modle .mol{ width: 100%; height: 52rpx; position: relative;  }.sign-com .mol-line{ width: 100%; height: 4rpx; background-color: #e6e6e6; position: absolute; left: 0; top: 50%; transform: translateY(-50%);}.sign-com .mol-ites{ width: 100%; height: 100%;position: absolute;}.mol-ites .ite{ width: 52rpx; height: 52rpx; border-radius: 50%; border: 1px solid #f5f5f5; background-color: #fff; box-sizing: border-box;  position: absolute; left: 0; top: 0; z-index: 2;}.mol-ites .ite .n{ width: 44rpx; height: 44rpx; line-height: 44rpx; text-align: center; border-radius: 50%; background-color: #f5f5f5;position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); font-size: 22rpx;}.mol-ites .ite::after{ content: ""; width: 80rpx; height: 4rpx; background-color: transparent; position: absolute; left: 52rpx; top: 50%; margin-top: -2rpx; z-index: 2;}.mol-ites .ite:last-of-type::after{ width: 0;}.mol-ites .ite:nth-of-type(2){ left: 107rpx;}.mol-ites .ite:nth-of-type(3){ left: 214rpx;}.mol-ites .ite:nth-of-type(4){ left: 321rpx;}.mol-ites .ite:nth-of-type(5){ left: 428rpx;}.mol-ites .ite:nth-of-type(6){ left: 535rpx;}.mol-ites .ite:nth-of-type(7){ left: 642rpx;}.mol-ites .ite.hover{ border-color: #ff614a;}.mol-ites .ite.hover .n{ background-color: #ff614a; color: #fff;}.mol-ites .ite.hover::after{ background-color: #ff614a; }.moday{ width: 100%; height:40rpx; overflow: hidden; position: relative; margin-top:20rpx;}.moday .dd{ width: 52rpx; height: 40rpx; line-height: 1; text-align: center; font-size: 22rpx; position: absolute; left: 0; bottom: 0;}.moday .dd:nth-of-type(2){ left: 107rpx;}.moday .dd:nth-of-type(3){ left: 214rpx;}.moday .dd:nth-of-type(4){ left: 321rpx;}.moday .dd:nth-of-type(5){ left: 428rpx;}.moday .dd:nth-of-type(6){ left: 535rpx;}.moday .dd:nth-of-type(7){ left: 642rpx;}.the-btn{ margin: 50rpx 0;}.the-btn .btn{ background-color: #ff614a; color: #fff;}.the-btn.signed .btn{ background-color: rgba(153, 153, 153, 0.61); }.explax{ padding: 0 30rpx; font-size: 28rpx; color: #666;}

 

js

 

// pages/signIn/signIn.js//获取应用实例const app = getApp();Page({  /**   * 页面的初始数据   */  data: {    //img_url: config.imgUrl, //图片地址    //签到模块    signNum: 1,  //签到数     signState: false, //签到状态    min: 1,  //默认值日期第一天1    max: 7,  //默认值日期最后一天7    be: 0,  //默认倍数   },  onLoad: function (options) {    let _this = this;    var a = wx.getStorageSync("userInfo");    a ? this.setData({      uInfo: a    }) : wx.showModal({      title: "提示",      content: "您未登陆,请先登陆!",      success: function (t) {        if (t.confirm) {          var a = encodeURIComponent("/sqtg_sun/pages/public/pages/myorder/myorder?id=0");          app.reTo("/sqtg_sun/pages/home/login/login?id=" + a);        } else t.cancel && app.lunchTo("/sqtg_sun/pages/home/index/index");      }    });    //接收后端数据   this.getSignInfo();  },  getSignInfo(){    let that = this;    app.ajax({      url: "Signin|getSignInfo",      data: {        id:this.data.uInfo.id              },      success: function (res) {        console.log('连接成功')        that.setData({          signNum: res.data.signNum,          min: res.data.min //接收到的数据,页面调用的是这里的数据        })      },      // fail: function (res) {      //   console.log("连接失败")      // }    })  },  //签到  bindSignIn(e) {    var that = this,      num = e.currentTarget.dataset.num;    num++    app.ajax({      url: "Signin|sign",      data: {        id: this.data.uInfo.id      },      success: function (res) {            that.setData({              signNum: num,              // signState: false //点击后是否继续允许点击,true为不允许,false为允许,正式使用时应为true            })            var
            
            

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎