mirror of
https://github.com/dataease/dataease.git
synced 2026-05-20 19:48:18 +08:00
fix(图表): 修复子弹图无法显示动态目标值的问题,以及优化输入验证
This commit is contained in:
committed by
jianneng-fit2cloud
parent
ab2d1546d4
commit
283b2f7a7d
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
@@ -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')"
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user