小程序实现签到打卡功能--用户端

这篇具有很好参考价值的文章主要介绍了小程序实现签到打卡功能--用户端。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、实现需求

实现用户在规定区域内完成打卡操作并以日历的形式记录。

注:本篇文章能够实现打卡记录是建立在有后端接口传输返回的数据上

二、效果展示

小程序实现签到打卡功能--用户端

三、业务逻辑

点击打卡按钮,打卡成功后弹出相应的弹窗,并在日历记录上留下当天打卡的痕迹。在规定区域内打卡即是指在规定经纬度内打卡,使用 wx.getLocation()。

四、具体步骤

1.安装插件--极点日历

步骤一:扫码进入微信公众平台 (qq.com)

步骤二:点击左侧边栏最底行”设置“

步骤三:找到”第三方设置“,找打”添加插件“按钮,输入”极点日历“

步骤四:在要使用该插件的小程序 app.json 文件中引入插件声明

"plugins": {
    "calendar": {
      "version": "1.1.3",
      "provider": "wx92c68dae5a8bb046"
    }
  },

步骤五:在相应布局页面添加以下语句嵌入插件,属性详情请移步开发文档查看

极点日历开发文档:https://github.com/czcaiwj/calendar

注:上方链接需要如若打不开,文章底部有复制来的文档

<calendar 
    start-date="{{currentYear}}-01" // 日历的开始日期
    end-date="{{currentYear}}-12" // 日历的结束日期
    days-color="{{daysColor}}" // 打卡成功后日期上的背景色
    weeks-type="cn"  // 上方星期显示为:日,一,二,三,四,五,六
/>
2.完成.wxml页面(部分代码)
<view class="circular" bindtap="submit">
        <view class="text">打卡</view>
</view>

<calendar 
    start-date="{{currentYear}}-01" 
    end-date="{{currentYear}}-12" 
    days-color="{{daysColor}}"
    weeks-type="cn"   
    bindnextMonth="getMonthRecordDataByCalendar" // 监听点击下个月事件
    bindprevMonth="getMonthRecordDataByCalendar" // 监听点击上个月事件
    binddateChange="getMonthRecordDataByCalendar" // 监听点击日历标题日期选择器事件
/>
3. .wxss页面(略)
4.完成js逻辑部分
· .js页面的代码
import {
  EverydayClockRecord
} from "这里填自己所定义的EverydayClockRecord类的页面路径"
import {
  EverydayClock
} from "这里填自己所定义的EverydayClock类的页面路径"

