Skip to content
本页目录

图表组件

很多业务场景都会用到图表类的数据展示组件, 所以我们也提供了一些简单的图表, 后续会持续扩充.

grid.png

配置说明

图表需实现的接口是一致的, 但是不同类型图表的注解, 以及要配置的内容是不同的, 因此我们将需实现接口和图表配置分离.

图表数据的抽象

不同图表的配置有很大的差异, 对于数据的要求也有一些不同, 我们不希望让后端同学关心到太多的细节, 因此做了一些抽象.

以折线图为例:

line.png

我们需要返回的数据核心其实是 X 轴 和 Y 轴的数据, 示例为年份和数据, 当然 X 轴和 Y 轴互换也是可以的. 比如:

json
[ 
//...
    {
        "x": "2011",
        "y": "392"
    }, {
        "x": "2012",
        "y": "473"
    }, {
        "x": "2013",
        "y": "629"
    },
//...
]

但其实并不需要讲字段绑定为 xy, 因为这样就需要额外封装模型, 对返回信息进行处理, 因为返回数据里面, 包含了 X 轴和 Y 轴所需数据即可.

示例中就是 yearsalesVolume, 所以我们不需要修改返回数据模型, 仅需要声明哪个字段作为 X 轴, 哪个字段作为 Y 轴, 至于数据摘要等逻辑, 就交给前端组件来完成.

只需要告知前端, x=year, y=salesVolume, 则就返回原始数据即可, 不需要额外的数据转换或者封装.

json
[ 
//...
    {
        "year": "2011",
        "salesVolume": "392"
    }, {
        "year": "2012",
        "salesVolume": "473"
    }, {
        "year": "2013",
        "salesVolume": "629"
    },
//...
]

同理, 如果我们需要一个多折线图:

multiple-line.png

其实只需要在多一个 Z 轴即可, 就是返回值中有一个字段来标识如何区分线就可以了, 但是 Z 轴这个概念不好理解, 所以用 seriesField.

下面的例子就是 seriesField=goodsType, 就可以根据商品类型产出各自销售额的多线图了.

至于其他图表基本上是一致的, 只是有些特殊图形会不太一样.

基础图表

  • 实现接口: dev.fastball.ui.components.chart.Chart<Model>
  • 使用场景: 用于普通图表数据的展示, 比如数据是前端组件关系或者菜单配置传递的
  • 方法说明:
    • Collection<Model> loadData(): 用于返回图表数据
  • 示例代码链接:
java
@UIComponent
@RequiredArgsConstructor
@AreaChartConfig(
        xField = "year",
        yField = "salesVolume",
        seriesField = "goodsType"
)
public class MultipleAreaChart implements Chart<SalesStatistics> {
    private final SalesStatisticsRepo repo;

    @Override
    public Collection<SalesStatistics> loadData() {
        return repo.findAll();
    }
}

有参图表

  • 实现接口: dev.fastball.ui.components.chart.VariableChart<Model, Param>
  • 使用场景: 用于普通图表数据的展示, 但是有入参, 比如根据组织来查询组织的年度销售额
  • 方法说明:
    • Collection<Model> loadData(Param): 用于返回图表数据, 入参是组件传入参数
  • 示例代码链接:
java
@UIComponent
@UIComponent
@RequiredArgsConstructor
@BarChartConfig(
        xField = "salesVolume",
        yField = "year"
)
public class OrgBasicBarChart implements VariableChart<SalesStatistics, Org> {
    private final SalesStatisticsRepo repo;

    @Override
    public Collection<SalesStatistics> loadData(Org org) {
        if (org == null || org.getId() == null) {
            return repo.findByGoodsType(GoodsType.Food);
        }
        return repo.findByGoodsType(GoodsType.values()[org.getId() % GoodsType.values().length]);
    }
}

图表类型

图表需实现的接口是一致的, 但是不同类型图表的注解, 以及要配置的内容是不同的, 下面就以各种图表类型独立描述.

折线图

  • 配置注解: @dev.fastball.ui.components.chart.config.LineChartConfig
  • 属性说明:
    • xField:
      • 类型: String
      • 默认值: 无
      • 配置作用: X 轴的字段
    • yField:
      • 类型: String
      • 默认值: 无
      • 配置作用: Y 轴的字段
    • seriesField:
      • 类型: String
      • 默认值: ""
      • 配置作用: 分类字段, 多折线图则需要配置该字段, 用来声明数据的分类, 从而产生不同的折现, 默认为空, 即为单折线图
  • 示例代码链接:
java
@UIComponent
@LineChartConfig(
        xField = "year",
        yField = "salesVolume",
        seriesField = "goodsType"
)
public class MultipleLineChart implements Chart<SalesStatistics> {
    private final SalesStatisticsRepo repo;

    @Override
    public Collection<SalesStatistics> loadData() {
        return repo.findAll();
    }
}

柱状图

  • 配置注解: @dev.fastball.ui.components.chart.config.ColumnChartConfig
  • 属性说明:
    • xField:
      • 类型: String
      • 默认值: 无
      • 配置作用: X 轴的字段
    • yField:
      • 类型: String
      • 默认值: 无
      • 配置作用: Y 轴的字段
    • seriesField:
      • 类型: String
      • 默认值: ""
      • 配置作用: 分类字段, 多柱图则需要配置该字段, 用来声明数据的分类, 从而产生不同的数据柱, 默认为空, 即为单柱图
  • 示例代码链接:
java
@UIComponent
@ColumnChartConfig(
        xField = "year",
        yField = "salesVolume",
        seriesField = "goodsType"
)
public class MultipleColumnChart implements Chart<SalesStatistics> {
    private final SalesStatisticsRepo repo;

    @Override
    public Collection<SalesStatistics> loadData() {
        return repo.findAll();
    }
}

面积图

  • 配置注解: @dev.fastball.ui.components.chart.config.AreaChartConfig
  • 属性说明:
    • xField:
      • 类型: String
      • 默认值: 无
      • 配置作用: X 轴的字段
    • yField:
      • 类型: String
      • 默认值: 无
      • 配置作用: Y 轴的字段
    • seriesField:
      • 类型: String
      • 默认值: ""
      • 配置作用: 分类字段, 多面积图则需要配置该字段, 用来声明数据的分类, 从而产生不同的折现, 默认为空, 即为单面积图
  • 示例代码链接:
java
@UIComponent
@AreaChartConfig(
        xField = "year",
        yField = "salesVolume",
        seriesField = "goodsType"
)
public class MultipleAreaChart implements Chart<SalesStatistics> {
    private final SalesStatisticsRepo repo;

    @Override
    public Collection<SalesStatistics> loadData() {
        return repo.findAll();
    }
}

条形图

  • 配置注解: @dev.fastball.ui.components.chart.config.BarChartConfig
  • 属性说明:
    • xField:
      • 类型: String
      • 默认值: 无
      • 配置作用: X 轴的字段
    • yField:
      • 类型: String
      • 默认值: 无
      • 配置作用: Y 轴的字段
    • seriesField:
      • 类型: String
      • 默认值: ""
      • 配置作用: 分类字段, 如果需要多条图则需要配置该字段, 用来声明数据的分类, 从而产生不同的堆叠条, 默认为空, 即为单条状图
  • 示例代码链接:
java
@UIComponent
@BarChartConfig(
        xField = "salesVolume",
        yField = "year",
        seriesField = "goodsType"
)
public class MultipleBarChart implements Chart<SalesStatistics> {
    private final SalesStatisticsRepo repo;

    @Override
    public Collection<SalesStatistics> loadData() {
        return repo.findAll();
    }
}