4.1.1 模块之yml文件结构详解

本节是对demo的boot工程的application-*.yml文件关于oinone相关配置的扩充讲解,大家可以先通读留个影响,以备不时之需

在基础入门的模块一章中大家构建,并通过启动前后应用,直观地感受到我们自己建的demo模块。在上述过程中想必大家都了解到我们oinone的boot工程是专门用来做应用启动管理,它完全没有任何业务逻辑,它只决定启动哪些模块、启动方式、以及相关配置。它跟Spring Boot的一个普通工程没有什么差异。所有我们只要看application-*.yml文件,oinone提供了哪些特殊配置就能窥探一二。

这里主要介绍pamirs路径下的核心以及常用的配置项

一、pamirs.boot

  1. pamirs.boot.init

    1. 描述:启动加载程序,是否启动元数据、业务数据和基础设施的加载与更新程序,在应用启动时同时对模块进行生命周期管理

    2. true ##标准版,只支持true

  2. pamirs.boot.sync

    1. 描述:同步执行加载程序,启动时对模块进行生命周期管理采用同步方式

    2. true ##标准版,只支持true

  3. pamirs.boot.modules

    a. 描述:启动模块列表。这里只有base模块是必须的。为了匹配我们的前端模版,在demo的例子中加入了其他几个通用业务模块。当然这些通用业务模块也是可以大大降低大家的开发难度以及提升业务系统的设计质量

    b. - base #oinone的基础模块

    c. - common #oinone的一些基础辅助功能

    d. - sequence #序列的能力

    e. - resource #基础资源如

    f. - user #基础用户

    g. - auth #权限

    h. - message #消息

    i. - international #国际化

    j. - business #商业关系

    k. - file #文件,demo里没有默认加入,如果要开发导入导出相关功能,可以对应引入改模块

    l. - …… 还有很多通用业务模块以及这些模块的详细介绍,我们在介绍第六章【oinone的通用能力】的章节去展开

  4. pamirs.boot.mode

    ⅰ. dev:不走缓存,可以直接修改元数据。特别是我们在说页面设计的时候,可以修改base_view表直接生效不需要重启系统

配置举例

pamirs:
    boot:
    init: true
    sync: true
    modules:
      - base
      - common
      - sequence
      - resource
      - user
      - auth
      - message
      - international
      - business
      - demo_core

图4-1-1-1 pamirs.boot.mode配置举例

二、pamirs.boot.profile与pamirs.boot.options

pamirs.boot.option, 在pamirs.boot.options中可以自定义可选项,也可以根据pamirs.boot.profile属性来指定这些可选项,pamirs.boot.profile属性的默认值为CUSTOMIZE。只有pamirs.boot.profile=CUSTOMIZE时,才能在pamirs.boot.options中自定义可选项。

可选项 说明 默认值 AUTO READONLY PACKAGE DDL
reloadModule 是否加载存储在数据库中的模块信息 false true true true true
checkModule 校验依赖模块是否安装 false true true true true
loadMeta 是否扫描包读取模块元数据 true true false true true
reloadMeta 是否加载存储在数据库中元数据 false true true true true
computeMeta 是否重算元数据 true true false true true
editMeta 编辑元数据,是否支持编程式编辑元数据 true true false true true
diffMeta 差量减计算元数据 false true false true false
refreshSessionMeta 刷新元数据缓存 true true true true true
rebuildHttpApi 刷新重建前后端协议 true true true false false
diffTable 差量追踪表结构变更 false true false true false
rebuildTable 更新重建表结构 true true false true false
printDDL 打印重建表结构DDL false false false false true
publishService 发布服务,是否发布远程服务 true true true false false
updateModule 分布式模块管理 false true false true false
updateMeta 初始化与更新元数据,是否将元数据的变更写入数据库 false true false true false
updateData 初始化与更新内置业务数据,是否将内置业务数据的变更写入数据库 true true false true false
params 扩展参数 可自定义 可自定义 可自定义 可自定义 可自定义

表4-1-1-1 pamirs.boot.options列表

可以在启动日志中可查看当前服务启动可选项。

image.png

图4-1-1-2 在启动日志中查看当前服务启动可选项

三、pamirs.meta

  1. pamirs.meta.metaPackages

    1. 描述:自定义元模型的所在包路径。标准版只能是pro.shushi.pamirs.trigger.model
  2. 配置举例

pamirs: 
    meta:
    metaPackages:
      - pro.shushi.pamirs.trigger.model

图4-1-1-3 pamirs.meta配置举例

四、pamirs.framework

  1. pamirs.framework.gateway #graphql的可选项配置

apamirs.framework.gateway.show-doc #是否对外提供gql的scheme文档查询能力,在3.2.1【构建第一个Module】一文中“DemoMoudel的启动”的部分之所以可以用Insomnia开查看后端的文档,就是这里要配置为true

