组件属性

1. 通用属性

介绍组件和其属性之前,先介绍一些大部分组件通用支持的一些基础属性。

1.2 标题

标题是字段在当前页面的展示名称,标题默认为字段名称,可以修改。

image.png

1.2 占位提示

在未填写内容时,输入框或选择框内的浅色提示文字,仅用于提示,不会影响字段的值。

image.png

1.3 描述说明

一个字段的描述信息,通常用于说明当前字段的范围、注意事项等。描述说明大部分在组件的下方显示,特殊的是,分组的描述说明在标题的左侧。

image.png

1.4 默认值

创建数据时,有些字段大概率都是相同值,可设置默认值,减少添加人员的操作步骤,提高录入数据效率。

image.png

1.5 只读

设为只读时,字段可见,但不可编辑。

除了只读和非只读的对立选项,也可以设置条件只读,在设置的条件下才只读,条件不符合则非只读。

image.png

1.6 禁用

设为禁用时,字段可见,但不可编辑。

除了禁用和非禁用的对立选项,也可以设置条件禁用,在设置的条件下才禁用,条件不符合则非禁用。

image.png

1.7 隐藏

设为隐藏时,字段不可见,也不可编辑。但是在页面设计时,隐藏的组件也会展示,效果如下图。

除了隐藏和非隐藏的对立选项,也可以设置条件隐藏,在设置的条件下才隐藏,条件不符合则非隐藏。

image.png

1.8 必填

控制字段在当前页面是否必填,若设置为必填则在标题前会有红色的*作为标识。除了必填和非必填的对立选项,也可以设置条件必填,在设置的条件下才必填,条件不符合则非必填。

image.png

1.9 标题排列方式

字段的标题可以自定义横向排列还是纵向排列。每个字段组件都支持设置,设置后之间互不影响。除了组件支持自定义,表单、分组、选项卡也可以设置排列方式,对于这种布局容器类组件,设置后会将其容器内的所有组件的标题排列方式都改为所设置的值。

image.png

1.10 宽度

定义在页面中的宽度:占整行的比例,一般可选项有1/4、1/3、1/2、2/3、3/4、1。

其中1/2表示占当前行的一半;1表示占当前行一整行;以此类推。部分组件特殊,如富文本仅支持宽度为1,即占一整行。

image.png

2. 分组

分组是一个布局类组件,类似一个容器,可以把业务含义相近的内容放在这个分组容器内。

2.1 属性

2.1.1 标题

分组可以定义一个标题名称,标题显示在分组左上角,可以不设置标题。

2.1.2 描述说明

分组的描述说明显示在分组标题右侧。

image.png

2.1.3 标题排列方式

分组中的标题排列方式属性并不是控制分组的标题,而是控制分组内组件的标题。设置后对分组内的所有组件生效。

image.png

3. 选项卡

选项卡是一个布局类组件,类似一个容器,每个选项卡可以添加多个选项页,可以把业务含义相近的内容放在选项卡的选项页容器内。

image.png

3.1 选项卡属性

3.1.1 选项页排列方式

选中选项卡,可选择选项卡中的选项页排列方式:水平排列、竖直排列。默认是水平排列,效果如下图。

image.png

3.1.2 标题排列方式

选项卡中的标题排列方式控制选项卡内组件的标题。设置后对选项卡内的所有组件生效。

image.png

3.2 选项页属性

3.2.1 标题

选中选项页,显示选项页的属性设置,选项卡中的每个选项页支持设置标题。

3.2.2 标题排列方式

选项页中的标题排列方式控制选项页内组件的标题。设置后对选项页内的所有组件生效。同一个选项卡,不同选项页之间的标题排列方式可以不同。

image.png

4. 单行文本

单行文本输入框,常用于记录名称、身份证号或其他普通的文字内容。

4.1 创建字段

单行文本仅支持创建「文本」业务类型的字段,填写规则、内容和模型设计器端创建字段一致。

image.png

4.2 表单属性

4.2.1 通用属性

在表单中,单行文本可以设置一些通用的属性:标题、占位提示、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

4.2.2 文本类型

文本类型选项为文本或密码。若设置为文本,输入时内容是可见的;若设置为密码,输入时是不可见的密码形态,如下图:

image.pngimage.png

4.2.3 最小/大长度

设置输入框输入内容的长度,输入框会根据设置的值进行校验。

  • 最大长度默认为创建字段时填写的长度,且设置的最大长度不可以大于字段的长度
  • 最小长度默认为空,为空则为不限制最小长度

image.png

image.png

4.2.4 输入格式

设置输入格式为网址或者身份证时,会进行格式的校验

  • 无:默认为无,不会校验内容
  • 网址:进行网址校验
  • 身份证:进行身份证号校验,设置后,需要输入正确的身份证号

