library-picturebook-activity/backend/docs/MENU_INIT.md
2025-11-23 14:04:20 +08:00

220 lines
5.1 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.

# 菜单初始化指南
## 📋 概述
菜单初始化脚本会根据项目的前端路由配置,自动创建菜单数据到数据库中。脚本会创建树形结构的菜单,包括顶级菜单和子菜单。
## 🚀 使用方法
### 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)