From f0008aeddee70e6875caf05d07989099695d0fdc Mon Sep 17 00:00:00 2001 From: WangLeo <690854599@qq.com> Date: Thu, 4 Jun 2026 18:48:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=93=8D=E5=BA=94=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=EF=BC=9Aoutputs=20=E4=B8=BA=E6=89=81=E5=B9=B3?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E8=80=8C=E9=9D=9E=E5=B5=8C=E5=A5=97=20images?= =?UTF-8?q?=20=E5=AF=B9=E8=B1=A1=EF=BC=8C=E8=A1=A5=E5=85=85=20CLAUDE.md=20?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 轮询成功返回时 outputs 是 [{url, type}] 数组,代码误解析为 outputs.images 导致提取 URL 为空,触发"生成失败"通知且列表项无法更新为成功状态。同时在 CLAUDE.md 中补充了 API 响应格式说明、eslint 命令及 config/plugins.js 引用。 --- CLAUDE.md | 21 ++++++++++++++++++++- src/utils/websocket.js | 2 +- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index d15356d..b84e2aa 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -8,11 +8,12 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co pnpm dev # 启动 Vite 开发服务器 pnpm build # 生产构建 pnpm preview # 预览生产构建 +npx eslint . # 代码检查(@antfu/eslint-config,Vue 支持,无 TypeScript) ``` ## 技术栈 -Vue 3 (Composition API) + Vite 7 + Pinia + Vue Router + Element Plus + Less + pnpm +Vue 3 (Composition API) + Vite 7 + Pinia + Vue Router + Element Plus + `vue-element-plus-x`(多媒体编辑) + Less + pnpm ## 架构概览 @@ -56,6 +57,7 @@ src/ │ ├── modelConfig.js # Video 旧架构:从远程 JSON 加载 workflow 配置 │ └── auth.ts # token 存取工具(localStorage) ├── config/ +│ ├── plugins.js # Vite 插件配置(unplugin-auto-import + unplugin-vue-components) │ ├── index.js # 平台配置入口(目前仅导出 runninghub 供 Video 使用) │ ├── runninghub/ # RunningHub 平台适配器:Playload() 构造和 result() 解析(Video 专用) │ └── models/ # Painting 模型参数配置:每模型一个 JS 文件,定义 params schema @@ -116,6 +118,23 @@ src/ | `cancelOrCollect` | POST `/collect/toggle` | 收藏/取消收藏 | | `deleteGenerateHistory` | DELETE `/taskRecordHistory/delete` | 删除历史记录 | +### 任务响应格式 + +```json +// GET /suanli/v1/tasks/:id 返回结构 +{ + "code": 0, + "data": { + "task_id": "uuid", + "status": "completed", // queued | processing | completed | failed + "outputs": [ // ⚠️ 扁平数组,不是 { images: [...] } + { "url": "https://...", "type": "png" } + ], + "vendor_error": "..." // 仅 failed 时有值 + } +} +``` + ### 请求拦截器路由 拦截器统一设置 `Authorization: `(不带 Bearer 前缀),根据 URL 前缀切换后端: diff --git a/src/utils/websocket.js b/src/utils/websocket.js index 1f2facc..627979f 100644 --- a/src/utils/websocket.js +++ b/src/utils/websocket.js @@ -140,7 +140,7 @@ export async function generate(data, generateData) { useDisplay.isSubGerenate = false // 提取结果 URL - const urls = taskData.outputs?.images?.map(img => img.url) || [] + const urls = taskData.outputs?.map(img => img.url) || [] if (urls.length > 0) { useDisplay.updateItemToSuccess(taskId, urls) websocketSuccess()