You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

5.5 KiB

Monitor 整页对齐 jcWeb 3 Implementation Plan

For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

Goal:jcWeb 3 整页对齐 /monitor:右侧栏文案、机巢状态弹窗、无人机图传与当前任务、地图工具条/比例尺/绑定虚线。

Architecture: 在现有 MonitorView + Mapbox 能力上增量改。弹窗与任务块本地实现;地图样式切换走 mapStyles + style.load 恢复 layers;绑定线用 line layer。

Tech Stack: Vue 3、Mapbox GL、现有 live API / devicesStore realtime、prototype.css

Spec: docs/superpowers/specs/2026-08-26-monitor-jcweb3-align-design.md


Task 1: 右侧栏文案与飞行/环境对齐

Files:

  • Modify: src/views/MonitorView/MonitorView.vue
  • Modify: src/styles/prototype.css(如需 mission-state / 环境副文案)

Steps:

  1. 环境区:
    • 标题改为「机巢环境」
    • 副文案显示更新时间
    • 字段:舱外温度 / 风速 / 雨量
    • 雨量 helper:有数值 → x mm;否则 bool;都无 → --
  2. 无人机飞行区:
    • 四格文案改为:飞行电量 / 相对高度 / 地速 / 卫星数量
    • 标题旁 mission-state(任务中/停放待命等),基于 statusClass / status
  3. 关联:绑定机巢所属机巢(按钮仍 select(parent)
  4. 无人机 eyebrow 可改为「无人机设备」(对齐原型)

Acceptance:

  • 机巢环境三字段文案对齐
  • 无人机飞行四格文案对齐且速度一位小数
  • 所属机巢可切换

Task 2: 机巢状态弹窗替换「查看详情」跳转

Files:

  • Modify: src/views/MonitorView/MonitorView.vue
  • Modify: src/styles/prototype.css(dock-status-dialog 样式,可从 jcWeb 3 迁移精简版)

Steps:

  1. 新增弹窗状态 dockStatusOpen
  2. 运行状态旁「查看详情」→ openDockStatus()不再 router.push
  3. header maximize 保留 goDetail() 进设备详情(职责分离)
  4. 弹窗结构对齐原型:
    • header:机巢运行状态 + 名称 + 关闭
    • 摘要格:设备连接 / 无人机状态 / 舱门 / 充电 / 控制模式 / 当前告警
    • 明细板:舱门/归中/系统状态(有 realtime 则高亮 active)
  5. 复用已有 rt / doorValue / chargeText / centering 映射
  6. 遮罩点击与 Escape 关闭

Acceptance:

  • 点「查看详情」开弹窗,不跳路由
  • maximize 仍可进 /device/:id
  • 缺字段不造假

Task 3: 无人机视频区

Files:

  • Modify: src/views/MonitorView/MonitorView.vue
  • Modify: src/components/LivePlayer.vue(仅当需透传 label)

Steps:

  1. 视频 section 从 v-if="!isDrone" 改为机巢/无人机都显示
  2. :camera-label="isDrone ? '无人机图传' : '机巢摄像头'"
  3. live join 逻辑:无人机选中时用所属机巢 dockId 拉流(现有 live API 以 dock 为维度);切换选中关闭旧 session
  4. 无流保持待机壳

Acceptance:

  • 选中无人机可见视频区,标签为「无人机图传」
  • 切换设备时 session 正确切换/关闭

Task 4: 当前任务块

Files:

  • Modify: src/views/MonitorView/MonitorView.vue
  • Modify: src/styles/prototype.css(mission-progress 样式,可参考 jcWeb 3)

Steps:

  1. 无人机态在飞行状态与控制区之间插入 mission-progress
  2. 从 realtime / record 读取:
    • missionName / mission
    • 进度、航点、时长、距离(有则显示,无则 --
  3. 无任务名/无进行中任务 → 空态「暂无任务」
  4. 「任务详情」:有 task id 则跳任务页;否则 toast 或 disabled
  5. 1080p 密度规则补 mission 块间距

Acceptance:

  • 有数据展示进度信息;无数据空态
  • 不引入新 API 字段协议

Task 5: 地图工具条、比例尺、绑定虚线

Files:

  • Modify: src/views/MonitorView/MonitorView.vue
  • Modify: src/core/mapHelper.js 和/或 src/layout/MapLayer.vue(如需 setStyle 封装)
  • Modify: src/config/map.js(如需 export 双样式)
  • Modify: src/styles/prototype.css(toolbar / scale 定位)

Steps:

  1. 地图层叠加 UI:
    • 左上:卫星 / 地图 + fitAll 按钮
    • 右下:动态 map-scale 文案
  2. 样式切换:
    • map.setStyle(mapStyles.satelliteMap | streetMap)
    • 监听 style.load 后重建 marker images / symbol layers / binding line source
  3. fitAll:
    • 有选中:clearSelection + resetOverviewCamera
    • 无选中:fitBounds 全部有效坐标
  4. 绑定虚线 layer:
    • source geojson LineString:选中机巢坐标 ↔ 飞行中子无人机坐标
    • !inDock 且两端坐标有效时 setData;否则空 feature
  5. zoom/move 时更新比例尺估算(简单 zoom→米/公里映射即可)

Acceptance:

  • 卫星/地图切换后点位仍在
  • fitAll 行为正确
  • 选中飞行关系出现虚线;在巢/无坐标不显示
  • 比例尺可见并随缩放变化

Task 6: 浏览器冒烟(1920×1080)

Steps:

  1. mock docks/drones + realtime(含 door/charge/mission/坐标)
  2. 验证:
    • 环境/飞行文案
    • 查看详情弹窗
    • 无人机视频标签
    • 任务块有/无数据
    • 地图切换、fitAll、绑定线、比例尺
    • 右侧栏尽量无外层滚动
  3. 回归:机巢运行态四格、速度一位小数

Acceptance:

  • 上述路径 DOM/截图可证
  • 无控制台致命错误

Execution note

  • 跳过全仓 formatter / 全量测试
  • 不改后端协议
  • 中文 commit
  • 与工作区其他 WIP 隔离提交