常规功能和模块自定义系统 (cfcmms)—045模块导航功能的重构(3)导航的定义

045模块导航功能的重构(3)导航的定义

  导航的配置也是保存在数据库中,一共有二张表来完成,主表是一个导航的定义,从表是这个导航里面各个层级的属性的定义。
  一个模块的导航主表的定义:
@Entity
@TableDefine(group = "系统模块", id = 990205, title = "模块导航方案", shortName = "导航方案")
public class _ModuleGridNavigateScheme implements Serializable {

  @Id
  @GeneratedValue(generator = "increment")
  @GenericGenerator(name = "increment", strategy = "increment")
  @FieldDefine(title = "ID号", number = 10)
  private Integer tf_navigateSchemeId;

  @JsonIgnore
  @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
  @JoinColumn(name = "tf_moduleId", updatable = false, nullable = false)
  @FieldDefine(title = "模块", number = 20)
  private _Module tf_Module;

  //显示在tabPanel中的导航的顺序
  @FieldDefine(title = "顺序号", number = 30)
  @Column(nullable = false)
  private Integer tf_order;

  @FieldDefine(title = "导航描述", number = 50, nameField = true)
  @Column(nullable = false, length = 50)
  private String tf_title;

  @FieldDefine(title = "图标iconCls", number = 60)
  @Column(length = 50)
  private String tf_iconCls;

  @FieldDefine(title = "层级", number = 70, remark = "默认树是层级显示还是并排显示")
  private Boolean tf_cascading;

  @FieldDefine(title = "可用", number = 90)
  private Boolean tf_enabled;

  // 这个功能还没有加入
  @FieldDefine(title = "动态展开", number = 100, remark = "是否动态的展开子集的导航")
  private Boolean tf_dynamicExpand;

  @FieldDefine(title = "备注", number = 190)
  private String tf_remark;

  @OneToMany(targetEntity = _ModuleGridNavigateSchemeDetail.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
  @JoinColumn(name = "tf_navigateSchemeId")
  @OrderBy("tf_order")
  private List<_ModuleGridNavigateSchemeDetail> navigateSchemeDetails;
}
  每个导航定义中又包括了若干级的具体导航属性:
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@TableDefine(group = "系统模块", id = 990206, title = "模块导航方案字段", shortName = "导航字段")
public class _ModuleGridNavigateSchemeDetail implements Serializable {

  @Id
  @GeneratedValue(generator = "increment")
  @GenericGenerator(name = "increment", strategy = "increment")
  @FieldDefine(title = "ID号", number = 10)
  private Integer tf_detailId;

  @JsonIgnore
  @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
  @JoinColumn(name = "tf_navigateSchemeId", updatable = false, nullable = false)
  @FieldDefine(title = "模块导航方案", number = 20)
  private _ModuleGridNavigateScheme tf_ModuleGridNavigateScheme;

  //顺序号排在前在树的展示中级数更高
  @FieldDefine(title = "顺序号", number = 30)
  @Column(nullable = false)
  private Integer tf_order;

  @FieldDefine(title = "导航字段说明", number = 40, nameField = true)
  @Column(nullable = false, length = 50)
  private String tf_title;

  @FieldDefine(title = "字段前缀", remark = "附加字段的模块路径", number = 50)
  @Column(length = 255)
  private String tf_fieldAhead;

  @JsonIgnore
  @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.LAZY)
  @JoinColumn(name = "tf_fieldId", nullable = false)
  @FieldDefine(title = "模块字段", nameField = true, number = 60)
  private _ModuleField tf_ModuleField;

  @FieldDefine(title = "字段表达式", number = 70, remark = "导航字段参与的表达式,this表示此字段")
  // 比如说 date_format(tf_createDate,'%Y年')
  // date_format(this,'%Y年')
  @Column(length = 255)
  private String tf_fieldFunction;

  @FieldDefine(title = "聚合类型", number = 80)
  @Column(length = 20)
  private String tf_aggregate;

  @ManyToOne(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
  @JoinColumn(name = "tf_numberGroupId")
  @FieldDefine(title = "数值分组", number = 90)
  private _NumberGroup tf_NumberGroup;

  @FieldDefine(title = "加入上级筛选", number = 80, remark = "选中此记录后,是否需要加入上一级的筛先条件")
  private Boolean tf_addParentFilter;

  // 只对基本字段有效,对于manytoone 字段无效,主要是对日期的作用
  @FieldDefine(title = "倒序", number = 100, remark = "显示的树是否倒序排列")
  private Boolean tf_reverseOrder;

  @FieldDefine(title = "折叠", number = 110, remark = "如果有children,默认是否展开")
  private Boolean tf_collapsed;

  // 如有部门 000001,000002, 是否加入 0001,00 这些节点
  @FieldDefine(title = "上级节点", number = 120, remark = "如果导航模块有编码级次,是否加入上级编码的数据节点")
  private Boolean tf_addCodeLevel;

  @FieldDefine(title = "图标", number = 130)
  @Column(length = 50)
  private String tf_iconCls;

  @FieldDefine(title = "样式cls", number = 140)
  @Column(length = 50)
  private String tf_cls;

  @FieldDefine(title = "备注", number = 190)
  private String tf_remark;
}
  在这个定义导航具体属性的类中,顺序号确定了每个属性的上下位置,例如顺序号1为“省”,顺序号2为“市”,那么生成的导航树就是 省-市的结构。“数值分值”可以用来对数值字段或者日期字段来进行值的分段导航。“字段表达式”也是一个非常有用的功能,可以自定义一个sql表达式来生成导航的值。“加入上级筛选”这个选项用来确定是否要加入parent的筛选条件。

  下面就几张图来具体的展示一下导航各个属性的定义。


  下面显示一张各个属性并列的。


  经过这样设计的导航模块,基本上可以满足绝大多数的需求了。如果再要进一步的话,就要加入节点动态展开,和导航值能够多选的功能了。因为导航是操作的时候限定记录,并不是综合查询,限定记录应该是越限越少,因此多选的功能好象是没有必要了。
  整个导航还有一些其他的功能不能在文章中一一列举了,以后有机会录一个视频来讲解一下,会更加清楚。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值