实现功能
菜单添加扩展功能,一个app里的菜单可以修改其他app菜单的状态。
版本依赖
引擎 v2.2.2.RELEASE 以上
实现原理
添加mode、inherit_ids两个属性
字段 | 类型 | 描述 | 可选值 | 默认值 |
---|---|---|---|---|
mode | 字符串 | 模式 | primay\extension | primay |
inherit_ids | 字符串 | 扩展的菜单Id | 菜单Id | null |
在下面两个app的菜单种子数据,如果app1和app2同时安装,app2的菜单会扩展修改app1的菜单。当卸载app2时,系统菜单会恢复到app1的菜单状态。
配置示例
app1的菜单种子数据
{
"menus": {
"app1_menu1": {
"sequence": "1",
"name": "menu1",
"display_name": "主菜单"
},
"app1_menu2": { // 在app2的菜单中会复制这个菜单
"name": "menu2",
"sequence": "1",
"display_name": "子菜单1",
"view": "from,grid,search",
"model": "model1",
"parent_ids": {
"@ref": "app1_menu1"
}
},
"app1_menu3": { // 在app2的菜单中会扩展这个菜单
"name": "menu3",
"sequence": "2",
"display_name": "子菜单2",
"view": "from,grid,search",
"model": "model2",
"parent_ids": {
"@ref": "app1_menu1"
}
}
}
}
app2的菜单种子数据
{
"menus": {
"app2_menu1": {
"sequence": "1",
"name": "menu4",
"display_name": "主菜单2"
},
"app2_menu2": {
"name": "menu5", //复制菜单menu2,放到主菜单2
"sequence": "1", //目前,分布式环境下,两个app要装在同一个容器内才有效
"display_name": "子菜单1",
"view": "from,grid,search",
"model": "model1",
"parent_ids": {
"@ref": "app2_menu1"
}
},
"app2_menu3": {
"active": false, // 隐藏该菜单
"mode": "extension",
"inherit_ids": {
"@ref": "app1_menu3" // 扩展菜单app1_menu3
}
}
}
}