修改pages/vote/vote.js文件中getVoteDataFromServer函数,代码如下:
getVoteDataFromServer(voteID)?{
????const?db?=?wx.cloud.database()
????db.collection('votes').doc(voteID).get().then(res?=>?{?//?根据投票ID获取投票信息
??????const?voteData?=?res.data
??????const?isExpired?=?this.checkExpired(voteData.endDate)?//检查投票是否已经过期
??????this.setData({?//?将获取到的投票信息更新到data对象中
????????voteID,
????????type:?voteData.type,
????????voteTitle:?voteData.voteTitle,
????????voteDesc:?voteData.voteDesc,
????????optionList:?voteData.optionList,
????????endDate:?voteData.endDate,
????????isAnonymous:?voteData.isAnonymous,
????????isExpired
??????})
????}).catch(res?=>?{
??????console.error(res)
??????wx.showToast({
????????title:?'获取投票失败',
????????icon:?'none'
??????})
????})
??}
------------
实现getVoteStatusFromServer功能,需要知道openid,小程序端无法获取当前用户的openid,因此需要借助云函数实现。首先在新建一个名为getVoteStatus的云函数目录,该目录下的index.js代码如下:
//?云函数入口文件
const?cloud?=?require('wx-server-sdk')
cloud.init({?env:?cloud.DYNAMIC_CURRENT_ENV?})?//?使用当前云环境
const?db?=?cloud.database()
//?云函数入口函数
exports.main?=?async?(event,?context)?=>?{
??const?wxContext?=?cloud.getWXContext()
??const?openid?=?wxContext.OPENID?//?获取用户的openid
??/**
???*?根据投票ID获取投票记录
???*?使用await关键字可以直接获取Promise过程中then函数中的res的值
???*?await关键字必须在被声明为async的函数中使用
???*/?
??const?res?=?await?db.collection('votes').doc(event.voteID).get()
??const?optionLength?=?res.data.optionList.length?//?获取投票选项的个数
??const?voteLsit?=?res.data.voteLsit?//?获取所有用户的投票列表
??const?alreadyVoted?=?checkAlreadyVoted(voteList,?openid)
??const?totalVoteCount?=??getTotalVoteCount(voteList)
??const?optionStatus?=??getOptionStatus(voteList,?openid,?optionLength)
??return?{
????event,
????openid:?wxContext.OPENID,
????appid:?wxContext.APPID,
????unionid:?wxContext.UNIONID,
????alreadyVoted,?//当前用户是否已经投票
????totalVoteCount,?//总投票数量
????optionStatus?//每个选项的投票情况
??}
}
function?checkAlreadyVoted(voteList,?openid){}
function?getTotalVoteCount(voteList){}
function?getOptionStatus(voteList,?openid,?optionLength){}
-----------------
三个计算函数下次补上。
最后在小程序端调用云函数的代码,将getVoteStatusFromServer函数修改为以下代码:
getVoteStatusFromServer(voteID){
????wx.cloud.callFunction({
??????name:?'getVoteStatus',
??????data:?{
????????voteID
??????}
????}).then(res?=>?{?
??????console.log(res)
??????this.setData({?
????????voteStatus:?res.result
??????})
????}).catch(res?=>?{
??????console.error(res)
??????wx.showToast({
????????title:?'获取投票数据失败',
????????icon:?'none'
??????})
????})
??}