3.5.7.4 自定义页面

页面是什么

在Oinone前端体系中,页面是一个核心概念,它代表着终端用户所看到的当前视图。这个视图可以有多种形式,主要取决于页面是如何定义和构建的。在深入理解页面之前,我们需要了解两个关键的功能:自定义布局 和 自定义母版。

作用场景

自定义布局 提供了布局调整的强大功能,但在某些情况下,它可能无法完全满足特定的需求。这时,自定义页面就显得尤为重要。自定义页面是对 自定义布局 的补充,允许开发者从更深层次自由地控制和设计用户界面。

当标准布局无法实现所需的视觉效果或功能时,自定义页面提供了更高的灵活性。开发者可以通过自定义页面来实现独特的布局设计,添加特定的交互元素,或者整合复杂的业务逻辑,以创造独特且丰富的用户体验。

自定义页面

自定义视图组件允许开发者定义和使用特定于业务需求的视图布局。下面是一个具体的示例,展示了如何定义、注册和使用通过 setComponent 结合 TypeScript 和 Vue 的自定义视图组件。

示例工程目录

以下是需关注的工程目录示例,main.ts更新导入./view:

image.png

图3-5-7-48 自定义页面工程目录示例

1. 定义 TypeScript 组件

首先,我们定义了一个名为 CustomViewWidget 的 TypeScript 组件,并在该组件中通过 setComponent 结合 Vue 单文件组件。

import { BaseElementWidget, BaseElementViewWidget, SPI, ViewWidget } from '@kunlun/dependencies';
import CustomViewVue from './CustomView.vue';

@SPI.ClassFactory(BaseElementWidget.Token({ widget: 'CustomViewWidget' }))
  export class CustomViewWidget extends BaseElementViewWidget {
    public initialize(props) {
      super.initialize(props);
      this.setComponent(CustomViewVue);
      return this;
    }
  }

图3-5-7-49 定义TypeScript组件代码示例

2. Vue 单文件组件

其次,我们创建了对应的 Vue 单文件组件 CustomView.vue,用于展示自定义视图的具体内容。

<template>
  <div class="custom-view-wrapper">
    <h1>自定义视图</h1>
  </div>
</template>

<script lang="ts">
  import { defineComponent } from 'vue';

  export default defineComponent({
    inheritAttrs: false,
    name: 'ViewComponentVue'
  });
</script>

<style lang="scss">
  .custom-view-wrapper {}
</style>

图3-5-7-50 定义Vue组件代码示例

3. 注册自定义视图布局

接下来,我们使用 registerLayout 函数注册了一个表格视图布局,并在其中引入了通过 setComponent 结合的自定义视图组件。

import { registerLayout, ViewType } from "@kunlun/dependencies";

export const registerCustomView = () => {
  registerLayout(
    `
    <view type="TABLE">
      <element widget="CustomViewWidget" />
    </view>
    `,
    {
      viewType: ViewType.Table,
      moduleName: 'resource',
      model: 'resource.ResourceCountryGroup'
    }
  );
};

registerCustomView();

图3-5-7-51 注册自定义视图布局代码示例

效果

image.png

图3-5-7-52 自定义页面效果示例

4. 自定义视图在表格中的应用

当我们注册了自定义视图后,它就可以在表格视图中被使用。在表格视图的布局中,我们通过 标签将自定义视图嵌套在表格中,从而覆盖了表格的默认布局

5. 入参一致性

值得强调的是,registerLayout 函数和自定义布局的规则是一致的,这意味着开发者可以在自定义布局中使用与 registerLayout 相同的入参规则,从而实现更加灵活和统一的视图布局设计

与内置组件结合

1. 注册视图元素布局

首先,我们使用 registerLayout 函数注册了一个表格视图的布局。这个布局包含了搜索框、操作栏、以及一个自定义视图组件。

import { registerLayout, ViewType } from "@kunlun/dependencies";
import { CustomViewWidget } from "./CustomViewWidget";

export const registerViewElement = () => {
  registerLayout(
    `
    <view type="TABLE">
      <!-- 搜索和操作区域 -->
      <pack widget="group">
        <view type="SEARCH">
          <element widget="search" slot="search" slotSupport="field" />
        </view>
      </pack>

      <!-- 操作栏 -->
      <element widget="actionBar" slot="actionBar" slotSupport="action">
        <xslot name="actions" slotSupport="action" />
      </element>

      <!-- 自定义视图组件 -->
      <element widget="CustomViewWidget" />
    </view>
    `,
    {
      viewType: ViewType.Table,
      moduleName: 'resource',
      model: 'resource.ResourceCountry'
    }
  );
};

registerViewElement();

图3-5-7-53 注册视图布局代码示例

效果

image.png

图3-5-7-54 结合内置组件自定义页面效果示例

2. 视图布局结构说明

在这个布局中,我们使用了不同的标签来组织视图元素:

  • 标签用于组合多个元素为一个组。
  • 标签表示一个视图类型,这里包含了搜索框和操作栏。
  • 标签用于定义具体的元素,如搜索框和操作栏。
  • 标签引入了自定义视图组件 CustomViewWidget。

