frontend-store/docs/static_menu_configuration.md
2025-08-04 20:02:06 +08:00

168 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 静态菜单配置说明
## 概述
当前系统使用静态菜单配置,所有菜单项都在前端代码中硬编码定义。菜单配置位于 `src/api/layout/index.js` 文件中的 `getUserMenu()` 函数。
## 当前菜单结构
```
我的酒单 (/taplist)
├── 组件: /barmgr/tap/index
├── 图标: IconProIdcardOutlined
└── 功能: 酒头管理页面
模板管理 (/template) - 目录菜单
├── 酒单模板 (/template/index)
│ ├── 组件: /template/beer/index
│ └── 图标: IconProLinkOutlined
└── 整版酒单 (/template/menu)
├── 组件: /template/menu/index
└── 图标: IconProAppstoreOutlined
酒款搜索 (/search) - 隐藏菜单
├── 组件: /barmgr/search/index
├── 图标: IconProConnectionOutlined
└── 状态: hide: true (不在菜单中显示,但路由可用)
个人中心 (/profile) - 隐藏菜单
├── 组件: profile
├── 图标: IconProUserOutlined
└── 状态: hide: true
```
## 菜单项属性说明
### 基本属性
- `path`: 路由路径
- `component`: 对应的Vue组件路径
- `meta.title`: 菜单显示名称
- `meta.icon`: 菜单图标
- `meta.hide`: 是否隐藏菜单项true表示隐藏
- `redirect`: 目录菜单的重定向路径
- `children`: 子菜单数组
### 特殊配置
- **目录菜单**: 设置 `children` 属性,包含子菜单
- **隐藏菜单**: 设置 `meta.hide: true`,路由存在但不显示在菜单中
- **重定向**: 目录菜单设置 `redirect` 到默认子菜单
## 组件映射关系
| 菜单路径 | 组件路径 | 实际文件位置 |
|----------|----------|--------------|
| `/taplist` | `/barmgr/tap/index` | `src/views/barmgr/tap/index.vue` |
| `/search` | `/barmgr/search/index` | `src/views/barmgr/search/index.vue` |
| `/template/index` | `/template/beer/index` | `src/views/template/beer/index.vue` |
| `/template/menu` | `/template/menu/index` | `src/views/template/menu/index.vue` |
| `/profile` | `profile` | `src/views/profile/index.vue` |
## 图标配置
当前使用的图标都映射到Element Plus的图标
```javascript
const ruoYiIcons = {
// ... 其他图标映射
'IconProIdcardOutlined': '身份证图标',
'IconProConnectionOutlined': '连接图标',
'IconProLinkOutlined': '链接图标',
'IconProAppstoreOutlined': '应用商店图标',
'IconProUserOutlined': '用户图标'
}
```
## 修改菜单
### 添加新菜单
`getUserMenu()` 函数中添加新的菜单对象:
```javascript
temp.unshift({
path: '/new-menu',
component: '/path/to/component',
meta: { title: '新菜单', icon: 'IconName' }
});
```
### 添加子菜单
```javascript
temp.unshift({
path: '/parent',
redirect: '/parent/child1',
meta: { title: '父菜单', icon: 'IconName' },
children: [
{
path: '/parent/child1',
component: '/path/to/child1',
meta: { title: '子菜单1', icon: 'IconName' }
}
]
});
```
### 隐藏菜单
```javascript
temp.push({
path: '/hidden-menu',
component: '/path/to/component',
meta: {
title: '隐藏菜单',
icon: 'IconName',
hide: true
}
});
```
## 菜单顺序
菜单的显示顺序由添加顺序决定:
- `temp.unshift()`: 添加到数组开头(顶部显示)
- `temp.push()`: 添加到数组末尾(底部显示)
当前顺序:
1. 我的酒单unshift
2. 模板管理unshift所以实际显示在第1位
3. 酒款搜索push隐藏
4. 个人中心push隐藏
实际显示顺序:
1. 模板管理
2. 我的酒单
## 后续迁移到动态路由
当需要迁移到动态路由时:
1. **数据库配置**: 使用 `backend-server/sql/barmgr_menu_config.sql`
2. **接口调用**: 修改 `getUserMenu()` 函数调用后端API
3. **权限控制**: 结合角色权限系统
4. **数据映射**: 将数据库菜单数据转换为前端路由格式
## 优势与限制
### 静态路由优势
- ✅ 简单直接,无需数据库配置
- ✅ 开发调试方便
- ✅ 性能好无需额外API请求
- ✅ 不依赖后端权限系统
### 静态路由限制
- ❌ 无法根据用户权限动态显示菜单
- ❌ 修改菜单需要重新部署前端
- ❌ 无法实现精细化权限控制
- ❌ 不适合多角色复杂系统
## 测试验证
配置完成后,可以通过以下方式验证:
1. **菜单显示**: 登录系统查看左侧菜单是否正确显示
2. **路由跳转**: 点击菜单项检查页面跳转是否正常
3. **隐藏菜单**: 确认隐藏菜单不在菜单中显示
4. **直接访问**: 在浏览器地址栏直接访问隐藏菜单路径
## 相关文件
- **菜单配置**: `frontend-store/src/api/layout/index.js`
- **页面组件**: `frontend-store/src/views/barmgr/`
- **路由系统**: `frontend-store/src/router/`