forked from github/dataease
commit
4f5915f3cb
@ -65,7 +65,8 @@ public class StackBarHandler extends BarHandler {
|
||||
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var xAxisBase = xAxis.subList(0, xAxis.size() - extStack.size());
|
||||
return ChartDataBuild.transStackChartDataAntV(xAxisBase, yAxis, view, data, extStack, isDrill);
|
||||
var drillAxis = xAxis.stream().filter(axis -> FieldSource.DRILL == axis.getSource()).toList();
|
||||
var xAxisBase = xAxis.subList(0, xAxis.size() - extStack.size() - drillAxis.size());
|
||||
return ChartDataBuild.transStackChartDataAntV(xAxisBase, xAxis, yAxis, view, data, extStack, isDrill);
|
||||
}
|
||||
}
|
||||
|
@ -31,7 +31,6 @@ public class StackGroupBarHandler extends BarHandler {
|
||||
var xAxis = result.getAxisMap().get(ChartAxis.xAxis);
|
||||
xAxis.addAll(view.getXAxisExt());
|
||||
xAxis.addAll(view.getExtStack());
|
||||
result.getAxisMap().put(ChartAxis.xAxisExt, view.getExtStack());
|
||||
result.getAxisMap().put(ChartAxis.extStack, view.getExtStack());
|
||||
result.getAxisMap().put(ChartAxis.xAxisExt, view.getXAxisExt());
|
||||
return result;
|
||||
@ -82,8 +81,8 @@ public class StackGroupBarHandler extends BarHandler {
|
||||
var xAxisExt = formatResult.getAxisMap().get(ChartAxis.xAxisExt);
|
||||
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
var xAxisBase = xAxis.subList(0, xAxis.size() - xAxisExt.size() - extStack.size());
|
||||
var xAxisMain = xAxis.subList(0, xAxis.size() - extStack.size());
|
||||
return ChartDataBuild.transGroupStackDataAntV(xAxisBase, xAxisMain, xAxisExt, yAxis, extStack, data, view, isDrill);
|
||||
var drillAxis = xAxis.stream().filter(axis -> FieldSource.DRILL == axis.getSource()).toList();
|
||||
var xAxisBase = xAxis.subList(0, xAxis.size() - xAxisExt.size() - extStack.size() - drillAxis.size());
|
||||
return ChartDataBuild.transGroupStackDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, extStack, data, view, isDrill);
|
||||
}
|
||||
}
|
||||
|
@ -46,9 +46,10 @@ public class StackAreaHandler extends YoyChartHandler {
|
||||
.anyMatch(ele -> ele.getFilterType() == 1);
|
||||
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
|
||||
var extStack = formatResult.getAxisMap().get(ChartAxis.extStack);
|
||||
var axisBase = xAxis.subList(0, xAxis.size() - extStack.size());
|
||||
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
|
||||
return ChartDataBuild.transStackChartDataAntV(axisBase, yAxis, view, data, extStack, isDrill);
|
||||
var drillAxis = xAxis.stream().filter(axis -> FieldSource.DRILL == axis.getSource()).toList();
|
||||
var xAxisBase = xAxis.subList(0, xAxis.size() - extStack.size() - drillAxis.size());
|
||||
return ChartDataBuild.transStackChartDataAntV(xAxisBase, xAxis, yAxis, view, data, extStack, isDrill);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -265,7 +265,7 @@ public class ChartDataBuild {
|
||||
}
|
||||
|
||||
// AntV柱状堆叠图
|
||||
public static Map<String, Object> transStackChartDataAntV(List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, ChartViewDTO view, List<String[]> data, List<ChartViewFieldDTO> extStack, boolean isDrill) {
|
||||
public static Map<String, Object> transStackChartDataAntV(List<ChartViewFieldDTO> xAxisBase, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> yAxis, ChartViewDTO view, List<String[]> data, List<ChartViewFieldDTO> extStack, boolean isDrill) {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
|
||||
List<AxisChartDataAntVDTO> dataList = new ArrayList<>();
|
||||
@ -279,8 +279,8 @@ public class ChartDataBuild {
|
||||
if (isDrill) {
|
||||
a.append(row[xAxis.size() - 1]);
|
||||
} else {
|
||||
for (int i = 0; i < xAxis.size(); i++) {
|
||||
if (i == xAxis.size() - 1) {
|
||||
for (int i = 0; i < xAxisBase.size(); i++) {
|
||||
if (i == xAxisBase.size() - 1) {
|
||||
a.append(row[i]);
|
||||
} else {
|
||||
a.append(row[i]).append("\n");
|
||||
@ -289,7 +289,7 @@ public class ChartDataBuild {
|
||||
}
|
||||
axisChartDataDTO.setField(a.toString());
|
||||
axisChartDataDTO.setName(a.toString());
|
||||
axisChartDataDTO.setCategory(row[xAxis.size()]);
|
||||
axisChartDataDTO.setCategory(row[xAxisBase.size()]);
|
||||
|
||||
List<ChartDimensionDTO> dimensionList = new ArrayList<>();
|
||||
List<ChartQuotaDTO> quotaList = new ArrayList<>();
|
||||
@ -300,18 +300,10 @@ public class ChartDataBuild {
|
||||
chartDimensionDTO.setValue(row[k]);
|
||||
dimensionList.add(chartDimensionDTO);
|
||||
}
|
||||
ChartDimensionDTO chartDimensionDTO = new ChartDimensionDTO();
|
||||
chartDimensionDTO.setId(extStack.get(0).getId());
|
||||
chartDimensionDTO.setValue(row[xAxis.size()]);
|
||||
dimensionList.add(chartDimensionDTO);
|
||||
axisChartDataDTO.setDimensionList(dimensionList);
|
||||
|
||||
// yAxis最后的数据对应extLabel和extTooltip,将他们从yAxis中去掉,同时转换成动态值
|
||||
int size = xAxis.size() + extStack.size() + yAxis.size();
|
||||
int extSize = view.getExtLabel().size() + view.getExtTooltip().size();
|
||||
|
||||
if (ObjectUtils.isNotEmpty(yAxis)) {
|
||||
int valueIndex = xAxis.size() + extStack.size();
|
||||
int valueIndex = xAxis.size();
|
||||
ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO();
|
||||
chartQuotaDTO.setId(yAxis.get(0).getId());
|
||||
quotaList.add(chartQuotaDTO);
|
||||
@ -321,7 +313,6 @@ public class ChartDataBuild {
|
||||
} catch (Exception e) {
|
||||
axisChartDataDTO.setValue(new BigDecimal(0));
|
||||
}
|
||||
buildDynamicValue(view, axisChartDataDTO, row, size, extSize);
|
||||
} else {
|
||||
axisChartDataDTO.setQuotaList(quotaList);
|
||||
axisChartDataDTO.setValue(new BigDecimal(0));
|
||||
@ -345,11 +336,7 @@ public class ChartDataBuild {
|
||||
}
|
||||
}
|
||||
|
||||
// yAxis最后的数据对应extLabel和extTooltip,将他们从yAxis中去掉,同时转换成动态值
|
||||
int size = xAxis.size() + yAxis.size();
|
||||
int extSize = view.getExtLabel().size() + view.getExtTooltip().size();
|
||||
|
||||
for (int i = xAxis.size(); i < size - extSize; i++) {
|
||||
for (int i = xAxis.size(); i < xAxis.size() + yAxis.size(); i++) {
|
||||
AxisChartDataAntVDTO axisChartDataDTO = new AxisChartDataAntVDTO();
|
||||
axisChartDataDTO.setField(a.toString());
|
||||
axisChartDataDTO.setName(a.toString());
|
||||
@ -376,7 +363,6 @@ public class ChartDataBuild {
|
||||
axisChartDataDTO.setValue(new BigDecimal(0));
|
||||
}
|
||||
axisChartDataDTO.setCategory(StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName()));
|
||||
buildDynamicValue(view, axisChartDataDTO, row, size, extSize);
|
||||
dataList.add(axisChartDataDTO);
|
||||
}
|
||||
}
|
||||
@ -1335,7 +1321,7 @@ public class ChartDataBuild {
|
||||
public static Map<String, Object> transGroupStackDataAntV(List<ChartViewFieldDTO> xAxisBase, List<ChartViewFieldDTO> xAxis, List<ChartViewFieldDTO> xAxisExt, List<ChartViewFieldDTO> yAxis, List<ChartViewFieldDTO> extStack, List<String[]> data, ChartViewDTO view, boolean isDrill) {
|
||||
// 堆叠柱状图
|
||||
if (ObjectUtils.isEmpty(xAxisExt)) {
|
||||
return transStackChartDataAntV(xAxis, yAxis, view, data, extStack, isDrill);
|
||||
return transStackChartDataAntV(xAxisBase, xAxis, yAxis, view, data, extStack, isDrill);
|
||||
// 分组柱状图
|
||||
} else if (ObjectUtils.isNotEmpty(xAxisExt) && ObjectUtils.isEmpty(extStack)) {
|
||||
return transBaseGroupDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill);
|
||||
@ -1370,8 +1356,8 @@ public class ChartDataBuild {
|
||||
}
|
||||
|
||||
StringBuilder stackField = new StringBuilder();
|
||||
for (int i = xAxis.size(); i < xAxis.size() + extStack.size(); i++) {
|
||||
if (i == xAxis.size() + extStack.size() - 1) {
|
||||
for (int i = xAxisBase.size() + xAxisExt.size(); i < xAxisBase.size() + xAxisExt.size() + extStack.size(); i++) {
|
||||
if (i == xAxisBase.size() + xAxisExt.size() + extStack.size() - 1) {
|
||||
stackField.append(row[i]);
|
||||
} else {
|
||||
stackField.append(row[i]).append("\n");
|
||||
@ -1398,7 +1384,7 @@ public class ChartDataBuild {
|
||||
axisChartDataDTO.setDimensionList(dimensionList);
|
||||
|
||||
if (ObjectUtils.isNotEmpty(yAxis)) {
|
||||
int valueIndex = xAxis.size() + extStack.size();
|
||||
int valueIndex = xAxis.size();
|
||||
ChartQuotaDTO chartQuotaDTO = new ChartQuotaDTO();
|
||||
chartQuotaDTO.setId(yAxis.get(0).getId());
|
||||
quotaList.add(chartQuotaDTO);
|
||||
|
@ -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) {
|
||||
|
Loading…
Reference in New Issue
Block a user