

如题:准备工作如下:
- 首选准备好echarts图表的option项
// 接口层获取name,按照一左一右的原则,塞入left right的 position数值
export const yAxisSingle = (name = 'V', position = 'left') => {
return {
type: 'value',
name,
position,
alignTicks: true,
// offset: 80,
axisLine: {
show: true,
},
}
}
// 每一项的series,需要自己判断yAxisIndex是多少,默认取0
export const seriesSingle = (name, key, data = [], yAxisIndex = 0) => {
return {
type: 'line',
name,
key,
data,
yAxisIndex,
}
}
// 初始化options总数据项
export const energyAnalysisOper = () => {
return {
xAxis: {
type: 'category',
data: []
},
yAxis: {
type: 'value'
}, // 这里应该是数组,但是为了初始化不报错就先用对象展示
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
grid: {
left: '15%',
right: '15%',
// bottom: '23%',
},
legend: {
type: 'scroll',
x: 'center',
y: 'bottom',
data: [],
},
dataZoom: [
{
type: 'inside'
},
],
series: [
// {
// type: 'line',
// name: i18n.t('plant.powerGeneration'),
// key: 'pvTotalEnergys',
// data: [],
// },
]
}
}
<IEcharts
v-adaptiveEcharts
title="energyAnalysisOper"
chartId="energyAnalysisOper"
:option="energyAnalysisOper"
/>
// 接口层处理逻辑
getChartsFun(params) {
this.operaEchartsLoading = true
getCharts(params).then(res => {
const {
success, code, message, data } = res
if (success || ['200'].includes(String(code))) {
// energyAnalysisOper, yAxisSingle, seriesSingle,
// 先取出unitMap,防止以后面计算报错
const {
unitMap } = data
delete data.unitMap
// 判断是否为空data,如果不是空data
if (!_.isEmpty(data)) {
const options = energyAnalysisOper() // 初始化echarts配置
options.yAxis = [] // yAxis按照数组来匹配
// 先处理y坐标轴的数据,按照去重规则,相同单位仅用一次
const yAxisIndexObj = {
}
const unitMapFormatter = {
}
if(!_.isEmpty(this.yAxisObj)) {
Object.keys(this.yAxisObj).forEach((key, index) => {
if (this.yAxisObj[key]) {
// 处理y轴配置项,如果是偶数,则放在左侧,否则在右侧
const yAxisRow = yAxisSingle(key, index % 2 === 0 ? 'left' : 'right')
// 如果不是前两条y轴,再来两条y轴需要增加offset
if (index > 1) {
yAxisRow.offset = 60
}
options.yAxis.push(yAxisRow)
yAxisIndexObj[key] = index
}
})
}
// 字典需准备的值:国际化对应,单位, 对应坐标轴index
Object.keys(data).forEach((key, index) => {
// 如果当前是第一项,则处理一下横坐标数组,防止逻辑重复运行
if (!index) {
options.xAxis.data = Object.keys(data[key]).map(item => item)
}
// 设置对应坐标轴的data数据 分别为:国际化语言,key值,对应data数组,对应坐标轴
options.series.push(seriesSingle(
this.checkedKeysFilterObj[key].label,
key,
Object.values(data[key]),
yAxisIndexObj[this.checkedKeysFilterObj[key].unit] || 0,
// 0,
// unitMap[key],
)),
options.legend.data.push(this.checkedKeysFilterObj[key].label)
unitMapFormatter[this.checkedKeysFilterObj[key].label] = unitMap[key]
})
options.tooltip.formatter = function (params) {
let relVal = ''
for (var i = 0, l = params.length; i < l; i++) {
relVal += i ? '<br/>' : ''
relVal += params[i].marker + " " + params[i].seriesName + ' ' + params[i].value+ '' + unitMapFormatter[params[i].seriesName]
}
return relVal
}
this.energyAnalysisOper = options
}
}
}).finally(() => {
this.operaEchartsLoading = false
})
},
// 数据mock
{
"message": "成功",
"code": 200,
"data": {
"pv1Voltage": {
"01:55": 9.39,
"18:50": 83.12,
"02:25": 71.6,
"08:05": 59.51,
"02:20": 2.67,
"07:35": 44.33,
"08:00": 36.31,
"20:10": 2.78,
"07:30": 53.41,
"01:50": 53.11,
"14:15": 35.08,
"13:45": 1.9,
"20:05": 1.84,
"19:25": 60.56,
"14:10": 22.77,
"19:20": 67.38,
"13:40": 26.15,
"18:55": 19.96,
"02:15": 92.5,
"01:45": 20.12,
"19:30": 7.03,
"07:25": 67.04,

最低0.47元/天 解锁文章
1151

被折叠的 条评论
为什么被折叠?



