Skip to content

甘特图 GANTT

以甘特图形式展示时间轴数据,支持分组、层级、进度、颜色等配置。配合 @Vis(type = Vis.Type.GANTT) 使用。

完整示例

java
@Entity
@Table(name = "t_gantt")
@Erupt(
    name = "甘特图演示",
    visRawTable = false,
    vis = {
        @Vis(
            title = "甘特图",
            type = Vis.Type.GANTT,
            fieldVisibility = Vis.FieldVisibility.INCLUDE,
            fields = {"name", "type", "color", "progress"},
            ganttView = @GanttView(
                startDateField = "startDate",
                endDateField   = "endDate",
                pidField       = "parent.id",
                colorField     = "color",
                progressField  = "progress",
                groupField     = "type"
            )
        )
    }
)
public class GanttDemo extends BaseModel {

    @EruptField(
        views = @View(title = "名称"),
        edit = @Edit(title = "名称", notNull = true)
    )
    private String name;

    @EruptField(
        views = @View(title = "分组"),
        edit = @Edit(title = "分组", type = EditType.CHOICE, choiceType = @ChoiceType(vl = {
            @VL(label = "分组1", value = "1"),
            @VL(label = "分组2", value = "2")
        }))
    )
    private String type;

    @EruptField(
        views = @View(title = "开始时间", sortable = true),
        edit = @Edit(title = "开始时间", notNull = true)
    )
    private Date startDate;

    @EruptField(
        views = @View(title = "结束时间", sortable = true),
        edit = @Edit(title = "结束时间", notNull = true)
    )
    private Date endDate;

    @EruptField(
        views = @View(title = "颜色"),
        edit = @Edit(title = "颜色", type = EditType.COLOR)
    )
    private String color;

    @EruptField(
        views = @View(title = "进度"),
        edit = @Edit(title = "进度", type = EditType.SLIDER, sliderType = @SliderType(max = 100))
    )
    private Integer progress;

    // 使用层级甘特图时,必须通过 show = false 的 View 将 parent.id 暴露给前端
    @ManyToOne
    @EruptField(
        views = @View(title = "pid", column = "id", show = false),
        edit = @Edit(
            title = "上级节点",
            type = EditType.REFERENCE_TREE,
            referenceTreeType = @ReferenceTreeType(pid = "parent.id", expandLevel = 2)
        )
    )
    private GanttDemo parent;

}

@GanttView 属性说明

java
public @interface GanttView {

    String startDateField(); // 开始时间字段(必填)

    String endDateField();   // 结束时间字段(必填)

    String groupField() default "";    // 分组字段

    String pidField() default "";      // 父节点字段,用于层级结构甘特图

    String progressField() default ""; // 进度字段,值范围 0 ~ 100

    String colorField() default "";    // 条形颜色字段,值为十六进制色值

}
属性名描述
startDateField开始时间字段名(必填)
endDateField结束时间字段名(必填)
groupField分组字段名,相同值的任务归为一组
pidField父节点字段名,配置后呈层级树状甘特图
progressField进度字段名,值范围 0 ~ 100
colorField条形颜色字段名,值为十六进制色值(如 #FF5733

注意事项

使用层级甘特图(pidField)时,必须通过 show = false@View 将父节点 id 字段暴露给前端,否则前端无法构建树结构:

java
@ManyToOne
@EruptField(
    views = @View(title = "pid", column = "id", show = false), // 关键:隐藏但暴露 id
    edit = @Edit(title = "上级节点", type = EditType.REFERENCE_TREE,
                 referenceTreeType = @ReferenceTreeType(pid = "parent.id"))
)
private GanttDemo parent;

Released under the Apache-2.0 License.