修复响应解析:outputs 为扁平数组而非嵌套 images 对象,补充 CLAUDE.md 文档
轮询成功返回时 outputs 是 [{url, type}] 数组,代码误解析为 outputs.images 导致提取 URL 为空,触发"生成失败"通知且列表项无法更新为成功状态。同时在 CLAUDE.md 中补充了 API 响应格式说明、eslint 命令及 config/plugins.js 引用。
This commit is contained in:
parent
4f7357eefc
commit
f0008aedde
21
CLAUDE.md
21
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: <token>`(不带 Bearer 前缀),根据 URL 前缀切换后端:
|
||||
|
||||
@ -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()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user