visuddhinanda 2 лет назад
Родитель
Сommit
debdfa6ed0
1 измененных файлов с 58 добавлено и 9 удалено
  1. 58 9
      dashboard/src/components/template/Wbw/WbwMeaning.tsx

+ 58 - 9
dashboard/src/components/template/Wbw/WbwMeaning.tsx

@@ -26,20 +26,40 @@ const Widget = ({
   const [open, setOpen] = useState(false);
   let meaning = <></>;
   if (
-    mode === "wbw" &&
-    (typeof data.meaning === "undefined" ||
-      data.meaning.value === null ||
-      data.meaning.value.length === 0 ||
-      data.meaning.value === "")
+    typeof data.meaning?.value === "string" &&
+    data.meaning.value.trim().length > 0
   ) {
+    const eMeaning = data.meaning.value
+      .replaceAll("[", "@[")
+      .replaceAll("]", "]@")
+      .replaceAll("{", "@{")
+      .replaceAll("}", "}@")
+      .split("@")
+      .map((item, index) => {
+        if (item.includes("[")) {
+          return (
+            <span key={index} style={{ color: "rosybrown" }}>
+              {item.replaceAll("[", "").replaceAll("]", "")}
+            </span>
+          );
+        } else if (item.includes("{")) {
+          return (
+            <span key={index} style={{ color: "lightskyblue" }}>
+              {item.replaceAll("{", "").replaceAll("}", "")}
+            </span>
+          );
+        } else {
+          return <Text>{item}</Text>;
+        }
+      });
+    meaning = <Text>{eMeaning}</Text>;
+  } else if (mode === "wbw") {
     //空白的意思在逐词解析模式显示占位字符串
     meaning = (
       <Text type="secondary">
         {intl.formatMessage({ id: "dict.fields.meaning.label" })}
       </Text>
     );
-  } else {
-    meaning = <Text>{data.meaning?.value}</Text>;
   }
   const hide = () => {
     setOpen(false);
@@ -56,7 +76,7 @@ const Widget = ({
           open={open}
           onOpenChange={handleOpenChange}
           content={
-            <div style={{ width: 500, height: "60vh", overflow: "auto" }}>
+            <div style={{ width: 500, height: "450px", overflow: "auto" }}>
               <WbwMeaningSelect
                 data={data}
                 onSelect={(e: string) => {
@@ -73,7 +93,36 @@ const Widget = ({
         >
           {meaning}
         </Popover>
-        <CaseFormula data={data} />
+        {mode === "wbw" ? (
+          <CaseFormula
+            data={data}
+            onChange={(formula: string) => {
+              /**
+               * 有 [ ] 不替换
+               * 有{ } 祛除 { }
+               * 把 格位公式中的 ~ 替换为 data.meaning.value
+               */
+              if (
+                data.meaning?.value &&
+                data.meaning?.value.indexOf("[") >= 0
+              ) {
+                return;
+              }
+              let meaning: string = data.meaning?.value
+                ? data.meaning?.value
+                : "";
+              meaning = meaning.replace(/\{(.+?)\}/g, "");
+
+              meaning = formula
+                .replaceAll("{", "[")
+                .replaceAll("}", "]")
+                .replace("~", meaning);
+              if (typeof onChange !== "undefined") {
+                onChange(meaning);
+              }
+            }}
+          />
+        ) : undefined}
       </div>
     );
   } else {