# 3D态势感知应急驾驶舱 - 重构版

## 📋 项目概述

这是对从蓝湖导出的 `3DSituationalAwarenessCopy` 页面的完整重构版本，解决了原始代码的可维护性问题。

## ✨ 重构成果

### 改进前（原始代码）
- ❌ 792 行代码全在一个文件
- ❌ 使用 `group_1`、`block_1` 等无意义命名
- ❌ 硬编码像素值，不支持响应式
- ❌ 深层嵌套的 div 结构
- ❌ 绝对定位 + margin 混乱布局

### 改进后（重构代码）
- ✅ 拆分为 20+ 个独立组件
- ✅ 语义化命名，一目了然
- ✅ 使用 vw/vh/fs 响应式单位
- ✅ 清晰的组件层次结构
- ✅ CSS Grid + Flexbox 现代布局
- ✅ Vue 3 Composition API + `<script setup>`

## 📁 目录结构

```
3DSituationalAwarenessRefactor/
├── index.vue                          # 主页面入口
├── components/                        # 组件目录
│   ├── PageHeader.vue                 # 顶部导航栏
│   ├── LeftPanel/                     # 左侧面板
│   │   ├── index.vue                  # 面板容器
│   │   ├── DisasterAnalysis.vue       # 灾害分析
│   │   ├── ForcePreset.vue            # 力量预置
│   │   ├── ForceDispatch.vue          # 力量调度
│   │   └── CollaborationInfo.vue      # 协同信息
│   ├── MapViewer/                     # 地图区域
│   │   ├── index.vue                  # 地图容器
│   │   └── MapControls.vue            # 地图控制工具
│   ├── RightPanel/                    # 右侧面板
│   │   ├── index.vue                  # 面板容器
│   │   ├── DispatchCommand.vue        # 调度指挥
│   │   ├── VideoMonitorGrid.vue       # 视频监控网格
│   │   ├── VideoMonitorItem.vue       # 视频监控卡片
│   │   └── DispatchSuggestion.vue     # 调度建议
│   ├── shared/                        # 公共组件
│   │   ├── PanelHeader.vue            # 面板标题
│   │   ├── DataField.vue              # 数据字段
│   │   └── ActionButton.vue           # 操作按钮
│   └── Popups/                        # 弹窗组件
│       ├── PersonnelDetail.vue        # 应急人员详情
│       └── EmergencyCenterDetail.vue  # 应急中心详情
├── composables/                       # 组合式函数
│   ├── useDisasterData.js             # 灾害数据管理
│   ├── useForceDispatch.js            # 力量调度逻辑
│   └── useVideoMonitor.js             # 视频监控状态
├── assets/                            # 资源文件
│   ├── styles/
│   │   └── common.scss                # 公共样式
│   └── images/                        # 图片资源（需从Copy目录迁移）
├── constants.js                       # 常量定义
└── README.md                          # 本文档
```

## 🎯 核心功能模块

### 1. 顶部导航栏
- 返回驾驶舱按钮
- 系统标题
- 灾后现场实景入口
- 设置按钮

### 2. 左侧面板（灾害分析与调度）
- **快速感知（灾害分析）**：灾害类型、损坏方量、滑坡体尺寸、人员伤亡等
- **快速匹配（力量预置）**：应急装备、基地、人员统计，附近养护站列表
- **快速响应（力量调度）**：响应等级、智能应急方案、预计抢通时间
- **协同信息**：气象预警、公安部门、融媒体中心的实时信息

### 3. 中央地图区域
- 3D 地图展示（支持接入 Cesium、Mapbox GL JS 等）
- 地图标记点（应急人员、应急中心）
- 测量工具栏（模型对比、测量方量、测量位置/距离）

### 4. 右侧面板（现场处置）
- **调度指挥**：现场单兵/设备/无人机列表（标签页切换）
- **视频监控网格**：4 视角视频监控（单兵、无人机、指挥车外部/会议）
- **调度建议**：智能调度力量建议卡片

### 5. 弹窗组件
- **应急人员详情**：姓名、部门、位置、预计到达时间、联动操作
- **应急中心详情**：名称、行政等级、隶属单位、位置信息

## 🔧 技术栈

- **Vue 3**：Composition API + `<script setup>` 语法
- **SCSS**：样式预处理器
- **响应式设计**：vw/vh/fs 函数（项目统一方案）
- **状态管理**：Composables（组合式函数）
- **组件通信**：Props/Emits + Provide/Inject

