小程序自定义日历实现签到功能

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

使用uniapp自带的uni-calendar可以实现简单的数据展示以及打卡

但是项目要求的日历日期由后端返回每个月的返回而不是整年的返回,

签到的方式也是点击按钮签到而不是点击日历表

这样uniapp的组件就不能实现我们的项目要求了

效果图:

小程序日历签到功能,小程序,微信小程序

 

实现方法如下:

html

		<view class="context">
				<view class="top">
					<view class="box" @tap="bindPreMonth">
						<image src="https://res-other-platform.mutouyun.com/taskforest/icon/left_arrows.png" mode=""
							class="img imgLeft"></image>
						{{preMoth}}月
					</view>
					  <view>{{year}}年{{month}}月</view>
					<view class="box" @tap="bindNextMonth">
						{{nextMoth}}月
						<image src="https://res-other-platform.mutouyun.com/taskforest/icon/right_arrows.png" mode=""
							class="img imgRight"></image>
					</view>
				</view>
				<view  class="middle">
					  <view v-for="(item,index) in data_arr" :key="index" class="middle_num">//data_arr星期
						    {{item}}
						  </view>
				</view>
				<view class="calen">
//calendarList日历里面的数据
					  <view v-for="(item,index) in calendarList"   class="calen_num"   :key="index"
						:class="item.isCurMonth==0?'calen_item':' '">
						<view :class="[{'active':item.status == 1 }]">
							<image src="https://res-other-platform.mutouyun.com/taskforest/icon/green_gifi.png" mode=""
								v-if="item.recieveDay==1" class="gifi_img"
								:class="item.recieveDay==1&&calendarList[index-1].status==1?'gift_bg':' '"></image>
							<!-- <image src="https://res-other-platform.mutouyun.com/taskforest/icon/gifi_color.png" mode=""
								v-else-if="getGifi" class="gifi_img"></image> -->
							<text v-else> {{item.date.substr(6)}}</text>
						</view>
						<text v-if="calendarList[index-1].status==1&&calendarList[index].status==1"
							:class="{'bg_active': calendarList[index-1].status==1&&calendarList[index].status==1&&index%7!==0}">
						</text>
					</view>
				</view>
			</view>

css

