应用场景
用于公司、单位内部组织的文艺比赛活动,例如唱歌比赛、朗诵比赛,每个观众都借助小程序为选手投票,主办方也可以借助小程序控制屏幕显示,同时小程序也提供一些选手介绍等内容。
目标用户
小型文艺比赛的组织者。
实现思路
充分利用了云开发的各项功能,使用云函数开发小程序后台,使用云数据库存储数据,使用云存储存储资源文件,使用静态网站托管功能实现大屏幕显示,使用云开发的匿名登录功能实现网页与小程序的数据互通,从而实现主办方利用小程序与屏幕交互。在远程控制的设计时,借助云数据库实现状态的船体,网页使用轮询的方法实现“实时”获取控制命令。
架构图
整体架构大概如图所示:
主要的数据库关系图如图所示:
每一个用户在云函数中能够获得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