diff --git a/a.md b/a.md
index aad5b11..0064535 100644
--- a/a.md
+++ b/a.md
@@ -24,4 +24,5 @@ https://www.jianshu.com/p/4699b825d285
     https://developer.mozilla.org/zh-CN/docs/Web/API/Fetch_API/Using_Fetch
     react-desktop
 
-    考虑使用谷歌的材料ui
\ No newline at end of file
+    考虑使用谷歌的材料ui
+    https://www.framer.com/docs/animation/
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 7018a5e..650eb72 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -23,6 +23,7 @@
       "version": "7.14.5",
       "resolved": "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz?cache=0&sync_timestamp=1623280394200&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.14.5.tgz",
       "integrity": "sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts=",
+      "dev": true,
       "requires": {
         "@babel/highlight": "^7.14.5"
       }
@@ -205,6 +206,7 @@
       "version": "7.14.5",
       "resolved": "https://registry.nlark.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.14.5.tgz?cache=0&sync_timestamp=1623280362184&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.14.5.tgz",
       "integrity": "sha1-bRpE32o4yVeqfDEtoHZCnxG0IvM=",
+      "dev": true,
       "requires": {
         "@babel/types": "^7.14.5"
       }
@@ -237,7 +239,8 @@
     "@babel/helper-plugin-utils": {
       "version": "7.14.5",
       "resolved": "https://registry.nlark.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.14.5.tgz",
-      "integrity": "sha1-WsgizpfuxGdBq3ClF5ceRDpwxak="
+      "integrity": "sha1-WsgizpfuxGdBq3ClF5ceRDpwxak=",
+      "dev": true
     },
     "@babel/helper-remap-async-to-generator": {
       "version": "7.14.5",
@@ -292,7 +295,8 @@
     "@babel/helper-validator-identifier": {
       "version": "7.14.8",
       "resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.8.tgz",
-      "integrity": "sha1-Mr4zp1bynieKDWRPoIosng+Io0w="
+      "integrity": "sha1-Mr4zp1bynieKDWRPoIosng+Io0w=",
+      "dev": true
     },
     "@babel/helper-validator-option": {
       "version": "7.14.5",
@@ -327,6 +331,7 @@
       "version": "7.14.5",
       "resolved": "https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz?cache=0&sync_timestamp=1623280393681&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhighlight%2Fdownload%2F%40babel%2Fhighlight-7.14.5.tgz",
       "integrity": "sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk=",
+      "dev": true,
       "requires": {
         "@babel/helper-validator-identifier": "^7.14.5",
         "chalk": "^2.0.0",
@@ -337,6 +342,7 @@
           "version": "3.2.1",
           "resolved": "https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz",
           "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+          "dev": true,
           "requires": {
             "color-convert": "^1.9.0"
           }
@@ -345,6 +351,7 @@
           "version": "2.4.2",
           "resolved": "https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995367379&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz",
           "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+          "dev": true,
           "requires": {
             "ansi-styles": "^3.2.1",
             "escape-string-regexp": "^1.0.5",
@@ -355,6 +362,7 @@
           "version": "1.9.3",
           "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-1.9.3.tgz",
           "integrity": "sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=",
+          "dev": true,
           "requires": {
             "color-name": "1.1.3"
           }
@@ -362,22 +370,26 @@
         "color-name": {
           "version": "1.1.3",
           "resolved": "https://registry.nlark.com/color-name/download/color-name-1.1.3.tgz",
-          "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+          "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+          "dev": true
         },
         "escape-string-regexp": {
           "version": "1.0.5",
           "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz",
-          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+          "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+          "dev": true
         },
         "has-flag": {
           "version": "3.0.0",
           "resolved": "https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz",
-          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+          "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+          "dev": true
         },
         "supports-color": {
           "version": "5.5.0",
           "resolved": "https://registry.nlark.com/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
           "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+          "dev": true,
           "requires": {
             "has-flag": "^3.0.0"
           }
@@ -631,14 +643,6 @@
         "@babel/helper-plugin-utils": "^7.8.0"
       }
     },
-    "@babel/plugin-syntax-jsx": {
-      "version": "7.14.5",
-      "resolved": "https://registry.nlark.com/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.14.5.tgz",
-      "integrity": "sha1-AA4uJdhnPM5JMAUXo+2kTCY+QgE=",
-      "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
-      }
-    },
     "@babel/plugin-syntax-logical-assignment-operators": {
       "version": "7.10.4",
       "resolved": "https://registry.nlark.com/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
@@ -1226,6 +1230,7 @@
       "version": "7.14.8",
       "resolved": "https://registry.nlark.com/@babel/types/download/@babel/types-7.14.8.tgz",
       "integrity": "sha1-OBCd6PytwGQV+9m3TfAGXU1Bxyg=",
+      "dev": true,
       "requires": {
         "@babel/helper-validator-identifier": "^7.14.8",
         "to-fast-properties": "^2.0.0"
@@ -1474,56 +1479,6 @@
         }
       }
     },
-    "@emotion/babel-plugin": {
-      "version": "11.3.0",
-      "resolved": "https://registry.npm.taobao.org/@emotion/babel-plugin/download/@emotion/babel-plugin-11.3.0.tgz",
-      "integrity": "sha1-OhaFC6BNjZZR8H8/tnSzQ2pPudc=",
-      "requires": {
-        "@babel/helper-module-imports": "^7.12.13",
-        "@babel/plugin-syntax-jsx": "^7.12.13",
-        "@babel/runtime": "^7.13.10",
-        "@emotion/hash": "^0.8.0",
-        "@emotion/memoize": "^0.7.5",
-        "@emotion/serialize": "^1.0.2",
-        "babel-plugin-macros": "^2.6.1",
-        "convert-source-map": "^1.5.0",
-        "escape-string-regexp": "^4.0.0",
-        "find-root": "^1.1.0",
-        "source-map": "^0.5.7",
-        "stylis": "^4.0.3"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.5.7",
-          "resolved": "https://registry.nlark.com/source-map/download/source-map-0.5.7.tgz",
-          "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
-        },
-        "stylis": {
-          "version": "4.0.10",
-          "resolved": "https://registry.npm.taobao.org/stylis/download/stylis-4.0.10.tgz?cache=0&sync_timestamp=1617798385355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylis%2Fdownload%2Fstylis-4.0.10.tgz",
-          "integrity": "sha1-RGUS0Qlxl6s/Avs8JYNYw/ehQkA="
-        }
-      }
-    },
-    "@emotion/cache": {
-      "version": "11.4.0",
-      "resolved": "https://registry.nlark.com/@emotion/cache/download/@emotion/cache-11.4.0.tgz",
-      "integrity": "sha1-KT/J2aeji5qtjpM35QFDZsOwmsA=",
-      "requires": {
-        "@emotion/memoize": "^0.7.4",
-        "@emotion/sheet": "^1.0.0",
-        "@emotion/utils": "^1.0.0",
-        "@emotion/weak-memoize": "^0.2.5",
-        "stylis": "^4.0.3"
-      },
-      "dependencies": {
-        "stylis": {
-          "version": "4.0.10",
-          "resolved": "https://registry.npm.taobao.org/stylis/download/stylis-4.0.10.tgz?cache=0&sync_timestamp=1617798385355&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstylis%2Fdownload%2Fstylis-4.0.10.tgz",
-          "integrity": "sha1-RGUS0Qlxl6s/Avs8JYNYw/ehQkA="
-        }
-      }
-    },
     "@emotion/hash": {
       "version": "0.8.0",
       "resolved": "https://registry.npm.taobao.org/@emotion/hash/download/@emotion/hash-0.8.0.tgz",
@@ -1899,6 +1854,96 @@
         }
       }
     },
