# 实现方案 — 2026-04-28 ## R1/R2 — uploadMedia 字段修复 **文件**: `src/lib/api.ts` **变更**: - 解构 `response.data` 的 `file_url`、`object_name` 字段 - 返回 `{ url: file_url, id: object_name }` 以兼容前端既有接口 ## R3 — 上传后刷新项目列表 **文件**: `src/components/ProjectLibrary.tsx` **变更**: - `uploadMedia()` resolve 后调用 `getProjects()` 并 `setProjects()` 写入 Zustand - 失败时 alert 并打印错误 ## R4 — WebSocket disconnect 崩溃修复 **文件**: `src/lib/websocket.ts` **变更**: - `disconnect()` 中仅当 `this.ws.readyState === WebSocket.OPEN` 时才调用 `.close()` - 否则直接置空引用,避免对 CONNECTING 套接字调用 close ## R5 — StrictMode 竞态防护 **文件**: `src/components/Dashboard.tsx` **变更**: - 增加 `mounted` ref,cleanup 时置 `false` - `onProgress` callback 与 `setInterval` callback 均检查 `mounted` - 增加 500ms 延迟连接,避免 mount/unmount 过快时创建无意义连接