diff --git a/apps/frontend/src/views/DashboardView.vue b/apps/frontend/src/views/DashboardView.vue index 2114bc0..af3fa9d 100644 --- a/apps/frontend/src/views/DashboardView.vue +++ b/apps/frontend/src/views/DashboardView.vue @@ -27,6 +27,7 @@ import { useRouter } from '@/app/router' import StateBlock from '@/components/StateBlock.vue' import { alertClass, cardClass, inputClass, sectionHeaderClass, toneClass } from '@/components/ui' import { Button } from '@/components/ui/button' +import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' import { cronLabel, @@ -58,6 +59,7 @@ const qrRefreshError = ref('') const qrRefreshImage = ref('') const qrRefreshSessionId = ref('') const qrRefreshSucceeded = ref(false) +const qrRefreshDialogOpen = ref(false) let pollTimer: number | undefined let qrRefreshPollTimer: number | undefined @@ -179,9 +181,24 @@ async function cancelQrRefresh(clearFeedback = true) { if (sessionId) await authApi.cancelQRCodeSession(sessionId).catch(() => undefined) } +async function closeQrRefreshDialog() { + qrRefreshDialogOpen.value = false + await cancelQrRefresh() +} + +async function handleQrRefreshDialogOpenChange(open: boolean) { + if (open) { + qrRefreshDialogOpen.value = true + return + } + + await closeQrRefreshDialog() +} + async function requestQrRefresh() { if (!canRefreshToken.value || qrRefreshLoading.value) return + qrRefreshDialogOpen.value = true const alias = auth.state.user?.alias?.trim() if (!alias) { qrRefreshError.value = '当前用户缺少用户名,无法创建扫码刷新会话。' @@ -443,63 +460,53 @@ onBeforeUnmount(() => { {{ qrRefreshLoading ? '创建中' : '扫码刷新' }} -
-
-
-
扫码刷新授权
-
- {{ qrRefreshInfo }} -
-
- -
-
- {{ qrRefreshError }} -
-
授权刷新成功
-
- QQ 授权刷新二维码 -
-
- - -
-
+ + + + + + 扫码刷新授权 + + +
+
+ {{ qrRefreshInfo }} +
+
+ {{ qrRefreshError }} +
+
授权刷新成功
+
+ QQ 授权刷新二维码 +
+ +
+ + +
+
+
+
+
diff --git a/tests/test_frontend_architecture.py b/tests/test_frontend_architecture.py index 89e5889..eba62c8 100644 --- a/tests/test_frontend_architecture.py +++ b/tests/test_frontend_architecture.py @@ -101,3 +101,12 @@ def test_dashboard_refresh_uses_qr_api_instead_of_login_redirect() -> None: assert "authApi.getQRCodeStatus" in dashboard assert "authApi.cancelQRCodeSession" in dashboard assert "router.navigate('/login')" not in dashboard + + +def test_dashboard_qr_refresh_uses_dialog() -> None: + dashboard = (SRC_ROOT / "views" / "DashboardView.vue").read_text(encoding="utf-8") + + assert "@/components/ui/dialog" in dashboard + assert "qrRefreshDialogOpen" in dashboard + assert "