From 810c301398b5007066040841c7df2372aa5560f1 Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Tue, 19 Dec 2023 17:47:24 +0800 Subject: [PATCH] Autofill data between times --- src/pages/system/index.tsx | 48 ++++++++++++++++++++++++++++++-------- src/util/datetime.tsx | 21 ++++++++++++++++- 2 files changed, 58 insertions(+), 11 deletions(-) diff --git a/src/pages/system/index.tsx b/src/pages/system/index.tsx index 566a518..841cfba 100644 --- a/src/pages/system/index.tsx +++ b/src/pages/system/index.tsx @@ -18,7 +18,7 @@ import { TopLevelFormatterParams } from 'echarts/types/dist/shared' import '@/assets/css/pages/system/index.scss' import { useUpdatedEffect } from '@/util/hooks' import { formatByteSize } from '@/util/common' -import { utcToLocalTime } from '@/util/datetime' +import { getTimesBetweenTwoTimes, utcToLocalTime } from '@/util/datetime' import { r_sys_statistic_active, r_sys_statistic_cpu, @@ -223,7 +223,17 @@ const OnlineInfo: React.FC = () => { setCurrentOnlineCount(data.current) setTimeout(() => { - const dataList = data.history.map((value) => [value.time, value.record]) + const dataList = getTimesBetweenTwoTimes( + data.history[0].time, + data.history[data.history.length - 1].time, + 'minute' + ).map((time) => [ + time, + data.history.find( + (value) => value.time.substring(0, 16) === time.substring(0, 16) + )?.record ?? 0 + ]) + onlineInfoEChartsRef.current = echarts.init( onlineInfoDivRef.current, null, @@ -342,14 +352,32 @@ const ActiveInfo: React.FC = () => { setIsLoading(false) setTimeout(() => { - const registerList = data.registerHistory.map((value) => [ - value.time, - value.count - ]) - const loginList = data.loginHistory.map((value) => [ - value.time, - value.count - ]) + const registerList = data.registerHistory.length + ? getTimesBetweenTwoTimes( + data.registerHistory[0].time, + data.registerHistory[data.registerHistory.length - 1].time, + 'day' + ).map((time) => [ + time, + data.registerHistory.find( + (value) => + value.time.substring(0, 10) === time.substring(0, 10) + )?.count ?? 0 + ]) + : [] + const loginList = data.loginHistory.length + ? getTimesBetweenTwoTimes( + data.loginHistory[0].time, + data.loginHistory[data.loginHistory.length - 1].time, + 'day' + ).map((time) => [ + time, + data.loginHistory.find( + (value) => + value.time.substring(0, 10) === time.substring(0, 10) + )?.count ?? 0 + ]) + : [] activeInfoEChartsRef.current = echarts.init( activeInfoDivRef.current, diff --git a/src/util/datetime.tsx b/src/util/datetime.tsx index ef94672..1291c33 100644 --- a/src/util/datetime.tsx +++ b/src/util/datetime.tsx @@ -1,4 +1,4 @@ -import moment from 'moment/moment' +import moment, { unitOfTime } from 'moment/moment' import dayjs from 'dayjs' export const getNowLocalTime = (format: string = 'yyyy-MM-DD HH:mm:ssZ') => { @@ -36,3 +36,22 @@ export const utcToMillisecond = (utcTime: string) => { export const millisecondToUtc = (millisecond: number) => { return moment(millisecond).toISOString() } + +export const getTimesBetweenTwoTimes = ( + startTime: string, + endTime: string, + interval: unitOfTime.Diff +) => { + const timesList: string[] = [] + const start = moment.utc(startTime) + const end = moment.utc(endTime) + + const count = end.diff(start, interval) + timesList.push(start.toISOString()) + + for (let i = 0; i < count; i++) { + timesList.push(start.add(1, interval).toISOString()) + } + + return timesList +}