#小程序云开发挑战赛#-文艺比赛小行家-流浪者
发布于 4 年前 作者 guiying79 3120 次浏览 来自 分享

应用场景

用于公司、单位内部组织的文艺比赛活动,例如唱歌比赛、朗诵比赛,每个观众都借助小程序为选手投票,主办方也可以借助小程序控制屏幕显示,同时小程序也提供一些选手介绍等内容。

目标用户

小型文艺比赛的组织者。

实现思路

充分利用了云开发的各项功能,使用云函数开发小程序后台,使用云数据库存储数据,使用云存储存储资源文件,使用静态网站托管功能实现大屏幕显示,使用云开发的匿名登录功能实现网页与小程序的数据互通,从而实现主办方利用小程序与屏幕交互。在远程控制的设计时,借助云数据库实现状态的船体,网页使用轮询的方法实现“实时”获取控制命令。

架构图

整体架构大概如图所示:

主要的数据库关系图如图所示:

每一个用户在云函数中能够获得openid,如果用户授权了则保存用户到系统用户集合,否则就是游客用户,仅能访问游客权限的功能。

每个用户可以组织比赛,也可以作为观众观看比赛。作为观众时候,有评委和观众两种角色,评委在打分时候具有较高的权重。

选手是主办方单独录入的,不一定是微信用户,每场比赛的选手是独立的,需要单独录入。

效果截图

功能代码展示

以下是云函数的主要代码,借鉴了mvc框架的思想,加上了一个action参数。

exports.main = async (event, context) => {

  var action = event.action;
  if (!action) {
    return { code: 20000, msg: 'hello, world' };
  }
  //dispatcher
  var ret;
  if (action === 'role') {
    ret = await registerAndReturnUser(event);
  } else if (action === 'userlist') {
    ret = await fetchUserList(event);
  } else if (action === 'updaterole') {
    ret = await updateUser(event);
  } else if(action === 'contests'){
    ret = await fetchContestList(event);
  } else if(action === 'savecontest'){
    ret = await saveContest(event);
  } else if(action === 'players'){
    ret = await fetchPlayerList(event);
  } else if(action === 'generateContestQR'){
    ret = await generateContestQR(event);
  }

  if (typeof (ret) === 'undefined') {
    return { code: 20400, msg: 'nocontent' };
  } else if (ret === null) {
    return { code: 40400, msg: 'not found' };
  } else if (ret) {
    return { code: 20000, msg: 'success', data: ret };
  }

}

作品体验二维码

团队简介

就我自己,流浪者团队,因为我想去流浪,当一个自由职业者。

远期计划

因为时间仓促,再加上有些功能必须上线了才能使用,所以接下来准备继续努力,上线。然后加入抽奖等功能。

Gitee

https://gitee.com/palhotel/contesthost/tree/master


回到顶部