From 075d0f6859cf6587325bf44b7c2d0baf0aed46de Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Fri, 16 Aug 2024 13:53:07 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8-=E6=8C=87=E6=A0=87?= =?UTF-8?q?=E5=8D=A1):=20=E5=8E=BB=E9=99=A4=E6=97=A5=E6=9C=9F=E7=BB=B4?= =?UTF-8?q?=E5=BA=A6=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=90=8C=E7=8E=AF=E6=AF=94?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../charts/impl/numeric/IndicatorHandler.java | 20 +++++++++ .../components/editor/drag-item/QuotaItem.vue | 5 +++ .../drag-item/components/CompareEdit.vue | 45 ++++++++++++++++--- .../views/chart/components/editor/index.vue | 7 ++- .../js/panel/charts/others/indicator.ts | 7 +-- 5 files changed, 72 insertions(+), 12 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java index 11f1f01044..9bb6ed89f4 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java +++ b/core/core-backend/src/main/java/io/dataease/chart/charts/impl/numeric/IndicatorHandler.java @@ -13,6 +13,7 @@ import io.dataease.extensions.view.dto.*; import io.dataease.extensions.view.util.FieldUtil; import lombok.Getter; import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; import java.util.ArrayList; import java.util.List; @@ -39,6 +40,25 @@ public class IndicatorHandler extends NumericalChartHandler { var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis); var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis); var allFields = (List) filterResult.getContext().get("allFields"); + ChartViewFieldDTO chartViewFieldDTO = yAxis.get(0); + ChartFieldCompareDTO compareCalc = chartViewFieldDTO.getCompareCalc(); + boolean isYoy = org.apache.commons.lang3.StringUtils.isNotEmpty(compareCalc.getType()) + && !org.apache.commons.lang3.StringUtils.equalsIgnoreCase(compareCalc.getType(), "none"); + if (isYoy) { + xAxis.clear(); + // 设置维度字段,从同环比中获取用户选择的字段 + xAxis.addAll(allFields.stream().filter(i-> StringUtils.endsWithIgnoreCase(i.getId().toString(),yAxis.get(0).getCompareCalc().getField().toString())).toList()); + xAxis.get(0).setSort("desc"); + if(StringUtils.endsWithIgnoreCase("month_mom",compareCalc.getType())){ + xAxis.get(0).setDateStyle("y_M"); + } + if(StringUtils.endsWithIgnoreCase("day_mom",compareCalc.getType())){ + xAxis.get(0).setDateStyle("y_M_d"); + } + if(StringUtils.endsWithIgnoreCase("year_mom",compareCalc.getType())){ + xAxis.get(0).setDateStyle("y"); + } + } Dimension2SQLObj.dimension2sqlObj(sqlMeta, xAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); Quota2SQLObj.quota2sqlObj(sqlMeta, yAxis, FieldUtil.transFields(allFields), crossDs, dsMap, Utils.getParams(FieldUtil.transFields(allFields)), view.getCalParams()); String querySql = SQLProvider.createQuerySQL(sqlMeta, true, needOrder, view); diff --git a/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue b/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue index ef070a098b..7cb7e1b1d0 100644 --- a/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue +++ b/core/core-frontend/src/views/chart/components/editor/drag-item/QuotaItem.vue @@ -91,6 +91,11 @@ const showValueFormatter = computed(() => { }) const isEnableCompare = () => { + // 指标卡开放同环比配置 + if (chart.value.type === 'indicator') { + state.disableEditCompare = false + return + } let xAxis = null if (Object.prototype.toString.call(chart.value.xAxis) === '[object Array]') { xAxis = JSON.parse(JSON.stringify(chart.value.xAxis)) diff --git a/core/core-frontend/src/views/chart/components/editor/drag-item/components/CompareEdit.vue b/core/core-frontend/src/views/chart/components/editor/drag-item/components/CompareEdit.vue index 1675dc9dcc..a90e57ea1a 100644 --- a/core/core-frontend/src/views/chart/components/editor/drag-item/components/CompareEdit.vue +++ b/core/core-frontend/src/views/chart/components/editor/drag-item/components/CompareEdit.vue @@ -17,6 +17,14 @@ const props = defineProps({ chart: { type: Object, required: true + }, + dimensionData: { + type: Array, + required: false + }, + quotaData: { + type: Array, + required: false } }) @@ -36,6 +44,10 @@ watch( { deep: true } ) +const isIndicator = () => { + return chart.value.type === 'indicator' +} + // 过滤xaxis,extStack所有日期字段 const initFieldList = () => { let xAxis = null @@ -61,6 +73,11 @@ const initFieldList = () => { t1.push(...t2) } + if (isIndicator) { + t1.length = 0 + t1.push(...props.dimensionData.filter(ele => ele.deType === 1)) + t1.push(...props.quotaData.filter(ele => ele.deType === 1)) + } state.fieldList = t1 // 如果没有选中字段,则默认选中第一个 @@ -92,6 +109,15 @@ const initCompareType = () => { } else { state.compareList = [] } + if (isIndicator) { + state.compareList = [ + { name: 'day_mom', value: 'day_mom' }, + { name: 'month_mom', value: 'month_mom' }, + { name: 'year_mom', value: 'year_mom' }, + { name: 'month_yoy', value: 'month_yoy' }, + { name: 'year_yoy', value: 'year_yoy' } + ] + } // 如果没有选中一个同环比类型,则默认选中第一个 if ( (!compareItem.value.compareCalc.type || @@ -103,6 +129,14 @@ const initCompareType = () => { } } +const fieldFormatter = field => { + if (isIndicator) { + return field.name + } else { + return field.name + '(' + t('chart.' + field.dateStyle) + ')' + } +} + initFieldList() initCompareType() @@ -119,7 +153,7 @@ initCompareType() @@ -150,7 +184,7 @@ initCompareType() - + 当对比日期需要过滤时,请使用过滤组件实现过滤;使用视图过滤器,仪表板下钻和联动等功能,会导致结果不一致 @@ -159,14 +193,15 @@ initCompareType()