Files
if.u.clients.web/src/apis/people.ts

199 lines
5.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 人员管理相关 API
import { get, post, del, put } from './request';
import { API_ENDPOINTS } from './config';
import type {
PostPeopleRequest,
GetPeoplesParams,
People,
ApiResponse,
PaginatedResponse
} from './types';
/**
* 创建人员信息
* @param people 人员信息对象
* @returns Promise<ApiResponse>
*/
export async function createPeople(people: People): Promise<ApiResponse> {
const requestData: PostPeopleRequest = { people };
console.log('创建人员请求数据:', requestData);
// 创建接口改为 /people
return post<ApiResponse>(API_ENDPOINTS.PEOPLE, requestData);
}
/**
* 查询人员列表
* @param params 查询参数
* @returns Promise<ApiResponse<People[]>>
*/
export async function getPeoples(params?: GetPeoplesParams): Promise<ApiResponse<People[]>> {
return get<ApiResponse<People[]>>(API_ENDPOINTS.PEOPLES, params);
}
/**
* 搜索人员
* @param searchText 搜索关键词
* @param topK 返回结果数量默认5
* @returns Promise<ApiResponse<People[]>>
*/
export async function searchPeoples(
searchText: string,
topK = 5
): Promise<ApiResponse<People[]>> {
const params: GetPeoplesParams = {
search: searchText,
top_k: topK,
};
return get<ApiResponse<People[]>>(API_ENDPOINTS.PEOPLES, params);
}
/**
* 按条件筛选人员
* @param filters 筛选条件
* @returns Promise<ApiResponse<People[]>>
*/
export async function filterPeoples(filters: {
name?: string;
gender?: string;
age?: number;
height?: number;
marital_status?: string;
}): Promise<ApiResponse<People[]>> {
const params: GetPeoplesParams = {
...filters,
limit: 50, // 默认返回50条
};
return get<ApiResponse<People[]>>(API_ENDPOINTS.PEOPLES, params);
}
/**
* 分页获取人员列表
* @param page 页码从1开始
* @param pageSize 每页数量默认10
* @param filters 可选的筛选条件
* @returns Promise<ApiResponse<PaginatedResponse<People>>>
*/
export async function getPeoplesPaginated(
page = 1,
pageSize = 10,
filters?: Partial<GetPeoplesParams>
): Promise<ApiResponse<PaginatedResponse<People>>> {
const params: GetPeoplesParams = {
...filters,
limit: pageSize,
offset: (page - 1) * pageSize,
};
const response = await get<ApiResponse<People[]>>(API_ENDPOINTS.PEOPLES, params);
// 将响应转换为分页格式
const paginatedResponse: PaginatedResponse<People> = {
items: response.data || [],
total: response.data?.length || 0, // 注意:实际项目中应该从后端获取总数
limit: pageSize,
offset: (page - 1) * pageSize,
};
return {
...response,
data: paginatedResponse,
};
}
/**
* 删除人员信息
* @param peopleId 人员ID
* @returns Promise<ApiResponse>
*/
export async function deletePeople(peopleId: string): Promise<ApiResponse> {
return del<ApiResponse>(API_ENDPOINTS.PEOPLE_BY_ID(peopleId));
}
/**
* 更新人员信息
* @param peopleId 人员ID
* @param people 人员信息对象
* @returns Promise<ApiResponse>
*/
export async function updatePeople(peopleId: string, people: People): Promise<ApiResponse> {
const requestData: PostPeopleRequest = { people };
return put<ApiResponse>(API_ENDPOINTS.PEOPLE_BY_ID(peopleId), requestData);
}
/**
* 添加或更新人员备注
* @param peopleId 人员ID
* @param content 备注内容
* @returns Promise<ApiResponse>
*/
export async function addOrUpdateRemark(peopleId: string, content: string): Promise<ApiResponse> {
return post<ApiResponse>(API_ENDPOINTS.PEOPLE_REMARK_BY_ID(peopleId), { content });
}
/**
* 删除人员备注
* @param peopleId 人员ID
* @returns Promise<ApiResponse>
*/
export async function deleteRemark(peopleId: string): Promise<ApiResponse> {
return del<ApiResponse>(API_ENDPOINTS.PEOPLE_REMARK_BY_ID(peopleId));
}
/**
* 批量创建人员信息
* @param peopleList 人员信息数组
* @returns Promise<ApiResponse[]>
*/
export async function createPeoplesBatch(
peopleList: People[]
): Promise<ApiResponse[]> {
const promises = peopleList.map(people => createPeople(people));
return Promise.all(promises);
}
/**
* 高级搜索人员
* @param options 搜索选项
* @returns Promise<ApiResponse<People[]>>
*/
export async function advancedSearchPeoples(options: {
searchText?: string;
filters?: {
name?: string;
gender?: string;
ageRange?: { min?: number; max?: number };
heightRange?: { min?: number; max?: number };
marital_status?: string;
};
pagination?: {
page?: number;
pageSize?: number;
};
topK?: number;
}): Promise<ApiResponse<People[]>> {
const { searchText, filters = {}, pagination = {}, topK = 10 } = options;
const { page = 1, pageSize = 10 } = pagination;
const params: GetPeoplesParams = {
search: searchText,
name: filters.name,
gender: filters.gender,
marital_status: filters.marital_status,
limit: pageSize,
offset: (page - 1) * pageSize,
top_k: topK,
};
// 处理年龄范围(这里简化处理,实际可能需要后端支持范围查询)
if (filters.ageRange?.min !== undefined) {
params.age = filters.ageRange.min;
}
// 处理身高范围(这里简化处理,实际可能需要后端支持范围查询)
if (filters.heightRange?.min !== undefined) {
params.height = filters.heightRange.min;
}
return get<ApiResponse<People[]>>(API_ENDPOINTS.PEOPLES, params);
}