Page({

  /**
   * 页面的初始数据
   */
  data: {
    latitude: '', //纬度
    longitude: '', // 经度
    clockShow: false,
    daysColor: null, //打卡的成功后日历日期上的颜色
    currentYear: "2021",
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.checkLocation()
    this.location()
    this.getClockInfo()
    let that = this
    let myDate = new Date()
    let currentYear = myDate.getFullYear()
    let currentMonth = myDate.getMonth() + 1
    let currentDay = myDate.getDate()
    that.setData({
      currentYear,
      currentMonth,
      currentDay,
    })
    that.getMonthRecordData(that.data.currentMonth)
    that.getOnedayRecordData(that.data.currentYear, that.data.currentMonth, that.data.currentDay)
  },
  // 控制打卡后日期的颜色
  async getMonthRecordData(currentMonth) {
    let daysColorList = await EverydayClockRecord.getMonthRecord(currentMonth)
    this.setData({
      daysColor: daysColorList,
    })
  },
  // 日期控制
  async getMonthRecordDataByCalendar(e) {
    let daysColorList = await EverydayClockRecord.getMonthRecord(e.detail.currentMonth)
    this.setData({
      daysColor: daysColorList,
    })
  },


  // 日期控制
  async getOnedayRecordData(currentYear, currentMonth, currentDay) {
    let date = `${currentYear}-${currentMonth < 10 ? "0" + currentMonth : currentMonth}-${currentDay < 10 ? "0" + currentDay : currentDay}`
    console.log(date);  // 打印出的日期格式是这样:2023-2-9
  },

  // 点击打卡后执行的事件
  async submit() {
    let {
      longitude,
      latitude
    } = this.data

    let data = {
      longitude,
      latitude
    }
    wx.showLoading({
      title: '加载中',
    })
    this.setData({
      clockShow: false
    })
    let res = await EverydayClock.sendClockData2(data)
    console.log(data);
    console.log(res) // {clockIn: true}  
    if (res.clockIn) { // .clockIn是接口里面的字段,可以作为判断是否打卡成功的依据
      this.linShowToast("打卡成功~", "success")
    } else {
      this.linShowToast("打卡失败~", "error")
    }
    setTimeout(() => {
      this.setData({
        clockShow: false
      })
    }, 1000)

    wx.hideLoading()
    this.getOnedayRecordData(this.data.currentYear, this.data.currentMonth, this.data.currentDay)
    this.getMonthRecordData(this.data.currentMonth)


  },



  checkLocation(){
    let that = this
    wx.getSetting({
      success(res) {
        console.log(res);
        if (!res.authSetting['scope.userLocation']) {
          wx.authorize({
            scope: 'scope.userLocation',
            success() {
              wx.showToast({
                title: '授权成功',
                duration:1500
              })
            },
            fail() {
              // that.showSettingToast('需授权位置信息')
            }
          })
        }
      }
    })
  },
  location(){
        // wx.getLocation是微信自带的api,能够获取当前的地理位置、速度
        wx.getLocation({
          type: 'wgs84',
          success:res=>{
            console.log(res);
            console.log(res.latitude);
            this.setData({
              latitude:res.latitude,
              longitude:res.longitude,
            })
          }
        });
},


  //lin-ui弹窗控制 
  // 用到了lin-ui的组件库,需要自行安装相应的包
  linShowToast(title, icon, duration = 750) {
    wx.showToast({
      title: title,
      icon: icon,
      duration: duration,
      mask: "true",
    })
  },
})
· EverydayClockRecord类页面的js代码

注:Http里面是封装的get、post的请求

import {Http} from "../../../utils/http"

class EverydayClockRecord {
  // 获取用户某月的打卡记录  
  static async getMonthRecord(month) {
    // console.log(month);  // month是传入的当月月份,如 2
    let monthRecord = [];
    let url = `自己的接口/2023/${month}`; // ${}能够动态获取url
    let result = await Http.get({ url });
    // console.log(result); // result里面是用户当月的打卡情况的
    let resultDataArray = result.teacher_sign_record; // teacher_sign_record是接口里面的字段,resultDataArray是数组,数组里的元素是当月成功打卡的情况记录
    resultDataArray.forEach((element) => {
    console.log(month);
    monthRecord.push({
        month: "current",
        day: String(element.date).slice(8,10), // day处理后的格式就是05、21,这样的格式
        color: "#FFFFFF",
        // #3C8CF8:蓝色
        background: "#3C8CF8",
            });
    });
    console.log(monthRecord);
    return monthRecord;
  }
  
}

export { EverydayClockRecord };

monthRecord数组push()后里面内容如下:

小程序实现签到打卡功能--用户端
·EverydayClock类的js代码
import {Http} from "../../../utils/http";

class EverydayClock {
  static async sendClockData2(data){
        let url = "写自己的接口";
        return await Http.post({ url, data });
  }
}

export {EverydayClock}

五、极点日历属性接口文档

小程序实现签到打卡功能--用户端
小程序实现签到打卡功能--用户端

日历插件安装方法借鉴了此篇博客文章来源地址https://www.toymoban.com/news/detail-482657.html