bpamirs.framework.gateway.statistics #用于收集DataLoader执行过程中的状态,比如缓存命中多少次,已经load了多少个对象,有多少次error等

  1. pamirs.framework.hook

    1. pamirs.framework.hook.ignoreAll #默认为false,为true忽略掉所有hook函数

    2. pamirs.framework.hook.excludes #排除掉部分hook函数

  2. pamirs.framework.data #这个经常会使用到,大家一定要了解

    1. pamirs.framework.data.default-ds-key #模块的默认数据库key,对应pamirs.datasource配置

    2. pamirs.framework.data.ds-map #为模块指定数据库key,对应pamirs.datasource配置。在demo中我们如果要为demo_core这个模块配置独立数据库就可以在这里配置如 demo_core: demo,并在pamirs.datasource配置key为demo的数据源

  3. pamirs.framework.system

    1. pamirs.framework.system.system-ds-key #元数据系统对应的数据源,对应pamirs.datasource配置

    2. pamirs.framework.system.system-models #视为元数据模型,一起放到system-ds-key库

  4. 配置举例

pamirs:
  framework:
    system:
      system-ds-key: base
      system-models:
        - base.WorkerNode
    data:
      default-ds-key: pamirs
      ds-map:
        base: base
    gateway:
      statistics: true
      show-doc: true
    #hook 如下配置
    #hook:
      #excludes:
        #- pro.shushi.pamirs.core.common.hook.QueryPageHook4TreeAfter
        #- pro.shushi.pamirs.user.api.hook.UserQueryPageHookAfter
        #- pro.shushi.pamirs.user.api.hook.UserQueryOneHookAfter

图4-1-1-4 pamirs.framework 配置举例

五、pamirs.dialect.ds

  1. 描述:pamirs.datasource中数据源的方言信息,以key为对应。

  2. 子参数有:type(默认:MySQL),version(默认:8.0),majorVersion(默认:8)

  3. 配置举例

pamirs: 
    dialect: #MySQL8.0可不配置
    ds: 
        base: # pamirs.datasource中数据源的方言信息,以key为对应
        type: MySQL
        version: 8.0
        majorVersion: 8
      pamirs: # pamirs.datasource中数据源的方言信息,以key为对应
        type: MySQL
        version: 8.0
        majorVersion: 8

图4-1-1-5 pamirs.dialect.ds配置举例

六、pamirs.datasource

  1. 描述:安装模块所需要的数据源配置

  2. 配置举例

pamirs: 
  datasource:
    pamirs:
      driverClassName: com.mysql.cj.jdbc.Driver
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://127.0.0.1:3306/demo?useSSL=false&allowPublicKeyRetrieval=true&useServerPrepStmts=true&cachePrepStmts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true
      username: root
      password: oinone
      initialSize: 5
      maxActive: 200
      minIdle: 5
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      asyncInit: true
    base:
      driverClassName: com.mysql.cj.jdbc.Driver
      type: com.alibaba.druid.pool.DruidDataSource
      url: jdbc:mysql://127.0.0.1:3306/demo_base?useSSL=false&allowPublicKeyRetrieval=true&useServerPrepStmts=true&cachePrepStmts=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&autoReconnect=true&allowMultiQueries=true
      username: root
      password: oinone
      initialSize: 5
      maxActive: 200
      minIdle: 5
      maxWait: 60000
      timeBetweenEvictionRunsMillis: 60000
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      asyncInit: true

图4-1-1-6 pamirs.datasource配置举例

七、pamirs.sharding

  1. 描述oinone的分库分表配置,当使用pamirs-trigger-bridge-tbschedule工程开启内置schedule功能时必须配置。

  2. 配置举例 - 参考4.1.24【框架之分库分表】一文。

