AI_Painting_V2.0/CLAUDE.md

79 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 常用命令
```bash
pnpm dev # 启动 Vite 开发服务器
pnpm build # 生产构建
pnpm preview # 预览生产构建
```
## 技术栈
Vue 3 (Composition API) + Vite 7 + Pinia + Vue Router + Element Plus + Less + pnpm
## 架构概览
这是一个 AI 绘画/视频生成的前端操作平台,通过 WebSocket 连接后端和第三方 AI 平台RunningHub提交生成任务并接收结果。
### 关键目录
```
src/
├── main.js # 入口:创建 Vue 应用,安装 Pinia/Router/VueVirtualScroller
├── router/index.js # 路由定义 + token 验证守卫
├── stores/ # Pinia 状态管理
│ ├── user.js # 用户认证、信息、免费次数
│ ├── display.js # 生成历史列表、UI 状态(滚动、画布等)
│ └── param.js # 占位 store当前为空
├── apis/ # HTTP API 模块
│ ├── auth/ # 登录/登出/用户信息/验证码
│ └── display/ # 获取历史列表/收藏/删除
├── components/ # 通用组件
│ ├── dialogBox/ # 生成参数输入面板(核心交互入口),含模型选择、比例、上传等子组件
│ ├── virtual-scroller/# 虚拟滚动列表组件(自定义实现)
│ ├── canvas/ # 图片画布编辑(圆/矩形选区,局部重绘)
│ └── ...
├── views/ # 页面
│ ├── home/index.vue # 主页面容器dialogBox + display
│ ├── home/display/ # 历史记录展示区
│ └── login/ # 登录页(跳转外部登录)
├── utils/
│ ├── request.js # Axios 实例,拦截器处理 token 和不同服务的 baseURL 路由
│ ├── websocket.js # WebSocket 生成任务的核心流程(心跳、提交流程、结果处理)
│ ├── createTask.js # 根据配置构造任务 payload
│ ├── modelConfig.js # 从远程 JSON 加载模型配置localStorage 每日缓存
│ ├── auth.ts # token 存取工具localStorage
│ └── encrypt.ts # 加密工具Base64/MD5/RSA/AES
├── config/
│ ├── index.js # 平台配置入口
│ └── runninghub/ # RunningHub 平台适配器Payload 构造和 Result 解析
└── config/ # 项目根目录下
└── plugins.js # Vite 插件配置(自动导入/组件注册/图标)
```
### 核心数据流
1. 用户在 `dialogBox` 中设置参数(模型、提示词、比例、上传图片等)
2. 点击生成 → `websocket.js:generate()` 被调用
3. 先通过 `createTask.js` 调用 `config/runninghub``Playload()` 构造任务数据(从远程 JSON 加载 workflow 配置)
4. 建立 WebSocket 连接,经过握手协议(`please give me taskId` → `OK! Please continue.`)提交任务
5. 任务排队中 → `displayStore.addGeneratingItem()` 在前端列表中插入 "生成中" 条目
6. 完成后 WebSocket 关闭code=1000 reason=success`getTask()` 解析结果 URL → `updateItemToSuccess()` 更新列表
### 自动导入
- `unplugin-auto-import` 自动导入 Vue/VRouter/Pinia API无需在 `.vue` 文件中手动 `import { ref, computed, watch } from 'vue'`
- `unplugin-vue-components` 自动注册 `src/components/` 下的组件和 Element Plus 组件
- Element Plus 图标通过 `unplugin-icons` 按需加载
### 环境变量
有两套环境文件。`VITE_API_BASE_URL` 定义主 API 地址,请求拦截器根据 URL 前缀自动切换不同的后端服务(主服务/支付服务/AIGC 工作流服务)。`VITE_API_WORKFLOW_WS` 定义 WebSocket 地址。
### 路由守卫
`src/router/index.js``beforeEach` 守卫检查 token 存在性和有效性(调用 `/auth/check/token`),无效则跳转 `/login`。支持通过 URL query `?token=xxx` 传入 token。