From 14b0fdf007afbbc3422dbf98afac6bd8e7202d4f Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Thu, 1 Aug 2024 02:15:23 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9C=80=E5=80=BC=E6=97=A0=E6=B3=95=E6=98=BE=E7=A4=BA=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=8C=E5=B9=B6=E5=8E=BB=E7=A9=BA=E5=80=BC?= =?UTF-8?q?=E5=8E=BB=E6=9C=80=E5=B0=8F=E5=80=BC=EF=BC=8C=E4=BB=A5=E5=8F=8A?= =?UTF-8?q?=E6=9C=80=E5=80=BC=E6=A0=87=E6=B3=A8=E6=B7=BB=E5=8A=A0=E9=87=8D?= =?UTF-8?q?=E5=8F=A0=E6=98=BE=E9=9A=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/chart/components/js/extremumUitl.ts | 53 +++++++++++++++++-- 1 file changed, 50 insertions(+), 3 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/js/extremumUitl.ts b/core/core-frontend/src/views/chart/components/js/extremumUitl.ts index ca24ce271e..ae314db583 100644 --- a/core/core-frontend/src/views/chart/components/js/extremumUitl.ts +++ b/core/core-frontend/src/views/chart/components/js/extremumUitl.ts @@ -66,6 +66,7 @@ function createExtremumDiv(id, value, formatterCfg, chartId) { } const div = document.createElement('div') div.id = id + div.className = 'child' div.setAttribute( 'style', `width: auto; @@ -102,6 +103,44 @@ const noChildrenFieldChart = chart => { return ['area', 'bar'].includes(chart.type) } +const overlap = chart => { + const container = document.getElementById('point_' + chart.id) + const children = Array.from(container.getElementsByClassName('child')) + + function getOverlapArea(rect1, rect2) { + const x_overlap = Math.max( + 0, + Math.min(rect1.right, rect2.right) - Math.max(rect1.left, rect2.left) + ) + const y_overlap = Math.max( + 0, + Math.min(rect1.bottom, rect2.bottom) - Math.max(rect1.top, rect2.top) + ) + return x_overlap * y_overlap + } + + function checkAndHideOverlappedElements() { + children.forEach(child => { + const childRect = child.getBoundingClientRect() + let totalOverlapArea = 0 + + children.forEach(otherChild => { + if (child !== otherChild) { + const otherChildRect = otherChild.getBoundingClientRect() + totalOverlapArea += getOverlapArea(childRect, otherChildRect) + } + }) + + const childArea = childRect.width * childRect.height + if (totalOverlapArea / childArea > 0.3) { + child.parentNode?.removeChild(child) + } + }) + } + + checkAndHideOverlappedElements() +} + export const extremumEvt = (newChart, chart, _options, container) => { chart.container = container const { label: labelAttr } = parseJson(chart.customAttr) @@ -112,7 +151,10 @@ export const extremumEvt = (newChart, chart, _options, container) => { i.forEach(item => { delete item._origin.EXTREME }) - const { minItem, maxItem } = findMinMax(i) + const { minItem, maxItem } = findMinMax(i.filter(item => item._origin.value)) + if (!minItem || !maxItem) { + return + } let showExtremum = false if (noChildrenFieldChart(chart) || yAxis.length > 1) { const seriesLabelFormatter = labelAttr.seriesLabelFormatter.find( @@ -134,6 +176,7 @@ export const extremumEvt = (newChart, chart, _options, container) => { }) newChart.chart.geometries[0].on('afteranimate', () => { createExtremumPoint(chart, ev) + overlap(chart) }) }) newChart.on('legend-item:click', ev => { @@ -211,8 +254,12 @@ export const createExtremumPoint = (chart, ev) => { showExtremum = seriesLabelFormatter?.showExtremum attr = seriesLabelFormatter } else { - showExtremum = labelAttr.seriesLabelFormatter[0]?.showExtremum - attr = labelAttr.seriesLabelFormatter[0] + if (['bar-group'].includes(chart.type)) { + showExtremum = labelAttr.showExtremum + } else { + showExtremum = labelAttr.seriesLabelFormatter[0]?.showExtremum + attr = labelAttr.seriesLabelFormatter[0] + } } const fontSize = attr ? attr.fontSize : labelAttr.fontSize if (!minItem) {