ruoyi‑vue3 添加【车辆管理】菜单组完整方案

若依Vue3采用后端动态路由 ,不需要手动改前端router文件;菜单、路由全部由后端「菜单管理」配置生成。

菜单结构:

复制代码
车辆管理(目录组,仅分组,无页面)
├─ 车辆列表(业务页面)
└─ 车辆消息(业务页面)

一、后端菜单管理配置(系统管理 → 菜单管理 → 新增)

1. 新增父目录:车辆管理

配置项 填写值
菜单名称 车辆管理
父菜单 顶级菜单(0)
显示顺序 按需填写,例如 5
菜单类型 目录(M)
路由地址 vehicle
组件路径 留空!目录不能填组件
权限标识 vehicle:*:*
图标 可选,如 truck
是否可见

2. 新增子菜单:车辆列表

在「车辆管理」菜单右侧,点击【新增子菜单】

配置项 填写值
菜单名称 车辆列表
父菜单 车辆管理
显示顺序 1
菜单类型 菜单©
路由地址 vehicleList
组件路径 vehicle/vehicleList/index
权限标识 vehicle:list:list
是否可见

3. 新增子菜单:车辆消息

继续给车辆管理新增子菜单

配置项 填写值
菜单名称 车辆消息
父菜单 车辆管理
显示顺序 2
菜单类型 菜单©
路由地址 vehicleMsg
组件路径 vehicle/vehicleMsg/index
权限标识 vehicle:msg:list
是否可见

✅ 菜单保存完成后:进入【角色管理】,给使用角色勾选 车辆管理、车辆列表、车辆消息 权限,保存角色。

二、前端创建页面文件

路径:src/views/,新建目录结构

复制代码
src/views/
└─ vehicle/
   ├─ vehicleList/
   │  └─ index.vue   // 车辆列表页面
   └─ vehicleMsg/
      └─ index.vue   // 车辆消息页面

src/views/vehicle/vehicleList/index.vue 基础模板

复制代码
<template>
  <div class="app-container">
    <el-card>
      <!-- 查询区域 -->
      <div class="search-container">
        <el-input v-model="queryParams.carNo" placeholder="车牌号" clearable style="width: 200px" />
        <el-button type="primary" icon="Search" @click="getList">搜索</el-button>
        <el-button icon="Refresh" @click="resetQuery">重置</el-button>
      </div>
      <!-- 表格 -->
      <el-table :data="list" border>
        <el-table-column label="ID" prop="id" />
        <el-table-column label="车牌号" prop="carNo" />
        <el-table-column label="车辆类型" prop="carType" />
      </el-table>
      <pagination v-show="total>0" :total="total" v-model:page="queryParams.pageNum" v-model:limit="queryParams.pageSize" @pagination="getList" />
    </el-card>
  </div>
</template>

<script setup name="VehicleList">
import { ref, reactive, onMounted } from 'vue'
import { getVehicleList } from '@/api/vehicle'

const list = ref([])
const total = ref(0)
const queryParams = reactive({
  pageNum: 1,
  pageSize: 10,
  carNo: ''
})

const getList = async () => {
  const res = await getVehicleList(queryParams)
  list.value = res.rows
  total.value = res.total
}

const resetQuery = () => {
  queryParams.carNo = ''
  getList()
}

onMounted(() => getList())
</script>

vehicleMsg/index.vue 复制上面模板,修改查询字段、表格列、调用接口即可。

三、新建api接口文件 src/api/vehicle.js

复制代码
import request from '@/utils/request'

// 车辆列表
export function getVehicleList(query) {
  return request({
    url: '/vehicle/list',
    method: 'get',
    params: query
  })
}

// 车辆消息列表
export function getVehicleMsgList(query) {
  return request({
    url: '/vehicle/msg/list',
    method: 'get',
    params: query
  })
}

四、生效操作

  1. 角色权限勾选保存
  2. 退出登录,重新登录(动态路由需要重登录拉取最新菜单)
  3. 左侧菜单出现「车辆管理」分组,可以展开看到车辆列表、车辆消息,点击正常跳转页面。

⚠️重点踩坑提醒

  1. 父目录组件路径必须为空,填写会白屏报错。
  2. 组件路径格式:vehicle/vehicleList/index,不要写 src/views,不要加 .vue
  3. 修改菜单/权限后必须重登,浏览器刷新不会更新动态路由。
  4. 图标名称要和若依内置图标库一致,写错图标不显示。
  5. 后端需要提供对应接口 /vehicle/list/vehicle/msg/list,否则页面请求报错。
  6. 不要手动修改 router/index.js,全部由后端菜单驱动。
相关推荐
还是大剑师兰特3 天前
若依(ruoyi)前后台系统从零到一部署配置(坑点带解析)
大剑师
还是大剑师兰特4 天前
ideaIC‑2024.1.7(社区版zip绿色解压版)完整使用教程
大剑师·idealc
还是大剑师兰特6 天前
MySQL8.0 Windows完整安装教程
windows·mysql·大剑师
还是大剑师兰特1 个月前
VSCode 插件冲突导致崩溃、卡死、假死 全套根治方案
vscode·大剑师
还是大剑师兰特1 个月前
ThinkPad T490 Windows 自动修复失败完整解决步骤
windows·大剑师·t490
还是大剑师兰特1 个月前
二年级奥数(12) : 巧填符号+竖式数字谜
大剑师·二年级奥数
还是大剑师兰特1 个月前
二年级奥数(9):鸡兔同笼+ 归一问题
大剑师·二年级奥数
还是大剑师兰特1 个月前
二年级奥数(7):移多补少8题 + 和差入门8题 + 年龄问题8题
大剑师·二年级奥数
还是大剑师兰特2 个月前
Vite6 + Vue3 + TS 完整版标准配置模板
vite·大剑师·vite6配置