image.png

4.2.5 显示计数器

当需要用户关注输入内容长度时,可以开启显示计数器,在输入时会实时显示当前内容的长度。

image.png

4.2.6 显示清除按钮

若开启了清除按钮,则在输入框有内容时,点击清除按钮一键清除已有内容

image.pngimage.png

5. 多行文本

多行文本输入框,常用于记录字数较多的文字,如意见、复杂备注等。

5.1 创建字段

多行文本仅支持创建「多行文本」业务类型的字段,填写规则、内容和模型设计器端创建字段一致。

image.png

5.2 表单属性

5.2.1 通用属性

在表单中,单行文本可以设置一些通用的属性:标题、占位提示、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

5.2.2 最小/大长度

设置输入框输入内容的长度,输入框会根据设置的值进行校验。

-最大长度默认为创建字段时填写的长度,且设置的最大长度不可以大于字段的长度

-最小长度默认为空,为空则为不限制最小长度

image.png

5.2.3 显示计数器

当需要用户关注输入内容长度时,可以开启显示计数器,在输入时会实时显示当前内容的长度。

image.png

5.2.5 显示清除按钮

若开启了清除按钮,则在输入框有内容时,点击清除按钮一键清除已有内容

image.png

6. 整数

整数输入框,常用于输入整数的天数、数量等,如果会出现小数,请使用小数组件。

6.1 创建字段

整数仅支持创建「整数」业务类型的字段,填写规则、内容和模型设计器端创建字段一致。

image.png

6.2 表单属性

6.2.1 通用属性

在表单中,整数可以设置一些通用的属性:标题、占位提示、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

6.2.2 最小/大值

设置整数输入框输入内容的最值,输入框会根据设置的最值进行校验。

  • 最大值可设置的范围根据字段填写的长度转换,如设置长度为3,则最大值最大不可以超过999

截图

image.png

6.2.3 显示千分位

数字过长时,不便于查看,可开启显示千分位。

image.png

image.png

7. 小数

小数输入框,常用于输入金额、单价等,会出现小数的数值。

7.1 创建字段

小数仅支持创建「浮点型」业务类型的字段,填写规则、内容和模型设计器端创建字段一致。

image.png

7.2 表单属性

7.2.1 通用属性

在表单中,小数可以设置一些通用的属性:标题、占位提示、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

7.2.2 最小/大值

设置小数输入框输入内容的最值,输入框会根据设置的最值进行校验。

  • 最大值可设置的范围根据字段填写的长度转换,如设置长度为3,则最大值最大不可以超过999

image.png

7.2.3 保留小数位数

支持设置小数的保留位数,设置后在页面中输入内容时,将进行校验

  • 可设置的保留小数位数不可大于该字段的精度,如字段精度为2,则组件属性中的小数位数最大只能为2;

image.png

image.png

7.2.4 显示千分位

数字过长时,不便于查看,可开启显示千分位。

image.png

8. 下拉单选

从多个选项中下拉选择一个数据,作为数据值。选项可以是关联模型的数据,也可以是数据字典或布尔型开关。

8.1 创建字段

下拉单选支持创建三种业务类型的字段,分别是:多对一、布尔型、数据字典。

image.png

  • 多对一:创建字段时需要选择关联的模型,关联模型的数据将作为下拉选项;
  • 布尔型:下拉选项默认只有是、否;
  • 数据字典:创建字段时需要选择数据字典,其数据字典项将作为下拉选项

8.2 表单属性

8.2.1 通用属性

在表单中,下拉单选可以设置一些通用的属性:标题、占位提示、描述说明、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.pngimage.png

8.2.2 选项类型

可以针对下拉单选的选项进行属性设置,同时,根据字段类型的不同,可以设置的内容也不同。

8.2.2.1 多对一选项

当下拉单选对应的是多对一型字段时,选项类型为“关联模型字段”。可以设置模型中的哪个(些)字段作为选项名称,以及哪些字段可以进行选项搜索。

image.png

  • 选项字段:可以选择关联模型的某个或某些字段。
  • 选择了【创建时间】和【创建人id】作为选项,那么在页面运行下拉选择数据时,创建时间和创建人id的值将会拼接起来作为选项值。如下图
  • 提示:可以在选项字段之间设置常量内容作为间隔,如, - 、 /等

image.png

  • 搜索字段:选项字段中哪些可以作为搜索值,默认会将选中的选项字段都设为搜索字段。
  • 若,将【创建时间】、【创建人id】都选中作为搜索字段,则在选择框中输入“01”时,创建时间或创建人id的值中包含“01”的都将作为搜索结果展示。
  • 若,只将【创建时间】选中作为搜索字段,则在选择框中输入“01”时,仅创建时间的值中包含“01”的将作为搜索结果展示。

