柱状图格式修改

This commit is contained in:
hongchao 2025-12-31 14:53:44 +08:00
parent 1bd066c3f8
commit 94c6812662
1 changed files with 255 additions and 78 deletions

View File

@ -88,7 +88,7 @@
<ul class="scroll-list" ref="list">
<li v-for="(item, index) in eventList" :key="item.id" :class="{ odd: index % 2 === 1 }">
<div style="display: flex; align-items: center; justify-content: space-between">
<div style="width: 65%">
<div style="width: 65%">
<span>{{ index + 1 }}. </span>
<span>{{ item.deptAbbreviation }} </span>
<span>{{ item.applyUser }} </span>
@ -331,86 +331,263 @@ export default {
chart.setOption(option)
},
initBarChart() {
const barDom = this.$refs.barRef
const barChart = echarts.init(barDom)
const companyNames = this.tableList.map((item) => item.companyName)
const equipTotals = this.tableList.map((item) => item.maNum)
const toolTotals = this.tableList.map((item) => item.toolNum)
const option = {
tooltip: { trigger: 'axis' },
legend: {
top: 0,
right: 20,
data: ['装备总数', '工具总数'],
},
grid: {
left: '3%',
right: '3%',
bottom: '3%',
containLabel: true,
},
xAxis: {
const barDom = this.$refs.barRef
const barChart = echarts.init(barDom)
const companyNames = this.tableList.map((item) => item.companyName)
const equipTotals = this.tableList.map((item) => item.maNum)
const toolTotals = this.tableList.map((item) => item.toolNum)
// y
const yAxisTicks = ['0', '200', '500', '1000', '10000', '100000', '200000+']
//
const yAxisValues = [0, 200, 500, 1000, 10000, 100000, 200000]
// y
const mapDataToYAxis = (value) => {
for (let i = 0; i < yAxisValues.length; i++) {
if (value <= yAxisValues[i]) {
return i
}
}
return yAxisValues.length - 1 //
}
//
const mappedEquipTotals = equipTotals.map(mapDataToYAxis)
const mappedToolTotals = toolTotals.map(mapDataToYAxis)
//
const showBothSeries = equipTotals.some(val => val > 0) && toolTotals.some(val => val > 0)
// y
let yAxisConfig
if (showBothSeries) {
// 使categoryy
yAxisConfig = {
type: 'category',
data: companyNames,
axisLabel: {
fontSize: 13,
interval: 0, //
lineHeight: 16,
formatter: function (name) {
const maxLen = 3 // 6
if (name.length <= maxLen) return name
const rows = Math.ceil(name.length / maxLen)
let res = ''
for (let i = 0; i < rows; i++) {
res += name.substring(i * maxLen, (i + 1) * maxLen) + '\n'
}
return res
},
},
},
yAxis: {
type: 'value',
data: yAxisTicks,
name: '数量(个)',
nameTextStyle: { fontSize: 14 },
},
series: [
{
name: '装备总数',
type: 'bar',
barWidth: 35,
barGap: '0%', //
barCategoryGap: '0%', //
itemStyle: {
color: '#5470C6',
borderRadius: [4, 4, 0, 0],
},
data: equipTotals,
},
{
name: '工具总数',
type: 'bar',
barWidth: 35,
barGap: '0%',
barCategoryGap: '0%',
itemStyle: {
color: '#91CC75',
borderRadius: [4, 4, 0, 0],
},
data: toolTotals,
},
],
axisTick: {
show: true,
alignWithLabel: true,
length: 4
},
axisLabel: {
fontSize: 12,
margin: 8 //
},
//
offset: 0,
//
boundaryGap: false,
// 线
splitLine: {
show: true,
lineStyle: {
type: 'dashed',
color: '#e0e0e0'
}
}
}
} else {
// 使valuey
yAxisConfig = {
type: 'value',
name: '数量(个)',
nameTextStyle: { fontSize: 14 }
}
}
barChart.setOption(option)
},
// series
const series = []
//
if (equipTotals.some(val => val > 0)) {
series.push({
name: '装备总数',
type: 'bar',
barWidth: 35,
barGap: '0%', //
barCategoryGap: '0%', //
itemStyle: {
color: '#5470C6',
borderRadius: [4, 4, 0, 0],
},
data: showBothSeries ? mappedEquipTotals : equipTotals,
coordinateSystem: 'cartesian2d',
xAxisIndex: 0,
yAxisIndex: 0,
})
}
//
if (toolTotals.some(val => val > 0)) {
series.push({
name: '工具总数',
type: 'bar',
barWidth: 35,
barGap: '0%',
barCategoryGap: '0%',
itemStyle: {
color: '#91CC75',
borderRadius: [4, 4, 0, 0],
},
data: showBothSeries ? mappedToolTotals : toolTotals,
coordinateSystem: 'cartesian2d',
xAxisIndex: 0,
yAxisIndex: 0,
})
}
const option = {
tooltip: {
trigger: 'axis',
formatter: function (params) {
// tooltip
let result = params[0].name + '<br/>'
params.forEach(param => {
//
const originalValue = param.seriesName === '装备总数'
? equipTotals[param.dataIndex]
: toolTotals[param.dataIndex]
result += `${param.seriesName}: ${originalValue}个<br/>`
})
return result
}
},
legend: {
top: 0,
right: 20,
data: series.map(s => s.name), //
},
grid: {
left: '3%',
right: '3%',
bottom: '3%',
top: '15%',
containLabel: true,
},
xAxis: {
type: 'category',
data: companyNames,
axisLabel: {
fontSize: 13,
interval: 0, //
lineHeight: 16,
formatter: function (name) {
const maxLen = 3 // 6
if (name.length <= maxLen) return name
const rows = Math.ceil(name.length / maxLen)
let res = ''
for (let i = 0; i < rows; i++) {
res += name.substring(i * maxLen, (i + 1) * maxLen) + '\n'
}
return res
},
},
},
yAxis: yAxisConfig, // 使y
series: series, // 使
}
barChart.setOption(option)
//
barChart.on('legendselectchanged', (params) => {
//
const selectedSeries = Object.keys(params.selected).filter(key => params.selected[key]);
//
const showBothSeries = selectedSeries.length > 1;
// y
let newYAxisConfig;
if (showBothSeries) {
// 使categoryy
newYAxisConfig = {
type: 'category',
data: yAxisTicks,
name: '数量(个)',
nameTextStyle: { fontSize: 14 },
axisTick: {
show: true,
alignWithLabel: true,
length: 4
},
axisLabel: {
fontSize: 12,
margin: 8 //
},
//
offset: 0,
//
boundaryGap: false,
// 线
splitLine: {
show: true,
lineStyle: {
type: 'dashed',
color: '#e0e0e0'
}
}
};
} else {
// 使valuey
newYAxisConfig = {
type: 'value',
name: '数量(个)',
nameTextStyle: { fontSize: 14 }
};
}
// y
barChart.setOption({
yAxis: newYAxisConfig
});
//
const newSeries = [];
//
if (params.selected['装备总数']) {
newSeries.push({
name: '装备总数',
data: showBothSeries ? mappedEquipTotals : equipTotals
});
}
//
if (params.selected['工具总数']) {
newSeries.push({
name: '工具总数',
data: showBothSeries ? mappedToolTotals : toolTotals
});
}
barChart.setOption({
series: newSeries
});
});
}
},
}
</script>
@ -523,4 +700,4 @@ export default {
.scroll-list li.odd {
background-color: #ebf8f3;
}
</style>
</style>