返回作品

投票系统

创建于 2025 年 6 月 22 日

标签
  • 若依 RuoYi
  • Spring Boot
  • easy-query
  • MyBatis-Plus
  • MySQL
  • Redis
  • Druid
  • Vue 2
  • Element UI
  • uni-app
  • Swagger

项目介绍

投票系统是基于若依 RuoYi 3.9.0 后台框架二次开发的歌手大赛投票平台,业务代码集中在 com.ruoyi.vote 包,前端在若依标准 ruoyi-ui(Vue 2 + Element UI)上新增 views/vote 业务页面,并配套一套基于 uni-app 开发的微信小程序(toupiao-wx)。系统服务一场歌手大赛的完整链路:管理员创建投票活动并设定起止时间;选手通过小程序报名,提交姓名、身份证、手机号、微博用户名、抖音 ID 与微博截图,经管理端审核通过后进入选手列表;管理员在管理端点击”开始投票”,投票窗口进入 1 分钟倒计时,用户在小程序上为心仪选手投票;倒计时结束投票自动停止,票数实时统计并生成并列排名,管理端与小程序排行榜同步展示。

核心功能

  • 选手报名与批量审核views/vote/user/index.vue + VoteUserController + AppVoteUserController):小程序端报名接口校验活动 ID 非空,并检查同一活动下该用户是否已报名(“报名信息已存在”),报名表单通过 u-upload 上传微博截图(仅 jpg/png、不超过 5M,走若依 common/upload);管理端选手列表以 el-tag 展示审核状态(待审核/通过/不通过),提供”批量通过""批量拒绝”一键流转,同时支持按姓名、活动筛选与 Excel 导出。
  • 限时投票与倒计时AppVoteRecordController.add + views/vote/user/index.vue):管理端点击”开始投票”将选手 isRun 置 1,前端随即显示”剩余 01:00”倒计时,startCountdown 在 60 秒后自动调用更新接口把 isRun 置 0 完成关闭;后端投票接口同样校验 isRun != "1" 时直接返回”投票已停止”,前后端双重保障投票窗口严格受控。
  • 防重复投票AppVoteRecordController.add):投票前先校验选手存在,再以 operaUserId + voteUserId + createTime 按天(YYYY-MM-DD) 组合统计当天记录,命中即返回”您已经投过票了”——每个用户每天对同一选手只能投一票;通过校验后自动把选手的姓名/身份证/手机号冗余进投票记录,并写入操作人 ID 与创建时间,保证后续统计与导出不依赖选手表的实时状态。
  • 投票记录管理views/vote/record/index.vue + VoteRecordController):管理端按投票对象、姓名、操作用户、关联活动(活动下拉实时显示状态)多维筛选,支持新增/修改/删除与 Excel 导出,导出时 leftJoin app 用户表带出操作人昵称;小程序端 pages/my/myEnroll.vue 通过 listByToken 查询自己报名过的活动,pages/my/certificate.vue 展示电子证书,pages/vote/leaderboard.vue 直接复用排名接口呈现实时榜单。

功能截图

暂无运行截图。