跳到主要内容

路由与导航

概述

本文档详细分析邮轮穿舱件管理系统的Vue Router配置,涵盖路由结构、导航守卫和权限控制机制。该系统采用基于角色的权限控制,通过Vuex状态管理实现用户认证状态的全局管理。

路由结构分析

路由配置概览

系统采用Vue Router的单页面应用路由模式,配置了完整的路由结构,包括公共路由、受保护路由和错误处理路由。

flowchart TD
A[根路径 /] --> B[首页 /home]
B --> C[工作件管理 /workpiece]
B --> D[图片管理 /image]
B --> E[调试页面 /debug]
B --> F[搜索页面 /search]
B --> G[文章管理 /article]
B --> H[审核页面 /audit]
B --> I[调度管理 /dispatch]
B --> J[用户管理 /user]
B --> K[关于页面 /about]
B --> L[登录页面 /login]
B --> M[注册页面 /register]
B --> N[退出登录 /logout]
B --> O[404页面 *]

I --> P[创建工单 /dispatch/ticket/create]
I --> Q[编辑工单 /dispatch/ticket/edit/:id]
I --> R[查看工单 /dispatch/ticket/view/:id]

C --> S[编辑工作件 /workpiece/edit/:id]

style B fill:#e1f5fe
style L fill:#f3e5f5
style M fill:#f3e5f5
style K fill:#f3e5f5
style O fill:#ffebee

路由分类说明

1. 公共路由(无需认证)

  • 登录页面 (/login) - 用户认证入口
  • 注册页面 (/register) - 新用户注册
  • 关于页面 (/about) - 系统介绍信息
  • 404页面 (*) - 错误处理页面

2. 受保护路由(需要认证)

  • 工作件管理 (/workpiece) - 核心业务功能
  • 图片管理 (/image) - 多媒体资源管理
  • 调度管理 (/dispatch) - 工单调度系统
  • 用户管理 (/user) - 系统用户管理
  • 文章管理 (/article) - 内容管理系统
  • 审核页面 (/audit) - 审核流程管理
  • 搜索页面 (/search) - 全局搜索功能
  • 调试页面 (/debug) - 开发调试工具

3. 动态路由参数

  • 工作件编辑 (/workpiece/edit/:id) - 支持ID参数传递
  • 工单操作 (/dispatch/ticket/edit/:id, /dispatch/ticket/view/:id) - 工单ID参数

路由配置详情表

路径名称组件认证要求参数说明
/Index重定向默认根路径重定向到首页
/homeHomeHomeView需要系统首页
/workpieceWorkpieceWorkpieceView需要工作件列表
/workpiece/edit/:idWorkpieceEditWorkpieceEdit需要id工作件编辑
/imageImageImageView需要图片管理
/debugDebugDebugView需要调试工具
/searchSearchSearchView需要搜索功能
/articleArticleArticleView需要文章管理
/auditAuditAuditView需要审核管理
/dispatchDispatchDataDispatchDataView需要调度数据
/dispatch/ticket/createTicketCreateTicketEditView需要mode=create创建工单
/dispatch/ticket/edit/:idTicketEditTicketEditView需要id编辑工单
/dispatch/ticket/view/:idTicketViewTicketEditView需要id查看工单
/userUserUserAdmin需要用户管理
/loginLoginLoginView无需用户登录
/aboutAboutAboutView无需关于页面
/logoutLogoutLogoutView需要退出登录
/registerRegisterRegisterView无需用户注册
*NotFoundNotFoundView无需404页面

导航守卫机制

全局前置守卫 (beforeEach)

系统实现了完整的导航守卫机制,通过全局前置守卫进行权限验证。

sequenceDiagram
participant U as 用户导航
participant R as Router
participant S as Store
participant L as Login页面

U->>R: 发起路由跳转
R->>R: 检查开发模式
alt 开发模式
R->>R: 跳过认证检查
R->>U: 直接放行
else 生产模式
R->>R: 分析路由meta信息
R->>S: 获取认证状态(store.state.authenticated)
S-->>R: 返回认证状态
alt 需要认证且未认证
R->>L: 重定向到登录页
L-->>U: 显示登录界面
else 已认证或无需认证
R->>U: 正常跳转
end
end

守卫实现逻辑