pamirs: 
  sharding:
    define:
      data-sources:
        ds: pamirs
        pamirsSharding: pamirs #申明pamirsSharding库对应的pamirs数据源
        testShardingDs:        #申明testShardingDs库对应的testShardingDs_0\1数据源
          - testShardingDs_0
          - testShardingDs_1
      models:
        "[trigger.PamirsSchedule]":
          tables: 0..13
        "[demo.ShardingModel]":
          tables: 0..7
          table-separator: _
        "[demo.ShardingModel2]":
          ds-nodes: 0..1       #申明testShardingDs库对应的建库规则
          ds-separator: _
          tables: 0..7
          table-separator: _
    rule:
      pamirsSharding: #配置pamirsSharding库的分库分表规则
        actual-ds:
          - pamirs #申明pamirsSharding库对应的pamirs数据源
        sharding-rules:
          # Configure sharding rule,以下配置跟sharding-jdbc配置一致
          - tables:
              demo_core_sharding_model:
                actualDataNodes: pamirs.demo_core_sharding_model_${0..7}
                tableStrategy:
                  standard:
                    shardingColumn: user_id
                    shardingAlgorithmName: table_inline
            shardingAlgorithms:
              table_inline:
                type: INLINE
                props:
                  algorithm-expression: demo_core_sharding_model_${(Long.valueOf(user_id) % 8)}
        props:
          sql.show: true
      testShardingDs: #配置testShardingDs库的分库分表规则
        actual-ds: #申明testShardingDs库对应的pamirs数据源
          - testShardingDs_0
          - testShardingDs_1
        sharding-rules:
          # Configure sharding rule,以下配置跟sharding-jdbc配置一致
          - tables:
              demo_core_sharding_model2:
                actualDataNodes: testShardingDs_${0..1}.demo_core_sharding_model2_${0..7}
                databaseStrategy:
                  standard:
                    shardingColumn: user_id
                    shardingAlgorithmName: ds_inline
                tableStrategy:
                  standard:
                    shardingColumn: user_id
                    shardingAlgorithmName: table_inline
            shardingAlgorithms:
              table_inline:
                type: INLINE
                props:
                  algorithm-expression: demo_core_sharding_model2_${(Long.valueOf(user_id) % 8)}
              ds_inline:
                type: INLINE
                props:
                  algorithm-expression: testShardingDs_${(Long.valueOf(user_id) % 2)}
        props:
          sql.show: true

图4-1-1-7 pamirs.sharding配置举例

八、pamirs.mapper

  1. 库配置:可以通过YAML的“pamirs.mapper.<global或者ds>”配置项进行库配置。如果未配置,系统会采用默认值
配置项 默认值 描述
databaseFormat %s 库名格式化
tableFormat %s 表名格式化
tablePattern %s 动态表名表达式

表4-1-1-2 库配置

  1. 表配置:可以通过YAML的“pamirs.mapper.<global或者ds>.table-info”配置项或者@Model.Persistence注解进行表配置。注解优先级大于YAML配置文件配置。如果未配置,系统会采用默认值
配置项 默认值 描述
databaseFormat %s 库名格式化
tableFormat %s 表名格式化
tablePattern %s 动态表名表达式

表4-1-1-3 表配置

  1. 配置举例
pamirs: 
    mapper:
    static-model-config-locations:
      - pro.shushi.pamirs
    batch: collectionCommit #batch方法的批量提交模式
    batch-config:
      "[base.Field]":
        write: 2000
      "[base.Function]":
        read: 500
        write: 2000
    global: 
      table-info:
        logic-delete: true
        logic-delete-column: is_deleted
        logic-delete-value: REPLACE(unix_timestamp(NOW(6)),'.','')
        logic-not-delete-value: 0
        optimistic-locker: false
        optimistic-locker-column: opt_version
        key-generator: DISTRIBUTION
      table-pattern: '${module}_%s'
    #可以为指定数据配置
    #ds: 
    #   pamirs:
    #   table-info:
    #      logic-delete: true
    #      logic-delete-column: is_deleted
    #      logic-delete-value: REPLACE(unix_timestamp(NOW(6)),'.','')
    #      logic-not-delete-value: 0
    #      optimistic-locker: false
    #      optimistic-locker-column: opt_version
    #      key-generator: DISTRIBUTION
    #   table-pattern: '${module}_%s'

图4-1-1-8 pamirs.mapper配置举例

九、pamirs.persistence

  1. 描述:自动建库,建表

  2. 配置举例

pamirs: 
  persistence:
    global:
      auto-create-database: true
      auto-create-table: true

图4-1-1-9 pamirs.persistence配置举例

十、pamirs.plus

a. 描述mybatisplus的代理配置

b. 配置举例

pamirs: 
    plus:
    configuration:
      map-underscore-to-camel-case: false
      cache-enabled: false

图4-1-1-10 pamirs.plus配置举例

十一、pamirs.event

a. pamirs.event.enabled:启用RocketMQ功能,不启用的情况下无法使用任何功能,使用详见4.1.21【框架之分布式消息】一文。

b. pamirs.event.rocket-mq.namesrv-addr:RocketMQ连接地址字符串

c. pamirs.event.rocket-mq.aliyun : 阿里云版本适配

d. pamirs.event.schedule.enabled:启动异步任务工,不启用的情况下无法使用任何功能

e. 配置举例

