# CLAUDE.md - GPU Guard 前端 ## 项目概述 GPU Guard 前端 - 基于 Vue 3 + Cool Admin UI 的 GPU 智能管理审核平台前端。 **技术栈**: Vue 3.5 + TypeScript 5.5 + Vite 5.4 + Element Plus 2.9 + Pinia **端口**: 9001 **包管理器**: pnpm (必须) **后端代理**: `/dev/` → `http://127.0.0.1:8003` ## 重要规定 1. **所有回答用中文** 2. **遵循 Cool Admin 前端约定** ## 常用命令 ```bash pnpm i # 安装依赖 pnpm dev # 启动开发服务器 (端口 9001) pnpm build # 生产构建 pnpm type-check # TypeScript 类型检查 pnpm lint # ESLint 检查 ``` ## Cool Admin 前端开发规范 ### 模块配置 (ModuleConfig) 每个模块必须有 `config.ts`: ```typescript // src/modules/{模块名}/config.ts export default (): ModuleConfig => { return { name: 'project', // 模块标识 label: '项目管理', // 显示名称 order: 50, // 菜单排序 views: [ // 路由定义 { path: '/project/list', meta: { label: '项目列表' }, component: () => import('./views/list.vue') }, ] }; }; ``` ### Service 代理 (核心机制) Cool Admin 根据后端 Controller 文件名自动生成 service 代理: ```typescript const { service } = useCool(); // 后端 controller 文件: modules/project/controller/admin/info.ts service.project.info.page({ page: 1, size: 10 }) // POST /admin/project/info/page service.project.info.add({ name: '新项目' }) // POST /admin/project/info/add service.project.info.update({ id: 1, name: '改' }) // POST /admin/project/info/update service.project.info.delete({ ids: [1, 2] }) // POST /admin/project/info/delete service.project.info.info({ id: 1 }) // GET /admin/project/info/info?id=1 ``` **重要规则:** - service 路径由后端 controller 文件名决定 - 下划线文件名 `time_log.ts` → `service.project.time_log`(不是 timeLog) - 自定义接口用 `service.request()`: `service.request({ url: '/admin/project/task/ganttData' })` ### 动态路由机制 路由来源(优先级从高到低): 1. 已注册的静态路由 2. 后端 `base_sys_menu` 表中的菜单路由 3. 模块 `config.ts` 中定义的 views **菜单驱动路由:** 前端根据 `base_sys_menu` 表的 `viewPath` 字段动态加载组件。`viewPath` 格式为 `modules/project/views/list.vue`(相对于 `src/`)。 ### 请求拦截器 位于 `src/cool/service/request.ts`: - 自动添加 JWT Token 到 `Authorization` header - Token 过期自动刷新(refreshToken 机制) - 响应格式: `{ code: 1000, data: ..., message: '...' }` - code 1000 = 成功,其他 = 失败 ### 路径别名 - `/@/` → `./src/` - `/$*/` → `./src/modules/` ## 模块清单 | 模块 | 路由前缀 | 关键页面 | |------|---------|---------| | **base** | `/` | 登录(Canvas星河动画)、首页、用户管理、角色管理、菜单管理、部门管理 | | **agent** | `/agent/*` | 智能体对话(WebSocket)、智能体管理、技能管理、模型渠道管理、检测结果 | | **project** | `/project/*` | 项目列表、项目详情(甘特图/日历/看板/列表四视图) | | **data** | `/data/*` | 商业健康险创新药、医保药品管理 | | **dict** | `/dict/*` | 字典管理 | | **task** | `/task/*` | 定时任务管理 | | **space** | `/space/*` | 文件空间管理 | | **user** | `/user/*` | 应用用户管理 | | **ontology** | `/ontology/*` | 本体论可视化 | | **demo** | `/demo/*` | 演示页面 | ## Agent 模块详情 ### 页面 | 页面 | 路由 | 说明 | |-----|------|------| | Agent 对话 | `/agent/chat` | WebSocket 流式对话 + 会话管理 + Skill 进度 + thinking 折叠 | | Agent 管理 | `/agent/agents` | 卡片网格 + CRUD + 发布/取消 | | Agent 编辑 | `/agent/agent-edit` | 5个Tab(基本信息/Skill选择/提示词/模型渠道/接口配置) | | Skill 管理 | `/agent/skills` | 卡片列表 + 启停 + 详情(配置/提示词/模型) | | 模型渠道管理 | `/agent/model-channel` | 渠道CRUD + 模型配置 + 连通性测试 | ### 核心逻辑 | 文件 | 用途 | |-----|------| | `store/chat.ts` | Pinia Store (WebSocket连接 + token统计 + Skill结果) | | `hooks/chat.ts` | 对话核心Hook (消息管理/thinking/token_update) | | `hooks/realtime-voice.ts` | 实时语音交互 (Socket.IO + AudioWorklet) | | `components/model-channel-selector.vue` | 渠道级联选择器组件 | ## Project 模块详情 ### 页面 | 页面 | 路由 | 说明 | |-----|------|------| | 项目列表 | `/project/list` | 卡片网格 + 筛选 + 新建/编辑弹窗 | | 项目详情 | `/project/detail` | Tab切换: 甘特图/日历/看板/列表 | ### 组件 | 组件 | 说明 | |-----|------| | `gantt.vue` | dhtmlx-gantt 甘特图 + 拖拽更新 | | `calendar.vue` | FullCalendar 日历视图 | | `table.vue` | Element Plus 表格列表 | | `kanban.vue` | vuedraggable 看板拖拽 | | `task-drawer.vue` | 任务详情抽屉 + 工时记录 | | `phase-manager.vue` | 阶段管理弹窗 | | `time-log-dialog.vue` | 工时记录弹窗 | ## 开发规范 - **组件**: Vue 3 Composition API (`