Merge pull request #10091 from dataease/pr@dev-v2@chart-bidirectional-bar-style-fix

fix(图表-对称条形图): 修复标签显示位置错误及无法调整样式的问题
This commit is contained in:
jianneng-fit2cloud 2024-06-04 19:09:47 +08:00 committed by GitHub
commit 602905cfe4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 70 additions and 4 deletions

View File

@ -220,7 +220,37 @@ const isBarRangeTime = computed<boolean>(() => {
}
return false
})
watch(
() => props.chart.customAttr.basicStyle.layout,
() => {
const layout = props.chart.customAttr.basicStyle.layout
if (layout === 'horizontal') {
if (state?.labelForm?.position === 'top') {
state.labelForm.position = 'right'
}
if (state?.labelForm?.position === 'bottom') {
state.labelForm.position = 'left'
}
}
if (layout === 'vertical') {
if (state?.labelForm?.position === 'left') {
state.labelForm.position = 'bottom'
}
if (state?.labelForm?.position === 'right') {
state.labelForm.position = 'top'
}
}
changeLabelAttr('position')
},
{ deep: true }
)
const isBarBidirectionalAndVertical = computed(() => {
if (props.chart.type !== 'bidirectional-bar') {
return true
}
return props.chart.customAttr.basicStyle.layout === 'vertical'
})
onMounted(() => {
init()
})
@ -298,7 +328,7 @@ onMounted(() => {
</el-select>
</el-form-item>
<el-form-item
v-if="showProperty('hPosition')"
v-if="showProperty('hPosition') && !isBarBidirectionalAndVertical"
:label="t('chart.label_position')"
class="form-item"
:class="'form-item-' + themes"
@ -319,7 +349,7 @@ onMounted(() => {
</el-select>
</el-form-item>
<el-form-item
v-if="showProperty('vPosition')"
v-if="showProperty('vPosition') && isBarBidirectionalAndVertical"
:label="t('chart.label_position')"
class="form-item"
:class="'form-item-' + themes"

View File

@ -87,7 +87,7 @@ export class BidirectionalHorizontalBar extends G2PlotChartView<
],
'legend-selector': ['icon', 'orient', 'fontSize', 'color', 'hPosition', 'vPosition'],
'function-cfg': ['emptyDataStrategy'],
'label-selector': ['hPosition', 'seriesLabelFormatter'],
'label-selector': ['hPosition', 'vPosition', 'seriesLabelFormatter'],
'tooltip-selector': ['fontSize', 'color', 'backgroundColor', 'seriesTooltipFormatter', 'show']
}
@ -386,6 +386,7 @@ export class BidirectionalHorizontalBar extends G2PlotChartView<
...chart.customAttr.label,
position: 'right'
}
chart.customAttr.basicStyle.layout = 'horizontal'
return chart
}
@ -399,6 +400,7 @@ export class BidirectionalHorizontalBar extends G2PlotChartView<
return pre
}, {})
let customAttr: DeepPartial<ChartAttr>
const layoutHorizontal = options.layout === 'horizontal'
if (chart.customAttr) {
customAttr = parseJson(chart.customAttr)
// label
@ -434,7 +436,33 @@ export class BidirectionalHorizontalBar extends G2PlotChartView<
} else {
res = valueFormatter(value, l.labelFormatter)
}
return res
const group = new G2PlotChartView.engine.Group({})
const isValue = param['series-field-key'] === 'value'
const textAlign = isValue && layoutHorizontal ? 'end' : 'start'
const isMiddle = label.position === 'middle'
group.addShape({
type: 'text',
attrs: {
x:
isValue && layoutHorizontal && !isMiddle
? -6
: !isValue && layoutHorizontal && !isMiddle
? 6
: 0,
y:
isValue && !layoutHorizontal && !isMiddle
? -8
: !isValue && !layoutHorizontal && !isMiddle
? 8
: 0,
text: res,
textAlign: label.position === 'middle' ? 'start' : textAlign,
textBaseline: 'top',
fontSize: labelCfg.fontSize,
fill: labelCfg.color
}
})
return group
}
}
} else {
@ -442,6 +470,14 @@ export class BidirectionalHorizontalBar extends G2PlotChartView<
}
}
}
if (!layoutHorizontal) {
if (label.position === 'left') {
label.position = 'bottom'
}
if (label.position === 'right') {
label.position = 'top'
}
}
return { ...options, label }
}