pamirs: 
    event:
    enabled: false
    schedule:
      enabled: false
      ownSign: base
      auto-init: true
      auto-create-config-file: true
    rocket-mq:
      namesrv-addr: 127.0.0.1:9876
      # 标识发送消息和消费消息的机器的IP地址,默认为RemotingUtil.getLocalAddress()
      client-ip:
      # 标识发送消息和消费消息的机器的实例名称地址,默认为DEFAULT
      instance-name:
      # 标识发送消息和消费消息的机器的实例ID,无默认值
      namespace:
      # 为每一个topic添加一个固定前缀
      topic-prefix:
      # 是否启用vip netty通道以发送消息
      vip-channel-enabled: false
      # 是否启用消息轨迹追踪(该属性对于阿里云MQ无效)
      enable-trace: false
      # 消息轨迹追踪的topic名称
      trace-topic-name:
      # Pamirs Event工厂
      event-factory: pro.shushi.pamirs.framework.connectors.event.rocketmq.DefaultRocketMQEventFactory
      # acl配置
      accounts:
        - accessKey: RocketMQ
          secretKey: 12345678
      # 阿里云MQ 相关配置
      aliyun:
        # 使用阿里云MQ
        enabled: false
        # 阿里云MQ AccessKey
        access-key:
        # 阿里云MQ SecretKey
        secret-key:
        # 阿里云MQ InstanceId
        instance-id:
        # 阿里云MQ GroupId
        group-id:

图4-1-1-11 pamirs.event配置举例

十二、pamirs.auth

  1. pamirs.auth.modelFilter:配置模型所有的query方法不需要过权限控制 #下个版本作废,不建议使用

  2. pamirs.auth.funFilter:配置模型的特定query方法不需要过权限控制

  3. 配置举例

pamirs: 
    auth:
    model-filter:
      - user.PamirsUserTransient
      - auth.ResourcePermission
      - auth.AuthGroup
      - auth.AuthRole
      - base.View
      - resource.ResourceCountry
      - pamirs.web.WebMenu
      - pamirs.web.WebRenderTransient
      - pamirs.message.MessageCenter
      - resource.major.ResourceMajorConfig
    fun-filter:
      - namespace: user.PamirsUserTransient
        fun: login #登录
      - namespace: user.PamirsUserTransient
        fun: loginByVerificationCode #手机号验证码登录
      - namespace: user.PamirsUserTransient
        fun: loginVerificationCode #手机号登录验证码
      - namespace: user.PamirsUserTransient
        fun: signUpVerificationCode #手机号注册验证码

图4-1-1-12 pamirs.auth配置举例

十三、pamirs.file

  1. 描述:导入导出相关配置,使用详见6.1【文件导入导出】一文

  2. 配置举例

pamirs:
    file:
    auto-upload-logo: false
    import-property:
      default-each-import: false # 默认逐行导入
      max-error-length: 100 # 默认最大收集错误行数
    export-property:
      default-clear-export-style: false # 默认使用csv导出
      csv-max-support-length: 1000000 # csv导出最大支持1000000行

#文件导入导出还依赖CDN相关配置
cdn:
  oss:
    name: 阿里云
    type: OSS
    bucket: pamirs
    uploadUrl: oss-cn-hangzhou.aliyuncs.com
    downloadUrl: oss-cn-hangzhou.aliyuncs.com
    accessKeyId: #自行修改值
    accessKeySecret: #自行修改值
    mainDir: upload/demo/test/ 
    validTime: 3600000
    timeout: 600000
    active: true
    referer:
    localFolderUrl:

图4-1-1-13 pamirs.file配置举例

十四、pamirs.channel

  1. 描述:

  2. 配置举例

pamris: 
    channel:
    zkServers: 127.0.0.1:2181

图4-1-1-14 pamirs.channel配置举例

十五、pamirs.zookeeper

  1. 描述:zk配置的代理

  2. 配置举例

pamris:
    zookeeper:
    zkConnectString: 127.0.0.1:2181
    zkSessionTimeout: 60000
    rootPath: /demo

图4-1-1-15 pamirs.zookeeper配置举例

十六、pamirs.eip

  1. 描述:集成相关配置,使用详见集成平台一节

  2. 配置举例

pamirs: 
    eip:
    open-api:
      enabled: false
      standalone:
        host: 127.0.0.1
        port: 8081
        aes-key:
      routes:
        pamirs:
          host: 127.0.0.1
          port: 8081
          aes-key:

图4-1-1-16 pamirs.eip配置举例

高德地图接口的key配置

pamirs: 
    eip:
    map:
        gd:
        key: xxxxxx

图4-1-1-17高德地图接口的key配置

十七、pamirs.elastic

a. 描述:es搜索引擎地址 ,使用详见4.1.25【框架之搜索引擎】一节

b. 配置举例

pamirs: 
    elastic:
    url: 127.0.0.1:9200

图4-1-1-18 pamirs.elastic配置举例

十八、pamirs.load

