ruoyi-vue-pro 开发指南 ruoyi-vue-pro 开发指南
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读
  • 后端手册
  • 中间件手册
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
  • 运维手册
  • 前端手册 Vue 3.x
  • 前端手册 Vben 5.x
  • 前端手册 Vue 2.x
  • 工作流手册
  • 大屏手册
  • 支付手册
  • 会员手册
  • 商城手册
  • ERP 手册
  • CRM 手册
  • AI 大模型手册
  • IoT 物联网手册
  • 公众号手册
  • 系统手册
视频教程
  • Vue3 + element-plus (opens new window)
  • Vue3 + vben5(ant-design-vue、element-plus) (opens new window)
  • Vue2 + element-ui (opens new window)
微服务版 (opens new window)
作者博客 (opens new window)
GitHub (opens new window)
  • 萌新必读

    • 简介
    • 交流群
    • 视频教程
    • 功能列表
    • 快速启动(后端项目)
    • 快速启动(前端项目)
    • 接口文档
    • 技术选型
    • 项目结构
    • 代码热加载
    • 一键改包
    • 迁移模块(适合新项目)
    • 删除功能(以租户为例)
    • 表结构变更(版本升级)
    • 国产信创数据库(DM 达梦、大金、OpenGauss)
    • 如何去除 Redis 缓存
    • 内网穿透
    • 面试题、简历模版、简历优化
    • 项目外包
  • 后端手册

    • 新建模块
    • 代码生成【单表】(新增功能)
    • 代码生成【主子表】
    • 代码生成(树表)
    • 功能权限
    • 数据权限
    • 用户体系
    • 三方登录
    • OAuth 2.0(SSO 单点登录)
    • SaaS 多租户【字段隔离】
    • SaaS 多租户【数据库隔离】
    • WebSocket 实时通信
    • 异常处理(错误码)
    • 参数校验、时间传参
    • 分页实现
    • VO 对象转换、数据翻译
    • 文件存储(上传下载)
    • Excel 导入导出
    • 操作日志、访问日志、异常日志
    • MyBatis 数据库
    • MyBatis 联表&分页查询
    • 多数据源(读写分离)、事务
    • Redis 缓存
    • 本地缓存
    • 异步任务
    • 分布式锁
    • 幂等性(防重复提交)
    • 请求限流(RateLimiter)
    • HTTP 接口签名(防篡改)
    • HTTP 接口加解密
    • 单元测试
    • 验证码
    • 工具类 Util
    • 配置管理
    • 数据库文档
  • 中间件手册

    • 定时任务
    • 消息队列(内存)
    • 消息队列(Redis)
    • 消息队列(RocketMQ)
    • 消息队列(RabbitMQ)
    • 消息队列(Kafka)
    • 限流熔断
  • 工作流手册

    • 工作流演示
    • 功能开启
    • 工作流(达梦适配)
    • 审批接入(流程表单)
    • 审批接入(业务表单)
    • 流程设计器(BPMN)
    • 流程设计器(钉钉、飞书)
    • 选择审批人、发起人自选
    • 会签、或签、依次审批
    • 流程发起、取消、重新发起
    • 审批通过、不通过、驳回
    • 审批加签、减签
    • 审批转办、委派、抄送
    • 执行监听器、任务监听器
    • 流程表达式
    • 流程审批通知
  • 大屏手册

    • 报表设计器
    • 大屏设计器
  • 支付手册

    • 功能开启
    • 支付宝支付接入
    • 微信公众号支付接入
    • 微信小程序支付接入
    • 支付宝、微信退款接入
    • 支付宝转账接入
    • 微信转账接入
    • 钱包充值、支付、退款
    • 模拟支付、退款
  • 会员手册

    • 功能开启
    • 微信公众号登录
    • 微信小程序登录
    • 微信小程序订阅消息
    • 微信小程序码
    • 会员用户、标签、分组
    • 会员等级、积分、签到
  • 商城手册

    • 商城演示
    • 功能开启
    • 商城装修
    • 在线客服
    • 【商品】商品分类
    • 【商品】商品属性
    • 【商品】商品 SPU 与 SKU
    • 【商品】商品评价
    • 【交易】购物车
    • 【交易】交易订单
    • 【交易】售后退款
    • 【交易】快递发货
    • 【交易】门店自提
    • 【交易】分销返佣
    • 【营销】优惠劵
    • 【营销】积分商城
    • 【营销】拼团活动
    • 【营销】秒杀活动
    • 【营销】砍价活动
    • 【营销】满减送活动
    • 【营销】限时折扣
    • 【营销】内容管理
    • 【统计】会员、商品、交易统计
  • ERP手册

    • ERP 演示
    • 功能开启
    • 【产品】产品信息、分类、单位
    • 【库存】产品库存、库存明细
    • 【库存】其它入库、其它出库
    • 【库存】库存调拨、库存盘点
    • 【采购】采购订单、入库、退货
    • 【销售】销售订单、出库、退货
    • 【财务】采购付款、销售收款
  • CRM手册

    • CRM 演示
    • 功能开启
    • 【线索】线索管理
    • 【客户】客户管理、公海客户
    • 【商机】商机管理、商机状态
    • 【合同】合同管理、合同提醒
    • 【回款】回款管理、回款计划
    • 【产品】产品管理、产品分类
    • 【通用】数据权限
    • 【通用】跟进记录、待办事项
  • AI大模型手册

    • AI 大模型演示
    • 功能开启
    • AI 聊天对话
    • AI 绘画创作
    • AI 知识库(RAG)
    • AI 音乐创作
    • AI 写作助手
    • AI 思维导图
    • AI 工具(function calling)
    • AI 工作流
    • Dify 工作流
    • FastGPT 工作流
    • Coze 智能体
    • 推理模式(thinking)
    • 联网搜索
    • MCP Client 客户端
    • MCP Server 服务端
    • 【模型接入】Claude
    • 【模型接入】OpenAI
    • 【模型接入】通义千问
    • 【模型接入】DeepSeek
    • 【模型接入】字节豆包
    • 【模型接入】腾讯混元
    • 【模型接入】硅基流动
    • 【模型接入】MiniMax
    • 【模型接入】月之月面
    • 【模型接入】百川智能
    • 【模型接入】文心一言
    • 【模型接入】LLAMA
    • 【模型接入】智谱 GLM
    • 【模型接入】讯飞星火
    • 【模型接入】微软 OpenAI
    • 【模型接入】谷歌 Gemini
    • 【模型接入】Stable Diffusion
    • 【模型接入】Midjourney
    • 【模型接入】Suno
  • IoT物联网手册

    • 功能开启
  • 公众号手册

    • 功能开启
    • 公众号接入
    • 公众号粉丝
    • 公众号标签
    • 公众号消息
    • 模版消息
    • 自动回复
    • 公众号菜单
    • 公众号素材
    • 公众号图文
    • 公众号统计
  • 系统手册

    • 短信配置
    • 邮件配置
    • 站内信配置
    • Webhook(钉钉、飞书、企微)
    • 数据脱敏、字段权限
    • 敏感词
    • 地区 & IP 库
  • 运维手册

    • 开发环境
    • Linux 部署
    • Docker 部署
    • Jenkins 部署
    • 宝塔部署
    • HTTPS 证书
    • 服务监控
    • Tomcat WAR 部署
  • 前端手册 Vue 3.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • CRUD 组件
    • 国际化
    • IDE 调试
    • 代码格式化
  • 前端手册 Vben 5.x

    • 开发规范
    • 菜单路由
      • 1. 路由
        • 1.1 静态路由
        • 1.2 动态路由
        • 1.3 路由跳转
      • 2. 菜单管理
        • 2.1 新增目录
        • 2.2 新增菜单
        • 2.3 新增按钮
      • 3. 权限控制
      • 4. 页面缓存
        • 4.1 静态路由的示例
        • 4.2 动态路由的示例
    • 图标、主题、国际化
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
    • IDE 调试
    • 代码格式化
  • 前端手册 Vue 2.x

    • 开发规范
    • 菜单路由
    • Icon 图标
    • 字典数据
    • 系统组件
    • 通用方法
    • 配置读取
  • 前端手册 Admin Uniapp

    • 开发规范
  • 更新日志

    • 【v2026-01】
    • 【v2025-12】
    • 【v2025-11】
    • 【v2025-10】
    • 【v2025-09】
    • 【v2025-08】
    • 【v2-6-1】2025-07-19
    • 【v2-6-0】2025-06-07
    • 【v2.5.0】2025-05-13
    • 【v2.4.2】2025-04-12
    • 【v2.4.1】2025-02-09
    • 【v2.4.0】2024-12-31
    • 【v2.3.0】2024-10-07
    • 【v2.2.0】2024-08-02
    • 【v2.1.0】2024-05-05
    • 【v2.0.1】2024-03-01
    • 【v2.0.0】2024-01-26
  • 开发指南
  • 前端手册 Vben 5.x
