# 前端未提交改动说明

**分支**: main  
**状态**: 工作区未提交，共 3 个文件

---

## 修改文件列表

| 文件 | 改动说明 |
|---|---|
| `src/components/map/controls/VehicleMovementControlRefactored.vue` | 航班残留清理 + 诊断日志 |
| `src/components/map/controls/VehicleAnimationSystem.vue` | NaN 位置保护 |
| `dist.zip` | 构建产物（二进制） |

---

## 一、VehicleAnimationSystem.vue — NaN 保护

**问题**: 车辆动画计算后位置可能出现 NaN，导致地图渲染异常。

**修改**:
1. 动画位置计算后增加 `isFinite()` 校验，若无效则回退到 `vehicles[id].position` 或 `targetPosition`
2. 写回 `vehicles[id].position` 前同样做 `isFinite()` 校验，避免污染数据源

---

## 二、VehicleMovementControlRefactored.vue — 航班残留清理 + 诊断日志

### 1. 冲突状态守卫
`clearConflictStatus()` 和 `markConflictStatus()` 增加 `if (!v.isAircraft) return;`
确保只清理/标记航班，不误操作其他车辆。

### 2. 路线清理逻辑统一
- 禁用了 `updateAircraftRouteFromGeoJson()` 和 `updateAircraftRoute()` 中各自的 5 分钟独立定时器（注释掉）
- 禁用了 `updateVehiclePosition()` 中的 `tryAutoRemoveAircraftRouteByPosition()` 调用
- 统一改为由新增的 `cleanupTimer` 集中处理

### 3. 新增 cleanupTimer（每 60 秒）
定时扫描所有 vehicle，清理超过 60 秒未更新的航班：

```
遍历 vehicles → 只处理 isAircraft → age > 60s →
  1. 移除标签 (labelSystem)
  2. 移除地图 Feature (vehicleSource)
  3. 移除航线 (aircraftRoutes)
  4. 删除 vehicles 数据
```

解决航班图标在地图上残留不消失的问题。

### 4. 新增 lastUpdateTime 记录
创建/更新 Feature 时写入 `lastUpdateTime: Date.now()`，供 cleanupTimer 判断过期。

### 5. 诊断日志（上线前需移除）
- `<script setup>` 顶部打印版本标记 `>>> 版本已更新: 清理逻辑已启用`
- Feature 创建/丢失/隐藏时打印诊断信息
- 新增 `featureDiagTimer`（每 5 秒）遍历所有 Feature 输出属性

### 6. 组件卸载清理
`onUnmounted` 中增加 `clearInterval(cleanupTimer)` 和 `clearInterval(featureDiagTimer)`。

---

## 合入注意事项

1. 两个 `.vue` 文件的改动可以直接合入
2. **诊断日志需要在正式发布前移除或降级**：
   - `console.warn(">>> 版本已更新: 清理逻辑已启用")` — 删除
   - `featureDiagTimer`（每 5 秒的属性 dump）— 删除或注释掉
   - `cleanupTimer` 相关的 `console.warn` 可改为 `console.debug` 或删除
3. `dist.zip` 是构建产物，建议 `npm run build` 重新生成后替换
