# 通知系统NoticeSystem **Repository Path**: jindec/NoticeSystem ## Basic Information - **Project Name**: 通知系统NoticeSystem - **Description**: 一个简单易用的通用提醒系统,支持多种基于Server酱的推送方式,可根据预设时间和日期自动发送提醒。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-10 - **Last Updated**: 2025-12-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 通知系统 NoticeSystem 一个简单易用的通用提醒系统,支持多种基于Server酱的推送方式,可根据预设时间和日期自动发送提醒。 ## 🌟 功能特性 - **基于Server酱的推送**:支持 APP 推送和微信推送,均基于Server酱服务实现 - **用户管理**:支持管理员和普通用户角色,管理员可添加和管理用户 - **无密码登录**:支持 IP 白名单无密码访问 - **默认 Key 设置**:普通用户可设置自己的默认推送 Key - **安全机制**:包含请求频率限制、登录失败锁定等安全功能 - **SQLite 存储**:使用 SQLite 数据库存储数据,无需额外数据库服务 - **定时提醒**:根据设定的时间和日期自动发送提醒 - **可视化管理**:提供直观的 Web 界面进行提醒管理 - **前后端分离**:采用现代化的前后端分离架构 ## 🛠️ 技术栈 ### 后端 #### Go 后端 (backend-go) - **Go 1.24.0**:高性能的后端开发语言 - **Gin**:轻量级的Web框架,提供高效的路由和中间件支持 - **GORM**:强大的Go ORM框架 - **Swagger**:自动生成API文档 - **ServerChan SDK**:集成Server酱推送服务 ### 数据库 - **SQLite**:嵌入式关系型数据库,无需额外安装 ### 前端 - **Vue 3**:渐进式JavaScript框架 - **Ant Design Vue**:企业级UI组件库 - **Pinia**:Vue 3的状态管理库 - **Vue Router**:Vue官方路由管理器 - **Axios**:基于Promise的HTTP客户端,用于前后端通信 - **Dayjs**:轻量级的日期时间处理库 - **Vite**:下一代前端构建工具 ## 🚀 快速开始 ### 环境要求 - **Go 1.24.0**:高性能的后端开发语言 - **Node.js 20+** 和 npm/yarn/pnpm:前端开发环境 - **操作系统**:支持 SQLite 的操作系统(Windows、Linux、macOS) ### 后端部署 1. **克隆仓库** ```bash git clone https://gitee.com/jindec/NoticeSystem.git cd NoticeSystem ``` 2. **配置文件** 进入Go后端目录,复制 `config.example.json` 为 `config.json`,并根据需要修改配置: ```bash cd backend-go cp config.example.json config.json ``` 3. **编译并运行** ```bash # Windows go build -o NoticeSystem.exe main.go ./NoticeSystem.exe # Linux/macOS go build -o NoticeSystem main.go ./NoticeSystem ``` 或者直接运行: ```bash go run main.go ``` 4. **使用编译脚本** 后端提供了 `build.bat` 脚本,可以方便地生成Windows和Linux平台的发行版: ```bash # 进入后端目录 cd backend-go # 运行编译脚本 .\build.bat ``` 脚本会提示输入版本号,然后自动生成两个平台的发行版文件到 `dist` 目录。 5. **访问API文档** 后端服务启动后,可访问 Swagger API 文档:http://localhost:8080/swagger/index.html ### 前端部署 1. **安装依赖** ```bash cd ../frontend npm install ``` 2. **开发模式** ```bash npm run dev ``` 访问前端开发服务器:http://localhost:5173 3. **生产构建** ```bash npm run build ``` 构建后的静态文件将生成在 `dist` 目录中,可部署到任何静态文件服务器。 ### 发行版使用 如果您不想从源码编译,可以直接使用预编译的发行版: #### 发行版格式 - **Windows**: `NoticeSystem-win-release-vX.X.X.exe` - **Linux**: `NoticeSystem-linux-release-vX.X.X` #### 使用步骤 1. **下载发行版** - 根据您的操作系统下载对应的发行版文件 2. **准备配置文件** - 直接创建一个 `config.json` 文件,根据需要配置各项参数 - 或从项目根目录复制 `config.example.json` 作为模板:`cp config.example.json config.json` - 配置文件需要与可执行文件放在同一目录下 3. **运行程序** - **Windows**: 直接双击 `NoticeSystem-win-release-vX.X.X.exe` 或在命令行中运行 - **Linux**: 赋予执行权限并运行 ```bash chmod +x NoticeSystem-linux-release-vX.X.X ./NoticeSystem-linux-release-vX.X.X ``` 4. **访问系统** - 打开浏览器访问:http://localhost:8080 ### 完整部署(生产环境) 1. 构建前端静态文件 2. 将前端构建产物放置到后端可访问的位置 3. 启动后端服务 4. 通过后端服务访问前端页面(默认:http://localhost:8080) ## 🔧 配置说明 ### 后端配置文件 `config.json` ```json { "server": { "port": 8080, // 服务端口 "rateLimitPerMinute": 60, // 每分钟请求限制 "sessionTimeout": 3600 // 会话超时时间(秒) }, "security": { "adminPassword": "123456", // 管理员密码(固定) "maxLoginAttempts": 5, // 最大登录尝试次数 "lockoutDuration": 300 // 登录失败锁定时长(秒) }, "defaults": { "adminServerChanKey": "", // 管理员默认 ServerChan Key "adminSendKey": "" // 管理员默认微信 Send Key }, "userManagement": { "enableNoPasswordAccess": true, // 是否启用无密码访问 "allowedIPs": ["127.0.0.1", "::1"] // 允许无密码访问的 IP 列表 } } ``` ## 📁 项目结构 ``` NoticeSystem/ ├── backend-go/ # Go 后端代码 │ ├── config/ # 配置相关代码 │ ├── handler/ # HTTP 请求处理器 │ ├── middleware/ # 中间件 │ ├── model/ # 数据模型 │ ├── service/ # 业务逻辑层 │ ├── utils/ # 工具函数 │ ├── docs/ # Swagger 文档 │ ├── config.example.json # 配置文件示例 │ ├── build.bat # 编译脚本 │ ├── course_notice.db # SQLite 数据库文件 │ └── main.go # 应用入口 ├── frontend/ # 前端代码 │ ├── public/ # 静态资源 │ ├── src/ # 源代码 │ │ ├── assets/ # 资源文件 │ │ ├── layouts/ # 布局组件 │ │ ├── pages/ # 页面组件 │ │ ├── router/ # 路由配置 │ │ ├── stores/ # 状态管理 │ │ ├── utils/ # 工具函数 │ │ ├── App.vue # 根组件 │ │ └── main.js # 入口文件 │ ├── index.html # HTML模板 │ ├── package.json # 依赖配置 │ ├── vite.config.js # Vite 配置 │ └── README.md # 前端说明 └── README.md # 项目说明文档 ``` ## 📖 使用指南 ### 登录系统 1. 打开浏览器访问系统地址 2. 输入密码登录: - 管理员密码:`123456` 配置文件中设置 - 普通用户密码:由管理员创建 ![登录页面](screenshot/login.png) ### 添加提醒 1. 在主页选择提醒时间和日期 2. 输入提醒标题和内容 3. 选择推送方式(APP 或 微信服务号) 4. 输入对应的推送 Key(普通用户可以在右上角设置默认值,管理员在config.json文件中设置) 5. 点击"立即添加"保存提醒 ![添加提醒](screenshot/addReminder.png) ### 管理提醒 - **启用/禁用**:点击提醒卡片上的启用/禁用按钮 - **编辑**:点击编辑按钮修改提醒内容 - **删除**:点击删除按钮删除提醒 ![管理提醒](screenshot/reminder.png) ### 普通用户设置默认 Key 1. 点击右上角"设置默认 Key"按钮 2. 输入默认的 ServerChan Key 和微信 Send Key 3. 点击"保存设置",之后创建提醒时可自动使用默认 Key ### 管理员管理用户 1. 点击右上角"用户管理"按钮 2. 在用户管理模态框中: - 添加用户:填写用户信息并点击"添加用户" - 编辑用户:点击编辑按钮修改用户信息 - 删除用户:点击删除按钮删除用户 ![用户管理](screenshot/userManager.png) ## 🛡️ 安全机制 1. **请求频率限制**:默认每分钟 60 次请求限制 2. **登录失败锁定**:连续 5 次登录失败,IP 锁定 5 分钟 3. **会话管理**:登录会话有效期 1 小时 4. **跨域资源共享(CORS)**:支持跨域请求 5. **无密码访问**:仅允许指定 IP 地址无密码访问 6. **用户权限控制**:普通用户只能管理自己的提醒 ## 📄 许可证 本项目采用 Apache 2.0 许可证,详见 [LICENSE](LICENSE) 文件。 ## 🤝 贡献指南 欢迎提交 Issue 和 Pull Request! ### 开发规范 - 后端:遵循 Go 语言编码规范 - 前端:遵循 Vue 3 最佳实践 - 提交前确保代码通过编译 - 添加必要的注释和文档 - 遵循现有代码风格 ## 📌 版本更新 ### 2025年12月12号 - ✅ 重构Go语言后端,将手写SQL改为使用GORM - ✅ 统一了错误响应码 - ✅ 前端优化了API响应 - ✅ 删除提醒增加了二次确认 ### 2025年12月10号 - ✅ 初始版本发布 - ✅ 实现了功能说明中的完整功能 - ✅ 支持 APP 推送和微信推送 - ✅ 用户管理功能 - ✅ SQLite 数据库存储 - ✅ 安全机制 - ✅ 可视化 Web 界面 - ✅ 前后端分离架构 - ✅ Swagger API 文档 ## 📝 使用须知 1. 请妥善保管推送 Key,避免泄露 2. 建议定期备份数据库文件 `course_notice.db` 3. 生产环境中建议修改默认管理员密码 4. 如需修改服务端口,可在配置文件中调整 5. 前端开发模式下,API 请求将代理到后端服务 ## 🔮 未来计划 - [ ] 支持更多推送方式 - [ ] 支持批量导入提醒 - [ ] 支持提醒模板 - [ ] 支持邮件推送 - [ ] 支持导出提醒数据 - [ ] 支持多语言 - [ ] 添加更多安全特性 - [ ] 支持多语言后端 --- **感谢使用通知系统 NoticeSystem!** 🎉