# 菜单初始化指南 ## 📋 概述 菜单初始化脚本会根据项目的前端路由配置,自动创建菜单数据到数据库中。脚本会创建树形结构的菜单,包括顶级菜单和子菜单。 ## 🚀 使用方法 ### 1. 执行初始化脚本 在 `backend` 目录下执行: ```bash pnpm init:menus ``` 或者使用 npm: ```bash npm run init:menus ``` ### 2. 脚本功能 脚本会根据 `frontend/src/router/index.ts` 中的路由配置,自动创建以下菜单结构: ``` 仪表盘 (/dashboard) 系统管理 (/system) ├── 用户管理 (/system/users) ├── 角色管理 (/system/roles) ├── 菜单管理 (/system/menus) ├── 数据字典 (/system/dict) ├── 系统配置 (/system/config) └── 日志记录 (/system/logs) ``` ## 📝 菜单数据结构 ### 顶级菜单 1. **仪表盘** - 路径: `/dashboard` - 图标: `DashboardOutlined` - 组件: `dashboard/Index` - 排序: 1 2. **系统管理** - 路径: `/system` - 图标: `SettingOutlined` - 组件: `null` (父菜单) - 排序: 10 ### 系统管理子菜单 1. **用户管理** - 路径: `/system/users` - 图标: `UserOutlined` - 组件: `system/users/Index` - 排序: 1 2. **角色管理** - 路径: `/system/roles` - 图标: `TeamOutlined` - 组件: `system/roles/Index` - 排序: 2 3. **菜单管理** - 路径: `/system/menus` - 图标: `MenuOutlined` - 组件: `system/menus/Index` - 排序: 3 4. **数据字典** - 路径: `/system/dict` - 图标: `BookOutlined` - 组件: `system/dict/Index` - 排序: 4 5. **系统配置** - 路径: `/system/config` - 图标: `ToolOutlined` - 组件: `system/config/Index` - 排序: 5 6. **日志记录** - 路径: `/system/logs` - 图标: `FileTextOutlined` - 组件: `system/logs/Index` - 排序: 6 ## 🔄 脚本特性 ### 1. 幂等性 - 脚本支持重复执行 - 如果菜单已存在(相同名称和父菜单),会更新现有菜单 - 如果菜单不存在,会创建新菜单 ### 2. 树形结构 - 自动处理父子菜单关系 - 递归创建子菜单 - 保持菜单层级结构 ### 3. 数据更新 - 如果菜单已存在,会更新以下字段: - 路径 (path) - 图标 (icon) - 组件路径 (component) - 排序 (sort) - 有效状态 (validState) ## ⚙️ 自定义菜单数据 如果需要修改菜单数据,可以编辑 `backend/scripts/init-menus.ts` 文件中的 `menus` 数组: ```typescript const menus = [ { name: '菜单名称', path: '/路由路径', icon: 'IconOutlined', // Ant Design Icons 图标名称 component: '组件路径', // 相对于 views 目录的路径 parentId: null, // null 表示顶级菜单 sort: 1, // 排序值,越小越靠前 children: [ // 子菜单数组(可选) // ... ], }, ]; ``` ## 🗑️ 清空现有菜单(可选) 如果需要清空所有现有菜单后重新创建,可以取消注释脚本中的以下代码: ```typescript // 清空现有菜单 console.log('🗑️ 清空现有菜单...'); await prisma.menu.deleteMany({}); console.log('✅ 已清空现有菜单\n'); ``` **注意**: 清空菜单会删除所有现有菜单数据,请谨慎操作! ## 📊 执行结果示例 脚本执行成功后会显示: ``` 🚀 开始初始化菜单数据... 📝 创建菜单... ✓ 仪表盘 (/dashboard) ✓ 系统管理 (/system) ✓ 用户管理 (/system/users) ✓ 角色管理 (/system/roles) ✓ 菜单管理 (/system/menus) ✓ 数据字典 (/system/dict) ✓ 系统配置 (/system/config) ✓ 日志记录 (/system/logs) 🔍 验证结果... 📊 初始化结果: 顶级菜单数量: 2 总菜单数量: 8 📋 菜单结构: ├─ 仪表盘 (/dashboard) ├─ 系统管理 (/system) │ ├─ 用户管理 (/system/users) │ ├─ 角色管理 (/system/roles) │ ├─ 菜单管理 (/system/menus) │ ├─ 数据字典 (/system/dict) │ ├─ 系统配置 (/system/config) │ └─ 日志记录 (/system/logs) ✅ 菜单初始化完成! 🎉 菜单初始化脚本执行完成! ``` ## 🔍 验证菜单数据 初始化完成后,可以通过以下方式验证: ### 方式一:使用 Prisma Studio ```bash pnpm prisma:studio ``` 在浏览器中打开 Prisma Studio,查看 `menus` 表的数据。 ### 方式二:通过菜单管理页面 1. 登录系统 2. 访问"系统管理" -> "菜单管理" 3. 查看菜单列表,确认菜单已正确创建 ## ⚠️ 注意事项 1. **数据库连接**: 确保 `.env` 文件中的 `DATABASE_URL` 配置正确 2. **Prisma Client**: 确保已运行 `pnpm prisma:generate` 生成 Prisma Client 3. **数据库迁移**: 确保已运行 `pnpm prisma:migrate` 创建数据库表结构 4. **图标名称**: 图标名称必须是有效的 Ant Design Icons 组件名称 5. **路径格式**: 路由路径必须以 `/` 开头 6. **组件路径**: 组件路径是相对于 `frontend/src/views/` 目录的路径 ## 🔗 相关文档 - [数据库配置指南](./DATABASE_SETUP.md) - [管理员账户初始化](./ADMIN_ACCOUNT.md) - [路由配置说明](../frontend/src/router/index.ts)