MianyVue/docs/frontend-technical-overview.md

110 lines
7.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.

# 前端技术路线文档
## 1. 项目概述
- **框架基线**:基于 `Vue 3` + Composition API 构建的单页应用,入口由 `src/main.js` 创建并挂载 `App.vue`
- **运行模式**:采用 `Vite` 作为开发服务器与构建工具,统一在 `config/vite.config.js` 配置,脚本通过 `npm run dev/build/preview` 调用。
- **部署目标**:面向工业 CAD 模型统一管理平台的前端界面,所有业务逻辑围绕 CAD 连接、模型查看、分析工具与日志监控展开。
## 2. 应用层次结构
### 2.1 启动流程
1. `main.js` 创建应用实例并加载全局依赖:`Pinia`、`Vue Router`、`Element Plus`。
2. 初始化认证状态 (`useAuthStore().initAuth()`),确保刷新后可以恢复登录信息。
3. 启动 WebSocket 服务 (`websocketService.connect()`),为后续日志与状态同步提供实时通道。
4. 挂载根组件 `App.vue`,其模板内仅渲染 `<router-view />`,由路由控制页面结构。
### 2.2 路由与页面
- 使用 `Vue Router 4`Hash 模式)管理页面,路由定义于 `src/router/index.js`
- 主要路由:`/login`(登录页)、`/dashboard`(主控制台),根路径重定向到仪表板。
- 全局前置守卫根据 `meta.requiresAuth` 校验登录状态,并同步浏览器标题。
### 2.3 主场景组织
- `DashboardView.vue` 作为仪表板容器,组合 `MainLayout` 布局,并通过动态组件与 `KeepAlive` 控制页面切换。
- 页面组件映射在本地 `pageComponentMap` 中,根据 `PAGE_TYPES``src/config/pages.js`)选择展示模块。
- 关键子组件:
- `AppHeader` 负责页面切换与信息面板控制。
- `CadSidebar` 管理各 CAD 软件连接入口。
- `InfoManagementPanel` 展示实时日志、状态信息。
- `components/pages` 目录承载具体业务页面(模型库、分析、导出、查看器等)。
## 3. 状态管理
- 统一使用 `Pinia`,入口在 `main.js` 注册。
- Store 设计遵循「只持久化状态,不处理 API 调用」原则。
### 3.1 认证状态 (`src/stores/auth.js`)
- 存储当前用户、token、加载状态与错误信息。
- 提供登录、登出、token 校验、错误清理等方法。
- 登录逻辑支持模拟异步,后续可平滑接入真实 API。
- 与本地存储联动,刷新后通过 `initAuth()` 恢复状态。
### 3.2 CAD 状态 (`src/stores/cad.js`)
- 根据 `config/cad.js` 中的 CAD 定义初始化连接状态列表。
- 维持单一连接原则:`setCADConnection` 会在连接新软件前断开其他连接。
- 暴露当前连接的软件信息、可显示 CAD 列表、项目名称等状态。
- 提供功能支持检查 (`cadSupportsFeature`) 与连接中状态更新等能力。
## 4. 配置体系
- 所有业务配置集中在 `src/config`
- `cad.js`CAD 软件定义、API 端点、通知、WebSocket、导出格式与默认参数同时提供 URL 构建、功能支持判断等工具函数。
- `pages.js`:统一的页面类型常量与权限要求,供仪表板和导航模块引用。
- 其他配置文件(如 `auth`)为 Store 提供默认值、校验规则和超时设置。
## 5. 通信与服务层
### 5.1 HTTP 客户端 (`src/services/apiClient.js`)
- 基于 `fetch` 的统一封装,内置请求/响应拦截、Loading 遮罩、Element Plus 通知、操作日志同步与错误处理。
- 利用 `PostProcessManager` 组织后处理钩子:
- 成功/失败后自动弹出通知。
- 将操作日志通过 `websocketService.logOperation` 推送到后台,实现前后端日志统一。
- 提供 `get/post/put/delete` 便捷方法,默认读取 `config/cad.js` 中的请求头、超时等配置。
### 5.2 WebSocket 服务 (`src/services/websocketService.js`)
- 管理实时连接、自动重连、心跳以及后台消息解析。
- 维护软件列表、操作日志、统计信息等实时状态,并通过事件订阅模式向组件广播。
- 支持后台命令(启动/停止/重启软件、查询日志等)与操作记录上报。
- 登录用户信息会动态带入连接参数和日志上报,确保后台可追踪责任主体。
## 6. UI 与样式体系
- UI 组件库:全局注册 `Element Plus`,结合自研组件完成业务场景搭建。
- 样式策略:在 `src/assets/styles/theme.css` 定义 CSS 变量与通用样式,`App.vue` 导入后覆盖全局;组件内尽量使用作用域样式或复用变量,保持视觉一致性。
- 主题与布局:
- `layout` 目录包含主框架组件(头部、侧边、布局容器)。
- `pages` 目录按业务功能拆分子页面,保持单一职责。
- `model` 目录存放各 CAD 查看器,遵循统一的主题变量与交互规范。
## 7. 目录结构概览
```
src/
├── assets/ # 静态资源与全局样式
├── components/
│ ├── layout/ # 主布局与导航组件
│ ├── model/ # 针对 CAD 的模型查看器
│ ├── pages/ # 业务页面碎片,按 PAGE_TYPES 分类
│ └── ui/ # 通用 UI 组件(树形节点等)
├── config/ # 统一配置中心CAD、页面、认证等
├── router/ # 路由配置与守卫
├── services/ # HTTP、WebSocket、业务服务封装
├── stores/ # Pinia Store认证、CAD 状态等)
├── utils/ # 工具函数与日志封装
└── views/ # 路由级页面容器Dashboard、Login 等)
```
## 8. 数据与事件流
1. 用户通过 `CadSidebar` 发起连接请求,组件内调用相应服务(例如 `apiClient` + `config/cad.js` 构建 URL
2. API 返回后,组件根据结果调用 `cadStore.setCADConnection` 更新全局状态,并向父组件触发事件以切换页面或加载数据。
3. `apiClient` 拦截器自动发送 Element Plus 通知,并通过 WebSocket 记录操作日志WebSocket 后台返回的最新状态又会驱动 `InfoManagementPanel` 更新展示。
4. 所有跨组件通信优先使用事件 (`emit`) 与 Pinia 状态,避免组件间直接耦合。
## 9. 构建与质量保障
- `package.json` 中定义脚本:
- `npm run dev`:开发模式。
- `npm run build`:生产构建。
- `npm run preview`:本地预览构建结果。
- `npm run lint`:执行 ESLint配置位于 `config/eslint.config.js`),自动修复常见问题。
- `npm run format`:根据 `config/.prettierrc.json` 格式化 `src/` 目录。
- 推荐 Node 版本 `^20.19.0 || >=22.12.0`,确保与依赖兼容。
## 10. 扩展与约束原则
- 遵循 `CLAUDE.md` 中的严格开发准则:先确认需求,再最小化实现,禁止未授权的额外功能或样式更改。
- Store 只负责状态管理API 调用留在组件或服务层,避免职责交叉。
- 与后台的交互需要通过 `operationContext` 提供统一的通知描述,保持日志与提示文案一致。
- 新增页面需按“配置 → 组件 → 仪表板页注册”的流程接入,保证页面切换逻辑集中管理。