From e4ab4bb02b18a4978e2fbd8911f066978f69922a Mon Sep 17 00:00:00 2001 From: wangdl Date: Tue, 9 Jun 2026 22:00:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20admin=20audit=20=E2=80=94=20use=20actual?= =?UTF-8?q?=20API=20pattern=20+=20fix=20lazy=20imports?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace non-existent apiGet/apiPost with inline fetch - Fix lazy(() => import()).then() → lazy(() => import().then()) Co-Authored-By: Claude Opus 4.7 --- src/routes/index.tsx | 16 +++++----- src/services/learningAdmin.ts | 56 +++++++++++++++++++++++++---------- 2 files changed, 49 insertions(+), 23 deletions(-) diff --git a/src/routes/index.tsx b/src/routes/index.tsx index a51c596..cf35bf7 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -7,14 +7,14 @@ const UserManagement = lazy(() => import('@/pages/UserManagement')) const MemberManagement = lazy(() => import('@/pages/MemberManagement')) const LearningDashboard = lazy(() => import('@/pages/learning/Dashboard')) -const ReadingEventPage = lazy(() => import('@/pages/learning/DataPages')).then(m => ({ default: m.ReadingEventPage })) -const SessionPage = lazy(() => import('@/pages/learning/DataPages')).then(m => ({ default: m.SessionPage })) -const ProgressPage = lazy(() => import('@/pages/learning/DataPages')).then(m => ({ default: m.ProgressPage })) -const DailyActivityPage = lazy(() => import('@/pages/learning/DataPages')).then(m => ({ default: m.DailyActivityPage })) -const RecordPage = lazy(() => import('@/pages/learning/DataPages')).then(m => ({ default: m.RecordPage })) -const AnomalyPage = lazy(() => import('@/pages/learning/DataPages')).then(m => ({ default: m.AnomalyPage })) -const UserDiagnosePage = lazy(() => import('@/pages/learning/DataPages')).then(m => ({ default: m.UserDiagnosePage })) -const MaterialDiagnosePage = lazy(() => import('@/pages/learning/DataPages')).then(m => ({ default: m.MaterialDiagnosePage })) +const ReadingEventPage = lazy(() => import('@/pages/learning/DataPages').then(m => ({ default: m.ReadingEventPage }))) +const SessionPage = lazy(() => import('@/pages/learning/DataPages').then(m => ({ default: m.SessionPage }))) +const ProgressPage = lazy(() => import('@/pages/learning/DataPages').then(m => ({ default: m.ProgressPage }))) +const DailyActivityPage = lazy(() => import('@/pages/learning/DataPages').then(m => ({ default: m.DailyActivityPage }))) +const RecordPage = lazy(() => import('@/pages/learning/DataPages').then(m => ({ default: m.RecordPage }))) +const AnomalyPage = lazy(() => import('@/pages/learning/DataPages').then(m => ({ default: m.AnomalyPage }))) +const UserDiagnosePage = lazy(() => import('@/pages/learning/DataPages').then(m => ({ default: m.UserDiagnosePage }))) +const MaterialDiagnosePage = lazy(() => import('@/pages/learning/DataPages').then(m => ({ default: m.MaterialDiagnosePage }))) export interface RouteConfig { path: string diff --git a/src/services/learningAdmin.ts b/src/services/learningAdmin.ts index 3bceb55..dde9725 100644 --- a/src/services/learningAdmin.ts +++ b/src/services/learningAdmin.ts @@ -1,4 +1,30 @@ -import { apiGet, apiPost } from './api'; +const BASE = '/api/admin/learning'; + +async function getApi(path: string, params?: Record): Promise { + let url = `${BASE}${path}`; + if (params) { + const qs = Object.entries(params) + .filter(([, v]) => v !== undefined && v !== '') + .map(([k, v]) => `${k}=${encodeURIComponent(v)}`) + .join('&'); + if (qs) url += `?${qs}`; + } + const res = await fetch(url, { headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${localStorage.getItem('admin_access_token') || ''}` } }); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + const json = await res.json(); + return json.data ?? json; +} + +async function postApi(path: string, body?: any): Promise { + const res = await fetch(`${BASE}${path}`, { + method: 'POST', + headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${localStorage.getItem('admin_access_token') || ''}` }, + body: body ? JSON.stringify(body) : undefined, + }); + if (!res.ok) throw new Error(`HTTP ${res.status}`); + const json = await res.json(); + return json.data ?? json; +} export interface DashboardData { overview: { totalEvents: number; todayEvents: number; failedEvents: number; duplicateEvents: number }; @@ -8,18 +34,18 @@ export interface DashboardData { } export const learningAdminAPI = { - getDashboard: () => apiGet('/admin/learning/dashboard'), - getReadingEvents: (params?: Record) => apiGet('/admin/learning/reading-events', params), - getFailedEvents: (params?: Record) => apiGet('/admin/learning/reading-events/failed', params), - getSessions: (params?: Record) => apiGet('/admin/learning/sessions', params), - getProgress: (params?: Record) => apiGet('/admin/learning/progress', params), - getDailyActivities: (params?: Record) => apiGet('/admin/learning/daily-activities', params), - getRecords: (params?: Record) => apiGet('/admin/learning/records', params), - getUserTimeline: (userId: string) => apiGet('/admin/learning/user-timeline', { userId }), - getUserDiagnose: (userId: string) => apiGet('/admin/learning/user-diagnose', { userId }), - getMaterialDiagnose: (materialId: string) => apiGet('/admin/learning/material-diagnose', { materialId }), - getAnomalies: () => apiGet('/admin/learning/anomalies'), - getTemporaryMaterials: (params?: Record) => apiGet('/admin/learning/temporary-materials', params), - recalculate: () => apiPost('/admin/learning/recalculate'), - exportData: (type: string) => apiGet('/admin/learning/export', { type }), + getDashboard: () => getApi('/dashboard'), + getReadingEvents: (params?: Record) => getApi('/reading-events', params), + getFailedEvents: (params?: Record) => getApi('/reading-events/failed', params), + getSessions: (params?: Record) => getApi('/sessions', params), + getProgress: (params?: Record) => getApi('/progress', params), + getDailyActivities: (params?: Record) => getApi('/daily-activities', params), + getRecords: (params?: Record) => getApi('/records', params), + getUserTimeline: (userId: string) => getApi('/user-timeline', { userId }), + getUserDiagnose: (userId: string) => getApi('/user-diagnose', { userId }), + getMaterialDiagnose: (materialId: string) => getApi('/material-diagnose', { materialId }), + getAnomalies: () => getApi('/anomalies'), + getTemporaryMaterials: (params?: Record) => getApi('/temporary-materials', params), + recalculate: () => postApi('/recalculate'), + exportData: (type: string) => getApi('/export', { type }), };