library-picturebook-activity/frontend/src/api/ai-3d.ts

118 lines
2.4 KiB
TypeScript
Raw Normal View History

2026-01-13 14:01:17 +08:00
import request from "@/utils/request";
import type { PaginationParams, PaginationResponse } from "@/types/api";
// ==================== AI 3D 任务相关类型 ====================
/**
* AI 3D
*/
export type AI3DTaskStatus =
| "pending"
| "processing"
| "completed"
| "failed"
| "timeout";
/**
* AI 3D
*/
export type AI3DInputType = "text" | "image";
/**
* AI 3D
*/
export interface AI3DTask {
id: number;
tenantId: number;
userId: number;
inputType: AI3DInputType;
inputContent: string;
status: AI3DTaskStatus;
resultUrl?: string;
previewUrl?: string;
2026-01-13 16:41:12 +08:00
// 多结果支持文生3D会生成4个不同角度的模型
resultUrls?: string[];
previewUrls?: string[];
2026-01-13 14:01:17 +08:00
errorMessage?: string;
externalTaskId?: string;
retryCount: number;
createTime: string;
completeTime?: string;
}
2026-01-14 14:48:35 +08:00
/**
*
*/
export type AI3DGenerateType = "Normal" | "LowPoly" | "Geometry" | "Sketch";
2026-01-13 14:01:17 +08:00
/**
*
*/
export interface CreateAI3DTaskParams {
inputType: AI3DInputType;
inputContent: string;
2026-01-14 14:48:35 +08:00
/** 模型生成类型Normal-带纹理, LowPoly-低多边形, Geometry-白模, Sketch-草图 */
generateType?: AI3DGenerateType;
/** 模型面数10000-1500000默认500000 */
faceCount?: number;
2026-01-13 14:01:17 +08:00
}
/**
*
*/
export interface QueryAI3DTaskParams extends PaginationParams {
status?: AI3DTaskStatus;
}
/**
*
*/
export interface AI3DTaskListResponse {
list: AI3DTask[];
total: number;
page: number;
pageSize: number;
}
// ==================== API 接口 ====================
/**
*
* POST /api/ai-3d/generate
*/
export function createAI3DTask(data: CreateAI3DTaskParams) {
return request.post<AI3DTask>("/ai-3d/generate", data);
}
/**
*
* GET /api/ai-3d/tasks
*/
export function getAI3DTasks(params?: QueryAI3DTaskParams) {
return request.get<AI3DTaskListResponse>("/ai-3d/tasks", { params });
}
/**
*
* GET /api/ai-3d/tasks/:id
*/
export function getAI3DTask(id: number) {
return request.get<AI3DTask>(`/ai-3d/tasks/${id}`);
}
/**
*
* POST /api/ai-3d/tasks/:id/retry
*/
export function retryAI3DTask(id: number) {
return request.post<AI3DTask>(`/ai-3d/tasks/${id}/retry`);
}
/**
*
* DELETE /api/ai-3d/tasks/:id
*/
export function deleteAI3DTask(id: number) {
return request.delete(`/ai-3d/tasks/${id}`);
}