# 贡献指南 感谢您对智慧农业生产管理系统项目的关注!我们欢迎所有形式的贡献,包括但不限于代码贡献、问题反馈、文档改进和功能建议。 ## 📋 目录 - [行为准则](#行为准则) - [如何贡献](#如何贡献) - [开发流程](#开发流程) - [代码规范](#代码规范) - [提交规范](#提交规范) - [问题报告](#问题报告) - [功能请求](#功能请求) - [代码审查](#代码审查) - [发布流程](#发布流程) ## 🤝 行为准则 ### 我们的承诺 为了营造一个开放和友好的环境,我们作为贡献者和维护者承诺让每个人都能参与我们的项目和社区。 ### 我们的标准 积极行为包括: - 使用友好和包容的语言 - 尊重不同的观点和经验 - 优雅地接受建设性批评 - 关注对社区最有利的事情 - 对其他社区成员表示同理心 不可接受的行为包括: - 使用性化的语言或图像 - 人身攻击或政治攻击 - 公开或私下骚扰 - 未经明确许可发布他人的私人信息 - 其他在专业环境中可能被认为不当的行为 ## 🚀 如何贡献 ### 1. 准备工作 ```bash # Fork 项目到您的GitHub账户 # 克隆您的fork git clone https://github.com/your-username/agriculture-management.git # 添加上游仓库 git remote add upstream https://github.com/original-owner/agriculture-management.git # 安装依赖 cd agriculture-management npm install # 启动开发环境 npm run dev ``` ### 2. 选择贡献方式 - 🐛 **报告Bug**: 发现问题并创建详细的问题报告 - 💡 **功能建议**: 提出新功能或改进建议 - 📝 **文档改进**: 完善项目文档 - 💻 **代码贡献**: 修复bug或实现新功能 ## 🔄 开发流程 ### 1. 创建分支 ```bash # 确保master分支是最新的 git checkout master git pull upstream master # 创建功能分支 git checkout -b feature/your-feature-name # 或 git checkout -b fix/your-bug-fix ``` ### 2. 开发过程 ```bash # 启用开发工具(可选) npm run scripts:enable # 进行开发 # ... # 运行测试 npm run test # 代码检查 npm run lint # 类型检查 npm run type-check # 格式化代码 npm run format ``` ### 3. 提交更改 ```bash # 添加更改 git add . # 提交(遵循提交规范) git commit -m "feat(component): add new machinery status component" # 推送到您的fork git push origin feature/your-feature-name ``` ### 4. 创建Pull Request 1. 访问GitHub上的fork页面 2. 点击"New Pull Request" 3. 选择正确的分支 4. 填写PR模板 5. 提交Pull Request ## 📏 代码规范 ### TypeScript规范 ```typescript // ✅ 好的示例 interface MachineryData { id: string name: string status: MachineryStatus lastMaintenance?: Date } const getMachineryStatus = async (id: string): Promise => { const response = await fetch(`/api/machinery/${id}`) return response.json() } // ❌ 避免的写法 const getData = (id) => { return fetch('/api/machinery/' + id).then(r => r.json()) } ``` ### React组件规范 ```typescript // ✅ 函数式组件 + TypeScript interface MachineryCardProps { machinery: MachineryData onEdit?: (machinery: MachineryData) => void className?: string } export const MachineryCard: React.FC = ({ machinery, onEdit, className }) => { const handleEdit = useCallback(() => { onEdit?.(machinery) }, [machinery, onEdit]) return (
{/* 组件内容 */}
) } ``` ### 样式规范 ```typescript // ✅ 使用Tailwind CSS + cn工具 import { cn } from '@/lib/utils' const Button = ({ variant = 'primary', className, ...props }) => (