3. 视图元素的属性说明

通过传递相应的属性,我们定义了这个布局所属的视图类型(ViewType.Table)以及相关的模块和模型信息。

4. 自定义组件的使用

最后,我们展示了如何在表格视图布局中结合内置组件和自定义组件。这种设计灵活性高,可以根据具体业务需求定制各种复杂的视图。

使用元数据

1. 元数据的概念

元数据是描述数据的数据,它包含了关于数据的信息,如字段类型、验证规则、默认值等。在自定义页面中,元数据用于定义页面所需的数据结构、请求参数以及权限控制规则。

2. 元数据的收集

通过元数据的收集,我们可以获得当前页面所需的数据结构和相关请求参数的定义。这种方式避免了手动组装请求参数的繁琐过程,提高了开发效率。

3. 请求发起的效率提升

拥有了元数据,当前页面所在模型的所有请求可以直接使用收集到的元数据信息,无需手动组装请求参数。这不仅提升了请求发起的效率,还降低了出错的可能性。

4. 元数据在权限控制中的作用

元数据不仅用于请求发起,还在权限控制中发挥关键作用。通过元数据的信息,可以判断当前用户是否有权限查看、编辑或执行特定操作。这样避免了权限控制不生效的问题,确保系统的安全性和一致性。

5. 元数据元素的展示判断

在自定义页面中,如果使用了元数据元素作为页面的一部分,最好从收集中的元数据判断是否需要展示。这种方式确保了页面元素的显示与权限控制的一致性,有效地防止了未授权操作。

6. 最佳实践

  • 在自定义页面开发前,充分了解相关模型的元数据。

  • 利用元数据自动生成请求参数,提高开发效率。

  • 在页面渲染前,基于元数据进行权限判断,避免未授权操作。

7. 如何收集

使用 registerLayout 函数注册了一个自定义表格页面布局。在这个布局中,使用了 标签引入了自定义视图组件 CustomViewWidget,并通过 xslot 收集了操作和字段的元数据。

export const registerResolveModelView = () => {
    registerLayout(
        `
    <view type="TABLE">
      <element widget="CustomViewWidget" >
         <xslot name="actions" slotSupport="action" />
         <xslot name="fields" slotSupport="field" />
      </element>
    </view>
    `,
        {
            viewType: ViewType.Table,
            moduleName: 'resource',
            model: 'resource.ResourceCountry'
        }
    );
};

registerResolveModelView()

图3-5-7-55 xslot 收集操作和字段的元数据示例

8. 效果

没有xslot:

image.png

加入xslot:

Oinone社区 作者:史, 昂原创文章,如若转载,请注明出处:https://doc.oinone.top/oio4/9267.html

访问Oinone官网:https://www.oinone.top获取数式Oinone低代码应用平台体验

Like (0)
史, 昂's avatar史, 昂数式管理员
Previous 2024年5月23日 am9:11
Next 2024年5月23日 am9:13

