2026-07-14 17:58:09 +08:00

107 lines
4.3 KiB
TypeScript

import { apiRequest } from "@/shared/api/request";
import { API_ENDPOINTS, API_OPERATIONS, apiEndpointPath } from "@/shared/api/generated/endpoints";
import type {
AdminUserDto,
ApiPage,
CreateUserResultDto,
EntityId,
FinanceScopeAssignmentDto,
PageQuery,
ResetPasswordResultDto,
UserFormPayload,
UserFinanceScopeDto,
UserAppScopeDto,
UserStatus,
UserUpdatePayload
} from "@/shared/api/types";
export function listUsers(query?: PageQuery): Promise<ApiPage<AdminUserDto>> {
return apiRequest<ApiPage<AdminUserDto>>(apiEndpointPath(API_OPERATIONS.listUsers), { query });
}
export function getUser(id: EntityId): Promise<AdminUserDto> {
return apiRequest<AdminUserDto>(apiEndpointPath(API_OPERATIONS.getUser, { id }));
}
export function createUser(payload: UserFormPayload): Promise<CreateUserResultDto> {
const endpoint = API_ENDPOINTS.createUser;
return apiRequest<CreateUserResultDto, UserFormPayload>(apiEndpointPath(API_OPERATIONS.createUser), {
body: payload,
method: endpoint.method
});
}
export function updateUser(id: EntityId, payload: UserUpdatePayload): Promise<AdminUserDto> {
const endpoint = API_ENDPOINTS.updateUser;
return apiRequest<AdminUserDto, UserUpdatePayload>(apiEndpointPath(API_OPERATIONS.updateUser, { id }), {
body: payload,
method: endpoint.method
});
}
export function updateUserStatus(id: EntityId, status: UserStatus): Promise<AdminUserDto> {
const endpoint = API_ENDPOINTS.updateUserStatus;
return apiRequest<AdminUserDto, { status: UserStatus }>(apiEndpointPath(API_OPERATIONS.updateUserStatus, { id }), {
body: { status },
method: endpoint.method
});
}
export function resetUserPassword(id: EntityId, password?: string): Promise<ResetPasswordResultDto> {
const endpoint = API_ENDPOINTS.resetUserPassword;
return apiRequest<ResetPasswordResultDto, { password?: string }>(apiEndpointPath(API_OPERATIONS.resetUserPassword, { id }), {
body: { password },
method: endpoint.method
});
}
export function batchUpdateUserStatus(ids: EntityId[], status: UserStatus): Promise<unknown> {
const endpoint = API_ENDPOINTS.batchUpdateUserStatus;
return apiRequest<unknown, { ids: EntityId[]; status: UserStatus }>(apiEndpointPath(API_OPERATIONS.batchUpdateUserStatus), {
body: { ids, status },
method: endpoint.method
});
}
export function exportUsers(query?: PageQuery): Promise<Response> {
return apiRequest(apiEndpointPath(API_OPERATIONS.exportUsers), { query, raw: true });
}
export interface FinanceScopeCatalogDto {
all?: boolean;
apps?: Array<{ appCode: string; appName?: string; logoUrl?: string }>;
regions?: Array<{ appCode: string; countries?: string[]; name?: string; regionCode?: string; regionId: number }>;
countries?: Array<{ appCode: string; countryCode: string; countryDisplayName?: string; countryName?: string; regionId?: number }>;
scopes?: UserFinanceScopeDto[];
}
export function listUserFinanceScopes(id: EntityId): Promise<{ items: UserFinanceScopeDto[]; total: number }> {
return apiRequest<{ items: UserFinanceScopeDto[]; total: number }>(apiEndpointPath(API_OPERATIONS.listUserFinanceScopes, { id }));
}
export function replaceUserFinanceScopes(id: EntityId, scopes: UserFinanceScopeDto[]): Promise<{ items: UserFinanceScopeDto[]; total: number }> {
return apiRequest<{ items: UserFinanceScopeDto[]; total: number }, { scopes: UserFinanceScopeDto[] }>(apiEndpointPath(API_OPERATIONS.replaceUserFinanceScopes, { id }), {
body: { scopes },
method: "PUT"
});
}
export function getFinanceScopeCatalog(): Promise<FinanceScopeCatalogDto> {
return apiRequest<FinanceScopeCatalogDto>(apiEndpointPath(API_OPERATIONS.getFinanceScope));
}
export function listFinanceScopeAssignments(): Promise<{ items: FinanceScopeAssignmentDto[]; total: number }> {
return apiRequest<{ items: FinanceScopeAssignmentDto[]; total: number }>(apiEndpointPath(API_OPERATIONS.listFinanceScopeAssignments));
}
export function getUserAppScopes(id: EntityId): Promise<UserAppScopeDto> {
return apiRequest<UserAppScopeDto>(apiEndpointPath(API_OPERATIONS.getUserAppScopes, { id }));
}
export function replaceUserAppScopes(id: EntityId, scope: UserAppScopeDto): Promise<UserAppScopeDto> {
return apiRequest<UserAppScopeDto, UserAppScopeDto>(apiEndpointPath(API_OPERATIONS.replaceUserAppScopes, { id }), {
body: scope,
method: "PUT"
});
}