From 255338be8afff3babcc27b568812864ddca7b96e Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Tue, 2 Jun 2026 17:03:23 +0800 Subject: [PATCH 1/4] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=9D=A2=E7=A7=AF=E5=9B=BE=E4=BB=A5=E5=8F=8A=E6=9F=B1?= =?UTF-8?q?=E6=9D=A1=E5=9B=BE=E5=8F=AF=E8=83=BD=E5=87=BA=E7=8E=B0=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E4=B8=AD=E7=BC=BA=E5=B0=91=E6=8C=87=E6=A0=87=E7=9A=84?= =?UTF-8?q?=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/js/panel/charts/g2/bar/bar.ts | 36 +++++---- .../js/panel/charts/g2/bar/barUtil.ts | 76 +++++++++++++++++++ .../js/panel/charts/g2/line/area.ts | 34 ++++++--- 3 files changed, 121 insertions(+), 25 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/bar.ts index 03db9738f8..5c4d1ef45a 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/bar.ts @@ -32,8 +32,13 @@ import { } from '@/views/chart/components/editor/util/chart' import { createTooltipWrapper, + getSeriesTooltipFormatter, + getSeriesTooltipFormatterMap, getStackTooltipGroupName, + getTooltipItemFormatter, handleEmptyDataStrategy, + isSeriesTooltipFormatterShown, + isTooltipItemShown, renderGroupedTooltipItems, tooltipCss, tooltipMaxHeight, @@ -248,12 +253,7 @@ export class Bar extends G2ChartView { if (!tooltipAttr.show) { return options } - const formatterMap = tooltipAttr.seriesTooltipFormatter - ?.filter(i => i.show) - .reduce((pre, next) => { - pre[next.id] = next - return pre - }, {}) as Record + const formatterMap = getSeriesTooltipFormatterMap(tooltipAttr) const tooltipOptions: ViewSpec = { tooltip: d => d, interaction: { @@ -268,24 +268,34 @@ export class Bar extends G2ChartView { const titleHtml = TOOLTIP_TITLE_TPL.replace('{title}', title) let tooltipItems = originalItems if (tooltipAttr.seriesTooltipFormatter?.length) { - tooltipItems = originalItems.filter(item => formatterMap[item.quotaList[0].id]) + // 只隐藏明确配置为不展示的字段,避免过期 formatter 漏掉新指标。 + tooltipItems = originalItems.filter(item => + isTooltipItemShown(formatterMap, item, 'yAxis') + ) } const result = [] const head = originalItems[0] tooltipItems.forEach(item => { - const formatter = formatterMap[item.quotaList[0].id] ?? yAxis[0] + const formatter = getTooltipItemFormatter(formatterMap, item, yAxis, 'yAxis') const value = item.value === null || item.value === undefined ? '' - : valueFormatter(item.value, formatter.formatterCfg) - const name = isEmpty(formatter.chartShowName) - ? formatter.name + : valueFormatter( + item.value, + formatter?.formatterCfg ?? tooltipAttr.tooltipFormatter + ) + const name = isEmpty(formatter?.chartShowName) + ? formatter?.name ?? item.name : formatter.chartShowName result.push({ ...item, name, value }) }) head.dynamicTooltipValue?.forEach(item => { - const formatter = formatterMap[item.fieldId] - if (formatter) { + const formatter = getSeriesTooltipFormatter( + formatterMap, + item.fieldId, + chart.extTooltip + ) + if (formatter && isSeriesTooltipFormatterShown(formatterMap, item.fieldId)) { const value = item.value === null || item.value === undefined ? '' diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/barUtil.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/barUtil.ts index 3d5a945b8c..55e147c744 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/barUtil.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/barUtil.ts @@ -283,6 +283,82 @@ export function tooltipMaxHeight(chart: Chart) { return `max-height: ${maxHeight}px;max-width: ${chartRect.width / 2}px;` } +export function getSeriesTooltipFormatterMap(tooltipAttr?: DeepPartial) { + return (tooltipAttr?.seriesTooltipFormatter || []).reduce((pre, next) => { + if (!next?.id) { + return pre + } + const formatter = next as SeriesFormatter + // 同一字段可出现在不同指标槽位,优先用 seriesId 区分具体槽位。 + if (formatter.seriesId) { + pre[formatter.seriesId] = formatter + } + if (!formatter.seriesId || formatter.seriesId === formatter.id) { + pre[formatter.id] = formatter + } + return pre + }, {} as Record) +} + +export function getTooltipItemFieldId(item?: any) { + return item?.quotaList?.[0]?.id ?? item?.data?.quotaList?.[0]?.id ?? item?.fieldId +} + +// 旧图表样式可能带着过期 formatter;当前字段缺少配置时按默认展示处理。 +export function isSeriesTooltipFormatterShown( + formatterMap: Record, + fieldId?: string, + axisType?: AxisType +) { + if (!fieldId) { + return true + } + if (axisType) { + // 带槽位的主指标不能被旧的 id 级 show:false 误隐藏。 + const seriesKey = `${fieldId}-${axisType}` + return Object.prototype.hasOwnProperty.call(formatterMap, seriesKey) + ? formatterMap[seriesKey]?.show !== false + : true + } + if (Object.prototype.hasOwnProperty.call(formatterMap, fieldId)) { + return formatterMap[fieldId]?.show !== false + } + return true +} + +export function isTooltipItemShown( + formatterMap: Record, + item?: any, + axisType?: AxisType +) { + return isSeriesTooltipFormatterShown(formatterMap, getTooltipItemFieldId(item), axisType) +} + +// 带槽位的 formatter 缺项时回退到当前轴字段,避免旧 id 级配置污染新指标。 +export function getSeriesTooltipFormatter( + formatterMap: Record, + fieldId?: string, + fields: Partial[] = [], + axisType?: AxisType +) { + const field = fields.find(field => field?.id === fieldId) + const seriesId = (field as Partial)?.seriesId + if (axisType && fieldId) { + const seriesKey = `${fieldId}-${axisType}` + return formatterMap[seriesKey] || (seriesId && formatterMap[seriesId]) || field + } + return (fieldId && formatterMap[fieldId]) || (seriesId && formatterMap[seriesId]) || field +} + +export function getTooltipItemFormatter( + formatterMap: Record, + item: any, + fields: Partial[] = [], + axisType?: AxisType +) { + return getSeriesTooltipFormatter(formatterMap, getTooltipItemFieldId(item), fields, axisType) +} + // 将字段显示名降级到原始字段名,避免 tooltip 分组标题为空 export function getFieldDisplayName(field?: Partial) { return field?.chartShowName || field?.name || '' diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/line/area.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/line/area.ts index d30552c21f..66056d5069 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/line/area.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/line/area.ts @@ -38,8 +38,13 @@ import { registerSymbol, Symbols } from '@antv/g2/esm/utils/marker' import G2TooltipCarousel from '@/views/chart/components/js/G2TooltipCarousel' import { createTooltipWrapper, + getSeriesTooltipFormatter, + getSeriesTooltipFormatterMap, getStackTooltipGroupName, + getTooltipItemFormatter, renderGroupedTooltipItems, + isSeriesTooltipFormatterShown, + isTooltipItemShown, tooltipCss, tooltipMaxHeight } from '../bar/barUtil' @@ -608,12 +613,7 @@ export class Area extends G2ChartView { defaultsDeep(lineMark, { tooltip: false }) return options } - const formatterMap = tooltipAttr.seriesTooltipFormatter - ?.filter(i => i.show) - .reduce((pre, next) => { - pre[next.id] = next - return pre - }, {}) as Record + const formatterMap = getSeriesTooltipFormatterMap(tooltipAttr) const yAxis = chart.yAxis const tooltipOptions: G2Spec = { tooltip: d => d, @@ -623,11 +623,14 @@ export class Area extends G2ChartView { mount: createTooltipWrapper(chart), css: tooltipCss(tooltipAttr), enterable: true, - render: (e, { title, items: originalItems }) => { + render: (_e, { title, items: originalItems }) => { const titleHtml = TOOLTIP_TITLE_TPL.replace('{title}', title) let tooltipItems = originalItems if (tooltipAttr.seriesTooltipFormatter?.length) { - tooltipItems = originalItems.filter(item => formatterMap[item.quotaList[0].id]) + // 只隐藏明确配置为不展示的字段,避免过期 formatter 漏掉新指标。 + tooltipItems = originalItems.filter(item => + isTooltipItemShown(formatterMap, item, 'yAxis') + ) } const result = [] const head = originalItems[0] @@ -635,13 +638,20 @@ export class Area extends G2ChartView { if (item.value === null || item.value === undefined) { return } - const formatter = formatterMap[item.quotaList[0].id] ?? yAxis[0] - const value = valueFormatter(item.value, formatter.formatterCfg) + const formatter = getTooltipItemFormatter(formatterMap, item, yAxis, 'yAxis') + const value = valueFormatter( + item.value, + formatter?.formatterCfg ?? tooltipAttr.tooltipFormatter + ) result.push({ ...item, name: item.category, value }) }) head.dynamicTooltipValue?.forEach(item => { - const formatter = formatterMap[item.fieldId] - if (formatter) { + const formatter = getSeriesTooltipFormatter( + formatterMap, + item.fieldId, + chart.extTooltip + ) + if (formatter && isSeriesTooltipFormatterShown(formatterMap, item.fieldId)) { const value = valueFormatter(parseFloat(item.value), formatter.formatterCfg) const name = isEmpty(formatter.chartShowName) ? formatter.name From 41320f5105e4d4d54047a575f5545a177666a32a Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Tue, 2 Jun 2026 19:05:13 +0800 Subject: [PATCH 2/4] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E8=B0=83=E6=95=B4=E6=9F=B1=E6=9D=A1=E5=9B=BE=E7=9A=84?= =?UTF-8?q?=E6=9F=B1=E5=AE=BD=E7=99=BE=E5=88=86=E6=AF=94=E7=9A=84=E5=AE=BD?= =?UTF-8?q?=E5=BA=A6=E5=BA=A6=E5=92=8C=E9=97=B4=E8=B7=9D=E8=AE=A1=E7=AE=97?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E7=A1=AE=E4=BF=9D=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E4=B8=80=E8=87=B4=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/js/panel/charts/g2/bar/bar.ts | 69 +++++++++++++++---- .../js/panel/charts/g2/bar/horizontal-bar.ts | 21 +++--- .../charts/g2/bar/percentage-stack-bar.ts | 6 +- .../g2/bar/percentage-stack-horizontal-bar.ts | 6 +- .../js/panel/charts/g2/bar/progress-bar.ts | 27 ++++---- 5 files changed, 85 insertions(+), 44 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/bar.ts index 5c4d1ef45a..0078485365 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/bar.ts @@ -40,6 +40,7 @@ import { isSeriesTooltipFormatterShown, isTooltipItemShown, renderGroupedTooltipItems, + ChildSpec, tooltipCss, tooltipMaxHeight, Transform, @@ -50,6 +51,8 @@ import G2TooltipCarousel from '@/views/chart/components/js/G2TooltipCarousel' const { t } = useI18n() const DEFAULT_DATA: any[] = [] +const FULL_COLUMN_WIDTH_PADDING = 0.01 +const PERCENTAGE_FULL_COLUMN_WIDTH_PADDING = 0.002 /** * 柱状图 @@ -268,7 +271,7 @@ export class Bar extends G2ChartView { const titleHtml = TOOLTIP_TITLE_TPL.replace('{title}', title) let tooltipItems = originalItems if (tooltipAttr.seriesTooltipFormatter?.length) { - // 只隐藏明确配置为不展示的字段,避免过期 formatter 漏掉新指标。 + // 只隐藏明确配置为不展示的字段,避免过期 formatter 漏掉新指标 tooltipItems = originalItems.filter(item => isTooltipItemShown(formatterMap, item, 'yAxis') ) @@ -347,7 +350,7 @@ export class Bar extends G2ChartView { colors.push(color ? color : hexColorToRGBA(ele, basicStyle.alpha)) }) } - const scale = { + const scale: Record = { color: { range: colors }, @@ -387,19 +390,17 @@ export class Bar extends G2ChartView { radius: 0 } } - let columnWidthRatio - const _v = basicStyle.columnWidthRatio ?? DEFAULT_BASIC_STYLE.columnWidthRatio - if (_v >= 1 && _v <= 100) { - columnWidthRatio = _v / 100.0 - } else if (_v < 1) { - columnWidthRatio = 1 / 100.0 - } else if (_v > 100) { - columnWidthRatio = 1 - } + const columnWidthRatio = this.getColumnWidthRatio(basicStyle) + const columnPadding = this.getColumnPadding(columnWidthRatio) + let transform = children[0].transform if (columnWidthRatio) { + // 100% 时保留极小 band 间距,避免 transpose 条形图贴边 + scale.x.padding = columnPadding + scale.x.paddingInner = columnPadding + transform = this.configDodgePadding(transform, columnPadding) style = { ...style, - columnWidthRatio + columnWidthRatio: this.getStyleColumnWidthRatio(columnPadding) } } return { @@ -408,6 +409,7 @@ export class Bar extends G2ChartView { { ...children[0], scale, + transform, style }, ...children.slice(1) @@ -415,6 +417,49 @@ export class Bar extends G2ChartView { } } + protected getColumnWidthRatio(basicStyle: DeepPartial): number { + // 兼容历史异常配置,保持样式面板 1-100% 的有效范围 + const value = basicStyle.columnWidthRatio ?? DEFAULT_BASIC_STYLE.columnWidthRatio + if (value >= 1 && value <= 100) { + return value / 100.0 + } + if (value < 1) { + return 1 / 100.0 + } + return 1 + } + + protected getColumnPadding(columnWidthRatio: number): number { + return Math.max(1 - columnWidthRatio, this.getFullColumnWidthPadding()) + } + + protected getFullColumnWidthPadding(): number { + if (this.name.startsWith('percentage-bar-stack')) { + return PERCENTAGE_FULL_COLUMN_WIDTH_PADDING + } + return FULL_COLUMN_WIDTH_PADDING + } + + protected getStyleColumnWidthRatio(columnPadding: number): number { + return 1 - columnPadding + } + + protected configDodgePadding( + transforms: ChildSpec['transform'], + padding: number + ): ChildSpec['transform'] { + if (!transforms?.length) { + return transforms + } + if (padding > this.getFullColumnWidthPadding()) { + return transforms + } + // dodgeX 会生成 series band,单独控制多指标柱之间的组内间距 + return transforms.map(transform => + transform.type === 'dodgeX' ? { ...transform, padding } : transform + ) + } + protected configLegend(chart: Chart, options: ViewSpec): ViewSpec { const { children } = options return { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/horizontal-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/horizontal-bar.ts index 9697fbc6de..cae46f9cfd 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/horizontal-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/horizontal-bar.ts @@ -22,7 +22,6 @@ import { setGradientColor } from '@/views/chart/components/js/panel/common/common_antv' import { valueFormatter } from '@/views/chart/components/js/formatter' -import { DEFAULT_BASIC_STYLE } from '@/views/chart/components/editor/util/chart' import { defaultsDeep } from 'lodash-es' const { t } = useI18n() @@ -85,19 +84,12 @@ export class HorizontalBar extends Bar { ...(basicStyle.radiusColumnBar !== 'topRoundAngle' && basicStyle.radiusColumnBar !== 'roundAngle' && { radius: 0 }) } as any - let columnWidthRatio: number | undefined - const _v = basicStyle.columnWidthRatio ?? DEFAULT_BASIC_STYLE.columnWidthRatio - if (_v >= 1 && _v <= 100) { - columnWidthRatio = _v / 100.0 - } else if (_v < 1) { - columnWidthRatio = 1 / 100.0 - } else if (_v > 100) { - columnWidthRatio = 1 - } + const columnWidthRatio = this.getColumnWidthRatio(basicStyle) + const columnPadding = this.getColumnPadding(columnWidthRatio) if (columnWidthRatio) { style = { ...style, - columnWidthRatio: columnWidthRatio + columnWidthRatio: this.getStyleColumnWidthRatio(columnPadding) } } if ( @@ -110,6 +102,13 @@ export class HorizontalBar extends Bar { paddingInner: 0.01 } } + // 横向条形图同样通过 x band 控制分类宽度,需要同步外层和 dodgeX 组内间距 + children[0].scale.x = { + ...(children[0].scale.x || {}), + padding: columnPadding, + paddingInner: columnPadding + } + children[0].transform = this.configDodgePadding(children[0].transform, columnPadding) children[0].scale.color.range = colors children[0].scale.y.nice = true children[0].style = { ...children[0].style, ...style } diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/percentage-stack-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/percentage-stack-bar.ts index ecc51daa18..d400eea31f 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/percentage-stack-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/percentage-stack-bar.ts @@ -200,10 +200,8 @@ export class PercentageStackBar extends GroupStackBar { constructor(name = 'percentage-bar-stack') { super(name) - this.intervalOptions.encode = { - ...this.intervalOptions.encode, - series: d => d.group - } + // 百分比堆叠没有分组槽位,移除 series band,避免默认 series padding 放大柱间距 + delete this.intervalOptions.encode.series // 百分比堆叠与普通堆叠保持同向层级,避免 tooltip 顺序和视觉层级相反 this.intervalOptions.transform = [{ type: 'stackY', reverse: true }, { type: 'normalizeY' }] this.axis = [...BAR_AXIS_TYPE, 'extStack'] diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/percentage-stack-horizontal-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/percentage-stack-horizontal-bar.ts index 10252db05f..d33ab10163 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/percentage-stack-horizontal-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/percentage-stack-horizontal-bar.ts @@ -202,10 +202,8 @@ export class PercentageStackBar extends HorizontalStackBar { constructor(name = 'percentage-bar-stack-horizontal') { super(name) - this.intervalOptions.encode = { - ...this.intervalOptions.encode, - series: d => d.group - } + // 百分比堆叠没有分组槽位,移除 series band,避免默认 series padding 放大条间距 + delete this.intervalOptions.encode.series this.intervalOptions.transform = [{ type: 'stackY' }, { type: 'normalizeY' }] this.axis = [...BAR_AXIS_TYPE, 'extStack'] } diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/progress-bar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/progress-bar.ts index 367435148e..7855011dcb 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/progress-bar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/bar/progress-bar.ts @@ -21,7 +21,6 @@ import { TOOLTIP_ITEM_TPL, TOOLTIP_TITLE_TPL } from '@/views/chart/components/js/panel/common/common_antv' -import { DEFAULT_BASIC_STYLE } from '@/views/chart/components/editor/util/chart' import { valueFormatter } from '@/views/chart/components/js/formatter' import { HorizontalStackBar } from '@/views/chart/components/js/panel/charts/g2/bar/stack-horizontal-bar' @@ -218,18 +217,20 @@ export class ProgressBar extends HorizontalStackBar { const { children } = superOptions children[0].encode.color = color1[0] children[1].encode.color = color1[1] - let barWidthRatio - const _v = basicStyle.columnWidthRatio ?? DEFAULT_BASIC_STYLE.columnWidthRatio - if (_v >= 1 && _v <= 100) { - barWidthRatio = _v / 100.0 - } else if (_v < 1) { - barWidthRatio = 1 / 100.0 - } else if (_v > 100) { - barWidthRatio = 1 - } - if (barWidthRatio) { - children[0].style = { ...children[0].style, columnWidthRatio: barWidthRatio } - children[1].style = { ...children[1].style, columnWidthRatio: barWidthRatio } + const columnWidthRatio = this.getColumnWidthRatio(basicStyle) + const columnPadding = this.getColumnPadding(columnWidthRatio) + const styleColumnWidthRatio = this.getStyleColumnWidthRatio(columnPadding) + if (styleColumnWidthRatio) { + children[0].style = { ...children[0].style, columnWidthRatio: styleColumnWidthRatio } + children[1].scale = { + ...children[1].scale, + x: { + ...(children[1].scale?.x || {}), + padding: columnPadding, + paddingInner: columnPadding + } + } + children[1].style = { ...children[1].style, columnWidthRatio: styleColumnWidthRatio } } return superOptions } From 5c046f32582612bc20be50041ecec7fc29c8314e Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Wed, 3 Jun 2026 10:03:30 +0800 Subject: [PATCH 3/4] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=A5=BC=E5=9B=BE=E3=80=81=E7=8E=AB=E7=91=B0=E5=9B=BE?= =?UTF-8?q?=E5=86=8D=E5=8F=AA=E6=9C=89=E4=B8=80=E4=B8=AA=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=97=B6=E6=98=BE=E7=A4=BA=E5=9B=BE=E5=BD=A2=E4=B8=8D=E5=AE=8C?= =?UTF-8?q?=E6=95=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/panel/charts/g2/relation/pie/common.ts | 17 +++++++++++++++++ .../js/panel/charts/g2/relation/pie/pie.ts | 6 ++++-- .../js/panel/charts/g2/relation/pie/rose.ts | 6 ++++-- 3 files changed, 25 insertions(+), 4 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/common.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/common.ts index ce8120c407..78db1b304b 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/common.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/common.ts @@ -1,4 +1,5 @@ import { useI18n } from '@/hooks/web/useI18n' +import type { G2Spec } from '@antv/g2' const { t } = useI18n() @@ -61,3 +62,19 @@ export const PIE_AXIS_CONFIG: AxisConfig = { limit: 1 } } + +export const configSingleSectorScale = (options: G2Spec, data: any[]): G2Spec => { + if (data.length !== 1) { + return options + } + options.scale = { + ...options.scale, + x: { + ...options.scale?.x, + padding: 0, + paddingInner: 0, + paddingOuter: 0 + } + } + return options +} diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/pie.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/pie.ts index 08da9db628..9015d9bf3d 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/pie.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/pie.ts @@ -11,6 +11,7 @@ import { PIE_EDITOR_PROPERTY, PIE_EDITOR_PROPERTY_INNER } from '@/views/chart/components/js/panel/charts/g2plot/pie/common' +import { configSingleSectorScale } from './common' import { getTooltipSeriesTotalMap, handleChartDashboardHidden, @@ -136,8 +137,9 @@ export class Pie extends G2ChartView { } data.push(initOtherItem) } - options.coordinate.outerRadius = basicStyle.radius / 100 - return options + const singleSectorOptions = configSingleSectorScale(options, data) + singleSectorOptions.coordinate.outerRadius = basicStyle.radius / 100 + return singleSectorOptions } protected configColor(chart: Chart, options: G2Spec): G2Spec { diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/rose.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/rose.ts index bea860abfb..ea60f7b83c 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/rose.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/relation/pie/rose.ts @@ -11,6 +11,7 @@ import { PIE_EDITOR_PROPERTY, PIE_EDITOR_PROPERTY_INNER } from '@/views/chart/components/js/panel/charts/g2plot/pie/common' +import { configSingleSectorScale } from './common' import { getTooltipSeriesTotalMap, handleChartDashboardHidden, @@ -141,8 +142,9 @@ export class Rose extends G2ChartView { } data.push(initOtherItem) } - options.coordinate.outerRadius = basicStyle.radius / 100 - return options + const singleSectorOptions = configSingleSectorScale(options, data) + singleSectorOptions.coordinate.outerRadius = basicStyle.radius / 100 + return singleSectorOptions } protected configColor(chart: Chart, options: G2Spec): G2Spec { From cc8dc794eb634b8e5efbb861e2074372da610b18 Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Wed, 3 Jun 2026 10:15:51 +0800 Subject: [PATCH 4/4] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=9B=B7=E8=BE=BE=E5=9B=BE=E6=8F=90=E7=A4=BA=E5=85=B3?= =?UTF-8?q?=E9=97=AD=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../components/js/panel/charts/g2/distribution/radar.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/distribution/radar.ts b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/distribution/radar.ts index 74f0239723..46d8bfd6d4 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/charts/g2/distribution/radar.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/charts/g2/distribution/radar.ts @@ -341,11 +341,10 @@ export class Radar extends G2ChartView { const customAttr: DeepPartial = parseJson(chart.customAttr) const tooltipAttr = customAttr.tooltip const yAxis = chart.yAxis + const lineMark = options.children[0] if (!tooltipAttr.show) { - return { - ...options, - tooltip: false - } + defaultsDeep(lineMark, { tooltip: false }) + return options } const formatterMap = tooltipAttr.seriesTooltipFormatter ?.filter(i => i.show) @@ -362,7 +361,6 @@ export class Radar extends G2ChartView { g2TooltipWrapper.style.zIndex = '9999' document.body.appendChild(g2TooltipWrapper) } - const lineMark = options.children[0] const tooltipOptions: G2Spec = { tooltip: d => d, interaction: {