跳至主要內容

菜单Menu

Mr.Hope大约 3 分钟

菜单Menu

菜单和模块就是地图与导航,没有地图、导航就无法畅游模块并进行相关业务操作。本文将展开介绍初始化Menu的两种方式分别是:注解式、数据初始化式。

怎么构建Menu

注解式

使用示例: 用@UxMenus声明DemoMenus为菜单初始化入口,同时该类在DemoModule配置扫描路径中,那么通过DemoMenus初始化的菜单都挂在demo_core这个模块上。

如果采用这种模式,建议同一个模块的菜单都只配置在一处

@UxMenus
public class DemoMenus implements ViewActionConstants {
    @UxMenu("商店管理")
    @UxRoute(PetShopProxy.MODEL_MODEL) 
    class PetShopProxyMenu{
        
    }
    
    @UxMenu("宠物达人")
    @UxRoute(PetTalent.MODEL_MODEL) 
    class PetTalentMenu{
        
    }
}

菜单的三种点击效果: 菜单的层级关系通过@UxMenu的嵌套进行描述

菜单点击效果有三种分别对应不同的Action的类型,关于Action的类型详见3.5.3【Action的类型open in new window】一文。

  1. 窗口动作(ViewAction): 通过@UxRoute定义一个与菜单绑定的viewAction,viewName代表视图的name(其默认值为redirectListPage,也就是跳转到列表),value代码视图所属模型的编码,viewType代表view类型(其默认值为ViewTypeEnum.TABLE)
@UxMenus
public class DemoMenus implements ViewActionConstants {

    @UxMenu("商店")
    class ShopMenu {
        @UxMenu("创建商店")
        @UxRoute(value = PetShop.MODEL_MODEL, viewName = "redirectCreatePage", viewType = ViewTypeEnum.FORM)
        class ShopCreateMenu {
        }
    }
}

效果:点击创建商店的时候,就会显示通过@UxRoute指定的一个窗口,显示类型为指定的viewType,这里是FROM。

  1. 服务器动作(ServerAction)@UxServer定义一个与菜单绑定的serverAction@UxMenu("UxServer")@UxServer(model = PetCatItem.MODEL_MODEL,name = "uxServer") 其中name代表serverAction的name,model或value代码serverAction所属模型的编码
@UxMenus 
public class DemoMenus implements ViewActionConstants {

    @UxMenu("商店") class ShopMenu{
        @UxMenu("UxServer")
        @UxServer(model = PetCatItem.MODEL_MODEL,name = "uxServer") 
        class ShopSayHelloMenu{
        }
    }
}

效果:点击UxServer时,会执行对应的服务器动作,这里在界面右上角弹出提示,提示信息为uxServer。

  1. 跳转动作(UrlAction): @UxLink定义一个与菜单绑定的UrlAction,@UxMenu("Oinone官网")@UxLink(value = "http://www.oinone.top",openType= ActionTargetEnum.OPEN_WINDOW) ,其中value为跳转url,openType为打开方式默认为ActionTargetEnum.ROUTER,打开方式有以下几种
    • ROUTER("router", "页面路由", "页面路由")
    • DIALOG("dialog", "页面弹窗", "页面弹窗")
    • DRAWER("drawer", "打开抽屉", "打开抽屉")
    • OPEN_WINDOW("openWindow", "打开新窗口", "打开新窗口")
@UxMenus
public class DemoMenus implements ViewActionConstants {
    @UxMenu("友情链接")
    class FlinkManagement {
        @UxMenu("Oinone官网")
        @UxLink(value = "http://www.oinone.top", openType = ActionTargetEnum.OPEN_WINDOW)
        class SsLink {
        }

        @UxMenu("百度")
        @UxLink(value = "http://www.baidu.com", openType = ActionTargetEnum.OPEN_WINDOW)
        class BaiduLink {
        }
    }
}

效果:点击Oinone官网时,会跳转到在@UxLink注解中指定的value值

数据初始化式(不推荐)

定义

在模块启动生命周期中,调用InitializationUtil工具中的createViewActionMenu。

示例

配置从宠物商店列表到PetShopBatchUpdate的窗口动作。

  1. 新建DemoModuleMetaDataEditor,MetaDataEditor是oinone在计算元数据时提供给我们主动动态生成元数据的方式,它在自动扫描元数据注解之后进行。我们只要实现MetaDataEditor接口就可以做一些元数据初始化事情,常用场景就是初始化一些交互相关的元数据如:窗口动作。
  2. 通过指定工具(InitializationUtil),生成一个窗口动作:动作名为【批量更新数据状态】,指定在宠物商店列表页,并且是单条或多条记录被选择中时出现。点击该窗口动作跳转到PetShopBatchUpdate的默认Form页,跳转方式为DIALOG弹出框。
@Component
public class DemoModuleMetaDataEditor implements MetaDataEditor {
    @Override
    public void edit(AppLifecycleCommand command, Map<String, Meta> metaMap) {
        InitializationUtil util = InitializationUtil.get(metaMap, DemoModule.MODULE_MODULE,DemoModule.MODULE_NAME);
        if(util==null){return;}

        //初始化自定义前端行为
        viewActionInit(util);
    }
    private void viewActionInit(InitializationUtil util){
        util.createViewAction("demo_petShop_batch_update","批量更新数据状态", PetShopProxy.MODEL_MODEL,
                InitializationUtil.getOptions(ViewTypeEnum.TABLE), PetShopBatchUpdate.MODEL_MODEL,ViewTypeEnum.FORM, ActionContextTypeEnum.SINGLE_AND_BATCH
                , ActionTargetEnum.DIALOG,null,null);
    }
}

菜单注解

@UxMenus

菜单集合,使用时应与@UxMenu配套使用

@UxMenu

使用示例

@UxMenus
public class DemoMenus implements ViewActionConstants {
    @UxMenu("商店管理")
    @UxRoute(PetShopProxy.MODEL_MODEL) 
    class PetShopProxyMenu{
        
    }
    
    @UxMenu("宠物达人")
    @UxRoute(PetTalent.MODEL_MODEL) 
    class PetTalentMenu{
        
    }
}
  • valuelabel:菜单显示名称
  • summary:菜单摘要信息
  • icon:菜单图标
  • clientTypes:客户端类型数组