签到页面功能说明
📱 页面概述
签到页面是一个功能完整的每日签到系统,支持日历显示、签到记录和积分任务管理。
🎯 主要功能
1. 动态日历显示
- ✅ 自动获取当前月份:根据系统时间自动显示当前年月
- ✅ 动态星期计算:每月第一天的星期几会根据实际日期动态计算
- ✅ 签到状态显示:已签到日期显示蓝色圆点标识
- ✅ 今日高亮:当天日期显示橙色圆形背景
2. 签到功能
- ✅ 一键签到:点击"立即签到"按钮完成当日签到
- ✅ 重复签到防护:已签到的日期按钮显示为"今日已签到"并禁用
- ✅ 积分奖励:签到成功获得10积分奖励
- ✅ 本地存储:签到记录保存在本地,按月份分别存储
3. 数据持久化
- ✅ 本地存储格式:
checkin_YYYY_MM
(如:checkin_2025_1
)
- ✅ 数据验证:自动过滤无效日期,确保数据完整性
- ✅ 月份切换:每月数据独立存储,不会相互干扰
4. 用户体验优化
- ✅ 下拉刷新:支持下拉刷新重新加载签到状态
- ✅ 页面缓存:页面显示时自动刷新数据
- ✅ 加载状态:签到过程显示加载动画
- ✅ 操作反馈:签到成功显示Toast提示
5. 积分任务系统
- ✅ 任务列表:显示邀请好友、观看广告、参与课程等任务
- ✅ 任务交互:点击任务卡片触发相应操作
- ✅ 任务状态:显示任务完成状态和操作按钮
🛠️ 技术实现
存储结构
// 本地存储键名格式
const storageKey = `checkin_${year}_${month}`;
// 存储数据格式(数组)
const checkedDates = [1, 3, 5, 8, 12]; // 已签到的日期
日历算法
// 获取当月第一天是星期几
const firstDay = new Date(year, month, 1).getDay();
const adjustedFirstDay = firstDay === 0 ? 7 : firstDay; // 周日从0调整为7
// 获取当月天数
const daysInMonth = new Date(year, month + 1, 0).getDate();
API接口预留
// 签到接口(已预留)
App._post_form(
'checkin/dailyCheckin',
'application/json',
{
userId: userId,
date: '2025-01-15'
},
callback
);
// 获取签到历史接口(已预留)
App._post_form(
'checkin/getMonthlyHistory',
'application/json',
{
userId: userId,
year: 2025,
month: 1
},
callback
);
🔗 页面导航
访问路径
- 进入小程序
- 点击底部"我的"标签
- 点击"每日签到"菜单项
- 进入签到页面
路由配置
// app.json 中已注册
"pages": [
"pages/checkin/index",
// ... 其他页面
]
📊 数据流程
页面加载流程
onLoad
→ 加载签到历史 → 初始化日历 → 获取用户信息
onShow
→ 重新加载签到状态 → 刷新日历显示
onPullDownRefresh
→ 手动刷新所有数据
签到流程
- 点击签到按钮 → 检查今日是否已签到
- 未签到 → 显示加载状态 → 执行签到操作
- 签到成功 → 更新UI状态 → 保存到本地存储 → 显示成功提示
🎨 UI设计还原
颜色系统
- 主色调:蓝色系(#4a90e2)
- 今日高亮:橙色系(#ff6b35)
- 背景渐变:浅蓝到白色(#e8f4fd → #f8f9fc)
组件样式
- 日历网格:7列布局,每格80rpx高度
- 签到按钮:圆角按钮,渐变背景,阴影效果
- 任务卡片:白色背景,圆角边框,悬停效果
🔄 后续扩展
可扩展功能
- 连续签到奖励:连续签到天数统计和额外奖励
- 签到日历:查看历史月份的签到记录
- 签到统计:月度、年度签到统计图表
- 社交分享:分享签到成就到朋友圈
API集成
- 服务器同步:将本地签到数据同步到服务器
- 跨设备同步:多设备间签到数据同步
- 签到排行榜:用户签到排名功能
📱 兼容性说明
- 支持微信小程序最新版本
- 兼容iOS和Android系统
- 适配不同屏幕尺寸
- 支持暗黑模式(预留)
签到页面现已完全实现,具备完整的功能和良好的用户体验!