import dayjs from 'dayjs'
|
|
export default {
|
// 获取该月份天数
|
// 根据起始时间构建x轴
|
// 根据天数遍历
|
// 日期天数+1
|
// 添加到x轴数组
|
// 直到遍历的次数
|
// 根据天数遍历
|
// 对为空的的天数数据 进行补充 y轴数据为null
|
|
/**
|
* 根据传入的统计数据,起始时间,返回完整的x,y轴数据
|
* @param: 统计数据,开始时间,结束时间
|
* @returns:x,y轴数据
|
*/
|
getLineChartXYData(analysisData, beginTime, endTime) {
|
// x轴
|
let xData = []
|
// y轴的平均值
|
let yAvg = []
|
// y轴的在线率
|
let yOnline = []
|
// y轴的有效值
|
let yValid = []
|
// y轴的超标率
|
let yExceed = []
|
// 保存x,y轴值
|
let obj = {}
|
|
// 开始日期为
|
let dateBegin = dayjs(beginTime).subtract(1, 'day').format('YYYY-MM-DD')
|
let dateEnd = dayjs(endTime).format('YYYY-MM-DD')
|
|
// 当前的日期为开始日期的前一天
|
let currentDate = dateBegin
|
// 对无数据的日期进行填充
|
while (currentDate < dateEnd) {
|
// 当前日期增加1天
|
currentDate = dayjs(currentDate).add(1, 'day').format('YYYY-MM-DD')
|
|
// 根据日期查找对应数据
|
let tempData = this.findDate(analysisData, currentDate)
|
// 找到对应日期的数据,
|
if (tempData) {
|
xData.push(tempData.lst)
|
yAvg.push(tempData.dayAvg)
|
yOnline.push(this.deleteLastStr(tempData.dayOnline))
|
yValid.push(this.deleteLastStr(tempData.dayValid))
|
yExceed.push(this.deleteLastStr(tempData.dayExceeding))
|
continue
|
}
|
|
// 未发现该日期的数据
|
xData.push(currentDate)
|
yAvg.push(null)
|
yOnline.push(null)
|
yValid.push(null)
|
yExceed.push(null)
|
}
|
|
obj.xData = xData
|
obj.yAvg = yAvg
|
obj.yOnline = yOnline
|
obj.yValid = yValid
|
obj.yExceed = yExceed
|
return obj
|
},
|
|
/**
|
* 获取月天数
|
* @param:
|
* @returns:
|
*/
|
backMonthDayNums(time) {
|
return dayjs(time).daysInMonth()
|
},
|
|
/**
|
* 返回无数据的时间段
|
* @param:
|
* @returns:
|
*/
|
backNoDataInteval(dataBeginTime, dataEndTime) {
|
const result = []
|
// 数据开始时间
|
const start = dayjs(dataBeginTime)
|
// 数据结束时间
|
const end = dayjs(dataEndTime)
|
// 该月的1号
|
const monthStart = start.startOf('month')
|
// 该月最后一天
|
const monthEnd = start.endOf('month')
|
|
// 数据起始不等于月初 且 数据结束不等于月末
|
if (!start.isSame(monthStart, 'day') && !end.isSame(monthEnd, 'day')) {
|
result.push([monthStart.format('YYYY-MM-DD'), start.format('YYYY-MM-DD')])
|
result.push([end.format('YYYY-MM-DD'), monthEnd.format('YYYY-MM-DD')])
|
}
|
|
// 数据起始等于月初 且 数据结束不等于月末
|
if (start.isSame(monthStart, 'day') && !end.isSame(monthEnd, 'day')) {
|
result.push([end.format('YYYY-MM-DD'), monthEnd.format('YYYY-MM-DD')])
|
}
|
|
// 数据起始不等于月初 且 数据结束等于月末
|
if (!start.isSame(monthStart, 'day') && end.isSame(monthEnd, 'day')) {
|
result.push([monthStart.format('YYYY-MM-DD'), start.format('YYYY-MM-DD')])
|
}
|
|
// 数据起始等于月初 且 数据结束等于月末 (这种情况没有空数据的时间间隔)
|
return result
|
},
|
|
// 组成无数据区域
|
getMarkArea(timeInteval) {
|
let result = []
|
for (let i = 0; i < timeInteval.length; i++) {
|
let temp = []
|
for (let j = 0; j < timeInteval[i].length; j++) {
|
let obj = {}
|
// 给第一个对象加上name属性
|
if (j == 0) {
|
obj.name = '无数据'
|
}
|
obj.xAxis = timeInteval[i][j]
|
temp.push(obj)
|
}
|
result.push(temp)
|
}
|
return result
|
},
|
|
/**
|
* 找到对象数组中属性lstd的值
|
* @param: 对象数组 ,mnCode等于value
|
* @returns:
|
*/
|
findDate(analysisData, date) {
|
if (analysisData.length == 0) {
|
return false
|
}
|
|
// 查找日期
|
for (let i = 0; i < analysisData.length; i++) {
|
if (analysisData[i].lst == date) {
|
return analysisData[i]
|
}
|
}
|
|
return false
|
},
|
|
/**
|
* 去除字符串的百分号
|
* @param:
|
* @returns:
|
*/
|
deleteLastStr(valueStr) {
|
return valueStr.slice(0, -1)
|
}
|
}
|