# 报警灯可拖动 + 取消重置报警提示 Spec ## Why 上一版升级(upgrade-alarm-monitor-alert)中悬浮立体警灯固定右上角、带「重置报警提示」按钮;用户希望警灯可鼠标自由拖动(位置跨刷新记忆),并取消重置报警提示按钮。 ## What Changes - **前端 [AlarmSirenLight.vue](file:///F:/NewProject/鑫潼Git/smart_grid_iot/client/src/components/AlarmSirenLight.vue)**: - 警灯改为**可鼠标拖动**:鼠标按下拖动、松开停驻;初始默认位置为右上角(现 fixed top:120px/right:24px),拖动后位置经 `localStorage` 记忆(刷新浏览器后停在拖动处)。 - 拖动与点击跳转区分:拖动位移超过阈值(约 5px)视为拖动不跳转;未拖动视为点击,保留「不在 /device/alarm 则跳转」行为。 - **移除「重置报警提示」按钮**及其逻辑(resetAlarmPrompt/按钮模板/相关 tooltip);`notifiedIds` 已通知集合保留(去重即时响仍需),仅删除清空入口。 - 布局挂载(layouts/index.vue)、后端接口、触发模型、警笛逻辑均不变。 ## Impact - Affected specs: 设备报警监控报警提示升级(upgrade-alarm-monitor-alert) - Affected code: - [client/src/components/AlarmSirenLight.vue](file:///F:/NewProject/鑫潼Git/smart_grid_iot/client/src/components/AlarmSirenLight.vue)(拖动 + 位置记忆 + 移除重置按钮) ## 明确假设 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` 集合与即时响去重逻辑保留,不再提供清空入口。