Files
xiaomubiao-master/QB303_DATA_CLEARING_FIX_GUIDE.md
2026-05-22 16:13:20 +08:00

181 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔧 QB303设备数据被清空问题修复指南
## 🎯 问题分析
从最新的测试日志可以看出:
```
当前QB303设备数据: {}
QB303设备数据: {}
图层中图形数量: 0
找到的QB303图形: 0 个
```
**问题:** QB303设备数据在某个时刻被清空了导致设备无法显示。
## 🔍 问题根因
### **可能的原因:**
1. **`forceRefreshQB303Devices`方法缺陷** - 只清理图标,没有重新加载数据
2. **数据生命周期问题** - 数据在某些操作后被意外清空
3. **时序问题** - 数据加载和显示的时机不对
### **确认的问题:**
`forceRefreshQB303Devices`方法的逻辑有问题:
```javascript
// 只清理图标,但数据可能为空
this.loadrQB303DeviceData(); // 如果qb303DeviceData是空的什么都不会创建
```
## ✅ 修复方案
### **1. 新增一键重载方法**
```javascript
reloadAndShowQB303()
```
**功能:**
- ✅ 清空现有数据
- ✅ 从localStorage重新加载数据
- ✅ 调用渲染方法
- ✅ 自动飞行到设备位置
- ✅ 显示详细的执行日志
### **2. 改进坐标修复测试**
```javascript
testCoordinateFix()
```
**新增逻辑:**
- ✅ 检测数据是否为空
- ✅ 如果为空,先强制加载数据
- ✅ 然后再进行刷新显示
## 🚀 推荐解决方案
### **方案1一键重载推荐**
```javascript
reloadAndShowQB303()
```
这是最直接的解决方案会完整重新加载和显示QB303设备。
### **方案2改进的坐标修复测试**
```javascript
testCoordinateFix()
```
现在会智能检测数据状态并自动处理。
### **方案3分步手动处理**
```javascript
// 1. 检查localStorage数据
const localData = localStorage.getItem("index-otherEquipmentList");
console.log('localStorage数据:', JSON.parse(localData));
// 2. 强制加载数据
forceLoadQB303Data();
// 3. 检查加载结果
console.log('加载后数据:', window.m3Data.qb303DeviceData);
// 4. 渲染显示
window.m3Data.loadrQB303DeviceData();
```
## 📊 预期修复结果
### **使用`reloadAndShowQB303()`应该看到:**
```
=== 一键重新加载和显示QB303设备 ===
步骤1清空现有数据
步骤2从localStorage重新加载数据
找到在线QB303设备: 1 个
✅ 加载设备 dy04: [112.8945530952381, 28.20648476190476]
步骤3调用渲染方法
加载QB303设备到地图: dy04 {info: {...}}
设备信息: {equipmentId: 'dy04', ...}
设备坐标: [112.8945530952381, 28.20648476190476, 200]
✅ QB303设备 dy04 已添加到地图
步骤4检查结果
QB303设备数据: {dy04: {...}}
图层中图形数量: 1
找到的QB303图形: 1 个
```
## 🔍 数据状态检查
### **检查localStorage数据**
```javascript
const localData = localStorage.getItem("index-otherEquipmentList");
if (localData) {
const devices = JSON.parse(localData);
const qb303 = devices.filter(d => d.equipmentType === 'QB303设备');
console.log('localStorage中QB303设备:', qb303.length);
qb303.forEach(d => {
console.log(`${d.equipmentId}: 在线=${d.online_status}, 坐标=[${d.longitude}, ${d.latitude}]`);
});
}
```
### **检查地图实例数据**
```javascript
console.log('地图QB303数据:', window.m3Data?.qb303DeviceData);
console.log('数据条目数:', Object.keys(window.m3Data?.qb303DeviceData || {}).length);
```
## 🚨 故障排除
### **如果localStorage中没有数据**
```javascript
// 先发送测试数据
testQB303Data()
// 等待2秒后重新加载
setTimeout(() => {
reloadAndShowQB303()
}, 2000)
```
### **如果地图实例有问题**
```javascript
// 检查地图实例状态
console.log('地图实例:', window.m3Data);
console.log('图形图层:', window.m3Data?.graphicLayer);
console.log('渲染方法:', typeof window.m3Data?.loadrQB303DeviceData);
```
### **如果坐标仍然undefined**
```javascript
// 检查数据结构
Object.entries(window.m3Data.qb303DeviceData).forEach(([key, value]) => {
console.log(`设备 ${key}:`, value);
if (value.info) {
console.log(` 坐标: [${value.info.longitude}, ${value.info.latitude}]`);
}
});
```
## 📋 快速命令参考
```javascript
// === 推荐解决方案 ===
reloadAndShowQB303() // 一键重载和显示(推荐)
testCoordinateFix() // 改进的坐标修复测试
// === 基础调试 ===
debugQB303Rendering() // 检查渲染状态
forceLoadQB303Data() // 强制加载数据
// === 数据检查 ===
// 检查localStorage
console.log('localStorage:', JSON.parse(localStorage.getItem("index-otherEquipmentList") || "[]"));
// 检查地图数据
console.log('地图数据:', window.m3Data?.qb303DeviceData);
```
## 🎯 解决步骤
1. **立即执行** `reloadAndShowQB303()`
2. **观察日志** 确认数据加载和渲染过程
3. **检查地图** 应该能看到QB303设备显示在湖南省
4. **验证交互** 点击设备图标测试功能
现在数据清空问题已经有了完整的解决方案,请执行 `reloadAndShowQB303()` 来重新加载和显示QB303设备🚁🔧✨