.context {
		padding-top: 10rpx;
		background: #FCE2D4;
		border-radius: 10rpx 10rpx 10rpx 10rpx;
		position: relative;
		top: -42rpx;
	}

	.top {
		height: 80rpx;
		display: flex;
		justify-content: space-between;
		align-items: center;
		font-size: 30rpx;
		font-weight: bold;
		color: #B74C37;
		padding: 0 24rpx;
	}

	.middle {
		display: flex;
		padding-bottom: 16rpx;
		font-size: 26rpx;
		font-weight: 400;
		color: #C54834;
	}

	.middle_num {
		width: 14%;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	.calen {
		display: flex;
		width: 100%;
		height: 434rpx;
		flex-wrap: wrap;
		background: linear-gradient(45deg, #EDFAFF 0%, #FFEDF1 100%);
		border-radius: 0px 0px 10rpx 10rpx;
	}

	.calen_blank {
		width: 14%;
		height: 20%;
		background-color: pink;
	}

	.calen_num {
		width: 14%;
		height: 20%;
		display: flex;
		justify-content: center;
		align-items: center;
		font-size: 24rpx;
		font-weight: 400;
		color: #17181A;
		position: relative;
	}

	.calen_item {
		color: #C4C7CC;
	}

	.active {
		background: linear-gradient(-90deg, #3CC55B, #28C06B);
		border: 3px solid #FFFFFF;
		border-radius: 50%;
		color: #fff;
		width: 60rpx;
		height: 60rpx;
		display: flex;
		justify-content: center;
		align-items: center;
		position: relative;
		z-index: 999;
	}

js文章来源地址https://www.toymoban.com/news/detail-516222.html

				data() {
			return {
				data_arr: ["日", "一", "二", "三", "四", "五", "六"],
				year: "",
				month: "",
				currentMonthDays: '',
				startWeek: '',
				calendarList: [],
				nextMoth: '',
				preMoth: '',
				showSign: true,
				newDate: '',
				calendar: [],
				getGifi: false,
				deMonth: '',
				successfully: false, //签到成功的提示
				description: '',
				getDialog: false, //领取奖励弹窗
				flag: false, //判断用户今天有没有签到
				authenticationDialog: false, //有没有实名
				authType: null
			}
		},
	watch: {
			month(newVal) {
				console.log('新日期', newVal);
				let pre = Number(this.month) - 1
				if (pre == 0) {
					this.preMoth = '1' + 2
				} else if (pre < 10) {
					this.preMoth = '0' + pre
				} else {
					this.preMoth = pre
				}
				let next = Number(this.month) + 1
				if (next > 12) {
					this.nextMoth = '0' + 1
				} else if (next < 10) {
					this.nextMoth = '0' + next
				} else {
					this.nextMoth = next
				}
			}
		},
onLoad: function(options) {
			uni.showLoading({
				title: "加载中",
				mask: true,
			});
			this.authType = uni.getStorageSync('authObj').authType
			console.log('用户相关信息', this.authType);
			let now = new Date()
			this.year = now.getFullYear()
			this.month = now.getMonth() + 1
			let date = new Date();
			let y = date.getFullYear();
			let m = date.getMonth() + 1;
			let d = date.getDate();
			let moth = ''
			if (m < 10) {
				moth = '0' + m
			} else {
				moth = m;
			}
			this.newDate = `${y}${moth}${d}`
			this.deMonth = `${y}${moth}`
			this.hadleCander(this.deMonth)
			setTimeout(() => {
				uni.hideLoading();
				this.dialog = true;
			}, 1500);
		},		


// 日历
			async hadleCander(month) {
				const res = await getUsersignCalendare({
					t: Date.parse(new Date()) / 1000,
					month: month,
				})
				this.calendarList = res.data.calendarList
				this.calendar = res.data
				console.log('日历', this.calendar.awardStatus);
				this.calendarList.forEach((item, index) => {
					if (item.status == 1 && item.recieveDay == 1 && this.calendar.awardStatus ==
						0) {
						this.getGifi = true
					}
					if (item.date == this.newDate) {
						if (item.status == 1) {
							this.showSign = false
						} else if (item.status == 2) {
							this.flag = true
						}
						console.log('当前的时间', item.status, this.flag);
					}
				})
				if (this.calendar.awardStatus == 3) {
					this.showSign = false
				}
				this.description =
					`进度为${this.calendar.consecutiveDays}/${this.calendar.target},请继续努力哦~`
				console.log('res', this.calendarList)
			},			
//上个月按钮
			bindPreMonth() {
				let year = this.year
				let month = this.month
				//判断是否是1月
				if (month - 1 >= 1) {
					month = month - 1
				} else {
					month = 12
					year = year - 1
				}
				this.year = year
				this.month = month
				let newMoth = ''
				if (month < 10) {
					newMoth = `${year}0${month}`
				} else {
					newMoth = `${year}${month}`
				}
				console.log('this.month', this.month);

				this.hadleCander(newMoth)
			},

			//下个月按钮
			bindNextMonth() {
				let year = this.year
				let month = this.month
				//判断是否是12月
				if (month + 1 <= 12) {
					month = month + 1
				} else {
					month = 1
					year = year + 1
				}
				this.year = year
				this.month = month
				let newMoth = ''
				if (month < 10) {
					newMoth = `${year}0${month}`
				} else {
					newMoth = `${year}${month}`
				}
				this.hadleCander(newMoth)
			}

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

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

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

相关文章

  • 微信小程序 camera组件实现自定义界面的扫码功能

    目录 使用到的功能点: 代码实现: 效果图: 想要实现自定义界面的扫码,这里用到了微信小程序的媒体组件 ⚠️:同一页面只能插入一个  camera  组件 使用到的功能点: 1. camera mode=scanCode // 扫码模式 binderror  //用户不允许使用摄像头时触发 bindscancode // 在扫码识别成功时

    2024年02月09日
    浏览(37)
  • 微信小程序向系统日历添加事件(提醒)实现

    直接上代码 使用 wx.addPhoneCalendar 需要满足以下前置条件: 微信版本支持:wx.addPhoneCalendar 是微信小程序的 API,只有在微信版本号大于等于 6.6.6 的环境下才能使用。 用户授权:在用户手机的日历中添加日程需要获取用户授权,用户需要在小程序中点击授权按钮才能进行操作。

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

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

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

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

    2024年02月04日
    浏览(38)
  • 基于Java+SSM+Vue+uniapp实现微信小程序的学生签到系统小程序

    文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏览器:谷歌浏览器 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软件:微信开发者 社会发展日新月异,用

    2024年02月03日
    浏览(62)
  • 基于微信小程序的学生签到系统设计与实现(源码+lw+部署文档+讲解等)

    💗 博主介绍 :✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅 👇🏻 2023-2024年最值得选的微信小程序毕业设

    2024年03月21日
    浏览(44)
  • 基于SpringBoot+Vue+uniapp微信小程序的学生签到系统的详细设计和实现

    💗 博主介绍 :✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅 👇🏻 2023-2024年最值得选的微信小程序毕业设

    2024年04月08日
    浏览(40)
  • 课堂签到微信小程序的设计与实现 服务器Java+MySQL(附源码 调试 文档)

    摘要 本文介绍了一种《课堂签到微信小程序的设计与实现》。该系统分为三种用户角色,分别是管理员、教师和学生。管理员主要负责班级管理、学生管理、教师管理、课程管理、签到管理、请假管理和系统管理;教师用户主要进行注册登录、学生信息查看、课程信息查看、

    2024年02月05日
    浏览(33)
  • 基于微信小程序的课程点名签到系统设计与实现 报告+项目源码及数据库文件

    题目:微信点名系统小程序 目录 第一节 系统分析与设计 1.1 需求分析 1.2 数据库设计 1.2.1 数据库模型图(初步设计) 1.3 系统功能设计 第二节 系统开发及实现 2.1 系统开发平台及工具 2.2 系统页面及使用说明 2.1.2 学生签到页面(首页) 2.1.3 学生查询页面(课程、我的) 2.

    2024年02月12日
    浏览(32)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包