tooltip: { // 提示框组件
trigger: 'item',
formatter: function (params) {
// console.log(params.data)
var returnData = ''
returnData += '睡眠:' + params.data.value[0] + 'h/8h' + '<br/>' + '训练:' + params.data.value[1] + 'h/6h' + '<br/>' + '累计步数:' + params.data.value[2] + '步/10000步' + '<br/>' + '运动量:' + params.data.value[3] + 'kcal/800kcal' + '<br/>' + '站立:' + params.data.value[4] + 'h/12h' + '<br/>'
return returnData
}
},
import myEcharts from 'echarts' const xAxisData = [] const xAxisHeartData = [] // let yAxisData = [] export let heartRateData = [] export const stepNumData = [ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ] export const trainTimeData = [ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ] export let sleepTimeData = [] export const activityConsumptionData = [ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ] export const standTimeData = [ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ] export const distanceData = [ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ] export const climbData = [ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ] // export const radarData = [ // { // value: [0, 0, 0, 0, 0], // name: '日生命体征' // } // ] for (let i = 0; i < 24; i++) { if (i < 10) { xAxisData.push('0' + i + ':00') } else { xAxisData.push(i + ':00') } } for (let i = 0; i < 24; i++) { let hour = '' let min = '' let time for (let j = 0; j < 60; j++) { hour = i < 10 ? ('0' + i) : i min = j < 10 ? ('0' + j) : j time = hour.toString() + ':' + min.toString() xAxisHeartData.push(time) } } const xHeartAxis = { data: xAxisHeartData, axisLabel: { interval: (index, value) => { switch (value) { case '00:00': return true case '06:00': return true case '12:00': return true case '18:00': return true case '23:59': return true } }, textStyle: { color: '#78849E' } }, axisLine: { show: false, lineStyle: { color: '#707070' } }, axisTick: { lineStyle: { 0 } } } const xAxis = { data: xAxisData, axisLabel: { interval: (index, value) => { switch (value) { case '00:00': return true case '06:00': return true case '12:00': return true case '18:00': return true case '23:00': return true } }, textStyle: { color: '#78849E' } }, axisLine: { show: false, lineStyle: { color: '#707070' } }, axisTick: { lineStyle: { 0 } } } export const setHeartData = (data) => { heartRateData = data } export const resetSleepDate = () => { sleepTimeData = [] } export const heartRate = (id) => { var totalFlowRate = myEcharts.init(document.getElementById(id)) var totalFlowRateOption = { animation: false, tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' }, formatter: (params) => { const tar = params[0] return tar.name + '<br/>' + tar.seriesName + ' : ' + tar.value[1] } }, grid: { height: '70%', '92%', containLabel: true, bottom: '5%', left: '1%'/* "单位px" */ }, xAxis: xHeartAxis, yAxis: { axisLabel: { textStyle: { color: '#78849E' } }, axisLine: { show: false, lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } } }, series: { name: '心率', type: 'line', /* symbolSize: 3, */ itemStyle: { color: 'rgba(254,210,208,0)' }, areaStyle: { color: new myEcharts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgb(255,0,0)' }, { offset: 1, color: 'rgb(255,89,101)' }]) }, data: heartRateData, showSymbol: false /* smooth:true//0-1之间的数字或true或false,显示为平滑的曲线 */ } } if (JSON.stringify(heartRateData) === '[]') { totalFlowRateOption.yAxis.max = 200 totalFlowRateOption.yAxis.min = 0 } totalFlowRate.setOption(totalFlowRateOption) window.addEventListener('resize', totalFlowRate.resize) } // 设置雷达图指示 export const indicator = [ { text: '睡眠', max: 8 }, { text: '训练', max: 6 }, { text: '累计步数', max: 10000 }, { text: '运动量', max: 800 }, { text: '站立', max: 12 } ] // 设置雷达图目标 export function setRadarTarget () { const target = { stepCountTarget: 10000, trainTimeTarget: 2, sleepTimeTarget: 8, activityConsumptionTarget: 800, standTimeTarget: 12, distanceRangeTarget: 3, climbRangeTarget: 50 } indicator[0].max = target.sleepTimeTarget indicator[1].max = target.trainTimeTarget indicator[2].max = target.stepCountTarget indicator[3].max = target.activityConsumptionTarget indicator[4].max = target.standTimeTarget } // 制作雷达图数据 export function setRadarData (input) { // console.log(trainTime) // const sleepRadar, trainRadar, stepRadar, calRadar, standRadar const sleepRadar = input.sleepTime > indicator[0].max ? (indicator[0].max + indicator[0].max * 0.2) : input.sleepTime const trainRadar = input.trainTime > indicator[1].max ? (indicator[1].max + indicator[1].max * 0.2) : input.trainTime const stepRadar = input.stepCount > indicator[2].max ? indicator[2].max + indicator[2].max * 0.2 : input.stepCount const calRadar = input.activityConsumption > indicator[3].max ? indicator[3].max + indicator[3].max * 0.2 : input.activityConsumption const standRadar = input.standTime > indicator[4].max ? indicator[4].max + indicator[4].max * 0.2 : input.standTime // radarData[0].value = [sleepRadar, trainRadar, stepRadar, calRadar, standRadar] const radarData = [sleepRadar, trainRadar, stepRadar, calRadar, standRadar] return radarData } // 返回雷达图数据/options export function myRadar (input) { // eslint-disable-next-line // key: ['睡眠/实际', '训练/实际', '累计步数/实际', '运动量/实际', ''] const radarData = [{ value: [0, 0, 0, 0, 0], name: '实际详情' }] console.log('myRadar input: ', input) if (input.stepCount) { console.log('setRadarData(input): ', setRadarData(input)) radarData[0].value = setRadarData(input) radarData[0].value = [parseInt(radarData[0].value[0]), parseInt(radarData[0].value[1]), parseInt(radarData[0].value[2]), parseInt(radarData[0].value[3]), parseInt(radarData[0].value[4])] // console.log(radarData[0].value) setRadarTarget() } const options = { tooltip: { trigger: 'axis' }, radar: { indicator: indicator, // 雷达图的指示器 splitNumber: 4, radius: 80, nameGap: 15, // shape: 'circle', // 雷达图绘制类型,圆形 splitArea: { // 坐标轴在 grid 区域中的分隔区域,默认不显示。 show: false }, axisLine: { // 坐标轴轴线相关设置 show: false }, splitLine: { // 坐标轴在 grid 区域中的分隔线 lineStyle: { color: '#707070' } }, name: { // 雷达图每个指示器名称的配置项str.split("?")[0] formatter: '{value}', // 使用字符串模板,模板变量为指示器名称 {value} textStyle: { color: '#78849E' }, show: true } }, series: { type: 'radar', tooltip: { // 提示框组件 trigger: 'item', formatter: function (params) { // console.log(params.data) var returnData = '' returnData += '睡眠:' + params.data.value[0] + 'h/8h' + '<br/>' + '训练:' + params.data.value[1] + 'h/6h' + '<br/>' + '累计步数:' + params.data.value[2] + '步/10000步' + '<br/>' + '运动量:' + params.data.value[3] + 'kcal/800kcal' + '<br/>' + '站立:' + params.data.value[4] + 'h/12h' + '<br/>' return returnData } }, itemStyle: { normal: { color: '#FF6B27' } }, areaStyle: { normal: { opacity: 0.63 } }, data: radarData } } return options // window.addEventListener('resize', totalRadar.resize) } /* 累计步数柱状图 */ export const stepNum = (xaxis, data) => { // var totalStep = myEcharts.init(document.getElementById(id)) console.log('@utils !stepNumData', !stepNumData) console.log('@utils stepNumData', stepNumData) if (!stepNumData) { for (let i = 0; i < 23; i++) { stepNumData.push([i, 0]) } } var stepNumOption = { backgroundColor: '#474751', tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { height: '90%', '95%', containLabel: true, bottom: 0, left: '1%'/* "单位px" */ }, xAxis: xaxis, yAxis: { axisLabel: { textStyle: { color: '#78849E' }, formatter: '{value}' }, axisLine: { show: false, lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } }, nameTextStyle: { fontSize: 2 } }, series: [{ name: '步数', type: 'bar', data: data, itemStyle: { normal: { color: '#ED7741', barBorderRadius: [2, 2, 2, 2] } } } ] } if (JSON.stringify(stepNumData) === JSON.stringify([ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ])) { stepNumOption.yAxis.max = 1000 stepNumOption.yAxis.min = 0 } console.log('@utils stepNumOption', stepNumOption) return stepNumOption // totalStep.setOption(stepNumOption) // window.addEventListener('resize', totalStep.resize) } /* 训练时间柱状图 */ export const myTrainTime = (id) => { if (document.getElementById(id) == null) { } else { var totalTrain = myEcharts.init(document.getElementById(id)) var trainTimeOption = { backgroundColor: '#474751', tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { height: '90%', '95%', containLabel: true, bottom: 0, left: '1%'/* "单位px" */ }, xAxis: xAxis, yAxis: { max: 60, min: 0, axisLabel: { textStyle: { color: '#78849E' }, formatter: '{value}分钟' }, axisLine: { show: false, lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } }, nameTextStyle: { fontSize: 5 } }, series: [{ name: '训练时间', type: 'bar', data: trainTimeData, itemStyle: { normal: { color: '#ED7741', barBorderRadius: [2, 2, 2, 2] } } }] } totalTrain.setOption(trainTimeOption) window.addEventListener('resize', totalTrain.resize) } } /* 睡觉时间柱状图 */ export const mySleepTime = (id) => { const categories = [''] function renderItem (params, api) { const categoryIndex = 0 const start = api.coord([api.value(0), categoryIndex]) const end = api.coord([api.value(1), categoryIndex]) const height = api.size([0, 1])[1] * 0.4 const rectShape = myEcharts.graphic.clipRectByRect({ x: start[0], y: start[1] - height / 2, end[0] - start[0], height: height }, { x: params.coordSys.x, y: params.coordSys.y, params.coordSys.width, height: params.coordSys.height }) return rectShape && { type: 'rect', shape: rectShape, style: api.style() } } if (document.getElementById(id) == null) { } else { const totalSleep = myEcharts.init(document.getElementById(id)) const sleepTimeOption = { tooltip: { formatter: function (params) { return params.marker + params.name + ': ' + params.value[2] + ' 分钟<br />开始时间: ' + new Date(params.value[0]).toLocaleDateString() + ' ' + new Date(params.value[0]).toTimeString().split(' ')[0] + '<br />结束时间: ' + new Date(params.value[1]).toLocaleDateString() + ' ' + new Date(params.value[1]).toTimeString().split(' ')[0] }, confine: true }, grid: { height: '100%', '90%', containLabel: true, bottom: 0, left: '4%' }, xAxis: { type: 'time', scale: true, splitLine: { show: false }, axisLine: { lineStyle: { color: '#707070' } }, axisTick: { show: false, lineStyle: { 0 } } }, yAxis: { name: '睡眠', data: categories, axisLine: { lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } }, nameGap: 5, nameRotate: 90, nameLocation: 'middle' }, series: [{ type: 'custom', renderItem: renderItem, itemStyle: { normal: { opacity: 1 } }, encode: { x: [0, 1] }, data: sleepTimeData }] } totalSleep.setOption(sleepTimeOption) window.addEventListener('resize', totalSleep.resize) } /* if (document.getElementById(id) == null) { } else { var totalSleep = myEcharts.init(document.getElementById(id)); var sleepTimeOption = { backgroundColor: '#474751', tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { height: '90%', '95%', containLabel: true, bottom: 0, left: '1%'/!*"单位px"*!/ }, xAxis: xAxis, yAxis: { max: 60, min: 0, axisLabel: { textStyle: { color: '#78849E' }, formatter: '{value}分钟' }, axisLine: { show: false, lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } } }, series: [{ name: '睡眠时间', type: 'bar', data: sleepTimeData, itemStyle: { normal: { color: '#ED7741', barBorderRadius: [2, 2, 2, 2] } } }] }; totalSleep.setOption(sleepTimeOption); window.addEventListener("resize", totalSleep.resize); } */ } /* 活动消耗柱状图 */ export const myActivityConsumption = (id) => { if (document.getElementById(id) == null) { } else { var totalActivity = myEcharts.init(document.getElementById(id)) var activityConsumptionOption = { backgroundColor: '#474751', tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { height: '90%', '95%', containLabel: true, bottom: 0, left: '1%'/* "单位px" */ }, xAxis: xAxis, yAxis: { axisLabel: { textStyle: { color: '#78849E' }, formatter: '{value}cal' }, axisLine: { show: false, lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } } }, series: [{ name: '活动消耗', type: 'bar', data: activityConsumptionData, itemStyle: { normal: { color: '#ED7741', barBorderRadius: [2, 2, 2, 2] } } }] } if (JSON.stringify(activityConsumptionData) === JSON.stringify([ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ])) { activityConsumptionOption.yAxis.max = 100 activityConsumptionOption.yAxis.min = 0 } totalActivity.setOption(activityConsumptionOption) window.addEventListener('resize', totalActivity.resize) } } /* 站立时间柱状图 */ export const myStandTime = (id) => { if (document.getElementById(id) == null) { } else { var totalStand = myEcharts.init(document.getElementById(id)) var standTimeOption = { backgroundColor: '#474751', tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { height: '90%', '95%', containLabel: true, bottom: 0, left: '1%'/* "单位px" */ }, xAxis: xAxis, yAxis: { max: 60, min: 0, axisLabel: { textStyle: { color: '#78849E' }, formatter: '{value}分钟' }, axisLine: { show: false, lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } } }, series: [{ name: '站立时间', type: 'bar', data: standTimeData, itemStyle: { normal: { color: '#ED7741', barBorderRadius: [2, 2, 2, 2] } } }] } totalStand.setOption(standTimeOption) window.addEventListener('resize', totalStand.resize) } } /* 距离柱状图 */ export const myDistance = (id) => { if (document.getElementById(id) == null) { } else { var totalDistance = myEcharts.init(document.getElementById(id)) var distanceOption = { backgroundColor: '#474751', tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { height: '90%', '95%', containLabel: true, bottom: 0, left: '1%'/* "单位px" */ }, xAxis: xAxis, yAxis: { axisLabel: { textStyle: { color: '#78849E' }, formatter: '{value}米' }, axisLine: { show: false, lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } } }, series: [{ name: '距离', type: 'bar', data: distanceData, itemStyle: { normal: { color: '#ED7741', barBorderRadius: [2, 2, 2, 2] } } }] } if (JSON.stringify(distanceData) === JSON.stringify([ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ])) { distanceOption.yAxis.max = 1000 distanceOption.yAxis.min = 0 } totalDistance.setOption(distanceOption) window.addEventListener('resize', totalDistance.resize) } } /* 爬高 */ export const myClimb = (id) => { if (document.getElementById(id) == null) { } else { var totalClimb = myEcharts.init(document.getElementById(id)) var climbOption = { backgroundColor: '#474751', tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: { height: '90%', '95%', containLabel: true, bottom: 0, left: '1%'/* "单位px" */ }, xAxis: xAxis, yAxis: { axisLabel: { textStyle: { color: '#78849E' }, formatter: '{value}米' }, axisLine: { show: false, lineStyle: { color: '#707070' } }, splitLine: { lineStyle: { color: '#707070' } } }, series: [{ name: '爬高', type: 'bar', data: climbData, itemStyle: { normal: { color: '#ED7741', barBorderRadius: [2, 2, 2, 2] } } }] } if (JSON.stringify(climbData) === JSON.stringify([ [0, 0], [1, 0], [2, 0], [3, 0], [4, 0], [5, 0], [6, 0], [7, 0], [8, 0], [9, 0], [10, 0], [11, 0], [12, 0], [13, 0], [14, 0], [15, 0], [16, 0], [17, 0], [18, 0], [19, 0], [20, 0], [21, 0], [22, 0], [23, 0] ])) { climbOption.yAxis.max = 10 climbOption.yAxis.min = 0 } totalClimb.setOption(climbOption) window.addEventListener('resize', totalClimb.resize) } } export const padDate = (value) => { return value < 10 ? '0' + value : value }