fix: Authorization 改为标准 Bearer 格式,补充 CLAUDE.md 架构文档

- request.js: Authorization 头添加 Bearer 前缀
- CLAUDE.md: 新增路由与认证流程、markRaw 说明、getGenerateDataExtras 接口
- CLAUDE.md: 修正 request.js 描述和环境变量表
This commit is contained in:
王佑琳 2026-06-16 16:43:36 +08:00
parent 6d922b66ff
commit 97808fa21b
3 changed files with 16 additions and 6 deletions

View File

@ -8,7 +8,8 @@
"Bash(git -C \"D:/WebUI/Kexue/操作平台/AI_Painting_V2.0\" log --oneline --all -- src/components/dialogBox/index.vue)",
"Bash(git -C \"D:/WebUI/Kexue/操作平台/AI_Painting_V2.0\" log --all --oneline --follow -p -- src/stores/display.js)",
"Bash(git -C \"D:/WebUI/Kexue/操作平台/AI_Painting_V2.0\" log --all --oneline -p -- src/components/dialogBox/index.vue)",
"Bash(npx eslint *)"
"Bash(npx eslint *)",
"Bash(codegraph sync *)"
]
}
}

View File

@ -22,6 +22,15 @@ AI 绘画/视频/音乐生成前端操作平台,通过 HTTP 接口对接算力
**核心架构Platform Descriptor 模式。** Painting、Video 和 Music 是三个独立的平台包通过统一的注册表动态加载。dialogBox 是通用编排壳,不包含任何平台特定逻辑。
### 路由与认证
- **路由表**`/` → 重定向 `/home``/login` → 登录页(懒加载);`/home` 和 `/generate` → 同一主页组件 `views/home/index.vue`
- **Token 来源**:两种方式 — localStorage`auth.ts` 存取)或 URL query `?token=xxx`(外部认证回调跳转)
- **路由守卫**`router/index.js:32``beforeEach` 中先检查 URL query 是否有 token有则写入 localStorage无则检查 localStorage都没有 → 重定向 `/login`
- **白名单**`/login` 直接放行,不触发 token 校验
- **Token 校验**:非白名单路径调 `userStore.checkTokenValid()``checkUsertokenApi()` 验证,失败则跳转 `/login`
- **用户信息**token 有效且 `userInfo.id` 为空时自动调用 `getInfo()` 获取用户信息(含 `sessionId`)。`userStore` 使用 pinia persist 将 `token`/`roles`/`permissions` 等持久化到 localStorage
### 关键目录
```
@ -82,7 +91,7 @@ src/
│ └── canvas/ # 图片画布编辑(圆/矩形选区局部重绘undo/redo
├── views/ # 页面home、login
└── utils/
├── request.js # Axios 实例 + 拦截器:统一 Auth不带 Bearer+ 按前缀路由 baseURL
├── request.js # Axios 实例 + 拦截器:统一 AuthBearer 格式+ 按前缀路由 baseURL
├── taskPolling.js # 任务生成入口:组装参数 → POST 创建任务 → 首次 5s + 后续 20s HTTP 轮询直至完成/失败
├── modelApi.js # 模型业务层localStorage 缓存 + 并发去重。平台模型列表(30s TTL) + 模型参数配置(60s TTL)
├── modelConfigHelper.js # 模型配置共享工具syncDefaults / syncParamValues / getDimConfig / checkShowWhen
@ -95,7 +104,7 @@ src/
### Platform Descriptor 模式
每个平台通过 `defineXxxPlatform()` 工厂函数返回标准接口
每个平台通过 `defineXxxPlatform()` 工厂函数返回标准接口。`markRaw()` 标记组件使其不被 Vue 变为响应式代理 —— 控件组件只通过 `props()` 函数接收响应式绑定,组件本身不需要响应式追踪。
```js
const platform = {
@ -126,6 +135,7 @@ const platform = {
isImageRequired() { ... }, // 图片是否必填
buildTaskBody({ prompt, referenceImages }) { ... }, // 构造扁平 modelParams需将 referenceImages 映射到 imageUpload 参数
fillFromResult(resultData) { ... }, // 从历史结果回填参数
getGenerateDataExtras() { ... }, // (可选)返回平台专属字段,在 handleStart 中合并到 generateData用于回填和任务列表展示
}
```
@ -362,7 +372,7 @@ Music 平台与 Painting/Video 的关键差异:
### 请求拦截器路由
拦截器统一设置 `Authorization: <token>`(不带 Bearer 前缀),根据请求 URL 前缀(由环境变量 `VITE_API_TASK_PREFIX` / `VITE_API_PAY_PREFIX` / `VITE_API_AIGC_PREFIX` 定义)切换后端:
拦截器统一设置 `Authorization: Bearer <token>`(标准 Bearer 格式),根据请求 URL 前缀(由环境变量 `VITE_API_TASK_PREFIX` / `VITE_API_PAY_PREFIX` / `VITE_API_AIGC_PREFIX` 定义)切换后端:
| URL 前缀(由环境变量定义) | 目标环境变量 |
|---------------------------|-------------|

View File

@ -33,8 +33,7 @@ service.interceptors.request.use(
config.headers = {}
}
// 统一 Auth 头不带 Bearer 前缀
if (token) config.headers.Authorization = token
if (token) config.headers.Authorization = `Bearer ${token}`
if (config.url?.startsWith(import.meta.env.VITE_API_TASK_PREFIX)) { // 算力调度后端
config.baseURL = import.meta.env.VITE_API_TASK_TARGET