import api from "./api"; import type { TaskResponse, TaskCompleteResponse, TaskTransferResponse, TaskListResponse, ProductScanResponse, TaskRejectPayload, TaskTransferPayload, } 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 { const { data } = await api.get(`/tasks/${taskId}`); return data; } /** 获取任务列表(可按产品筛选) */ export async function listTasks(productId?: string): Promise { const params = productId ? { product_id: productId } : {}; const { data } = await api.get("/tasks/", { params }); return data; } /** 创建子任务 */ export async function createSubtask( parentTaskId: string, payload: SubtaskCreatePayload ): Promise { const { data } = await api.post( `/tasks/${parentTaskId}/subtasks`, payload ); return data; } /** 完成任务 + 转交(旧版单步) */ export async function completeTask( taskId: string, payload: TaskCompletePayload ): Promise { const { data } = await api.post( `/tasks/${taskId}/complete`, payload ); return data; } // ============================================================ // 新版核心业务 API(重构后) // ============================================================ /** * 获取产品全景任务树 — 用于十字矩阵树状图。 * 对应后端 GET /api/v1/products/scan/{serialNumber} */ export async function getTaskTree( serialNumber: string ): Promise { const { data } = await api.get( `/products/scan/${encodeURIComponent(serialNumber)}` ); return data; } /** * 确认接收任务 — PENDING → WIP。 * 对应后端 POST /api/v1/tasks/{taskId}/receive */ export async function receiveTask(taskId: string): Promise { const { data } = await api.post(`/tasks/${taskId}/receive`); return data; } /** * 品质驳回 — → REJECTED,后端自动创建返工任务。 * 对应后端 POST /api/v1/tasks/{taskId}/reject */ export async function rejectTask( taskId: string, reason: string ): Promise { const { data } = await api.post( `/tasks/${taskId}/reject`, { reason } satisfies TaskRejectPayload ); return data; } /** * 完工裂变转交 — → COMPLETED,批量创建下家任务。 * 对应后端 POST /api/v1/tasks/{taskId}/transfer */ export async function transferTask( taskId: string, nextAssignees: string[], nextTaskName: string, note?: string ): Promise { const { data } = await api.post( `/tasks/${taskId}/transfer`, { next_assignees: nextAssignees, next_task_name: nextTaskName, note, } satisfies TaskTransferPayload ); return data; }