Przeglądaj źródła

填补没有数据的日子

visuddhinanda 3 lat temu
rodzic
commit
578c33aa81
1 zmienionych plików z 36 dodań i 2 usunięć
  1. 36 2
      dashboard/src/components/exp/StudyTimeDualAxes.tsx

+ 36 - 2
dashboard/src/components/exp/StudyTimeDualAxes.tsx

@@ -2,7 +2,10 @@ import { DualAxes } from "@ant-design/plots";
 import { message } from "antd";
 import { useEffect, useState } from "react";
 import { get } from "../../request";
-import { IUserOperationDailyResponse } from "../api/Exp";
+import {
+  IUserOperationDailyRequest,
+  IUserOperationDailyResponse,
+} from "../api/Exp";
 
 interface IDailyData {
   time: string;
@@ -21,8 +24,39 @@ const Widget = ({ studioName }: IWidget) => {
       `/v2/user-operation-daily?view=user-all&studio_name=${studioName}`
     ).then((json) => {
       if (json.ok) {
+        if (json.data.count === 0) {
+          return;
+        }
         let timeSum = 0;
-        const data = json.data.rows.map((item) => {
+        /**
+         * 算法
+         * 返回的数据只包涵有活动的天。需要补足缺失的日子。
+         * 找到最小日期
+         * 查询从最小时期到现在的每天的数值
+         */
+        const today = new Date();
+        let fullData: IUserOperationDailyRequest[] = [];
+        for (
+          let day = json.data.rows[0].date_int;
+          day < today.getTime();
+          day += 24 * 3600 * 1000
+        ) {
+          const currDay = json.data.rows.find(
+            (value) =>
+              new Date(value.date_int).toLocaleDateString() ===
+              new Date(day).toLocaleDateString()
+          );
+          if (currDay) {
+            fullData.push(currDay);
+          } else {
+            fullData.push({
+              date_int: day,
+              duration: 0,
+              hit: 0,
+            });
+          }
+        }
+        const data = fullData.map((item) => {
           const date = new Date(item.date_int);
           timeSum += item.duration / 1000 / 3600;
           return {