Просмотр исходного кода

没有查到relation显示term数据

visuddhinanda 2 лет назад
Родитель
Сommit
b983edcb86
1 измененных файлов с 25 добавлено и 16 удалено
  1. 25 16
      dashboard/src/components/general/NissayaCard.tsx

+ 25 - 16
dashboard/src/components/general/NissayaCard.tsx

@@ -1,5 +1,5 @@
 import { useEffect, useState } from "react";
-import { Modal, Popover, Skeleton, Typography } from "antd";
+import { message, Modal, Popover, Skeleton, Typography } from "antd";
 
 import { get } from "../../request";
 import { get as getLang } from "../../locales";
@@ -75,6 +75,8 @@ interface IWidget {
 const NissayaCardWidget = ({ text, cache = false }: IWidget) => {
   const [cardData, setCardData] = useState<INissayaRelation[]>();
   const [term, setTerm] = useState<ITerm>();
+  const [loading, setLoading] = useState(false);
+
   useEffect(() => {
     const uiLang = getLang();
     if (cache) {
@@ -83,27 +85,36 @@ const NissayaCardWidget = ({ text, cache = false }: IWidget) => {
         const valueJson: INissayaCardData = JSON.parse(value);
         setCardData(valueJson.row);
         setTerm(valueJson.ending);
+        setLoading(false);
         return;
       }
     }
 
     const url = `/v2/nissaya-card/${text}?lang=${uiLang}&content_type=json`;
     console.log("url", url);
-    get<INissayaCardResponse>(url).then((json) => {
-      if (json.ok) {
-        setCardData(json.data.row);
-        setTerm(json.data.ending);
-        if (cache) {
-          sessionStorage.setItem(
-            `nissaya-ending/${uiLang}/${text}`,
-            JSON.stringify(json.data)
-          );
+    setLoading(true);
+    get<INissayaCardResponse>(url)
+      .then((json) => {
+        if (json.ok) {
+          setCardData(json.data.row);
+          setTerm(json.data.ending);
+          if (cache) {
+            sessionStorage.setItem(
+              `nissaya-ending/${uiLang}/${text}`,
+              JSON.stringify(json.data)
+            );
+          }
+        } else {
+          message.error(json.message);
         }
-      }
-    });
+      })
+      .finally(() => setLoading(false))
+      .catch((e: INissayaCardResponse) => message.error(e.message));
   }, [cache, text]);
 
-  return cardData ? (
+  return loading ? (
+    <Skeleton title={{ width: 200 }} paragraph={{ rows: 4 }} active />
+  ) : (
     <>
       <div style={{ display: "flex", justifyContent: "space-between" }}>
         <Title level={4}>{term?.word}</Title>
@@ -111,10 +122,8 @@ const NissayaCardWidget = ({ text, cache = false }: IWidget) => {
       </div>
       <Paragraph>{term?.meaning}</Paragraph>
       <Paragraph>{term?.note}</Paragraph>
-      <NissayaCardTable data={cardData} />
+      {cardData ? <NissayaCardTable data={cardData} /> : undefined}
     </>
-  ) : (
-    <Skeleton title={{ width: 200 }} paragraph={{ rows: 4 }} active />
   );
 };