8.2.2.2 布尔型选项

当下拉单选对应的是布尔型字段时,选项类型为“布尔型”。选项默认只有“是”、“否”,可以设置选项的排序、选项的默认值、选项是否可见。

image.png

-选项排序:选中选项行并直接拖动选项,即可变化上下位置,属性中的选项顺序将作为运行页面的选项顺序。效果如下图

image.png

image.png

-设置默认值:点击选项前的单选框,则这个选项将作为下拉单选的默认值。

image.png

-设置可见:在选项的右侧,点击隐藏/可见图标,将控制该选项在运行时是否可以展示。

image.png

image.png

8.2.2.3 数据字典选项

当下拉单选对应的是数据字典字段时,选项类型为“数据字典”。选项会展示选择的数据字典中的所有字典项,可以设置选项的排序、选项的默认值、选项是否可见。(属性效果和布尔型选项一致)

image.png

  • 选项排序:选中选项行并直接拖动选项,即可变化上下位置,属性中的选项顺序将作为运行页面的选项顺序。
  • 设置默认值:点击选项前的单选框,则这个选项将作为下拉单选的默认值。
  • 设置可见:在选项的右侧,点击隐藏/可见图标,将控制该选项在运行时是否可以展示。默认所有字典项都可见。

8.2.3 显示清除按钮

若开启了清除按钮,则在选择框有内容时,点击清除按钮一键清除已有内容

image.pngimage.png

9. 下拉多选

从多个选项中下拉选择多个数据,作为数据值。选项可以是关联模型的数据,也可以是数据字典。

9.1 创建字段

下拉多选支持创建三种业务类型的字段,分别是:多对多、一对多、数据字典。

image.png

  • 多对多:创建字段时需要选择关联的模型,关联模型的数据将作为下拉选项;
  • 一对多:创建字段时需要选择关联的模型,关联模型的数据将作为下拉选项;
  • 数据字典:创建字段时需要选择数据字典,其数据字典项将作为下拉选项

9.2 表单属性

9.2.1 通用属性

在表单中,下拉多选可以设置一些通用的属性:标题、占位提示、描述说明、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

9.2.2 选项类型

可以针对下拉多选的选项进行属性设置,同时,根据字段类型的不同,可以设置的内容也不同。

9.2.2.1 多对多、一对多选项

当下拉多选对应的是一对多型字段时,选项类型为“关联模型字段”。可以设置模型中的哪个(些)字段作为选项名称,以及哪些字段可以进行选项搜索。(和关联模型字段型的下拉单选一致)

image.png

  • 选项字段:可以选择关联模型的某个或某些字段。
  • 选择了【创建时间】和【创建人id】作为选项,那么在页面运行下拉选择数据时,创建时间和创建人id的值将会拼接起来作为选项值。如下图
  • 提示:可以在选项字段之间设置常量内容作为间隔,如, - 、 /等

image.png

  • 搜索字段:选项字段中哪些可以作为搜索值,默认会将选中的选项字段都设为搜索字段。
  • 若,将【创建时间】、【创建人id】都选中作为搜索字段,则在选择框中输入“01”时,创建时间或创建人id的值中包含“01”的都将作为搜索结果展示。
  • 若,只将【创建时间】选中作为搜索字段,则在选择框中输入“01”时,仅创建时间的值中包含“01”的将作为搜索结果展示。

9.2.2.2 数据字典选项

当下拉多选对应的是数据字典字段时,选项类型为“数据字典”。选项会展示选择的数据字典中的所有字典项,可以设置选项的排序、选项的默认值、选项是否可见。

image.png

  • 选项排序:选中选项行并直接拖动选项,即可变化上下位置,属性中的选项顺序将作为运行页面的选项顺序。
  • 设置默认值:点击选项前的复选框,则这个选项将作为下拉单选的默认值。
  • 设置可见:在选项的右侧,点击隐藏/可见图标,将控制该选项在运行时是否可以展示。

9.2.3 显示清除按钮

若开启了清除按钮,则在选择框有内容时,点击清除按钮一键清除已有内容

10. 开关

常用于只有是否两种对立选项的选择。

10.1 创建字段

直接通过开关组件设计页面需要先填写字段信息以创建一个字段业务类型为「布尔型」的模型字段后才可以设置属性。

image.png

10.2 表单属性

在表单中,开关可以设置一些通用的属性:标题、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

11. 单选框

常用于在直接展示的选现中单选一个值,例如选择性别。

11.1 创建字段

单选框支持创建两种业务类型的字段,分别是:布尔型、数据字典。

image.png

  • 布尔型:选项默认只有是、否;
  • 数据字典:创建字段时需要选择数据字典,其数据字典项将作为选项

