From 50224047922f3cfd4ec4676c53d00f1b2b44b703 Mon Sep 17 00:00:00 2001 From: WangLeo <690854599@qq.com> Date: Wed, 17 Jun 2026 17:43:20 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20sessionId=20=E6=94=B9=E4=B8=BA=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E4=BD=93=E4=BC=A0=E5=8F=82=E4=B8=8D=E5=86=8D=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=20X-Session-Id=20=E8=AF=B7=E6=B1=82=E5=A4=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CLAUDE.md | 7 +++---- src/apis/display/index.js | 6 ++---- src/utils/taskPolling.js | 5 +++-- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index ba9071a..9471e5d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -168,7 +168,7 @@ props: (config) => ({ 1. 用户选择模型 → `platform.loadConfig(modelName, modelType)` → 调用 `GET /suanli/v1/models/:id/config`(优先 60s 缓存)加载参数 schema 2. 参数 schema 驱动 `controls` 渲染 UI,用户填写参数 3. 用户点击发送 → `handleStart()` → `platform.buildTaskBody({ prompt, referenceImages })` 返回扁平 `modelParams` -4. `taskPolling.js` 直接读取 `data.body` → `getModelId(type, modelName)` 查找 UUID → POST `/suanli/v1/tasks`(`X-Session-Id` header) +4. `taskPolling.js` 直接读取 `data.body` → `getModelId(type, modelName)` 查找 UUID → POST `/suanli/v1/tasks`(请求体含 `sessionId`) 5. 20s 间隔轮询直至完成/失败 ### 模型标识与查找 @@ -298,8 +298,7 @@ Music 平台与 Painting/Video 的关键差异: ### 关键注意事项 -- **`sessionId`** 来自登录接口返回的 `userInfo.sessionId`,存储在 `useUserStore().userInfo` 中。`taskPolling.js` 必须使用该值,禁止随机生成。 -- **`X-Session-Id`** 自定义 header 需要 nginx 在 `/suanli/` location 的 `Access-Control-Allow-Headers` 中加入,否则 POST 请求会触发 CORS 预检失败。 +- **`sessionId`** 来自登录接口返回的 `userInfo.sessionId`,存储在 `useUserStore().userInfo` 中,通过请求体 `sessionId` 字段传递给创建任务接口。`taskPolling.js` 必须使用该值,禁止随机生成。 - **模型列表缓存**:`modelApi.js` 中 `fetchPlatformModels` 使用 localStorage 30 秒 TTL + `pendingRequests` Map 并发去重。 - **模型配置缓存**:`modelApi.js` 中 `getModelConfig` 使用 localStorage 60 秒 TTL + `pendingConfigRequests` Map 并发去重。`loadModels()` 会在获取模型列表后调用 `preloadModelConfigs` 批量预加载。 - **平台包预加载**:dialogBox 顶层 `import` Painting 和 Video 平台包,触发自注册,确保首次使用时 registry 已就绪。 @@ -344,7 +343,7 @@ Music 平台与 Painting/Video 的关键差异: | 函数 | 端点 | 用途 | |------|------|------| -| `requestCreateTask` | POST `/suanli/v1/tasks` | 创建任务(带 `X-Session-Id` header) | +| `requestCreateTask` | POST `/suanli/v1/tasks` | 创建任务(请求体含 `sessionId`) | | `requestTaskStatus` | GET `/suanli/v1/tasks/:id` | 查询单个任务状态 | | `requestTaskHistory` | GET `/suanli/v1/tasks/history` | 历史任务列表(支持 `user_id`/`platform_code`/`page`/`pageSize`) | | `fetchPlatformModels` | GET `/suanli/v1/platforms/:code/models` | 获取平台模型列表(返回 `{id(UUID), name, display_name, tags, disabled?}`)。`id`=UUID 主键,`name`=内部标识,`display_name`=用户可见名 | diff --git a/src/apis/display/index.js b/src/apis/display/index.js index de62ac4..087703f 100644 --- a/src/apis/display/index.js +++ b/src/apis/display/index.js @@ -15,10 +15,8 @@ export function deleteGenerateHistory(query) { // ==================== 任务 API(axios,经由 /suanli 前缀路由到算力调度后端) ==================== // 创建生成任务(HTTP POST /suanli/v1/tasks) -export function requestCreateTask(body, sessionId) { - return service.post('/suanli/v1/tasks', body, { - headers: { 'X-Session-Id': sessionId } - }) +export function requestCreateTask(body) { + return service.post('/suanli/v1/tasks', body) } // 查询任务状态 / 获取历史任务结果(HTTP GET /suanli/v1/tasks/:id) diff --git a/src/utils/taskPolling.js b/src/utils/taskPolling.js index 1ae44b2..5948a97 100644 --- a/src/utils/taskPolling.js +++ b/src/utils/taskPolling.js @@ -100,11 +100,12 @@ export async function generate(data, generateData) { model_id: data.modelId, body, request: data.request, - platform_code: getPlatformCode(data.type) + platform_code: getPlatformCode(data.type), + sessionId } // POST 创建任务 - const createResult = await requestCreateTask(requestBody, sessionId) + const createResult = await requestCreateTask(requestBody) if (createResult.code !== 0) { ElNotification({