diff --git a/common/changes/@visactor/vchart/feat-calculate-top-default_2025-03-28-03-03.json b/common/changes/@visactor/vchart/feat-calculate-top-default_2025-03-28-03-03.json new file mode 100644 index 0000000000..a460e5bcb3 --- /dev/null +++ b/common/changes/@visactor/vchart/feat-calculate-top-default_2025-03-28-03-03.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@visactor/vchart", + "comment": "feat: add \\`alwayCalculateTotal\\` for total label", + "type": "none" + } + ], + "packageName": "@visactor/vchart" +} \ No newline at end of file diff --git a/packages/vchart/src/chart/stack.ts b/packages/vchart/src/chart/stack.ts index 471db1a144..45a7a0b36f 100644 --- a/packages/vchart/src/chart/stack.ts +++ b/packages/vchart/src/chart/stack.ts @@ -56,6 +56,10 @@ export class Stack { } // total label need percent const hasTotalLabel = series.some(s => { + // 如果设置了alwayCalculateTotal,那么一定需要计算total + if (s.getSpec()?.totalLabel?.alwayCalculateTotal) { + return true; + } return s.getSpec()?.totalLabel?.visible; }); const hasPercent = hasTotalLabel || series.some(s => s.getPercent()); diff --git a/packages/vchart/src/component/label/interface.ts b/packages/vchart/src/component/label/interface.ts index f43f7636c5..ac64f695bb 100644 --- a/packages/vchart/src/component/label/interface.ts +++ b/packages/vchart/src/component/label/interface.ts @@ -152,6 +152,11 @@ export type ITotalLabelSpec = Pick< * @default 'top' */ position?: 'top' | 'bottom'; + /** + * 不管总计标签是否展示,内部都默认计算总计值 + * @default false + */ + alwayCalculateTotal?: boolean; }; export interface ITotalLabelTheme diff --git a/packages/vchart/src/event/event.ts b/packages/vchart/src/event/event.ts index c06a8d7362..a7a61c6606 100644 --- a/packages/vchart/src/event/event.ts +++ b/packages/vchart/src/event/event.ts @@ -111,7 +111,13 @@ export class Event implements IEvent { return this; } - prevent(eType: Evt, except?: EventCallback) { + prevent( + eType: Evt, + except?: { + handler: EventCallback; + level: EventBubbleLevel; + } + ): this { this._eventDispatcher.prevent(eType, except); return this; }