芋道源码
2024-12-30
目录

菜单路由

前端项目基于 Vben Admin 5.x 实现,它已经内置了路由、菜单、权限等功能。

官方文档

强烈建议先阅读 Vben Admin 官方文档,了解框架的基础概念和使用方式:

  • 《路由和菜单》 (opens new window)
  • 《权限》 (opens new window)【项目采用“后端访问控制”】

# 1. 路由

项目的路由分为两种:静态路由、动态路由。

# 1.1 静态路由

静态路由,是指在前端代码中直接定义的路由,不依赖后端接口返回。适用于一些固定的页面,如首页、个人中心等。

静态路由文件位于 src/router/routes/modules 目录下:

路由模块 antd 版本 ele 版本
首页 dashboard.ts (opens new window) dashboard.ts (opens new window)
系统管理 system.ts (opens new window) system.ts (opens new window)
基础设施 infra.ts (opens new window) infra.ts (opens new window)
AI 大模型 ai.ts (opens new window) ai.ts (opens new window)
工作流程 bpm.ts (opens new window) bpm.ts (opens new window)
CRM 系统 crm.ts (opens new window) crm.ts (opens new window)
商城系统 mall.ts (opens new window) mall.ts (opens new window)
会员系统 member.ts (opens new window) member.ts (opens new window)
支付系统 pay.ts (opens new window) pay.ts (opens new window)

