- 党建答题小程序复盘总结
本文背景本文以党建答题活动为背景,该活动从6月22号0点持续到6月30号晚上12点,参与人数500人,答题记录500*9*2 活动规则见文末的附件1 感悟感想不出意外,再过三个小时,持续9天的党建答题活动就要顺利结束了,我为什么用顺利而不是用圆满,因为期间确实出现了很多问题,但是这些问题没有影响到答题活动的正常开展。 对于一个答题活动公平公正是第一位的,作为该活动的见证者,我发誓该活动从未刻意改动过用户后台答题得分数据,但是必须承认在用时数据这块,在前期是存在一定误差的。 答题用时的误差是由于用户答题中途退出小程序造成的,如果按照正常的答题流程,答题用时数据是准确的,所以对于中途退出答题的这个场景,在后续的优化环节可以继续推进 项目架构该小程序开发只用了两天时间,小程序开发采用了云开发,原生框架,未引入任何界面组件库,为保证活动顺利进行开通了按量付费服务,云开发按量付费服务如何开通具体见附件3 用到的知识点汇总 1、云函数 这次开发小程序非常依赖云函数,一共创建了13个云函数,其中有定时触发器执行的,有在小程序端调用的。 其实小程序采用云函数,有以下好处 (1)云函数如果逻辑有问题,可以及时修复,不需要审核,这一点至关重要,因为我做答题活动都是马上就要开始了 (2)小程序调用云函数,我们可以通过云函数的日志,监控到具体的调用参数,响应信息,不需要再主动打日志信息 [图片] 2、定时触发器 该知识点在小程序的两个场景有用到 (1)主要用在累计排名的计算上,目前累计排名是通过云函数在整点计算,每天计算24次 (2)修复用时不对齐的问题,在每个整点的59分执行 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/functions/triggers.html 界面截图1[图片] [图片] [图片] [图片] 相关文章如何开通云开发CMS内容管理系统? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/0000cab5cd87b8bca68a3f23253413 党建答题活动小程序复盘回顾? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/000a4296148320f6b68a852c851413 微信答题小程序用时计算逻辑梳理? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/0002c8bd344510fbe38a2747d51813 党建答题小程序复盘回顾系列二? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/000624fdef4c68b1199a245e851013 字符串转日期大坑请绕行? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/0002a6e8188a48f4369aefcf15b013 云函数默认执行超时时间? - 微信开放社区 https://developers.weixin.qq.com/community/develop/article/doc/00026a51780f2089599a33b3d5b013 本文内容在社区之前也发过几篇关于答题活动的文章,主要用于记录答题小程序问题修复的一些细节,本文在前文之上做下汇总。 问题按照我想到的问题顺序记录 1、答题用时数据没有对齐,造成排序的时候错乱; 2、答题结束时可以重复提交导致,部分用户有两次有效答题记录; 3、其他样式问题,比如排名不对齐 4、苹果手机关于字符串转日期的兼容性问题 5、累计排名,分钟超过100时,前面未补0,导致排序错乱,该问题跟问题一类似,只是发现的较晚 6、excel文件的题库转json时,会将日期转成某时间戳,具体见附件4 7、定时触发器执行云函数超时,导致累计数据里面确实很多用户的答题数据 后续优化1、总排行棒实时展示 2、答题界面优化,如果答对,在选项后面标记对勾符号,答错标记×符号 3、增加系统自动导出报表功能 4、用户中途退出答题 5、倒计时 总结通过这一次党建答题活动真的收获非常多,也投入很多时间,为以后做类似答题活动积累了宝贵的经验,希望从这次活动中,让产品更上一个层次 备注我给这个小程序开通过云开发CMS内容管理系统,我承诺在活动结束之后,会把账号CMS系统的账号、密码对外开放,给不熟悉CMS的同学参观、学习 附件1 [图片] [图片] [图片] 附件2活动发放奖励(该图截图自另一个同时段答题活动) [图片] 附件3[图片] [图片] [图片] [图片] [图片] [图片] [图片] 附件4[图片] [图片] 附件5
2020-07-01 - 【组件库】编写一套小程序商城UI组件库
小程序商城UI组件库 wx-mall-components 最近很久没有更新文章了,在开源一个商城UI组件库,将日常商城用到的一些组件整合打包整理出来,并且支持一键更换组件皮肤等商城常用的功能,供大家使用,组件库还在完善当中,后续会陆陆续续加上各种商城用到的酷炫功能,希望大家可以来一起维护。 项目地址 https://github.com/csonchen/wx-mall-components 技术 pug # 编写静态模板 stylus # 编写样式 gulp # 文件编译,复制操作等 启动 [代码]# 安装&开发阶段 npm install (cnpm install) npm run start # 小程序调试阶段 打开“小程序开发者工具”,选择“导入项目”,选中 dist 目录 [代码] 四大模块 目前根据实际情况拆成四大组件版块,分别如下: 基础组件 交互组件 表单组件 业务组件 目录结构 [代码] wx-mall-components 微信小程序商城组件库 ./dist # 编译后的小程序文件目录存放路径 ./src ├── app.js ├── app.json ├── app.styl ├── components # 组件存放路径 │ ├── card-swiper │ │ ├── card-swiper.js │ │ ├── card-swiper.json │ │ ├── card-swiper.pug │ │ └── card-swiper.styl │ ├── date-picker │ ├── dropdown-select │ ├── form-input │ ├── search │ └── toast ├── images ├── node_modules ├── package.json ├── pages # 页面存放路径 │ ├── cardSwiperPage │ │ ├── cardSwiperPage.js │ │ ├── cardSwiperPage.json │ │ ├── cardSwiperPage.pug │ │ ├── cardSwiperPage.styl │ │ └── doc.js # 组件说明文档 │ ├── datePickerPage │ ├── dropdownSelectPage │ ├── index │ ├── inputPage │ ├── richTextPage │ ├── searchPage │ └── toastPage ├── sitemap.json ├── styles # 公用样式 │ ├── define.styl # 定义变量 │ ├── flex.styl # flex布局 │ ├── framework.styl # 框架定义 │ ├── normal.styl # 字体,边距等 │ └── plugin.styl # 三角形,下三角等插件定义 └── templates # 公用模板文件 └── pageHead.pug [代码] 示例 [图片] 小程序码 [图片]
2020-07-06 - 微信小程序图表Demo(附上源码)
开源微信小程序图表Demo github地址 https://github.com/kesixin项目:WX-Graphic 线性图[图片] 滚动线性图[图片] 柱状图[图片] 扇形图[图片] 环形图[图片] 区域图[图片] 雷达图[图片] <!--index.wxml--> <view class="container"> <view bindtap="gotoPage" data-page="line" class="mt20 list-item">线性图</view> <view bindtap="gotoPage" data-page="scrollline" class="mt20 list-item">滚动线性图</view> <view bindtap="gotoPage" data-page="column" class="mt20 list-item">柱状图</view> <view bindtap="gotoPage" data-page="pie" class="mt20 list-item">扇形图</view> <view bindtap="gotoPage" data-page="ring" class="mt20 list-item">环形图</view> <view bindtap="gotoPage" data-page="area" class="mt20 list-item">区域图</view> <view bindtap="gotoPage" data-page="radar" class="mt20 list-item">雷达图</view> </view>
2020-07-03 - 线上答题小程序: 微信答题小程序开发学习与实践入门记录整理分享(内附源码)
OnlineAnswerMiniProgram 开发答题类微信小程序实践详细记录 前言:这是一个简单的考试类微信小程序,基本上可以满足在线考试的需求。 纯前端,数据写好在data.json文件里,每一次考试结果利用缓存存储。 一、 试题数据 新建小程序项目时,我们看到已经有index和logs页,先不要管他。我们新增一个和pages文件夹同级的data文件夹,新建json.js文件存放我们的数据。 [图片] 1. 数据格式: [代码]// data/json.js var json = { "001": [ { "question": "爸爸的爸爸叫什么?", "option": { "A": "爷爷", "B": "姥爷", "C": "叔叔", "D": "伯伯", "E": "阿姨", "F": "老舅" }, "true": "A", // 正确答案 "type": 1, // 类型 1 单选 2 多选 "scores": 10, // 分值 "checked": false // 默认没有选中 }, { "question": "妈妈的姐妹叫什么?", "option": { "A": "姥姥", "B": "奶奶", "C": "叔叔", "D": "大姨", "E": "小姨", "F": "老舅" }, "true": ["D", "E"], // 正确答案 "type": 2, // 类型 1 单选 2 多选 "scores": 10, // 分值 "checked": false // 默认没有选中 }, ... ... ], "002": [ // ...数据格式同上 ] } [代码] 2. 导出数据 [代码]// data/json.js var json = {...} module.exports = { questionList: json } [代码] 定义完数据后,要在json.js最后面使用module.exports导出。 3. 导入数据 [代码]// app.js // 导入数据 var jsonList = require('data/json.js'); App({ globalData: { questionList: jsonList.questionList // 拿到答题数据 } }) [代码] 在app.js里使用require导入数据,并且定义在全局变量globalData里。将来使用的时候: [代码]首先 var app = getApp(); 然后 app.globalData.questionList 就可以拿到导出的json数据。 [代码] 因为我们不只有一套试卷,前面在json里定义了两个数组:001和002。之后可以通过 [代码]app.globalData.questionList["001"][代码]选择性导入试题数据。 二、 home页面(考试入口) 在pages文件夹里新增home页面。首页授权登录后点击跳转到该页面,页面上有两个模块:001和002。点击模块进行对应的考试。 1. 主要代码 home.wxml [代码]view class="page">
请选择试题:/view> 001/view>/view> 002/view>/view> /view> [代码] home.js [代码]Page({ data: { }, onLoad: function (options) { }, toTestPage: function (e) { let testId = e.currentTarget.dataset['testid']; wx.navigateTo({ url: '../test/test?testId=' + testId }) } }) [代码] 2. 页面 [图片] 三、 答题页 和 答题结束页 不管是001还是002试题,都是共用一套页面模板。在这个页面要实现答题(含:每次进入试卷试题都要乱序排列)、评分、查看错题、记录答题数据(时间/试题id/得分)的功能。 1. 实现简单的问答页面 (test页面) 首先新建一个test页面文件夹,在test.wxml文件里编写我们的答题模板。第一步先不要考虑乱序排列和记录答题功能,只先实现简单的选择答案和下一题、评分的功能。 test.wxml 解析 [图片] 答题模板很简单,主要由题目、答案(单选/多选)、下一题(提交)、退出答题组成。 test.wxml 代码 [代码]{{index+1}}、{{questionList[index].question}} {{questionList[index].type==1?"【单选】":"【多选】"}} ({{questionList[index].scores}}分) /view> /view> 2020-08-20