# reward-system **Repository Path**: James1801/reward-system ## Basic Information - **Project Name**: reward-system - **Description**: 儿童积分激励系统是一款面向学龄前儿童的习惯培养与财商教育工具。该系统的设计理念源于国际公认的儿童教育方法论,将行为心理学中的正向激励理论与实践性的理财教育相结合,创造出一种既能够有效引导儿童行为、又能够帮助儿童建立健康金钱观的综合教育解决方案。系统的目标用户群体为5岁儿童及其家长,通过亲子互动的形式,在日常生活中潜移默化地培养儿童的自理能力、责任意识和财务管理能力。 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-31 - **Last Updated**: 2025-12-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🚀 小小英雄积分激励系统 这是一个专为5岁儿童设计的积分激励和金钱启蒙系统,帮助孩子从小养成好习惯,建立正确的财富观念。 ## 📁 项目结构 ``` kid-reward-system/ ├── frontend/ # 前端页面 │ └── index.html # 主页面(HTML + CSS + JavaScript) ├── backend/ # 后端服务 │ ├── server.js # 主服务器文件 │ ├── package.json # Node.js依赖 │ ├── Dockerfile # Docker构建文件 │ ├── docker-compose.yml # Docker Compose配置 │ ├── .dockerignore # Docker忽略文件 │ └── README.md # 后端部署说明 ├── data/ # 数据库文件目录(部署时自动创建) └── README.md # 本文件 ``` ## 🎯 功能特性 ### 儿童功能 - ✅ 完成日常任务获得星星奖励 - ✅ 将星星兑换为金币 - ✅ 管理三个存钱罐(消费、储蓄、爱心) - ✅ 在商店兑换奖励 - ✅ 解锁成就徽章 - ✅ 完成任务时播放音效和动画效果 ### 家长功能 - ✅ 家长密码登录 - ✅ 添加、编辑、删除任务 - ✅ 添加、编辑、删除奖励 - ✅ 手动调整星星和金币数量 - ✅ 修改兑换比例 - ✅ 重置所有数据 - ✅ 修改登录密码 ## 🏠 部署方案 ### 方案一:Docker部署(推荐) #### 1. 准备目录结构 ```bash mkdir -p /path/to/kid-reward-system/data cd /path/to/kid-reward-system ``` #### 2. 构建并启动后端服务 ```bash cd backend # 构建镜像 docker build -t kid-reward-backend . # 或使用docker-compose docker-compose up -d ``` #### 3. 配置前端 编辑 `frontend/index.html`,找到以下行并修改为你的服务器地址: ```javascript // 第35行左右 const API_BASE_URL = 'http://你的NAS_IP:3000'; ``` #### 4. 部署前端 将 `frontend/index.html` 部署到任意Web服务器,或使用静态文件服务: ```bash # 方法1:使用Python简单服务器 cd frontend python3 -m http.server 8080 # 方法2:使用Node.js静态服务器 npx serve . # 方法3:使用Docker部署Nginx docker run -d \ --name kid-reward-frontend \ -p 8080:80 \ -v /path/to/kid-reward-system/frontend:/usr/share/nginx/html \ nginx:alpine ``` ### 方案二:直接运行(无需Docker) #### 1. 安装Node.js 确保已安装 Node.js 18+ 版本 #### 2. 启动后端服务 ```bash cd backend npm install mkdir -p data npm start ``` 后端服务将在 http://localhost:3000 启动 #### 3. 部署前端 直接将 `frontend/index.html` 在浏览器中打开,或使用任意Web服务器托管 ## 🔧 NAS部署示例 ### Synology NAS #### 步骤1:安装Docker套件 在套件中心安装"Docker"套件 #### 步骤2:创建数据目录 在任意位置创建数据文件夹,例如: `/volume1/docker/kid-reward/data` #### 步骤3:上传文件 将 `kid-reward-system/backend` 目录上传到NAS #### 步骤4:创建Docker容器 1. 打开Docker套件 2. 进入"容器"页面 3. 点击"创建" 4. 选择"使用Dockerfile创建" 5. 上传 `backend/Dockerfile` 6. 设置端口映射:本地端口3000 -> 容器端口3000 7. 设置卷映射:`/volume1/docker/kid-reward/data` -> `/data` 8. 设置环境变量:`JWT_SECRET`(可选) 9. 完成创建并启动 #### 步骤5:访问服务 - 后端API:http://你的NAS_IP:3000 - 前端:在浏览器中打开 `frontend/index.html`,修改API地址后使用 ### QNAP NAS #### 步骤1:安装Container Station 在App Center安装"Container Station" #### 步骤2:创建应用 1. 打开Container Station 2. 点击"创建应用程序" 3. 粘贴以下配置: ```yaml version: '3.8' services: kid-reward-api: build: . container_name: kid-reward-backend ports: - "3000:3000" volumes: - /share/Container/kid-reward/data:/data environment: - PORT=3000 - JWT_SECRET=your-secret-key restart: unless-stopped ``` 4. 点击"创建" #### 步骤3:部署前端 将 `frontend/index.html` 上传到你 NAS 的Web服务器目录 ### Unraid NAS #### 步骤1:添加Docker模板 1. 在Docker页面点击"添加容器" 2. 选择"高级视图" 3. 配置以下内容: - Repository: (本地构建或从Registry拉取) - Port Map: 3000:3000 - Volume: /mnt/user/appdata/kid-reward/data:/data - Environment: JWT_SECRET=your_key #### 步骤2:启动容器 ## 📡 API 接口说明 ### 公开接口 | 方法 | 路径 | 说明 | |------|------|------| | GET | /api/data | 获取所有数据 | | POST | /api/admin/login | 家长登录 | ### 认证接口 在请求头中添加:`Authorization: Bearer ` | 方法 | 路径 | 说明 | |------|------|------| | POST | /api/tasks/:id/complete | 完成任务 | | POST | /api/exchange | 金币兑换 | | POST | /api/rewards/:id/buy | 购买奖励 | | GET | /api/admin/stats | 获取统计 | | POST | /api/admin/tasks | 添加任务 | | PUT | /api/admin/tasks/:id | 更新任务 | | DELETE | /api/admin/tasks/:id | 删除任务 | | POST | /api/admin/rewards | 添加奖励 | | PUT | /api/admin/rewards/:id | 更新奖励 | | DELETE | /api/admin/rewards/:id | 删除奖励 | | PUT | /api/admin/settings | 更新设置 | | PUT | /api/admin/password | 修改密码 | | POST | /api/admin/reset | 重置数据 | ## ⚙️ 配置说明 ### 默认密码 首次运行后,默认家长密码为:**1234** ### 环境变量 | 变量 | 默认值 | 说明 | |------|--------|------| | PORT | 3000 | 服务端口 | | DB_PATH | ./data/rewards.db | 数据库文件路径 | | JWT_SECRET | kid-reward-secret-2024 | JWT签名密钥 | ## 🔒 安全建议 1. **修改默认密码**:部署后立即修改默认密码 2. **设置强JWT_SECRET**:使用复杂的随机字符串 3. **限制网络访问**:配置NAS防火墙,只允许内网访问 4. **定期备份**:备份 `data` 目录下的 `rewards.db` 文件 ## 📊 数据库备份 ### 备份方法 只需备份 `rewards.db` 文件即可,该文件包含所有数据: - 系统设置 - 任务列表 - 奖励列表 - 交易记录 - 徽章记录 ### 恢复方法 将备份的 `rewards.db` 文件放回 `data` 目录即可 ## 🧹 维护命令 ### Docker Compose管理 ```bash # 查看状态 docker-compose ps # 查看日志 docker-compose logs -f # 重启服务 docker-compose restart # 停止服务 docker-compose down # 更新并重启 docker-compose pull && docker-compose up -d ``` ### 直接运行管理 ```bash # 查看进程 ps aux | grep node # 重启服务 kill && npm start ``` ## ❓ 常见问题 ### Q: 数据库文件在哪里? A: 在你映射的 `data` 目录下,文件名为 `rewards.db` ### Q: 忘记密码怎么办? A: 可以通过删除 `rewards.db` 文件重建(会丢失所有数据),或使用SQLite工具修改 `settings` 表 ### Q: 前端显示"未连接"? A: 请检查: 1. 后端服务是否正在运行 2. API地址是否配置正确 3. 防火墙是否允许访问3000端口 ### Q: 可以同时运行前端和后端吗? A: 可以,前端文件可以放在任何Web服务器中 ### Q: 如何添加自定义任务? A: 登录家长模式后,在"任务管理"页面添加 ### Q: 如何修改星星兑换比例? A: 登录家长模式后,在"孩子信息"页面修改"星星兑换比例" ## 📝 更新日志 ### v1.0.0 (2024-12-26) - 初始版本发布 - 支持SQLite数据库存储 - 完整的任务和奖励管理功能 - 音效和动画效果 - Docker部署支持 ## 📄 许可证 本项目仅供个人学习使用,欢迎改进和分享! ## 🙏 致谢 感谢使用本系统,希望能够帮助孩子养成好习惯,建立正确的财富观念! ## 图片 ![任务](./images/1.png "这是一个任务") ![存储罐](./images/2.png "这是一个存储罐") ![兑换](./images/3.png "这是一个兑换") ![商店](./images/4.png "这是一个商店") ![家长设置](./images/5.png "这是一个家长设置")