# 贡献指南 ## 欢迎贡献 我们热烈欢迎社区开发者为宁夏智慧养殖监管平台做出贡献!无论您是想修复bug、添加新功能、改进文档,还是提供反馈建议,我们都非常感谢您的参与。 ## 目录 - [开始之前](#开始之前) - [如何贡献](#如何贡献) - [开发环境搭建](#开发环境搭建) - [代码贡献流程](#代码贡献流程) - [代码规范](#代码规范) - [提交规范](#提交规范) - [Pull Request 指南](#pull-request-指南) - [问题报告](#问题报告) - [文档贡献](#文档贡献) - [社区行为准则](#社区行为准则) ## 开始之前 ### 阅读项目文档 在开始贡献之前,请确保您已经阅读并理解了以下文档: - [README.md](README.md) - 项目概述 - [DEVELOPMENT.md](DEVELOPMENT.md) - 开发指南 - [API.md](API.md) - API 文档 - [架构文档](arch.md) - 系统架构 ### 了解项目状态 - 查看 [Issues](https://github.com/your-org/nxxmdata/issues) 了解当前需要解决的问题 - 查看 [Projects](https://github.com/your-org/nxxmdata/projects) 了解项目路线图 - 查看 [CHANGELOG.md](CHANGELOG.md) 了解最新变更 ## 如何贡献 您可以通过以下方式为项目做出贡献: ### 🐛 报告 Bug - 发现了系统错误或异常行为 - 遇到了文档中的错误或不清楚的地方 - 发现了安全漏洞(请通过私密渠道报告) ### 💡 提出功能建议 - 提出新的功能想法 - 建议改进现有功能 - 提出用户体验优化建议 ### 📝 改进文档 - 修复文档中的错误 - 添加缺失的文档 - 改进文档的清晰度和准确性 - 翻译文档到其他语言 ### 💻 贡献代码 - 修复已知的 bug - 实现新功能 - 优化性能 - 重构代码 - 添加测试用例 ### 🎨 设计贡献 - 改进用户界面设计 - 提供图标和图片资源 - 优化用户体验 ## 开发环境搭建 ### 前置要求 - Node.js 18.0+ - npm 8.0+ 或 yarn 1.22+ - MySQL 8.0+ - Git 2.25+ ### 克隆项目 ```bash # 1. Fork 项目到您的 GitHub 账户 # 2. 克隆您的 fork git clone https://github.com/YOUR_USERNAME/nxxmdata.git cd nxxmdata # 3. 添加上游仓库 git remote add upstream https://github.com/original-org/nxxmdata.git ``` ### 安装依赖 ```bash # 后端依赖 cd backend npm install # 前端依赖 cd ../admin-system/frontend npm install cd ../../website/data-screen npm install # 微信小程序依赖(可选) cd ../../mini_program/farm-monitor-dashboard npm install ``` ### 配置环境 ```bash # 复制环境配置文件 cd backend cp .env.example .env cd ../admin-system/frontend cp .env.example .env # 编辑配置文件,设置数据库连接等信息 ``` ### 初始化数据库 ```bash cd backend # 创建数据库 mysql -u root -p -e "CREATE DATABASE nxxmdata CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # 运行迁移 npm run db:migrate # 填充种子数据 npm run db:seed ``` ### 启动开发服务器 ```bash # 启动后端服务 cd backend npm run dev # 启动前端服务(新终端) cd admin-system/frontend npm run dev # 启动官网大屏(新终端) cd website/data-screen npm run dev ``` ## 代码贡献流程 ### 1. 选择或创建 Issue - 查看现有的 [Issues](https://github.com/your-org/nxxmdata/issues) - 选择标记为 `good first issue` 的问题(适合新手) - 如果是新功能,请先创建 Issue 讨论 ### 2. 创建分支 ```bash # 更新主分支 git checkout main git pull upstream main # 创建功能分支 git checkout -b feature/your-feature-name # 或者修复分支 git checkout -b fix/bug-description ``` ### 3. 开发代码 - 编写代码 - 添加或更新测试 - 更新相关文档 - 确保代码符合项目规范 ### 4. 测试代码 ```bash # 运行单元测试 npm test # 运行集成测试 npm run test:integration # 运行端到端测试 npm run test:e2e # 检查代码风格 npm run lint # 修复代码风格问题 npm run lint:fix ``` ### 5. 提交代码 ```bash # 添加变更文件 git add . # 提交代码(遵循提交信息规范) git commit -m "feat: add user profile management feature" # 推送到您的 fork git push origin feature/your-feature-name ``` ### 6. 创建 Pull Request - 在 GitHub 上创建 Pull Request - 填写 PR 模板中的所有必要信息 - 等待代码审查 ## 代码规范 ### JavaScript/TypeScript 规范 #### 命名约定 ```javascript // 变量和函数使用 camelCase const userName = 'john_doe'; function getUserInfo() {} // 常量使用 UPPER_SNAKE_CASE const API_BASE_URL = 'http://localhost:5350'; // 类名使用 PascalCase class UserService {} // 文件名使用 kebab-case // user-service.js, farm-detail.vue ``` #### 代码风格 ```javascript // 使用 const/let,避免 var const config = {...}; let mutableData = []; // 使用箭头函数 const processData = (data) => { return data.map(item => item.value); }; // 使用模板字符串 const message = `Hello, ${userName}!`; // 使用对象解构 const { name, email } = user; // 使用扩展运算符 const newArray = [...oldArray, newItem]; ``` #### 错误处理 ```javascript // 使用 try-catch 处理异步错误 try { const result = await api.fetchData(); return result; } catch (error) { logger.error('Failed to fetch data:', error); throw new Error('Data fetch failed'); } // 返回 Promise 的函数应该处理所有可能的错误 async function createUser(userData) { try { const user = await User.create(userData); return { success: true, data: user }; } catch (error) { return { success: false, error: error.message }; } } ``` ### Vue.js 组件规范 ```vue ``` ### CSS/SCSS 规范 ```css /* 使用 BEM 命名法 */ .block {} .block__element {} .block--modifier {} /* 使用语义化的类名 */ .button--primary {} .form__input--error {} /* 避免深层嵌套 */ .component { .header {} /* 最多 3 层嵌套 */ } ``` ## 提交规范 我们使用 [Conventional Commits](https://www.conventionalcommits.org/) 规范: ### 提交消息格式 ``` (): [optional body] [optional footer(s)] ``` ### 类型 (type) - `feat`: 新增功能 - `fix`: 修复 bug - `docs`: 文档更新 - `style`: 代码格式调整(不影响代码逻辑) - `refactor`: 重构(既不是新增功能也不是修复 bug) - `perf`: 性能优化 - `test`: 添加或修改测试 - `chore`: 构建过程或辅助工具的变动 - `ci`: CI/CD 相关变更 ### 范围 (scope) - `api`: API 相关 - `ui`: 用户界面 - `auth`: 认证相关 - `db`: 数据库相关 - `config`: 配置相关 ### 示例 ```bash feat(api): add user profile update endpoint fix(ui): resolve map display issue on mobile devices docs(readme): update installation instructions style(frontend): format code with prettier refactor(auth): simplify token validation logic perf(db): optimize farm data query performance test(api): add unit tests for user controller chore(deps): update vue to version 3.4.0 ``` ### 破坏性变更 ```bash feat(api)!: change user authentication method BREAKING CHANGE: JWT token format has changed ``` ## Pull Request 指南 ### PR 标题 PR 标题应该简洁明了地描述变更内容,遵循提交信息规范: ``` feat(user): add profile management feature fix(map): resolve coordinate display issue docs: update API documentation ``` ### PR 描述模板 ```markdown ## 变更类型 - [ ] Bug 修复 - [ ] 新功能 - [ ] 文档更新 - [ ] 代码重构 - [ ] 性能优化 - [ ] 其他: ____________ ## 变更描述 ## 相关 Issue Closes #123 ## 测试 - [ ] 我已经测试了我的代码 - [ ] 我已经添加了测试用例 - [ ] 所有测试都通过了 ## 检查清单 - [ ] 我的代码遵循项目的代码规范 - [ ] 我已经进行了自我代码审查 - [ ] 我已经添加了必要的注释 - [ ] 我已经更新了相关文档 - [ ] 我的变更不会产生新的警告 - [ ] 我已经添加了适当的测试 - [ ] 新功能和修复都有对应的测试 ## 截图(如果适用) ## 额外说明 ``` ### 代码审查 - 所有 PR 都需要至少一个审查者的批准 - 解决所有审查意见后才能合并 - 保持代码变更的原子性和逻辑性 - 确保 CI/CD 检查通过 ## 问题报告 ### Bug 报告 使用 Bug 报告模板创建 Issue: ```markdown **问题描述** 简要描述遇到的问题。 **复现步骤** 1. 进入 '...' 2. 点击 '....' 3. 滚动到 '....' 4. 看到错误 **预期行为** 描述您期望发生的行为。 **实际行为** 描述实际发生的行为。 **截图** 如果适用,添加截图来帮助解释您的问题。 **环境信息:** - 操作系统: [例如 macOS 12.0] - 浏览器: [例如 Chrome 95.0] - Node.js 版本: [例如 18.12.0] - 项目版本: [例如 1.2.0] **附加信息** 添加任何其他有关问题的信息。 ``` ### 功能请求 ```markdown **功能描述** 简要描述您想要的功能。 **问题解决** 这个功能解决了什么问题? **解决方案** 描述您想要的解决方案。 **备选方案** 描述您考虑过的任何备选解决方案或功能。 **附加信息** 添加任何其他关于功能请求的信息或截图。 ``` ## 文档贡献 ### 文档类型 - **用户文档**: README, 安装指南, 使用教程 - **开发者文档**: API 文档, 开发指南, 架构文档 - **运维文档**: 部署指南, 故障排除, 监控指南 ### 文档写作规范 - 使用清晰、简洁的语言 - 提供具体的示例和代码片段 - 包含必要的截图和图表 - 保持文档的时效性 - 使用统一的格式和风格 ### 文档更新流程 1. 识别需要更新的文档 2. 创建文档分支 `docs/update-api-guide` 3. 更新文档内容 4. 提交并创建 PR 5. 经过审查后合并 ## 社区行为准则 ### 我们的承诺 为了营造一个开放和受欢迎的环境,我们作为贡献者和维护者承诺:无论年龄、体型、身体健全或残疾、民族、性别特征、性别认同和表达、经验水平、教育程度、社会经济地位、国籍、外貌、种族、宗教或性取向如何,参与我们项目和社区的每个人都享有无骚扰的体验。 ### 我们的标准 有助于创造积极环境的行为包括: - 使用受欢迎和包容性的语言 - 尊重不同的观点和经验 - 优雅地接受建设性批评 - 关注对社区最有利的事情 - 对其他社区成员表示同情 不可接受的行为包括: - 使用性化的语言或图像以及不受欢迎的性关注或求爱 - 捣乱、侮辱/贬损评论以及个人或政治攻击 - 公开或私下骚扰 - 未经明确许可发布他人的私人信息 - 在专业环境中可能被合理认为不适当的其他行为 ### 报告 如果您遇到不当行为,请联系项目团队: - 邮箱: conduct@nxxmdata.com - 我们将认真对待所有报告并进行调查 ## 获得帮助 ### 联系方式 - **技术问题**: 在 GitHub Issues 中提问 - **功能讨论**: 在 GitHub Discussions 中讨论 - **安全问题**: 发送邮件到 security@nxxmdata.com - **其他问题**: 发送邮件到 hello@nxxmdata.com ### 社区资源 - [GitHub 仓库](https://github.com/your-org/nxxmdata) - [项目文档](https://docs.nxxmdata.com) - [API 文档](https://api.nxxmdata.com/docs) ## 认可贡献者 我们感谢所有为项目做出贡献的人!贡献者将被列在: - [CONTRIBUTORS.md](CONTRIBUTORS.md) 文件中 - 项目的 README 中 - 每次发布的致谢中 ### 贡献类型 我们认可以下类型的贡献: - 💻 代码贡献 - 📖 文档贡献 - 🎨 设计贡献 - 🐛 Bug 报告 - 💡 想法和建议 - 🤔 答疑解惑 - 📢 推广项目 ## 许可证 通过向此项目贡献代码,您同意您的贡献将在与项目相同的许可证下被许可。 --- 再次感谢您对宁夏智慧养殖监管平台的关注和贡献!我们期待与您一起构建更好的系统。 *最后更新: 2025年1月*