From 1b7c662642eee8bfc5e1a6e836fa0a06ff0819f2 Mon Sep 17 00:00:00 2001 From: wisonic-s Date: Sun, 28 Apr 2024 20:12:51 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=A7=86=E5=9B=BE):=20AntV=20=E5=A0=86?= =?UTF-8?q?=E5=8F=A0=E6=9F=B1=E7=8A=B6=E5=9B=BE=E6=8C=89=E7=85=A7=E6=8C=87?= =?UTF-8?q?=E6=A0=87=E6=95=B4=E4=BD=93=E6=8E=92=E5=BA=8F=20#5872?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/views/chart/chart/bar/bar_antv.js | 6 ++++- core/frontend/src/views/chart/chart/util.js | 26 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/core/frontend/src/views/chart/chart/bar/bar_antv.js b/core/frontend/src/views/chart/chart/bar/bar_antv.js index 90cffcbd54..46f83c3d34 100644 --- a/core/frontend/src/views/chart/chart/bar/bar_antv.js +++ b/core/frontend/src/views/chart/chart/bar/bar_antv.js @@ -14,7 +14,7 @@ import { configPlotTooltipEvent, configAxisLabelLengthLimit } from '@/views/chart/chart/common/common_antv' -import { antVCustomColor, getColors, handleEmptyDataStrategy, hexColorToRGBA } from '@/views/chart/chart/util' +import { antVCustomColor, getColors, handleEmptyDataStrategy, hexColorToRGBA, handleStackSort } from '@/views/chart/chart/util' import { cloneDeep, find } from 'lodash-es' export function baseBarOptionAntV(container, chart, action, isGroup, isStack) { @@ -131,6 +131,8 @@ export function baseBarOptionAntV(container, chart, action, isGroup, isStack) { } handleEmptyDataStrategy(emptyDataStrategy, chart, data, options) } + // 处理堆叠排序 + handleStackSort(chart, data) // 开始渲染 const plot = new Column(container, options) @@ -240,6 +242,8 @@ export function hBaseBarOptionAntV(container, chart, action, isGroup, isStack) { return setGradientColor(ele, customAttr.color.gradient) }) } + // 处理堆叠排序 + handleStackSort(chart, data) // 处理空值 if (chart.senior) { let emptyDataStrategy = JSON.parse(chart.senior)?.functionCfg?.emptyDataStrategy diff --git a/core/frontend/src/views/chart/chart/util.js b/core/frontend/src/views/chart/chart/util.js index 35035ef69a..1b7dcd1700 100644 --- a/core/frontend/src/views/chart/chart/util.js +++ b/core/frontend/src/views/chart/chart/util.js @@ -3967,3 +3967,29 @@ export function adjustPosition(targetDom, parentDom, clickPosition, offset, init } return result } + +export function handleStackSort(chart, data) { + if (!data?.length) { + return + } + if (!chart.type.includes('stack') || + chart.type.includes('group')) { + return + } + const { xaxis, yaxis, extStack } = chart + const xAxis = JSON.parse(xaxis) + const yAxis = JSON.parse(yaxis) + const stack = JSON.parse(extStack) + if (!(stack.length && xAxis.length && yAxis.length) || + yAxis[0].sort === 'none' || + !xAxis.every(i => i.sort === 'none')) { + return + } + const result = data.reduce((p, n, i) => { + p[n.field] = (p[n.field] || 0) + (n.value ?? 0) + return p + }, {}) + data.sort((p, n) => { + return yAxis[0].sort === 'asc' ? result[p.field] - result[n.field] : result[n.field] - result[p.field] + }) +}