11.2 表单属性

11.2.1 通用属性

在表单中,单选框可以设置一些通用的属性:标题、描述说明、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

11.2.2 选项排列方式

支持设置选项的排列方式,横向或纵向。

image.png

11.2.3 选项类型

11.2.3.1 数据字典选项

当单选框对应的是数据字典字段时,选项类型为“数据字典”。选项会展示选择的数据字典中的所有字典项,可以设置选项的排序、选项的默认值、选项是否可见。

image.png

  • 选项排序:选中选项行并直接拖动选项,即可变化上下位置,属性中的选项顺序将作为运行页面的选项顺序。
  • 设置默认值:点击选项前的单选框,则这个选项将作为单选框的默认值。
  • 设置可见:在选项的右侧,点击隐藏/可见图标,将控制该选项在运行时是否可以展示。默认所有字典项都可见。

11.2.3.2 布尔型选项

当单选框对应的是数据字典字段时,选项类型为“数据字典”。选项会展示选择的数据字典中的所有字典项,可以设置选项的排序、选项的默认值、选项是否可见。

  • 选项排序:选中选项行并直接拖动选项,即可变化上下位置,属性中的选项顺序将作为运行页面的选项顺序。
  • 设置默认值:点击选项前的单选框,则这个选项将作为单选框的默认值。
  • 设置可见:在选项的右侧,点击隐藏/可见图标,将控制该选项在运行时是否可以展示。默认所有字典项都可见。

12. 复选框

常用于在直接展示的选现中多选一个值,例如选择爱好、选择课程等。

12.1 创建字段

直接通过复选框组件设计页面需要先填写字段信息以创建一个字段业务类型为「数据字典」的模型字段后才可以设置属性。

image.png

12.2 表单属性

12.2.1 通用属性

在表单中,复选框可以设置一些通用的属性:标题、描述说明、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

12.2.2 选项排列方式

支持设置选项的排列方式,横向或纵向。

12.2.3 选项类型

12.2.3.1 数据字典选项

当复选框对应的是数据字典字段时,选项类型为“数据字典”。选项会展示选择的数据字典中的所有字典项,可以设置选项的排序、选项的默认值、选项是否可见。

image.png

  • 选项排序:选中选项行并直接拖动选项,即可变化上下位置,属性中的选项顺序将作为运行页面的选项顺序。
  • 设置默认值:点击选项前的单选框,则这个选项将作为单选框的默认值。
  • 设置可见:在选项的右侧,点击隐藏/可见图标,将控制该选项在运行时是否可以展示。默认所有字典项都可见。

13. 富文本编辑器

富文本编辑器,是一种可内嵌于浏览器,所见即所得的文本编辑器,类似于Office Word 的编辑功能,常应用于篇幅较长的说明性文字,支持改变字体样式、插入图片等。

13.1 创建字段

直接通过富文本编辑器组件设计页面需要先填写字段信息以创建一个字段业务类型为「富文本」的模型字段后才可以设置属性

  • 填写信息如下,所有信息保存后再次查看均不可编辑

image.png

13.2 表单属性

在表单中,富文本编辑器可以设置一些通用的属性:标题、占位提示、描述说明、只读、隐藏、必填、标题排列方式、宽度。

image.png

13.3 表单样式

在运行页面,表单中的富文本编辑器如下图。

编辑器中具有丰富的功能:

  • 支持设置层级标题
  • 支持设置文字样式(加粗、字号、字体、斜体、下划线、删除线等等)
  • 支持设置段落缩进和行高
  • 支持插入序列、待办事项等
  • 支持插入表情、图片、表格、代码块、分割线等
  • 编辑时支持撤回、恢复、全屏编辑

image.png

13.4 表格属性

在表格中,富文本编辑器仅支持自定义标题属性。

image.png

13.5 表格样式

在运行页面,表格中的富文本对应字段数据用相应链接展示,若有,则可存在“查看”链接,点击查看,通过弹框查看富文本内容

image.png

13.6 详情属性

在详情视图中,仅支持自定义标题、宽度属性。

image.png

14. 年份

年份组件用于选择年份,常用于选择出身年份、一项计划的年份等。

image.png

14.1 创建字段

年份仅支持创建「年份」业务类型的字段,填写规则、内容和模型设计器端创建字段一致。

image.png

14.2 表单属性

在表单中,年份可以设置一些通用的属性:标题、占位提示、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

15. 日期

常用于选择颗粒度到日期的Date类型字段,例如出生日期、入职日期、入驻日期等。

15.1 创建字段

直接通过日期组件设计页面需要先填写字段信息以创建一个字段业务类型为「日期」的模型字段后才可以设置属性。

image.png

15.2 表单属性

15.2.1 通用属性

