文件
hyb-oa/client/src/api/dashboard.ts
T

61 行
1.8 KiB
TypeScript

import { apiRequestData } from "./http";
export type DashboardQuery = {
dateFrom?: string;
dateTo?: string;
departmentId?: string;
limit?: number;
};
function toQueryString(query: DashboardQuery = {}) {
const params = new URLSearchParams();
if (query.dateFrom) params.set("dateFrom", query.dateFrom);
if (query.dateTo) params.set("dateTo", query.dateTo);
if (query.departmentId) params.set("departmentId", query.departmentId);
if (query.limit != null) params.set("limit", String(query.limit));
const encoded = params.toString();
return encoded ? `?${encoded}` : "";
}
export type DashboardExpenseOverview = {
totalCount: number;
totalAmount: string;
paidCount: number;
paidAmount: string;
reviewingCount: number;
};
export type DashboardTrendPoint = {
date: string;
amount: string;
count: number;
};
export type DashboardTopCategory = {
code: string;
name: string;
amount: string;
count: number;
};
export type DashboardApprovalEfficiency = {
approvedCount: number;
averageHours: number;
};
export async function fetchDashboardOverview(query: DashboardQuery = {}) {
return apiRequestData<DashboardExpenseOverview>(`/api/dashboard/expense-overview${toQueryString(query)}`);
}
export async function fetchDashboardTrends(query: DashboardQuery = {}) {
return apiRequestData<{ points: DashboardTrendPoint[] }>(`/api/dashboard/trends${toQueryString(query)}`);
}
export async function fetchDashboardTopCategories(query: DashboardQuery = {}) {
return apiRequestData<{ items: DashboardTopCategory[] }>(`/api/dashboard/top-categories${toQueryString(query)}`);
}
export async function fetchDashboardApprovalEfficiency(query: DashboardQuery = {}) {
return apiRequestData<DashboardApprovalEfficiency>(`/api/dashboard/approval-efficiency${toQueryString(query)}`);
}