From 2d827bdbc722f849e10af2759df9f09a2eda280e Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 16 Jan 2026 15:09:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=9A=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E5=88=86=E6=9E=90API=E6=8E=A5=E5=8F=A3=E5=88=B0analytics.ts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/api/analytics.ts | 86 +++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) diff --git a/frontend/src/api/analytics.ts b/frontend/src/api/analytics.ts index ca268a0..10b5e71 100644 --- a/frontend/src/api/analytics.ts +++ b/frontend/src/api/analytics.ts @@ -412,3 +412,89 @@ export const getDesignerDeductionDetails = async ( }; }; +// ==================== 多维度分析类型 ==================== + +export interface CategoryAnalysis { + categoryId: number; + categoryName: string; + totalTasks: number; + completedTasks: number; + inProgressTasks: number; + pendingTasks: number; + totalScore: number; + completionRate: number; + totalQuantity: number; +} + +export interface BrandAnalysis { + brandId: number; + brandName: string; + totalTasks: number; + completedTasks: number; + inProgressTasks: number; + totalScore: number; + completionRate: number; + totalQuantity: number; +} + +export interface DeptAnalysis { + deptId: number; + deptName: string; + totalTasks: number; + completedTasks: number; + inProgressTasks: number; + pendingTasks: number; + totalScore: number; + completionRate: number; + totalQuantity: number; + avgCompletionHours?: number; +} + +export interface PlatformAnalysis { + platformId: number; + platformName: string; + totalTasks: number; + completedTasks: number; + inProgressTasks: number; + totalScore: number; + completionRate: number; + totalQuantity: number; +} + +export interface DimensionAnalysis { + categoryAnalysis: CategoryAnalysis[]; + brandAnalysis: BrandAnalysis[]; + receivingDeptAnalysis: DeptAnalysis[]; + demandDeptAnalysis: DeptAnalysis[]; + platformAnalysis: PlatformAnalysis[]; +} + +/** + * 获取多维度分析数据 + */ +export const getDimensionAnalysis = async ( + dateRange: string = 'month', + month?: string +): Promise => { + const params: any = { dateRange }; + if (month) params.month = month; + + const response = await request.get('/analytics/dimension-analysis', { params }); + + if (response && typeof response === 'object') { + if ('data' in response && response.data !== undefined && response.data !== null) { + return response.data as DimensionAnalysis; + } + if ('categoryAnalysis' in response || 'brandAnalysis' in response) { + return response as unknown as DimensionAnalysis; + } + } + + return { + categoryAnalysis: [], + brandAnalysis: [], + receivingDeptAnalysis: [], + demandDeptAnalysis: [], + platformAnalysis: [] + }; +};