+    "@material-ui/core": {
+      "version": "4.12.3",
+      "resolved": "https://registry.nlark.com/@material-ui/core/download/@material-ui/core-4.12.3.tgz",
+      "integrity": "sha1-gNZlyvDx8DTlI1XFRQwOOLCZ08o=",
+      "requires": {
+        "@babel/runtime": "^7.4.4",
+        "@material-ui/styles": "^4.11.4",
+        "@material-ui/system": "^4.12.1",
+        "@material-ui/types": "5.1.0",
+        "@material-ui/utils": "^4.11.2",
+        "@types/react-transition-group": "^4.2.0",
+        "clsx": "^1.0.4",
+        "hoist-non-react-statics": "^3.3.2",
+        "popper.js": "1.16.1-lts",
+        "prop-types": "^15.7.2",
+        "react-is": "^16.8.0 || ^17.0.0",
+        "react-transition-group": "^4.4.0"
+      }
+    },
+    "@material-ui/icons": {
+      "version": "4.11.2",
+      "resolved": "https://registry.nlark.com/@material-ui/icons/download/@material-ui/icons-4.11.2.tgz",
+      "integrity": "sha1-s6c1MmZRnNdDtkYa6f38sbJetMU=",
+      "requires": {
+        "@babel/runtime": "^7.4.4"
+      }
+    },
+    "@material-ui/styles": {
+      "version": "4.11.4",
+      "resolved": "https://registry.nlark.com/@material-ui/styles/download/@material-ui/styles-4.11.4.tgz",
+      "integrity": "sha1-6538z8wtIIJD2YZFff8CVJevoA0=",
+      "requires": {
+        "@babel/runtime": "^7.4.4",
+        "@emotion/hash": "^0.8.0",
+        "@material-ui/types": "5.1.0",
+        "@material-ui/utils": "^4.11.2",
+        "clsx": "^1.0.4",
+        "csstype": "^2.5.2",
+        "hoist-non-react-statics": "^3.3.2",
+        "jss": "^10.5.1",
+        "jss-plugin-camel-case": "^10.5.1",
+        "jss-plugin-default-unit": "^10.5.1",
+        "jss-plugin-global": "^10.5.1",
+        "jss-plugin-nested": "^10.5.1",
+        "jss-plugin-props-sort": "^10.5.1",
+        "jss-plugin-rule-value-function": "^10.5.1",
+        "jss-plugin-vendor-prefixer": "^10.5.1",
+        "prop-types": "^15.7.2"
+      },
+      "dependencies": {
+        "csstype": {
+          "version": "2.6.17",
+          "resolved": "https://registry.nlark.com/csstype/download/csstype-2.6.17.tgz?cache=0&sync_timestamp=1618818466657&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-2.6.17.tgz",
+          "integrity": "sha1-TPMOuH4dGgBdi2UQ+VKSQT9qHA4="
+        }
+      }
+    },
+    "@material-ui/system": {
+      "version": "4.12.1",
+      "resolved": "https://registry.nlark.com/@material-ui/system/download/@material-ui/system-4.12.1.tgz",
+      "integrity": "sha1-LdlsJD+MCjMbK7bUbv13caOZcHw=",
+      "requires": {
+        "@babel/runtime": "^7.4.4",
+        "@material-ui/utils": "^4.11.2",
+        "csstype": "^2.5.2",
+        "prop-types": "^15.7.2"
+      },
+      "dependencies": {
+        "csstype": {
+          "version": "2.6.17",
+          "resolved": "https://registry.nlark.com/csstype/download/csstype-2.6.17.tgz?cache=0&sync_timestamp=1618818466657&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-2.6.17.tgz",
+          "integrity": "sha1-TPMOuH4dGgBdi2UQ+VKSQT9qHA4="
+        }
+      }
+    },
+    "@material-ui/types": {
+      "version": "5.1.0",
+      "resolved": "https://registry.nlark.com/@material-ui/types/download/@material-ui/types-5.1.0.tgz",
+      "integrity": "sha1-76HHoLDqpMfIesA5BEXw+IsNiPI="
+    },
+    "@material-ui/utils": {
+      "version": "4.11.2",
+      "resolved": "https://registry.nlark.com/@material-ui/utils/download/@material-ui/utils-4.11.2.tgz?cache=0&sync_timestamp=1627314214085&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40material-ui%2Futils%2Fdownload%2F%40material-ui%2Futils-4.11.2.tgz",
+      "integrity": "sha1-8a76fn3/Lry5fTHeUa7KsbtXVAo=",
+      "requires": {
+        "@babel/runtime": "^7.4.4",
+        "prop-types": "^15.7.2",
+        "react-is": "^16.8.0 || ^17.0.0"
+      }
+    },
     "@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": "https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz",
@@ -2265,11 +2310,6 @@
         "@types/ms": "*"
       }
     },
-    "@types/dom4": {
-      "version": "2.0.2",
-      "resolved": "https://registry.nlark.com/@types/dom4/download/@types/dom4-2.0.2.tgz",
-      "integrity": "sha1-ZJUwPwSWic6TbtMoo+Xt6cUUCO4="
-    },
     "@types/eslint": {
       "version": "7.28.0",
       "resolved": "https://registry.nlark.com/@types/eslint/download/@types/eslint-7.28.0.tgz",
@@ -2511,11 +2551,6 @@
       "integrity": "sha1-0zV0eaD9/dWQf+Z+F+CoXJBuEwE=",
       "dev": true
     },
-    "@types/parse-json": {
-      "version": "4.0.0",
-      "resolved": "https://registry.nlark.com/@types/parse-json/download/@types/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1621242198435&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fparse-json%2Fdownload%2F%40types%2Fparse-json-4.0.0.tgz",
-      "integrity": "sha1-L4u0QUNNFjs1+4/9zNcTiSf/uMA="
-    },
     "@types/plist": {
       "version": "3.0.2",
       "resolved": "https://registry.nlark.com/@types/plist/download/@types/plist-3.0.2.tgz?cache=0&sync_timestamp=1621242193552&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fplist%2Fdownload%2F%40types%2Fplist-3.0.2.tgz",
@@ -2545,14 +2580,12 @@
     "@types/prop-types": {
       "version": "15.7.4",
       "resolved": "https://registry.nlark.com/@types/prop-types/download/@types/prop-types-15.7.4.tgz?cache=0&sync_timestamp=1625678237782&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fprop-types%2Fdownload%2F%40types%2Fprop-types-15.7.4.tgz",
-      "integrity": "sha1-/PcgXCXf95Xuea8eMNosl5CAjxE=",
-      "dev": true
+      "integrity": "sha1-/PcgXCXf95Xuea8eMNosl5CAjxE="
     },
     "@types/react": {
       "version": "17.0.15",
       "resolved": "https://registry.nlark.com/@types/react/download/@types/react-17.0.15.tgz?cache=0&sync_timestamp=1627124654713&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Freact%2Fdownload%2F%40types%2Freact-17.0.15.tgz",
       "integrity": "sha1-x1M9w4AlZ34xJgZQLfdlam6mJtA=",
-      "dev": true,
       "requires": {
         "@types/prop-types": "*",
         "@types/scheduler": "*",
@@ -2601,6 +2634,14 @@
         "@types/react-router": "*"
       }
     },
+    "@types/react-transition-group": {
+      "version": "4.4.2",
+      "resolved": "https://registry.nlark.com/@types/react-transition-group/download/@types/react-transition-group-4.4.2.tgz",
+      "integrity": "sha1-OIkP2dtovx8iUrmalCmY3Hh3xbM=",
+      "requires": {
+        "@types/react": "*"
+      }
+    },
     "@types/resolve": {
       "version": "1.17.1",
       "resolved": "https://registry.nlark.com/@types/resolve/download/@types/resolve-1.17.1.tgz?cache=0&sync_timestamp=1625681205871&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40types%2Fresolve%2Fdownload%2F%40types%2Fresolve-1.17.1.tgz",
@@ -2613,8 +2654,7 @@
     "@types/scheduler": {
       "version": "0.16.2",
       "resolved": "https://registry.nlark.com/@types/scheduler/download/@types/scheduler-0.16.2.tgz",
-      "integrity": "sha1-GmL4lSVyPd4kuhsBsJK/XfitTTk=",
-      "dev": true
+      "integrity": "sha1-GmL4lSVyPd4kuhsBsJK/XfitTTk="
     },
     "@types/stack-utils": {
       "version": "2.0.1",
@@ -4422,16 +4462,12 @@
       "version": "1.0.2",
       "resolved": "https://registry.nlark.com/call-bind/download/call-bind-1.0.2.tgz",
       "integrity": "sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw=",
+      "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
         "get-intrinsic": "^1.0.2"
       }
     },
-    "callsites": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-3.1.0.tgz",
-      "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M="
-    },
     "camel-case": {
       "version": "4.1.2",
       "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-4.1.2.tgz?cache=0&sync_timestamp=1606867297052&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-4.1.2.tgz",
@@ -4603,7 +4639,8 @@
     "classnames": {
       "version": "2.3.1",
       "resolved": "https://registry.npm.taobao.org/classnames/download/classnames-2.3.1.tgz?cache=0&sync_timestamp=1617400318265&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclassnames%2Fdownload%2Fclassnames-2.3.1.tgz",
-      "integrity": "sha1-38+jiR4wbsHa0QXQ6I9EF7hTXo4="
+      "integrity": "sha1-38+jiR4wbsHa0QXQ6I9EF7hTXo4=",
+      "dev": true
     },
     "clean-css": {
       "version": "4.2.3",
@@ -4970,6 +5007,7 @@
       "version": "1.8.0",
       "resolved": "https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz?cache=0&sync_timestamp=1624045304679&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fconvert-source-map%2Fdownload%2Fconvert-source-map-1.8.0.tgz",
       "integrity": "sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=",
+      "dev": true,
       "requires": {
         "safe-buffer": "~5.1.1"
       }
@@ -5023,18 +5061,6 @@
       "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
       "dev": true
     },
-    "cosmiconfig": {
-      "version": "6.0.0",
-      "resolved": "https://registry.nlark.com/cosmiconfig/download/cosmiconfig-6.0.0.tgz",
-      "integrity": "sha1-2k/uhTxS9rHmk19BwaL8UL1KmYI=",
-      "requires": {
-        "@types/parse-json": "^4.0.0",
-        "import-fresh": "^3.1.0",
-        "parse-json": "^5.0.0",
-        "path-type": "^4.0.0",
-        "yaml": "^1.7.2"
-      }
-    },
     "crc": {
       "version": "3.8.0",
       "resolved": "https://registry.npm.taobao.org/crc/download/crc-3.8.0.tgz",
@@ -5168,6 +5194,7 @@
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1606859714626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdeep-equal%2Fdownload%2Fdeep-equal-1.1.1.tgz",
       "integrity": "sha1-tcmMlCzv+vfLBR4k4UNKJaLmB2o=",
+      "dev": true,
       "requires": {
         "is-arguments": "^1.0.4",
         "is-date-object": "^1.0.1",
@@ -5296,6 +5323,7 @@
       "version": "1.1.3",
       "resolved": "https://registry.nlark.com/define-properties/download/define-properties-1.1.3.tgz",
       "integrity": "sha1-z4jabL7ib+bbcJT2HYcMvYTO6fE=",
+      "dev": true,
       "requires": {
         "object-keys": "^1.0.12"
       }
@@ -5519,12 +5547,12 @@
       }
     },
     "dom-helpers": {
-      "version": "3.4.0",
-      "resolved": "https://registry.nlark.com/dom-helpers/download/dom-helpers-3.4.0.tgz",
-      "integrity": "sha1-6bNpcA+Vn2Ls3lprq95LzNkWmvg=",
-      "dev": true,
+      "version": "5.2.1",
+      "resolved": "https://registry.nlark.com/dom-helpers/download/dom-helpers-5.2.1.tgz",
+      "integrity": "sha1-2UAFNrK/giWtmP4FLgKUUaxA6QI=",
       "requires": {
-        "@babel/runtime": "^7.1.2"
+        "@babel/runtime": "^7.8.7",
+        "csstype": "^3.0.2"
       }
     },
     "dom4": {
@@ -5923,6 +5951,7 @@
       "version": "1.3.2",
       "resolved": "https://registry.npm.taobao.org/error-ex/download/error-ex-1.3.2.tgz",
       "integrity": "sha1-tKxAZIEH/c3PriQvQovqihTU8b8=",
+      "dev": true,
       "requires": {
         "is-arrayish": "^0.2.1"
       }
@@ -5967,7 +5996,9 @@
     "escape-string-regexp": {
       "version": "4.0.0",
       "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-4.0.0.tgz?cache=0&sync_timestamp=1618677243201&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-4.0.0.tgz",
-      "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ="
+      "integrity": "sha1-FLqDpdNz49MR5a/KKc9b+tllvzQ=",
+      "dev": true,
+      "optional": true
     },
     "escodegen": {
       "version": "2.0.0",
@@ -6657,7 +6688,8 @@
     "function-bind": {
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/function-bind/download/function-bind-1.1.1.tgz",
-      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0="
+      "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
+      "dev": true
     },
     "gensync": {
       "version": "1.0.0-beta.2",
@@ -6675,6 +6707,7 @@
       "version": "1.1.1",
       "resolved": "https://registry.nlark.com/get-intrinsic/download/get-intrinsic-1.1.1.tgz",
       "integrity": "sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y=",
+      "dev": true,
       "requires": {
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
@@ -6856,11 +6889,6 @@
       "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
       "dev": true
     },
-    "gud": {
-      "version": "1.0.0",
-      "resolved": "https://registry.nlark.com/gud/download/gud-1.0.0.tgz",
-      "integrity": "sha1-pIlYGxfmpwvsqavjrlfeekmYUsA="
-    },
     "handle-thing": {
       "version": "2.0.1",
       "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz",
@@ -6871,6 +6899,7 @@
       "version": "1.0.3",
       "resolved": "https://registry.nlark.com/has/download/has-1.0.3.tgz",
       "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+      "dev": true,
       "requires": {
         "function-bind": "^1.1.1"
       }
@@ -6901,7 +6930,8 @@
     "has-symbols": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.2.tgz?cache=0&sync_timestamp=1614443484522&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.2.tgz",
-      "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM="
+      "integrity": "sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM=",
+      "dev": true
     },
     "has-value": {
       "version": "1.0.0",
@@ -7271,6 +7301,11 @@
       "integrity": "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=",
       "dev": true
     },
+    "hyphenate-style-name": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/hyphenate-style-name/download/hyphenate-style-name-1.0.4.tgz?cache=0&sync_timestamp=1594642413930&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhyphenate-style-name%2Fdownload%2Fhyphenate-style-name-1.0.4.tgz",
+      "integrity": "sha1-aRh5r44iCupXUOiCfbTvYqVONh0="
+    },
     "i18next": {
       "version": "20.3.4",
       "resolved": "https://registry.nlark.com/i18next/download/i18next-20.3.4.tgz",
@@ -7322,22 +7357,6 @@
       "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=",
       "dev": true
     },
-    "import-fresh": {
-      "version": "3.3.0",
-      "resolved": "https://registry.nlark.com/import-fresh/download/import-fresh-3.3.0.tgz",
-      "integrity": "sha1-NxYsJfy566oublPVtNiM4X2eDCs=",
-      "requires": {
-        "parent-module": "^1.0.0",
-        "resolve-from": "^4.0.0"
-      },
-      "dependencies": {
-        "resolve-from": {
-          "version": "4.0.0",
-          "resolved": "https://registry.nlark.com/resolve-from/download/resolve-from-4.0.0.tgz",
-          "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY="
-        }
-      }
-    },
     "import-lazy": {
       "version": "2.1.0",
       "resolved": "https://registry.nlark.com/import-lazy/download/import-lazy-2.1.0.tgz",
@@ -7444,6 +7463,7 @@
       "version": "1.1.0",
       "resolved": "https://registry.nlark.com/is-arguments/download/is-arguments-1.1.0.tgz",
       "integrity": "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk=",
+      "dev": true,
       "requires": {
         "call-bind": "^1.0.0"
       }
@@ -7451,7 +7471,8 @@
     "is-arrayish": {
       "version": "0.2.1",
       "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0="
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
     },
     "is-binary-path": {
       "version": "2.1.0",
@@ -7481,6 +7502,7 @@
       "version": "2.5.0",
       "resolved": "https://registry.nlark.com/is-core-module/download/is-core-module-2.5.0.tgz",
       "integrity": "sha1-91SENhfHC/0pt72HMnQAzaXBhJE=",
+      "dev": true,
       "requires": {
         "has": "^1.0.3"
       }
@@ -7497,7 +7519,8 @@
     "is-date-object": {
       "version": "1.0.4",
       "resolved": "https://registry.nlark.com/is-date-object/download/is-date-object-1.0.4.tgz",
-      "integrity": "sha1-VQz8wDr62gXuo90wmBx7CVUfc+U="
+      "integrity": "sha1-VQz8wDr62gXuo90wmBx7CVUfc+U=",
+      "dev": true
     },
     "is-descriptor": {
       "version": "1.0.2",
@@ -7543,6 +7566,11 @@
         "is-extglob": "^2.1.1"
       }
     },
+    "is-in-browser": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/is-in-browser/download/is-in-browser-1.1.3.tgz",
+      "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU="
+    },
     "is-installed-globally": {
       "version": "0.4.0",
       "resolved": "https://registry.npm.taobao.org/is-installed-globally/download/is-installed-globally-0.4.0.tgz?cache=0&sync_timestamp=1610875232179&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-installed-globally%2Fdownload%2Fis-installed-globally-0.4.0.tgz",
@@ -7637,6 +7665,7 @@
       "version": "1.1.3",
       "resolved": "https://registry.nlark.com/is-regex/download/is-regex-1.1.3.tgz",
       "integrity": "sha1-0Cn5r/ZEi5Prvj8z2scVEf3L758=",
+      "dev": true,
       "requires": {
         "call-bind": "^1.0.2",
         "has-symbols": "^1.0.2"
@@ -8397,7 +8426,8 @@
     "json-parse-even-better-errors": {
       "version": "2.3.1",
       "resolved": "https://registry.nlark.com/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz",
-      "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0="
+      "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=",
+      "dev": true
     },
     "json-schema-traverse": {
       "version": "0.4.1",
@@ -8436,6 +8466,84 @@
         "universalify": "^2.0.0"
       }
     },
+    "jss": {
+      "version": "10.7.1",
+      "resolved": "https://registry.nlark.com/jss/download/jss-10.7.1.tgz",
+      "integrity": "sha1-FthG4aIvtC6Fe5n5xqDFonNByAQ=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "csstype": "^3.0.2",
+        "is-in-browser": "^1.1.3",
+        "tiny-warning": "^1.0.2"
+      }
+    },
+    "jss-plugin-camel-case": {
+      "version": "10.7.1",
+      "resolved": "https://registry.nlark.com/jss-plugin-camel-case/download/jss-plugin-camel-case-10.7.1.tgz",
+      "integrity": "sha1-5/cJfPl+ne7Fmc7zJ14hNFIxi5M=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "hyphenate-style-name": "^1.0.3",
+        "jss": "10.7.1"
+      }
+    },
+    "jss-plugin-default-unit": {
+      "version": "10.7.1",
+      "resolved": "https://registry.nlark.com/jss-plugin-default-unit/download/jss-plugin-default-unit-10.7.1.tgz?cache=0&sync_timestamp=1624885453756&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjss-plugin-default-unit%2Fdownload%2Fjss-plugin-default-unit-10.7.1.tgz",
+      "integrity": "sha1-gmJw4u441wJKKBrGfDDWlE8SR4Y=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "jss": "10.7.1"
+      }
+    },
+    "jss-plugin-global": {
+      "version": "10.7.1",
+      "resolved": "https://registry.nlark.com/jss-plugin-global/download/jss-plugin-global-10.7.1.tgz?cache=0&sync_timestamp=1624885454257&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjss-plugin-global%2Fdownload%2Fjss-plugin-global-10.7.1.tgz",
+      "integrity": "sha1-lyXEbWYqrC5ZagqHQZRMBg4rkKE=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "jss": "10.7.1"
+      }
+    },
+    "jss-plugin-nested": {
+      "version": "10.7.1",
+      "resolved": "https://registry.nlark.com/jss-plugin-nested/download/jss-plugin-nested-10.7.1.tgz",
+      "integrity": "sha1-NVY6enEKRTB/1rl0L/raHXKmLrc=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "jss": "10.7.1",
+        "tiny-warning": "^1.0.2"
+      }
+    },
+    "jss-plugin-props-sort": {
+      "version": "10.7.1",
+      "resolved": "https://registry.nlark.com/jss-plugin-props-sort/download/jss-plugin-props-sort-10.7.1.tgz",
+      "integrity": "sha1-HRKyYEhUHtOi7Rtp9/wjFgVyg2I=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "jss": "10.7.1"
+      }
+    },
+    "jss-plugin-rule-value-function": {
+      "version": "10.7.1",
+      "resolved": "https://registry.nlark.com/jss-plugin-rule-value-function/download/jss-plugin-rule-value-function-10.7.1.tgz",
+      "integrity": "sha1-Ej63luuZgvjvp6fjYtrd2QwMaf4=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "jss": "10.7.1",
+        "tiny-warning": "^1.0.2"
+      }
+    },
+    "jss-plugin-vendor-prefixer": {
+      "version": "10.7.1",
+      "resolved": "https://registry.nlark.com/jss-plugin-vendor-prefixer/download/jss-plugin-vendor-prefixer-10.7.1.tgz?cache=0&sync_timestamp=1624885455366&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fjss-plugin-vendor-prefixer%2Fdownload%2Fjss-plugin-vendor-prefixer-10.7.1.tgz",
+      "integrity": "sha1-IXghvi1trO4x0tRkiGdgundC4Zo=",
+      "requires": {
+        "@babel/runtime": "^7.3.1",
+        "css-vendor": "^2.0.8",
+        "jss": "10.7.1"
+      }
+    },
     "jszip": {
       "version": "3.7.0",
       "resolved": "https://registry.nlark.com/jszip/download/jszip-3.7.0.tgz",
@@ -8530,7 +8638,8 @@
     "lines-and-columns": {
       "version": "1.1.6",
       "resolved": "https://registry.npm.taobao.org/lines-and-columns/download/lines-and-columns-1.1.6.tgz",
-      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA="
+      "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=",
+      "dev": true
     },
     "linkify-it": {
       "version": "3.0.2",
@@ -9160,6 +9269,7 @@
       "version": "1.1.5",
       "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.5.tgz?cache=0&sync_timestamp=1613857698573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.1.5.tgz",
       "integrity": "sha1-ud7qpfx/GEag+uzc7sE45XePU6w=",
+      "dev": true,
       "requires": {
         "call-bind": "^1.0.2",
         "define-properties": "^1.1.3"
@@ -9168,7 +9278,8 @@
     "object-keys": {
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/object-keys/download/object-keys-1.1.1.tgz",
-      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4="
+      "integrity": "sha1-HEfyct8nfzsdrwYWd9nILiMixg4=",
+      "dev": true
     },
     "object-visit": {
       "version": "1.0.1",
@@ -9467,7 +9578,8 @@
     "path-parse": {
       "version": "1.0.7",
       "resolved": "https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz",
-      "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU="
+      "integrity": "sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=",
+      "dev": true
     },
     "path-to-regexp": {
       "version": "1.8.0",
@@ -9486,11 +9598,6 @@
         }
       }
     },
-    "path-type": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-4.0.0.tgz?cache=0&sync_timestamp=1611752107592&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-type%2Fdownload%2Fpath-type-4.0.0.tgz",
-      "integrity": "sha1-hO0BwKe6OAr+CdkKjBgNzZ0DBDs="
-    },
     "pend": {
       "version": "1.2.0",
       "resolved": "https://registry.npm.taobao.org/pend/download/pend-1.2.0.tgz",
@@ -9618,9 +9725,9 @@
       }
     },
     "popper.js": {
-      "version": "1.16.1",
-      "resolved": "https://registry.npm.taobao.org/popper.js/download/popper.js-1.16.1.tgz",
-      "integrity": "sha1-KiI8s9x7YhPXQOQDcr5A3kPmWxs="
+      "version": "1.16.1-lts",
+      "resolved": "https://registry.npm.taobao.org/popper.js/download/popper.js-1.16.1-lts.tgz",
+      "integrity": "sha1-z2hHuAfaN5nYDuPW0vkN+KP1CwU="
     },
     "portfinder": {
       "version": "1.0.28",
@@ -9966,15 +10073,14 @@
       }
     },
     "react-transition-group": {
-      "version": "2.9.0",
-      "resolved": "https://registry.nlark.com/react-transition-group/download/react-transition-group-2.9.0.tgz?cache=0&sync_timestamp=1622301030407&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-transition-group%2Fdownload%2Freact-transition-group-2.9.0.tgz",
-      "integrity": "sha1-35zbAleWIRFRpDbGmo87l7WwfI0=",
-      "dev": true,
+      "version": "4.4.2",
+      "resolved": "https://registry.nlark.com/react-transition-group/download/react-transition-group-4.4.2.tgz?cache=0&sync_timestamp=1622301030407&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-transition-group%2Fdownload%2Freact-transition-group-4.4.2.tgz",
+      "integrity": "sha1-i1mlbwnO17VcvVPDZ2i5IokNVHA=",
       "requires": {
-        "dom-helpers": "^3.4.0",
+        "@babel/runtime": "^7.5.5",
+        "dom-helpers": "^5.0.1",
         "loose-envify": "^1.4.0",
-        "prop-types": "^15.6.2",
-        "react-lifecycles-compat": "^3.0.4"
+        "prop-types": "^15.6.2"
       }
     },
     "read-config-file": {
@@ -10114,6 +10220,7 @@
       "version": "1.3.1",
       "resolved": "https://registry.nlark.com/regexp.prototype.flags/download/regexp.prototype.flags-1.3.1.tgz",
       "integrity": "sha1-fvNSro0VnnWMDq3Kb4/LTu8HviY=",
+      "dev": true,
       "requires": {
         "call-bind": "^1.0.2",
         "define-properties": "^1.1.3"
@@ -10225,15 +10332,11 @@
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
       "dev": true
     },
-    "resize-observer-polyfill": {
-      "version": "1.5.1",
-      "resolved": "https://registry.nlark.com/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
-    },
     "resolve": {
       "version": "1.20.0",
       "resolved": "https://registry.nlark.com/resolve/download/resolve-1.20.0.tgz",
       "integrity": "sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=",
+      "dev": true,
       "requires": {
         "is-core-module": "^2.2.0",
         "path-parse": "^1.0.6"
@@ -10338,7 +10441,8 @@
     "safe-buffer": {
       "version": "5.1.2",
       "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
-      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+      "dev": true
     },
     "safe-regex": {
       "version": "1.1.0",
@@ -11466,8 +11570,7 @@
     "tiny-warning": {
       "version": "1.0.3",
       "resolved": "https://registry.npm.taobao.org/tiny-warning/download/tiny-warning-1.0.3.tgz",
-      "integrity": "sha1-lKMNtFPfTGQ9D9VmBg1gqHXYR1Q=",
-      "dev": true
+      "integrity": "sha1-lKMNtFPfTGQ9D9VmBg1gqHXYR1Q="
     },
     "tmp-promise": {
       "version": "3.0.2",
@@ -11507,7 +11610,8 @@
     "to-fast-properties": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-2.0.0.tgz",
-      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+      "dev": true
     },
     "to-object-path": {
       "version": "0.3.0",
@@ -11754,11 +11858,6 @@
         "mime-types": "~2.1.24"
       }
     },
-    "typed-styles": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npm.taobao.org/typed-styles/download/typed-styles-0.0.7.tgz",
-      "integrity": "sha1-kzkqAIeUxFlRGf9i3eaAnbxAo9k="
-    },
     "typedarray": {
       "version": "0.0.6",
       "resolved": "https://registry.npm.taobao.org/typedarray/download/typedarray-0.0.6.tgz",
@@ -13164,11 +13263,6 @@
       "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
       "dev": true
     },
-    "yaml": {
-      "version": "1.10.2",
-      "resolved": "https://registry.nlark.com/yaml/download/yaml-1.10.2.tgz?cache=0&sync_timestamp=1626517509077&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyaml%2Fdownload%2Fyaml-1.10.2.tgz",
-      "integrity": "sha1-IwHF/78StGfejaIzOkWeKeeSDks="
-    },
     "yargs": {
       "version": "16.2.0",
       "resolved": "https://registry.nlark.com/yargs/download/yargs-16.2.0.tgz?cache=0&sync_timestamp=1626358476652&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fyargs%2Fdownload%2Fyargs-16.2.0.tgz",
diff --git a/package.json b/package.json
index 501581a..5eff5fa 100644
--- a/package.json
+++ b/package.json
@@ -31,7 +31,6 @@
     "@babel/preset-env": "^7.14.8",
     "@babel/preset-stage-0": "^7.8.3",
     "@babel/preset-typescript": "^7.14.5",
-    "@blueprintjs/core": "^3.47.0",
     "@rollup/plugin-alias": "^3.1.4",
     "@rollup/plugin-commonjs": "^19.0.1",
     "@rollup/plugin-json": "^4.1.0",
@@ -89,13 +88,11 @@
     "vitejs-plugin-electron": "^0.1.3",
     "webpack": "^5.47.0",
     "webpack-cli": "^4.7.2",
-    "webpack-dev-server": "^3.11.2",
-    "windicss": "^3.1.3"
+    "webpack-dev-server": "^3.11.2"
   },
   "dependencies": {
-    "@blueprintjs/table": "^3.9.0",
-    "@emotion/react": "^11.4.0",
-    "@emotion/styled": "^11.3.0",
+    "@material-ui/core": "^4.12.3",
+    "@material-ui/icons": "^4.11.2",
     "framer-motion": "^4.1.17",
     "fs-extra": "^10.0.0",
     "normalize.css": "^8.0.1"
diff --git a/script/code/runVite.ts b/script/code/runVite.ts
index 0cfb429..73de679 100644
--- a/script/code/runVite.ts
+++ b/script/code/runVite.ts
@@ -22,7 +22,7 @@ export function devVite() {
       })
 
       viteProcess.stderr.on("data", data => {
-        logStats("vite err", data)
+        logStats("vite err", data.toString())
         reject()
       })
 
diff --git a/script/run.js b/script/run.js
index 71a4b3a..8668673 100644
--- a/script/run.js
+++ b/script/run.js
@@ -15,5 +15,5 @@ if (argv.build) {
     "PORT=3344",
     "NODE_ENV=development",
     "ts-node -r tsconfig-paths/register script/dev-runner --watch"
-  ])
+  ], { shell: true })
 }
diff --git a/src/render/assets/style/common.scss b/src/render/assets/style/common.scss
index f86dadf..f6db1b6 100644
--- a/src/render/assets/style/common.scss
+++ b/src/render/assets/style/common.scss
@@ -1,11 +1,7 @@
-@import "normalize.css";
 @import "./reset.scss";
 @import "./_font.scss";
-@import "@blueprintjs/core/lib/css/blueprint.css";
-@import "@blueprintjs/table/lib/css/table.css";
-@import "@blueprintjs/icons/lib/css/blueprint-icons.css";
 
-:focus{
+:focus {
   // 去除按钮点击时的蓝色边框
   outline: 0;
 }
@@ -18,13 +14,14 @@ textarea {
   font: 12px/1.5 tahoma, arial, "Hiragino Sans GB", "\5b8b\4f53", sans-serif;
 }
 
-body{
+body {
   // background-image: url("@/assets/images/0.jpg");
   // background-attachment: fixed;
   // background-position: center top 36px;
   // background-repeat: no-repeat;
   // background-size: cover;
 }
+
 a {
   // color: initial;
   display: inline-block;
@@ -36,7 +33,17 @@ a {
   @include clearfix;
 }
 
-.container{
+.container {
   max-width: 900px;
   margin: 0 auto;
 }
+
+.a-shadow {
+  //-moz-box-shadow: 3px 3px 4px #000;
+  //-webkit-box-shadow: 3px 3px 4px #000;
+  box-shadow: 0 0 4px #898989;
+  /* For IE 8 */
+  -ms-filter: "progid:DXImageTransform.Microsoft.Shadow(Strength=4,Direction=135, Color='#000000)";
+  /* For IE 5.5 - 7 */
+  filter: progid:DXImageTransform.Microsoft.Shadow(Strength=4, Direction=135, Color='#000000');
+}
diff --git a/src/render/index.html b/src/render/index.html
index 8cf9ba4..da3760f 100644
--- a/src/render/index.html
+++ b/src/render/index.html
@@ -7,6 +7,8 @@
     <!-- <meta http-equiv="Content-Security-Policy" content="default-src 'self' https: 'unsafe-inline'; style-src * 'unsafe-inline'; font-src * data:;"> -->
     <!-- <meta http-equiv="X-Content-Security-Policy" content="default-src 'self' https: 'unsafe-inline'; style-src * 'unsafe-inline'; font-src * data:;"> -->
     <!--  -->
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
+    <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
     <title><%- title %></title>
   </head>
   <body>
diff --git a/src/render/route.tsx b/src/render/route.tsx
index d82bf34..e9ed619 100644
--- a/src/render/route.tsx
+++ b/src/render/route.tsx
@@ -1,4 +1,5 @@
 import Page404 from "@/views/Auth/Page404"
+
 import Home from "@/views/Home"
 import Login from "@/views/Login"
 import React, { lazy } from "react"
@@ -58,8 +59,8 @@ const routesArray =  [
     children: [],
   },
   {
-    path: "/home",
-    component: Home,//lazy(() => import("@/views/Home")),
+    path: "/home", // Home,//
+    component: lazy(delay(() => import("@/views/Home"), 2000)),
     exact: true,
     // loading: () => <Loading color="blue"></Loading>,
     root: true,
diff --git a/src/render/views/Float/index.tsx b/src/render/views/Float/index.tsx
index 9e40472..25b126c 100644
--- a/src/render/views/Float/index.tsx
+++ b/src/render/views/Float/index.tsx
@@ -5,7 +5,7 @@ import useTime from "./useTime"
 import usePositionElectron from "./usePositionElectron"
 
 function Float(props: any) {
-  let [nowDate] = useTime()
+  let [nowDate] = useTime(false)
   usePositionElectron()
   return (
     <div className={style.clock}>
diff --git a/src/render/views/Home/index.module.scss b/src/render/views/Home/index.module.scss
index e7062d7..7483bd5 100644
--- a/src/render/views/Home/index.module.scss
+++ b/src/render/views/Home/index.module.scss
@@ -1,10 +1,60 @@
 .container {
   padding: 20px;
+
   .title {
     font-size: 25px;
     font-weight: bolder;
   }
+
   .opeation {
     margin: 20px 0;
   }
+
+  .panel {
+    padding: 10px 20px;
+    border-radius: 6px;
+
+    .panelTitle {
+      cursor: pointer;
+      margin-bottom: 10px;
+
+      .panelTitleName {
+        display: inline-block;
+        font-size: 25px;
+        font-weight: bolder;
+        position: relative;
+
+        &:before {
+          font-size: 20px;
+          content: "#";
+          opacity: 0;
+          position: absolute;
+          color: red;
+          right: 100%;
+          top: 50%;
+          transform: translateY(-50%);
+          transition: opacity .3s linear;
+        }
+
+        &:hover:before {
+          opacity: 1;
+        }
+      }
+
+      .panelTitleDesc {
+        display: inline-block;
+        font-size: 14px;
+        margin-left: 8px;
+      }
+    }
+
+    .cell {
+      border: 1px solid #999999;
+      padding: 5px 15px;
+      font-size: 14px;
+      border-radius: 5px;
+      cursor: pointer;
+      user-select: none;
+    }
+  }
 }
diff --git a/src/render/views/Home/index.tsx b/src/render/views/Home/index.tsx
index 44b2c71..76895e0 100644
--- a/src/render/views/Home/index.tsx
+++ b/src/render/views/Home/index.tsx
@@ -1,15 +1,41 @@
-import electron from "@/plugins/electron"
+import { Grid, Paper } from "@material-ui/core"
 import cs from "classnames"
-import _ from "lodash"
+import { motion } from "framer-motion"
 import React from "react"
 import style from "./index.module.scss"
 
+const MyComponent = ({ children }: any) => {
+  return (
+    <motion.div initial="hidden" animate="visible" variants={{
+      visible: { opacity: 1 },
+      hidden: { opacity: 0 }
+    }}>
+      {children}
+    </motion.div>
+  )
+}
+
 function Home() {
   return (
-    <div className={cs(style.container, "container")}>
-      add 
-    </div>
+    <MyComponent>
+      <div className={cs(style.container, "container")}>
+        <Paper className={cs(style.panel)} elevation={3} variant="outlined">
+          <div className={style.panelTitle}>
+            <div className={style.panelTitleName}>通用工具</div>
+            <div className={style.panelTitleDesc}>方便开发</div>
+          </div>
+          <Grid container style={{ textAlign: "center" }} spacing={2}>
+            <Grid item xs={12} sm={6} md={2}>
+              <div className={style.cell}>Base64</div>
+            </Grid>
+            <Grid item xs={12} sm={6} md={2}>
+              <div className={style.cell}>二维码生成</div>
+            </Grid>
+          </Grid>
+        </Paper>
+      </div>
+    </MyComponent>
   )
 }
 
-export default Home
\ No newline at end of file
+export default Home
diff --git a/src/render/views/Layout/index.tsx b/src/render/views/Layout/index.tsx
index 3cbbbd3..7a3ddde 100644
--- a/src/render/views/Layout/index.tsx
+++ b/src/render/views/Layout/index.tsx
@@ -1,12 +1,12 @@
-import { Icon, IconName } from "@blueprintjs/core"
-import route, { useRoute } from "@render/route"
-import React, { Fragment } from "react"
-import { NavLink, useLocation } from "react-router-dom"
-import style from "./index.module.scss"
+import * as Icon from "@material-ui/icons"
+import { useRoute } from "@render/route"
 import cs from "classnames"
+import React from "react"
+import { NavLink } from "react-router-dom"
+import style from "./index.module.scss"
+
+function ActionItem() {
 
-function ActionItem(){
-  
 }
 
 export default function Layout(props: any) {
@@ -17,24 +17,25 @@ export default function Layout(props: any) {
   }
 
   interface TList {
-    icon: IconName
+    icon: any
     path: string
     title: string
     text: string
   }
+
   const list: TList[] = [
     {
       path: "/home",
-      icon: "time",
+      icon: Icon.Home,
       title: "首页",
-      text: "首页",
+      text: "首页"
     },
     {
       path: "/about",
-      icon: "mugshot",
+      icon: Icon.Home,
       title: "添加闹钟",
-      text: "关于",
-    },
+      text: "关于"
+    }
   ]
 
   return (
@@ -44,7 +45,7 @@ export default function Layout(props: any) {
           {list.map((v, i) => (
             <NavLink key={i} replace to={v.path} style={{ display: "block" }}>
               <div className={style.leftItem} title={v.title}>
-                <Icon icon={v.icon} size={22} />
+                <v.icon style={{ fontSize: 22 }}/>
                 <div>{v.text}</div>
                 {v.path == curRoute.path && <div className={style.activeLine}></div>}
               </div>
@@ -53,10 +54,10 @@ export default function Layout(props: any) {
         </div>
         <div className={style.leftListBottom}>
           <div className={style.leftItem} title={"设置"}>
-            <Icon icon="settings" size={22} />
+            <Icon.Home style={{ fontSize: 22 }}/>
           </div>
           <div className={style.leftItem} title={"设置"}>
-            <Icon icon="settings" size={22} />
+            <Icon.Home style={{ fontSize: 22 }}/>
           </div>
         </div>
       </div>