7.0 KiB
7.0 KiB
前端技术路线文档
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 启动流程
main.js创建应用实例并加载全局依赖:Pinia、Vue Router、Element Plus。- 初始化认证状态 (
useAuthStore().initAuth()),确保刷新后可以恢复登录信息。 - 启动 WebSocket 服务 (
websocketService.connect()),为后续日志与状态同步提供实时通道。 - 挂载根组件
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. 数据与事件流
- 用户通过
CadSidebar发起连接请求,组件内调用相应服务(例如apiClient+config/cad.js构建 URL)。 - API 返回后,组件根据结果调用
cadStore.setCADConnection更新全局状态,并向父组件触发事件以切换页面或加载数据。 apiClient拦截器自动发送 Element Plus 通知,并通过 WebSocket 记录操作日志;WebSocket 后台返回的最新状态又会驱动InfoManagementPanel更新展示。- 所有跨组件通信优先使用事件 (
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提供统一的通知描述,保持日志与提示文案一致。 - 新增页面需按“配置 → 组件 → 仪表板页注册”的流程接入,保证页面切换逻辑集中管理。