跳至主要內容

窗口动作ViewAction

Mr.Hope大约 5 分钟

窗口动作ViewAction

创建窗口属性解释

方法一 使用注解的方式创建

@UxRouteButton

@UxRouteButton(action = @UxAction(),value = @UxRoute())

这是一个自定义注解 UxRouteButton 的定义,具有以下属性:

  • action: 返回 UxAction 类型的配置,用于定义动作的基本配置。
  • value: 返回 UxRoute 类型的配置,用于定义窗口动作的配置。

这个注解可以用于类级别,用于声明一个路由按钮,指定了动作的基本配置和窗口动作的配置。

@UxAction

@UxAction(name = "", 
          label = "",
          contextType = ActionContextTypeEnum.SINGLE, 
          bindingType = ViewTypeEnum.FORM)

这段代码定义了一个名为 UxAction 的注解,用于配置动作的基本信息,具有以下属性:

  • name: 指定动作的名称。
  • displayName: 设置动作的展示名称,默认为空。
  • label: 指定动作的显示文字,默认为空。
  • summary: 设置动作的描述信息,默认为空。
  • contextType: 指定动作的上下文类型,默认为单个对象的上下文。
  • bindingType: 表示动作绑定在源模型的哪些视图上,默认为 TABLE 视图。
  • invisible: 设置动作的客户端显隐表达式,默认为空。
  • rule: 指定动作的服务端过滤表达式,默认为空。
  • disable: 设置动作的禁用规则,默认为空。
  • bindingView: 绑定特定视图,设置动作只出现在指定视图,默认为空。
  • priority: 设置动作的优先级,默认为99。
  • props: 扩展属性,用于定义动作的额外属性,默认为空。

这个注解可以用于局部变量,用于配置动作的基本信息。

@UxRoute

@UxRoute(
        value ="",
        model = "",
        viewName = "",
        viewType = ViewTypeEnum.TABLE,
        openType = ActionTargetEnum.ROUTER,
        module = "",
        title = "",
        theme = "",
        mask = "",
        views = {},
        queryMode = QueryModeEnum.DOMAIN,
        load = "",
        mapping = {},
        context = {},
        domain = "",
        filter = "",
        limit = 20
)

这这段代码定义了一个名为 UxRoute 的注解,用于描述窗口动作的配置信息。该注解具有以下属性:

  • value / model: 目标模型编码,指定窗口动作要操作的模型。
  • viewName: 指定目标视图的名称,默认为空,表示使用默认视图。
  • viewType: 视图类型,默认为 TABLE
  • openType: 打开方式,默认为 ROUTER
  • module: 目标模块编码。
  • title: 页面标题,默认为空。
  • theme: 主题,默认为空。
  • mask: 母版,默认为空。
  • views: 支持可供切换的视图类型列表,默认为空。
  • queryMode: 数据加载方式,默认为 DOMAIN
  • load: 数据加载函数编码,默认为空。
  • mapping: 数据传输映射DSL,默认为空。
  • context: 上下文,默认为空。
  • domain: 数据过滤-客户端,默认为空。
  • filter: 数据过滤-服务端,默认为空。
  • limit: 初始化页面数据数量限制,默认为 20。

这个注解可以应用于类,用于标识链接动作及其相关配置。

@UxClientButton.UxClientButtons

@UxClientButton.UxClientButtons(value ={})

这段代码定义了一个名为 UxClientButtons 的注解,用于配置按钮的列表,具有以下属性:

  • value: 按钮配置数组,用于指定按钮的配置列表。

这个注解可以应用于类,用于表示一组按钮配置。

方法二 使用继承MetaDataEditor 方式创建

createViewAction参数详解(建议更换为注解方式)

  • name: 技术名称,唯一建要求
  • displayName: 展示名称
  • originModel: ViewAction的绑定模型
  • originViewTypes: ViewAction在绑定模型的哪些视图类型上展示
  • targetModel: ViewAction跳转到的目标模型
  • targetViewType: ViewAction跳转到的目标模型的什么类型视图
  • contextType: ViewAction在绑定模型视图上设置展示的动作上下文类型。包括以下选项:
    • SINGLE(默认)——单行,常用于列表页(展示在每行末尾的操作栏中)和表单页(展示在页面上方)
    • BATCH——多行,常用于列表页(展示在表格上方按钮区)
    • SINGLE_AND_BATCH——单行或多行,常用于列表页(展示在表格上方按钮区)
    • CONTEXT_FREE——上下文无关,常用于列表页(展示在表格上方按钮区)
  • pageTarget: 页面打开方式,包括以下选项:
    • ROUTER:页面路由
    • DIALOG:页面弹窗
    • OPEN_WINDOW:打开新窗口
    • DRAWER:打开抽屉
  • `resViewName``: ViewAction跳转到的目标模型的指定视图的名称,该视图的类型需要跟targetViewType一致
  • title: 页面标题

以下是非createViewAction参数,但是ViewAction有的参数,createViewAction以后可以通过setXX方法来设置:

  • priority: 展示顺序
  • bindingView: 绑定特定视图
  • invisible: 隐藏规则
  • load: 对于特殊模型的窗口动作进行定制化的加载方式
  • filter: 代表后端过滤,是一定会加上的过滤条件,用户无感知

使用注解方式创建窗口动作

  1. 使用 @Model.model(PetShopProxy.MODEL_MODEL) 表示该类属于 PetShopProxy 模型。
  2. 使用 @UxRoute.model 表示视图动作的目标模型。
@Model.model(PetShopProxy.MODEL_MODEL)
@UxRouteButton(action = 
               @UxAction(name = "demo_petShop_batch_update", label = "批量更新数据状态",contextType = ActionContextTypeEnum.SINGLE_AND_BATCH),
               value = @UxRoute(model = PetShopBatchUpdate.MODEL_MODEL, viewType = ViewTypeEnum.FORM,openType = ActionTargetEnum.DIALOG)
)
@Component
public class PetShopProxyAction extends DataStatusBehavior<PetShopProxy> {}
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);
}

使用 createViewAction 创建窗口动作

继承 MetaDataEditor 并实现了 edit 接口:

  • command:表示应用生命周期的命令对象,用于控制应用的生命周期。您可以根据命令对象中的信息执行相应的操作。
  • metaMap:表示元数据的映射,其中键为字符串类型,表示元数据的标识符,值为 Meta 对象,表示对应的元数据信息。通过元数据映射,您可以获取并处理应用程序中的元数据信息。
package pro.shushi.pamirs.demo.core.init;

...//import

@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);
    }
}