library-picturebook-activity/backend/docs/MENU_INIT.md
aid 418aa57ea8 Day4: 超管端设计优化 + UGC绘本创作社区P0实现
一、超管端设计优化
- 文档管理SOP体系建立,docs目录重组
- 统一用户管理:跨租户全局视角,合并用户管理+公众用户
- 活动监管全模块重构:全部活动(统计卡片+阶段筛选+SuperDetail详情页)、报名数据/作品数据/评审进度(两层合一扁平列表)、成果发布(去Tab+统计+隐藏写操作)
- 菜单精简:移除评委管理/评审规则/通知管理
- Bug修复:租户编辑丢失隐藏菜单、pageSize限制、主色统一

二、UGC绘本创作社区P0
- 数据库:10张新表(user_works/user_work_pages/work_tags等)
- 子女账号独立化:Child升级为独立User,家长切换+独立登录
- 用户作品库:CRUD+发布审核,8个API
- AI创作流程:提交→生成→保存到作品库,4个API
- 作品广场:首页改造为推荐流,标签+搜索+排序
- 内容审核(超管端):作品审核+作品管理+标签管理
- 活动联动:WorkSelector作品选择器
- 布局改造:底部5Tab(发现/创作/活动/作品库/我的)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 22:20:25 +08:00

5.3 KiB
Raw Blame History

菜单初始化指南

📋 概述

菜单初始化脚本会根据项目的前端路由配置,自动创建菜单数据到数据库中。脚本会创建树形结构的菜单,包括顶级菜单和子菜单。

🚀 使用方法

1. 执行初始化脚本

backend 目录下执行:

pnpm init:menus

或者使用 npm

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 数组:

const menus = [
  {
    name: '菜单名称',
    path: '/路由路径',
    icon: 'IconOutlined', // Ant Design Icons 图标名称
    component: '组件路径', // 相对于 views 目录的路径
    parentId: null, // null 表示顶级菜单
    sort: 1, // 排序值,越小越靠前
    children: [
      // 子菜单数组(可选)
      // ...
    ],
  },
];

🗑️ 清空现有菜单(可选)

如果需要清空所有现有菜单后重新创建,可以取消注释脚本中的以下代码:

// 清空现有菜单
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

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/ 目录的路径

🔗 相关文档