feat(generate): 生成管线改为异步,前端接入轮询进度
后端: - POST /api/v1/generate 改为异步模式,立即返回 taskId - 管线在后台 goroutine 执行,状态通过 GET /tasks/:taskId 轮询 - 任务状态流转: pending → running → saving → completed/failed 前端: - generation store: submit 后每 2s 轮询 getTask,完成时自动 getAssets - GeneratePage: 实时显示轮询状态文本 + 进度条 - ResultPage: 挂载时轮询任务,未完成显示骨架屏+进度,完成自动加载素材 - Types: Task.status 增加 submitted / saving 状态
This commit is contained in:
@@ -19,13 +19,6 @@ export async function getTask(taskId: string): Promise<Task> {
|
||||
|
||||
export async function getAssets(taskId: string): Promise<Asset[]> {
|
||||
const resp = await get<AssetsResponse>(`/api/v1/tasks/${taskId}/assets`)
|
||||
return toAssetList(resp)
|
||||
}
|
||||
|
||||
/** 将响应转为 Asset[] 供前端组件使用 */
|
||||
function toAssetList(
|
||||
resp: AssetsResponse | GenerateResponse,
|
||||
): Asset[] {
|
||||
return resp.assets.map((a, i) => ({
|
||||
id: `asset-${i}`,
|
||||
url: a.url,
|
||||
|
||||
@@ -67,7 +67,7 @@ export interface Task {
|
||||
projectId: string
|
||||
prompt: string
|
||||
assetType: string
|
||||
status: 'pending' | 'running' | 'completed' | 'failed'
|
||||
status: 'pending' | 'submitted' | 'running' | 'completed' | 'failed'
|
||||
stage?: PipelineStage
|
||||
progress?: number
|
||||
retryCount?: number
|
||||
@@ -106,19 +106,9 @@ export interface GenerateRequest {
|
||||
format?: 'spritesheet' | 'individual'
|
||||
}
|
||||
|
||||
// 生成响应 — 对应 POST /api/v1/generate 返回
|
||||
// 生成响应 — 对应 POST /api/v1/generate 返回(异步,仅含 taskId)
|
||||
export interface GenerateResponse {
|
||||
taskId: string
|
||||
assets: {
|
||||
url: string
|
||||
format: string
|
||||
}[]
|
||||
metadata: {
|
||||
frameWidth: number
|
||||
frameHeight: number
|
||||
frameCount: number
|
||||
directions: number
|
||||
}
|
||||
}
|
||||
|
||||
// 素材列表响应 — 对应 GET /api/v1/tasks/:taskId/assets
|
||||
|
||||
Reference in New Issue
Block a user