From 1977810cf24fa36d939cce694e7808347e516259 Mon Sep 17 00:00:00 2001 From: wucm667 Date: Mon, 17 Aug 2026 11:04:50 +0800 Subject: [PATCH] fix(frontend): isolate account helper data loading --- frontend/src/views/admin/AccountsView.vue | 19 +++++++++++++------ .../AccountsView.usageWindowsHint.spec.ts | 15 ++++++++++++++- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/frontend/src/views/admin/AccountsView.vue b/frontend/src/views/admin/AccountsView.vue index cfab5c07e3..982c21b6f5 100644 --- a/frontend/src/views/admin/AccountsView.vue +++ b/frontend/src/views/admin/AccountsView.vue @@ -2454,12 +2454,19 @@ onMounted(async () => { load() loadUpstreamBillingProbeGlobalState() - try { - const [p, g] = await Promise.all([adminAPI.proxies.getAll(), adminAPI.groups.getAll()]) - proxies.value = p - groups.value = g - } catch (error) { - console.error('Failed to load proxies/groups:', error) + const [proxiesResult, groupsResult] = await Promise.allSettled([ + adminAPI.proxies.getAll(), + adminAPI.groups.getAll() + ]) + if (proxiesResult.status === 'fulfilled') { + proxies.value = proxiesResult.value + } else { + console.error('Failed to load proxies:', proxiesResult.reason) + } + if (groupsResult.status === 'fulfilled') { + groups.value = groupsResult.value + } else { + console.error('Failed to load groups:', groupsResult.reason) } window.addEventListener('scroll', handleScroll, true) window.addEventListener('resize', handleViewportResize) diff --git a/frontend/src/views/admin/__tests__/AccountsView.usageWindowsHint.spec.ts b/frontend/src/views/admin/__tests__/AccountsView.usageWindowsHint.spec.ts index 5595363156..9f25d0dcd3 100644 --- a/frontend/src/views/admin/__tests__/AccountsView.usageWindowsHint.spec.ts +++ b/frontend/src/views/admin/__tests__/AccountsView.usageWindowsHint.spec.ts @@ -101,7 +101,10 @@ function mountView() { Pagination: true, ConfirmDialog: true, AccountTableActions: { template: '
' }, - AccountTableFilters: { template: '
' }, + AccountTableFilters: { + props: ['groups'], + template: '
' + }, AccountBulkActionsBar: true, AccountActionMenu: true, ImportDataModal: true, @@ -155,6 +158,16 @@ describe('admin AccountsView usage windows hint', () => { getAllGroups.mockResolvedValue([]) }) + it('keeps groups available when loading proxies fails', async () => { + getAllProxies.mockRejectedValue(new Error('proxy service unavailable')) + getAllGroups.mockResolvedValue([{ id: 7, name: 'production' }]) + + const wrapper = mountView() + await flushPromises() + + expect(wrapper.get('[data-test="account-filters"]').attributes('data-group-count')).toBe('1') + }) + it('renders an explanatory tooltip next to the usage windows column header', async () => { const wrapper = mountView() await flushPromises()