{alert.message}
-设备类型饼图
-传感器: {mockData.devices.types.sensor} | 摄像头: {mockData.devices.types.camera} | 控制器: {mockData.devices.types.controller}
-环境数据折线图
-显示最近24小时温湿度变化趋势
-设备状态表格
-在线: {mockData.devices.online} | 离线: {mockData.devices.offline}
-diff --git a/README.md b/README.md new file mode 100644 index 0000000..b5ced52 --- /dev/null +++ b/README.md @@ -0,0 +1,121 @@ +# 宁夏智慧养殖监管平台 + +## 项目概述 + +宁夏智慧养殖监管平台是一个现代化的农场管理系统,提供实时监控、数据分析和多终端访问功能。 + +## 目录结构 + +``` +nxxmdata/ +├── backend/ # 后端服务 (Node.js + Express + Sequelize) +│ ├── config/ # 配置文件 +│ ├── controllers/ # 业务逻辑控制器 +│ ├── models/ # 数据模型 +│ ├── routes/ # API路由 +│ ├── middleware/ # 中间件 +│ ├── utils/ # 工具类 +│ ├── migrations/ # 数据库迁移 +│ ├── seeds/ # 种子数据 +│ └── server.js # 服务器入口 +├── admin-system/ # 管理后台 (Vue.js 3.x) +│ └── frontend/ # 前端项目 +├── website/ # 官网 (Vue.js 3.x) +│ └── data-screen/ # 数据大屏展示 +├── mini_program/ # 微信小程序矩阵 +│ └── farm-monitor-dashboard/ # 监控仪表盘小程序 +├── scripts/ # 执行脚本目录 +│ ├── init-db.js # 数据库初始化 +│ ├── migration-manager.js # 迁移管理 +│ ├── seed-manager.js # 种子数据管理 +│ ├── test-connection.js # 连接测试 +│ └── test-map-api.js # 地图API测试 +├── docs/ # 文档目录 +│ ├── baidu-map-license.md # 百度地图许可 +│ └── performance-monitoring.md # 性能监控文档 +├── test/ # 测试文件目录 +│ └── performance-monitor-test.js # 性能监控测试 +├── examples/ # 示例代码 +└── 配置文件 + ├── arch.md # 架构文档 + ├── design.md # 详细设计 + ├── dev-plan.md # 开发计划 + ├── task.md # 任务列表 + ├── schema.sql # 数据库架构 + └── create_tables.sql # 建表脚本 +``` + +## 技术栈 + +### 后端技术栈 +- **运行环境**: Node.js 18.0+ +- **Web框架**: Express.js 4.18+ +- **ORM框架**: Sequelize 6.30+ +- **数据库**: MySQL (mysql2 3.0+) +- **认证**: JWT (jsonwebtoken 9.0+) +- **密码加密**: bcrypt 5.1+ +- **API文档**: Swagger (swagger-jsdoc + swagger-ui-express) +- **日志管理**: Winston 3.17+ +- **开发工具**: nodemon 3.0+ +- **跨域处理**: CORS 2.8+ +- **数据验证**: express-validator 7.2+ +- **环境变量**: dotenv 16.0+ +- **HTTP客户端**: Axios 1.4+ +- **服务器端口**: 5350 + +### 前端技术栈 +- **管理后台**: Vue.js 3.4+ + Ant Design Vue 4.0+ +- **官网**: Vue.js 3.4+ + ECharts 5.4+ +- **微信小程序**: React + TypeScript + Tailwind CSS +- **构建工具**: Vite 5.0+ +- **状态管理**: Pinia 2.0+ +- **路由管理**: Vue Router 4.0+ + +## 核心功能 + +- ✅ 实时设备监控 +- ✅ 动物健康管理 +- ✅ 地图可视化展示 +- ✅ 数据分析报表 +- ✅ 多角色权限系统 +- ✅ 订单管理功能 +- ✅ 预警管理系统 +- ✅ 性能监控分析 + +## 快速开始 + +### 后端启动 +```bash +cd backend +npm install +npm run dev +``` + +### 管理后台启动 +```bash +cd admin-system/frontend +npm install +npm run dev +``` + +### 官网启动 +```bash +cd website/data-screen +npm install +npm run dev +``` + +## 开发规范 + +1. 遵循模块化开发原则 +2. 代码注释规范清晰 +3. API接口文档完整 +4. 数据库迁移脚本可重复执行 +5. 测试用例覆盖核心功能 + +## 部署说明 + +生产环境建议使用Docker容器化部署,具体部署流程参考各模块的部署文档。 + +--- +*最后更新: 2025年8月* \ No newline at end of file diff --git a/frontend/.env.example b/admin-system/frontend/.env.example similarity index 100% rename from frontend/.env.example rename to admin-system/frontend/.env.example diff --git a/frontend/components/PerformanceMonitor.vue b/admin-system/frontend/components/PerformanceMonitor.vue similarity index 100% rename from frontend/components/PerformanceMonitor.vue rename to admin-system/frontend/components/PerformanceMonitor.vue diff --git a/frontend/index.html b/admin-system/frontend/index.html similarity index 100% rename from frontend/index.html rename to admin-system/frontend/index.html diff --git a/frontend/package-lock.json b/admin-system/frontend/package-lock.json similarity index 100% rename from frontend/package-lock.json rename to admin-system/frontend/package-lock.json diff --git a/frontend/package.json b/admin-system/frontend/package.json similarity index 100% rename from frontend/package.json rename to admin-system/frontend/package.json diff --git a/frontend/public/debug-coordinate-input.html b/admin-system/frontend/public/debug-coordinate-input.html similarity index 100% rename from frontend/public/debug-coordinate-input.html rename to admin-system/frontend/public/debug-coordinate-input.html diff --git a/frontend/public/debug-devices.html b/admin-system/frontend/public/debug-devices.html similarity index 100% rename from frontend/public/debug-devices.html rename to admin-system/frontend/public/debug-devices.html diff --git a/frontend/public/debug-users.html b/admin-system/frontend/public/debug-users.html similarity index 100% rename from frontend/public/debug-users.html rename to admin-system/frontend/public/debug-users.html diff --git a/frontend/public/map-test.html b/admin-system/frontend/public/map-test.html similarity index 100% rename from frontend/public/map-test.html rename to admin-system/frontend/public/map-test.html diff --git a/frontend/public/test-auto-login.html b/admin-system/frontend/public/test-auto-login.html similarity index 100% rename from frontend/public/test-auto-login.html rename to admin-system/frontend/public/test-auto-login.html diff --git a/frontend/public/test-users-display.html b/admin-system/frontend/public/test-users-display.html similarity index 100% rename from frontend/public/test-users-display.html rename to admin-system/frontend/public/test-users-display.html diff --git a/frontend/src/App.vue b/admin-system/frontend/src/App.vue similarity index 100% rename from frontend/src/App.vue rename to admin-system/frontend/src/App.vue diff --git a/frontend/src/components/AlertStats.vue b/admin-system/frontend/src/components/AlertStats.vue similarity index 100% rename from frontend/src/components/AlertStats.vue rename to admin-system/frontend/src/components/AlertStats.vue diff --git a/frontend/src/components/AnimalStats.vue b/admin-system/frontend/src/components/AnimalStats.vue similarity index 100% rename from frontend/src/components/AnimalStats.vue rename to admin-system/frontend/src/components/AnimalStats.vue diff --git a/frontend/src/components/BaiduMap.vue b/admin-system/frontend/src/components/BaiduMap.vue similarity index 100% rename from frontend/src/components/BaiduMap.vue rename to admin-system/frontend/src/components/BaiduMap.vue diff --git a/frontend/src/components/ChartPerformanceMonitor.vue b/admin-system/frontend/src/components/ChartPerformanceMonitor.vue similarity index 100% rename from frontend/src/components/ChartPerformanceMonitor.vue rename to admin-system/frontend/src/components/ChartPerformanceMonitor.vue diff --git a/frontend/src/components/Dashboard.vue b/admin-system/frontend/src/components/Dashboard.vue similarity index 100% rename from frontend/src/components/Dashboard.vue rename to admin-system/frontend/src/components/Dashboard.vue diff --git a/frontend/src/components/DeviceStats.vue b/admin-system/frontend/src/components/DeviceStats.vue similarity index 100% rename from frontend/src/components/DeviceStats.vue rename to admin-system/frontend/src/components/DeviceStats.vue diff --git a/frontend/src/components/EChart.vue b/admin-system/frontend/src/components/EChart.vue similarity index 100% rename from frontend/src/components/EChart.vue rename to admin-system/frontend/src/components/EChart.vue diff --git a/frontend/src/components/FarmDetail.vue b/admin-system/frontend/src/components/FarmDetail.vue similarity index 100% rename from frontend/src/components/FarmDetail.vue rename to admin-system/frontend/src/components/FarmDetail.vue diff --git a/frontend/src/components/Menu.vue b/admin-system/frontend/src/components/Menu.vue similarity index 100% rename from frontend/src/components/Menu.vue rename to admin-system/frontend/src/components/Menu.vue diff --git a/frontend/src/components/MonitorChart.vue b/admin-system/frontend/src/components/MonitorChart.vue similarity index 100% rename from frontend/src/components/MonitorChart.vue rename to admin-system/frontend/src/components/MonitorChart.vue diff --git a/frontend/src/components/SimpleDeviceTest.vue b/admin-system/frontend/src/components/SimpleDeviceTest.vue similarity index 100% rename from frontend/src/components/SimpleDeviceTest.vue rename to admin-system/frontend/src/components/SimpleDeviceTest.vue diff --git a/frontend/src/components/VirtualScrollChart.vue b/admin-system/frontend/src/components/VirtualScrollChart.vue similarity index 100% rename from frontend/src/components/VirtualScrollChart.vue rename to admin-system/frontend/src/components/VirtualScrollChart.vue diff --git a/frontend/src/config/env.js b/admin-system/frontend/src/config/env.js similarity index 100% rename from frontend/src/config/env.js rename to admin-system/frontend/src/config/env.js diff --git a/frontend/src/main.js b/admin-system/frontend/src/main.js similarity index 100% rename from frontend/src/main.js rename to admin-system/frontend/src/main.js diff --git a/frontend/src/router/history.js b/admin-system/frontend/src/router/history.js similarity index 100% rename from frontend/src/router/history.js rename to admin-system/frontend/src/router/history.js diff --git a/frontend/src/router/index.js b/admin-system/frontend/src/router/index.js similarity index 100% rename from frontend/src/router/index.js rename to admin-system/frontend/src/router/index.js diff --git a/frontend/src/router/routes.js b/admin-system/frontend/src/router/routes.js similarity index 100% rename from frontend/src/router/routes.js rename to admin-system/frontend/src/router/routes.js diff --git a/frontend/src/stores/data.js b/admin-system/frontend/src/stores/data.js similarity index 100% rename from frontend/src/stores/data.js rename to admin-system/frontend/src/stores/data.js diff --git a/frontend/src/stores/index.js b/admin-system/frontend/src/stores/index.js similarity index 100% rename from frontend/src/stores/index.js rename to admin-system/frontend/src/stores/index.js diff --git a/frontend/src/stores/settings.js b/admin-system/frontend/src/stores/settings.js similarity index 100% rename from frontend/src/stores/settings.js rename to admin-system/frontend/src/stores/settings.js diff --git a/frontend/src/stores/user.js b/admin-system/frontend/src/stores/user.js similarity index 100% rename from frontend/src/stores/user.js rename to admin-system/frontend/src/stores/user.js diff --git a/frontend/src/styles/global.css b/admin-system/frontend/src/styles/global.css similarity index 100% rename from frontend/src/styles/global.css rename to admin-system/frontend/src/styles/global.css diff --git a/frontend/src/styles/theme.js b/admin-system/frontend/src/styles/theme.js similarity index 100% rename from frontend/src/styles/theme.js rename to admin-system/frontend/src/styles/theme.js diff --git a/frontend/src/test-api-direct.js b/admin-system/frontend/src/test-api-direct.js similarity index 100% rename from frontend/src/test-api-direct.js rename to admin-system/frontend/src/test-api-direct.js diff --git a/frontend/src/test-data-store.js b/admin-system/frontend/src/test-data-store.js similarity index 100% rename from frontend/src/test-data-store.js rename to admin-system/frontend/src/test-data-store.js diff --git a/frontend/src/utils/api.js b/admin-system/frontend/src/utils/api.js similarity index 100% rename from frontend/src/utils/api.js rename to admin-system/frontend/src/utils/api.js diff --git a/frontend/src/utils/chartService.js b/admin-system/frontend/src/utils/chartService.js similarity index 100% rename from frontend/src/utils/chartService.js rename to admin-system/frontend/src/utils/chartService.js diff --git a/frontend/src/utils/dataService.js b/admin-system/frontend/src/utils/dataService.js similarity index 100% rename from frontend/src/utils/dataService.js rename to admin-system/frontend/src/utils/dataService.js diff --git a/frontend/src/utils/mapService.jsx b/admin-system/frontend/src/utils/mapService.jsx similarity index 100% rename from frontend/src/utils/mapService.jsx rename to admin-system/frontend/src/utils/mapService.jsx diff --git a/frontend/src/views/Alerts.vue b/admin-system/frontend/src/views/Alerts.vue similarity index 100% rename from frontend/src/views/Alerts.vue rename to admin-system/frontend/src/views/Alerts.vue diff --git a/frontend/src/views/Analytics.vue b/admin-system/frontend/src/views/Analytics.vue similarity index 100% rename from frontend/src/views/Analytics.vue rename to admin-system/frontend/src/views/Analytics.vue diff --git a/frontend/src/views/Animals.vue b/admin-system/frontend/src/views/Animals.vue similarity index 100% rename from frontend/src/views/Animals.vue rename to admin-system/frontend/src/views/Animals.vue diff --git a/frontend/src/views/Dashboard.vue b/admin-system/frontend/src/views/Dashboard.vue similarity index 100% rename from frontend/src/views/Dashboard.vue rename to admin-system/frontend/src/views/Dashboard.vue diff --git a/frontend/src/views/Devices.vue b/admin-system/frontend/src/views/Devices.vue similarity index 100% rename from frontend/src/views/Devices.vue rename to admin-system/frontend/src/views/Devices.vue diff --git a/frontend/src/views/Farms.vue b/admin-system/frontend/src/views/Farms.vue similarity index 100% rename from frontend/src/views/Farms.vue rename to admin-system/frontend/src/views/Farms.vue diff --git a/frontend/src/views/Home.vue b/admin-system/frontend/src/views/Home.vue similarity index 100% rename from frontend/src/views/Home.vue rename to admin-system/frontend/src/views/Home.vue diff --git a/frontend/src/views/Login.vue b/admin-system/frontend/src/views/Login.vue similarity index 100% rename from frontend/src/views/Login.vue rename to admin-system/frontend/src/views/Login.vue diff --git a/frontend/src/views/MapView.vue b/admin-system/frontend/src/views/MapView.vue similarity index 100% rename from frontend/src/views/MapView.vue rename to admin-system/frontend/src/views/MapView.vue diff --git a/frontend/src/views/MapZoomDemo.vue b/admin-system/frontend/src/views/MapZoomDemo.vue similarity index 100% rename from frontend/src/views/MapZoomDemo.vue rename to admin-system/frontend/src/views/MapZoomDemo.vue diff --git a/frontend/src/views/Monitor.vue b/admin-system/frontend/src/views/Monitor.vue similarity index 100% rename from frontend/src/views/Monitor.vue rename to admin-system/frontend/src/views/Monitor.vue diff --git a/frontend/src/views/NotFound.vue b/admin-system/frontend/src/views/NotFound.vue similarity index 100% rename from frontend/src/views/NotFound.vue rename to admin-system/frontend/src/views/NotFound.vue diff --git a/frontend/src/views/Orders.vue b/admin-system/frontend/src/views/Orders.vue similarity index 100% rename from frontend/src/views/Orders.vue rename to admin-system/frontend/src/views/Orders.vue diff --git a/frontend/src/views/Products.vue b/admin-system/frontend/src/views/Products.vue similarity index 100% rename from frontend/src/views/Products.vue rename to admin-system/frontend/src/views/Products.vue diff --git a/frontend/src/views/TableStats.vue b/admin-system/frontend/src/views/TableStats.vue similarity index 100% rename from frontend/src/views/TableStats.vue rename to admin-system/frontend/src/views/TableStats.vue diff --git a/frontend/src/views/TestAnalytics.vue b/admin-system/frontend/src/views/TestAnalytics.vue similarity index 100% rename from frontend/src/views/TestAnalytics.vue rename to admin-system/frontend/src/views/TestAnalytics.vue diff --git a/frontend/src/views/Users.vue b/admin-system/frontend/src/views/Users.vue similarity index 100% rename from frontend/src/views/Users.vue rename to admin-system/frontend/src/views/Users.vue diff --git a/frontend/test-devices-frontend.js b/admin-system/frontend/test-devices-frontend.js similarity index 100% rename from frontend/test-devices-frontend.js rename to admin-system/frontend/test-devices-frontend.js diff --git a/frontend/test-map.html b/admin-system/frontend/test-map.html similarity index 100% rename from frontend/test-map.html rename to admin-system/frontend/test-map.html diff --git a/frontend/test-users-frontend.js b/admin-system/frontend/test-users-frontend.js similarity index 100% rename from frontend/test-users-frontend.js rename to admin-system/frontend/test-users-frontend.js diff --git a/frontend/vite.config.js b/admin-system/frontend/vite.config.js similarity index 100% rename from frontend/vite.config.js rename to admin-system/frontend/vite.config.js diff --git a/arch.md b/arch.md index 86cdc13..9cc2267 100644 --- a/arch.md +++ b/arch.md @@ -57,12 +57,6 @@ - `middleware/`: 中间件 - `auth.js`: 认证中间件 - `performance-middleware.js`: 性能监控中间件 -- `scripts/`: 数据库管理脚本 - - `init-db.js`: 数据库初始化 - - `migration-manager.js`: 迁移管理 - - `seed-manager.js`: 种子数据管理 - - `test-connection.js`: 连接测试 - - `test-map-api.js`: 地图API测试 - `utils/`: 工具类 - `logger.js`: 日志工具 - `performance-monitor.js`: 性能监控 @@ -72,59 +66,77 @@ - `seeds/`: 种子数据文件 - `logs/`: 日志文件目录 -### 2.2 前端 (`frontend/`) -- `src/components/`: 可复用的UI组件 - - `BaiduMap.vue`: 百度地图组件 - - `EChart.vue`: 图表组件 - - `Menu.vue`: 导航菜单 - - `Dashboard.vue`: 仪表盘组件 - - `AlertStats.vue`: 告警统计组件 - - `AnimalStats.vue`: 动物统计组件 - - `DeviceStats.vue`: 设备统计组件 - - `FarmDetail.vue`: 农场详情组件 - - `MonitorChart.vue`: 监控图表组件 - - `ChartPerformanceMonitor.vue`: 性能监控图表 - - `VirtualScrollChart.vue`: 虚拟滚动图表 -- `src/views/`: 页面级组件 - - `Home.vue`: 首页 - - `Dashboard.vue`: 系统概览 - - `MapView.vue`: 地图监控 - - `Analytics.vue`: 数据分析 - - `Monitor.vue`: 实时监控 - - `Login.vue`: 登录页面 - - `Users.vue`: 用户管理 - - `Products.vue`: 产品管理 - - `Orders.vue`: 订单管理 - - `Devices.vue`: 设备管理 - - `Animals.vue`: 动物管理 - - `Alerts.vue`: 预警管理 - - `TestAnalytics.vue`: 测试分析页面 - - `MapZoomDemo.vue`: 地图缩放演示 - - `NotFound.vue`: 404页面 -- `src/stores/`: 状态管理(Pinia) - - `user.js`: 用户状态管理 - - `data.js`: 数据状态管理 - - `settings.js`: 设置状态管理 - - `index.js`: 状态管理入口 -- `src/router/`: 路由配置 - - `index.js`: 路由实例和守卫 - - `routes.js`: 路由定义 -- `src/utils/`: 工具类(API调用、图表服务等) - - `api.js`: API请求封装 -- `src/config/`: 配置文件 -- `public/`: 静态资源和测试页面 - - `debug-devices.html`: 设备调试页面 - - `debug-users.html`: 用户调试页面 - - `map-test.html`: 地图测试页面 - - `test-auto-login.html`: 自动登录测试 - - `test-users-display.html`: 用户显示测试 +### 2.2 管理后台 (`admin-system/`) +- `frontend/`: 管理后台前端项目 + - `src/components/`: 可复用的UI组件 + - `BaiduMap.vue`: 百度地图组件 + - `EChart.vue`: 图表组件 + - `Menu.vue`: 导航菜单 + - `Dashboard.vue`: 仪表盘组件 + - `AlertStats.vue`: 告警统计组件 + - `AnimalStats.vue`: 动物统计组件 + - `DeviceStats.vue`: 设备统计组件 + - `FarmDetail.vue`: 农场详情组件 + - `MonitorChart.vue`: 监控图表组件 + - `ChartPerformanceMonitor.vue`: 性能监控图表 + - `VirtualScrollChart.vue`: 虚拟滚动图表 + - `src/views/`: 页面级组件 + - `Home.vue`: 首页 + - `Dashboard.vue`: 系统概览 + - `MapView.vue`: 地图监控 + - `Analytics.vue`: 数据分析 + - `Monitor.vue`: 实时监控 + - `Login.vue`: 登录页面 + - `Users.vue`: 用户管理 + - `Products.vue`: 产品管理 + - `Orders.vue`: 订单管理 + - `Devices.vue`: 设备管理 + - `Animals.vue`: 动物管理 + - `Alerts.vue`: 预警管理 + - `TestAnalytics.vue`: 测试分析页面 + - `MapZoomDemo.vue`: 地图缩放演示 + - `NotFound.vue`: 404页面 + - `src/stores/`: 状态管理(Pinia) + - `user.js`: 用户状态管理 + - `data.js`: 数据状态管理 + - `settings.js`: 设置状态管理 + - `index.js`: 状态管理入口 + - `src/router/`: 路由配置 + - `index.js`: 路由实例和守卫 + - `routes.js`: 路由定义 + - `src/utils/`: 工具类(API调用、图表服务等) + - `api.js`: API请求封装 + - `src/config/`: 配置文件 + - `public/`: 静态资源和测试页面 + - `debug-devices.html`: 设备调试页面 + - `debug-users.html`: 用户调试页面 + - `map-test.html`: 地图测试页面 + - `test-auto-login.html`: 自动登录测试 + - `test-users-display.html`: 用户显示测试 -### 2.3 其他 -- `docs/`: 项目文档 - - `baidu-map-license.md`: 百度地图许可文档 - - `performance-monitoring.md`: 性能监控文档 -- `tests/`: 测试脚本 - - `performance-monitor-test.js`: 性能监控测试 +### 2.3 官网 (`website/`) +- `data-screen/`: 官网前端项目 + - 包含官网展示页面和数据大屏功能 + +### 2.4 微信小程序 (`mini_program/`) +- `farm-monitor-dashboard/`: 微信小程序项目 + - 包含移动端监控仪表盘功能 + +### 2.5 脚本目录 (`scripts/`) +- `init-db.js`: 数据库初始化 +- `migration-manager.js`: 迁移管理 +- `seed-manager.js`: 种子数据管理 +- `test-connection.js`: 连接测试 +- `test-map-api.js`: 地图API测试 + +### 2.6 文档目录 (`docs/`) +- `baidu-map-license.md`: 百度地图许可文档 +- `performance-monitoring.md`: 性能监控文档 + +### 2.7 测试目录 (`test/`) +- `performance-monitor-test.js`: 性能监控测试 + +### 2.8 其他文件 - `examples/`: 示例代码 - `performance-monitor-integration.js`: 性能监控集成示例 - `create_tables.sql`: 数据库表创建脚本 @@ -162,7 +174,7 @@ ## 4. 核心架构 ### 4.1 技术栈 **后端技术栈:** -- **运行环境**: Node.js +- **运行环境**: Node.js 18.0+ - **Web框架**: Express.js 4.18+ - **ORM框架**: Sequelize 6.30+ - **数据库**: MySQL (mysql2 3.0+) diff --git a/backend/config/swagger.js b/backend/config/swagger.js index 78cc944..4f5f2b7 100644 --- a/backend/config/swagger.js +++ b/backend/config/swagger.js @@ -306,6 +306,55 @@ const options = { description: '更新时间' } } + }, + FarmInput: { + type: 'object', + required: ['name', 'type', 'location'], + properties: { + name: { + type: 'string', + description: '养殖场名称' + }, + type: { + type: 'string', + description: '养殖场类型' + }, + location: { + type: 'object', + required: ['latitude', 'longitude'], + properties: { + latitude: { + type: 'number', + format: 'float', + description: '纬度' + }, + longitude: { + type: 'number', + format: 'float', + description: '经度' + } + }, + description: '地理位置' + }, + address: { + type: 'string', + description: '详细地址' + }, + contact: { + type: 'string', + description: '联系人' + }, + phone: { + type: 'string', + description: '联系电话' + }, + status: { + type: 'string', + enum: ['active', 'inactive', 'maintenance'], + description: '养殖场状态', + default: 'active' + } + } } } }, diff --git a/backend/routes/users.js b/backend/routes/users.js index 11c9867..a1a2e78 100644 --- a/backend/routes/users.js +++ b/backend/routes/users.js @@ -20,6 +20,7 @@ const userController = require('../controllers/userController'); * - id * - username * - email + * - password * properties: * id: * type: integer @@ -30,10 +31,36 @@ const userController = require('../controllers/userController'); * email: * type: string * description: 邮箱地址 + * password: + * type: string + * description: 密码(加密存储) + * phone: + * type: string + * description: 手机号码 + * avatar: + * type: string + * description: 头像URL + * status: + * type: string + * enum: [active, inactive, suspended] + * description: 用户状态 + * createdAt: + * type: string + * format: date-time + * description: 创建时间 + * updatedAt: + * type: string + * format: date-time + * description: 更新时间 * example: * id: 1 * username: "john_doe" * email: "john@example.com" + * phone: "13800138000" + * avatar: "/uploads/avatars/default.png" + * status: "active" + * createdAt: "2024-01-01T00:00:00.000Z" + * updatedAt: "2024-01-01T00:00:00.000Z" */ /** diff --git a/design.md b/design.md index 31560cc..cc223a4 100644 --- a/design.md +++ b/design.md @@ -26,7 +26,14 @@ ## 2. 技术架构设计 ### 2.1 整体架构 -本项目采用前后端分离的架构设计模式,前端使用Vue.js框架,后端采用Python技术栈,数据库使用MySQL进行数据存储。 +本项目采用前后端分离的架构设计模式,包含以下主要模块: +- **后端服务** (`backend/`): Node.js + Express + Sequelize ORM +- **管理后台** (`admin-system/`): Vue.js 3.x + Ant Design Vue +- **官网** (`website/`): Vue.js 3.x + 数据大屏展示 +- **微信小程序** (`mini_program/`): React + TypeScript + Tailwind CSS +- **脚本工具** (`scripts/`): 数据库管理和维护脚本 +- **文档** (`docs/`): 项目技术文档 +- **测试** (`test/`): 测试脚本和用例 ### 2.2 前端技术栈 - **核心框架**: Vue.js 3.x @@ -38,23 +45,23 @@ - **图表库**: ECharts ### 2.3 后端技术栈 -- **运行环境**: Python 3.8+ -- **Web框架**: FastAPI 或 Flask(可选) +- **运行环境**: Node.js +- **Web框架**: Express.js 4.18+ - **API风格**: RESTful API -- **认证授权**: JWT -- **数据库访问**: SQLAlchemy 或 Peewee ORM -- **依赖管理**: uv 工具 +- **认证授权**: JWT (jsonwebtoken 9.0+) +- **数据库访问**: Sequelize ORM 6.30+ +- **数据库**: MySQL (mysql2 3.0+) +- **密码加密**: bcrypt 5.1+ +- **API文档**: Swagger (swagger-jsdoc + swagger-ui-express) +- **日志管理**: Winston 3.17+ +- **开发工具**: nodemon 3.0+ +- **跨域处理**: CORS 2.8+ +- **数据验证**: express-validator 7.2+ +- **环境变量**: dotenv 16.0+ +- **HTTP客户端**: Axios 1.4+ +- **服务器端口**: 5350 + -#### 2.3.1 Python环境配置与依赖管理 -1. `uv` 是一个快速的 Python 包和虚拟环境管理工具 -2. MCP Server 依赖 `uv` 工具运行,必须确保系统环境中已安装 uv -3. 安装 `uv` 的推荐方法: - - 使用官方安装脚本:`powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"` - - 或通过 pip 安装:`pip install uv` -4. 设置国内镜像源加速下载: - ```bash - $env:UV_INDEX_URL="https://mirrors.aliyun.com/pypi/simple/" - ``` ### 2.4 部署架构 - **开发环境**: 本地运行 @@ -111,45 +118,52 @@ | username | VARCHAR(50) | UNIQUE, NOT NULL | 用户名 | | email | VARCHAR(100) | UNIQUE, NOT NULL | 邮箱地址 | | password | VARCHAR(255) | NOT NULL | 密码(加密后) | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 | -| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | +| phone | VARCHAR(20) | NULL | 手机号 | +| avatar | VARCHAR(255) | NULL | 头像URL | +| status | ENUM('active','inactive','banned') | DEFAULT 'active' | 用户状态 | +| last_login | DATETIME | NULL | 最后登录时间 | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | #### 3.3.2 角色表 (roles) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 角色ID | | name | VARCHAR(50) | UNIQUE, NOT NULL | 角色名称 | -| description | TEXT | | 角色描述 | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| description | TEXT | NULL | 角色描述 | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | #### 3.3.3 用户角色关联表 (user_roles) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | user_id | INT | FOREIGN KEY (users.id), NOT NULL | 用户ID | | role_id | INT | FOREIGN KEY (roles.id), NOT NULL | 角色ID | -| assigned_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 分配时间 | +| assigned_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 分配时间 | #### 3.3.4 产品表 (products) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 产品ID | | name | VARCHAR(100) | NOT NULL | 产品名称 | -| description | TEXT | | 产品描述 | -| price | DECIMAL(10,2) | NOT NULL | 产品价格 | +| description | TEXT | NULL | 产品描述 | +| price | INT | NOT NULL | 产品价格(单位:分) | | stock | INT | DEFAULT 0 | 库存数量 | -| status | ENUM('active', 'inactive') | DEFAULT 'active' | 产品状态 | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 | -| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | +| image_url | VARCHAR(255) | NULL | 产品图片URL | +| is_active | TINYINT(1) | DEFAULT 1 | 是否激活 | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | #### 3.3.5 订单表 (orders) | 字段名 | 类型 | 约束 | 描述 | |--------|------|------|------| | id | INT | PRIMARY KEY, AUTO_INCREMENT | 订单ID | | user_id | INT | FOREIGN KEY (users.id), NOT NULL | 用户ID | -| total_amount | DECIMAL(10,2) | NOT NULL | 订单总金额 | -| status | ENUM('pending', 'paid', 'shipped', 'delivered', 'cancelled') | DEFAULT 'pending' | 订单状态 | -| created_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP | 创建时间 | -| updated_at | TIMESTAMP | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | +| total_amount | INT | DEFAULT 0 | 订单总金额(单位:分) | +| status | ENUM('pending','processing','shipped','delivered','cancelled') | DEFAULT 'pending' | 订单状态 | +| payment_status | ENUM('unpaid','paid','refunded') | DEFAULT 'unpaid' | 支付状态 | +| shipping_address | TEXT | NULL | 收货地址 | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | #### 3.3.6 订单项表 (order_items) | 字段名 | 类型 | 约束 | 描述 | @@ -157,8 +171,66 @@ | id | INT | PRIMARY KEY, AUTO_INCREMENT | 订单项ID | | order_id | INT | FOREIGN KEY (orders.id), NOT NULL | 订单ID | | product_id | INT | FOREIGN KEY (products.id), NOT NULL | 产品ID | -| quantity | INT | NOT NULL | 数量 | -| price | DECIMAL(10,2) | NOT NULL | 单价 | +| quantity | INT | DEFAULT 1 | 数量 | +| price | INT | NOT NULL | 单价(单位:分) | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | + +#### 3.3.7 养殖场表 (farms) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 养殖场ID | +| name | VARCHAR(100) | NOT NULL | 养殖场名称 | +| type | VARCHAR(50) | NOT NULL | 养殖场类型 | +| location | JSON | NOT NULL | 地理位置信息 | +| address | VARCHAR(255) | NULL | 详细地址 | +| contact | VARCHAR(50) | NULL | 联系人 | +| phone | VARCHAR(20) | NULL | 联系电话 | +| status | ENUM('active','inactive','maintenance') | DEFAULT 'active' | 养殖场状态 | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | + +#### 3.3.8 动物表 (animals) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 动物ID | +| type | VARCHAR(50) | NOT NULL | 动物类型 | +| count | INT | DEFAULT 0 | 数量 | +| farm_id | INT | FOREIGN KEY (farms.id), NOT NULL | 所属养殖场ID | +| health_status | ENUM('healthy','sick','quarantine') | DEFAULT 'healthy' | 健康状态 | +| last_inspection | DATETIME | NULL | 最后检查时间 | +| notes | TEXT | NULL | 备注信息 | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | + +#### 3.3.9 设备表 (devices) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 设备ID | +| name | VARCHAR(100) | NOT NULL | 设备名称 | +| type | VARCHAR(50) | NOT NULL | 设备类型 | +| status | ENUM('online','offline','maintenance') | DEFAULT 'offline' | 设备状态 | +| farm_id | INT | FOREIGN KEY (farms.id), NOT NULL | 所属养殖场ID | +| last_maintenance | DATETIME | NULL | 最后维护时间 | +| installation_date | DATETIME | NULL | 安装日期 | +| metrics | JSON | NULL | 设备指标数据 | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | + +#### 3.3.10 预警表 (alerts) +| 字段名 | 类型 | 约束 | 描述 | +|--------|------|------|------| +| id | INT | PRIMARY KEY, AUTO_INCREMENT | 预警ID | +| type | VARCHAR(50) | NOT NULL | 预警类型 | +| level | ENUM('low','medium','high','critical') | DEFAULT 'medium' | 预警级别 | +| message | TEXT | NOT NULL | 预警消息 | +| status | ENUM('active','acknowledged','resolved') | DEFAULT 'active' | 预警状态 | +| farm_id | INT | FOREIGN KEY (farms.id), NOT NULL | 所属养殖场ID | +| device_id | INT | FOREIGN KEY (devices.id), NULL | 关联设备ID | +| resolved_at | DATETIME | NULL | 解决时间 | +| resolved_by | INT | FOREIGN KEY (users.id), NULL | 解决人ID | +| resolution_notes | TEXT | NULL | 解决说明 | +| created_at | DATETIME | DEFAULT CURRENT_TIMESTAMP | 创建时间 | +| updated_at | DATETIME | DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP | 更新时间 | ### 3.4 初始数据 diff --git a/farm-monitor-dashboard/components.json b/mini_program/farm-monitor-dashboard/components.json similarity index 100% rename from farm-monitor-dashboard/components.json rename to mini_program/farm-monitor-dashboard/components.json diff --git a/farm-monitor-dashboard/package-lock.json b/mini_program/farm-monitor-dashboard/package-lock.json similarity index 100% rename from farm-monitor-dashboard/package-lock.json rename to mini_program/farm-monitor-dashboard/package-lock.json diff --git a/farm-monitor-dashboard/package.json b/mini_program/farm-monitor-dashboard/package.json similarity index 100% rename from farm-monitor-dashboard/package.json rename to mini_program/farm-monitor-dashboard/package.json diff --git a/farm-monitor-dashboard/postcss.config.js b/mini_program/farm-monitor-dashboard/postcss.config.js similarity index 100% rename from farm-monitor-dashboard/postcss.config.js rename to mini_program/farm-monitor-dashboard/postcss.config.js diff --git a/farm-monitor-dashboard/src/app/dashboard/page.tsx b/mini_program/farm-monitor-dashboard/src/app/dashboard/page.tsx similarity index 97% rename from farm-monitor-dashboard/src/app/dashboard/page.tsx rename to mini_program/farm-monitor-dashboard/src/app/dashboard/page.tsx index 2b6aaf3..47ef507 100644 --- a/farm-monitor-dashboard/src/app/dashboard/page.tsx +++ b/mini_program/farm-monitor-dashboard/src/app/dashboard/page.tsx @@ -1,286 +1,286 @@ -'use client' - -import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" -import { Progress } from "@/components/ui/progress" -import { Badge } from "@/components/ui/badge" -import { Button } from "@/components/ui/button" -import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" -import { FarmMap } from "@/components/farm-map" -import { - TrendingUp, - Users, - MapPin, - AlertTriangle, - Thermometer, - Droplets, - Sun, - Wifi, - Server -} from "lucide-react" - -// Mock data for the dashboard -const mockData = { - farms: { - total: 12, - online: 9, - offline: 3 - }, - animals: { - total: 2456, - cattle: 890, - pigs: 756, - chickens: 810 - }, - environment: { - temperature: 25.6, - humidity: 65, - light: 1200 - }, - alerts: [ - { id: 1, type: 'critical', message: '温度异常: 农场3号温度超过阈值', time: '10:30' }, - { id: 2, type: 'warning', message: '湿度偏低: 农场5号湿度低于正常值', time: '09:45' }, - { id: 3, type: 'info', message: '设备维护: 农场2号传感器需要校准', time: '08:15' } - ], - devices: { - total: 156, - online: 142, - offline: 14, - types: { - sensor: 89, - camera: 32, - controller: 35 - } - } -} - -export default function Dashboard() { - return ( -
{alert.message}
-设备类型饼图
-传感器: {mockData.devices.types.sensor} | 摄像头: {mockData.devices.types.camera} | 控制器: {mockData.devices.types.controller}
-环境数据折线图
-显示最近24小时温湿度变化趋势
-设备状态表格
-在线: {mockData.devices.online} | 离线: {mockData.devices.offline}
-{alert.message}
+设备类型饼图
+传感器: {mockData.devices.types.sensor} | 摄像头: {mockData.devices.types.camera} | 控制器: {mockData.devices.types.controller}
+环境数据折线图
+显示最近24小时温湿度变化趋势
+设备状态表格
+在线: {mockData.devices.online} | 离线: {mockData.devices.offline}
+正在跳转到智慧农业监控平台...
-正在跳转到智慧农业监控平台...
+