外观
菜单管理
使用说明
主界面
刷新菜单缓存:等效于当前用户重新登录。即触发重新获取数据字典和当前用户的权限信息,然后生成当前用户的菜单。

新增目录
目录功能1:用于菜单分类
- 路由地址:以
/开头

目录功能2:用于外链
- 路由地址:以
http或https开头

新增菜单
- 路由地址:直接写英文名称。例如
server - 组件地址:前端Vue组件相对于
src/views的地址。例如组件完整地址src/views/system/user/index.vue,则填写system/user/index - 组件名称:前端Veu组件中定义的名称。例如
defineOptions({ name: 'SystemUser' }),则填写SystemUser - 权限标识:填写权限字符串。例如
system:user:query

新增按钮
不同的按钮,一般对应不同的权限标识。例如
| 按钮 | 权限标识示例 |
|---|---|
| 查询 | asset:server:query |
| 新增 | asset:server:create |
| 修改 | asset:server:update |
| 删除 | asset:server:delete |
| 导出 | asset:server:export |
| 导入 | asset:server:import |

示例

TIP
新增菜单后,需要到【角色管理——菜单权限】,对用户进行授权。授权后的用户,重新登录,才能看到新增的菜单。
后端实现
目录
代码目录:mysite\myapp_system\menu
模型
菜单模型SystemMenu
parent_id外键指向了父节点。默认删除策略为models.CASCADE,即删除当前节点时,会级联删除其子节点。
python
class SystemMenu(BaseModel):
id = models.BigAutoField(primary_key=True, db_comment="菜单ID", help_text="菜单ID")
# ...
parent_id = models.ForeignKey(
"self",
on_delete=models.CASCADE,
null=True,
blank=True,
db_constraint=False,
db_column="parent_id",
db_comment="父菜单ID",
help_text="父菜单ID",
related_name="children",
)
# ...视图
菜单视图MenuViewSet继承了CustomModelViewSetNoExport
- 如果要实现不允许级联删除子菜单,可启动下面代码。该代码重写了
destropy方法,在删除前检查是否有子节点。
python
# @extend_schema(summary="删除")
# def destroy(self, request, *args, **kwargs):
# """删除菜单,存在子菜单,不允许删除"""
# if self.get_object().children.exists():
# return CommonResponse.error(code=111601, msg="存在子菜单,无法删除")
# return super().destroy(request, *args, **kwargs)前端实现
目录
代码目录:src\views\system\menu
sh
menu/
|-- MenuForm.vue # 新增/编辑界面
`-- index.vue # 主界面