# ✅ 负载管理功能更新 - 从设备库选择设备 ## 🎯 更新内容 将**负载管理**(挂载设备)功能从"选择设备类型"改为"从设备库选择具体设备"。 ## 🔄 变更对比 ### ❌ 旧功能(选择设备类型) ``` 挂载设备对话框 ├── 设备类型 [下拉选择] │ ├── 北斗终端 │ ├── 高清摄像头 │ └── 油耗传感器 ├── 设备名称 [输入框] ├── 序列号 [输入框] └── 备注 [文本框] ``` **问题**: - ❌ 需要手动输入设备名称和序列号 - ❌ 无法追溯设备来源 - ❌ 容易输入错误 - ❌ 与设备库数据不关联 ### ✅ 新功能(选择设备) ``` 挂载设备对话框 ├── 选择设备 [下拉选择] │ ├── 北斗定位终端-001 (北斗定位终端 - 华为 - BD-200) │ ├── 高清摄像头-A01 (高清摄像头 - 海康威视 - DS-2CD2345) │ └── 油耗传感器-F01 (油耗传感器 - 博世 - FS-100) └── 备注 [文本框] ``` **优点**: - ✅ 从设备库直接选择 - ✅ 自动获取设备信息 - ✅ 数据完整关联 - ✅ 避免重复和错误 ## 📊 数据流程 ### 完整的数据关系链 ``` ┌─────────────────┐ │ 负载类型 │ 定义类型规格 │ (LoadType) │ - 名称、品牌、型号 └────────┬────────┘ - 参数模板 │ ↓ 关联 ┌─────────────────┐ │ 负载设备库 │ 管理具体设备 │(LoadDeviceLib) │ - 设备名称 └────────┬────────┘ - 负载类型ID │ - 采购/使用时间 │ ↓ 选择 ┌─────────────────┐ │ 负载管理 │ 挂载到农机 │ (LoadDevice) │ - 农机ID └─────────────────┘ - 设备ID - 挂载/卸载时间 ``` ### 数据关联示例 **负载类型**: ```json { "id": "type-1", "name": "北斗定位终端", "manufacturer": "华为", "model": "BD-200" } ``` **负载设备库**: ```json { "id": "device-1", "deviceName": "北斗定位终端-001", "loadTypeId": "type-1", ← 关联类型 "purchaseDate": "2024-01-15" } ``` **挂载记录**: ```json { "id": "mounted-1", "machineryId": "machinery-1", "deviceId": "device-1", ← 关联设备 "mountedAt": "2024-01-20T08:00:00", "status": "mounted" } ``` ## 🎨 界面变化 ### 统计卡片 ``` ┌──────────┬──────────┬──────────┬──────────┐ │总挂载数 │已卸载 │设备库总数│可挂载设备│ │ 1 │ 0 │ 3 │ 2 │ └──────────┴──────────┴──────────┴──────────┘ ``` **说明**: - **总挂载数**: 当前已挂载的设备数量 - **已卸载**: 历史卸载的设备数量 - **设备库总数**: 负载设备库中的设备总数 - **可挂载设备**: 设备库中未被挂载的设备数量 ### 设备列表 ``` ┌──────────────┬────────────┬──────────┬────────┬──────┬──────┬────────┐ │设备名称 │设备类型 │挂载时间 │操作员 │备注 │状态 │操作 │ ├──────────────┼────────────┼──────────┼────────┼──────┼──────┼────────┤ │北斗定位终端 │北斗定位终端│2024-01-20│技术员 │用于 │已挂载│👁 ❌ │ │-001 │(华为) │08:00 │张三 │实时 │ │ │ │采购:2024-01 │BD-200 │ │ │定位 │ │ │ │-15 │ │ │ │ │ │ │ └──────────────┴────────────┴──────────┴────────┴──────┴──────┴────────┘ ``` **新增显示**: - 设备采购日期(小灰字) - 设备类型型号(小灰字) - 查看详情按钮 ### 挂载设备对话框 ``` ┌─────────────────────────────────────────┐ │ 挂载设备 [X] │ ├─────────────────────────────────────────┤ │ 从设备库中选择设备挂载到农机上 │ ├─────────────────────────────────────────┤ │ │ │ 选择设备 * │ │ ┌─────────────────────────────────────┐ │ │ │ 从设备库选择设备 [▼] │ │ │ └─────────────────────────────────────┘ │ │ 只显示设备库中未被当前农机挂载的设备 │ │ │ │ 备注 │ │ ┌─────────────────────────────────────┐ │ │ │ 挂载说明、注意事项等 │ │ │ │ │ │ │ └─────────────────────────────────────┘ │ │ │ │ [取消] [🔗 挂载] │ └─────────────────────────────────────────┘ ``` ### 设备选择器 ``` ┌─────────────────────────────────────────┐ │ 从设备库选择设备 [▼] │ ├─────────────────────────────────────────┤ │ 北斗定位终端-001 │ │ 北斗定位终端 (华为) - BD-200 ← 小灰字│ ├─────────────────────────────────────────┤ │ 高清摄像头-A01 │ │ 高清摄像头 (海康威视) - DS-2CD2345 │ ├─────────────────────────────────────────┤ │ 油耗传感器-F01 │ │ 油耗传感器 (博世) - FS-100 │ └─────────────────────────────────────────┘ ``` ### 查看详情对话框 ``` ┌─────────────────────────────────────────┐ │ 挂载详情 [X] │ ├─────────────────────────────────────────┤ │ 设备名称 │ 设备类型 │ │ 北斗定位终端-001 │ 北斗定位终端 (华为) │ ├─────────────────────────────────────────┤ │ 品牌 │ 型号 │ │ 华为 │ BD-200 │ ├─────────────────────────────────────────┤ │ 采购时间 │ 设备使用时间 │ │ 2024-01-15 │ 2024-01-20 │ ├─────────────────────────────────────────┤ │ 挂载时间 │ 挂载状态 │ │ 2024-01-20 08:00 │ [已挂载] │ ├─────────────────────────────────────────┤ │ 操作员 │ 创建时间 │ │ 技术员张三 │ 2024-01-20 08:00 │ ├─────────────────────────────────────────┤ │ 备注 │ │ 用于实时定位 │ ├─────────────────────────────────────────┤ │ 设备备注 │ │ 用于拖拉机实时定位 │ ├─────────────────────────────────────────┤ │ [关闭] │ └─────────────────────────────────────────┘ ``` ## 🔧 核心功能 ### 1️⃣ 智能设备过滤 **只显示可挂载的设备**: ```typescript const getAvailableDevices = (machineryId: string) => { const currentMounted = mountedDevices .filter(m => m.machineryId === machineryId && m.status === 'mounted') .map(m => m.deviceId); return loadDevices.filter(d => !currentMounted.includes(d.id)); }; ``` **规则**: - ✅ 设备库中的所有设备 - ❌ 已被当前农机挂载的设备 - ✅ 已被其他农机挂载的设备(可选择) - ✅ 已卸载的设备(可重新挂载) ### 2️⃣ 设备信息自动获取 挂载时自动获取设备的完整信息: - 设备名称 - 设备类型 - 品牌型号 - 采购日期 - 使用日期 - 设备备注 ### 3️⃣ 挂载记录管理 **挂载记录接口**: ```typescript interface MountedDeviceRecord { id: string; machineryId: string; // 农机ID deviceId: string; // 设备ID(关联设备库) mountedAt: string; // 挂载时间 unmountedAt?: string; // 卸载时间 status: 'mounted' | 'unmounted'; remarks?: string; // 挂载备注 operator: string; // 操作员 createdAt: string; updatedAt: string; } ``` ### 4️⃣ 数据关联查询 **获取设备信息**: ```typescript const getDevice = (deviceId: string) => { return loadDevices.find(d => d.id === deviceId); }; ``` **获取设备类型**: ```typescript const getDeviceType = (deviceId: string) => { const device = getDevice(deviceId); if (!device) return null; return loadTypes.find(t => t.id === device.loadTypeId); }; ``` **获取完整名称**: ```typescript const getDeviceTypeName = (deviceId: string) => { const type = getDeviceType(deviceId); if (!type) return '未知类型'; return `${type.name}${type.manufacturer ? ` (${type.manufacturer})` : ''}`; }; ``` ## 📝 使用流程 ### 流程1: 挂载设备 1. 选择农机,点击"挂载设备"按钮 2. 从下拉列表选择设备(只显示可挂载的设备) 3. 填写备注(可选) 4. 点击"挂载"按钮 5. 系统自动保存挂载记录 ### 流程2: 查看详情 1. 在已挂载列表中找到设备 2. 点击"查看"按钮(眼睛图标) 3. 查看完整的设备和挂载信息 4. 包括设备库信息和挂载记录 ### 流程3: 卸载设备 1. 在已挂载列表中找到设备 2. 点击"卸载"按钮(断链图标) 3. 确认卸载操作 4. 设备状态变为"已卸载" 5. 可在卸载历史中查看 ### 流程4: 重新挂载 1. 卸载的设备会重新出现在可选列表 2. 可以挂载到相同或不同的农机 3. 创建新的挂载记录 ## 💾 数据存储 ### LocalStorage Keys ```javascript // 负载类型 smart_agriculture_load_types // 负载设备库 smart_agriculture_load_devices // 挂载记录 smart_agriculture_mounted_devices ``` ### 示例数据 **挂载记录**: ```json { "id": "mounted-1", "machineryId": "machinery-1", "deviceId": "device-1", "mountedAt": "2024-01-20T08:00:00.000Z", "status": "mounted", "remarks": "用于实时定位", "operator": "技术员张三", "createdAt": "2024-01-20T08:00:00.000Z", "updatedAt": "2024-01-20T08:00:00.000Z" } ``` ## 🎯 优势分析 ### 数据完整性 | 特性 | 旧方式 | 新方式 | |------|--------|--------| | 设备名称 | 手动输入 ❌ | 自动获取 ✅ | | 设备类型 | 选择后丢失 ❌ | 完整关联 ✅ | | 采购信息 | 无 ❌ | 自动显示 ✅ | | 设备备注 | 无 ❌ | 自动显示 ✅ | | 重复挂载 | 可能 ❌ | 自动过滤 ✅ | ### 用户体验 | 操作 | 旧方式 | 新方式 | |------|--------|--------| | 挂载设备 | 3个输入框 ❌ | 1个选择器 ✅ | | 查看信息 | 只有名称 ❌ | 完整信息 ✅ | | 追溯来源 | 不可能 ❌ | 完整追溯 ✅ | | 重复检查 | 手动 ❌ | 自动过滤 ✅ | ### 数据管理 | 方面 | 旧方式 | 新方式 | |------|--------|--------| | 数据来源 | 手动输入 | 设备库 ✅ | | 数据一致性 | 低 ❌ | 高 ✅ | | 数据追踪 | 困难 ❌ | 容易 ✅ | | 数据复用 | 不支持 ❌ | 支持 ✅ | ## 🔄 迁移影响 ### 对现有数据的影响 **旧数据结构**: ```typescript interface OldMountedDevice { deviceTypeId: string; // 设备类型ID deviceName: string; // 手动输入 serialNumber: string; // 手动输入 } ``` **新数据结构**: ```typescript interface NewMountedDevice { deviceId: string; // 设备库ID(关联) // 其他信息自动从设备库获取 } ``` ### 兼容性 - ✅ 新旧数据互不影响 - ✅ 使用不同的LocalStorage key - ✅ 可以并存 ## 📚 相关页面 ### 三个页面的关系 ``` 1. 负载类型 (LoadType) └── 定义设备类型规格 ↓ 2. 负载设备库 (LoadDeviceLibrary) └── 管理具体设备 ↓ 3. 负载管理 (LoadDevice) └── 挂载到农机 ``` ### 操作顺序 1. **先**: 在"负载类型"中创建类型 2. **再**: 在"负载设备库"中添加设备 3. **最后**: 在"负载管理"中挂载设备 ## ✨ 功能特点 ### 核心特点 - ✅ 从设备库选择,避免重复输入 - ✅ 自动获取设备完整信息 - ✅ 智能过滤可挂载设备 - ✅ 完整的数据关联链 - ✅ 支持设备重新挂载 - ✅ 详细的挂载记录 ### 智能功能 - 🔍 只显示未挂载的设备 - 📊 统计可挂载设备数量 - 👁️ 查看完整设备信息 - 📝 支持挂载备注 - 🔄 支持卸载和重新挂载 - 📅 记录挂载/卸载时间 ## 🚀 快速开始 ### 访问路径 ``` 智能农机管理系统 → 农机负载管理 → 负载管理 ``` ### 初始化数据 确保以下数据已准备: 1. 负载类型数据(LoadType) 2. 负载设备库数据(LoadDeviceLibrary) 3. 农机档案数据(MachineryArchive) ### 第一次使用 1. 刷新页面加载数据 2. 选择农机 3. 点击"挂载设备" 4. 从设备库选择设备 5. 完成挂载 ## 🎉 更新状态 - ✅ 数据结构重构完成 - ✅ 界面功能完成 - ✅ 设备选择器完成 - ✅ 智能过滤完成 - ✅ 详情查看完成 - ✅ 挂载/卸载完成 - ✅ 统计功能完成 **状态**: 🟢 **已完成,可以使用** --- **更新时间**: 2025-10-17 **版本**: v2.0 **重大变更**: 从选择类型改为选择设备