在表单中,日期可以设置一些通用的属性:标题、占位提示、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

15.2.2 日期格式

有9种日期格式可供选择。

image.png

16. 日期时间

常用于选择颗粒度到时间的DateTime类型的字段,例如下单时间、发货时间、审批时间等。

16.1 创建字段

直接通过日期时间组件设计页面需要先填写字段信息以创建一个字段业务类型为「日期时间」的模型字段后才可以设置属性。

image.png

16.2 表单属性

16.2.1 通用属性

在表单中,日期时间可以设置一些通用的属性:标题、占位提示、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

16.2.2 日期格式

有9种日期格式可供选择。

image.png

16.2.3 时间格式

有4种时间格式可供选择。

image.png

17. 时间

常用于选择仅时间无日期的Time类型的字段,如设置规章中的上班时间、日志的提交时间等。

17.1 创建字段

直接通过时间组件设计页面需要先填写字段信息以创建一个字段业务类型为「时间」的模型字段后才可以设置属性。

image.png

17.2 表单属性

17.2.1 通用属性

在表单中,时间可以设置一些通用的属性:标题、占位提示、描述说明、默认值、只读、隐藏、禁用、必填、标题排列方式、宽度。

image.png

17.2.1 时间格式

有4种时间格式可供选择。

image.png

18. 颜色选择器

颜色选择器,应用于自定义颜色,如设置标签的颜色、设置产品的颜色属性、主题定制时选择色彩等。

18.1 创建字段

颜色选择器和单行文本这两个组件的样式不同,作用也不同,一个用于选择颜色,一个用于输入内容,但实质上所生成的数据都用文本来存储,所以通过颜色选择器生成字段时,仅支持对应生成「文本」类型字段。

image.png

18.2 表单属性

在表单中,颜色选择器可以设置一些通用的属性:标题、描述说明、默认值、只读、隐藏、必填、标题排列方式、宽度。

image.png

18.3 表单样式

在运行页面,表单中的颜色选择器由色号显示框+色号选择框组成,色号显示框无法编辑,由选择的颜色自动带出对应色号;点击色号选择框可选择颜色。

色号选择有三种方式

1在颜色选择区直接点击颜色;

2颜色选择器下方快捷选择系统提供的常用颜色;

3输入框中直接输入标准格式色号,输入后回车,定位到对应颜色。

image.png

18.4 表格属性

在表格中,颜色选择器仅支持自定义标题属性。

image.png

18.5 表格样式

在运行页面,表格中的颜色选择器对应字段数据用相应色块展示。

image.png

18.6 详情属性

在详情视图中,仅支持自定义标题、宽度属性。

image.png

19. 图表

可以选择数据可视化设计器中允许被引用的图表,展示在页面中。

19.1 选择报表

下拉中可选择允许被引用的图表。image.png

image.png

20. 报表

可以选择数据可视化设计器中允许被引用的报表,展示在页面中。

20.1 选择报表

下拉中可选择允许被引用的报表。

image.png

image.png

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

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

(0)
史, 昂的头像史, 昂数式管理员
上一篇 2024年6月20日
下一篇 2024年6月20日

