fix(图表): 修复子弹图无法显示动态目标值的问题,以及优化输入验证

This commit is contained in:
jianneng-fit2cloud
2025-04-01 11:04:23 +08:00
committed by jianneng-fit2cloud
parent ab2d1546d4
commit 283b2f7a7d
4 changed files with 86 additions and 4 deletions

View File

@@ -0,0 +1,77 @@
package io.dataease.chart.charts.impl.bar;
import io.dataease.chart.charts.impl.YoyChartHandler;
import io.dataease.chart.utils.ChartDataBuild;
import io.dataease.extensions.datasource.dto.DatasourceRequest;
import io.dataease.extensions.datasource.dto.DatasourceSchemaDTO;
import io.dataease.extensions.datasource.model.SQLMeta;
import io.dataease.extensions.datasource.provider.Provider;
import io.dataease.extensions.view.dto.*;
import lombok.Getter;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Component
public class BulletGraphHandler extends YoyChartHandler {
@Getter
private String type = "bullet-graph";
@Override
public AxisFormatResult formatAxis(ChartViewDTO view) {
var result = super.formatAxis(view);
var yAxis = result.getAxisMap().get(ChartAxis.yAxis);
yAxis.addAll(view.getYAxisExt());
yAxis.addAll(view.getExtBubble());
yAxis.addAll(view.getExtTooltip());
result.getAxisMap().put(ChartAxis.yAxis, yAxis);
result.getAxisMap().put(ChartAxis.yAxisExt, view.getYAxisExt());
result.getAxisMap().put(ChartAxis.extBubble, view.getExtBubble());
result.getAxisMap().put(ChartAxis.extTooltip, view.getExtTooltip());
return result;
}
@Override
public Map<String, Object> buildNormalResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, List<String[]> data) {
boolean isDrill = filterResult
.getFilterList()
.stream()
.anyMatch(ele -> ele.getFilterType() == 1);
var xAxis = formatResult.getAxisMap().get(ChartAxis.xAxis);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
return ChartDataBuild.transChartData(xAxis, yAxis, view, data, isDrill);
}
@Override
public <T extends ChartCalcDataResult> T calcChartResult(ChartViewDTO view, AxisFormatResult formatResult, CustomFilterResult filterResult, Map<String, Object> sqlMap, SQLMeta sqlMeta, Provider provider) {
var dsMap = (Map<Long, DatasourceSchemaDTO>) sqlMap.get("dsMap");
List<String> dsList = new ArrayList<>();
for (Map.Entry<Long, DatasourceSchemaDTO> next : dsMap.entrySet()) {
dsList.add(next.getValue().getType());
}
var result = (T) super.calcChartResult(view, formatResult, filterResult, sqlMap, sqlMeta, provider);
try {
//如果有同环比过滤,应该用原始sql
var originSql = result.getQuerySql();
var dynamicAssistFields = getDynamicAssistFields(view);
var yAxis = formatResult.getAxisMap().get(ChartAxis.yAxis);
var assistFields = getAssistFields(dynamicAssistFields, yAxis);
if (CollectionUtils.isNotEmpty(assistFields)) {
var req = new DatasourceRequest();
req.setDsList(dsMap);
var assistSql = assistSQL(originSql, assistFields, dsMap);
req.setQuery(assistSql);
logger.debug("calcite assistSql sql: " + assistSql);
var assistData = (List<String[]>) provider.fetchResultField(req).get("data");
result.setAssistData(assistData);
result.setDynamicAssistFields(dynamicAssistFields);
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}

View File

@@ -58,6 +58,9 @@ const changeStyle = (prop?) => {
emit('onMiscChange', { data: { bullet: { ...state.bulletForm } }, requestData: true }, prop)
}
const changeRangeNumber = () => {
if (state.bulletForm.bar.ranges.fixedRangeNumber === null) {
state.bulletForm.bar.ranges.fixedRangeNumber = 1
}
if (state.rangeList.length > state.bulletForm.bar.ranges.fixedRangeNumber) {
state.rangeList = state.rangeList.slice(0, state.bulletForm.bar.ranges.fixedRangeNumber)
} else {

View File

@@ -46,6 +46,9 @@ watch(
{ deep: true }
)
const changeStyle = (prop?) => {
if (state.bulletForm.bar.target.value === null) {
state.bulletForm.bar.target.value = 1
}
emit('onMiscChange', { data: { bullet: { ...state.bulletForm } }, requestData: true }, prop)
}
@@ -142,7 +145,6 @@ onMounted(() => {
:effect="props.themes"
v-model="state.bulletForm.bar.target.value"
:min="1"
:max="100"
size="small"
controls-position="right"
@change="changeStyle('bar.target.value')"

View File

@@ -130,14 +130,14 @@ export class BulletGraph extends G2PlotChartView<G2BulletOptions, G2Bullet> {
// 处理自定义区间
const { bullet } = parseJson(chart.customAttr).misc
if (bullet.bar.ranges.showType === 'fixed') {
const customRange = bullet.bar.ranges.fixedRange?.map(item => item.fixedRangeValue) || []
const customRange = bullet.bar.ranges.fixedRange?.map(item => item.fixedRangeValue) || [0]
result.forEach(item => (item.ranges = customRange))
} else {
result.forEach(item => (item.ranges = item.originalRanges))
}
// 处理自定义目标值
if (bullet.bar.target.showType === 'fixed') {
const customTarget = bullet.bar.target.value
const customTarget = bullet.bar.target.value || 0
result.forEach(item => (item.target = customTarget))
} else {
result.forEach(item => (item.target = item.originalTarget))
@@ -336,7 +336,7 @@ export class BulletGraph extends G2PlotChartView<G2BulletOptions, G2Bullet> {
)
}
} else {
bullet.bar.ranges.fixedRange.forEach(item => {
bullet.bar.ranges.fixedRange?.forEach(item => {
items.push(
createLegendItem(
item.name,