feat: 完成P6-P8前端能力闭环(V3,D2,D3,B3)

这个提交包含在:
2026-02-10 11:28:51 +08:00
父节点 6bc09f557b
当前提交 4e5a7793fe
共修改 14 个文件,包含 1151 行新增和 62 行删除
+60
查看文件
@@ -0,0 +1,60 @@
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)}`);
}