习惯养成之打卡

习惯养成之打卡

背景

​ 上文已经实现了小程序的注册登陆功能,正式开始实现核心的打卡功能

创建新的数据库

​ 创建了新数据库daka,存储打卡的流水记录,存储数据格式如下:

"_id": XPNwQhJZb-wmU-SO
"addr": https://wx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKkpsJPqLjxu5oZ5pp9VxwgjlTQITMOPjkca2Trfjy4sUHR4iaH6OP1swruKLR6niaHVLf2maB0R7Ew/132
"day": 02
"hour": 06
"minute": 05
"month": 06
"second": 05
"username": 张小帅
"year": 2019

​ 记录了打卡的时间,用户名以及头像地址

打卡功能实现

​ 想要实现打卡需要实现记录打卡的时间将其存入数据库中,记录下所有用户打卡的记录,方便后面的读取

获取当前时间

​ 获取当前时间,看教程都说创建小程序就会给自动给,然而云开发好像没有,自己创建了一个util.js文件

const formatTime = date => {
  const y = date.getFullYear()
  const mo = date.getMonth() + 1
  const d = date.getDate()
  const h = date.getHours()
  const m = date.getMinutes()
  const s = date.getSeconds()
  return { year: formatNumber(y), month: formatNumber(mo), day: formatNumber(d), hour: formatNumber(h), minute: formatNumber(m), second: formatNumber(s)}
}


function formatNumber(n) {
  n = n.toString()
  return n[1] ? n : '0' + n
}


module.exports = {
  formatTime: formatTime
}

​ 然后直接调用即可,就不单独给代码了懒得抄官方文档了,看了教程搜到的基本都是抄官方文档的

打卡实现

​ 实现按钮函数打卡,首先判定其是否有今日的打卡记录,然后如果没有打卡则将当前时间以及个人信息存储到数据库daka中,并修改user库中该用户的分数(修改规则后期补充,暂时为打一次卡加两分)

 btn_click: function(){
    var that = this
    var mydata = util.formatTime(new Date())
    wx.cloud.callFunction({
      name: 'database',
      data: {
        type: "get", //指定操作是insert  
        db: "daka", //指定操作的数据表
        limit: 10,
        skip: 0,
        //condition: { student_id: app.globalData.mine.student_id }
        condition: { year: mydata.year, month: mydata.month, day: mydata.day, username: app.globalData.mine.username }
      },
      success: function (res) {
        if(res.result.data.length != 0){
          wx.showToast({
            title: '今日已打卡',
            icon: 'loading'
          })
        }
        else{
          //这里添加加分条件实现不同时段加分不同
          app.globalData.mine.score = app.globalData.mine.score + 2
          wx.cloud.callFunction({
            name: 'database',
            data: {
              type: "update", //指定操作是insert  
              db: "user", //指定操作的数据表
              condition: { student_id: app.globalData.mine.student_id },
              data: { //指定insert的数据
                //groupID: wx.getStorageSync("groupID"),
                //subject: ["语文soc", "数学", "英语", "物理", "化学", "历史", "地理", "政治"]
                score: app.globalData.mine.score
              }
            },
            success: function (res) {
              wx.cloud.callFunction({
                name: 'database',
                data: {
                  type: "insert", //指定操作是insert  
                  db: "daka", //指定操作的数据表
                  data: { //指定insert的数据
                    username: app.globalData.mine.username,
                    addr: app.globalData.avatarUrl,
                    year: mydata.year,
                    month: mydata.month,
                    day: mydata.day,
                    hour: mydata.hour,
                    minute: mydata.minute,
                    second: mydata.second
                  }
                },
                success: function (res) {
                  wx.showToast({
                    title: '打卡成功 +2分',
                    icon: 'success'
                  })
                },
                error: function (error) {
                  console.log(error)
                }
              });
            },

            error: function (error) {
              console.log(error)
            }
          })
        }
      },
      error: function (error) {
        console.log(error)
      }
    });
  },

打卡排行榜

​ 从daka数据库中获取打卡记录,将今日打卡记录进行时间排行,展示出前十名打卡的人员信息

  tempData: function(){
    var that = this
    var mydata = util.formatTime(new Date())
    console.log(mydata)
    var results = []
    wx.cloud.callFunction({
      name: 'database',
      data: {
        type: "get", //指定操作是insert  
        db: "daka", //指定操作的数据表
        limit: 10,
        skip: 0,
        //condition: { student_id: app.globalData.mine.student_id }
        condition: { year: mydata.year, month: mydata.month, day: mydata.day }
      },
      success: function (res) {
        for(var i = 0; i < res.result.data.length; i++){
          console.log(res.result)
          var object = res.result.data[i]
          var result = {}
          result.time = object.hour + ":" + object.minute + ":" + object.second
          result.rank = i+1
          result.avatar = object.addr
          result.username = object.username
          results[i] = result
        }
        console.log(results);
        that.setData({
          list: results
        });
      },
      error: function (error) {
        console.log(error)
      }
    });
  },

bugbugbug

  • 注册时没用设置输入手机号检测。。。没有输入手机号就能注册
  • 打卡按钮没用设置不能连续按,由于云函数调用过慢,连续按会同时执行。。导致打卡判定都会判定没有打卡,导致重复打卡
  • 排行榜的刷新需要重新登入才能刷新,没有设置下拉刷新

总结

​ 自此小程序打卡底层代码功能基本实现,后期会做一些bug修复以及优化,github源码地址:https://github.com/wechat-small-program/Habit-of-developing,大家阔以随意转载,star或者fork

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值