全国节能宣传周知识答题活动

全国节能宣传周知识答题活动

若想在短期内,进行安全生产知识的传播,那么答题无疑是有效方式之一。

答题活动小程序v3.0,基于微信原生小程序+云开发实现。主要包含六大功能模块页面,首页、活动规则页、排行榜页、答题页、结果页、答题记录页。

适用于节能知识宣传、学法普法教育、消防安全知识宣传、交通安全答题、网络安全知识竞赛、安全生产知识学习、五四青年节答题活动、有奖答题等应用场景。

活动主题

节能降碳,绿色发展

活动形式

线上知识竞赛

竞赛内容

绿色环保节能知识、垃圾分类知识

活动规则

1、本次知识竞赛活动采用微信公众号平台小程序在线答题模式。

2、知识竞赛题库共计200题,其中单选题100道、多选题50道、判断题50道。

3、每次答题题库随机抽取10道题目,答题时间为5分钟,每天限制3次答题机会,每次答题满80分即可抽奖。

4、排名规则,按单次得分,得分相同的按答题用时排。

奖项设置

奖品设置:话费50元、30元、20元、10元不等;

参与方式

在活动文章点击链接进入,即可参与答题。

软件架构

  • 微信原生小程序
  • 后端云开发(数据库、云函数、存储)
  • CMS后台管理系统

功能结构

  • 排行榜页
  • 活动规则页
  • 答题记录页
  • 微信授权登录
  • 题库随机抽题
  • 查询历史成绩
  • 首页、答题页、结果页、注册登录页、题库学习等
  • 实现页面间跳转功能
  • 实现转发分享答题成绩功能
  • 实现用云开发实现查询题库功能
  • 实现动态题目数据绑定
  • 答题交互逻辑
  • 切换下一题
  • 提交答卷保存到云数据库集合
  • 系统自动判分
  • 答题结果页从云数据库查询答题成绩
  • 支持单选、多选、判断题型
  • 错题集
  • 查看所有用户的答题记录-管理员
  • 查看用户的答题成绩以及答题情况-管理员
  • 后台数据监控-管理员
  • 后台管理-管理员

v3.0版本升级:

1)拓展功能:

  • 注册登录页 √
  • 题库学习 √
  • 错题集 √
  • 查看所有用户的答题记录-管理员 √
  • 查看用户的答题成绩以及答题情况-管理员 √
  • 后台题库管理系统-管理员 √
  • 题目增删查改-管理员 √

2)升级功能:

  • 排行榜页排名机制,优化为取个人最佳成绩进行排名√
  • 答题页、结果页界面,增加展示微信头像和昵称栏目√
  • 由仅支持单选,升级为支持单选、判断、多选题型 √
  • 各界面及功能一些小优化√

关键代码

1、微信授权登录,获取微信头像昵称

<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
  <image class="avatar" src="{
   
   {avatarUrl}}"></image>
</button> 
<input type="nickname" class="weui-input" placeholder="请输入昵称"/>

const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
 
Page({
  data: {
    avatarUrl: defaultAvatarUrl,
  },
  onChooseAvatar(e) {
    const { avatarUrl } = e.detail 
    this.setData({
      avatarUrl,
    })
  }
})

2、转发分享功能

页面内发起转发。通过给 button 组件设置属性 open-type="share",可以在用户点击按钮后触发 Page.onShareAppMessage 事件,相关组件:button。

onShareAppMessage: function () {
    // return custom share data when user share.
  },

3、小程序页面栈最多十层

问题:假设小程序内有20个问题页面,答完上一个问题后wx.navigateTo到下一个问题页面,那么到第十题时,你会发现wx.navigateTo跳转不到下一个页面。

分析:这是因为使用wx.navigateTo跳转会把当前页面保存到页面栈中,而小程序页面栈最多十层。

解决:使用wx.redirectTo或wx.reLaunch替代。

4、从题库中随机抽题

// 获取题库-函数定义
  getQuestionList() {
 
    // 数据库集合的聚合操作实例
    activityQuestion
    .aggregate()
    .match({       //类似于where,对记录进行筛选
      true: _.exists(true)
    })
    .sample({
      size: 20
    })
    .end()
    .then(res => {
      // 在控制台打印数据
      console.log(res.list)
 
      let data = res.list || [];
      
      // 将数据从逻辑层发送到视图层,通俗的说,也就是更新数据到页面展示
      this.setData({
        questionList:data
      });
    })
  }

5、成绩由高到底排名

getRankList() {
    // 数据库集合的聚合操作实例
    activityScore
    .where({
      _openid: _.exists(true)
    })
    .orderBy('totalScore', 'desc')
    .get()
    .then(res => {
      // 获取集合数据,或获取根据查询条件筛选后的集合数据。
      console.log('[云数据库] [排行榜] 查询成功')
      console.log(res.data)
      let data = res.data || [];
      
      // 将数据从逻辑层发送到视图层,通俗的说,也就是更新数据到页面展示
      this.setData({
        rankList:data
      });
    })
  }

猜你喜欢

转载自blog.csdn.net/qq_29528701/article/details/130779328