# 开发者参考指南 ## 📖 快速开始 欢迎使用智慧农业生产管理系统开发者参考指南!本指南将帮助您快速了解项目的页面结构、开发规范和最佳实践。 ### 🚀 开发前准备 1. **环境要求** - Node.js 16+ - npm 或 yarn - 现代浏览器 (Chrome, Firefox, Safari, Edge) 2. **项目启动** ```bash # 安装依赖 npm install # 启动开发服务器 npm run dev ``` 3. **开发工具** - VS Code (推荐) - React Developer Tools - Tailwind CSS IntelliSense ## 📁 项目结构概览 ``` smart-crop-x/ ├── 📂 docs/ # 项目文档 │ ├── 📄 Pages目录结构与开发规范.md # 详细开发规范 │ ├── 📄 AgriculturalMachinery模块页面结构示例.md │ ├── 📄 LandInformation模块页面结构示例.md │ ├── 📄 FarmingOperation模块页面结构示例.md │ ├── 📄 其他业务模块页面结构示例.md │ ├── 📄 Pages目录结构设计总结.md │ └── 📄 开发者参考指南.md # 本文档 ├── 📂 src/ │ ├── 📂 components/ # 全局组件 │ ├── 📂 pages/ # 🎯 页面组件(重点开发区域) │ ├── 📂 types/ # 类型定义 │ ├── 📂 utils/ # 工具函数 │ ├── 📂 lib/ # 库文件 │ ├── 📂 App.tsx │ └── 📂 main.tsx ├── 📂 public/ ├── 📄 package.json └── 📄 README.md ``` ## 🎯 开发工作流 ### Step 1: 查阅模块文档 开始开发前,请先查阅对应模块的页面结构文档: | 模块 | 文档链接 | 主要功能 | |------|----------|----------| | 智能农机管理 | [AgriculturalMachinery模块页面结构示例.md](./AgriculturalMachinery模块页面结构示例.md) | 农机档案、驾驶员管理、设备监控等 | | 地块信息管理 | [LandInformation模块页面结构示例.md](./LandInformation模块页面结构示例.md) | 地块档案、GIS地图、空间分析等 | | 农事管理 | [FarmingOperation模块页面结构示例.md](./FarmingOperation模块页面结构示例.md) | 农事计划、任务管理、执行监控等 | | 农资资产 | [其他业务模块页面结构示例.md](./其他业务模块页面结构示例.md#agriculturalasset-农资资产-模块) | 库存管理、采购、领用等 | | AI模型 | [其他业务模块页面结构示例.md](./其他业务模块页面结构示例.md#aicro pmodel-ai模型-模块) | 数据感知、模型集成、决策支持等 | | 水肥控制 | [其他业务模块页面结构示例.md](./其他业务模块页面结构示例.md#waterfertilizercontr ol-水肥控制-模块) | 智能灌溉、施肥配方等 | | 中心配置 | [其他业务模块页面结构示例.md](./其他业务模块页面结构示例.md#centralconfig-中心配置-模块) | 租户管理、用户管理、系统监控等 | ### Step 2: 创建页面目录结构 按照规范创建标准的页面目录结构: ```bash # 示例:创建农机档案录入页面 mkdir -p src/pages/AgriculturalMachinery/Archive/MachineryEntry mkdir -p src/pages/AgriculturalMachinery/Archive/MachineryEntry/hooks mkdir -p src/pages/AgriculturalMachinery/Archive/MachineryEntry/utils mkdir -p src/pages/AgriculturalMachinery/Archive/MachineryEntry/components ``` ### Step 3: 创建基础文件 创建标准的基础文件: ```bash # 主组件 touch src/pages/AgriculturalMachinery/Archive/MachineryEntry/index.jsx # 样式文件 touch src/pages/AgriculturalMachinery/Archive/MachineryEntry/index.css # 类型定义 touch src/pages/AgriculturalMachinery/Archive/MachineryEntry/index.types.ts # 常量定义 touch src/pages/AgriculturalMachinery/Archive/MachineryEntry/constants.js ``` ### Step 4: 参考模板代码 从对应的模块文档中复制模板代码,并根据实际需求进行修改。 ## 📋 快速参考速查表 ### 1. 标准页面文件结构 ``` PageName/ ├── 📄 index.jsx # 主组件 ├── 📄 index.css # 样式文件 ├── 📄 index.types.ts # 类型定义 ├── 📂 hooks/ # 页面专用Hooks │ ├── 📄 usePageData.tsx # 数据管理 │ ├── 📄 usePageActions.tsx # 操作处理 │ └── 📄 use[Feature].tsx # 特定功能Hook ├── 📂 utils/ # 工具函数 │ ├── 📄 pageHelpers.tsx # 页面辅助函数 │ ├── 📄 validators.tsx # 表单验证 │ └── 📄 formatters.tsx # 数据格式化 ├── 📄 constants.tsx # 页面常量 └── 📂 components/ # 子组件目录 └── 📂 [ComponentName]/ # 子组件 ├── 📄 index.jsx ├── 📄 index.css └── 📄 types.ts ``` ### 2. 常用组件模板 #### 主组件模板 ```jsx import { useState, useEffect, useCallback } from 'react'; import { ComponentA } from './components/ComponentA'; import { ComponentB } from './components/ComponentB'; import { usePageData } from './hooks/usePageData'; import { usePageActions } from './hooks/usePageActions'; import './index.css'; export function PageName() { const { data, loading, error, filters, pagination, handleFilterChange, handlePageChange, refreshData } = usePageData(); const { handleCreate, handleEdit, handleDelete, handleExport } = usePageActions(refreshData); if (loading) return
加载中...
; if (error) return
错误: {error}
; return (

页面标题

); } ``` #### Hook模板 (usePageData.js) ```javascript import { useState, useEffect, useCallback } from 'react'; import { getApiData } from '@/apis/module'; import { showMessage } from '@/utils/message'; export function usePageData() { const [data, setData] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [filters, setFilters] = useState({}); const [pagination, setPagination] = useState({ current: 1, pageSize: 10, total: 0 }); // 获取数据 const fetchData = useCallback(async () => { setLoading(true); setError(null); try { const params = { ...filters, page: pagination.current, pageSize: pagination.pageSize }; const response = await getApiData(params); setData(response.data.list); setPagination(prev => ({ ...prev, total: response.data.total })); } catch (err) { setError(err.message); showMessage('error', '获取数据失败'); } finally { setLoading(false); } }, [filters, pagination.current, pagination.pageSize]); // 初始加载 useEffect(() => { fetchData(); }, [fetchData]); // 处理筛选变化 const handleFilterChange = useCallback((newFilters) => { setFilters(newFilters); setPagination(prev => ({ ...prev, current: 1 })); }, []); // 处理分页变化 const handlePageChange = useCallback((page) => { setPagination(prev => ({ ...prev, current: page })); }, []); return { data, loading, error, filters, pagination, handleFilterChange, handlePageChange, refreshData: fetchData }; } ``` #### 类型定义模板 ```typescript export interface RecordType { id: string; name: string; status: StatusType; createdAt: string; updatedAt: string; // ... 其他字段 } export type StatusType = 'active' | 'inactive' | 'pending'; export interface Filters { name?: string; status?: StatusType; dateRange?: [string, string]; } export interface PaginationState { current: number; pageSize: number; total: number; } export interface ComponentProps { data: RecordType[]; loading: boolean; error: string | null; filters: Filters; pagination: PaginationState; onPageChange: (page: number) => void; onEdit: (record: RecordType) => void; onDelete: (id: string) => void; } ``` ### 3. 常用子组件类型 | 组件类型 | 功能描述 | 使用场景 | |----------|----------|----------| | Form | 表单组件 | 数据录入、编辑 | | List | 列表组件 | 数据展示 | | Table | 表格组件 | 结构化数据展示 | | Filter | 筛选组件 | 数据过滤 | | Search | 搜索组件 | 关键词搜索 | | Modal | 弹窗组件 | 详情展示、编辑 | | Card | 卡片组件 | 信息概览 | | Chart | 图表组件 | 数据可视化 | | Map | 地图组件 | 位置信息展示 | | Timeline | 时间线组件 | 流程展示 | | Status | 状态组件 | 状态标识 | | Actions | 操作组件 | 按钮操作组 | ### 4. 常用Hook模式 | Hook名称 | 功能描述 | 使用示例 | |----------|----------|----------| | usePageData | 页面数据管理 | 获取列表数据、分页、筛选 | | usePageActions | 页面操作处理 | 增删改查、导出 | | useForm | 表单状态管理 | 表单数据、验证、提交 | | useModal | 弹窗状态管理 | 显示/隐藏弹窗 | | useTable | 表格状态管理 | 选择、排序、筛选 | | useChart | 图表数据管理 | 数据处理、配置 | | useMap | 地图状态管理 | 标记、图层、交互 | | useWebSocket | WebSocket连接 | 实时数据更新 | ## 🛠️ 开发工具推荐 ### VS Code 插件 ```json { "recommendations": [ "bradlc.vscode-tailwindcss", "esbenp.prettier-vscode", "ms-vscode.vscode-typescript-next", "formulahendry.auto-rename-tag", "christian-kohler.path-intellisense", "ms-vscode.vscode-json", "yzhang.markdown-all-in-one" ] } ``` ### 代码片段 创建 `.vscode/snippets.json`: ```json { "React Component Template": { "prefix": "rfc", "body": [ "import { useState, useEffect, useCallback } from 'react';", "import { usePageData } from './hooks/usePageData';", "import { usePageActions } from './hooks/usePageActions';", "import './index.css';", "", "export function ${1:ComponentName}() {", " const {", " data,", " loading,", " error,", " filters,", " pagination,", " handleFilterChange,", " handlePageChange,", " refreshData", " } = usePageData();", "", " const {", " handleCreate,", " handleEdit,", " handleDelete", " } = usePageActions(refreshData);", "", " return (", "
", " ${3:// 组件内容}", "
", " );", "}" ], "description": "React Component with hooks template" } } ``` ## 📝 开发检查清单 ### ✅ 开发前检查 - [ ] 已查阅对应模块的页面结构文档 - [ ] 已了解功能需求和业务逻辑 - [ ] 已确认UI设计和交互规范 - [ ] 已准备好开发环境和工具 ### ✅ 开发中检查 - [ ] 按照标准目录结构创建文件 - [ ] 使用TypeScript定义完整类型 - [ ] 遵循代码规范和命名约定 - [ ] 实现错误处理和加载状态 - [ ] 添加必要的注释和文档 - [ ] 编写单元测试 ### ✅ 开发后检查 - [ ] 功能测试通过 - [ ] 样式在不同浏览器中正常 - [ ] 性能优化达标 - [ ] 无console错误信息 - [ ] 代码审查通过 - [ ] 文档更新完整 ## 🔗 常用链接 ### 📚 文档链接 - [Pages目录结构与开发规范](./Pages目录结构与开发规范.md) - 详细开发规范 - [AgriculturalMachinery模块示例](./AgriculturalMachinery模块页面结构示例.md) - 农机管理模块 - [LandInformation模块示例](./LandInformation模块页面结构示例.md) - 地块信息模块 - [FarmingOperation模块示例](./FarmingOperation模块页面结构示例.md) - 农事管理模块 - [其他业务模块示例](./其他业务模块页面结构示例.md) - 其他模块 - [设计总结](./Pages目录结构设计总结.md) - 完整设计总结 ### 🛠️ 外部资源 - [React官方文档](https://react.dev/) - [TypeScript官方文档](https://www.typescriptlang.org/) - [Tailwind CSS官方文档](https://tailwindcss.com/) - [shadcn/ui组件库](https://ui.shadcn.com/) ## ❓ 常见问题 ### Q: 如何开始开发一个新页面? A: 1. 查阅对应模块文档 → 2. 创建标准目录结构 → 3. 复制模板代码 → 4. 根据需求修改 ### Q: 组件拆分的原则是什么? A: 代码超过100行、承担多个职责、需要复用、逻辑复杂时考虑拆分 ### Q: 如何处理API请求? A: 使用自定义Hook封装API请求逻辑,参考usePageData模板 ### Q: 类型定义应该放在哪里? A: 页面级别类型放在index.types.ts,组件级别类型放在组件目录的types.ts ### Q: 如何进行样式开发? A: 使用Tailwind CSS,页面级样式放在index.css,组件级样式放在组件目录的index.css ### Q: 遇到问题怎么办? A: 1. 查阅相关文档 → 2. 查看现有代码示例 → 3. 咨询团队负责人 → 4. 记录解决方案 --- 💡 **提示**: 建议将本指南添加到浏览器书签,开发时随时查阅!