feat(borrow): 全局待办强提醒(接收人不再处于盲区)

新增无渲染组件 PendingTransferNotifier,挂在 Layout(路由切换常驻、且只在
已登录区域渲染,天然保证「有 token 才查」)。

UI
----
ElNotification,type=warning、duration=0(不自动关闭,须用户处理或手动点掉):
  标题:待办通知:借库转交
  内容:您有 X 件物品等待接收确认,请及时处理。【去处理 >】
点击【去处理】关闭通知并 router.push('/operation/records')(借还记录页)。
message 用 VNode 构造而非 dangerouslyUseHTMLString —— 不必把数量拼进 HTML 字符串。

防骚扰(两道)
----
· 会话级去重:sessionStorage 记「上次已提醒过的数量」,只有数量**变化**才再弹。
  用 sessionStorage 而非 Pinia —— 前者跨刷新存活,后者会重置,刷新即轰炸。
· 数量归零时清掉记录,下次新转交能重新提醒。

★ 加了 2 分钟低频轮询(超出需求所写,但需求目标需要它):
  需求只要求「初始化时查一次」,而 SPA 只在首次进入时初始化 —— 已打开页面的
  用户永远收不到提醒,与「第一时间响应」的目标相悖。有去重逻辑兜底,
  轮询不会造成重复打扰。不需要的话删掉定时器即可。

错误一律静默:提醒是锦上添花,不能因接口抖动弹错误框刷屏。

验证:去重状态机用 node 复刻验证 —— 3→2→1 各弹一次,刷新与轮询均不重复,
归零后再来新转交能重新提醒。
This commit is contained in:
yueli
2026-09-17 10:30:13 +08:00
parent 1c58789fd9
commit 2c732a9a3a
3 changed files with 121 additions and 0 deletions

View File

@ -8,6 +8,10 @@
<!-- 全局规格连号助手 -->
<SpecHelper />
<!-- 全局待办强提醒:借库转交的接收人若不来查看,责任会一直悬空。
Layout 常驻(路由切换不卸载),轮询定时器放这里最稳。 -->
<PendingTransferNotifier />
</div>
</template>
@ -15,6 +19,7 @@
import Sidebar from './components/Sidebar/index.vue'
import AppMain from './components/AppMain.vue'
import SpecHelper from '@/components/SpecHelper/index.vue'
import PendingTransferNotifier from '@/components/PendingTransferNotifier/index.vue'
</script>
<style scoped>