常规功能和模块自定义系统 (cfcmms)—017自定义grid方案(1)

来源:互联网 发布:淘宝血滴子 编辑:程序博客网 时间:2024/05/24 05:51

常规功能和模块自定义系统 (cfcmms)—017自定义grid方案(1)


  在定义好了模块和字段这二个最基本的系统元素之后,就可以开始其他功能的加入了。最先想到的功能应该就是grid了。
  grid对应于某个模块。由于模块字段有很多,一个模块只有一个grid方案并不能满足需求,因此一个模块需要多grid方案。每个grid方案中可以分别放置不同的字段,最为普通的可以建立二个grid方案,一个方案里面放置模块的重要信息,还有一个方案放置所有模块的信息。
  对于每一个grid方案来说,又可以分为若干个字段组,每个组下有若干个字段。因此一个自定义grid方案需要有三个表来保存信息:grid方案表、grid 字段分组、字段分组下的字段。具体层次见下图:

  列表方案的表名为 _ModuleGridScheme ,其java bean定义为:
@TableDefine(group = "系统模块", id = 9904, title = "模块列表方案", shortName = "列表方案")public class _ModuleGridScheme implements _IModuleControlInterface, Serializable {@Id@GeneratedValue(generator = "increment")@GenericGenerator(name = "increment", strategy = "increment")@FieldDefine(title = "ID号", number = 10, hidden = true)private Integer tf_gridSchemeId;@JsonIgnore@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)@JoinColumn(name = "tf_moduleId", nullable = false)@FieldDefine(title = "模块", number = 20)private _Module tf_Module;@FieldDefine(title = "顺序号", number = 30)@Column(nullable = false)private Integer tf_schemeOrder;@FieldDefine(title = "方案名称", nameField = true, number = 40)@Column(length = 50, nullable = false)private String tf_schemeName;@FieldDefine(title = "系统方案", number = 50)private Boolean tf_isSystemScheme;@FieldDefine(title = "可编辑", number = 60)private Boolean tf_isAllowEditInGrid;@FieldDefine(title = "排序字段", number = 80)private String tf_defaultSort; // 默认排序字段,如为null则为数据库默认排序@FieldDefine(title = "附加设置", number = 90)private String tf_otherSetting;@OneToMany(targetEntity = _ModuleGridSchemeGroup.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)@JoinColumn(name = "tf_gridSchemeId")@OrderBy("tf_gridGroupOrder")private List<_ModuleGridSchemeGroup> tf_schemeGroups;
  在上面的可以看出模块grid方案的一些属性,其中顺序号最小的记录会被做为默认的显示方案。

  grid方案分组的表名为 _ModuleGridSchemeGroup,其java bean的定义为:
@TableDefine(group = "系统模块", id = 9905, title = "模块列表字段分组", shortName = "列表字段分组")public class _ModuleGridSchemeGroup implements _IModuleControlInterface, Serializable {public static final String GRIDGROUPID = "tf_gridGroupId";@Id@GeneratedValue(generator = "increment")@GenericGenerator(name = "increment", strategy = "increment")@FieldDefine(title = "ID号", number = 10, hidden = true)private Integer tf_gridGroupId;@JsonIgnore@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)@JoinColumn(name = "tf_gridSchemeId", nullable = false)@FieldDefine(title = "模块列表方案", number = 20)private _ModuleGridScheme tf_ModuleGridScheme;@FieldDefine(title = "顺序号", number = 30)@Column(nullable = false)private Integer tf_gridGroupOrder;@FieldDefine(title = "分组名称", nameField = true, number = 40)@Column(length = 50, nullable = false)private String tf_gridGroupName;@FieldDefine(title = "表头分组", number = 50)private Boolean tf_isShowHeaderSpans;@FieldDefine(title = "锁定", number = 60)private Boolean tf_isLocked;@FieldDefine(title = "其他设置", number = 90)private String tf_otherSetting;@OneToMany(targetEntity = _ModuleGridSchemeGroupField.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)@JoinColumn(name = "tf_gridGroupId")@OrderBy("tf_gridFieldOrder")private List<_ModuleGridSchemeGroupField> tf_groupFields;

  列表字段的定义表名为 _ModuleGridSchemeGroupField,其java bean为
@TableDefine(group = "系统模块", id = 9906, title = "模块列表字段", shortName = "列表字段")public class _ModuleGridSchemeGroupField implements _IModuleControlInterface, Serializable {@Id@GeneratedValue(generator = "increment")@GenericGenerator(name = "increment", strategy = "increment")@FieldDefine(title = "ID号", hidden = true, number = 10)private Integer tf_gridFieldId;@JsonIgnore@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)@JoinColumn(name = "tf_gridGroupId", nullable = false)@FieldDefine(title = "模块列表字段分组", number = 20)private _ModuleGridSchemeGroup tf_ModuleGridSchemeGroup;@JsonIgnore@FieldDefine(title = "顺序号", number = 30)@Column(nullable = false)private Integer tf_gridFieldOrder;@JsonIgnore@ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)@JoinColumn(name = "tf_fieldId", nullable = false)@FieldDefine(title = "模块字段", nameField = true, number = 40)private _ModuleField tf_ModuleField;@Column(insertable = false, updatable = false)private Integer tf_fieldId;@FieldDefine(title = "列宽度", number = 50)private Integer tf_columnWidth;@FieldDefine(title = "锁定列", number = 60)private Boolean tf_isLocked;@FieldDefine(title = "附加设置", number = 80)private String tf_otherSetting;@FieldDefine(title = "隐藏列", number = 90)private Boolean tf_ishidden;

  以上为三个类的定义,大家能够在源码中看到每个字段的意思。
  前面讲过几次,对于每一个自定义的内容来说,要扩充新的功能只要先配置再前后台协同工作即可。对于模块grid 方案,现在也只有最基本的grid 列表功能。如果想要加入可分组、可行内编辑、可展开行等功能的话,只要加入相应的配置字段,然后在生成grid 的时候加入相应的属性即可。这一部分等以后做到的时候再进行讲解。

  下面以我发布的系统为例,用“省份”模块来看看grid自定义的实现和展示。


  该省份模块建立了二个grid方案,第一个名为省份基本信息,第二个是省份所有信息。现在看一下第二个方案的截图。


  在上面这个方案里,显示的内容就比较饱满了。在这个方案里,一定有二个字段组,第一个不显示组名,第二个显示了分组的名称。各个不同类型的字段用不同的颜色和格式来区分。百分比的字段可以显示描述的图像。每个字段上都可以加上一个自定义的tooltpl描述。还可以显示图像、子模块中的聚合值,比如说子模块中记录的个数,某个字段的和等等。可以说自定义系统的可扩充功能,只有想不到,没有做不到。

1 0