相关推荐

  • 3.5.7.3 自定义布局

    布局是什么 在系统中,布局决定了母版内的页面元素,一个页面可以由多个组件进行组装,布局可以根据视图类型来替换。 默认布局范围: 图3-5-7-36 默认布局范围 作用场景 系统内置了多个布局组件,这些组件适用于全局、某个应用或某个页面,提供了灵活的布局定制选项。这些组件根据不同类型的视图进行了默认的组装,这也是选择了视图类型后,页面能够呈现的原因。当然,这些默认的组装是可以被覆盖、新增和添加新组件的。 使用registerLayout进行自定义布局 开发者在使用这些布局组件时,应该遵循公司的规范进行统一的调整。自定义布局组件的使用可通过 registerLayout 实现。registerLayout 的第一个参数是代表布局的 XML,第二个参数是不同的选项维度,默认包含以下维度: viewType: 视图类型 module: 视图模型所在模块 moduleName: 视图模型所在模块名称 model: 视图模型编码 modelName: 视图模型名称 viewName: 视图名称 actionName: 动作名称 inline: 是否内嵌视图(子视图特有) ttype: 模型字段类型(子视图特有) relatedTtype: 关联模型字段类型(子视图特有) field: 字段(子视图特有) 需要注意的是,动作可以是A模块下的a模型,这个动作可以打开B模块下的b模型的视图,module、moduleName、model、modelName应该填b模型对应的值,只不过大部分场景我们都是本模型的动作打开本模型的视图,所以这些场景拿动作所在模型填这些值也可以这些纬度也可以通过查看TS的定义查看 全局 在系统中,我们可以通过指定视图类型来决定某一类视图的全局布局。以表格为例,当第二个入参为 { viewType: ViewType.Table } 时,代表了替换了系统内所有表格的布局样式。 示例工程目录 以下是需关注的工程目录示例,main.ts更新导入./layout,layout/index.ts更新导出./tableLayout: 图3-5-7-37 全局纬度注册布局工程目录示例 示例代码 import {registerLayout, ViewType} from '@kunlun/dependencies' /** * 把系统内所有表格类型视图的全局动作放入搜索区域 * * 移动actionBar布局至外层 * <element widget="actionBar" slot="actionBar" slotSupport="action"> * <xslot name="actions" slotSupport="action" /> * </element> * */ const registerGlobalTableLayout = () => { return registerLayout(`<view type="TABLE"> <element widget="actionBar" slot="actionBar" slotSupport="action"> <xslot name="actions" slotSupport="action" /> </element> <pack widget="group"> <view type="SEARCH"> <element widget="search" slot="search" slotSupport="field" /> </view> </pack> <pack widget="group" slot="tableGroup"> <element widget="table" slot="table" slotSupport="field"> <element widget="expandColumn" slot="expandRow" /> <xslot name="fields" slotSupport="field" /> <element widget="rowActions" slot="rowActions" slotSupport="action" /> </element> </pack> </view>`, { viewType: ViewType.Table }) } registerGlobalTableLayout() 图3-5-7-38 全局纬度注册布局代码示例 效果 图3-5-7-39 全局纬度注册布局效果示例 应用 在系统中,我们可以通过指定视图类型和模块名称来替换某一类视图在特定模块下的全局布局。以表格为例,当第二个入参为 { viewType: ViewType.Table, moduleName: ‘resource’ } 时,代表了替换了资源应用下所有表格的布局样式,而其他应用仍使用默认布局 import {registerLayout, ViewType} from '@kunlun/dependencies' const registerModuleTableLayout = () => { return registerLayout(`<view type="TABLE"> <element widget="actionBar" slot="actionBar" slotSupport="action"> <xslot name="actions" slotSupport="action" /> </element> <pack widget="group"> <view type="SEARCH"> <element widget="search" slot="search" slotSupport="field" /> </view> </pack> <pack…

    2024年5月23日
    1.6K00
  • 应用审计

    1. 整体介绍 应用审计是基于模型字段记录用户操作留痕记录,通过定义审计规则,平台基于审计规则订阅的字段记录形成日志。平台名词概念: 应用日志:针对已订阅的审计规则记录用户操作信息,是用户在各应用中操作行为留痕记录。 审计规则:业务审计中,数据变化订阅记录的规则。 操作入口:应用中心——业务审计应用。 2. 审计规则 审计规则是指定义审计过程订阅数据变化的信息,根据模型、订阅到具体字段内容变化形成应用日志。如订阅销售订单的备注,销售订单S20231001888,订单备注【尽快发货】,备注修改为【需易碎品包装】,审计规则为:销售订单模型,订阅【备注】。 操作包括:新增、编辑、删除。 2.1. 新增 新增时,定义审计规则名称,选择需要审计的模型,指定需要订阅的字段信息,同时可以指定关联关系的字段。 需要注意:每个模型仅限定义单条审计规则。 2.2. 编辑 编辑同新增操作,不做赘述。 2.3. 删除 删除规则后,平台将不再监听对应数据的变更日志,请慎重删除。 3. 应用日志 应用日志是针对已订阅的审计规则记录用户操作信息。记录操作用户、IP、登录设备、位置、订阅的字段变化内容。 应用日志详情 4. 业务表达 4.1. 展示效果 表格-行操作—日志记录 详情—日志记录 4.2. 操作步骤 Step1:在应用中心,需要维护业务应用依赖业务审计应用; 操作入口:应用中心,找到业务应用——编辑,依赖模块选择业务审计。 Step2:配置审计规则; 操作入口:业务审计应用——审计规则——新增规则。 Step2:界面设计器配置日志记录; 操作入口:界面设计器,找到需要配置的页面——模型组件,将动作区的日志记录拖动到页面中。

    2024年1月20日
    1.6K00
  • 3.2 Oinone以模块为组织

    模块(module):是按业务领域划分和管理的最小单元,是一组功能、界面的集合。 带大家快速认识下如何构建一个oinone的模块并启动它。我会从以下几个维度去介绍模块的构建与启动方式、模块详解。让大家直观且全方位地了解oinone的模块所包含的内容 构建第一个Module 启动前端工程 应用中心

    Oinone 7天入门到精通 2024年5月23日
    3.0K00
  • 流程设计

    1.流程设计 进入流程设计页之后可以进行流程名称、流程说明的编辑,可以进行流程设计,流程参数配置,保存和发布。 1.1 流程配置 点击进入流程配置页面,若需要配置一些参数供流程使用,可在此添加和删除。删除流程参数时,若该参数已在流程中被使用则无法删除。参数支持文本、数值、日期、布尔四种类型。 1.2 保存 点击后流程设计进行存档,流程设计不完整也支持保存,下次进入流程设计回到保存的页面。 1.3 发布 第一次发布时右上角发布显示文字为发布流程,后续发布按钮显示文字为更新发布。发布后流程才会按照设计触发,首次发布和更新发布的逻辑一致,若流程中有未解决的错误则无法发布不成功,发布成功后页面跳转到显示全部流程的页面,流程状态为已启用、已更新。

    2024年6月20日
    1.6K00

Leave a Reply

Please Login to Comment