Skip to content

alexduming/vote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

课堂作品投票系统

一个基于 Firebase Realtime Database 的实时投票系统,用于课堂练习作品的全体投票,支持选出 TOP3 最佳作品。

✨ 功能特点

  • 实时同步:所有用户可以实时看到投票数据变化
  • 简单导入:管理员可以粘贴名单(每行一个名字)快速导入候选人
  • 灵活投票:每人可以给多个作品投票,但每个作品最多投一票
  • TOP3 展示:自动高亮显示票数最高的三个作品(金🥇、银🥈、铜🥉)
  • 身份识别:通过简单的名字输入进行身份标识
  • 投票控制:管理员可以开启/关闭投票、重置数据
  • 响应式设计:支持手机和电脑访问

📁 文件结构

vote/
├── index.html          # 投票主页面
├── admin.html          # 管理员页面
├── app.js             # 投票逻辑
├── admin.js           # 管理员逻辑
├── firebase-config.js # Firebase 配置
├── styles.css         # 样式文件
└── README.md          # 本文档

🚀 快速开始

1. 创建 Firebase 项目

  1. 访问 Firebase Console
  2. 点击"添加项目"或"创建项目"
  3. 输入项目名称(例如:classroom-voting)
  4. 根据提示完成项目创建

2. 创建 Realtime Database

  1. 在 Firebase Console 左侧菜单中,点击"构建" → "Realtime Database"
  2. 点击"创建数据库"
  3. 选择数据库位置(建议选择离您最近的区域)
  4. 选择"以测试模式启动"(方便快速开始)
    • ⚠️ 注意:测试模式允许任何人读写数据,仅适合开发和课堂使用
    • 生产环境请配置适当的安全规则

3. 获取 Firebase 配置

  1. 在 Firebase Console 中,点击项目设置(齿轮图标)
  2. 滚动到"您的应用"部分
  3. 点击"添加应用" → 选择 Web 图标(</>)
  4. 输入应用昵称(例如:voting-app),无需设置 Firebase Hosting
  5. 点击"注册应用"
  6. 复制显示的配置代码

4. 配置项目

打开 firebase-config.js 文件,将配置信息替换为您的 Firebase 配置:

const firebaseConfig = {
  apiKey: "YOUR_API_KEY",                    // 替换为您的 API Key
  authDomain: "YOUR_PROJECT_ID.firebaseapp.com",
  databaseURL: "https://YOUR_PROJECT_ID-default-rtdb.firebaseio.com",
  projectId: "YOUR_PROJECT_ID",
  storageBucket: "YOUR_PROJECT_ID.appspot.com",
  messagingSenderId: "YOUR_MESSAGING_SENDER_ID",
  appId: "YOUR_APP_ID"
};

5. 启动使用

  1. 用浏览器打开 admin.html(管理员页面)
  2. 粘贴候选人名单(每行一个名字),点击"导入候选人"
  3. index.html 的链接分享给投票者
  4. 投票者打开链接,输入姓名后即可开始投票

📖 使用指南

管理员操作(admin.html)

导入候选人

  1. 在"导入候选人名单"区域的文本框中粘贴名单
  2. 格式:每行一个名字,例如:
    张三
    李四
    王五
    
  3. 点击"📥 导入候选人"按钮

投票控制

  • 关闭/开启投票:控制投票者是否可以投票
  • 重置所有投票:清空所有票数,但保留候选人名单
  • 清空所有候选人:删除所有候选人和投票数据
  • 清空所有数据:删除所有数据(包括设置)

查看结果

  • 实时查看所有候选人的票数
  • TOP3 作品会自动高亮显示(金🥇、银🥈、铜🥉)
  • 统计信息显示候选人总数、总投票数、投票人数

投票者操作(index.html)

  1. 输入姓名:在首页输入您的真实姓名
  2. 开始投票:点击"开始投票"按钮
  3. 投票:点击作品卡片进行投票
    • 已投票的作品会显示 ✓ 标记和蓝色背景
    • 再次点击可以取消投票
  4. 查看结果:实时查看所有作品的票数和 TOP3 排名

