作为一名长期在后端服务器、数据库和各类企业级中间件里打转的开发者,我习惯了用代码去解决复杂的业务痛点。但回归生活,作为家长和社团活动的参与者,我发现了一个极其微小却又令人头疼的场景:社团课表的管理与上课提醒。
群接龙太乱,Excel 太死板,手动发微信通知又极其容易遗忘。
为了彻底解决“今天几点上课?”、“教练,我家孩子今天请假”以及“这节课的照片在哪看”的琐碎沟通,我决定利用业余时间,基于微信原生小程序与云开发(CloudBase),从零打造一款轻量级、全自动的社团管理工具——社团冒险小管家。
以下是这个小程序的架构设计与全功能复盘。
🛠️ 技术选型与架构初衷
考虑到使用的便捷性与零门槛,我放弃了需要下载 App 或用浏览器打开的 Web 方案,直接选择了微信小程序。 为了免去搭建服务器、配置域名 SSL、维护后台接口的繁琐,后端直接采用了**微信云开发(CloudBase)**的 Serverless 架构,使用云函数处理核心逻辑,云数据库(JSON NoSQL)存储排课与用户数据。
🌟 核心功能全景解析
整个系统围绕“领航员(教师)”与“探险员(家长)”两个核心角色展开,做到了数据的绝对隔离与交互的极简体验。
1. 🎭 双轨制角色系统(权限隔离)
系统基于用户的微信 OpenID 进行无感鉴权。
探险员(家长端):登录后仅能看到自己绑定的孩子(支持多娃绑定)的专属课表,界面清爽,无冗余信息。
领航员(教师端):具有超管血统的账号,绑定“领航员”身份后,解锁全局管理面板。
开发者彩蛋:为了方便调试,我在云函数中重写了鉴权逻辑。即使是超管,只要当前在数据库中切换为“家长”角色,也能完美模拟普通用户的视图,彻底解决了“管理员查课表满屏都是数据”的痛点。


2. 📅 全能日历与排课引擎
抛弃了传统的列表展示,采用了直观的日历组件。
批量生成(教师):支持一键生成连续数周的规律课程,支持冲突覆盖。
灵活调度(教师):支持单节课改期、全班改期、停课休整、甚至直接删除。
一键请假(家长):家长可在前端直接点击对应的课程申请“休整”(请假),系统会自动更新状态。



3. ⚡ “能量池”订阅消息机制
微信小程序的订阅消息(模板消息)有一个严苛的限制:用户必须手动点击授权,开发者才能下发一次通知(错误码 43101 是无数开发者的噩梦)。 为了优雅地解决这个问题,我设计了**“能量池(Quota)”**机制:
在前端顶部设计了醒目的“⚡ 充能”按钮。
引导家长勾选“总是保持以上选择”并多次点击充能。
后台数据库实时记录每位家长的 Quota 余额,只有余额 > 0 时才下发通知,有效避免了接口调用报错,并让家长对“接收通知”这件事有直观的掌控感。
4. 🧠 智能全自动提醒引擎(核心亮点)
这是整个系统中最让我满意的一个模块。它摆脱了人工干预,完全由云端的定时触发器(Timer Trigger)接管。 系统每 5 分钟自动醒来一次,扫描全机构课表,并执行极其拟人化的通知策略:
标准课程:上课前 2 小时精准推送到家长微信。
早班课特殊逻辑:如果课程在早上(例如 08:00 或 09:00),提前 2 小时发送会打扰家长休息。系统会自动识别,将这类早班课的通知时间前置到上课前一天的下午 17:00 发送。
防重复拦截:成功发送后,数据库自动打上
isReminded: true标记,确保绝不发生消息轰炸。

5. 📸 探险足迹(云端照片墙)
每节课后,领航员(教师)可以直接调用手机摄像头或相册,上传当节课的精彩瞬间。
家长点开对应的课程详情,即可直接查看自家孩子参与的课堂照片。
踩坑记录:初期遇到了微信云存储权限导致的图片“转圈圈”无法加载问题,最终通过升级基础版环境并正确配置“所有用户可读,仅创建者可读写”的云存储规则,实现了原生
<image>组件配合cloud://链接的极速秒开体验。

6. 🛡️ 稳健的数据兜底(一键备份)
数据无价。在教师的管理面版中,我集成了一键创建备份(Backup)与一键恢复(Restore)功能。云函数会将核心的 Schedule 集合完整快照到 Backup 集合中,为日常的操作失误提供了一剂强心针。

💡 开发后记
这个“社团冒险小管家”虽然只是一个几十 KB 的轻量级小程序,但它跑通了从前端 UI 交互、权限设计,到后端云函数 Serverless 部署、定时任务编排,再到应对微信官方严格的隐私合规审核(如 UGC 人工把关声明、摄像头与图片权限声明)的全链路。
当亲眼看到定时器在云端日志里准时输出 命中触发规则...发送提醒,并在手机上清脆地响起微信提示音时,这种用代码真真切切解决生活痛点的成就感,正是驱使我们不断折腾技术的最纯粹的动力。
下个版本,也许我会考虑加入多机构隔离,或者接入本地大内存 Debian 服务器进行更深度的报表分析。生命不息,折腾不止!
评论区