Sfoglia il codice sorgente

添加快捷键:control + enter esc
修复logo

tianyunperfect 4 anni fa
parent
commit
2f9a8d937d

+ 1 - 1
public/CNAME

@@ -1 +1 @@
-preview.pro.ant.design
+tianyunperfect.cn

+ 1 - 0
public/back/CNAME

@@ -0,0 +1 @@
+tianyunperfect.cn

BIN
public/back/favicon.png


BIN
public/back/home_bg.png


BIN
public/back/icons/icon-128x128.png


BIN
public/back/icons/icon-192x192.png


BIN
public/back/icons/icon-512x512.png


File diff suppressed because it is too large
+ 0 - 0
public/back/pro_icon.svg


BIN
public/favicon.png


BIN
public/home_bg.png


BIN
public/icons/icon-128x128.png


BIN
public/icons/icon-192x192.png


BIN
public/icons/icon-512x512.png


File diff suppressed because it is too large
+ 0 - 0
public/pro_icon.svg


File diff suppressed because it is too large
+ 0 - 0
src/assets/logo.back.svg


File diff suppressed because it is too large
+ 0 - 0
src/assets/logo.svg


+ 13 - 1
src/layouts/UserLayout.tsx

@@ -57,7 +57,19 @@ const UserLayout: React.FC<UserLayoutProps> = (props) => {
           </div>
           {children}
         </div>
-        <DefaultFooter />
+        <DefaultFooter
+          copyright="tianyunperfect"
+          links={
+            [
+              // {
+              //   key: '云知声-智享未来',
+              //   title: '云知声-智享未来',
+              //   href: 'www.unisound.com',
+              //   blankTarget: true,
+              // }
+            ]
+          }
+        />
       </div>
     </HelmetProvider>
   );

+ 89 - 87
src/pages/Memory/components/UpdateForm.tsx

@@ -1,14 +1,13 @@
-import React, {useEffect, useState} from 'react';
-import {Button, message, Modal} from 'antd';
-import Quill from "@/pages/Memory/components/Quill";
-import service from "@/pages/Memory/service";
-import {useSingleState} from "nice-hooks";
-import {getTextFromHtml} from "@/utils/utils";
-import {TableListItem} from '../../MemoryList/data.d';
+import React, { useEffect, useState } from 'react';
+import { Button, message, Modal } from 'antd';
+import Quill from '@/pages/Memory/components/Quill';
+import service from '@/pages/Memory/service';
+import { useSingleState } from 'nice-hooks';
+import { getTextFromHtml } from '@/utils/utils';
+import { TableListItem } from '../../MemoryList/data.d';
 
 // 表单特殊字段
-export interface FormValueType extends Partial<TableListItem> {
-}
+export interface FormValueType extends Partial<TableListItem> {}
 
 export interface UpdateFormProps {
   onCancel: (fresh?: boolean) => void;
@@ -21,21 +20,21 @@ const dealImage = (base64: string, targetWidth: number, targetSize: number, call
   let quality = 0.8;
   newImage.src = base64;
   // url为外域时需要
-  newImage.setAttribute("crossOrigin", 'Anonymous');
+  newImage.setAttribute('crossOrigin', 'Anonymous');
   let imgWidth;
   let imgHeight;
   newImage.onload = function () {
     imgWidth = newImage.width;
     imgHeight = newImage.height;
-    const canvas = document.createElement("canvas");
-    const ctx = canvas.getContext("2d");
+    const canvas = document.createElement('canvas');
+    const ctx = canvas.getContext('2d');
     if (Math.max(imgWidth, imgHeight) > targetWidth) {
       if (imgWidth > imgHeight) {
         canvas.width = targetWidth;
-        canvas.height = targetWidth * imgHeight / imgWidth;
+        canvas.height = (targetWidth * imgHeight) / imgWidth;
       } else {
         canvas.height = targetWidth;
-        canvas.width = targetWidth * imgWidth / imgHeight;
+        canvas.width = (targetWidth * imgWidth) / imgHeight;
       }
     } else {
       canvas.width = imgWidth;
@@ -49,66 +48,101 @@ const dealImage = (base64: string, targetWidth: number, targetSize: number, call
     while (base64.length / 1024 > targetSize) {
       quality -= 0.01;
       // eslint-disable-next-line no-param-reassign
-      base64 = canvas.toDataURL("image/jpeg", quality);
+      base64 = canvas.toDataURL('image/jpeg', quality);
     }
     // 防止最后一次压缩低于最低尺寸,只要quality递减合理,无需考虑
     // while (base64.length / 1024 < 50) {
     // 	quality += 0.001;
     // 	base64 = canvas.toDataURL("image/jpeg", quality);
     // }
-    callback(base64);// 必须通过回调函数返回,否则无法及时拿到该值
-  }
-}
+    callback(base64); // 必须通过回调函数返回,否则无法及时拿到该值
+  };
+};
 
 /**
  * 压缩html中的base64
  */
-const dealHtml = (html: string,callBack:Function) => {
+const dealHtml = (html: string, callBack: Function) => {
   callBack(html);
-  const htmlDoc = new DOMParser().parseFromString(html, "text/html");
-  const imgs = htmlDoc.querySelectorAll("img");
+  const htmlDoc = new DOMParser().parseFromString(html, 'text/html');
+  const imgs = htmlDoc.querySelectorAll('img');
   for (let i = 0; i < imgs.length; i += 1) {
-    const {src} = imgs[i];
-    if (src.startsWith("data")) {
+    const { src } = imgs[i];
+    if (src.startsWith('data')) {
       dealImage(src, 500, 150, (base64: string) => {
         imgs[i].src = base64;
-        callBack(htmlDoc.body.innerHTML)
-        console.log(`压缩图片${i}`)
-      })
+        callBack(htmlDoc.body.innerHTML);
+        console.log(`压缩图片${i}`);
+      });
     }
   }
-}
-
+};
 
 const UpdateForm: React.FC<UpdateFormProps> = (props) => {
   const [btnDisable, setBtnDisable] = useState(false);
 
   const [formValues, setFormValues] = useSingleState<TableListItem>({
-    back: "",
-    front: "",
+    back: '',
+    front: '',
     id: undefined,
     period: 0,
     remindTime: new Date(),
-    tag: "",
-    updateTime: "",
-    userId: 0, ...props.values
+    tag: '',
+    updateTime: '',
+    userId: 0,
+    ...props.values,
   });
 
+  const { onCancel: hideModal, modalVisible } = props;
 
-  const {
-    onCancel: hideModal,
-    modalVisible,
-  } = props;
+  const addHandle = async () => {
+    /**
+     * 判断
+     */
+    console.log(formValues);
+    if (getTextFromHtml(formValues.front + formValues.back).length <= 1) {
+      message.info('你是不是没有输入文字?');
+      return;
+    }
+    if (formValues.front.length >= 300000 || formValues.back.length >= 300000) {
+      message.info('文字太长了,减少一些吧!');
+      return;
+    }
+    setBtnDisable(true); // 禁用按钮
+    let res;
+    if (formValues.id !== undefined) {
+      res = await service.update(formValues);
+    } else {
+      res = await service.insert(formValues);
+    }
+    setBtnDisable(false); // 释放按钮
+    if (res.success) {
+      message.info('操作成功');
+      if (formValues.id !== undefined) {
+        hideModal(true);
+      } else {
+        setFormValues({ front: '', back: '' });
+      }
+    } else {
+      message.info(`操作失败: ${res.message}`);
+    }
+  };
 
   useEffect(() => {
     console.log(props);
-  }, [])
-
+    document.onkeydown = (ev) => {
+      if (ev.ctrlKey && ev.key.toLowerCase() === 'enter') {
+        addHandle();
+      } else if (ev.key.toLowerCase() === 'escape') {
+        hideModal(false);
+      }
+    };
+  }, []);
 
   return (
     <Modal
       width={640}
-      bodyStyle={{padding: '15px 15px 15px'}}
+      bodyStyle={{ padding: '15px 15px 15px' }}
       destroyOnClose
       title="配置模型"
       visible={modalVisible}
@@ -120,69 +154,37 @@ const UpdateForm: React.FC<UpdateFormProps> = (props) => {
         <Quill
           readonly={false}
           onChange={(value) => {
-            dealHtml(value,(html:string)=>{
-              setFormValues({front: html});
-            })
+            dealHtml(value, (html: string) => {
+              setFormValues({ front: html });
+            });
           }}
-          value={formValues.front}/>
+          value={formValues.front}
+        />
 
-        <p/>
+        <p />
         <h4>反面</h4>
         <Quill
           readonly={false}
           onChange={(value) => {
-            dealHtml(value,(html:string)=>{
-              setFormValues({back: html});
-            })
+            dealHtml(value, (html: string) => {
+              setFormValues({ back: html });
+            });
           }}
           value={formValues.back}
         />
-        <p/>
-        <Button
-          type="primary"
-          disabled={btnDisable}
-          onClick={async () => {
-            /**
-             * 判断
-             */
-            console.log(formValues);
-            if (getTextFromHtml(formValues.front + formValues.back).length <= 1) {
-              message.info("你是不是没有输入文字?");
-              return;
-            }
-            if (formValues.front.length >= 300000 || formValues.back.length >= 300000) {
-              message.info("文字太长了,减少一些吧!");
-              return;
-            }
-            setBtnDisable(true); // 禁用按钮
-            let res;
-            if (formValues.id != undefined) {
-              res = await service.update(formValues);
-            } else {
-              res = await service.insert(formValues);
-            }
-            setBtnDisable(false); // 释放按钮
-            if (res.success) {
-              message.info('操作成功');
-              if (formValues.id != undefined) {
-                hideModal(true);
-              } else {
-                setFormValues({front: '', back: ''})
-              }
-            } else {
-              message.info(`操作失败: ${res.message}`);
-            }
-          }}
-        >
+        <p />
+        <Button type="primary" disabled={btnDisable} onClick={addHandle}>
           确定
         </Button>
         <span> </span>
         <Button
           type="primary"
           onClick={() => {
-            hideModal(false)
+            hideModal(false);
           }}
-        >关闭</Button>
+        >
+          关闭
+        </Button>
       </div>
     </Modal>
   );

+ 33 - 32
src/pages/Memory/index.tsx

@@ -1,13 +1,13 @@
-import {Button, message, Modal} from 'antd';
-import React, {useEffect, useState} from 'react';
-import {PageHeaderWrapper} from '@ant-design/pro-layout';
-import {useSingleState} from 'nice-hooks';
+import { Button, message, Modal } from 'antd';
+import React, { useEffect, useState } from 'react';
+import { PageHeaderWrapper } from '@ant-design/pro-layout';
+import { useSingleState } from 'nice-hooks';
 import Quill from '@/pages/Memory/components/Quill';
 import UpdateForm from '@/pages/Memory/components/UpdateForm';
-import {TableListItem} from '../MemoryList/data.d';
+import { TableListItem } from '../MemoryList/data.d';
 import service from './service';
 import styles from './index.less';
-import {ExclamationCircleOutlined} from "@ant-design/icons/lib";
+import { ExclamationCircleOutlined } from '@ant-design/icons/lib';
 
 enum Step {
   MAIN = 0,
@@ -25,7 +25,7 @@ const TableList: React.FC<{}> = () => {
   const [btnDisable, setBtnDisable] = useState(false);
   let counting = false;
 
-  const {confirm} = Modal;
+  const { confirm } = Modal;
 
   const [state, setState] = useSingleState<State>({
     remindCount: 0,
@@ -60,7 +60,7 @@ const TableList: React.FC<{}> = () => {
       const res = await service.countRemind({});
       hide();
       if (res.success) {
-        setState({remindCount: parseInt(res.data, 10)});
+        setState({ remindCount: parseInt(res.data, 10) });
       }
       counting = false;
     } catch (error) {
@@ -73,9 +73,10 @@ const TableList: React.FC<{}> = () => {
    * 进入统计页面
    */
   const changStepMain = () => {
-    setState({step: Step.MAIN});
+    setState({ step: Step.MAIN });
     countRemind();
   };
+
   /**
    * 处理返回值
    * @param res
@@ -84,8 +85,8 @@ const TableList: React.FC<{}> = () => {
     // 只要有返回值,就使按钮可见
     setBtnDisable(false);
     if (res.success) {
-      setState({showBack: false});
-      setMemory({...memory, ...res.data});
+      setState({ showBack: false });
+      setMemory({ ...memory, ...res.data });
     } else {
       changStepMain();
     }
@@ -93,10 +94,9 @@ const TableList: React.FC<{}> = () => {
 
   const memorySuccess = async (factorInt: number) => {
     setBtnDisable(true);
-    memoryRes(await service.memorySuccess({id: memory.id, factor: factorInt}));
+    memoryRes(await service.memorySuccess({ id: memory.id, factor: factorInt }));
   };
 
-
   /**
    * 清空memory
    */
@@ -111,7 +111,7 @@ const TableList: React.FC<{}> = () => {
    * 每次修改step,都关闭背面
    */
   useEffect(() => {
-    setState({showBack: false});
+    setState({ showBack: false });
     clearMemory();
   }, [state.step]);
 
@@ -123,7 +123,7 @@ const TableList: React.FC<{}> = () => {
   const findNextLine = async () => {
     const res = await service.findNext({});
     if (res.success) {
-      setMemory({...memory, ...res.data});
+      setMemory({ ...memory, ...res.data });
     } else {
       changStepMain();
     }
@@ -137,12 +137,12 @@ const TableList: React.FC<{}> = () => {
       message.info('已经复习完了哟!');
       return;
     }
-    setState({step: Step.MEMORY});
+    setState({ step: Step.MEMORY });
     await findNextLine();
   };
 
   const changStepAdd = () => {
-    setState({step: Step.ADD});
+    setState({ step: Step.ADD });
   };
 
   useEffect(() => {
@@ -155,7 +155,7 @@ const TableList: React.FC<{}> = () => {
       if (ev.key === ' ' && state.step === Step.MEMORY) {
         ev.preventDefault(); // 关闭浏览器快捷键
         if (state.showBack === false) {
-          setState({showBack: true});
+          setState({ showBack: true });
         } else {
           memorySuccess(2);
         }
@@ -170,7 +170,6 @@ const TableList: React.FC<{}> = () => {
             changStepMemory();
           }
         }
-
       }
     };
   }, []);
@@ -180,11 +179,11 @@ const TableList: React.FC<{}> = () => {
       {state.step === Step.MAIN ? (
         <div>
           <div>待复习: {state.remindCount}</div>
-          <p/>
+          <p />
           <Button type="primary" size="large" onClick={changStepMemory}>
             复习
           </Button>
-          <p/>
+          <p />
           <Button type="primary" size="large" onClick={changStepAdd}>
             添加
           </Button>
@@ -194,15 +193,13 @@ const TableList: React.FC<{}> = () => {
       {state.step === Step.MEMORY ? (
         <div>
           问题:
-          <p/>
-          <Quill readonly onChange={() => {
-          }} value={memory.front}/>
-          <p/>
+          <p />
+          <Quill readonly onChange={() => {}} value={memory.front} />
+          <p />
           {state.showBack ? (
             <div>
-              <Quill readonly onChange={() => {
-              }} value={memory.back}/>
-              <p/>
+              <Quill readonly onChange={() => {}} value={memory.back} />
+              <p />
               <div className={styles.divBottom}>
                 <Button
                   type="primary"
@@ -238,17 +235,19 @@ const TableList: React.FC<{}> = () => {
                   type="primary"
                   disabled={btnDisable}
                   onClick={async () => {
+                    setBtnDisable(true);
                     memoryRes(await service.delay(memory));
                   }}
                 >
                   搁置
                 </Button>
-                <p/>
+                <p />
                 <div>
                   <Button
                     type="primary"
                     disabled={btnDisable}
                     onClick={async () => {
+                      setBtnDisable(true);
                       memoryRes(await service.restart(memory));
                     }}
                   >
@@ -259,6 +258,7 @@ const TableList: React.FC<{}> = () => {
                     type="primary"
                     disabled={btnDisable}
                     onClick={async () => {
+                      setBtnDisable(true);
                       memoryRes(await service.noMemory(memory));
                     }}
                   >
@@ -271,12 +271,13 @@ const TableList: React.FC<{}> = () => {
                     onClick={async () => {
                       confirm({
                         title: '确定删除吗?',
-                        icon: <ExclamationCircleOutlined/>,
+                        icon: <ExclamationCircleOutlined />,
                         content: '删除后无法恢复',
                         okText: '确定',
                         okType: 'danger',
                         cancelText: '取消',
                         async onOk() {
+                          setBtnDisable(true);
                           memoryRes(await service.delete(memory));
                         },
                         onCancel() {
@@ -288,7 +289,7 @@ const TableList: React.FC<{}> = () => {
                     删除
                   </Button>
                 </div>
-                <p/>
+                <p />
                 <div>
                   <Button
                     type="primary"
@@ -315,7 +316,7 @@ const TableList: React.FC<{}> = () => {
               <Button
                 type="primary"
                 onClick={() => {
-                  setState({showBack: true});
+                  setState({ showBack: true });
                 }}
               >
                 显示答案

Some files were not shown because too many files changed in this diff