前言
- 好久没有更新博客
- 一直忙于项目测试修复bug
- 今日收到我哥的需求,想做一个现场投票系统
- 我就想着做个简单的小程序再用vue配合插件做个实时图标就可以了
- 在这期间真的是一波三折啊,数据库报错被迫重置,服务器出问题,还好都解决了
- 废话不多说进入今天的简易投票系统
工具/材料
- 开发系统 Mac OS 10.13.3
- 开发工具 Vs code 、phpStorm、MySQL、Postman、微信开发者工具
- 线上系统 阿里云 Centos 7 64位
- 线上 apache环境 php 、mysql环境搭建
- nginx反向代理 https
- 域名以及备案
- Vue-cli 、 Tp5
- 图标插件 echarts https://echarts.baidu.com/examples/
- 源码 https://gitee.com/yhf7
开始
TP5编写后端api (没啥说的直接下源码看源码:)
业务
- 编写token、验证token
- 验证是否投票,投票
使用tp5做了什么
- 验证数据层
- 模型操作数据库
- 业务逻辑层
- 全局异常处理机制
- 挂载后台页面
- 数据存储
小程序
- 简单的单选以及api请求
- 页面 
- api请求封装1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46/** 
 * 请求封装
 * 当 noRefech 为 true, 不做未授权重做机制
 */
 request (params,noRefetch) {
 var that = this;
 // url内外拼接
 var url = this.baseRequestUrl + params.url;
 if (!params.type) {
 params.type = 'GET'
 }
 wx.request({
 url: url,
 data: params.data,
 method: params.type,
 header: {
 'content-type':'application/json',
 'token': wx.getStorageSync('token')
 },
 success: res => {
 var code = res.statusCode.toString();
 var startChar = code.charAt(0);
 if (startChar == '2') {
 // 判断函数,存在才调用
 params.sCallback && params.sCallback(res.data);
 } else {
 // AOP
 // 401 无token,重新调用
 if (code == '401') {
 // 避免无限循环,默认false进入,第二次调用时返回ture就不会再次去调用死循环
 if (!noRefetch) {
 that._refetch(params);
 }
 }
 if (noRefetch) {
 params.eCallback && params.eCallback(res.data);
 }
 }
 },
 fail: err => {
 console.log(err);
 }
 })
 }

- api调用以及单选业务处理 
vue后台
- 就是简单的图标实时获取投票数据
- 安装插件 - 1 - $ sudo cnpm i echarts -S 
- 页面源码 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57- <template> 
 <div class="visitorpie">
 <div id="visitorpie" class style="width: 90%;height:450px;"></div>
 </div>
 </template>
 <script>
 var echarts = require('echarts');
 import API from '@/api'
 export default {
 mounted() {
 this.myChart = echarts.init(document.getElementById("visitorpie"));
 this.initData();
 setInterval(() => {
 API.geDate().then(res => {
 let arr = []
 for (const key in res) {
 arr.push(res[key]);
 }
 this.initData(arr)
 })
 }, 3000);
 },
 methods: {
 initData(arr) {
 var option = {
 title: {
 text: '第八届广东文艺职业学院美术系班服大赛最佳人气榜'
 },
 tooltip: {},
 legend: {
 data:['票数']
 },
 xAxis: {
 data: ["18会展班","18工艺班","18计美1班","18计美2班","18配饰班","18陶艺班"]
 },
 yAxis: {},
 series: [{
 name: '票数',
 type: 'bar',
 data: arr
 }]
 };
 this.myChart.setOption(option);
 }
 }
 };
 </script>
 <style lang="less">
 @import "../assets/styles/mixin.less";
 .visitorpie {
 .fj("centeer");
 margin-top: 20px;
 }
 </style>
- 效果图  
打包放在tp5的public里面即可
服务器/小程序后台数据效果图



后记
- 这就是我帮我哥做的简易实时投票系统,望大家多多指教
- 欢迎进入我的博客:https://yhf7.github.io/
- 如果有什么侵权的话,请及时添加小编微信以及qq也可以来告诉小编(905477376微信qq通用),谢谢!