复制扩展菜单

实现功能

菜单添加扩展功能,一个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
            }
        }
    }
}