From 38efd91e53e77e914e8182b69b5a12e578c8b890 Mon Sep 17 00:00:00 2001 From: "lixuefei.1313" Date: Mon, 5 Jan 2026 17:58:21 +0800 Subject: [PATCH 1/2] fix: fix issue of showTooltip in map chart --- .../component/tooltip/utils/show-tooltip.ts | 49 +++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/packages/vchart/src/component/tooltip/utils/show-tooltip.ts b/packages/vchart/src/component/tooltip/utils/show-tooltip.ts index e6dc9e25fc..2c93fd8cc7 100644 --- a/packages/vchart/src/component/tooltip/utils/show-tooltip.ts +++ b/packages/vchart/src/component/tooltip/utils/show-tooltip.ts @@ -38,6 +38,7 @@ type MarkInfo = { hasMeasureData?: boolean; groupField?: string; groupData?: any; + originDatum?: Datum; }; series: ISeries; dimType?: string; @@ -78,14 +79,13 @@ export function showTooltip(datum: Datum, options: IShowTooltipOption, component }); const getOriginDatum = (info: MarkInfo) => { const { dimensionFields, dimensionData, measureFields, measureData, groupField, groupData } = info.data; - const originDatum = info.series.getViewData()?.latestData.find((datum: any) => { + return info.series.getViewData()?.latestData.find((datum: any) => { return ( datumContainsArray(dimensionFields, dimensionData)(datum) && datumContainsArray(measureFields, measureData)(datum) && (isNil(groupField) || datumContainsArray([groupField], [groupData])(datum)) ); }); - return originDatum; }; const transform = region.getOption().globalInstance.getStage().window.getViewBoxTransform().getInverse(); @@ -168,7 +168,7 @@ export function showTooltip(datum: Datum, options: IShowTooltipOption, component if (!info) { return 'none'; } - const mockDatum = { + const mockDatum = info.data.originDatum ?? { ...getOriginDatum(info), ...datum }; @@ -272,6 +272,47 @@ export const getMarkInfoList = (datum: Datum, region: IRegion) => { }); }; + const parseMarkInfoOfGeoSeries = () => { + const originDatum = series + .getMapViewData?.() + ?.latestData.find((datum: Datum) => + dimensionFields.every((key, i) => datum.properties[key] === dimensionData?.[i]) + ); + let markInfoMeasureData = measureData; + if (!hasMeasureData) { + // 如果只有单个数据组且用户没有给y轴数据,则补全y轴数据 + measureData = getDataArrayFromFieldArray(measureFields, originDatum); + markInfoMeasureData = measureData; + if (!hasData(measureData) && !originDatum) { + return; + } + measureData = { ...originDatum.properties }; + } + + const pos = + series.type === SeriesTypeEnum.pie + ? (series as PieSeries).dataToCentralPosition(originDatum.properties) + : series.dataToPosition(originDatum.properties); + if (isNil(pos) || isNaN(pos.x) || isNaN(pos.y)) { + return; + } + + markInfoList.push({ + pos, + data: { + dimensionFields, + dimensionData, + measureFields, + measureData: markInfoMeasureData, + hasMeasureData, + groupField, + groupData, + originDatum + }, + series + }); + }; + if (series.coordinate === 'cartesian') { const cartesianSeries = series as ICartesianSeries; const dimType = isDiscrete((series as ICartesianSeries).getYAxisHelper()?.getScale(0)?.type) ? 'y' : 'x'; @@ -404,7 +445,7 @@ export const getMarkInfoList = (datum: Datum, region: IRegion) => { } } } else if (series.coordinate === 'geo') { - parseMarkInfoOfSimpleSeries(); + parseMarkInfoOfGeoSeries(); } }); From 9fb25b3f1032793800b738cda98522f1e9961a99 Mon Sep 17 00:00:00 2001 From: "lixuefei.1313" Date: Mon, 5 Jan 2026 18:00:28 +0800 Subject: [PATCH 2/2] fix: fix issue of showTooltip in map chart --- packages/vchart/src/component/tooltip/utils/show-tooltip.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/vchart/src/component/tooltip/utils/show-tooltip.ts b/packages/vchart/src/component/tooltip/utils/show-tooltip.ts index 2c93fd8cc7..afab7ae2a5 100644 --- a/packages/vchart/src/component/tooltip/utils/show-tooltip.ts +++ b/packages/vchart/src/component/tooltip/utils/show-tooltip.ts @@ -273,7 +273,9 @@ export const getMarkInfoList = (datum: Datum, region: IRegion) => { }; const parseMarkInfoOfGeoSeries = () => { + // 地图需要特殊处理,需要根据properties属性来匹配数据 const originDatum = series + // @ts-ignore .getMapViewData?.() ?.latestData.find((datum: Datum) => dimensionFields.every((key, i) => datum.properties[key] === dimensionData?.[i])