import React, { useEffect, useState } from 'react'
|
|
import ReactECharts from 'echarts-for-react'
|
|
|
|
import { ChartsHeader } from '../../components'
|
|
import { useStateContext } from '../../contexts/ContextProvider'
|
|
import { getDayScreenUseTime } from '../../service/getDayScreenUseTime/index'
|
|
|
|
const Line2 = () => {
|
|
const { currentColor, currentMode } = useStateContext()
|
|
let [option, setOption] = useState({})
|
|
|
|
/* 生成本周日期, 格式为 MM-DD */
|
|
function convertDate(date) {
|
|
// 格式化日期
|
|
var yyyy = date.getFullYear().toString()
|
|
var mm = (date.getMonth() + 1).toString()
|
|
var dd = (date.getDate() + 1).toString()
|
|
|
|
var mmChars = mm.split('')
|
|
var ddChars = dd.split('')
|
|
|
|
return (mmChars[1] ? mm : '0' + mmChars[0]) + '-' + (ddChars[1] ? dd : '0' + ddChars[0])
|
|
}
|
|
|
|
let currentWeekDates = new Array(7)
|
|
for (let i = 0; i < 7; i++) {
|
|
const curr = new Date()
|
|
currentWeekDates[i] = convertDate(new Date(curr.setDate(curr.getDate() - curr.getDay() + i)))
|
|
}
|
|
|
|
let currentWeekFirstScreenTime = new Array(7)
|
|
let bgColor = '#fff'
|
|
let color = ['#0090FF', '#36CE9E', '#FFC005', '#FF515A', '#8B5CFF', '#00CA69']
|
|
let echartData = [
|
|
{
|
|
name: '周一',
|
|
value1: 100
|
|
},
|
|
{
|
|
name: '周二',
|
|
value1: 138
|
|
},
|
|
{
|
|
name: '周三',
|
|
value1: 350
|
|
},
|
|
{
|
|
name: '周四',
|
|
value1: 173
|
|
},
|
|
{
|
|
name: '周五',
|
|
value1: 180
|
|
},
|
|
{
|
|
name: '周六',
|
|
value1: 150
|
|
},
|
|
{
|
|
name: '周日',
|
|
value1: 180
|
|
}
|
|
]
|
|
let xAxisData = echartData.map(v => v.name)
|
|
for (let i = 0; i < 7; i++) {
|
|
xAxisData[i] = xAxisData[i] + ' ' + currentWeekDates[i]
|
|
}
|
|
|
|
const hexToRgba = (hex, opacity) => {
|
|
let rgbaColor = ''
|
|
let reg = /^#[\da-f]{6}$/i
|
|
if (reg.test(hex)) {
|
|
rgbaColor = `rgba(${parseInt('0x' + hex.slice(1, 3))},${parseInt('0x' + hex.slice(3, 5))},${parseInt('0x' + hex.slice(5, 7))},${opacity})`
|
|
}
|
|
return rgbaColor
|
|
}
|
|
|
|
useEffect(async () => {
|
|
for (let i = 0; i < 7; i++) {
|
|
let receivedJson = await getDayScreenUseTime('2022-' + currentWeekDates[i])
|
|
let firstScreenTimeH = parseInt(receivedJson.data.lastScreenTime.substring(0, 2))
|
|
let firstScreenTimeM = parseInt(receivedJson.data.lastScreenTime.substring(3, 5))
|
|
let firstScreenTimeS = parseInt(receivedJson.data.lastScreenTime.substring(6, 8))
|
|
if (firstScreenTimeH !== NaN && firstScreenTimeM !== NaN && firstScreenTimeS !== NaN) {
|
|
currentWeekFirstScreenTime[i] = 3600 * firstScreenTimeH + 60 * firstScreenTimeM + firstScreenTimeS
|
|
} else {
|
|
currentWeekFirstScreenTime[i] = NaN
|
|
}
|
|
}
|
|
|
|
setOption({
|
|
backgroundColor: bgColor,
|
|
color: color,
|
|
legend: {
|
|
right: 10,
|
|
top: 10
|
|
},
|
|
tooltip: {
|
|
trigger: 'axis',
|
|
formatter: function (params) {
|
|
let html = ''
|
|
params.forEach(v => {
|
|
if (!isNaN(v.value)) {
|
|
html += `<div style="color: #666;font-size: 14px;line-height: 24px">
|
|
<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${color[v.componentIndex]};"></span>
|
|
${v.seriesName}
|
|
<span style="color:${color[v.componentIndex]};font-weight:700;font-size: 18px">${Math.floor(v.value / 3600) + '时' + Math.floor((v.value % 3600) / 60) + '分钟' + Math.floor(v.value % 60) + '秒'}</span>
|
|
`
|
|
} else {
|
|
html = `<div style="color: #666;font-size: 14px;line-height: 24px">
|
|
<span style="display:inline-block;margin-right:5px;border-radius:10px;width:10px;height:10px;background-color:${color[v.componentIndex]};"></span>
|
|
${v.seriesName}
|
|
<span style="color:${color[v.componentIndex]};font-weight:700;font-size: 18px">该天还尚未开始</span>
|
|
`
|
|
}
|
|
})
|
|
return html
|
|
},
|
|
extraCssText: 'background: #fff; border-radius: 0;box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);color: #333;',
|
|
axisPointer: {
|
|
type: 'shadow',
|
|
shadowStyle: {
|
|
color: '#ffffff',
|
|
shadowColor: 'rgba(225,225,225,1)',
|
|
shadowBlur: 5
|
|
}
|
|
}
|
|
},
|
|
grid: {
|
|
top: 100,
|
|
containLabel: true
|
|
},
|
|
xAxis: [
|
|
{
|
|
type: 'category',
|
|
boundaryGap: false,
|
|
axisLabel: {
|
|
formatter: '{value}',
|
|
textStyle: {
|
|
color: '#333'
|
|
}
|
|
},
|
|
axisLine: {
|
|
lineStyle: {
|
|
color: '#D9D9D9'
|
|
}
|
|
},
|
|
data: xAxisData.map(function (str) {
|
|
return str.replace(' ', '\n')
|
|
})
|
|
}
|
|
],
|
|
yAxis: [
|
|
{
|
|
type: 'value',
|
|
// name: '单位:万千瓦时',
|
|
axisLabel: {
|
|
textStyle: {
|
|
color: '#666'
|
|
},
|
|
formatter: (value, index, format) => {
|
|
return Math.floor(value / 3600) + '时'
|
|
}
|
|
},
|
|
max: 86400,
|
|
nameTextStyle: {
|
|
color: '#666',
|
|
fontSize: 12,
|
|
lineHeight: 40
|
|
},
|
|
splitLine: {
|
|
lineStyle: {
|
|
type: 'dashed',
|
|
color: '#E9E9E9'
|
|
}
|
|
},
|
|
axisLine: {
|
|
show: false
|
|
},
|
|
axisTick: {
|
|
show: false
|
|
}
|
|
}
|
|
],
|
|
series: [
|
|
{
|
|
name: '最后一次屏幕使用时刻',
|
|
type: 'line',
|
|
smooth: true,
|
|
// showSymbol: false,/
|
|
symbolSize: 8,
|
|
zlevel: 3,
|
|
lineStyle: {
|
|
normal: {
|
|
color: color[0],
|
|
shadowBlur: 3,
|
|
shadowColor: hexToRgba(color[0], 0.5),
|
|
shadowOffsetY: 8
|
|
}
|
|
},
|
|
areaStyle: {
|
|
// normal: {
|
|
// color: new echarts.graphic.LinearGradient(
|
|
// 0,
|
|
// 0,
|
|
// 0,
|
|
// 1,
|
|
// [
|
|
// {
|
|
// offset: 0,
|
|
// color: hexToRgba(color[0], 0.3)
|
|
// },
|
|
// {
|
|
// offset: 1,
|
|
// color: hexToRgba(color[0], 0.1)
|
|
// }
|
|
// ],
|
|
// false
|
|
// ),
|
|
shadowColor: hexToRgba(color[0], 0.1),
|
|
shadowBlur: 10
|
|
},
|
|
data: currentWeekFirstScreenTime
|
|
}
|
|
]
|
|
})
|
|
}, [])
|
|
|
|
return (
|
|
<div className="m-4 md:m-10 mt-24 p-10 bg-white dark:bg-secondary-dark-bg rounded-3xl">
|
|
<ChartsHeader category="Line" title="最后屏幕使用时刻" />
|
|
<div className="w-full">
|
|
<ReactECharts option={option} style={{ height: '600px' }}></ReactECharts>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default Line2
|