├── README.md └── index.html /README.md: -------------------------------------------------------------------------------- 1 | # 3D 抽奖系统 (3D Lucky Draw System) 2 | 3 | 这是一个基于 Web 技术构建的现代化、炫酷的 3D 抽奖系统,专为企业年会、活动现场设计。支持离线运行,数据本地存储,无需配置后端服务器。 4 | 5 | ## ✨ 主要特性 6 | 7 | * **炫酷 3D 视觉效果**:使用 Three.js 构建的 3D 球体动画,每个参与者都是一张独立的卡片。 8 | * **多格式数据导入**:支持 Excel (`.xlsx`, `.xls`) 和纯文本 (`.txt`) 文件导入,也可直接复制粘贴手动录入。 9 | * **灵活的抽奖设置**:支持自定义奖项名称、单次抽取数量,可选择是否排除已中奖用户。 10 | * **实时中奖记录**:左侧侧边栏实时显示中奖历史,支持清空和重置。 11 | * **数据持久化**:所有数据(用户名单、配置、中奖记录)均保存在浏览器本地存储 (LocalStorage),刷新页面不丢失,防误触关闭保护。 12 | * **响应式与可调整 UI**:侧边栏宽度支持鼠标拖拽调整,适应不同分辨率屏幕。 13 | * **离线可用**:下载依赖库后可完全离线运行(默认使用 CDN)。 14 | 15 | ## 🚀 快速开始 16 | 17 | ### 在线/联网使用 18 | 1. 直接用现代浏览器(Chrome, Edge, Firefox, Safari)打开 `index.html` 文件。 19 | 2. 系统会自动加载演示数据,点击“开始抽奖”即可体验。 20 | 21 | ### 离线使用 22 | 如果活动现场没有网络,请预先下载以下依赖库并修改 `index.html` 中的引用路径: 23 | * **Vue 3**: `vue.esm-browser.js` 24 | * **Three.js**: `three.module.js` 25 | * **Three.js CSS3DRenderer**: `CSS3DRenderer.js` 26 | * **Tailwind CSS**: `tailwindcss.js` (或编译后的 CSS) 27 | * **SheetJS**: `xlsx.full.min.js` 28 | * **Animate.css**: `animate.min.css` 29 | 30 | ## 📂 目录结构 31 | 32 | > **注意**:为了解决浏览器对本地文件 (`file://`) 的跨域安全限制,`index.html` 已经内联了所有业务逻辑代码,支持**直接双击运行**。 33 | 34 | ```text 35 | zedwork/ 36 | ├── index.html # [发布版] 集成所有代码,可离线直接运行 37 | └── README.md # 项目文档 38 | ``` 39 | 40 | ## 📝 数据导入格式 41 | 42 | 点击设置面板中的 **“设置/数据”** 按钮进行导入。 43 | 44 | ### 1. Excel 导入 45 | 支持 `.xlsx` 或 `.xls` 文件。 46 | * **第一列**:姓名 (必填) 47 | * **第二列**:部门/工号/描述 (选填) 48 | * *系统会自动识别首行是否为标题行。* 49 | 50 | | 姓名 | 部门 | 51 | | :--- | :--- | 52 | | 张三 | 技术部 | 53 | | 李四 | 运营部 | 54 | 55 | ### 2. TXT 文本导入 56 | 支持 `.txt` 文件,每行一个姓名。 57 | 58 | ```text 59 | 张三 60 | 李四 61 | 王五 62 | ``` 63 | 64 | ## 🛠️ 技术栈 65 | 66 | * **核心框架**: [Vue.js 3](https://vuejs.org/) (ESM build) 67 | * **3D 引擎**: [Three.js](https://threejs.org/) (CSS3DRenderer) 68 | * **样式库**: [Tailwind CSS](https://tailwindcss.com/) (CDN Script) + [Animate.css](https://animate.style/) 69 | * **工具库**: [SheetJS (xlsx)](https://sheetjs.com/) 70 | 71 | ## ⚠️ 注意事项 72 | 73 | 1. **浏览器兼容性**:请使用支持 ES Modules 的现代浏览器。 74 | 2. **数据安全**:数据存储在本地浏览器中,清理浏览器缓存会丢失数据。建议正式使用前先备份人员名单。 75 | 3. **性能**:建议参与人数在 10-500 人范围内以获得最佳 3D 渲染性能。 76 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 |396 | 随机算法: 399 | 本系统采用 400 | Mulberry32 403 | 伪随机数生成器,配合 404 | Cyrb128 407 | 哈希函数将种子转换为数值。 408 |
409 |410 | 种子作用: 413 | 相同的种子 + 相同的名单 = 相同的中奖结果。 414 | 您可以公开种子供事后验证,确保结果可复现、不可篡改。 415 |
416 |417 | 洗牌算法: 420 | 使用 421 | Fisher-Yates 424 | 标准洗牌算法,保证每个人被抽中的概率完全相等。 425 |
426 |429 | 💡 430 | 建议:可使用当天股票指数、时间戳等公开数据作为种子,增强公信力。 431 |
432 |433 | 本程序由 Chris杨 在Zed中使用 Gemini 3 Pro 435 | 和 Claude Opus 4.5 开发。 437 |
438 |796 | 当前总人数: 797 | {{ winnerStats.total }} 801 |
802 |803 | 已中奖: {{ winnerStats.winners }} 人 ({{ 804 | winnerStats.percent }}%) 805 |
806 |