Skip to content

Commit dea4be6

Browse files
authored
fix(GaugeChart): update adaptive specification of cloud (#408)
1 parent 64da5a8 commit dea4be6

1 file changed

Lines changed: 29 additions & 16 deletions

File tree

src/components/GaugeChart/handleSeries.js

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ function handleTheme(iChartOption) {
136136
}
137137

138138
// 配置仪表盘中心文本
139-
export function handleDetail(seriesUnit, text, data, sizeData,isAdaptive) {
139+
export function handleDetail(seriesUnit, text, data, sizeData, isAdaptive) {
140140
seriesUnit.detail.formatter =
141141
text.formatter ||
142142
function (value) {
@@ -148,7 +148,7 @@ export function handleDetail(seriesUnit, text, data, sizeData,isAdaptive) {
148148

149149
};
150150
const space = isAdaptive ? sizeData.space : 24;
151-
const valuePadding = isAdaptive ? sizeData.valuePadding : 0;
151+
const valuePadding = isAdaptive ? (sizeData.valuePadding || 0) : 0;
152152
seriesUnit.detail.offsetCenter = text.offset || [0, 0];
153153
seriesUnit.detail.rich = {
154154
value: {
@@ -158,13 +158,13 @@ export function handleDetail(seriesUnit, text, data, sizeData,isAdaptive) {
158158
padding: [valuePadding, 0, 0, 0],
159159
},
160160
name: {
161-
fontSize: sizeData.secondaryFontSize,
161+
fontSize: sizeData.secondaryFontSize || sizeData.subFontSize,
162162
color: chartToken.descRichColor,
163163
padding: [space, 0, 0, 0],
164164
},
165165
unit: {
166166
color: chartToken.detailRichColor,
167-
fontSize: sizeData.secondaryFontSize
167+
fontSize: sizeData.secondaryFontSize || sizeData.subFontSize
168168
}
169169
};
170170
if (text?.formatterStyle) {
@@ -510,7 +510,7 @@ export function handleStatus(seriesUnit, iChartOption,radiusSize,text,sizeData,i
510510
padding: [unitPadding, 0, 30, 0],
511511
},
512512
name: {
513-
fontSize: sizeData.secondaryFontSize,
513+
fontSize: sizeData.secondaryFontSize || sizeData.subFontSize,
514514
color: chartToken.descRichColor,
515515
padding: [lineHeight + sizeData.space, 0, 0, 0],
516516

@@ -593,7 +593,7 @@ function setSeriesInit(seriesUnit, iChartOption) {
593593
* @param {数据} data
594594
* @returns
595595
*/
596-
export function handleSeries(iChartOption,optionColor,containerWidth,containerHeight) {
596+
export function handleSeries(iChartOption, optionColor, containerWidth, containerHeight) {
597597
const data = iChartOption.data.length ? iChartOption.data : [{value:0,name: ''}];
598598
const text = iChartOption.text || {};
599599
const axisLabelStyle = iChartOption.axisLabelStyle || {};
@@ -620,7 +620,7 @@ export function handleSeries(iChartOption,optionColor,containerWidth,containerHe
620620
// 不同尺寸下的fontSize
621621
const sizeData = handleSize(seriesUnit,radiusSize);
622622
// 中间文本
623-
handleDetail(seriesUnit, text, data,sizeData);
623+
handleDetail(seriesUnit, text, data, sizeData, iChartOption.adaptive);
624624
// 进度条宽度
625625
handleProgress(seriesUnit, iChartOption, data);
626626
handleAxisLine(seriesUnit, iChartOption);
@@ -634,15 +634,15 @@ export function handleSeries(iChartOption,optionColor,containerWidth,containerHe
634634
return series;
635635
}
636636

637-
export function adapt(iChartOption,baseOption,containerWidth,containerHeight) {
637+
export function adapt(iChartOption, baseOption, containerWidth, containerHeight) {
638638
const theme = iChartOption?.theme;
639639
const adaptive = iChartOption?.adaptive;
640640
const series = baseOption.series[0];
641641
const text = iChartOption.text || {};
642642
// 如果主题为华为云主题,并且开启配置项则开启自适应功能
643-
if (theme && theme.indexOf('cloud')!=-1 && adaptive){
643+
if (theme && theme.indexOf('cloud')!=-1 && adaptive) {
644644
// 初始值为宽度的80%
645-
let initRadius = containerWidth * 0.8 / 2;
645+
let initRadius = containerWidth * 0.8;
646646
let radius = Math.max(120,Math.min(200,Math.min(initRadius,containerHeight))) / 2;
647647
let mainText;
648648
const value = iChartOption?.data[0]?.value;
@@ -654,8 +654,7 @@ export function adapt(iChartOption,baseOption,containerWidth,containerHeight) {
654654
}
655655
const barWidth = baseOption.series[0]?.progress?.width;
656656
let sizeData = calculateFontSize(radius * 2,mainText,barWidth);
657-
// 主副文本的间距固定为4
658-
sizeData.space = 4;
657+
659658
// 主文本的上padding
660659
if(sizeData.mainFontSize === 48) {
661660
sizeData.valuePadding = 0;
@@ -667,10 +666,24 @@ export function adapt(iChartOption,baseOption,containerWidth,containerHeight) {
667666

668667
baseOption.series[0].axisLabel.show = false;
669668
baseOption.series[0].splitLine.show = false;
670-
// 中间文本
671-
handleDetail(series, text, iChartOption.data,sizeData,true);
672-
// 内置状态仪表盘
673-
handleStatus(series, iChartOption,radius,text,sizeData,true);
669+
// 非内置仪表盘 中间文本 主副文本的间距按需决定
670+
if(radius*2 >= 200) {
671+
sizeData.space = 24;
672+
} else if (radius*2 < 200 && radius*2 >= 160) {
673+
sizeData.space = 18;
674+
} else {
675+
sizeData.space = 10;
676+
}
677+
handleDetail(series, text, iChartOption.data, sizeData, true);
678+
// 内置状态仪表盘 space沿用默认规则
679+
if(radius*2 >= 200) {
680+
sizeData.space = 28;
681+
} else if (radius*2 < 200 && radius*2 >= 160) {
682+
sizeData.space = 4;
683+
} else {
684+
sizeData.space = 0;
685+
}
686+
handleStatus(series, iChartOption, radius, text, sizeData, true);
674687
baseOption.series[0].radius = radius;
675688
}
676689
}

0 commit comments

Comments
 (0)