From 924200fbdb115bcbd20bd81c9f47abd122fa438c Mon Sep 17 00:00:00 2001 From: ulleo Date: Tue, 11 Jun 2024 17:23:27 +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=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E5=A4=9A=E6=9D=A1=E6=8A=98=E7=BA=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #10083 --- .../chart/manage/ChartDataManage.java | 14 ++-- .../dataease/chart/utils/ChartDataBuild.java | 19 +++-- core/core-frontend/src/locales/zh-CN.ts | 2 + .../src/models/chart/editor.d.ts | 1 + .../views/chart/components/editor/index.vue | 69 +++++++++++++++++++ .../js/panel/charts/others/chart-mix.ts | 20 ++++-- 6 files changed, 109 insertions(+), 16 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java index 88821876fe..91714ddf36 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java @@ -139,6 +139,8 @@ public class ChartDataManage { view2.getSenior().put("assistLineCfg", assistLineCfg2); } } + view2.setXAxisExt(view2.getExtBubble()); + view2.setExtBubble(new ArrayList<>()); ChartViewDTO right = calcData(view2, chartExtRequest, allFields, viewFields); data.put("right", right.getData()); @@ -164,6 +166,7 @@ public class ChartDataManage { || ("antv".equalsIgnoreCase(view.getRender()) && "line".equalsIgnoreCase(view.getType())) || StringUtils.equalsIgnoreCase(view.getType(), "flow-map") || StringUtils.equalsIgnoreCase(view.getType(), "sankey") + || StringUtils.equalsIgnoreCase(view.getType(), "chart-mix") ) { xAxis.addAll(xAxisExt); } @@ -825,17 +828,18 @@ public class ChartDataManage { || StringUtils.containsIgnoreCase(view.getType(), "gauge") || StringUtils.equalsIgnoreCase("liquid", view.getType())) { mapChart = ChartDataBuild.transNormalChartData(xAxis, yAxis, view, data, isDrill); - } else if (StringUtils.containsIgnoreCase(view.getType(), "chart-mix") - || StringUtils.containsIgnoreCase(view.getType(), "bidirectional-bar") + } else if (StringUtils.containsIgnoreCase(view.getType(), "bidirectional-bar") || StringUtils.containsIgnoreCase(view.getType(), "progress-bar")) { - mapChart = ChartDataBuild.transMixChartDataAntV(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transMixChartDataAntV(xAxisBase, xAxis, new ArrayList<>(), yAxis, view, data, isDrill); + } else if (StringUtils.containsIgnoreCase(view.getType(), "chart-mix")) { + mapChart = ChartDataBuild.transMixChartDataAntV(xAxisBase, xAxis, xAxisExt, yAxis, view, data, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "label")) { mapChart = ChartDataBuild.transLabelChartData(xAxis, yAxis, view, data, isDrill); } else if (StringUtils.containsIgnoreCase(view.getType(), "quadrant")) { - mapChart = ChartDataBuild.transMixChartDataAntV(xAxis, yAxis, view, data, isDrill); + mapChart = ChartDataBuild.transMixChartDataAntV(xAxisBase, xAxis, new ArrayList<>(), yAxis, view, data, isDrill); } else if (StringUtils.equalsIgnoreCase(view.getType(), "bar-range")) { mapChart = ChartDataBuild.transBarRangeDataAntV(skipBarRange, barRangeDate, xAxisBase, xAxis, yAxis, view, data, isDrill); - } else if(StringUtils.equalsIgnoreCase(view.getType(), "heat-map")){ + } else if (StringUtils.equalsIgnoreCase(view.getType(), "heat-map")) { mapChart = ChartDataBuild.transHeatMapChartDataAntV(xAxisBase, xAxis, yAxis, view, data, isDrill); } else { mapChart = ChartDataBuild.transChartDataAntV(xAxis, yAxis, view, data, isDrill); 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 9772403f02..58ebef4c2c 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 @@ -515,7 +515,7 @@ public class ChartDataBuild { } // antV组合图形 - public static Map transMixChartDataAntV(List xAxis, List yAxis, ChartViewDTO view, List data, boolean isDrill) { + public static Map transMixChartDataAntV(List xAxisBase, List xAxis,List xAxisExt, List yAxis, ChartViewDTO view, List data, boolean isDrill) { Map map = new HashMap<>(); List series = new ArrayList<>(); @@ -540,14 +540,23 @@ public class ChartDataBuild { if (isDrill) { a.append(d[xAxis.size() - 1]); } else { - for (int ii = 0; ii < xAxis.size(); ii++) { - if (ii == xAxis.size() - 1) { + for (int ii = 0; ii < xAxisBase.size(); ii++) { + if (ii == xAxisBase.size() - 1) { a.append(d[ii]); } else { a.append(d[ii]).append("\n"); } } } + StringBuilder b = new StringBuilder(); + for (int ii = xAxisBase.size(); ii < xAxisBase.size() + xAxisExt.size(); ii++) { + if (ii == xAxisBase.size() + xAxisExt.size() - 1) { + b.append(d[ii]); + } else { + b.append(d[ii]).append("\n"); + } + } + axisChartDataDTO.setName(a.toString()); axisChartDataDTO.setField(a.toString()); @@ -572,7 +581,9 @@ public class ChartDataBuild { } catch (Exception e) { axisChartDataDTO.setValue(new BigDecimal(0)); } - axisChartDataDTO.setCategory(StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName())); + axisChartDataDTO.setCategory( + StringUtils.defaultIfBlank(b.toString(), + StringUtils.defaultIfBlank(yAxis.get(j).getChartShowName(), yAxis.get(j).getName()))); buildDynamicValue(view, axisChartDataDTO, d, size, extSize); series.get(j).getData().add(axisChartDataDTO); } diff --git a/core/core-frontend/src/locales/zh-CN.ts b/core/core-frontend/src/locales/zh-CN.ts index 07a5a4a348..57acae5d4a 100644 --- a/core/core-frontend/src/locales/zh-CN.ts +++ b/core/core-frontend/src/locales/zh-CN.ts @@ -843,6 +843,8 @@ export default { chart_data: '数据', chart_style: '样式', drag_block_type_axis: '类别轴', + drag_block_type_axis_left: '左子类别', + drag_block_type_axis_right: '右子类别', drag_block_type_axis_start: '源', drag_block_type_axis_end: '目的', drag_block_value_axis: '值轴', diff --git a/core/core-frontend/src/models/chart/editor.d.ts b/core/core-frontend/src/models/chart/editor.d.ts index 32ae0e39e5..143291419f 100644 --- a/core/core-frontend/src/models/chart/editor.d.ts +++ b/core/core-frontend/src/models/chart/editor.d.ts @@ -40,6 +40,7 @@ declare type AxisType = | 'xAxis' | 'yAxis' | 'xAxisExt' + | 'xAxisExtRight' | 'yAxisExt' | 'extBubble' | 'drill' diff --git a/core/core-frontend/src/views/chart/components/editor/index.vue b/core/core-frontend/src/views/chart/components/editor/index.vue index 2cb174ae6e..562247d497 100644 --- a/core/core-frontend/src/views/chart/components/editor/index.vue +++ b/core/core-frontend/src/views/chart/components/editor/index.vue @@ -371,6 +371,8 @@ const dimensionItemRemove = item => { view.value.yAxis.splice(item.index, 1) } else if (item.removeType === 'quotaExt') { view.value.yAxisExt.splice(item.index, 1) + } else if (item.removeType === 'xAxisExtRight') { + view.value.extBubble.splice(item.index, 1) } } @@ -462,6 +464,13 @@ const onExtCustomSort = item => { customSort() } +const onExtCustomRightSort = item => { + recordSnapshotInfo('render') + state.customSortField = view.value.extBubble[item.index] + customSortAxis.value = 'extBubble' + customSort() +} + const onMove = e => { recordSnapshotInfo('calcData') state.moveId = e.draggedContext.element.id @@ -1023,6 +1032,7 @@ const saveRename = ref => { ref.validate(valid => { if (valid) { const { renameType, index, chartShowName } = state.itemForm + console.log(renameType) let axisType, axis switch (renameType) { case 'quota': @@ -1041,6 +1051,9 @@ const saveRename = ref => { case 'dimensionExt': view.value.xAxisExt[index].chartShowName = chartShowName break + case 'xAxisExtRight': + view.value.extBubble[index].chartShowName = chartShowName + break case 'dimensionStack': view.value.extStack[index].chartShowName = chartShowName break @@ -1863,6 +1876,62 @@ const deleteChartFieldItem = id => { + + +
+ + {{ chartViewInstance.axisConfig.extBubble.name }} + + + + + + +
+
+ + + + +
+
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 ecdf233742..126d7f4d3b 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 @@ -39,7 +39,7 @@ export class ColumnLineMix extends G2PlotChartView { 'seriesTooltipFormatter' ] } - axis: AxisType[] = [...CHART_MIX_AXIS_TYPE, 'yAxisExt'] + axis: AxisType[] = [...CHART_MIX_AXIS_TYPE, 'xAxisExtRight', 'yAxisExt'] axisConfig = { ...this['axisConfig'], yAxis: { @@ -47,6 +47,12 @@ export class ColumnLineMix extends G2PlotChartView { limit: 1, type: 'q' }, + extBubble: { + //用这个字段存放右轴分类 + name: `${t('chart.drag_block_type_axis_right')} / ${t('chart.dimension')}`, + limit: 1, + type: 'd' + }, yAxisExt: { name: `${t('chart.drag_block_value_axis_right')} / ${t('chart.line_quota')}`, limit: 1, @@ -66,6 +72,8 @@ export class ColumnLineMix extends G2PlotChartView { const data1Type = 'column' const data2Type = 'line' + const seriesField2 = chart.extBubble?.length > 0 ? 'category' : undefined + const data1 = defaultTo(left[0]?.data, []) const data2 = map(defaultTo(right[0]?.data, []), d => { return { @@ -100,7 +108,8 @@ export class ColumnLineMix extends G2PlotChartView { }, { geometry: data2Type, - color: color[1] + color: seriesField2 ? color : color[1], + seriesField: seriesField2 } ], interactions: [ @@ -335,7 +344,6 @@ export class ColumnLineMix extends G2PlotChartView { tooltip: false } } - const xAxisExt = chart.xAxisExt const formatterMap = tooltipAttr.seriesTooltipFormatter ?.filter(i => i.show) .reduce((pre, next) => { @@ -360,10 +368,8 @@ export class ColumnLineMix extends G2PlotChartView { .forEach(item => { const formatter = formatterMap[item.data.quotaList[0].id] const value = valueFormatter(parseFloat(item.value as string), formatter.formatterCfg) - let name = isEmpty(formatter.chartShowName) ? formatter.name : formatter.chartShowName - if (xAxisExt?.length > 0) { - name = item.data.category - } + const name = item.data.category + result.push({ ...item, name, value }) }) head.data.dynamicTooltipValue?.forEach(item => {