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) */