# 1.2 动态路由

动态路由,代表那些需要根据用户动态判断权限,并通过 addRoutes (opens new window) 动态添加的页面,如用户管理、角色管理等功能页面。

在用户登录成功后,会触发 @/store/auth.ts (opens new window) 的 fetchUserInfo 方法,请求后端的菜单 RESTful API 接口,获取用户有权限的菜单列表,并存储到 accessStore 中。

之后,@/router/access.ts (opens new window) 的 generateAccess 方法,会将菜单转化为路由并动态添加。

友情提示:

  1. 动态路由可以在 [系统管理 -> 菜单管理] 进行新增和修改操作,请求的后端 RESTful API 接口是 /admin-api/system/auth/get-permission-info (opens new window)
  2. 动态路由使用 import.meta.glob 实现路由懒加载,参考 @/router/access.ts (opens new window) 中的 pageMap 定义

# 1.3 路由跳转

使用 useRouter 的 push 方法,可以实现跳转到不同的页面。

import { useRouter } from 'vue-router';

const { push } = useRouter();

// 方式一:使用 path 跳转
push('/system/user');

// 方式二:使用 path 跳转,并设置 query 参数
push('/bpm/process-instance/detail?id=' + row.processInstance.id);

// 方式三(推荐):使用 name 跳转,并设置 query 参数
push({ name: 'BpmProcessInstanceDetail', query: { id: row.processInstance.id } });

推荐使用 name 方式跳转,因为 path 方式在路由路径变更时需要同步修改,而 name 方式更加稳定。

# 2. 菜单管理

项目的菜单在 [系统管理 -> 菜单管理] 进行管理,支持无限层级,提供目录、菜单、按钮三种类型。如下图所示:

系统管理 -> 菜单管理

菜单可在 [系统管理 -> 角色管理] 被分配给角色。如下图所示:

系统管理 -> 角色管理

# 2.1 新增目录

① 大多数情况下,目录是作为菜单的【分类】:

新增目录 —— 菜单的分类

② 目录也提供实现【外链】的能力:

新增目录 —— 外链

# 2.2 新增菜单

新增菜单

# 2.3 新增按钮

新增按钮

# 3. 权限控制

前端通过权限控制,隐藏用户没有权限的按钮等,实现功能级别的权限。

友情提示:前端的权限控制,主要是提升用户体验,避免操作后发现没有权限。

最终在请求到后端时,还是会进行一次权限的校验。

更多可阅读 《权限》 (opens new window) 的「按钮细粒度控制」。


另外,项目的 TableAction 组件的 auth 属性,可进行按钮级别的权限控制。示例如下:

<template>
  <Grid table-title="岗位列表">
    <!-- 工具栏按钮 -->
    <template #toolbar-tools>
      <TableAction
        :actions="[
          {
            label: $t('ui.actionTitle.create', ['岗位']),
            type: 'primary',
            icon: ACTION_ICON.ADD,
            auth: ['system:post:create'],
            onClick: handleCreate,
          },
          {
            label: $t('ui.actionTitle.export'),
            type: 'primary',
            icon: ACTION_ICON.DOWNLOAD,
            auth: ['system:post:export'],
            onClick: handleExport,
          },
        ]"
      />
    </template>
    <!-- 行操作按钮 -->
    <template #actions="{ row }">
      <TableAction
        :actions="[
          {
            label: $t('common.edit'),
            type: 'link',
            icon: ACTION_ICON.EDIT,
            auth: ['system:post:update'],
            onClick: handleEdit.bind(null, row),
          },
          {
            label: $t('common.delete'),
            type: 'link',
            danger: true,
            icon: ACTION_ICON.DELETE,
            auth: ['system:post:delete'],
            popConfirm: {
              title: $t('ui.actionMessage.deleteConfirm', [row.name]),
              confirm: handleDelete.bind(null, row),
            },
          },
        ]"
      />
    </template>
  </Grid>
</template>
  • 实战案例(antd):apps/web-antd/src/views/system/post/index.vue (opens new window)
  • 实战案例(ele):apps/web-ele/src/views/system/post/index.vue (opens new window)

# 4. 页面缓存

开启缓存时,需要将 keepAlive 设置为 true,如下所示:

友情提示:页面缓存是什么?

简单来说,Tab 切换时,开启页面缓存的 Tab 保持原本的状态,不进行刷新。

详细可见 Vue 文档 —— KeepAlive (opens new window)

# 4.1 静态路由的示例

router 路由的 keepAlive 声明如下:

{
  path: '/system/notify-message',
  component: () => import('#/views/system/notify/my/index.vue'),
  name: 'MyNotifyMessage',
  meta: {
    title: '我的站内信',
    icon: 'ant-design:message-filled',
    keepAlive: true, // 开启页面缓存
  },
}

# 4.2 动态路由的示例

示例

开发规范
图标、主题、国际化

← 开发规范 图标、主题、国际化→

Theme by Vdoing | Copyright © 2019-2026 芋道源码 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×