feat: collaboration and statistics

This commit is contained in:
gin
2026-05-15 09:19:09 +08:00
parent cdee21ee8e
commit 2757a4fb49
91 changed files with 4504 additions and 1301 deletions
@@ -0,0 +1,206 @@
import { http } from "@/utils/http";
export type SettlementStatusValue =
| "NONE"
| "SETTLED"
| "UNSETTLED"
| "PARTIAL";
export type CollaborationFileType = "GOODS_IMAGE" | "ATTACHMENT";
export interface SettlementStatusDTO {
status: SettlementStatusValue;
label: string;
}
export interface CollaborationRecordListCommand extends BasePageQuery {
brand?: string;
goods?: string;
cooperationPlatform?: string;
purchaseBeginTime?: string;
purchaseEndTime?: string;
}
export interface CollaborationTaskCommand {
releaseDate?: string;
}
export interface CollaborationExpenditureCommand {
spendDate?: string;
amount?: number;
purpose?: string;
}
export interface CollaborationSettlementCommand {
settleDate?: string;
method?: string;
income?: number;
purpose?: string;
}
export interface CollaborationFileCommand {
fileType: CollaborationFileType;
url: string;
fileName?: string;
newFileName?: string;
originalFilename?: string;
}
export interface AddCollaborationRecordCommand {
brand: string;
goods: string;
cooperationPlatform?: string;
imageReturnNum: number;
retainedMethod?: string;
cooperatedMethod?: string;
purchaseMethod?: string;
purchasePrice?: number;
purchaseDate?: string;
purchasePlatform?: string;
deadline?: string;
remuneration?: number;
completeDate?: string;
requirements?: string;
remark?: string;
tasks: CollaborationTaskCommand[];
expenditures: CollaborationExpenditureCommand[];
settlements: CollaborationSettlementCommand[];
files: CollaborationFileCommand[];
}
export interface UpdateCollaborationRecordCommand
extends AddCollaborationRecordCommand {
recordId: number;
}
export interface CollaborationRecordPageResponse {
recordId: number;
brand: string;
goods: string;
cooperationPlatform?: string;
imageReturnNum: number;
retainedMethod?: string;
cooperatedMethod?: string;
purchaseMethod?: string;
purchasePrice?: number;
purchaseDate?: string;
purchasePlatform?: string;
deadline?: string;
remuneration?: number;
completeDate?: string;
requirements?: string;
remark?: string;
tasksNum: number;
completedTasksNum: number;
purchaseSettlementStatus: SettlementStatusDTO;
deliverySettlementStatus: SettlementStatusDTO;
remunerationSettlementStatus: SettlementStatusDTO;
createTime: string;
}
export interface CollaborationRecordDetailResponse
extends CollaborationRecordPageResponse {
tasks: Array<
CollaborationTaskCommand & { taskId?: number; sortOrder?: number }
>;
expenditures: Array<
CollaborationExpenditureCommand & { expenditureId?: number }
>;
settlements: Array<
CollaborationSettlementCommand & { settlementId?: number }
>;
files: Array<
CollaborationFileCommand & { fileId?: number; sortOrder?: number }
>;
}
export interface CollaborationOptionResponse {
type: string;
label: string;
values: string[];
}
export interface CollaborationMonthlyStatisticsResponse {
month: number;
purchasePrice: number;
expenditureAmount: number;
settledRemuneration: number;
settledTotal: number;
}
export interface UploadResponse {
url: string;
fileName: string;
newFileName: string;
originalFilename: string;
}
export const getCollaborationRecordListApi = (
params: CollaborationRecordListCommand
) => {
return http.request<ResponseData<PageDTO<CollaborationRecordPageResponse>>>(
"get",
"/collaboration/record/list",
{ params }
);
};
export const getCollaborationRecordInfoApi = (recordId: number) => {
return http.request<ResponseData<CollaborationRecordDetailResponse>>(
"get",
`/collaboration/record/${recordId}`
);
};
export const addCollaborationRecordApi = (
data: AddCollaborationRecordCommand
) => {
return http.request<ResponseData<void>>("post", "/collaboration/record", {
data
});
};
export const updateCollaborationRecordApi = (
data: UpdateCollaborationRecordCommand
) => {
return http.request<ResponseData<void>>("put", "/collaboration/record", {
data
});
};
export const deleteCollaborationRecordApi = (data: Array<number>) => {
return http.request<ResponseData<void>>("delete", "/collaboration/record", {
params: {
ids: data.toString()
}
});
};
export const getCollaborationOptionsApi = () => {
return http.request<ResponseData<CollaborationOptionResponse[]>>(
"get",
"/collaboration/record/options"
);
};
export const getCollaborationMonthlyStatisticsApi = (year: number) => {
return http.request<ResponseData<CollaborationMonthlyStatisticsResponse[]>>(
"get",
"/collaboration/record/monthly-statistics",
{
params: { year }
}
);
};
export const uploadCollaborationFileApi = (data: FormData) => {
return http.request<ResponseData<UploadResponse>>(
"post",
"/file/upload",
{ data },
{
headers: {
"Content-Type": "multipart/form-data"
}
}
);
};