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 7dfdc026b4..b259e4ff61 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 @@ -1764,25 +1764,24 @@ public class ChartDataBuild { Map> groupDataList = detailData.stream().collect(Collectors.groupingBy(item -> "(" + StringUtils.join(ArrayUtils.subarray(item, 0, xEndIndex), ")-de-(") + ")")); tableRow.forEach(row -> { + BigDecimal rowValue = new BigDecimal(row.get(yAxis.get(0).getDataeaseName()).toString()); String key = xAxis.stream().map(x -> String.format(format, row.get(x.getDataeaseName()).toString())).collect(Collectors.joining("-de-")); List detailFieldValueList = groupDataList.get(key); List> detailValueMapList = Optional.ofNullable(detailFieldValueList).orElse(new ArrayList<>()).stream().map((detailArr -> { Map temp = new HashMap<>(); for (int i = 0; i < realDetailFields.size(); i++) { ChartViewFieldDTO realDetailField = realDetailFields.get(i); - temp.put(realDetailField.getDataeaseName(), detailArr[detailIndex + i]); + if(StringUtils.equalsIgnoreCase(yAxis.get(0).getDataeaseName(),realDetailField.getDataeaseName())){ + temp.put(realDetailField.getDataeaseName(), rowValue); + }else{ + temp.put(realDetailField.getDataeaseName(), detailArr[detailIndex + i]); + } } return temp; })).collect(Collectors.toList()); //详情只要一个 row.put("details", !detailValueMapList.isEmpty() ?Collections.singletonList(detailValueMapList.getFirst()):detailValueMapList); }); - - ChartViewFieldDTO detailFieldDTO = new ChartViewFieldDTO(); - detailFieldDTO.setId(IDUtils.snowID()); - detailFieldDTO.setName("detail"); - detailFieldDTO.setDataeaseName("detail"); - fields.add(detailFieldDTO); map.put("fields", fields); map.put("detailFields", realDetailFields); map.put("tableRow", tableRow); diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/components/LabelSelector.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/components/LabelSelector.vue index 09053c5ff6..6f168a6f29 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/components/LabelSelector.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/components/LabelSelector.vue @@ -4,13 +4,12 @@ import { useI18n } from '@/hooks/web/useI18n' import { COLOR_PANEL, DEFAULT_LABEL } from '@/views/chart/components/editor/util/chart' import { ElFormItem, ElIcon, ElInput, ElSpace } from 'element-plus-secondary' import { formatterType, unitType } from '../../../js/formatter' -import { defaultsDeep, cloneDeep, intersection, union, defaultTo, map } from 'lodash-es' +import { defaultsDeep, cloneDeep, intersection, union, defaultTo, map, isEmpty } from 'lodash-es' import { includesAny } from '../../util/StringUtils' import { fieldType } from '@/utils/attr' import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' import { storeToRefs } from 'pinia' import Icon from '../../../../../../components/icon-custom/src/Icon.vue' -import { useEmitt } from '@/hooks/web/useEmitt' const { t } = useI18n() @@ -43,12 +42,6 @@ const dvMainStore = dvMainStoreWithOut() const toolTip = computed(() => { return props.themes === 'dark' ? 'ndark' : 'dark' }) -const changeDataset = () => { - if (showProperty('showFields')) { - state.labelForm.showFields = [] - emit('onLabelChange', { data: state.labelForm }, 'showFields') - } -} const { batchOptStatus } = storeToRefs(dvMainStore) watch( [() => props.chart.customAttr.label, () => props.chart.customAttr.label.show], @@ -363,16 +356,31 @@ const allFields = computed(() => { const defaultPlaceholder = computed(() => { if (state.labelForm.showFields && state.labelForm.showFields.length > 0) { return state.labelForm.showFields - .map(field => { + .filter(field => !isEmpty(field)) + ?.map(field => { return '${' + field.split('@')[1] + '}' }) .join(',') } return '' }) +watch( + () => allFields.value, + () => { + let result = [] + state.labelForm.showFields?.forEach(field => { + if (allFields.value?.map(i => i.value).includes(field)) { + result.push(field) + } + }) + state.labelForm.showFields = result + if (allFields.value.length > 0) { + changeLabelAttr('showFields') + } + } +) onMounted(() => { init() - useEmitt({ name: 'dataset-change', callback: changeDataset }) }) const isGroupBar = computed(() => { return props.chart.type === 'bar-group' diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/components/TooltipSelector.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/components/TooltipSelector.vue index e973506d54..fc507c3b55 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/components/TooltipSelector.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/components/TooltipSelector.vue @@ -7,7 +7,7 @@ import cloneDeep from 'lodash-es/cloneDeep' import defaultsDeep from 'lodash-es/defaultsDeep' import { formatterType, unitType } from '../../../js/formatter' import { fieldType } from '@/utils/attr' -import { defaultTo, partition, map, includes } from 'lodash-es' +import { defaultTo, partition, map, includes, isEmpty } from 'lodash-es' import chartViewManager from '../../../js/panel' import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' import { storeToRefs } from 'pinia' @@ -94,10 +94,6 @@ const changeDataset = () => { }) } }) - if (showProperty('showFields')) { - state.tooltipForm.showFields = [] - emit('onTooltipChange', { data: state.tooltipForm }, 'showFields') - } } const AXIS_PROP: AxisType[] = ['yAxis', 'yAxisExt', 'extBubble'] @@ -380,11 +376,17 @@ const updateAxis = (form: AxisEditForm) => { }) } const allFields = computed(() => { - return defaultTo(props.allFields, []) + return defaultTo(props.allFields, []).map(item => ({ + key: item.dataeaseName, + name: item.name, + value: `${item.dataeaseName}@${item.name}`, + disabled: false + })) }) const defaultPlaceholder = computed(() => { if (state.tooltipForm.showFields && state.tooltipForm.showFields.length > 0) { return state.tooltipForm.showFields + .filter(field => !isEmpty(field)) .map(field => { const v = field.split('@') return v[1] + ': ${' + field.split('@')[1] + '}' @@ -393,6 +395,21 @@ const defaultPlaceholder = computed(() => { } return '' }) +watch( + () => allFields.value, + () => { + let result = [] + state.tooltipForm.showFields?.forEach(field => { + if (allFields.value?.map(i => i.value).includes(field)) { + result.push(field) + } + }) + state.tooltipForm.showFields = result + if (allFields.value.length > 0) { + changeTooltipAttr('showFields') + } + } +) onMounted(() => { init() useEmitt({ name: 'addAxis', callback: updateSeriesTooltipFormatter }) @@ -482,9 +499,9 @@ onMounted(() => { > diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/map/tooltip-carousel.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/map/tooltip-carousel.ts index b13f79824b..874135a490 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/map/tooltip-carousel.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/map/tooltip-carousel.ts @@ -471,6 +471,9 @@ export class CarouselManager { const buildTooltip = () => { const customAttr = this.chart.customAttr ? parseJson(this.chart.customAttr) : null if (customAttr?.tooltip?.show) { + if (!this.popup) { + return undefined + } const { tooltip } = deepCopy(customAttr) let showFields = tooltip.showFields || [] if (!tooltip.showFields || tooltip.showFields.length === 0) { diff --git a/core/core-frontend/src/views/chart/components/js/util.ts b/core/core-frontend/src/views/chart/components/js/util.ts index 951d4b0cb9..4a4110bfe0 100644 --- a/core/core-frontend/src/views/chart/components/js/util.ts +++ b/core/core-frontend/src/views/chart/components/js/util.ts @@ -521,6 +521,10 @@ export const exportExcelDownload = (chart, callBack?) => { } } + if (chart.type.includes('symbolic-map')) { + request.detailFields = [] + } + const linkStore = useLinkStoreWithOut() if (isDataEaseBi.value || appStore.getIsIframe) {