相关推荐

  • 4.1.3 模块之生命周期

    了解oinone的启动生命周期过程,对于理解oinone或者开发高级功能都有非常大的帮助 一、生命周期大图 图4-1-3-1 生命周期大图 二、平台扩展说明 平台节点通过SPI机制进行扩展,本书籍暂不展开,更多详情请见可关注数式Oinone公众号中的Oinone内核揭秘系列文章。 三、业务扩展说明 接口 说明 使用场景 LifecycleBeginAllInit 系统进入生命周期前置逻辑注:不能有任何数据库操作 系统级别的信息收集上报 LifecycleCompletedAllInit 系统生命周期完结后置逻辑 系统级别的信息收集上报、生命周期过程中的数据或上下文清理 LifecycleBeginInit 模块进入生命周期前置逻辑注:不能有任何数据库操作 预留,能做的事情比较少 LifecycleCompletedInit 模块生命周期完结后置逻辑 本模块需等待其他模块初始化完毕以后进行初始化的逻辑。比如:1.集成模块的初始化2.权限缓存的初始化…… MetaDataEditor 元数据编辑注:不能有任何数据库操作 这个在第3章Oinone的基础入门中已经多次提及,核心场景是向系统主动注册如Action、Menu、View等元数据 ExtendBuildInit 系统构建前置处理逻辑 预留,能做的事情比较少,做一些跟模块无关的事情 ExtendAfterBuilderInit 系统构建后置处理逻辑 预留,能做的事情比较少,做一些跟模块无关的事情 InstallDataInit 模块在初次安装时的初始化逻辑 根据模块启动指令来进行选择执行逻辑,一般用于初始化业务数据。应用启动参数与指令转化逻辑详见4.1.2【模块之启动指令】一文 UpgradeDataInit 模块在升级时的初始化逻辑注:根据启动指令来执行,是否执行一次业务自己控制 ReloadDataInit 模块在重启时的初始化逻辑注:根据启动指令来执行,是否执行一次业务自己控制 表4-1-3-1 业务拓展说明 四、常用生命周期举例 Install\Upgrade\Reload的业务初始化(举例) Step1 新建DemoModuleBizInit DemoModuleBizInit实现InstallDataInit, UpgradeDataInit, ReloadDataInit a. InstallDataInit 对应 init b. UpgradeDataInit 对应 upgrade c. ReloadDataInit 对应 reload modules方法代表改初始化类与哪些模块匹配,以模块编码为准 priority 执行优先级 package pro.shushi.pamirs.demo.core.init; import org.springframework.stereotype.Component; import pro.shushi.pamirs.boot.common.api.command.AppLifecycleCommand; import pro.shushi.pamirs.boot.common.api.init.InstallDataInit; import pro.shushi.pamirs.boot.common.api.init.ReloadDataInit; import pro.shushi.pamirs.boot.common.api.init.UpgradeDataInit; import pro.shushi.pamirs.demo.api.DemoModule; import pro.shushi.pamirs.demo.api.enumeration.DemoExpEnumerate; import pro.shushi.pamirs.meta.common.exception.PamirsException; import java.util.Collections; import java.util.List; @Component public class DemoModuleBizInit implements InstallDataInit, UpgradeDataInit, ReloadDataInit { @Override public boolean init(AppLifecycleCommand command, String version) { throw PamirsException.construct(DemoExpEnumerate.SYSTEM_ERROR).appendMsg("DemoModuleBizInit: install").errThrow(); //安装指令执行逻辑 // return Boolean.TRUE; } @Override public boolean reload(AppLifecycleCommand command, String version) { throw PamirsException.construct(DemoExpEnumerate.SYSTEM_ERROR).appendMsg("DemoModuleBizInit: reload").errThrow(); //重启指令执行逻辑 // return Boolean.TRUE; } @Override public boolean upgrade(AppLifecycleCommand command, String version, String existVersion) { throw PamirsException.construct(DemoExpEnumerate.SYSTEM_ERROR).appendMsg("DemoModuleBizInit: upgrade").errThrow(); //升级指令执行逻辑 // return Boolean.TRUE; } @Override public List<String> modules() { return Collections.singletonList(DemoModule.MODULE_MODULE); } @Override public int priority() { return 0; } } 图4-1-3-2 新建DemoModuleBizInit Step2 重启看效果 启动指令为-Plifecycle=INSTALL,转化指令为 install为AUTO;upgrade为FORCE 因为DemoModule我们已经执行过好多次了,所以会进入upgrade逻辑。系统重启的效果跟我们预期的结果一致,确实执行了DemoModuleBizInit的upgrade方法 图4-1-3-3 系统重启执行DemoModuleBizInit的upgrade方法 MetaDataEditor 回顾使用情况 最早在3.3.2【模型的类型】一文中介绍“传输模型”时,初始化ViewAction窗口动作时使用到,这里不过多介绍。下面主要介绍下InitializationUtil的工具类包含方法。 注:模块上报元数据只能通过注解或者实现MetaDataEditor接口并使用InitializationUtil工具来进行,更建议用注解方式

    2024年5月23日
    84200
  • 5.7 商业支撑之库存域

    库存的差异会反馈到企业的整个价值链上,所以对库存的设计是至关重要的 一、基础介绍 我们先抛开仓库中对库存的实操管理和整个流通领域的库存,只围绕企业自身一级的采销链路上我们可以从管理和销售两个角度去看。 从管理角度上我们会关心:实物库存、在途库存、在产库存、库存批次等等,也就是企业有多少库存分布在哪里在什么环节。 从销售角度上我们会关心:可售库存、安全库存等等,也就是企业在特定渠道销售中库存分配规则。 在商业场景中库存管理一头对接仓库、生成、采购,另一头对接多个销售渠道。它的挑战在于不同行业不同特征商品都有比较大的差异。比如家具行业卖的是生产能力,家电区域化销售,生鲜拼车销售,服饰一仓销全国。热销的要分配提升体验防止超卖,滞销的要活动拉流量,普通的要渠道共享最大化可售。库存管理的差异会反馈到企业的整个价值链上,所以对库存的设计是至关重要的。 库存设计挑战在于: 技术上:库存类似账户账本的设计,需要能追溯库存变化的过程,且库存操作都能可追溯业务单据。热点数据的并发控制 业务上:在管理角度上游能跟仓库、采购、生产等进行对接、对账、并为其设置可售规则,下游能为各个销售渠道设置库存分配与同步规则 二、模型介绍 图5-7-1 模型介绍 核心设计逻辑: 单据链路:业务单据(外部业务单据+库存业务单据)产生库存指令(库存调整入\出库单),再由库存指令操作库存并记录库存流水。 管理链路:基础数据维护仓库、供应商、服务范围与费用。这些数据是订单履约路由和可售库存同步的基础 库存数据:对外跟商品域,通过库存指令进行操作。不同库存各自维护自身库存与流水记录,确保可追溯。 如果跟销售渠道对接,还需要扩展可售库存逻辑规则以及同步规则。比如oms类似的应用

    2024年5月23日
    57800
  • 3.3.4 模型的继承

    在我们的很多项目中,客户都是有个性化需求的,就像我们不能找到两件一模一样的东西,何况是企业的经营与管理思路,多少都会有差异。常规的方式只能去修改标准产品的逻辑来适配客户的需求。导致后续标品维护非常困难。而在介绍完这节以后是不是让你更加清晰认知到我们2.4.2【oinone独特性之每一个需求都可以是一个模块】一文中所表达的特性带来的好处呢? 一、继承方式 继承方式可以分为五种: 抽象基类ABSTRACT,只保存不希望为每个子模型重复键入的信息的模型,抽象基类模型不生成数据表存储数据,只供其他模型继承模型可继承域使用,抽象基类可以继承抽象基类。 扩展继承EXTENDS,子模型与父模型的数据表相同,子模型继承父模型的字段与函数。存储模型之间的继承默认为扩展继承。 多表继承MULTI_TABLE,父模型不变,子模型获得父模型的可继承域生成新的模型;父子模型不同表,子模型会建立与父模型的一对一关联关系字段(而不是交叉表),使用主键关联,同时子模型会通过一对一关联关系引用父模型的所有字段。多表继承父模型需要使用@Model.MultiTable来标识,子模型需要使用@Model.MultiTableInherited来标识。 代理继承PROXY,为原始模型创建代理,可以增删改查代理模型的实体数据,就像使用原始(非代理)模型一样。不同之处在于代理继承并不关注更改字段,可以更改代理中的元信息、函数和动作,而无需更改原始内容。一个代理模型必须仅能继承一个非抽象模型类。一个代理模型可以继承任意数量的没有定义任何模型字段的抽象模型类。一个代理模型也可以继承任意数量继承相同父类的代理模型。 临时继承TRANSIENT,将父模型作为传输模型使用,并可以添加传输字段。 二、继承约束 通用约束 对于扩展继承,查询的时候,父模型只能查询到父模型字段的数据,子模型可以查询出父模型及子模型的字段数据(因为派生关系所以子模型复刻了一份父模型的字段到子模型中)。 系统不会为抽象基类创建实际的数据库表,它们也没有默认的数据管理器,不能被实例化也无法直接保存,它们就是用来被继承的。抽象基类完全就是用来保存子模型们共有的内容部分,达到重用的目的。当它们被继承时,它们的字段会全部复制到子模型中。 系统不支持非jar包依赖模型的继承。 多表继承具有阻断效应,子模型无法继承多表继承父模型的存储父模型的字段,需要使用@Model.Advanced注解的inherited属性显示声明继承父模型的父模型。但是可以继承多表继承父模型的抽象父模型的字段。 可以使用@Model.Advanced的unInheritedFields和unInheritedFunctions属性设置不从父类继承的字段和函数。 跨模块继承约束 如果模型间的继承是跨模块继承,应该与模型所属模块建立依赖关系;如果模块间有互斥关系,则不允许建立模块依赖关系,同理模型间也不允许存在继承关系。 跨模块代理继承,对代理模型的非inJvm函数调用将使用远程调用方式;跨模块扩展(同表)继承将使用本地调用方式,如果是数据管理器函数,将直连数据源。 模型类型与继承约束 抽象模型可继承:抽象模型(Abstract) 临时模型可继承:抽象模型(Abstract)、传输模型(Transient) 存储模型可继承:抽象模型(Abstract)、存储模型(Store)、存储模型(多表,Multi-table Store),不可继承多个Store或Multi-table Store 多表存储模型(父)可继承:同扩展继承 多表存储模型(子)在继承单个Multi-table Store后可继承:抽象模型(Abstract)、存储模型(Store),不可继承多个Store 代理模型可继承: 抽象模型(Abstract),须搭配继承Store、Multi-table Store或Proxy 存储模型(Store),不可继承多个Store或Multi-table Store 存储模型(多表,Multi-table Store),不可继承多个Store或Multi-table Store 代理模型(Proxy),可继承多个Proxy,但多个父Proxy须继承自同一个Store或Multi-table Store,且不能再继承其他Store或Multi-table Store 同名字段以模型自身字段为有效配置,若模型自身不存在该字段,继承字段以第一个加载的字段为有效配置,所以在多重继承的情况下,未避免继承同名父模型字段的不确定性,在自身模型配置同名字段来确定生效配置。 三、继承的使用场景 模型的继承可以继承父模型的元信息、字段、数据管理器和函数 抽象基类 解决公用字段问题 扩展继承 解决开放封闭原则、跨模块扩展等问题 多表继承 解决多型派生类字段差异问题和前端多存储模型组合外观问题 代理继承 解决同一模型在不同场景下的多态问题(一表多态) 临时继承 解决使用现有模型进行数据传输问题 举例,前端多存储模型组合外观问题可通过多表继承的子模型,并一对一关联到关联模型,同时使用排除继承字段去掉不需要继承的字段。子模型通过默认模型管理器提供查询功能给前端,默认查询会查询子模型数据列表并在列表行内根据一对一关系查出关联模型数据合并,关联模型数据展现形态在行内是平铺还是折叠,在详情是分组还是选项卡可以自定义view进行配置 扩展继承 父子同表,模型在所有场景都有一致化的表现,意味着原模型被扩展成了新模型,父子模型的表名一致,模型编码不同,可覆盖父模型的模型管理器、数据排序规则、函数 多表继承 父子多表,父子间有隐式一对一关系,即父子模型都增加了一对一关联关系字段,同时父模型的字段被引用到子模型,且引用字段为只读字段,意味着子模型不可以直接更改父模型的字段值,子模型不继承父模型的模型管理器、数据排序规则、函数,子模型拥有自己的默认模型管理器、数据排序规则、函数。多表继承具有阻断效应,子模型无法自动多表继承父模型的存储父模型,需要显式声明多表继承父模型的存储父模型。 代理继承 代理模型继承并可覆盖父模型的模型管理器、数据排序规则、函数,同时可以使用排除继承字段和函数来达到不同场景不同视觉交互的效果。 图3-3-4-1 继承的使用场景 四、抽象基类(举例) 参考前文中3.3.2【模型的类型】一文中关于抽象模型的介绍 五、多表继承(举例) 场景设计如下 图3-3-4-2 多表继承设计场景 Step1 新建宠物品种、宠狗品种和萌猫品种模型 新建宠物品种模型,用@Model.MultiTable(typeField = "kind"),申明为可多表继承父类,typeField指定为kind字段 package pro.shushi.pamirs.demo.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; import pro.shushi.pamirs.meta.base.IdModel; @Model.MultiTable(typeField = "kind") @Model.model(PetType.MODEL_MODEL) @Model(displayName="品种",labelFields = {"name"}) public class PetType extends IdModel { public static final String MODEL_MODEL="demo.PetType"; @Field(displayName = "品种名") private String name; @Field(displayName = "宠物分类") private String kind; } 图3-3-4-3 多表继承示例代码 新建宠狗品种模型,用@Model.MultiTableInherited(type = PetDogType.KIND_DOG),申明以多表继承模式继承PetType,覆盖kind字段(用defaultValue设置默认值,用invisible = true设置为前端不展示),更多模块元数据以及模型字段元数据配置详见4.1.6【模型之元数据详解】一文 package pro.shushi.pamirs.demo.api.model; import pro.shushi.pamirs.meta.annotation.Field; import pro.shushi.pamirs.meta.annotation.Model; @Model.MultiTableInherited(type = PetDogType.KIND_DOG) @Model.model(PetDogType.MODEL_MODEL) @Model(displayName="宠狗品种",labelFields = {"name"}) public class PetDogType extends PetType { public static final String MODEL_MODEL="demo.PetDogType"; public static final String KIND_DOG="DOG"; @Field(displayName = "宠物分类",defaultValue = PetDogType.KIND_DOG,invisible = true) private String kind; } 图3-3-4-4 多表继承示例代码 新建萌猫品种模型,用@Model.MultiTableInherited(type = PetCatType.KIND_CAT),申明以多表继承模式继承PetType,覆盖kind字段(用defaultValue设置默认值,用invisible = true设置为前端不展示),并新增一个CatShapeEnum枚举类型的字段shape package pro.shushi.pamirs.demo.api.enumeration; import pro.shushi.pamirs.meta.annotation.Dict; import pro.shushi.pamirs.meta.common.enmu.BaseEnum; @Dict(dictionary = CatShapeEnum.DICTIONARY,displayName = "萌猫体型") public class CatShapeEnum extends BaseEnum<CatShapeEnum,Integer>…

    2024年5月23日
    97200
  • 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日
    87500

Leave a Reply

登录后才能评论