feat(frontend): 更新 TS 类型定义与 API 服务层,对接后端重构接口

types/api.ts:
- TaskSummary/TaskResponse 新增 is_rework, reject_reason, received_at, completed_at 字段
- 新增 TASK_STATUS 常量 (PENDING/WIP/COMPLETED/REJECTED/ARCHIVED)
- 新增 TaskTransferResponse, TaskRejectPayload, TaskTransferPayload 类型
- ProductScanResponse 新增 current_location_id, task_tree 字段

types/admin.ts:
- ProductResponse 新增 current_location_id 字段

services/taskApi.ts:
- 新增 getTaskTree(serialNumber) — 产品全景任务树
- 新增 receiveTask(taskId) — 确认接收
- 新增 rejectTask(taskId, reason) — 品质驳回
- 新增 transferTask(taskId, assignees, name, note?) — 完工裂变转交
This commit is contained in:
2026-08-04 17:30:12 +08:00
parent 340a09007e
commit 2b5e3ae4c3
3 changed files with 110 additions and 2 deletions

View File

@ -2,7 +2,11 @@ import api from "./api";
import type {
TaskResponse,
TaskCompleteResponse,
TaskTransferResponse,
TaskListResponse,
ProductScanResponse,
TaskRejectPayload,
TaskTransferPayload,
} from "../types/api";
// ============================================================
@ -51,7 +55,7 @@ export async function createSubtask(
return data;
}
/** 完成任务 + 转交 */
/** 完成任务 + 转交(旧版单步) */
export async function completeTask(
taskId: string,
payload: TaskCompletePayload
@ -62,3 +66,65 @@ export async function completeTask(
);
return data;
}
// ============================================================
// 新版核心业务 API重构后
// ============================================================
/**
* 获取产品全景任务树 — 用于十字矩阵树状图。
* 对应后端 GET /api/v1/products/scan/{serialNumber}
*/
export async function getTaskTree(
serialNumber: string
): Promise<ProductScanResponse> {
const { data } = await api.get<ProductScanResponse>(
`/products/scan/${encodeURIComponent(serialNumber)}`
);
return data;
}
/**
* 确认接收任务 — PENDING → WIP。
* 对应后端 POST /api/v1/tasks/{taskId}/receive
*/
export async function receiveTask(taskId: string): Promise<TaskResponse> {
const { data } = await api.post<TaskResponse>(`/tasks/${taskId}/receive`);
return data;
}
/**
* 品质驳回 — → REJECTED后端自动创建返工任务。
* 对应后端 POST /api/v1/tasks/{taskId}/reject
*/
export async function rejectTask(
taskId: string,
reason: string
): Promise<TaskResponse> {
const { data } = await api.post<TaskResponse>(
`/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<TaskTransferResponse> {
const { data } = await api.post<TaskTransferResponse>(
`/tasks/${taskId}/transfer`,
{
next_assignees: nextAssignees,
next_task_name: nextTaskName,
note,
} satisfies TaskTransferPayload
);
return data;
}