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