From e23a3de97bc9028caa05540f0afb8335203c748b Mon Sep 17 00:00:00 2001 From: ulleo Date: Thu, 13 Jun 2024 15:41:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=9B=BE=E8=A1=A8):=20=E6=9F=B1=E7=BA=BF?= =?UTF-8?q?=E7=BB=84=E5=90=88=E5=9B=BE=E4=BC=98=E5=8C=96=E9=A2=9C=E8=89=B2?= =?UTF-8?q?=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/chart/utils/ChartDataBuild.java | 20 +++++++++++++++---- .../js/panel/charts/others/chart-mix.ts | 16 ++++++++++++--- .../io/dataease/api/chart/dto/Series.java | 2 ++ 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/utils/ChartDataBuild.java b/core/core-backend/src/main/java/io/dataease/chart/utils/ChartDataBuild.java index ee8e78edc4..e9395a9b6e 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/utils/ChartDataBuild.java +++ b/core/core-backend/src/main/java/io/dataease/chart/utils/ChartDataBuild.java @@ -527,6 +527,8 @@ public class ChartDataBuild { series1.setData(new ArrayList<>()); series.add(series1); } + Set categories = new HashSet<>(); + for (int i1 = 0; i1 < data.size(); i1++) { String[] d = data.get(i1); @@ -582,13 +584,16 @@ public class ChartDataBuild { } catch (Exception e) { axisChartDataDTO.setValue(new BigDecimal(0)); } - axisChartDataDTO.setCategory( - StringUtils.defaultIfBlank(b.toString(), - StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName()))); + String category = StringUtils.defaultIfBlank(b.toString(), + StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName())); + axisChartDataDTO.setCategory(category); + categories.add(category); + buildDynamicValue(view, axisChartDataDTO, d, size, extSize); series.get(j).getData().add(axisChartDataDTO); } } + series.get(0).setCategories(categories); map.put("data", series); return map; @@ -610,6 +615,7 @@ public class ChartDataBuild { series1.setData(new ArrayList<>()); series.add(series1); } + Set categories = new HashSet<>(); for (int i1 = 0; i1 < data.size(); i1++) { String[] row = data.get(i1); @@ -635,7 +641,11 @@ public class ChartDataBuild { AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO(); axisChartDataDTO.setField(a.toString()); axisChartDataDTO.setName(a.toString()); - axisChartDataDTO.setCategory(row[xAxis.size()]); + String category = row[xAxis.size()]; + axisChartDataDTO.setCategory(category); + if (category != null) { + categories.add(category); + } List dimensionList = new ArrayList<>(); List quotaList = new ArrayList<>(); @@ -673,6 +683,8 @@ public class ChartDataBuild { series.get(j).getData().add(axisChartDataDTO); } + series.get(0).setCategories(categories); + map.put("data", series); return map; diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/others/chart-mix.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/others/chart-mix.ts index 9a5baf3149..17a90c931f 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/others/chart-mix.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/others/chart-mix.ts @@ -12,7 +12,7 @@ import { setGradientColor } from '../../common/common_antv' import { flow, hexColorToRGBA, parseJson } from '@/views/chart/components/js/util' -import { cloneDeep, isEmpty, defaultTo, map, filter, union } from 'lodash-es' +import { cloneDeep, isEmpty, defaultTo, map, filter, union, slice } from 'lodash-es' import { valueFormatter } from '@/views/chart/components/js/formatter' import { CHART_MIX_AXIS_TYPE, @@ -61,7 +61,7 @@ export class ColumnLineMix extends G2PlotChartView { } drawChart(drawOptions: G2PlotDrawOptions): DualAxes { const { chart, action, container } = drawOptions - if (!chart.data.left.data?.length && !chart.data.right.data?.length) { + if (!chart.data?.left?.data?.length && !chart.data?.right?.data?.length) { return } const left = cloneDeep(chart.data?.left?.data) @@ -89,6 +89,8 @@ export class ColumnLineMix extends G2PlotChartView { const customAttr = parseJson(chart.customAttr) let color = customAttr.basicStyle.colors + const colorSize = color.length + color = color.map(ele => { const tmp = hexColorToRGBA(ele, customAttr.basicStyle.alpha) if (customAttr.basicStyle.gradient) { @@ -98,6 +100,14 @@ export class ColumnLineMix extends G2PlotChartView { } }) + const color2StartNum = defaultTo(left[0]?.categories?.length, 1) + const color2StartIndex = color2StartNum % colorSize + + const color2 = + color2StartIndex === 0 + ? cloneDeep(color) + : union(slice(color, color2StartIndex), slice(color, 0, color2StartIndex)) + // options const initOptions: DualAxesOptions = { data: [data1, data2], @@ -115,7 +125,7 @@ export class ColumnLineMix extends G2PlotChartView { }, { geometry: data2Type, - color: seriesField2 ? color : color[1], + color: seriesField2 ? color2 : color2[0], seriesField: seriesField2 } ], diff --git a/sdk/api/api-base/src/main/java/io/dataease/api/chart/dto/Series.java b/sdk/api/api-base/src/main/java/io/dataease/api/chart/dto/Series.java index e2bffed6c2..9091e66a95 100644 --- a/sdk/api/api-base/src/main/java/io/dataease/api/chart/dto/Series.java +++ b/sdk/api/api-base/src/main/java/io/dataease/api/chart/dto/Series.java @@ -4,6 +4,7 @@ import lombok.Getter; import lombok.Setter; import java.util.List; +import java.util.Set; /** * @Author gin @@ -14,4 +15,5 @@ public class Series { private String name; private String type; private List data; + private Set categories; }