From a5941be9c46159599471cebc6236cd77d7415e1f Mon Sep 17 00:00:00 2001 From: AskaEth Date: Wed, 9 Sep 2026 23:19:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(admin):=20=E6=94=B9=E5=AF=86=E5=90=8E?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E9=9D=A2=E6=9D=BF=E6=B0=B8=E4=B9=85=E3=80=8C?= =?UTF-8?q?=E8=BF=9E=E6=8E=A5=E4=B8=AD=E6=96=AD=E3=80=8D+=20=E9=A1=B6?= =?UTF-8?q?=E9=83=A8=E7=89=88=E6=9C=AC=E5=8F=B7=E5=A4=9A=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=20v?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - /ws 身份在握手时确定,而 startRealtime() 全生命周期只建一次连接;改密会作废 服务端全部会话,服务端以 1008 关闭该连接,前端对 1008 是永久停止重连 (给真鉴权失败设计的)→ 重新登录后无人重启连接,界面一直显示「连接中断」, 只有重开窗口才会用新会话重新握手。 修:新增 restartRealtime(),登录成功与退出登录时各重启一次(同时修掉 「访客浏览后登录,旧连接仍是 guest 身份」的问题);1008 语义保持不变。 - AdminLayout 顶部版本号模板写死 v 前缀,而 serverHealth 已是完整版本串 (dev_0.1.0)→ 显示成 vdev_0.1.0。 新增 web/src/admin/tests/event-realtime.test.ts 锁该行为(临时置空 restartRealtime 会失败);为让 node --test 能加载真实 store,测试解析钩子补 @/ 别名。 --- web/src/admin/layouts/AdminLayout.vue | 4 +- web/src/admin/pages/LoginPage.vue | 2 + web/src/admin/stores/event.ts | 13 ++++ web/src/admin/tests/event-realtime.test.ts | 91 ++++++++++++++++++++++ web/src/shared/tests/resolve.mjs | 18 ++++- 5 files changed, 125 insertions(+), 3 deletions(-) create mode 100644 web/src/admin/tests/event-realtime.test.ts diff --git a/web/src/admin/layouts/AdminLayout.vue b/web/src/admin/layouts/AdminLayout.vue index 821c5b4..98dc99a 100644 --- a/web/src/admin/layouts/AdminLayout.vue +++ b/web/src/admin/layouts/AdminLayout.vue @@ -100,6 +100,8 @@ async function refresh(): Promise { async function logout(): Promise { await auth.logout() + // 会话已失效,旧连接仍是原身份,重连回落到访客态 + data.restartRealtime() toast.info('已退出登录,当前为只读访客视图') void router.push({ name: 'dashboard' }) } @@ -165,7 +167,7 @@ onMounted(async () => { {{ connection.text }} - v{{ data.serverHealth }} + {{ data.serverHealth }}