配置项如下
let startTime = 10
, endTime = 22
let yAxis = [], yAxisObj = {}
let mockSeriesData = [
'2019-07-02 15:32:20',
'2019-07-02 14:32:20'
]
/**
* 提取时分格式数据
* @param {object|string} date '2019-07-02 14:32:24'
* @return {number|string}
*/
function dateToMinute(date) {
return date.replace(/^(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})/g, '$4:$5')
}
/**
* 生成开始结束时间分钟级日期数据
* @param {number} startTime
* @param {number} endTime
* @param {number} timeLevel
*/
function createDate(startTime, endTime, timeLevel) {
if (timeLevel === 'MM') {
timeLevel = 60
}
let resultObj = {}
let length = endTime - startTime
let yAxisData = Array.from({ length: length * timeLevel }).map((item, index) => index)
let chunkData = chunkGroup(yAxisData, timeLevel)
chunkData.forEach((item, index) => {
let _h = index + startTime
item.forEach((itemData, itemIndex) => {
let _m = itemIndex < 10
? '0' + itemIndex
: itemIndex >= 60
? 59
: itemIndex
resultObj[`${_h}:${_m}`] = itemData
yAxisObj[itemData] = `${_h}:${_m}`
})
})
yAxisObj[yAxisData.length] = `${endTime}:00`
resultObj[`${endTime}:00`] = yAxisData.length
console.group('yAxis')
console.log(yAxisObj)
console.log(resultObj)
console.groupEnd()
yAxis = yAxisData
return resultObj
}
let dateObj = createDate(startTime, endTime, 60)
function chunkGroup(data, size) {
return Array.from(
{ length: Math.ceil(data.length / size) },
(v, i) => data.slice(i * size, i * size + size)
)
}
let newData = mockSeriesData.map(item => {
return dateObj[dateToMinute(item)]
})
console.log('-====================-', newData)
option = {
color: ['#6784E3', '#3BB8FF', '#FFC62E', '#FF9631', '#87D14B'],
yAxis: [
// {
// type: 'category',
// position: 'left',
// data: Object.keys(yAxisObj).map(k => k),
// axisLabel: {
// formatter: (param) => {
// return yAxisObj[param]
// }
// }
// },
{
type: 'value',
position: 'left',
// show: false,
// min:0,
max: 720,
interval: 10,
axisLabel: {
formatter: (param) => {
return yAxisObj[param]
}
}
}
],
xAxis: {
type: 'category',
data: ['person1', 'person2']
},
// toolbox: {
// feature: {
// dataZoom: {
// show: true,
// yAxisIndex: 0
// }
// }
// },
// legend: {
// data: ['zone1', 'zone2']
// },
tooltip: {
trigger: 'axis',
formatter: (params) => {
let htmls = `
<div>${params[0].axisValue}</div>
`
params.reverse()
params.pop()
params.forEach((item, index) => {
// 上一柱子的值
let lastNum = params[index + 1] ? params[index + 1].value : 0
htmls += `
<p>${item.marker} ${item.seriesName}: ${yAxisObj[item.value + (lastNum || 0)] || '--'}</p>
`
})
return htmls
}
},
dataZoom: [
{
type: 'slider',
orient: 'vertical',
// yAxisIndex: 0,
realtime: true,
filterMode: 'none',
left: '4%',
},
// {
// type: 'inside',
// yAxisIndex: 1
// }
],
series: [
{
name: 'help',
stack: 'a',
type: 'bar',
data: [0, 10],
itemStyle: {
normal: {
barBorderColor: 'rgba(0,0,0,0)',
color: 'rgba(0,0,0,0)'
},
emphasis: {
barBorderColor: 'rgba(0,0,0,0)',
color: 'rgba(0,0,0,0)'
}
},
},
{
type: 'bar',
stack: 'a',
name: 'zone1',
// yAxisIndex: 1,
barMaxWidth: 30,
data: [100, 10]
},
{
type: 'bar',
stack: 'a',
name: 'zone2',
// yAxisIndex: 1,
barMaxWidth: 30,
data: [23, 20]
}
]
}