Files
smart_grid_iot/.trae/specs/make-alarm-siren-draggable/spec.md
T

3.2 KiB
Raw Blame History

报警灯可拖动 + 取消重置报警提示 Spec

Why

上一版升级(upgrade-alarm-monitor-alert)中悬浮立体警灯固定右上角、带「重置报警提示」按钮;用户希望警灯可鼠标自由拖动(位置跨刷新记忆),并取消重置报警提示按钮。

What Changes

  • 前端 AlarmSirenLight.vue:
    • 警灯改为可鼠标拖动:鼠标按下拖动、松开停驻;初始默认位置为右上角(现 fixed top:120px/right:24px),拖动后位置经 localStorage 记忆(刷新浏览器后停在拖动处)。
    • 拖动与点击跳转区分:拖动位移超过阈值(约 5px)视为拖动不跳转;未拖动视为点击,保留「不在 /device/alarm 则跳转」行为。
    • 移除「重置报警提示」按钮及其逻辑(resetAlarmPrompt/按钮模板/相关 tooltip);notifiedIds 已通知集合保留(去重即时响仍需),仅删除清空入口。
  • 布局挂载(layouts/index.vue)、后端接口、触发模型、警笛逻辑均不变。

Impact

明确假设

  1. 拖动范围:任意位置均可停驻(fixed 定位,拖动后以 left/top 定位);跨页面由全局组件天然保持,刷新由 localStorage 恢复。
  2. localStorage key:alarm-siren-pos,存 { left, top }(px);读取异常或首次进入用默认右上角。
  3. 点击语义:警灯本体点击仍跳转 /device/alarm(若不在该页);拖动过程不触发跳转。

ADDED Requirements

Requirement: 报警灯可拖动

系统 SHALL 允许用户用鼠标拖动悬浮警灯到任意位置,位置跨刷新记忆。

Scenario: 拖动警灯

  • WHEN 用户在任意页面按住警灯并移动鼠标
  • THEN 警灯跟随鼠标移动,松开后停驻在当前位置,且不触发页面跳转

Scenario: 刷新后位置保持

  • WHEN 用户刷新浏览器或重新登录
  • THEN 警灯显示在上次拖动停留的位置;首次使用时显示在默认右上角

Scenario: 点击仍可跳转

  • WHEN 用户点击警灯(未拖动),且当前不在 /device/alarm
  • THEN 跳转到设备报警监控页面

MODIFIED Requirements

Requirement: 悬浮警灯位置与重置按钮(原「固定右上角 + 重置报警提示」)

原实现为 fixed 右上角(top:120px/right:24px)固定位置,警灯旁有「重置报警提示」按钮(清空已通知集合重新触发)。现修改为:警灯可拖动且位置跨刷新记忆;移除「重置报警提示」按钮及其清空逻辑(已通知集合仅在页面生命周期内累积去重)。

REMOVED Requirements

Requirement: 「重置报警提示」按钮

Reason: 用户明确取消该功能。 Migration: 删除按钮模板、resetAlarmPrompt() 函数与相关样式/tooltip;notifiedIds 集合与即时响去重逻辑保留,不再提供清空入口。