oinone的默认模式下元数据都是以DB为准,当A模块依赖B模块,A与B模块不在没有部署在一起同时元数据的Base库也不是一个,那么A的元数据库怎么没有B模型,会导致系统出现模型定义找不到的错误。那么则需要A启动内存元数据模式,因为在A的元数据计算的时,因为A依赖B模块,同时有B的接口包,在内存中会扫描B的模型。所以我们要启动内存模式。应对分布式开发场景设计,更多请详见4.4【oinone的分布式体验进阶

pamirs:
  load:
    sessionMode: true

图4-1-1-19 pamirs.load配置举例

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

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

(0)
史, 昂的头像史, 昂数式管理员
上一篇 2024年5月23日 am9:02
下一篇 2024年5月23日

相关推荐

  • 3.5.7.2 自定义母版

    母版是什么 在业务系统中,母版是一种全局通用的组件,用于包裹每个页面的元素。这个概念类似于 PPT 中的母版,它定义了页面的整体结构、样式和布局,使得系统具有一致的外观和风格。 特点: 全局通用:母版是全局性的,适用于系统中的每个页面,确保一致性的用户体验。 包裹元素:母版包裹每个页面的元素,定义了整体的结构和布局。 外观一致性:通过统一的母版设计,系统达到外观和风格的一致性。 与 PPT 母版的类比: 在母版的概念上,与 PPT 中的母版类似,都是用于定义整体结构和样式,确保每个页面都具有一致的外观。 默认母版范围: 图3-5-7-20 默认母版范围 作用场景 在系统中,我们提供了多个纬度的母版,包括全局、应用和页面纬度。这样的设计允许根据不同的业务场景选择合适的母版纬度,以满足不同层次的定制需求。 母版纬度: 全局母版: 覆盖系统中所有页面,确保全局的一致性和统一的用户体验。 定义全局性的结构、样式和布局。 应用母版: 适用于特定应用或模块,定制化程度介于全局和页面之间。 允许在不同应用间实现一定的差异化。 页面母版: 面向具体页面,提供最大的定制化空间。 允许在不同页面中定义不同的结构和样式。 选择纬度: 业务场景决定:根据具体的业务场景和需求选择合适的母版纬度。 定制化需求:如果需要全局一致性,选择全局母版;如果在应用层面有特定需求,选择应用母版;如果需要最大的灵活性和定制化,选择页面母版。 参数说明: 在系统中,使用 registerMask 注册母版时,需要提供两个参数。第一个参数是母版的 XML,第二个参数用于控制母版的注册行为,包括 module、moduleName、model 和 actionName。 母版 XML(第一个参数): 提供母版的 XML 描述,定义了母版的结构和样式。 控制参数(第二个参数): module:指定模块的名称。 moduleName:指定模块的显示名称。 model:指定母版所属的模型。 actionName:指定母版的操作名称,可以是字符串或字符串数组。 全局母版 可以使用 registerMask 注册母版。当第二个参数为 {} 时,即代表注册全局母版。 示例工程目录 以下是需关注的工程目录示例,并确保导入导出依赖正确: 图3-5-7-21 全局纬度注册母版工程目录示例 示例代码 以下是一个示例代码: import { registerMask } from '@kunlun/dependencies'; /** * mask: 在做系统时,我们通常会把外层的布局(菜单、顶部导航)等抽出公共组件,公共组件会抽离全局通用。类似ppt母版的概念即为Mask * registerMask 第二个入参为{}即注册了全局得母版 * * 和默认母版相比移除右上角消息、语言切换、用户 * `<block> * <widget widget="notification" /> * <widget widget="divider" /> * <widget widget="language" /> * <widget widget="divider" /> * <widget widget="user" /> * </block>` */ const registerGlobalMask = () => { registerMask(` <mask> <multi-tabs /> <header> <widget widget="app-switcher" /> </header> <container> <sidebar> <widget widget="nav-menu" height="100%" /> </sidebar> <content> <breadcrumb /> <block width="100%"> <widget width="100%" widget="main-view" /> </block> </content> </container> </mask>`, {}); } registerGlobalMask(); 图3-5-7-22 全局纬度注册母版代码示例 复制这段代码执行下registerGlobalMask()试试看吧 效果 右上角消息、语言切换、用户被移除。 图3-5-7-23 全局纬度注册母版效果示例 应用母版 在系统中,可以使用 registerMask 注册母版。当第二个参数为 {moduleName: ‘resource’} 时,即注册了 resource(资源)应用的母版。 示例工程目录 以下是需关注的工程目录示例,更新导出./moduleMask: 图3-5-7-24 应用纬度注册母版工程目录示例 示例代码 以下是一个示例代码: /** * registerMask 第二个入参为{moduleName: 'resource'}即注册了resource(资源)应用的母版 * * resource来源: 通常是浏览器url上的module * * 和默认模版相比拿掉了菜单 * `<sidebar> * <widget widget="nav-menu" height="100%"…

    2024年5月23日
    1.5K00
  • 4.2.8 自定义组件与设计器结合(新)

    界面设计器组件管理页面添加组件 进入组件的元件管理页面 点击“添加元件” 设计元件的属性 这里以是否“显示清除按钮”作为自定义属性从左侧拖入到中间设计区域,然后发布 点击“返回组件” 鼠标悬浮到卡片的更多按钮的图标,弹出下拉弹出“低无一体”的按钮 在弹窗内点击“生成SDK”的按钮 生成完成后,点击“下载模板工程” 解压模板工程kunlun-sdk.zip 解压后先查看README.MD,了解一下工程运行要点,可以先运行 npm i 安装依赖 再看kunlun-plugin目录下已经有生成好的组件对应的ts和vue文件 下面在vue文件内增加自定义代码,可以运行 npm run dev 在开发模式下调试看效果 <template> <div class="my-form-string-input"> <oio-input :value="realValue" @update:value="change" > <template #prepend>MyPrepend</template> </oio-input> </div> </template> <script lang="ts"> import { defineComponent, ref } from 'vue'; import { OioInput } from '@kunlun/vue-ui-antd'; export default defineComponent({ name: 'customField1', components: { OioInput }, props: { value: { type: String }, change: { type: Function }, }, setup(props) { const realValue = ref<string | null | undefined>(props.value); return { realValue }; } }); </script> <style lang="scss"> .my-form-string-input { border: 1px solid red; } </style> 确定改好代码后运行 npm run build,生成上传所需的js和css文件 可以看到 kunlun-plugin目录下多出了dist目录,我们需要的是 kunlun-plugin.umd.js 和 kunlun-plugin.css 这2个文件 再次回到组件的“低无一体”管理弹窗页面,上传上面生成的js和css文件,并点击“确定”保存,到这里我们的组件就新增完成了。 下面我们再到页面设计器的页面中使用上面设计的组件(这里的表单页面是提前准备好的,这里就不介绍如何新建表单页面了) 将左侧组件库拉直最底部,可以看到刚刚新建的组件,将其拖至中间设计区域,我们可以看到自定义组件的展示结果跟刚刚的代码是对应上的(ps: 如果样式未生效,请刷新页面查看,因为刚刚上传的js和css文件在页面初始加载的时候才会导入进来,刚刚上传的动作未导入新上传的代码文件),再次点击设计区域中的自定义组件,可以看到右侧属性设置面板也出现了元件设计时拖入的属性。 最后再去运行时的页面查看效果,与代码逻辑一致!

    2024年5月23日
    1.3K00
  • 3.5.6.4 动作的配置

    在3.5.3【Action的类型】一文中,我们介绍Action的几种类型,以及组合动作。 通用配置 配置项 可选值 默认值 作用 name 动作名称 label 显示名称 icon 图标 type primary defaultlink primary 按钮类型样式,支持主要样式、次要样式以及链接样式。 bizStyle defaultsuccesswarningdangerinfo default 按钮业务样式,支持成功(green)、警告(yellow)、危险(red)、信息(grey)四种样式。 invisible truefalse condition false 展示规则,有简单的true/false显隐,也支持复杂的表达式 disabled truefalse condition 根据动作上下文类型进行自动推断 是否禁用自动推断规则:当上下文类型为【单行】时,相当于使用表达式LIST_COUNT(context.activeRecords) != 1当上下文类型为【多行】时,相当于使用表达式LIST_COUNT(context.activeRecords) <= 1当上下文类型为【单行或多行】时,相当于使用表达式LIST_COUNT(context.activeRecords) == 0 disabledTitle string 根据动作上下文类型进行自动推断 禁用悬浮提示 表3-5-6-12 动作通用配置 二次确认配置 二次确认框默认支持两种模式,对话框和气泡框; 对话框 图3-5-6-51 对话框提示 气泡框 图3-5-6-52 气泡框警告 配置项 配置项 可选值 默认值 作用 备注 confirm string 二次确认提示文字 配置后开启二次确认 confirmType POPPER(气泡提示框) MODAL(对话框) POPPER 确认框类型 confirmPosition TM(按钮上方) BM(按钮下方) LM(按钮左侧) RM(按钮右侧) BM 确认框位置 气泡框该配置生效 enterText 确定 确定按钮文字 cancelText 取消 取消按钮文字 表3-5-6-13 配置项 弹出层动作配置(窗口动作ViewAction) 目前平台对于弹出层支持了两种展示形式。弹窗(modal/dialog)和抽屉(drawer) 支持两种配置方式【内嵌视图配置】和【引用已有页面】,内嵌视图配置优先于引用已有页面。 内嵌视图配置 该配置对于弹窗和抽屉均适用。 <action name="窗口动作名称" label="创建"> <view model="模型编码" type="form"> <template slot="form" widget="form"> <field data="id" invisible="true" /> <field data="code" label="编码" widget="Input" /> <field data="name" label="名称" widget="Input" /> </template> <template slot="footer"> <action name="$$internal_DialogCancel" label="关闭" type="default" /> <action name="create" label="确定" /> </template> </view> </action> 图3-5-6-53 内嵌视图配置 引用已有页面配置 该配置对于弹窗和抽屉均适用。 <view model="模型编码" type="form"> <template slot="form" widget="form"> <field data="id" invisible="true" /> <field data="code" label="编码" widget="Input" /> <field data="name" label="名称" widget="Input" /> </template> <template slot="footer"> <action name="$$internal_DialogCancel" label="关闭" type="default" /> <action name="create" label="确定" /> </template> </view> 图3-5-6-54 引用已有页面示例 <action name="窗口动作名称" label="创建" resViewName="$viewName$" /> 图3-5-6-55 引用已有页面 弹窗 当窗口动作的路由方式(target)为dialog时,内嵌视图/引用页面将以弹窗形式展示在页面上。 配置项 配置项 可选值 默认值 作用 title…

    2024年5月23日
    1.1K00
  • 7.4 Oinone的低无一体

    基础介绍 前面我们学习了基于低代码开发平台进行快速开发,以及通过oinone的设计器进行零代码开发两种模式。当然低无一体不是简单地说两种模式还指:低无两种模式可以融合。 在做核心产品的时候以低代码开发为主,以无代码为辅助。见低代码开发的基础入门篇中设计器的结合一文 在做实施或临时性需求则是以无代码为主,以低代码为辅助 本文主要介绍第二种模式,它是www.oinone.top官网在SaaS模式下的专有特性。满足客户安装标品后通过设计器进行适应性修改后,但对于一些特殊场景还是需要通过代码进行完善或开发 在该模式下,我们提供了jar模式和代码托管两种模式,客户只要选择需要进行代码开发的模块,点击生产SDK,下载扩展工程模版,按Oinone低代码开发平台规范进行研发,后上传扩展工程即可。 操作手册 低无一体这个模块是连接无代码设计器的桥梁,可以为一个模块或应用设计低代码的逻辑,可以在界面设计器或流程设计器中使用低代码的逻辑。 1.选择模块 首先需要在下拉单选中选择需要低代码的模块或应用。 下拉选中只展示在「应用中心」中已安装的模块或应用,可前往「应用中心」安装后继续低代码操作。 选择模块中不展示系统的基础模块或应用,因为这些模块或应用无法自定义模型。 2.模块信息 模块信息展示的是选择模块的基础信息:模块名称、模块编码、模块作者、模块版本、包的前缀、工程模板下载地址,下载地址仅在上传jar包模式时候用到。 3.低无一体操作 低无一体支持了两种使用模式:上传jar包模式、源码托管模式。 上传控制工程或创建研发分支动作完成会生成一条数据,可以对单条数据进行部署、卸载、修改、删除。 3.1 上传jar包模式 在这个模式下,需要做四步动作。 生成SDK,点击按钮之后,会把模块的当前模型状态打成一个SDK包,SDK最新生成时间更新。当模型变更但未生成SDK时,使用低无一体就会出错,请重新生成SDK并修改扩展工程。生成SDK通常需要1分钟左右,若第一次使用低无一体模块,可能需要更长时间,请耐心等待。 下载扩展工程模板,点击按钮之后,会将SDK包和工程模板生成一个下载链接,复制模块信息中的卸载地址打开即可下载。 技术人员在工程模板的基础上写低代码逻辑。 上传扩展工程,点击按钮展开弹窗,在弹窗中设置标签、备注,并将最终的jar包上传,完成上传之后表格中就会新增一条数据。 上传jar包模式下,模板工程中代码需要注意的点参考下图: 3.2 源码托管模式 在这个模式下,需要做三步动作。 生成SDK,点击按钮之后,会把模块的当前模型状态打成一个SDK包,SDK最新生成时间更新。当模型变更但未生成SDK时,使用低无一体就会出错,请重新生成SDK并修改扩展工程。生成SDK通常需要1分钟左右,若第一次使用低无一体模块,可能需要更长时间,请耐心等待。 创建研发分支,点击按钮展开弹窗。首次创建时需要设置git账号名称、git账号邮箱来创建一个账号,另外在弹窗中设置分支名称、标签、备注,完成创建后表格中就会新增一条数据。 通过表格中的Gitlab地址,技术人员写低代码逻辑。 3.3 行内操作 部署:工程状态为未部署、部署失败、已卸载时展示行内的部署按钮,点击之后进行部署,工程状态变为部署中。部署过程大致需要5-10分钟,请耐心等待。部署完成之后,会生成一个新的模块:“原模块名称”扩展工程。 卸载:工程状态为已部署时展示行内的卸载按钮,点击之后会卸载这个已部署的工程,工程状态变为已卸载。同一模块只能有一个已部署的工程(与选择的模式无关),若需要使用新的工程请先卸载已部署的工程。 修改:行内操作修改按钮始终展示,只允许修改标签、备注。 删除:工程状态为未部署、部署失败、已卸载时展示行内的删除按钮,点击之后删除这一条工程记录。 3.4 部署效果 低无一体部署成功之后,可以进入对应模块的模型页面中使用提交动作来使用低代码逻辑,也可以在流程设计器中的引用逻辑节点中使用低代码逻辑。

    2024年5月23日
    2.4K00
  • 3.3.10 字段类型之关系描述的特殊场景

    在3.3.9【字段类型之关系与引用】一文中已经描述了各种关系字段的常规写法,还有一些特殊场景如:关系映射中存在常量,或者M2M中间表是大于两个字段构成。 举例说明关系字段-高级用法 场景描述 PetTalent模型增加talentType字段,PetItem与PetTalent的多对多关系增加talentType(达人类型),PetItemRelPetTalent 中间表维护petItemId、petTalentId以及talentType,PetDogItem和PetCatItem分别重写petTalents 字段,关系中增加常量描述。示意图如下 实际操作步骤: Step1 新增 TalentTypeEnum package pro.shushi.pamirs.demo.api.enumeration; import pro.shushi.pamirs.meta.annotation.Dict; import pro.shushi.pamirs.meta.common.enmu.BaseEnum; @Dict(dictionary = TalentTypeEnum.DICTIONARY,displayName = "达人类型") public class TalentTypeEnum extends BaseEnum<TalentTypeEnum,Integer> { public static final String DICTIONARY ="demo.TalentTypeEnum"; public final static TalentTypeEnum DOG =create("DOG",1,"狗达人","狗达人"); public final static TalentTypeEnum CAT =create("CAT",2,"猫达人","猫达人"); } Step2 PetTalent模型增加talentType字段 package pro.shushi.pamirs.demo.api.model; import pro.shushi.pamirs.demo.api.enumeration.TalentTypeEnum; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; @Model.model(PetTalent.MODEL_MODEL) @Model(displayName = "宠物达人",summary="宠物达人",labelFields ={"name"}) public class PetTalent extends AbstractDemoIdModel{ public static final String MODEL_MODEL="demo.PetTalent"; @Field(displayName = "达人") private String name; @Field(displayName = "达人类型") private TalentTypeEnum talentType; } Step3 修改PetItem的petTalents字段,在关系描述中增加talentType(达人类型) @Field.many2many(relationFields = {"petItemId"},referenceFields = {"petTalentId","talentType"},through = "PetItemRelPetTalent") @Field.Relation(relationFields = {"id"}, referenceFields = {"id","talentType"}) @Field(displayName = "推荐达人",summary = "推荐该商品的达人们") private List<PetTalent> petTalents; Step4 PetDogItem增加petTalents字段,重写父类PetItem的关系描述 talentType配置为常量,填入枚举的值 增加domain描述用户页面选择的时候自动过滤出特定类型的达人,RSQL用枚举的name @Field.many2many(relationFields = {"petItemId"},referenceFields = {"petTalentId","talentType"},through = "PetItemRelPetTalent") @Field.Relation(relationFields = {"id"}, referenceFields = {"id","talentType"}) @Field(displayName = "推荐达人",summary = "推荐该商品的达人们") private List<PetTalent> petTalents; Step5 PetCatItem增加petTalents字段,重写父类PetItem的关系描述 talentType配置为常量,填入枚举的值 增加domain描述用户页面选择的时候自动过滤出特定类型的达人,RSQL用枚举的name @Field(displayName = "推荐达人") @Field.many2many( through = "PetItemRelPetTalent", relationFields = {"petItemId"}, referenceFields = {"petTalentId","talentType"} ) @Field.Relation(relationFields = {"id"}, referenceFields = {"id", "#2#"}, domain = " talentType == CAT") private List<PetTalent> petTalents; Step6 清除中间表demo_core_pet_item_rel_pet_talent的数据记录 清除PetItem与PetTalent的多对多中间表demo_core_pet_item_rel_pet_talent的数据记录 Step7 重启看效果 修改达人记录,选择不同达人类型 PetItem、PetCatItem、PetDogItem不同的交互页面

    2024年5月23日
    1.6K00

Leave a Reply

登录后才能评论