投票的小程序 免费投票小程序

2025-03-23 16:42 - 立有生活网

现微信朋友圈随处可见提投票活动,在手机互联网时代人手一台智能手机,网络的流量资费都变得非常便宜,线上视频投票活动变得越来越受欢迎。举办一场短视频微信投票评选活动也是一个吸粉引流及用户互动的好方法。网友们基本上都会使用手机拍视频,而短视频微信投票评选活动既可以给用户发挥的空间,又可以让商家和企业实现推广的目的,可谓是一举两得。 短视频投票活动怎么制作?有免费的微信投票小程序吗?网络上很多投票平台都打着免费的口号,注册进去试用后发觉很多都是有消费的。虽然钱不多,但是对于一个企业来说该省的钱都要省,还有一个原因是如果付费了,个人走公司的报销流程也很麻烦。其实也有很多免费又好好的微信投票小程序如投票咖、票选助手、来票评等,支持图文投票、视频投票、分组投票等。如果要做短视频微信投票评选活动,直接在微信里面根据名字,不用下载app的,点击进入就可以了。 小程序有多种形式的投票模式,比如:图文投票、视频投票、文字投票等等、也有为了保证活动公司公平的防刷功能、定向地域投票功能。支持不同的投票内容、形式,不同的活动发起方不同的功能需求。在投票评选小程序创建、发起投票活动十分简单。登录后台点击创建投票活动即可。非常简单,只需轻松3步走即可完成创建,完成后即获得一个活动链接和活动二维码,分享后即可开始投票,就是这么简单粗暴。 一般平台创建活动流程过于复杂,在创建活动上花费太多时间简直是大忌,小程序首页就有在线,在创建过程中很少会遇到不太明白的地方,而且就算有些许不明白,他们还贴心的为大家设置了帮助指南,在每个设置选项右侧都有。只要花一点时间及耐心,就能快速发起线上短视频投票活动。 { "_id":"21ded5cb5ff5f0530407988a4e8f18a5", // id "creator":"o-ZK45EoiyFzvevQyQTSZUV7R64I", // 发起人 "title":"阿斯顿大的as da", // 标题 "desc":"阿斯顿阿斯顿", // 描述 "startTime":"2021-1-7", // 开始日期 "endTime":"2021-1-8", // 结束日期 "state":"ing" // 状态}

3. options (选项)

投票的小程序 免费投票小程序投票的小程序 免费投票小程序


投票的小程序 免费投票小程序


{ "_id":"be7fb3985ff5f05403068303431d580b", // id "vote_id":"21ded5cb5ff5f0530407988a4e8f18a5", // 选项对应的投票_id "title":"阿斯顿大的大的", // 标题 "desc":"撒打算的洒大地上阿斯顿", // 描述 "image":"://tmp/2jVXjjLScAyNf0dffe2c5fc6479bee73fe954b64a3e7.png", // 配图 "users":["o-ZK45EoiyFzvevQyQTSZUV7R64I"] // 该选项的投票者} 云函数开发

总共写了6个云函数

1. addRecord 新增投票记录

/ 新增投票记录 @param {String} title 标题 @param {String} desc 描述 @param {String} startTime 开始日期 @param {String} endTime 结束日期 @param {String} anonymous 匿名 @param {String} min 允许小投票数 @param {String} max 允许投票数 @param {String} type 投票类型:normal; pk @returns {Object} 包含投票_id /const cloud = require('wx-server-sdk')cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV})const db = cloud.database()exports.main = async (nt, context) => { const wxContext = cloud.getWXContext() const voteCollection = db.collection('votes') const data = { creator: wxContext.OPENID, // 发起人 title: nt.title, desc: nt.desc, startTime: nt.startTime, endTime: nt.endTime, anonymous: nt.anonymous, min: nt.min, max: nt.max, type: nt.type, state: 'ing' } // 投票votes:新增记录 const res = await voteCollection.add({ data }) // 选项options: 新增记录 const options = nt.options const optionCollection = db.collection('options') const optionPromise = options.map( ele => { const option = { vote_id: res._id, ...ele } return optionCollection.add({ data: option }) }) let resOptions = await Promise.all(optionPromise) resOptions = resOptions.map(e => e._id) // 返回投票结果 return { success: true, message: '新增投票成功', ...res }}

2.getRecordDetail 获取投票详情

投票的小程序 免费投票小程序


/ 获取投票详情 @param {String} _id 投票_id @return {Object} 投票数据 /const cloud = require('wx-server-sdk')cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV})const db = cloud.database()exports.main = async (nt, context) => { const _id = nt._id const OPENID = cloud.getWXContext().OPENID // 查找中的投票数据 const voteCollection = db.collection('votes') // 聚合联表查询 const voteQuery = await voteCollection .aggregate() .match({ _id }) .lookup({ from: 'users', localField: 'creator', foreignField: 'OPENID', as: 'creator' }) .end() let vote = {} if (voteQuery && voteQuery.list.length) { vote = voteQuery.list[0] vote.creator = vote.creator[0] // 判断是否当前投票的发起人 vote.isOwner = vote.creator.OPENID === OPENID // 查找中的选项数据 const optionsCollection = db.collection('options') const optionsQuary = await optionsCollection .aggregate() .match({ vote_id: _id }) .lookup({ from: 'users', localField: 'users', foreignField: 'OPENID', as: 'users' }) .end() vote.options = optionsQuary.list // 统计已经投票的人数 let votedTotal = 0 vote.options.forEach(e => { if (e.users && e.users.length) { votedTotal += e.users.length } }) vote.votedTotal = votedTotal // 计算当前投票的状态 if (vote.state !== 'end') { // 未开始 if (new Date().getTime() < new Date(vote.startTime).getTime()) { vote.state = 'pre' } // 已过期 = 已结束 if (new Date().getTime() > new Date(vote.endTime).getTime()) { vote.state = 'end' } } return { success: true, data: vote } } else { return { success: false, message: '找不到投票信息' } }}

3. vote 投票作

投票的小程序 免费投票小程序


/ 投票作 @param {String} voteId 投票_id @param {String} optionId 选项_id @return {Object} 投票结果 /const cloud = require('wx-server-sdk')cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV})const db = cloud.database()exports.main = async (nt, context) => { const _id = nt.optionId const vote_id = nt.voteId const OPENID = cloud.getWXContext().OPENID // 获取当前投票数据对应的所有选项数据 const options = db.collection('options') let voteOptions = await options.where({ vote_id }).get() voteOptions = voteOptions.data // 判断用户是否投过票 let curOptionUsers = [] for (let i = 0; i < voteOptions.length; i++) { // 找到选项中所有投过票的用户 const users = voteOptions[i].users if (users && users.length) { if (voteOptions[i]._id === _id) { curOptionUsers = users } if (users && users.length) { // OPENID重复-说明已经投过票->直接返回 if (users.indexOf(OPENID) > -1) { return { success: false, message: '您已经投过票了' } } } } } // 没有投票->将当前用户OPENID插入到对应的字段 curOptionUsers.push(OPENID) const res = await options.where({ _id }).update({ data: { users: curOptionUsers } }) return { success: true, data: res, message: '投票成功' }}

4. getRecordPage 获取我的投票记录分页

/ 获取我的投票记录分页 @param {Number} no 页码 @param {Number} size 页数 @return {Object} 投票数据列表和总数 /const cloud = require('wx-server-sdk')cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV})const db = cloud.database()exports.main = async (nt, context) => { const wxContext = cloud.getWXContext() const size = nt.size //获取接口参数 const no = nt.no const OPENID = wxContext.OPENID const voteCollection = db.collection('votes') // 查找中的投票数据 const votes = await voteCollection.aggregate() .match({ creator: OPENID }) .lookup({ from: 'options', localField: '_id', foreignField: 'vote_id', as: 'options' }) .sort({ _id: -1 }) .skip((no - 1) size) .limit(size) .end() // 计算总数 const total = await voteCollection.count() let data = votes.list // 计算投票状态 if (data.length) { data = data.map(e => { if (e.state !== 'end') { // 未开始 if (new Date().getTime() < new Date(e.startTime).getTime()) { e.state = 'pre' } // 已过期 = 已结束 if (new Date().getTime() > new Date(e.endTime).getTime()) { e.state = 'end' } } // 统计已投票人数 let votedTotal = 0 const options = e.options options.forEach(o => { if (o.users && o.users.length) { votedTotal += o.users.length } }) delete e.options return { ...e, votedTotal } }) } return { total, data }}

5. login 登录注册

/ 登录注册 @param {String} OPENID 从cloud.getWXContext()中获取 @return {Object} 用书数据 /const cloud = require('wx-server-sdk')cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV})const db = cloud.database()exports.main = async (nt, context) => { const wxContext = cloud.getWXContext() // 查找中的用户数据 const userCollection = db.collection('users') const users = await userCollection.where({ OPENID: wxContext.OPENID }).get() let user if (users && users.data.length) { // 用户已经存在-直接赋值用户数据 user = users.data[0] } else { // 新用户-向数据库插入用户数据 user = { OPENID: wxContext.OPENID, ...nt.userInfo } await userCollection.add({ data: user }) } // 返回用户数据-前端用来缓存 return { ...user }}

6. checkImage 校验合法性

/ 校验合法性 @param {} nt.fileID 微信云存储的ID @return {Number} 0:校验失败;1:校验通过 /const cloud = require('wx-server-sdk')cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV})exports.main = async (nt, context) => { const contentType = 'image/png' const fileID = nt.fileID try { // 根据fileID下载 const file = await cloud.downloadFile({ fileID }) const value = file.fileContent // 调用 imgSecCheck 借口,校验不通过接口会抛错 // 必要参数 media { contentType, value } const result = await cloud.openapi.security.imgSecCheck({ media: { contentType, value } }) return 1 } catch (err) { return 0 }} 前端开发 这次小程序端的开发 采用的是 滴滴前端团队出品的

mpx

框架

因为UI比较简单 这里就不贴代码了 感兴趣的欢迎前往 ...

了解

投票的小程序 免费投票小程序


1.它比起微信公众号自带的投票系统、传统的H5投票系统有可以图文投票、视频投票、分组投票。 2.像比较常用的小程序投票平台(投票咖、票选助手、来票评等)都是的,作品数量上没有限制。 上面提到的投票平台都是平时花时间精力去找的,感觉还行。次使用的话,可以按下面的步骤试试。 1.可以在微信根据名字搜索一下就能搜索得到啦,点击进入就可以发起活动了。 2、进入首页之后,点击下面创建投票就可以发起投票了,然后进行基本设置的填写。其中包括活动名称、活动时间、活动介绍等。 3、也是图文投票的最重要一环,找到活动设置中的时间与报名设置,设置为报名(默认其实就是图文投票),这样图文投票就完成设置了。 4、上述步骤设置成功后,接着填写投票设置,其中包括投票时间、是否开放报名、是否要分组投票等。 6、防刷票设置,所有信息修改填写完成后,要保证活动的正常进行,防止某些选手恶意刷票,就可以打开防刷设置,其中包括投票智能防刷、限制地区投票等。 7、活动设置完成就可直接发布。发布活动成功后就可以上传作品。我们有两种方式可以上传作品,一种是选手自主报名填写信息,一种是主办方上传作品。这两种方式可以根据活动的情况来自行设置。 活动发布成功后,可以在公众号根据投票活动的小程序信息,播入公众号文章、菜单、回复等地方。 现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户发挥的空间激发参与的热情,又可以让商家和企业实现推广的目的,可谓是一举两得。视频投票来说只有小程序能做到。希望回答能帮到你。 随着网络的不断发展,各种网络赛事、评选集中进行,投票创建需求激增。在此,向大家郑重一个稳定、免费、专业且快捷、简单的投票平台。为什么要力荐【投票AI助手】小程序?因为作为一款微信投票活动托管平台,投票AI助手不仅能够满足各种评选、赛事的投票需求,同时还具有更多的优势。 一、全部功能免费 曾经,我们都知道,天下没有免费的午餐,而在今天的互联网时代,我们享用着太多的免费服务。同样,投票AI助手的全部功能免费,你在发起投票的过程中没有任何消费,不用花一分钱,让用户用得安心,是投票AI助手的宗旨所在。 二、稳定性够强 在投票过程中,最为崩溃的莫过于系统不稳定,投票数据丢失、错乱,让原本公允的投票活动失去信任。而投票AI助手十分关注系统的稳定性和用户体验,以多年的技术积累不断改进和迭代产品,且启用了当前先进的分布式云,满足支撑各种级别投票流量条件。坚实的后台保障,也让投票活动进行得更为稳健。 三、全面的投票功能 对于投票内容、形式,不同的活动发起方有着不同的功能需求,为此,投票AI助手小程序推出了多种形式的投票模式,基于微信小程序可以指定区域投票,指定性别投票,指定每天投票数量,更加可以指定群聊投票(为内部投票的神器) 四、超多模板任意选择 在应用场景方面,投票AI助手小程序也有着诸多优势,10大XX投票评选活动、节日投票活动、政企投票评选活动、萌宝投票评选活动、宠物投票评选活动、美食投票评选活动、汽车类评选活动、珠宝评选活动、摄影大赛评选活动等多种投票模式、场景,投票AI助手小程序均全面支持。只要活动真实,合法合规,各行业的各种投票活动均可在天天投票平台发起投票评选活动。 投票AI助手小程序拥有丰富的高并发高负载运维经验以及大量投票活动的运营经验,支持各类大型投票评选活动的定制。 五、创建、发起投票作简单 手残?对各种作处于初级阶段?不用担心,在投票AI助手小程序创建、发起投票活动十分简单,堪称“傻瓜式”作。首先,无需注册,直接登录小程序即可,登录后台点击创建投票活动即可。非常简单,只需轻松3步走即可完成创建,完成后即获得一个活动链接和活动二维码,分享后即可开始投票,就是这么简单粗暴。 六、创建者支持实时修改、审核选手 其他传统投票系统均是基于H5网页,查看后台必须登录网页后台,而且通常数据繁多,作难度较大,但是小程序轻松解决这个问题,简单实用的功能给投票增加更多可能性。七 、完善的参赛者自主报名功能 参赛选手可以在线实时报名。参赛者自主报名后,活动发起方即可在后台审核选手选项中,对选手报名资料进行审核。

年满半百的雅称:敬语与尊称

五十岁,人生过半,迎来新的里程碑。在这个年纪,不再是年轻气盛的青年,也不同于颐养天年的老人,而是处于人生成熟稳重之期。因此,人们也为这个特殊年龄段的人群赋予了各种雅称,既体···

延安大学:211大学吗?

延安大学是位于陕西省延安市的一所公立大学。它是一所综合性研究型大学,拥有广泛的学科,包括人文、社会科学、自然科学、工程和医学。 延安大学:211大学吗? 然而,延安大学不是211大学。···

温州车牌号是浙什么 浙江温州车牌什么开头

乐乐给大家谈谈温州车牌号是浙什么,以及浙江温州车牌什么开头应用的知识点,希望对你所遇到的问题有所帮助。 温州车牌号是浙什么 浙江温州车牌什么开头 温州车牌号是浙什么 浙江温州车牌···