router.beforeEach((to, from, next) => {
// 开发模式跳过认证检查
const isDebugMode = process.env.NODE_ENV === 'development';
if (isDebugMode) {
console.log('Debug mode: skipping authentication check');
next();
return;
}

// 生产模式进行认证检查
const requiresAuth = to.matched.some(record => {
const meta = record.meta || {};
return Boolean(meta.requiresAuth);
});

const isAuthenticated = store.state.authenticated;

if (requiresAuth && !isAuthenticated) {
next({
path: '/login',
query: { redirect: to.fullPath }
});
} else {
next();
}
});

路由重复导航处理

系统对Vue Router的原生方法进行了重写,解决了重复导航的问题:

// 重写push方法处理重复导航
const originalPush = Router.prototype.push;
Router.prototype.push = function push(location) {
return originalPush.call(this, location).catch(err => {
if (err.name !== 'NavigationDuplicated') throw err;
});
};

// 重写replace方法处理重复导航
const originalReplace = Router.prototype.replace;
Router.prototype.replace = function replace(location) {
return originalReplace.call(this, location).catch(err => {
if (err.name !== 'NavigationDuplicated') throw err;
});
};

权限控制机制

Vuex状态管理

系统使用Vuex进行全局状态管理,存储用户认证相关信息:

classDiagram
class VuexStore {
+state: Object
+mutations: Object
+actions: Object
+getters: Object
}

class StoreState {
+navigator_drawer: Boolean
+authenticated: Boolean
+user_info: Object
+user_token: String
}

class StoreMutations {
+set_user_info(value)
+set_user_token(value)
+set_navigator_drawer(value)
+set_authenticated(value)
+toggle_navigator_drawer()
}

class StoreActions {
+set_user_info(value)
+set_user_token(value)
+set_navigator_drawer(value)
+set_authenticated(value)
+toggle_navigator_drawer()
}

class StoreGetters {
+get_navigator_drawer()
+get_authenticated()
+get_user_info()
+get_user_token()
}

VuexStore --> StoreState
VuexStore --> StoreMutations
VuexStore --> StoreActions
VuexStore --> StoreGetters

认证状态流转

stateDiagram-v2
[*] --> 未认证
未认证 --> 已认证 : 登录成功
已认证 --> 未认证 : 退出登录
已认证 --> 已认证 : 页面跳转(认证检查)
未认证 --> 未认证 : 访问公共页面

state 未认证 {
[*] --> 登录页面
登录页面 --> 认证中 : 提交凭证
认证中 --> 登录页面 : 认证失败
认证中 --> [*] : 认证成功
}

state 已认证 {
[*] --> 首页
首页 --> 功能页面 : 导航
功能页面 --> 首页 : 返回
功能页面 --> 退出确认 : 退出操作
退出确认 --> [*] : 确认退出
}

权限控制流程

  1. 路由访问请求:用户尝试访问受保护路由
  2. 守卫拦截:全局前置守卫检查路由meta信息
  3. 状态验证:查询Vuex store中的认证状态
  4. 决策处理
    • 已认证:允许访问目标路由
    • 未认证:重定向到登录页面,携带原目标路径参数
  5. 登录后重定向:登录成功后自动跳转回原目标页面

架构特点与设计模式

1. 路由懒加载

所有路由组件都使用动态导入,实现代码分割和懒加载优化:

component: () => import('@/views/HomeView.vue')

2. 参数传递机制

  • Props传参:通过props: true将路由参数传递给组件
  • 模式参数:通过props: { mode: 'create' }传递静态参数

3. 错误处理

  • 404处理:通配符路由捕获所有未定义路径
  • 重复导航:重写导航方法避免控制台错误

4. 开发体验优化

  • 开发模式:开发环境下跳过认证检查,方便调试
  • 历史模式:使用HTML5 History模式,URL更友好

性能优化建议

  1. 路由分组:可以考虑按功能模块进行路由分组,进一步优化代码分割
  2. 权限粒度:当前为二元权限控制,可扩展为基于角色的细粒度权限
  3. 路由预加载:对常用路由实现预加载策略,提升用户体验

参考文件

索引

邮轮穿舱件管理系统的路由架构采用了标准的Vue Router实现,结合Vuex状态管理实现了完整的权限控制机制。系统通过全局导航守卫、路由懒加载、参数传递等特性,构建了高效、安全的前端路由系统。该架构具有良好的可扩展性和维护性,为系统的功能扩展提供了坚实的基础。