到了这里,关于小程序实现签到打卡功能--用户端的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android高德地图定位实现签到打卡功能(全网最详细+收藏)

    前言         本章根据高德地图API,实现打卡签到功能。用到了定位SDK 和地图SDK、覆盖物。打卡范围图形可以支持多种形状,如: 圆形 、 长方形 、 多边形。 核心逻辑:     获取当前定位信息,然后通过Marker绘制小图标进行展示,并在onLocationChanged回调方法中不断重新绘

    2024年02月03日
    浏览(45)
  • FPGA - AXI4_Lite(实现用户端与axi4_lite之间的交互逻辑)

    在之前的博客中对AXI4总线进行了介绍(FPGA-AXI4接口协议概述),在这篇博客中, 实现用户端与axi4_lite之间的交互逻辑。 对AXI4总线简单介绍(具体可见FPGA-AXI4接口协议概述) ①AXI4是ARM公司提出的是一种高性能、高带宽、低延迟的片内总线 ②主要描述了主设备和从设备之间的

    2024年04月11日
    浏览(40)
  • 微信小程序也可以实现定位打卡/签到打卡了(附源码)

    ✅作者简介:大家好我是瓜子三百克,一个非科班出身的技术程序员,还是喜欢在学习和开发中记录笔记的博主小白! 📃个人主页:瓜子三百克的主页 🔥系列专栏:OC语法 🤟格言:作为一个程序员都应该认识到,好的代码是初级工程师都可以理解的代码, 伟大的代码是可

    2023年04月19日
    浏览(38)
  • [安全]Git用户端敏感信息检查方案

    Git仓库利用pre-commit在用户端检测敏感信息 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Git作为代码管理工具,已经被广泛使用。在实际工作中,大部分开发人员都会将代码push到远程代码管理平台,实现协同开发,比如github、gitlab等。用户在代码中

    2024年04月10日
    浏览(50)
  • RFID课程设计-图书管理系统用户端设计

    RFID课程设计-图书管理系统用户端设计 课程设计题目课程设计任务内容题目设计基本原理NFC开发概述标签调度系统如何将 NFC 标签映射到 MIME 类型和 URI如何将 NFC 标签分发到应用在 Android 清单中请求 NFC 访问权限过滤 NFC IntentACTION_NDEF_DISCOVEREDACTION_TAG_DISCOVERED从 Intent 中获取信息

    2024年02月08日
    浏览(55)
  • 苍穹外卖day09——历史订单模块(用户端)+订单管理模块(管理端)

    分页查询历史订单 可以根据订单状态查询 展示订单数据时,需要展示的数据包括:下单时间、订单状态、订单金额、订单明细(商品名称、图片) OrderMapper  对应的映射文件   OrderDetailMapper 测试无误 待支付和待接单状态下,用户可直接取消订单 商家已接单状态下,用户取

    2024年02月15日
    浏览(43)
  • 设备快线客户端软件V1.0用户手册

    1.前言 欢迎使用设备快线客户端软件产品。设备快线客户端软件简称DYClient,DYClient客户端是东用科技有限公司推出的一款用于远程维护的控制软件,主要为客户远程访问现场终端设备提供便捷的接入服务,并且通过DYClient客户端软件用户可以非常方便快捷的访问所有分布现场的

    2024年02月06日
    浏览(84)
  • 微信小程序 - 签到打卡旋转 3D 动画功能,仿钉钉打卡签到时 “容器“ 动画翻转效果(超详细完整示例源码教程,代码简洁、丝滑流畅、示例复制即用)

    由于微信小程序的动画与普通 CSS 动画稍有不同,所以网上基本没有这方面的功能源码。 本文 实现了微信小程序开发中,类似钉钉签到打卡时的动画效果,圆形硬币形状的翻转功能, 您可以直接复制示例源码,功能都做好了只需要把你的内容放进入即可。 如下图所示,当点

    2024年02月11日
    浏览(100)
  • 【开题报告】基于微信小程序的签到打卡系统的设计与实现

    考勤管理是企业日常管理的重要内容之一。随着企业规模的扩大和员工数量的增加,传统的考勤管理方式已经不能满足需求。而基于微信小程序的签到打卡系统可以提供方便快捷的签到打卡服务,为企业管理人员提高工作效率和员工考勤管理提供了方便。因此,开发一款基于

    2024年02月04日
    浏览(52)
  • 网页版Java五子棋项目(一)websocket【服务器给用户端发信息】

    http不能实现消息推送 http的轮询(开销大) WebSocket 是从 HTML5 开始支持的一种网页端和服务端保持长连接的 消息推送机制. 理解消息推送: 传统的 web 程序, 都是属于 “一问一答” 的形式. 客户端给服务器发送了一个 HTTP 请求, 服务器给客户端返回一个 HTTP 响应. 这种情况下,

    2024年02月14日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包