照片墙抽奖-基于 Vue 3 + Electron 的活动大屏抽奖系统

开源仓库:https://gitee.com/tyerp/photo-lottery

照片墙抽奖是一套用于活动大屏的抽奖系统。年会、庆典、答谢会这类场景里,抽奖环节既要画面热闹、又不能让规则出错。这套工具把参与者照片铺成动态滚动的照片墙,支持从特等奖到多个等级的奖项配置,点一下就开始滚动、按下确认就出结果,已中奖的人会自动从奖池排除,中奖名单随时可查、可重置。

照片墙抽奖系统界面:标题、照片墙、奖项按钮与幸运榜入口
抽奖主界面:顶部为可自定义的活动标题与奖池人数,中间为动态滚动的参与者照片墙,底部为各奖项抽奖按钮

作品定位

  • 面向活动现场:主打大屏投屏抽奖,界面元素按远距离观看设计,标题、奖项、中奖结果都足够醒目。
  • 零依赖部署:可打包成 Windows / macOS / Linux 桌面应用双击运行,也能直接以网页形式在浏览器里打开投屏,不需要服务器。
  • 数据不落地到后端:照片与配置全部存在本机,活动结束即完,不涉及名单外泄。

核心功能

照片墙展示

动态滚动展示所有参与人员的照片,每张照片带姓名标签,支持快速滚动模式,抽奖时视觉冲击力强。

多奖项抽奖

支持自定义多个奖项,例如特等奖、一等奖、二等奖、三等奖,每个奖项可单独设置中奖人数。

智能抽奖

已中奖人员自动排除,避免重复中奖;同一场活动连续抽多轮也不会把同一个名字抽出来两次。

中奖名单管理

「幸运榜」按奖项分类展示全部历史中奖记录,支持一键重置名单,方便彩排与正式场次切换。

奖池管理

人员名单支持批量上传照片、搜索、编辑、删除、批量选择与批量删除,也可以一次清空整个奖池。

现场体验

  • 动态滚动:照片墙自动滚动,抽奖瞬间切换为快速滚动,结果弹出后带爆炸特效。
  • 音效支持:抽奖过程配背景音乐,结果揭晓配结束音效,活动现场氛围更足。
  • 响应式布局:适配不同分辨率的投影与屏幕。
  • 快捷键:在确认界面按空格键即可确认抽奖,方便主持人单手操作。

数据与存储

  • IndexedDB:存储上传的照片数据,图片量较大也够用。
  • localStorage:存储奖项配置、标题与中奖名单。
  • 持久化:刷新页面后数据不丢失,活动过程中误刷新也不影响进度。

使用说明

  1. 添加人员:点击左上角「管理」按钮,通过「+ 添加图片」上传人员照片,支持批量上传。
  2. 配置奖项:点击右下角「设置」,自定义奖项名称与人数,并修改页面标题。
  3. 开始抽奖:点击底部奖项按钮,照片墙进入快速滚动,按空格键或点击「确定」确认抽奖。
  4. 管理奖池:在管理界面搜索、编辑、删除人员,支持批量操作与全部清空。
  5. 查看中奖名单:点击「幸运榜」按奖项查看中奖记录,可一键重置名单。

技术栈

  • 前端框架:Vue 3(Composition API)
  • 构建工具:Vite
  • 桌面应用:Electron + electron-builder 打包
  • 样式:原生 CSS,无 UI 框架依赖,动画基于 CSS keyframes

构建与打包

开发环境需要 Node.js 16 以上,包管理器推荐 pnpm。Web 开发模式运行 pnpm run dev,Electron 开发模式再开一个终端运行 pnpm run electron:dev。

生产构建执行 pnpm run build 生成 dist 目录;桌面端打包按平台执行 pnpm run electron:build:win(Windows x64)、electron:build:win32(Windows x86)、electron:build:mac、electron:build:linux,产物输出到 release 目录。

开源与许可

作品基于 MIT License 开源,可自由学习、修改与商用,欢迎提交 Issue 和 Pull Request。