From 60698899456ae02470ed829ebd2d34fbbcfab631 Mon Sep 17 00:00:00 2001 From: wisonic Date: Wed, 4 Sep 2024 17:31:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E5=A0=86=E5=8F=A0?= =?UTF-8?q?=E6=9F=B1=E7=8A=B6=E5=9B=BE=E5=92=8C=E6=9D=A1=E5=BD=A2=E5=9B=BE?= =?UTF-8?q?=E6=8C=87=E6=A0=87=E6=8E=92=E5=BA=8F=E7=BB=93=E6=9E=9C=E9=94=99?= =?UTF-8?q?=E8=AF=AF=20#11316?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/js/panel/charts/bar/bar.ts | 65 +++++++++++++++++++ .../js/panel/charts/bar/horizontal-bar.ts | 33 ++++++++++ 2 files changed, 98 insertions(+) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bar.ts index f22d360810..df33503826 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/bar.ts @@ -313,10 +313,42 @@ export class StackBar extends Bar { return this.configStackColor(chart, options) } + protected configData(chart: Chart, options: ColumnOptions): ColumnOptions { + const { xAxis, extStack, yAxis } = chart + const mainSort = xAxis.some(axis => axis.sort !== 'none') + const subSort = extStack.some(axis => axis.sort !== 'none') + if (mainSort || subSort) { + return options + } + const quotaSort = yAxis?.[0].sort !== 'none' + if (!quotaSort || !extStack.length || !yAxis.length) { + return options + } + const { data } = options + const mainAxisValueMap = data.reduce((p, n) => { + p[n.field] = p[n.field] ? p[n.field] + n.value : n.value || 0 + return p + }, {}) + const sort = yAxis[0].sort + data.sort((p, n) => { + if (sort === 'asc') { + return mainAxisValueMap[p.field] - mainAxisValueMap[n.field] + } else { + return mainAxisValueMap[n.field] - mainAxisValueMap[p.field] + } + }) + return options + } + public setupSeriesColor(chart: ChartObj, data?: any[]): ChartBasicStyle['seriesColor'] { return setUpStackSeriesColor(chart, data) } + protected setupOptions(chart: Chart, options: ColumnOptions): ColumnOptions { + const tmp = super.setupOptions(chart, options) + return flow(this.configData)(chart, tmp, {}, this) + } + constructor(name = 'bar-stack') { super(name) this.baseOptions = { @@ -376,6 +408,22 @@ export class GroupBar extends StackBar { return setUpGroupSeriesColor(chart, data) } + protected setupOptions(chart: Chart, options: ColumnOptions): ColumnOptions { + return flow( + this.configTheme, + this.configEmptyDataStrategy, + this.configColor, + this.configBasicStyle, + this.configLabel, + this.configTooltip, + this.configLegend, + this.configXAxis, + this.configYAxis, + this.configSlider, + this.configAnalyse + )(chart, options, {}, this) + } + constructor(name = 'bar-group') { super(name) this.baseOptions = { @@ -427,6 +475,23 @@ export class GroupStackBar extends StackBar { tooltip } } + + protected setupOptions(chart: Chart, options: ColumnOptions): ColumnOptions { + return flow( + this.configTheme, + this.configEmptyDataStrategy, + this.configColor, + this.configBasicStyle, + this.configLabel, + this.configTooltip, + this.configLegend, + this.configXAxis, + this.configYAxis, + this.configSlider, + this.configAnalyse + )(chart, options, {}, this) + } + constructor(name = 'bar-group-stack') { super(name) this.baseOptions = { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/horizontal-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/horizontal-bar.ts index be75cead88..a11bfee2b7 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/bar/horizontal-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/bar/horizontal-bar.ts @@ -352,6 +352,39 @@ export class HorizontalStackBar extends HorizontalBar { public setupSeriesColor(chart: ChartObj, data?: any[]): ChartBasicStyle['seriesColor'] { return setUpStackSeriesColor(chart, data) } + + protected configData(chart: Chart, options: BarOptions): BarOptions { + const { xAxis, extStack, yAxis } = chart + const mainSort = xAxis.some(axis => axis.sort !== 'none') + const subSort = extStack.some(axis => axis.sort !== 'none') + if (mainSort || subSort) { + return options + } + const quotaSort = yAxis?.[0].sort !== 'none' + if (!quotaSort || !extStack.length || !yAxis.length) { + return options + } + const { data } = options + const mainAxisValueMap = data.reduce((p, n) => { + p[n.field] = p[n.field] ? p[n.field] + n.value : n.value || 0 + return p + }, {}) + const sort = yAxis[0].sort + data.sort((p, n) => { + if (sort === 'asc') { + return mainAxisValueMap[p.field] - mainAxisValueMap[n.field] + } else { + return mainAxisValueMap[n.field] - mainAxisValueMap[p.field] + } + }) + return options + } + + protected setupOptions(chart: Chart, options: BarOptions): BarOptions { + const tmp = super.setupOptions(chart, options) + return flow(this.configData)(chart, tmp, {}, this) + } + constructor(name = 'bar-stack-horizontal') { super(name) this.baseOptions = {