Browse Source

ISentence.content 可能为空

visuddhinanda 2 years ago
parent
commit
f3ccee03fe

+ 34 - 32
dashboard/src/components/template/SentEdit/SentCell.tsx

@@ -85,37 +85,37 @@ const SentCellWidget = ({
           switch (format) {
           switch (format) {
             case "json":
             case "json":
               const wbw: IWbw[] = sentData.content
               const wbw: IWbw[] = sentData.content
-                .split("\n")
-                .map((item, id) => {
-                  const parts = item.split("=");
-                  const word = my_to_roman(parts[0]);
-                  const meaning: string =
-                    parts.length > 1 ? parts[1].trim() : "";
-                  let parent: string = "";
-                  let factors: string = "";
-                  if (!meaning.includes(" ") && endings) {
-                    const base = nissayaBase(meaning, endings);
-                    parent = base.base;
-                    const end = base.ending ? base.ending : [];
-                    factors = [base.base, ...end].join("+");
-                  } else {
-                    factors = meaning.replaceAll(" ", "+");
-                  }
-                  return {
-                    book: sentData.book,
-                    para: sentData.para,
-                    sn: [id],
-                    word: { value: word ? word : parts[0], status: 0 },
-                    real: { value: meaning, status: 0 },
-                    meaning: { value: "", status: 0 },
-                    parent: { value: parent, status: 0 },
-                    factors: {
-                      value: factors,
-                      status: 0,
-                    },
-                    confidence: 0.5,
-                  };
-                });
+                ? sentData.content.split("\n").map((item, id) => {
+                    const parts = item.split("=");
+                    const word = my_to_roman(parts[0]);
+                    const meaning: string =
+                      parts.length > 1 ? parts[1].trim() : "";
+                    let parent: string = "";
+                    let factors: string = "";
+                    if (!meaning.includes(" ") && endings) {
+                      const base = nissayaBase(meaning, endings);
+                      parent = base.base;
+                      const end = base.ending ? base.ending : [];
+                      factors = [base.base, ...end].join("+");
+                    } else {
+                      factors = meaning.replaceAll(" ", "+");
+                    }
+                    return {
+                      book: sentData.book,
+                      para: sentData.para,
+                      sn: [id],
+                      word: { value: word ? word : parts[0], status: 0 },
+                      real: { value: meaning, status: 0 },
+                      meaning: { value: "", status: 0 },
+                      parent: { value: parent, status: 0 },
+                      factors: {
+                        value: factors,
+                        status: 0,
+                      },
+                      confidence: 0.5,
+                    };
+                  })
+                : [];
               setSentData((origin) => {
               setSentData((origin) => {
                 origin.contentType = "json";
                 origin.contentType = "json";
                 origin.content = JSON.stringify(wbw);
                 origin.content = JSON.stringify(wbw);
@@ -126,7 +126,9 @@ const SentCellWidget = ({
               break;
               break;
             case "markdown":
             case "markdown":
               setSentData((origin) => {
               setSentData((origin) => {
-                const wbwData: IWbw[] = JSON.parse(origin.content);
+                const wbwData: IWbw[] = origin.content
+                  ? JSON.parse(origin.content)
+                  : [];
                 const newContent = wbwData
                 const newContent = wbwData
                   .map((item) => {
                   .map((item) => {
                     return [
                     return [

+ 4 - 1
dashboard/src/components/template/SentEdit/SentCellEditable.tsx

@@ -45,6 +45,9 @@ const SentCellEditableWidget = ({
 
 
   const savePr = () => {
   const savePr = () => {
     setSaving(true);
     setSaving(true);
+    if (!value) {
+      return;
+    }
     post<ISentencePrRequest, ISentencePrResponse>(`/v2/sentpr`, {
     post<ISentencePrRequest, ISentencePrResponse>(`/v2/sentpr`, {
       book: data.book,
       book: data.book,
       para: data.para,
       para: data.para,
@@ -121,7 +124,7 @@ const SentCellEditableWidget = ({
   return (
   return (
     <Typography.Paragraph style={{ width: "100%" }}>
     <Typography.Paragraph style={{ width: "100%" }}>
       <TermTextArea
       <TermTextArea
-        value={value}
+        value={value ? value : ""}
         menuOptions={termList}
         menuOptions={termList}
         onChange={(value: string) => {
         onChange={(value: string) => {
           setValue(value);
           setValue(value);

+ 1 - 1
dashboard/src/components/template/SentEdit/SentContent.tsx

@@ -132,7 +132,7 @@ const SentContentWidget = ({
                 wordEnd={wordEnd}
                 wordEnd={wordEnd}
                 magicDict={magicDict}
                 magicDict={magicDict}
                 channelId={item.channel.id}
                 channelId={item.channel.id}
-                data={JSON.parse(item.content)}
+                data={JSON.parse(item.content ? item.content : "")}
                 mode={mode}
                 mode={mode}
                 onChange={(data: IWbw[]) => {
                 onChange={(data: IWbw[]) => {
                   if (typeof onWbwChange !== "undefined") {
                   if (typeof onWbwChange !== "undefined") {

+ 7 - 3
dashboard/src/components/template/SentEdit/SentEditMenu.tsx

@@ -137,9 +137,13 @@ const SentEditMenuWidget = ({
           icon={<CopyOutlined />}
           icon={<CopyOutlined />}
           size="small"
           size="small"
           onClick={() => {
           onClick={() => {
-            navigator.clipboard.writeText(data.content).then(() => {
-              message.success("已经拷贝到剪贴板");
-            });
+            if (data.content) {
+              navigator.clipboard.writeText(data.content).then(() => {
+                message.success("已经拷贝到剪贴板");
+              });
+            } else {
+              message.success("内容为空");
+            }
           }}
           }}
         />
         />
         <Dropdown menu={{ items, onClick }} placement="bottomRight">
         <Dropdown menu={{ items, onClick }} placement="bottomRight">

+ 3 - 2
dashboard/src/components/template/SentEdit/SentMenu.tsx

@@ -4,8 +4,9 @@ import { MoreOutlined, CheckOutlined } from "@ant-design/icons";
 import type { MenuProps } from "antd";
 import type { MenuProps } from "antd";
 import RelatedPara from "../../corpus/RelatedPara";
 import RelatedPara from "../../corpus/RelatedPara";
 import { ArticleMode } from "../../article/Article";
 import { ArticleMode } from "../../article/Article";
+import { IResNumber } from "../SentEdit";
 
 
-interface ISentMenu {
+interface IWidget {
   book?: number;
   book?: number;
   para?: number;
   para?: number;
   loading?: boolean;
   loading?: boolean;
@@ -20,7 +21,7 @@ const SentMenuWidget = ({
   loading = false,
   loading = false,
   onMagicDict,
   onMagicDict,
   onMenuClick,
   onMenuClick,
-}: ISentMenu) => {
+}: IWidget) => {
   const intl = useIntl();
   const intl = useIntl();
   const items: MenuProps["items"] = [
   const items: MenuProps["items"] = [
     {
     {

+ 19 - 3
dashboard/src/components/template/SentEdit/SentTab.tsx

@@ -15,6 +15,7 @@ import { IWbw } from "../Wbw/WbwWord";
 import RelaGraphic from "../Wbw/RelaGraphic";
 import RelaGraphic from "../Wbw/RelaGraphic";
 import SentMenu from "./SentMenu";
 import SentMenu from "./SentMenu";
 import { ArticleMode } from "../../article/Article";
 import { ArticleMode } from "../../article/Article";
+import { IResNumber } from "../SentEdit";
 
 
 const { Text } = Typography;
 const { Text } = Typography;
 
 
@@ -36,6 +37,7 @@ interface IWidget {
   magicDictLoading?: boolean;
   magicDictLoading?: boolean;
   compact?: boolean;
   compact?: boolean;
   mode?: ArticleMode;
   mode?: ArticleMode;
+  loadedRes?: IResNumber;
   onMagicDict?: Function;
   onMagicDict?: Function;
   onCompact?: Function;
   onCompact?: Function;
   onModeChange?: Function;
   onModeChange?: Function;
@@ -57,6 +59,7 @@ const SentTabWidget = ({
   magicDictLoading = false,
   magicDictLoading = false,
   compact = false,
   compact = false,
   mode,
   mode,
+  loadedRes,
   onMagicDict,
   onMagicDict,
   onCompact,
   onCompact,
   onModeChange,
   onModeChange,
@@ -171,7 +174,12 @@ const SentTabWidget = ({
               icon={<TranslationOutlined />}
               icon={<TranslationOutlined />}
               type="translation"
               type="translation"
               sentId={id}
               sentId={id}
-              count={tranNum}
+              count={
+                tranNum
+                  ? tranNum -
+                    (loadedRes?.translation ? loadedRes.translation : 0)
+                  : undefined
+              }
               title={intl.formatMessage({
               title={intl.formatMessage({
                 id: "channel.type.translation.label",
                 id: "channel.type.translation.label",
               })}
               })}
@@ -196,7 +204,11 @@ const SentTabWidget = ({
               icon={<CloseOutlined />}
               icon={<CloseOutlined />}
               type="nissaya"
               type="nissaya"
               sentId={id}
               sentId={id}
-              count={nissayaNum}
+              count={
+                nissayaNum
+                  ? nissayaNum - (loadedRes?.nissaya ? loadedRes.nissaya : 0)
+                  : undefined
+              }
               title={intl.formatMessage({
               title={intl.formatMessage({
                 id: "channel.type.nissaya.label",
                 id: "channel.type.nissaya.label",
               })}
               })}
@@ -221,7 +233,11 @@ const SentTabWidget = ({
               icon={<TranslationOutlined />}
               icon={<TranslationOutlined />}
               type="commentary"
               type="commentary"
               sentId={id}
               sentId={id}
-              count={commNum}
+              count={
+                commNum
+                  ? commNum - (loadedRes?.commentary ? loadedRes.commentary : 0)
+                  : undefined
+              }
               title={intl.formatMessage({
               title={intl.formatMessage({
                 id: "channel.type.commentary.label",
                 id: "channel.type.commentary.label",
               })}
               })}

+ 1 - 1
dashboard/src/components/template/SentEdit/SentWbwEdit.tsx

@@ -66,7 +66,7 @@ const SentWbwEditWidget = ({ data, onSave, onClose }: IWidget) => {
   const [wbwData, setWbwData] = useState<IWbw[]>([]);
   const [wbwData, setWbwData] = useState<IWbw[]>([]);
 
 
   useEffect(() => {
   useEffect(() => {
-    if (data.contentType === "json") {
+    if (data.contentType === "json" && data.content) {
       setWbwData(JSON.parse(data.content));
       setWbwData(JSON.parse(data.content));
     }
     }
   }, [data.content, data.contentType]);
   }, [data.content, data.contentType]);

+ 3 - 1
dashboard/src/components/template/SentEdit/SuggestionToolbar.tsx

@@ -75,7 +75,9 @@ const SuggestionToolbarWidget = ({
       />
       />
       {CommentCount}
       {CommentCount}
       {compact ? undefined : <Divider type="vertical" />}
       {compact ? undefined : <Divider type="vertical" />}
-      {compact ? undefined : <Text copyable={{ text: data.content }}></Text>}
+      {compact ? undefined : (
+        <Text copyable={{ text: data.content ? data.content : "" }}></Text>
+      )}
     </Space>
     </Space>
   );
   );
   return (
   return (