# 其他装备列表数据存储结构详解 ## 📊 **存储概览** 其他装备列表的数据采用**双重存储机制**: - **内存存储**: Vue3响应式数组 `otherEquipmentList.value` - **持久化存储**: 浏览器localStorage `"index-otherEquipmentList"` ## 🗂️ **数据结构定义** ### **1. Vue响应式变量** ```javascript // 定义位置:homeShow/index.vue 第1536行 const otherEquipmentList = ref([]); // 设备列表数组 const otherEquipmentCount = computed(() => { return otherEquipmentList.value.filter( item => item.online_status === true ).length; }); // 在线设备计数 ``` ### **2. localStorage存储键** ```javascript // 存储键名 const STORAGE_KEY = "index-otherEquipmentList"; // 存储操作 localStorage.setItem(STORAGE_KEY, JSON.stringify(otherEquipmentList.value)); localStorage.getItem(STORAGE_KEY); // 获取数据 ``` ## 📋 **设备对象数据结构** ### **通用其他装备数据格式** ```javascript { // === 基础标识信息 === equipmentId: "OTHER_001", // 设备唯一ID equipmentType: "电子干扰设备", // 设备类型 category: "电子战", // 设备分类 // === 状态信息 === status: "正常", // 设备状态 online_status: true, // 在线状态 (boolean) maintenanceStatus: "良好", // 维护状态 // === 功能参数 === function: "信号干扰", // 主要功能 range: 15, // 作用范围 (km) operationTime: 8.5, // 运行时间 (小时) // === 位置信息 === latitude: 39.9042, // 纬度 longitude: 116.4074, // 经度 altitude: 0, // 高度 (仅QB303设备有) // === 时间戳 === lastUpdateTime: 1757292674555 // 最后更新时间 } ``` ### **QB303设备专用数据格式** ```javascript { // === 基础信息 === equipmentId: "dy04", // 使用battle_unit_code作为ID equipmentType: "QB303设备", category: "平台设备", // 根据platform_type映射 // === QB303特有标识 === battleUnitCode: "dy04", // 作战单元代码 (主键) sn: "2", // 原始序列号 sid: "2", // 原始设备ID // === 状态信息 === status: "正常", // 根据health_status映射 online_status: true, // 基于health_status maintenanceStatus: "正常", // === 功能信息 === function: "QB303平台设备", range: "N/A", operationTime: 60, // 计算得出 (分钟) // === 位置和运动信息 === latitude: 28.20648476190476, longitude: 112.8945530952381, altitude: 200, // QB303独有 // === 运动数据 (QB303独有) === velocity: 0, // 总速度 velocity_x: 0.10144216567277908, // X轴速度 velocity_y: -0.0755225121974945, // Y轴速度 velocity_z: 0.050013765692710876, // Z轴速度 // === 姿态数据 (QB303独有) === roll: -1.02637914332358, // 横滚角 pitch: 2.0691601321652815, // 俯仰角 yaw: 0, // 偏航角 // === 时间信息 === reportTime: 1757150761138, // 设备上报时间 lastUpdateTime: 1757295666670 // 系统更新时间 } ``` ## 💾 **数据持久化机制** ### **1. 初始化加载** ```javascript // 位置:第1537-1556行 const otherEquipmentInit = async () => { const localData = localStorage.getItem("index-otherEquipmentList"); if (localData) { try { const savedEquipment = JSON.parse(localData); otherEquipmentList.value = savedEquipment; otherEquipmentCount.value = savedEquipment.length; } catch (error) { console.error('解析本地数据失败:', error); } } else { otherEquipmentList.value = []; otherEquipmentCount.value = 0; } } ``` ### **2. 数据保存时机** 数据会在以下情况自动保存到localStorage: 1. **WebSocket接收新数据时** 2. **设备信息更新时** 3. **手动编辑设备信息时** 4. **测试数据添加时** ```javascript // 保存代码模式 localStorage.setItem("index-otherEquipmentList", JSON.stringify(otherEquipmentList.value)); ``` ## 📱 **数据实例示例** ### **实际存储的数据结构 (localStorage)** ```json [ { "equipmentId": "OTHER_001", "equipmentType": "电子干扰设备", "category": "电子战", "status": "正常", "function": "信号干扰", "range": 15, "operationTime": 8.5, "maintenanceStatus": "良好", "online_status": true, "latitude": 39.9042, "longitude": 116.4074, "lastUpdateTime": 1757292674555 }, { "equipmentId": "dy04", "equipmentType": "QB303设备", "category": "平台设备", "status": "正常", "function": "QB303平台设备", "range": "N/A", "operationTime": 60, "maintenanceStatus": "正常", "online_status": true, "latitude": 28.20648476190476, "longitude": 112.8945530952381, "altitude": 200, "velocity": 0, "velocity_x": 0.10144216567277908, "velocity_y": -0.0755225121974945, "velocity_z": 0.050013765692710876, "roll": -1.02637914332358, "pitch": 2.0691601321652815, "yaw": 0, "battleUnitCode": "dy04", "sn": "2", "sid": "2", "reportTime": 1757150761138, "lastUpdateTime": 1757295666670 } ] ``` ## 🔧 **数据操作接口** ### **查看当前数据** ```javascript // 1. 查看内存中的数据 console.log('内存数据:', otherEquipmentList.value); console.log('设备总数:', otherEquipmentList.value.length); console.log('在线设备数:', otherEquipmentCount.value); // 2. 查看localStorage中的数据 const storedData = localStorage.getItem("index-otherEquipmentList"); console.log('存储数据:', JSON.parse(storedData)); // 3. 查看特定设备 const device = otherEquipmentList.value.find(d => d.equipmentId === 'dy04'); console.log('QB303设备 dy04:', device); ``` ### **数据操作功能** ```javascript // 1. 清空所有数据 localStorage.removeItem("index-otherEquipmentList"); otherEquipmentList.value = []; // 2. 添加测试数据 testQB303Data(); // 添加单个QB303设备 testMultipleQB303Data(); // 添加多个QB303设备 // 3. 手动编辑设备信息 // 通过UI界面的编辑功能进行 // 4. 导出数据 const exportData = JSON.stringify(otherEquipmentList.value, null, 2); console.log('导出数据:', exportData); ``` ## 🎯 **数据字段映射关系** ### **QB303数据映射** | WebSocket字段 | 存储字段 | 说明 | |-------------|----------|------| | `data.host.battle_unit_code` | `equipmentId` | 设备主键 | | `data.host.battle_unit_code` | `battleUnitCode` | 作战单元代码 | | `data.sn` | `sn` | 原始序列号 | | `data.host.sid` | `sid` | 原始设备ID | | `data.host.platform_type` | `category` | 设备分类 (1→"平台设备") | | `data.host.health_status` | `status` | 设备状态 (1→"正常") | | `data.host.latitude` | `latitude` | 纬度 | | `data.host.longitude` | `longitude` | 经度 | | `data.host.altitude` | `altitude` | 高度 | | `data.host.velocity` | `velocity` | 速度 | | `data.host.report_time` | `reportTime` | 上报时间 | ### **通用装备数据映射** | WebSocket字段 | 存储字段 | 说明 | |-------------|----------|------| | `data.equipment_id` | `equipmentId` | 设备ID | | `data.equipment_type` | `equipmentType` | 设备类型 | | `data.category` | `category` | 设备分类 | | `data.online_status` | `online_status` | 在线状态 | | `data.latitude` | `latitude` | 纬度 | | `data.longitude` | `longitude` | 经度 | ## 🔍 **数据调试方法** ### **快速检查数据状态** ```javascript // 在浏览器控制台运行 console.table(otherEquipmentList.value.map(d => ({ ID: d.equipmentId, 类型: d.equipmentType, 状态: d.status, 在线: d.online_status ? '是' : '否', 位置: `${d.latitude}, ${d.longitude}` }))); ``` 这就是您的其他装备列表数据存储的完整结构!数据既保存在内存中供实时操作,也持久化到localStorage中确保页面刷新后数据不丢失。