feat: 建立前端 TS 类型系统与 API 请求服务层

This commit is contained in:
2026-08-04 17:09:55 +08:00
parent daae052878
commit d18d9dbaac
6 changed files with 162 additions and 0 deletions

View 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;
}