feat: 建立前端 TS 类型系统与 API 请求服务层
This commit is contained in:
64
frontend/src/services/taskApi.ts
Normal file
64
frontend/src/services/taskApi.ts
Normal file
@ -0,0 +1,64 @@
|
||||
import api from "./api";
|
||||
import type {
|
||||
TaskResponse,
|
||||
TaskCompleteResponse,
|
||||
TaskListResponse,
|
||||
} from "../types/api";
|
||||
|
||||
// ============================================================
|
||||
// 请求体类型
|
||||
// ============================================================
|
||||
|
||||
export interface SubtaskCreatePayload {
|
||||
task_name: string;
|
||||
assignee_id: string | null;
|
||||
notify_parent_on_complete: boolean;
|
||||
}
|
||||
|
||||
export interface TaskCompletePayload {
|
||||
operator_id: string | null;
|
||||
next_assignee_id: string | null;
|
||||
next_task_name: string | null;
|
||||
remark: string | null;
|
||||
}
|
||||
|
||||
// ============================================================
|
||||
// API 方法
|
||||
// ============================================================
|
||||
|
||||
/** 获取任务详情 — 递归包含子任务树 */
|
||||
export async function getTask(taskId: string): Promise<TaskResponse> {
|
||||
const { data } = await api.get<TaskResponse>(`/tasks/${taskId}`);
|
||||
return data;
|
||||
}
|
||||
|
||||
/** 获取任务列表(可按产品筛选) */
|
||||
export async function listTasks(productId?: string): Promise<TaskListResponse> {
|
||||
const params = productId ? { product_id: productId } : {};
|
||||
const { data } = await api.get<TaskListResponse>("/tasks/", { params });
|
||||
return data;
|
||||
}
|
||||
|
||||
/** 创建子任务 */
|
||||
export async function createSubtask(
|
||||
parentTaskId: string,
|
||||
payload: SubtaskCreatePayload
|
||||
): Promise<TaskResponse> {
|
||||
const { data } = await api.post<TaskResponse>(
|
||||
`/tasks/${parentTaskId}/subtasks`,
|
||||
payload
|
||||
);
|
||||
return data;
|
||||
}
|
||||
|
||||
/** 完成任务 + 转交 */
|
||||
export async function completeTask(
|
||||
taskId: string,
|
||||
payload: TaskCompletePayload
|
||||
): Promise<TaskCompleteResponse> {
|
||||
const { data } = await api.post<TaskCompleteResponse>(
|
||||
`/tasks/${taskId}/complete`,
|
||||
payload
|
||||
);
|
||||
return data;
|
||||
}
|
||||
Reference in New Issue
Block a user