diff --git a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java index 45dafde4cb..b536aa24ad 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java +++ b/core/backend/src/main/java/io/dataease/service/chart/ChartViewService.java @@ -357,6 +357,11 @@ public class ChartViewService { } List extStack = gson.fromJson(view.getExtStack(), new TypeToken>() { }.getType()); + if (CollectionUtils.isNotEmpty(xAxis) && StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + List xAxisExt = gson.fromJson(view.getXAxisExt(), new TypeToken>() { + }.getType()); + extStack.addAll(xAxisExt); + } List extBubble = gson.fromJson(view.getExtBubble(), new TypeToken>() { }.getType()); List fieldCustomFilter = new ArrayList(); @@ -640,6 +645,9 @@ public class ChartViewService { yAxis.addAll(sizeField); } List extStack = gson.fromJson(view.getExtStack(), tokenType); + if (CollectionUtils.isNotEmpty(xAxis) && StringUtils.equals(xAxis.get(0).getGroupType(), "q") && StringUtils.equalsIgnoreCase(view.getRender(), "antv")) { + extStack.addAll(xAxisExt); + } List extBubble = gson.fromJson(view.getExtBubble(), tokenType); List fieldCustomFilter = gson.fromJson(view.getCustomFilter(), filterTokenType); List drill = gson.fromJson(view.getDrillFields(), tokenType); @@ -939,6 +947,8 @@ public class ChartViewService { if (!checkDrillExist(xAxis, extStack, nextDrillField.getId(), view)) { // get drill list first element's sort,then assign to nextDrillField nextDrillField.setSort(getDrillSort(xAxis, drill.get(0))); + nextDrillField.setDrill(true); + if (isAntVScatterNumberXAxis) { extStack.add(nextDrillField); } else { diff --git a/core/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java b/core/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java index 906ee1e517..0e499d11fd 100644 --- a/core/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java +++ b/core/backend/src/main/java/io/dataease/service/chart/util/ChartDataBuild.java @@ -303,8 +303,10 @@ public class ChartDataBuild { } } List extGroupList = new ArrayList<>(); + List extBaseGroupList = new ArrayList<>(); if (xIsNumber) { extGroupList.addAll(extGroup); + extBaseGroupList.addAll(extGroup.stream().filter(d -> !d.isDrill()).collect(Collectors.toList())); } @@ -374,11 +376,20 @@ public class ChartDataBuild { } if (CollectionUtils.isNotEmpty(extGroup) && xIsNumber) { //有分组时其实就是第一个 + String catalog = null; if (isDrill) { - axisChartDataDTO.setCategory(row[extGroupList.size() - 1]); + catalog = row[extGroupList.size() - 1]; } else { - axisChartDataDTO.setCategory(row[0]); + catalog = row[0]; } + axisChartDataDTO.setCategory(StringUtils.defaultIfBlank(catalog, "null")); + + if (!extBaseGroupList.isEmpty()) { + axisChartDataDTO.setField(row[extBaseGroupList.size() - 1]); + } else { + axisChartDataDTO.setField(yAxis.get(j).getName()); + } + } else { axisChartDataDTO.setCategory(yAxis.get(j).getName()); } diff --git a/core/frontend/src/views/chart/chart/common/common_antv.js b/core/frontend/src/views/chart/chart/common/common_antv.js index ac85a2ff71..111bf2bf7c 100644 --- a/core/frontend/src/views/chart/chart/common/common_antv.js +++ b/core/frontend/src/views/chart/chart/common/common_antv.js @@ -246,6 +246,9 @@ export function getLabel(chart) { contentItems.push(valueFormatter(param.value, formatterCfg)) } res = contentItems.join('\n') + } else if (chart.type === 'scatter' && xAxis && xAxis.length > 0 && xAxis[0].groupType === 'q') { + // 针对散点图 + res = param.field } else { for (let i = 0; i < yAxis.length; i++) { const f = yAxis[i] @@ -313,13 +316,18 @@ export function getTooltip(chart) { const t = JSON.parse(JSON.stringify(customAttr.tooltip)) if (t.show) { tooltip = {} - let xAxis, yAxis, extStack + let xAxis, yAxis, extStack, xAxisExt try { xAxis = JSON.parse(chart.xaxis) } catch (e) { xAxis = JSON.parse(JSON.stringify(chart.xaxis)) } + try { + xAxisExt = JSON.parse(chart.xaxisExt) + } catch (e) { + xAxisExt = JSON.parse(JSON.stringify(chart.xaxisExt)) + } try { yAxis = JSON.parse(chart.yaxis) } catch (e) { @@ -467,14 +475,18 @@ export function getTooltip(chart) { } // if (chart.type === 'scatter' && xAxis && xAxis.length > 0 && xAxis[0].groupType === 'q') { - tooltip.fields = ['x', 'category', 'value', 'group'] + tooltip.fields = ['x', 'category', 'value', 'group', 'field'] tooltip.customContent = (title, data) => { const key1 = xAxis[0]?.name - let key2, v1, v2 + let key2, v1, v2, subGroup + + let hasSubGroup = false if (data && data.length > 0) { title = data[0].data.category key2 = data[0].data.group + subGroup = data[0].data.field + hasSubGroup = xAxisExt.length > 0 const fx = xAxis[0] if (fx.formatterCfg) { @@ -499,6 +511,12 @@ export function getTooltip(chart) { return `
${title}
+ ` + + (hasSubGroup + ? `
+ ${xAxisExt[0].name}:${subGroup} +
` : ``) + + `
${key1}:${v1}
diff --git a/core/frontend/src/views/chart/chart/util.js b/core/frontend/src/views/chart/chart/util.js index cbde5bcffd..92a9757112 100644 --- a/core/frontend/src/views/chart/chart/util.js +++ b/core/frontend/src/views/chart/chart/util.js @@ -3452,7 +3452,43 @@ export function getColors(chart, colors, reset) { isCustom: false }) } - } else if (includesAny(chart.type, 'bar', 'scatter', 'radar', 'area') && !chart.type.includes('group')) { + } else if (chart.type === 'scatter') { + const xAxis = JSON.parse(chart.xaxis) + if (chart.data && chart.render === 'antv' && xAxis && xAxis.length > 0 && xAxis[0].groupType === 'q') { + const data = chart.data.data + const groups = [] + for (let i = 0; i < data.length; i++) { + const d = data[i] + if (!groups.includes(d.category)) { + groups.push(d.category) + } + } + for (let i = 0; i < groups.length; i++) { + const s = groups[i] + seriesColors.push({ + name: s, + color: colors[i % colors.length], + isCustom: false + }) + } + } else { + if (Object.prototype.toString.call(chart.yaxis) === '[object Array]') { + series = JSON.parse(JSON.stringify(chart.yaxis)) + } else { + series = JSON.parse(chart.yaxis) + } + if (series) { + for (let i = 0; i < series.length; i++) { + const s = series[i] + seriesColors.push({ + name: s.name, + color: colors[i % colors.length], + isCustom: false + }) + } + } + } + } else if ((includesAny(chart.type, 'bar', 'radar', 'area')) && !chart.type.includes('group')) { if (Object.prototype.toString.call(chart.yaxis) === '[object Array]') { series = JSON.parse(JSON.stringify(chart.yaxis)) } else { @@ -3499,7 +3535,6 @@ export function getColors(chart, colors, reset) { // if (customSortData && customSortData.length > 0) { // data = customSort(customSortData, data) // } - for (let i = 0; i < data.length; i++) { const s = data[i] seriesColors.push({ diff --git a/core/frontend/src/views/chart/components/shapeAttr/ColorSelector.vue b/core/frontend/src/views/chart/components/shapeAttr/ColorSelector.vue index 79f75a8630..4d8a4db119 100644 --- a/core/frontend/src/views/chart/components/shapeAttr/ColorSelector.vue +++ b/core/frontend/src/views/chart/components/shapeAttr/ColorSelector.vue @@ -120,6 +120,7 @@ v-show="showProperty('customColor')" class="custom-color-style" > + aaa
{{ $t('chart.placeholder_field') }}
+ + + + {{ $t('chart.chart_group') }} + + / + {{ $t('chart.dimension') }} + +
+ {{ $t('chart.scatter_group_tip') }} +
+ +
+ +
+ + + + + +
+ {{ $t('chart.placeholder_field') }} +
+
1) { + if ((this.view.type === 'map' || this.view.type === 'word-cloud' || this.view.type === 'scatter') && this.view.xaxisExt.length > 1) { this.view.xaxisExt = [this.view.xaxisExt[0]] } this.calcData(true) diff --git a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/chart/ChartViewFieldDTO.java b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/chart/ChartViewFieldDTO.java index ed6a178251..4fe1faecc3 100644 --- a/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/chart/ChartViewFieldDTO.java +++ b/sdk/dataease-plugin-common/src/main/java/io/dataease/plugins/common/dto/chart/ChartViewFieldDTO.java @@ -16,4 +16,6 @@ public class ChartViewFieldDTO extends ChartViewFieldBaseDTO implements Serializ private List customSort; private String busiType; + + private boolean drill; }