
开源仓库:https://gitee.com/tyerp/photo-lottery
照片墙抽奖是一套用于活动大屏的抽奖系统。年会、庆典、答谢会这类场景里,抽奖环节既要画面热闹、又不能让规则出错。这套工具把参与者照片铺成动态滚动的照片墙,支持从特等奖到多个等级的奖项配置,点一下就开始滚动、按下确认就出结果,已中奖的人会自动从奖池排除,中奖名单随时可查、可重置。
作品定位
- 面向活动现场:主打大屏投屏抽奖,界面元素按远距离观看设计,标题、奖项、中奖结果都足够醒目。
- 零依赖部署:可打包成 Windows / macOS / Linux 桌面应用双击运行,也能直接以网页形式在浏览器里打开投屏,不需要服务器。
- 数据不落地到后端:照片与配置全部存在本机,活动结束即完,不涉及名单外泄。
核心功能
照片墙展示
动态滚动展示所有参与人员的照片,每张照片带姓名标签,支持快速滚动模式,抽奖时视觉冲击力强。
多奖项抽奖
支持自定义多个奖项,例如特等奖、一等奖、二等奖、三等奖,每个奖项可单独设置中奖人数。
智能抽奖
已中奖人员自动排除,避免重复中奖;同一场活动连续抽多轮也不会把同一个名字抽出来两次。
中奖名单管理
「幸运榜」按奖项分类展示全部历史中奖记录,支持一键重置名单,方便彩排与正式场次切换。
奖池管理
人员名单支持批量上传照片、搜索、编辑、删除、批量选择与批量删除,也可以一次清空整个奖池。
现场体验
- 动态滚动:照片墙自动滚动,抽奖瞬间切换为快速滚动,结果弹出后带爆炸特效。
- 音效支持:抽奖过程配背景音乐,结果揭晓配结束音效,活动现场氛围更足。
- 响应式布局:适配不同分辨率的投影与屏幕。
- 快捷键:在确认界面按空格键即可确认抽奖,方便主持人单手操作。
数据与存储
- IndexedDB:存储上传的照片数据,图片量较大也够用。
- localStorage:存储奖项配置、标题与中奖名单。
- 持久化:刷新页面后数据不丢失,活动过程中误刷新也不影响进度。
使用说明
- 添加人员:点击左上角「管理」按钮,通过「+ 添加图片」上传人员照片,支持批量上传。
- 配置奖项:点击右下角「设置」,自定义奖项名称与人数,并修改页面标题。
- 开始抽奖:点击底部奖项按钮,照片墙进入快速滚动,按空格键或点击「确定」确认抽奖。
- 管理奖池:在管理界面搜索、编辑、删除人员,支持批量操作与全部清空。
- 查看中奖名单:点击「幸运榜」按奖项查看中奖记录,可一键重置名单。
技术栈
- 前端框架: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。