本文档详细说明车辆异常运行监控告警功能的后台菜单结构和权限配置。执行SQL脚本后会自动创建完整的菜单结构。
车辆监控 (vehicle-monitor) - 目录菜单
├── 车辆异常告警 (vehicleAlert) - 菜单
│ ├── 告警查询 - 按钮权限
│ ├── 处理告警 - 按钮权限
│ ├── 删除告警 - 按钮权限
│ └── 导出告警 - 按钮权限
└── 告警配置管理 (vehicleAlertConfig) - 菜单
├── 配置查询 - 按钮权限
├── 新增配置 - 按钮权限
├── 修改配置 - 按钮权限
├── 删除配置 - 按钮权限
└── 导出配置 - 按钮权限
| 字段 | 值 |
|---|---|
| 菜单名称 | 车辆监控 |
| 父菜单 | 顶级菜单 (0) |
| 显示排序 | 5 |
| 路由地址 | vehicle-monitor |
| 菜单类型 | 目录 (M) |
| 菜单图标 | monitor |
| 是否可见 | 是 |
| 菜单状态 | 正常 |
| 备注 | 车辆监控管理目录 |
特点:
- 📁 目录类型,不对应具体页面
- 🎨 使用monitor图标
- 📍 顶级菜单,显示在左侧导航栏
| 字段 | 值 |
|---|---|
| 菜单名称 | 车辆异常告警 |
| 父菜单 | 车辆监控 |
| 显示排序 | 1 |
| 路由地址 | vehicleAlert |
| 组件路径 | system/vehicleAlert/index |
| 菜单类型 | 菜单 (C) |
| 菜单图标 | warning |
| 是否缓存 | 否 |
| 权限标识 | system:vehicleAlert:list |
| 备注 | 车辆异常运行告警管理 |
功能按钮权限:
system:vehicleAlert:querysystem:vehicleAlert:handlesystem:vehicleAlert:removesystem:vehicleAlert:export| 字段 | 值 |
|---|---|
| 菜单名称 | 告警配置管理 |
| 父菜单 | 车辆监控 |
| 显示排序 | 2 |
| 路由地址 | vehicleAlertConfig |
| 组件路径 | system/vehicleAlertConfig/index |
| 菜单类型 | 菜单 (C) |
| 菜单图标 | edit |
| 是否缓存 | 否 |
| 权限标识 | system:vehicleAlertConfig:list |
| 备注 | 车辆告警配置管理 |
功能按钮权限:
system:vehicleAlertConfig:querysystem:vehicleAlertConfig:addsystem:vehicleAlertConfig:editsystem:vehicleAlertConfig:removesystem:vehicleAlertConfig:export| 权限标识 | 说明 | 类型 |
|---|---|---|
system:vehicleAlert:list |
告警列表 | 菜单访问 |
system:vehicleAlert:query |
告警查询 | 按钮权限 |
system:vehicleAlert:handle |
处理告警 | 按钮权限 |
system:vehicleAlert:remove |
删除告警 | 按钮权限 |
system:vehicleAlert:export |
导出告警 | 按钮权限 |
| 权限标识 | 说明 | 类型 |
|---|---|---|
system:vehicleAlertConfig:list |
配置列表 | 菜单访问 |
system:vehicleAlertConfig:query |
配置查询 | 按钮权限 |
system:vehicleAlertConfig:add |
新增配置 | 按钮权限 |
system:vehicleAlertConfig:edit |
修改配置 | 按钮权限 |
system:vehicleAlertConfig:remove |
删除配置 | 按钮权限 |
system:vehicleAlertConfig:export |
导出配置 | 按钮权限 |
NOT EXISTS 检查,避免重复插入INSERT INTO sys_menu (...)
SELECT '车辆监控', 0, 5, 'vehicle-monitor', ...
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '车辆监控' AND menu_type = 'M');
SET @vehicleMonitorMenuId = (SELECT menu_id FROM sys_menu WHERE menu_name = '车辆监控' AND menu_type = 'M' LIMIT 1);
INSERT INTO sys_menu (...)
SELECT '车辆异常告警', @vehicleMonitorMenuId, 1, 'vehicleAlert', ...
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM sys_menu WHERE menu_name = '车辆异常告警' AND perms = 'system:vehicleAlert:list');
如果使用动态路由(从后端加载菜单),无需额外配置。如果使用静态路由,需在 router/index.js 中添加:
{
path: '/vehicle-monitor',
component: Layout,
redirect: '/vehicle-monitor/vehicleAlert',
name: 'VehicleMonitor',
meta: { title: '车辆监控', icon: 'monitor' },
children: [
{
path: 'vehicleAlert',
component: () => import('@/views/system/vehicleAlert/index'),
name: 'VehicleAlert',
meta: { title: '车辆异常告警', icon: 'warning' }
},
{
path: 'vehicleAlertConfig',
component: () => import('@/views/system/vehicleAlertConfig/index'),
name: 'VehicleAlertConfig',
meta: { title: '告警配置管理', icon: 'edit' }
}
]
}
建议分配所有权限:
- ✅ 告警列表访问
- ✅ 告警查询
- ✅ 处理告警
- ✅ 删除告警
- ✅ 导出告警
- ✅ 配置管理所有权限
建议分配基础权限:
- ✅ 告警列表访问
- ✅ 告警查询
- ✅ 处理告警
- ❌ 删除告警
- ✅ 导出告警
- ❌ 配置管理权限
建议分配只读权限:
- ✅ 告警列表访问
- ✅ 告警查询
- ❌ 处理告警
- ❌ 删除告警
- ✅ 导出告警
- ❌ 配置管理权限
-- 为角色ID=2(示例)分配告警管理权限
INSERT INTO sys_role_menu (role_id, menu_id)
SELECT 2, menu_id FROM sys_menu
WHERE perms LIKE 'system:vehicleAlert:%' OR perms LIKE 'system:vehicleAlertConfig:%';
执行SQL脚本后,请验证以下内容:
-- 查询车辆监控菜单结构
SELECT
m1.menu_name AS '一级菜单',
m2.menu_name AS '二级菜单',
m3.menu_name AS '按钮',
m3.perms AS '权限标识'
FROM sys_menu m1
LEFT JOIN sys_menu m2 ON m2.parent_id = m1.menu_id
LEFT JOIN sys_menu m3 ON m3.parent_id = m2.menu_id
WHERE m1.menu_name = '车辆监控'
ORDER BY m2.order_num, m3.order_num;
预期结果:应该看到完整的菜单树结构
-- 统计告警相关权限数量
SELECT COUNT(*) AS '权限数量' FROM sys_menu
WHERE perms LIKE 'system:vehicleAlert%';
预期结果:应该有11个权限(2个list + 9个按钮)
原因:
- 菜单未创建成功
- 用户角色未分配菜单权限
- 缓存未刷新
解决方法:
```sql
-- 检查菜单是否存在
SELECT * FROM sys_menu WHERE menu_name = '车辆监控';
-- 检查角色权限
SELECT rm.*, m.menu_name, m.perms
FROM sys_role_menu rm
JOIN sys_menu m ON rm.menu_id = m.menu_id
WHERE rm.role_id = YOUR_ROLE_ID
AND m.menu_name LIKE '%告警%';
-- 清除用户缓存
DELETE FROM sys_user_online WHERE user_name = 'YOUR_USERNAME';
```
原因:
- 按钮权限未分配
- 前端v-hasPermi指令权限标识不匹配
解决方法:
- 检查角色是否分配了对应的按钮权限
- 确认前端代码中的权限标识与数据库一致
原因:菜单已存在
解决方法:
- SQL脚本已使用NOT EXISTS防重复,正常情况不会报错
- 如果报唯一键冲突,说明数据已存在,可以忽略
原因:父菜单不存在或名称不匹配
解决方法:
```sql
-- 检查父菜单
SELECT menu_id, menu_name FROM sys_menu WHERE menu_name = '车辆监控';
-- 如果不存在,先执行父菜单创建SQL
```
如有问题,请参考:
- 📄 完整实现总结
- 📄 快速部署指南
- 📄 前端部署指南
文档版本: v1.0
更新时间: 2026-01-12
维护人员: AI开发助手