Files
2026-02-28 15:16:15 +08:00

14 KiB
Raw Permalink Blame History

UI设计系统

**本文引用的文件** - [package.json](file://frontend/package.json) - [vite.config.js](file://frontend/vite.config.js) - [main.js](file://frontend/src/main.js) - [App.vue](file://frontend/src/App.vue) - [main.scss](file://frontend/src/assets/main.scss) - [Layout.vue](file://frontend/src/views/Layout.vue) - [Dashboard.vue](file://frontend/src/views/Dashboard.vue) - [Departments.vue](file://frontend/src/views/basic/Departments.vue) - [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue) - [index.js](file://frontend/src/router/index.js) - [app.js](file://frontend/src/stores/app.js) - [user.js](file://frontend/src/stores/user.js) - [auth.js](file://frontend/src/api/auth.js) - [request.js](file://frontend/src/api/request.js)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本指南面向Element Plus UI设计系统的使用与落地实践结合仓库中的前端工程系统讲解安装配置、主题定制、本地化设置、常用组件用法、布局与表单、数据展示与反馈、SCSS变量定制、主题切换与响应式设计、图标与动画、交互规范以及样式覆盖与品牌化定制等。文档以“循序渐进”的方式组织既适合初学者快速上手也便于资深开发者深入理解系统架构与最佳实践。

项目结构

前端采用Vite + Vue 3 + Element Plus + Pinia + Vue Router的技术栈Element Plus作为主要UI组件库全局引入并配置中文本地化通过SCSS进行主题变量与通用样式管理路由负责页面导航与权限守卫Pinia用于状态管理Axios封装统一请求与错误处理。

graph TB
A["入口应用<br/>main.js"] --> B["Element Plus 插件<br/>main.js"]
A --> C["路由注册<br/>index.js"]
A --> D["状态管理<br/>app.js / user.js"]
A --> E["全局样式<br/>main.scss"]
B --> F["组件库样式<br/>element-plus/dist/index.css"]
B --> G["中文本地化<br/>zh-cn.mjs"]
A --> H["图标注册<br/>@element-plus/icons-vue"]
A --> I["视图组件<br/>Layout.vue / Dashboard.vue 等"]

图表来源

章节来源

核心组件

  • Element Plus插件与本地化在应用入口集中注册Element Plus并设置中文语言包确保全局组件文案与交互符合中文习惯。
  • 图标系统通过批量注册Element Plus图标组件使图标可在模板中直接使用。
  • 路由与权限路由守卫根据Token判断是否放行未登录自动跳转至登录页。
  • 状态管理Pinia Store负责侧边栏折叠状态、用户登录态与Token持久化。
  • 全局样式SCSS变量统一管理主色、语义色、文本与边框等页面卡片、表格、搜索栏等通用样式集中维护。

章节来源

架构总览

下图展示了从应用启动到页面渲染的关键流程,涵盖插件初始化、路由守卫、状态管理与组件渲染。

sequenceDiagram
participant U as "用户"
participant M as "main.js"
participant EP as "ElementPlus 插件"
participant R as "路由守卫"
participant V as "视图组件"
participant S as "Pinia Store"
U->>M : 启动应用
M->>EP : 注册插件并设置中文本地化
M->>R : 安装路由
M->>S : 初始化 Pinia Store
U->>R : 访问受保护页面
R->>R : 校验 Token
alt 未登录
R-->>U : 重定向到登录页
else 已登录
R-->>V : 渲染目标视图
end

图表来源

详细组件分析

Element Plus安装与配置

  • 依赖安装通过包管理器安装Element Plus与图标库并在开发依赖中引入Sass支持。
  • 插件注册在应用入口引入Element Plus并设置中文本地化同时批量注册图标组件便于在模板中直接使用。
  • 全局样式引入Element Plus内置样式保证组件基础样式一致。

章节来源

本地化设置

  • 应用级本地化在根组件通过ConfigProvider包裹并设置语言包确保整个应用的组件文案为中文。
  • 插件级本地化:在插件注册时传入语言配置,保证组件内部国际化生效。

章节来源

布局组件

  • 侧边栏与头部:布局组件提供侧边菜单、面包屑、用户下拉等结构,支持侧边栏折叠与过渡动画。
  • 菜单与图标:菜单项支持动态加载与图标渲染,点击触发路由跳转。
  • 页面切换:使用过渡动画实现页面切换的淡入淡出效果。
flowchart TD
Start(["进入 Layout"]) --> LoadMenu["加载菜单树"]
LoadMenu --> RenderHeader["渲染头部与面包屑"]
RenderHeader --> ToggleSidebar{"点击折叠按钮?"}
ToggleSidebar --> |是| Collapse["切换折叠状态"]
ToggleSidebar --> |否| RenderMain["渲染主内容区"]
Collapse --> RenderMain
RenderMain --> Transition["页面切换过渡"]
Transition --> End(["完成渲染"])

图表来源

章节来源

表单组件

  • 搜索与筛选:使用输入框、选择器、日期选择器、树形选择器等组合形成搜索栏,配合分页组件实现数据筛选与翻页。
  • 表单校验:通过表单规则对必填字段进行校验,提交时显示加载状态。
  • 对话框与编辑:使用对话框承载新增/编辑表单,支持树形选择器、数字输入框、文本域等控件。
sequenceDiagram
participant U as "用户"
participant V as "Departments.vue"
participant API as "后端接口"
participant EP as "ElementPlus 表单组件"
U->>V : 输入搜索条件
V->>EP : 校验表单规则
EP-->>V : 校验结果
U->>V : 点击查询/重置/新增
V->>API : 发起请求
API-->>V : 返回数据
V->>EP : 渲染表格/分页/对话框

图表来源

章节来源

数据展示组件

  • 表格:使用带条纹的表格展示数据,列头背景与文字颜色统一,支持状态标签、操作列等。
  • 分页:通过分页组件实现页码与每页数量切换,配合请求参数更新数据。
  • 状态标签与等级:根据状态或分数映射不同类型的标签与等级样式,提升可读性。

章节来源

反馈组件

  • 消息提示:统一通过消息提示组件展示成功/失败信息。
  • 确认对话框:使用确认对话框进行危险操作的二次确认。
  • 加载状态:表格与表单提交时使用加载状态,避免重复提交。

章节来源

图标使用

  • 图标注册:在应用入口批量注册图标组件,随后可在模板中以组件形式使用。
  • 图标渲染:在菜单、按钮、标签等位置按需渲染图标,增强视觉表达。

章节来源

动画与交互

  • 折叠过渡侧边栏宽度变化使用CSS过渡提供平滑的折叠/展开体验。
  • 页面切换:使用过渡动画实现页面切换的淡入淡出。
  • 下拉菜单:用户信息下拉菜单支持点击展开与收起。

章节来源

组件样式覆盖与品牌化定制

  • SCSS变量通过CSS变量统一管理主色、语义色、文本与背景色便于整体风格调整。
  • 页面卡片与表格:为页面卡片与表格提供统一的圆角、阴影与列头样式,提升一致性。
  • 状态标签与等级:为不同状态与分数区间提供统一的标签样式,便于识别与品牌化。

章节来源

主题定制与切换

  • 当前状态:项目已通过插件注册设置中文本地化,但未实现主题切换功能。
  • 实现建议可通过Element Plus的主题变量覆盖或CSS变量切换实现主题切换在应用入口或路由守卫中根据用户偏好或系统主题进行切换。

章节来源

响应式设计

  • 视口与容器:页面容器高度为视口高度,确保在不同屏幕尺寸下的适配。
  • 表格与卡片:卡片与表格在小屏设备上保持良好的可读性与间距。
  • 建议可结合媒体查询或Element Plus栅格系统进一步优化移动端体验。

章节来源

依赖关系分析

  • Element Plus作为UI组件库被应用入口注册并贯穿于所有视图组件。
  • 路由与状态路由负责页面导航与权限控制Pinia负责状态共享与持久化。
  • 请求封装Axios封装统一请求与错误处理结合Element Plus的消息提示提升用户体验。
graph LR
EP["ElementPlus"] --> Views["视图组件"]
Router["路由"] --> Views
Store["Pinia Store"] --> Views
Axios["Axios 封装"] --> API["后端接口"]
Views --> API
API --> Axios

图表来源

章节来源

性能考虑

  • 组件懒加载:路由采用异步组件加载,减少首屏体积。
  • 图标按需:仅注册所需图标,避免引入过多图标资源。
  • 请求拦截:统一处理错误与超时,减少无效请求造成的性能损耗。
  • 样式复用通过SCSS变量与通用类名减少重复样式降低CSS体积。

章节来源

故障排查指南

  • 登录态失效当后端返回401时自动清除Token并跳转登录页同时通过消息提示告知用户。
  • 权限不足403错误提示无权限访问。
  • 资源不存在404错误提示资源不存在。
  • 服务器异常500错误提示服务器错误。
  • 网络异常:断网或请求超时提示网络错误。

章节来源

结论

本项目以Element Plus为核心结合Vue生态实现了完整的前端界面与交互体系。通过统一的本地化、图标与样式管理以及完善的路由与状态管理形成了清晰的UI设计系统。后续可在现有基础上扩展主题切换、移动端优化与更丰富的交互动效持续提升用户体验与品牌一致性。

附录

常用组件使用清单

  • 布局:菜单、面包屑、头像、下拉菜单、折叠按钮
  • 表单:输入框、选择器、日期选择器、树形选择器、数字输入框、文本域、表单校验
  • 数据展示:表格、分页、标签、等级标签
  • 反馈:消息提示、确认对话框、加载状态

章节来源

API与状态管理

  • 登录与用户信息通过封装的请求模块调用后端接口结合Pinia Store管理Token与用户信息。
  • 路由守卫根据Token决定页面访问权限未登录自动跳转登录页。

章节来源