从0到1:文体社团活动小程序设计与实现(I)

0 阅读3分钟

项目背景

随着大众健康和文化意识的增强,文体社团活动日益频繁。本项目旨在开发一款基于微信小程序的“文体社团活动小程序”,为社团管理者提供活动发布、报名管理、进程管理及数据统计功能,同时为用户提供活动浏览、报名、打卡评比及反馈建议的服务。

核心功能模块

  • 活动管理:活动发布(名称、时间、地点、费用等)、报名管理(收集信息、审核)、- 进程管理(签到、记录、照片)。
  • 用户中心:浏览活动、报名参加、查看进程、意见反馈、我的报名记录。
  • 打卡模块:每日文艺/体育/健身打卡(上传心得图片)、打卡排行、每日动态、目标管理。
  • 后台管理:公告通知、社团风采管理、活动分类与列表、报名审核与数据导出、打卡- 项目管理与记录导出。
  • 自定义表单:支持组织者自定义报名字段(姓名、性别、身份证、手机号等)。 在这里插入图片描述

技术架构

本项目采用 Serverless(无服务器) 架构,基于 微信小程序云开发(WeChat Cloud Development) 解决方案。

  • 前端:微信小程序原生框架(WXML, WXSS, JavaScript/TypeScript)。
  • 后端:微信云函数(Node.js环境),无需自建服务器。
  • 数据库:微信云数据库(JSON文档型数据库,类似MongoDB)。
  • 存储:微信云存储(用于存放活动照片、打卡图片等)。
  • 优势:免域名、免服务器运维、高安全性(腾讯内部链路)、弹性扩展、成本低。

系统逻辑架构图

  • 用户层:C端用户(社团成员)、B端用户(社团管理者/超级管理员admin)。
  • 应用层:微信小程序界面(活动列表、详情页、报名表单、打卡页、个人中心、后台管理入口)。
  • 服务层(云函数):
  • mcloud:核心业务逻辑云函数,处理增删改查、权限验证、数据统计。
  • 定时器:处理活动状态更新、打卡结算等定时任务。
  • 数据层:云数据库(集合包括:活动表、报名表、用户表、打卡记录表、社团表等)。

数据库设计

字段名类型说明
_idString主键,自动生成
titleString活动名称
categoryString活动分类
locationString活动地点
start_timeDate开始时间
end_timeDate结束时间
feeNumber活动费用
deadlineDate报名截止时间
max_participantsNumber最大人数限制
custom_fieldsArray自定义报名字段配置 (如: [{key:'id_card', label:'身份证'}])
statusString状态 (报名中/进行中/已结束)
creator_idString创建者OpenID
create_timeDate创建时间
字段名类型说明
_idString主键
activity_idString关联活动ID
user_openidString用户OpenID
user_infoObject用户提交的具体信息 (动态字段,含姓名、手机等)
statusString审核状态 (待审核/已通过/已拒绝)
check_in_statusBoolean是否签到
signup_timeDate报名时间
字段名类型说明
_idString主键
user_openidString用户OpenID
check_dateString打卡日期 (YYYY-MM-DD)
typeString打卡类型 (文艺/体育/健身)
contentString心得体会文本
imagesArray图片URL列表 (云存储FileID)
scoreNumber评分/积分
create_timeDate提交时间
字段名类型说明
_idString主键 (OpenID)
nicknameString昵称
avatarString头像URL
roleString角色 (user/admin/super_admin)
phoneString手机号 (可选)

关键代码实现示例

// 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 { action, data } = event;
  
  if (action === 'create_activity') {
    // 验证管理员权限 (略)
    try {
      const result = await db.collection('activities').add({
        data: {
          title: data.title,
          location: data.location,
          start_time: new Date(data.start_time),
          // ... 其他字段
          creator_id: context.OPENID,
          create_time: db.serverDate()
        }
      });
      return { code: 0, msg: '发布成功', data: result };
    } catch (err) {
      return { code: -1, msg: '发布失败', error: err };
    }
  }
  // 处理其他动作...
};

// pages/activity/publish.js
wx.cloud.callFunction({
  name: 'mcloud',
  data: {
    action: 'create_activity',
    data: {
      title: '周末篮球赛',
      location: '学校体育馆',
      start_time: '2023-10-01 14:00:00',
      // ...
    }
  },
  success: res => {
    if (res.result.code === 0) {
      wx.showToast({ title: '发布成功' });
    } else {
      wx.showToast({ title: '发布失败', icon: 'none' });
    }
  },
  fail: err => {
    console.error(err);
  }
})

UI设计

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

后台管理系统设计

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

git 代码下载

点击下载