# 实现方案 — 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 过快时创建无意义连接
