概要
本设计旨在开发一款基于微信小程序平台的大学生活动社交小程序。系统利用腾讯微信云开发技术(Cloud Base),实现了无需自建服务器和域名的轻量级部署。主要功能包括活动发布与搜索、活动评价、打卡记录(学习、阅读、文艺、体育等)、排行榜及后台管理系统。该系统旨在帮助大学生更好地组织参与活动,扩展社交圈子,并通过打卡功能辅助时间管理与目标达成。
系统相关技术
后端采用腾讯提供的云开发解决方案,核心优势包括:
- 免运维:无需购买服务器和域名,无需配置防火墙。
- 安全性高:采用腾讯内部链路,防DDOS攻击。
- 弹性扩展: 资源配额可随业务发展动态调整。
核心组件:
- 云函数 (Cloud Functions): 运行在云端的Node.js代码,处理核心业务逻辑。
- 云数据库 (Cloud Database): JSON格式的NoSQL数据库。
- 云存储 (Cloud Storage): 用于存储图片、视频等资源。
- 云调用: 直接调用微信原生接口。
系统需求分析
首页与公告:展示公告通知、校园风采。
活动模块:
- 活动分类与列表展示。
- 活动搜索(按兴趣)。
- 活动详情查看(时间、地点、费用等)。
- 活动报名(支持自定义表单字段:姓名、性别、身份证、手机号等)。
- 活动评价与反馈。
- “我的活动报名”记录查询。
打卡模块:
- 每日打卡(学习、阅读、文艺、体育等类别)。
- 打卡项目列表管理。
- 每日动态记录。
- 打卡排行榜。
- “我的每日打卡”记录查询。
个人中心:
- 设置入口(含后台管理登录)。
- 用户信息管理。
数据库设计
用户 (User): 存储用户基本信息及角色。 活动 (Activity): 存储活动详情(时间、地点、费用、自定义表单配置)。 报名记录 (Enrollment): 关联用户与活动,存储报名填写的具体信息及审核状态。 评价 (Comment): 用户对活动的评价。 打卡项目 (CheckinItem): 定义的打卡类型(如晨跑、阅读)。 打卡记录 (CheckinRecord): 用户具体的每日打卡数据。
{
"_id": "activity_001",
"title": "周末篮球赛",
"category": "体育",
"time": "2023-10-20 14:00",
"location": "东区篮球场",
"fee": 0,
"formConfig": ["name", "phone", "student_id"], // 自定义收集字段
"publisherId": "openid_xxx",
"status": "active", // active, ended
"createTime": "timestamp"
}
{
"_id": "enroll_001",
"activityId": "activity_001",
"userId": "openid_xxx",
"formData": {
"name": "张三",
"phone": "13800000000",
"student_id": "2020001"
},
"auditStatus": "pending", // pending, approved, rejected
"createTime": "timestamp"
}
{
"_id": "record_001",
"userId": "openid_xxx",
"itemId": "item_sport_001",
"date": "2023-10-20",
"content": "跑步5公里",
"images": ["cloudID://..."],
"createTime": "timestamp"
}
系统实现
// cloudfunctions/mcloud/index.js (示例)
const cloud = require('wx-server-sdk');
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV });
const db = cloud.database();
exports.main = async (event, context) => {
const { activityId, formData, userId } = event;
// 1. 检查活动是否存在及是否结束
const activity = await db.collection('activities').doc(activityId).get();
if (!activity.data || activity.data.status === 'ended') {
return { code: 500, msg: '活动不存在或已结束' };
}
// 2. 插入报名记录
try {
await db.collection('enrollments').add({
data: {
activityId,
userId,
formData,
auditStatus: 'pending', // 默认待审核
createTime: db.serverDate()
}
});
return { code: 200, msg: '报名成功,等待审核' };
} catch (err) {
return { code: 500, msg: '报名失败', err };
}
};
系统测试
| 测试模块 | 测试项 | 预期结果 | 实际结果 |
|---|---|---|---|
| 活动报名 | 提交报名信息 | 提示成功,后台可见待审核记录 | 通过 |
| 活动搜索 | 关键词搜索 | 列表筛选出匹配活动 | 通过 |
| 打卡功能 | 上传图片打卡 | 图片上传成功,记录存入数据库 | 通过 |
| 后台管理 | 管理员登录 | admin/123456 登录成功 | 通过 |
| 数据导出 | 导出报名名单 | 生成Excel文件并下载 | 通过 |
UI设计
后台管理系统