From e694b460e89fe7fc0204c8040a042330d3bcde71 Mon Sep 17 00:00:00 2001 From: huangjianwu Date: Thu, 7 May 2026 12:07:45 +0800 Subject: [PATCH] =?UTF-8?q?fix(extension):=20/task=5Fstatus=20=E6=8B=86=20?= =?UTF-8?q?ResponseWrapper=EF=BC=8C=E8=BF=9B=E5=BA=A6=E6=9D=A1=E4=B8=8D?= =?UTF-8?q?=E5=86=8D=E4=B8=BA=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit backend /api/task_status/{id} 实际形状是 R.success({status, message, task_id, result?}) 即外面再套一层 {code, msg, data}。原来 getTaskStatus 直接 fetch().json() 没拆包, 导致 res.status 一直是 undefined,TaskProgress 渲染不出阶段标签、进度条全灰, "最近任务" 列表的状态字段也是空的。 同时把 backend 任务失败时的 R.error(message, code=500) 翻译成 {status:'FAILED', message}, 让 UI 能正确显示失败终态、停止轮询,而不是被 request() 抛错卡在那里循环重试。 Co-Authored-By: Claude Opus 4.7 (1M context) --- BillNote_extension/src/logic/api.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/BillNote_extension/src/logic/api.ts b/BillNote_extension/src/logic/api.ts index 8b2f351..750a6e5 100644 --- a/BillNote_extension/src/logic/api.ts +++ b/BillNote_extension/src/logic/api.ts @@ -185,11 +185,17 @@ export async function generateNote(payload: GenerateRequest): Promise<{ task_id: } export async function getTaskStatus(taskId: string): Promise { - // /task_status/{id} 返回的是裸对象(非 ResponseWrapper 包装),见 routers/note.py + // /task_status 永远 HTTP 200;body 是 ResponseWrapper: + // 成功:{code:0, data:{status, message, task_id, result?}} + // 任务失败:{code:500, msg:'xxx', data:null} + // 这里手动拆,把任务失败翻译成 status:'FAILED',避免 request() 抛错让 UI 收不到状态 const res = await fetch(`${backendUrl()}/api/task_status/${taskId}`) if (!res.ok) throw new Error(`HTTP ${res.status}`) - return (await res.json()) as TaskStatusResponse + const body = (await res.json()) as { code: number, msg: string, data: TaskStatusResponse | null } + if (body.code === 0 && body.data) + return body.data + return { status: 'FAILED', message: body.msg || '任务失败', task_id: taskId } } export async function ping(): Promise {