diff --git a/desktop/src/components/Settings/SettingsLayout.tsx b/desktop/src/components/Settings/SettingsLayout.tsx index 55b5419..96af5ab 100644 --- a/desktop/src/components/Settings/SettingsLayout.tsx +++ b/desktop/src/components/Settings/SettingsLayout.tsx @@ -113,6 +113,9 @@ export function SettingsLayout({ onBack }: SettingsLayoutProps) { case 'saas': return ( SaaS 平台加载失败,请稍后重试} + onError={(err, info) => { + console.error('[Settings] SaaS page render error:', err, info.componentStack); + }} > @@ -120,6 +123,9 @@ export function SettingsLayout({ onBack }: SettingsLayoutProps) { case 'billing': return ( 计费信息加载失败,请稍后重试} + onError={(err, info) => { + console.error('[Settings] Billing page render error:', err, info.componentStack); + }} > diff --git a/desktop/src/lib/saas-relay.ts b/desktop/src/lib/saas-relay.ts index 7149ae3..599cba6 100644 --- a/desktop/src/lib/saas-relay.ts +++ b/desktop/src/lib/saas-relay.ts @@ -16,14 +16,15 @@ export function installRelayMethods(ClientClass: { prototype: any }): void { // --- Relay Task Management --- - /** List relay tasks for the current user */ + /** List relay tasks for the current user (extracts items from paginated response) */ proto.listRelayTasks = async function (this: { request(method: string, path: string, body?: unknown): Promise }, query?: { status?: string; page?: number; page_size?: number }): Promise { const params = new URLSearchParams(); if (query?.status) params.set('status', query.status); if (query?.page) params.set('page', String(query.page)); if (query?.page_size) params.set('page_size', String(query.page_size)); const qs = params.toString(); - return this.request('GET', `/api/v1/relay/tasks${qs ? '?' + qs : ''}`); + const result = await this.request<{ items: RelayTaskInfo[]; total: number }>('GET', `/api/v1/relay/tasks${qs ? '?' + qs : ''}`); + return Array.isArray(result) ? result : (result?.items ?? []); }; /** Retry a failed relay task (admin only) */