🎨 界面说明

投票页面特点

  • 用户信息栏:显示当前投票人姓名和已投票数量
  • 作品卡片
    • 普通状态:白色背景
    • 已投票:蓝色渐变背景 + ✓ 标记
    • TOP1:金色左边框 + 🥇 徽章
    • TOP2:银色左边框 + 🥈 徽章
    • TOP3:铜色左边框 + 🥉 徽章
  • 实时更新:所有数据变化会立即同步到所有用户

管理员页面特点

  • 统计卡片:实时显示候选人总数、总投票数、投票人数
  • 结果展示:按票数排序显示所有候选人
  • 操作按钮:提供完整的管理功能

🔧 技术细节

数据结构

{
  "candidates": {
    "candidate_id_1": {
      "name": "张三",
      "votes": 5,
      "order": 0
    }
  },
  "voters": {
    "voter_name_1": {
      "votedFor": ["candidate_id_1", "candidate_id_3"]
    }
  },
  "settings": {
    "votingEnabled": true
  }
}

投票逻辑

  • 使用 Firebase Transaction 确保数据一致性
  • 防止重复投票
  • 支持取消投票
  • 实时同步所有客户端

⚠️ 注意事项

  1. Firebase 安全规则

    • 初始配置使用测试模式,任何人都可以读写数据
    • 仅适合课堂环境和开发测试
    • 生产环境请配置适当的安全规则
  2. 投票者身份

    • 使用简单的名字输入,可能存在重名问题
    • 建议在课堂环境使用,确保姓名唯一性
  3. 数据持久化

    • Firebase 数据会永久保存
    • 需要手动清理旧数据
  4. 免费额度

    • Firebase 免费计划(Spark Plan)足够课堂使用
    • 并发连接数限制:100 个
    • 存储空间:1 GB
    • 下载量:10 GB/月

🔒 安全规则配置(可选)

如果需要更严格的安全控制,可以在 Firebase Console 的 Realtime Database → 规则中配置:

{
  "rules": {
    "candidates": {
      ".read": true,
      ".write": "auth != null"
    },
    "voters": {
      ".read": true,
      ".write": true
    },
    "settings": {
      ".read": true,
      ".write": "auth != null"
    }
  }
}

🐛 常见问题

Q: 打开页面后显示"Firebase 配置错误"

A: 请检查 firebase-config.js 文件中的配置是否正确填写。

Q: 投票后没有反应

A:

  1. 检查浏览器控制台是否有错误信息
  2. 确认 Firebase Realtime Database 已创建
  3. 确认数据库规则允许读写

Q: 多个浏览器窗口数据不同步

A:

  1. 检查网络连接
  2. 确认 Firebase 配置中的 databaseURL 正确
  3. 刷新页面重新连接

Q: 如何部署到服务器?

A:

  1. 将所有文件上传到 Web 服务器
  2. 或使用 Firebase Hosting:
    npm install -g firebase-tools
    firebase login
    firebase init hosting
    firebase deploy

📊 使用场景

  • ✅ 课堂作品评选
  • ✅ 团队内部投票
  • ✅ 活动评选
  • ✅ 小型比赛投票
  • ✅ 意见收集

🎯 后续优化建议

  • 添加投票时间限制功能
  • 支持匿名投票模式
  • 导出投票结果为 Excel/CSV
  • 添加投票历史记录
  • 支持多轮投票
  • 添加候选人描述/图片展示
  • 添加用户认证(Firebase Authentication)
  • 添加投票统计图表

📝 更新日志

v1.0.0 (2026-01-24)

  • ✅ 初始版本发布
  • ✅ 支持实时投票和数据同步
  • ✅ 管理员页面和投票页面
  • ✅ TOP3 高亮显示
  • ✅ 响应式设计

📄 许可证

本项目仅供学习和课堂使用。

💬 支持

如有问题或建议,请联系管理员。


祝您使用愉快!🎉

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors