---
name: business-menu-register
description: SpecPow business-menu-register skill
---

# 菜单注册

> 根据新增页面/功能，生成系统菜单注册 SQL 和路由配置

## 触发条件

- 新增页面需要注册到系统菜单
- 用户提到"注册菜单"/"添加菜单"/"系统菜单"
- 新模块的权限配置

## 铁律

1. **层级正确** — 一级菜单 → 二级菜单 → 按钮权限
2. **ID 唯一** — 菜单 ID 不与已有冲突
3. **路径一致** — 菜单路径与前端路由一致
4. **权限编码规范** — 模块:功能:操作

## 菜单结构

```sql
-- 一级菜单（目录）
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, menu_type, visible, status)
VALUES (2000, '模块名称', 0, 1, '/module', 'M', '0', '0');

-- 二级菜单（页面）
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, path, component, menu_type, visible, status)
VALUES (2001, '页面名称', 2000, 1, 'page', 'module/page/index', 'C', '0', '0');

-- 按钮权限
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, perms, visible, status)
VALUES (2011, '新增', 2001, 1, 'F', 'module:entity:add', '0', '0');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, perms, visible, status)
VALUES (2012, '修改', 2001, 2, 'F', 'module:entity:edit', '0', '0');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, perms, visible, status)
VALUES (2013, '删除', 2001, 3, 'F', 'module:entity:remove', '0', '0');
INSERT INTO sys_menu (menu_id, menu_name, parent_id, order_num, menu_type, perms, visible, status)
VALUES (2014, '查询', 2001, 4, 'F', 'module:entity:query', '0', '0');
```

## 工作流

1. **扫描已有菜单** — 查询最大 menu_id，避免冲突
2. **确认菜单层级** — 目录(M) → 菜单(C) → 按钮(F)
3. **生成 SQL** — 按层级顺序生成 INSERT 语句
4. **生成路由** — 对应的前端路由配置
5. **验证** — 检查 ID 唯一性和路径一致性

## 输出格式

1. 菜单注册 SQL（可直接执行）
2. 前端路由配置
3. 权限编码清单

## 红旗

- 菜单 ID 冲突 → 重新分配
- 路径与已有路由冲突 → 报告冲突
- 缺少父级菜单 → 先创建目录