## 📦 安装与使用

### 1. 图片资源迁移

**重要**：由于图片资源仍在原始目录，需要手动迁移或更新引用路径：

```bash
# 方案 1：复制图片到新目录
cp -r ../3DSituationalAwarenessCopy/assets/img/* ./assets/images/

# 方案 2：创建符号链接（开发环境）
ln -s ../3DSituationalAwarenessCopy/assets/img ./assets/images
```

### 2. 图片命名优化（可选）

原始图片命名为 `SketchPng...`，建议重命名为语义化名称：

```
SketchPng6e14... → map-background.png
SketchPng7ba5... → left-panel-bg.png
SketchPng9eb4... → disaster-type-icon.png
...
```

可以使用脚本批量重命名，或手动整理。

### 3. 启动项目

```bash
# 在项目根目录
pnpm dev:screen
```

访问路由：`/3d-situational-awareness-refactor`

## 🎨 样式规范

### CSS 变量（定义在 common.scss）
```scss
--primary-color: rgba(28, 161, 255, 1);      // 主色
--bg-dark: rgba(9, 22, 40, 1);               // 深色背景
--bg-panel: rgba(20, 53, 118, 1);            // 面板背景
--text-white: rgba(255, 255, 255, 1);        // 白色文字
--success-color: rgba(17, 187, 119, 1);      // 成功色
--warning-color: rgba(255, 128, 11, 1);      // 警告色
--danger-color: rgba(255, 6, 36, 1);         // 危险色
```

### 响应式单位
```scss
width: vw(564);      // 宽度
height: vh(200);     // 高度
font-size: fs(16);   // 字体大小
```

### BEM 命名规范
```scss
.disaster-analysis {
  &__content { }       // 元素
  &__row { }           // 元素
  &--active { }        // 修饰符
}
```

## 🚀 后续工作

### 必须完成
1. **图片资源迁移**：将原始图片复制到新目录并更新引用
2. **真实图片替换**：替换占位图片为设计稿中的实际图片
3. **API 对接**：实现真实数据接口对接

### 建议优化
1. **3D 地图集成**：接入 Cesium 或 Mapbox GL JS
2. **视频流接入**：实现真实视频流播放
3. **动画效果**：添加过渡动画和交互反馈
4. **性能优化**：按需加载、虚拟滚动等
5. **单元测试**：编写组件单元测试

## 📝 组件使用示例

### 使用 DataField 组件
```vue
<DataField
  label="灾害类型"
  value="边坡垮塌"
  icon="path/to/icon.png"
  color-type="danger"
/>
```

### 使用 ActionButton 组件
```vue
<ActionButton
  text="一键启动"
  type="primary"
  size="medium"
  icon="path/to/icon.png"
  @click="handleClick"
/>
```

### 使用 PanelHeader 组件
```vue
<PanelHeader title="快速感知" subtitle="「灾害分析」">
  <template #extra>
    <button>额外操作</button>
  </template>
</PanelHeader>
```

## 🔍 对比原始代码

### 原始代码片段（不可维护）
```vue
<div class="group_3 flex-col">
  <div class="section_1 flex-row">
    <div class="block_1 flex-row justify-between">
      <img class="thumbnail_1" src="..." />
      <span class="text_1">返回驾驶舱</span>
    </div>
  </div>
</div>
```

### 重构后代码（清晰可维护）
```vue
<PageHeader @back="handleBack">
  <template #left>
    <button class="back-btn">
      <img class="back-icon" src="..." />
      <span class="back-text">返回驾驶舱</span>
    </button>
  </template>
</PageHeader>
```

## 📊 重构统计

| 指标 | 改进前 | 改进后 | 提升 |
|------|--------|--------|------|
| 单文件行数 | 792 行 | < 200 行/组件 | 75% ↓ |
| 组件数量 | 1 个 | 20+ 个 | - |
| 样式可读性 | 低 | 高 | 显著提升 |
| 代码可维护性 | 差 | 优 | 显著提升 |
| 响应式支持 | 无 | 完整 | 新增 |

## 👥 团队协作建议

1. **组件开发**：每个组件由独立开发者维护
2. **样式规范**：严格遵循 BEM 命名和响应式单位
3. **代码审查**：确保组件职责单一，可复用性高
4. **文档更新**：新增组件或修改 API 时及时更新文档

## 📞 联系方式

如有问题或建议，请联系项目负责人。

---

**重构完成日期**：2025-11-14
**重构版本**：v1.0.0
