From 8c024b2ac74adb87138d93769f7bea7f77a75e00 Mon Sep 17 00:00:00 2001
From: 1549469775 <1549469775@qq.com>
Date: Wed, 21 Jul 2021 17:52:17 +0800
Subject: [PATCH] add

---
 .prettierrc                  |   11 +
 pnpm-lock.yaml               | 1180 ++++++++++++++++++++++++++++++++++++++++++
 src/AppRouter.tsx            |   65 ++-
 src/assets/style/common.scss |   28 +-
 src/assets/style/global.scss |   15 +-
 src/route.tsx                |   45 ++
 src/ui/Auth.tsx              |   37 ++
 src/views/About/index.tsx    |   14 +-
 src/views/Auth/Page404.tsx   |   10 +
 src/views/Home/index.tsx     |   24 +-
 src/views/Layout/index.tsx   |   16 +-
 11 files changed, 1378 insertions(+), 67 deletions(-)
 create mode 100644 .prettierrc
 create mode 100644 pnpm-lock.yaml
 create mode 100644 src/route.tsx
 create mode 100644 src/ui/Auth.tsx
 create mode 100644 src/views/Auth/Page404.tsx

diff --git a/.prettierrc b/.prettierrc
new file mode 100644
index 0000000..4231fde
--- /dev/null
+++ b/.prettierrc
@@ -0,0 +1,11 @@
+{
+  "tabWidth": 2,
+  "useTabs": false,
+  "semi": false,
+  "singleQuote": false,
+  "TrailingCooma": "all",
+  "bracketSpacing": true,
+  "jsxBracketSameLine": false,
+  "arrowParens": "avoid",
+  "printWidth": 140
+}
\ No newline at end of file
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..4271533
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,1180 @@
+lockfileVersion: 5.3
+
+specifiers:
+  '@types/node': ^15.12.5
+  '@types/react': ^17.0.0
+  '@types/react-dom': ^17.0.0
+  '@types/react-router-dom': ^5.1.7
+  '@vitejs/plugin-react-refresh': ^1.3.1
+  classnames: ^2.3.1
+  react: ^17.0.0
+  react-dom: ^17.0.0
+  react-router-dom: ^5.2.0
+  sass: ^1.35.1
+  typescript: ^4.3.2
+  vite: ^2.3.8
+  vite-plugin-windicss: ^1.2.0
+  windicss: ^3.1.3
+
+dependencies:
+  classnames: 2.3.1
+  react: registry.nlark.com/react/17.0.2
+  react-dom: registry.nlark.com/react-dom/17.0.2_react@17.0.2
+  react-router-dom: registry.nlark.com/react-router-dom/5.2.0_react@17.0.2
+
+devDependencies:
+  '@types/node': registry.nlark.com/@types/node/15.14.2
+  '@types/react': registry.nlark.com/@types/react/17.0.14
+  '@types/react-dom': registry.nlark.com/@types/react-dom/17.0.9
+  '@types/react-router-dom': registry.nlark.com/@types/react-router-dom/5.1.8
+  '@vitejs/plugin-react-refresh': registry.nlark.com/@vitejs/plugin-react-refresh/1.3.5
+  sass: registry.nlark.com/sass/1.35.2
+  typescript: registry.nlark.com/typescript/4.3.5
+  vite: registry.nlark.com/vite/2.4.3
+  vite-plugin-windicss: registry.nlark.com/vite-plugin-windicss/1.2.5_vite@2.4.3
+  windicss: registry.nlark.com/windicss/3.1.5
+
+packages:
+
+  /anymatch/3.1.2:
+    resolution: {integrity: sha1-wFV8CWrzLxBhmPT04qODU343hxY=, tarball: anymatch/download/anymatch-3.1.2.tgz?cache=0&sync_timestamp=1617748091214&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fanymatch%2Fdownload%2Fanymatch-3.1.2.tgz}
+    engines: {node: '>= 8'}
+    dependencies:
+      normalize-path: 3.0.0
+      picomatch: registry.nlark.com/picomatch/2.3.0
+    dev: true
+
+  /binary-extensions/2.2.0:
+    resolution: {integrity: sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=, tarball: binary-extensions/download/binary-extensions-2.2.0.tgz}
+    engines: {node: '>=8'}
+    dev: true
+
+  /braces/3.0.2:
+    resolution: {integrity: sha1-NFThpGLujVmeI23zNs2epPiv4Qc=, tarball: braces/download/braces-3.0.2.tgz}
+    engines: {node: '>=8'}
+    dependencies:
+      fill-range: 7.0.1
+    dev: true
+
+  /classnames/2.3.1:
+    resolution: {integrity: sha1-38+jiR4wbsHa0QXQ6I9EF7hTXo4=, tarball: classnames/download/classnames-2.3.1.tgz}
+    dev: false
+
+  /color-convert/1.9.3:
+    resolution: {integrity: sha1-u3GFBpDh8TZWfeYp0tVHHe2kweg=, tarball: color-convert/download/color-convert-1.9.3.tgz}
+    dependencies:
+      color-name: 1.1.3
+    dev: true
+
+  /color-convert/2.0.1:
+    resolution: {integrity: sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=, tarball: color-convert/download/color-convert-2.0.1.tgz}
+    engines: {node: '>=7.0.0'}
+    dependencies:
+      color-name: 1.1.4
+    dev: true
+
+  /color-name/1.1.3:
+    resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=, tarball: color-name/download/color-name-1.1.3.tgz}
+    dev: true
+
+  /color-name/1.1.4:
+    resolution: {integrity: sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=, tarball: color-name/download/color-name-1.1.4.tgz}
+    dev: true
+
+  /colorette/1.2.2:
+    resolution: {integrity: sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ=, tarball: colorette/download/colorette-1.2.2.tgz}
+    dev: true
+
+  /escalade/3.1.1:
+    resolution: {integrity: sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=, tarball: escalade/download/escalade-3.1.1.tgz}
+    engines: {node: '>=6'}
+    dev: true
+
+  /escape-string-regexp/1.0.5:
+    resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=, tarball: escape-string-regexp/download/escape-string-regexp-1.0.5.tgz}
+    engines: {node: '>=0.8.0'}
+    dev: true
+
+  /fill-range/7.0.1:
+    resolution: {integrity: sha1-GRmmp8df44ssfHflGYU12prN2kA=, tarball: fill-range/download/fill-range-7.0.1.tgz}
+    engines: {node: '>=8'}
+    dependencies:
+      to-regex-range: 5.0.1
+    dev: true
+
+  /fsevents/2.3.2:
+    resolution: {integrity: sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro=, tarball: fsevents/download/fsevents-2.3.2.tgz}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    dev: true
+    optional: true
+
+  /function-bind/1.1.1:
+    resolution: {integrity: sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=, tarball: function-bind/download/function-bind-1.1.1.tgz}
+    dev: true
+
+  /gensync/1.0.0-beta.2:
+    resolution: {integrity: sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=, tarball: gensync/download/gensync-1.0.0-beta.2.tgz}
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  /has/1.0.3:
+    resolution: {integrity: sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=, tarball: has/download/has-1.0.3.tgz}
+    engines: {node: '>= 0.4.0'}
+    dependencies:
+      function-bind: 1.1.1
+    dev: true
+
+  /hoist-non-react-statics/3.3.2:
+    resolution: {integrity: sha1-7OCsr3HWLClpwuxZ/v9CpLGoW0U=, tarball: hoist-non-react-statics/download/hoist-non-react-statics-3.3.2.tgz}
+    dependencies:
+      react-is: registry.nlark.com/react-is/16.13.1
+    dev: false
+
+  /is-binary-path/2.1.0:
+    resolution: {integrity: sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=, tarball: is-binary-path/download/is-binary-path-2.1.0.tgz}
+    engines: {node: '>=8'}
+    dependencies:
+      binary-extensions: 2.2.0
+    dev: true
+
+  /is-extglob/2.1.1:
+    resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=, tarball: is-extglob/download/is-extglob-2.1.1.tgz}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /is-glob/4.0.1:
+    resolution: {integrity: sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=, tarball: is-glob/download/is-glob-4.0.1.tgz}
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      is-extglob: 2.1.1
+    dev: true
+
+  /is-number/7.0.0:
+    resolution: {integrity: sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=, tarball: is-number/download/is-number-7.0.0.tgz}
+    engines: {node: '>=0.12.0'}
+    dev: true
+
+  /isarray/0.0.1:
+    resolution: {integrity: sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=, tarball: isarray/download/isarray-0.0.1.tgz}
+    dev: false
+
+  /jsesc/2.5.2:
+    resolution: {integrity: sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=, tarball: jsesc/download/jsesc-2.5.2.tgz}
+    engines: {node: '>=4'}
+    hasBin: true
+    dev: true
+
+  /json5/2.2.0:
+    resolution: {integrity: sha1-Lf7+cgxrpSXZ69kJlQ8FFTFsiaM=, tarball: json5/download/json5-2.2.0.tgz}
+    engines: {node: '>=6'}
+    hasBin: true
+    dependencies:
+      minimist: 1.2.5
+    dev: true
+
+  /loose-envify/1.4.0:
+    resolution: {integrity: sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=, tarball: loose-envify/download/loose-envify-1.4.0.tgz}
+    hasBin: true
+    dependencies:
+      js-tokens: registry.nlark.com/js-tokens/4.0.0
+    dev: false
+
+  /magic-string/0.25.7:
+    resolution: {integrity: sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=, tarball: magic-string/download/magic-string-0.25.7.tgz}
+    dependencies:
+      sourcemap-codec: 1.4.8
+    dev: true
+
+  /merge2/1.4.1:
+    resolution: {integrity: sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=, tarball: merge2/download/merge2-1.4.1.tgz}
+    engines: {node: '>= 8'}
+    dev: true
+
+  /micromatch/4.0.4:
+    resolution: {integrity: sha1-iW1Rnf6dsl/OlM63pQCRm/iB6/k=, tarball: micromatch/download/micromatch-4.0.4.tgz}
+    engines: {node: '>=8.6'}
+    dependencies:
+      braces: 3.0.2
+      picomatch: registry.nlark.com/picomatch/2.3.0
+    dev: true
+
+  /mini-create-react-context/0.4.1_prop-types@15.7.2+react@17.0.2:
+    resolution: {integrity: sha1-ByFxVhv9ySLaCKYMIZekl8wtHV4=, tarball: mini-create-react-context/download/mini-create-react-context-0.4.1.tgz}
+    peerDependencies:
+      prop-types: ^15.0.0
+      react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0
+    dependencies:
+      '@babel/runtime': registry.nlark.com/@babel/runtime/7.14.8
+      prop-types: 15.7.2
+      react: registry.nlark.com/react/17.0.2
+      tiny-warning: 1.0.3
+    dev: false
+
+  /minimist/1.2.5:
+    resolution: {integrity: sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=, tarball: minimist/download/minimist-1.2.5.tgz}
+    dev: true
+
+  /ms/2.1.2:
+    resolution: {integrity: sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=, tarball: ms/download/ms-2.1.2.tgz}
+    dev: true
+
+  /normalize-path/3.0.0:
+    resolution: {integrity: sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=, tarball: normalize-path/download/normalize-path-3.0.0.tgz}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /object-assign/4.1.1:
+    resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=, tarball: object-assign/download/object-assign-4.1.1.tgz}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
+  /path-to-regexp/1.8.0:
+    resolution: {integrity: sha1-iHs7qdhDk+h6CgufTLdWGYtTVIo=, tarball: path-to-regexp/download/path-to-regexp-1.8.0.tgz}
+    dependencies:
+      isarray: 0.0.1
+    dev: false
+
+  /prop-types/15.7.2:
+    resolution: {integrity: sha1-UsQedbjIfnK52TYOAga5ncv/psU=, tarball: prop-types/download/prop-types-15.7.2.tgz}
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+      react-is: registry.nlark.com/react-is/16.13.1
+    dev: false
+
+  /queue-microtask/1.2.3:
+    resolution: {integrity: sha1-SSkii7xyTfrEPg77BYyve2z7YkM=, tarball: queue-microtask/download/queue-microtask-1.2.3.tgz}
+    dev: true
+
+  /readdirp/3.6.0:
+    resolution: {integrity: sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=, tarball: readdirp/download/readdirp-3.6.0.tgz}
+    engines: {node: '>=8.10.0'}
+    dependencies:
+      picomatch: registry.nlark.com/picomatch/2.3.0
+    dev: true
+
+  /regenerator-runtime/0.13.7:
+    resolution: {integrity: sha1-ysLazIoepnX+qrrriugziYrkb1U=, tarball: regenerator-runtime/download/regenerator-runtime-0.13.7.tgz}
+    dev: false
+
+  /resolve-pathname/3.0.0:
+    resolution: {integrity: sha1-mdAiJNPPJjaJvsuzk7xWAxMCXc0=, tarball: resolve-pathname/download/resolve-pathname-3.0.0.tgz}
+    dev: false
+
+  /resolve/1.20.0:
+    resolution: {integrity: sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU=, tarball: resolve/download/resolve-1.20.0.tgz}
+    dependencies:
+      is-core-module: registry.nlark.com/is-core-module/2.5.0
+      path-parse: registry.nlark.com/path-parse/1.0.7
+    dev: true
+
+  /reusify/1.0.4:
+    resolution: {integrity: sha1-kNo4Kx4SbvwCFG6QhFqI2xKSXXY=, tarball: reusify/download/reusify-1.0.4.tgz}
+    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+    dev: true
+
+  /run-parallel/1.2.0:
+    resolution: {integrity: sha1-ZtE2jae9+SHrnZW9GpIp5/IaQ+4=, tarball: run-parallel/download/run-parallel-1.2.0.tgz}
+    dependencies:
+      queue-microtask: 1.2.3
+    dev: true
+
+  /safe-buffer/5.1.2:
+    resolution: {integrity: sha1-mR7GnSluAxN0fVm9/St0XDX4go0=, tarball: safe-buffer/download/safe-buffer-5.1.2.tgz}
+    dev: true
+
+  /semver/6.3.0:
+    resolution: {integrity: sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=, tarball: semver/download/semver-6.3.0.tgz}
+    hasBin: true
+    dev: true
+
+  /source-map/0.5.7:
+    resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=, tarball: source-map/download/source-map-0.5.7.tgz}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /sourcemap-codec/1.4.8:
+    resolution: {integrity: sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=, tarball: sourcemap-codec/download/sourcemap-codec-1.4.8.tgz}
+    dev: true
+
+  /tiny-invariant/1.1.0:
+    resolution: {integrity: sha1-Y0xfjv3CdxS384bDXmdgmR0jCHU=, tarball: tiny-invariant/download/tiny-invariant-1.1.0.tgz}
+    dev: false
+
+  /tiny-warning/1.0.3:
+    resolution: {integrity: sha1-lKMNtFPfTGQ9D9VmBg1gqHXYR1Q=, tarball: tiny-warning/download/tiny-warning-1.0.3.tgz}
+    dev: false
+
+  /to-fast-properties/2.0.0:
+    resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=, tarball: to-fast-properties/download/to-fast-properties-2.0.0.tgz}
+    engines: {node: '>=4'}
+    dev: true
+
+  /to-regex-range/5.0.1:
+    resolution: {integrity: sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=, tarball: to-regex-range/download/to-regex-range-5.0.1.tgz}
+    engines: {node: '>=8.0'}
+    dependencies:
+      is-number: 7.0.0
+    dev: true
+
+  /value-equal/1.0.1:
+    resolution: {integrity: sha1-Hgt5THNMXAyt4XnEN9NW2TGjTWw=, tarball: value-equal/download/value-equal-1.0.1.tgz}
+    dev: false
+
+  registry.nlark.com/@antfu/utils/0.2.4:
+    resolution: {integrity: sha1-x9M/xvqg06b8wlVWc/XpsZwPvBU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@antfu/utils/download/@antfu/utils-0.2.4.tgz}
+    name: '@antfu/utils'
+    version: 0.2.4
+    dependencies:
+      '@types/throttle-debounce': registry.nlark.com/@types/throttle-debounce/2.1.0
+    dev: true
+
+  registry.nlark.com/@babel/code-frame/7.14.5:
+    resolution: {integrity: sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz}
+    name: '@babel/code-frame'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/highlight': registry.nlark.com/@babel/highlight/7.14.5
+    dev: true
+
+  registry.nlark.com/@babel/compat-data/7.14.7:
+    resolution: {integrity: sha1-ewR9ejqJpn0iWNxh9gTwmPG8fgg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.14.7.tgz}
+    name: '@babel/compat-data'
+    version: 7.14.7
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  registry.nlark.com/@babel/core/7.14.8:
+    resolution: {integrity: sha1-IM33yEtdhtg/rIcQqLxgWnuj8BA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/core/download/@babel/core-7.14.8.tgz}
+    name: '@babel/core'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': registry.nlark.com/@babel/code-frame/7.14.5
+      '@babel/generator': registry.nlark.com/@babel/generator/7.14.8
+      '@babel/helper-compilation-targets': registry.nlark.com/@babel/helper-compilation-targets/7.14.5_@babel+core@7.14.8
+      '@babel/helper-module-transforms': registry.nlark.com/@babel/helper-module-transforms/7.14.8
+      '@babel/helpers': registry.nlark.com/@babel/helpers/7.14.8
+      '@babel/parser': registry.nlark.com/@babel/parser/7.14.8
+      '@babel/template': registry.nlark.com/@babel/template/7.14.5
+      '@babel/traverse': registry.nlark.com/@babel/traverse/7.14.8
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+      convert-source-map: registry.nlark.com/convert-source-map/1.8.0
+      debug: registry.nlark.com/debug/4.3.2
+      gensync: 1.0.0-beta.2
+      json5: 2.2.0
+      semver: 6.3.0
+      source-map: 0.5.7
+    dev: true
+
+  registry.nlark.com/@babel/generator/7.14.8:
+    resolution: {integrity: sha1-v4b9avls87dDlajKQJUV+JQj4HA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/generator/download/@babel/generator-7.14.8.tgz}
+    name: '@babel/generator'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+      jsesc: 2.5.2
+      source-map: 0.5.7
+    dev: true
+
+  registry.nlark.com/@babel/helper-compilation-targets/7.14.5_@babel+core@7.14.8:
+    resolution: {integrity: sha1-epnF0JZ5Eely/iw0EffVtJhJjs8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.14.5.tgz}
+    id: registry.nlark.com/@babel/helper-compilation-targets/7.14.5
+    name: '@babel/helper-compilation-targets'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+    dependencies:
+      '@babel/compat-data': registry.nlark.com/@babel/compat-data/7.14.7
+      '@babel/core': registry.nlark.com/@babel/core/7.14.8
+      '@babel/helper-validator-option': registry.nlark.com/@babel/helper-validator-option/7.14.5
+      browserslist: registry.nlark.com/browserslist/4.16.6
+      semver: 6.3.0
+    dev: true
+
+  registry.nlark.com/@babel/helper-function-name/7.14.5:
+    resolution: {integrity: sha1-ieLEdJcvFdjiM7Uu6MSA4s/NUMQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-function-name/download/@babel/helper-function-name-7.14.5.tgz}
+    name: '@babel/helper-function-name'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-get-function-arity': registry.nlark.com/@babel/helper-get-function-arity/7.14.5
+      '@babel/template': registry.nlark.com/@babel/template/7.14.5
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-get-function-arity/7.14.5:
+    resolution: {integrity: sha1-Jfv6V5sJN+7h87gF7OTOOYxDGBU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.14.5.tgz}
+    name: '@babel/helper-get-function-arity'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-hoist-variables/7.14.5:
+    resolution: {integrity: sha1-4N0nwzp45XfXyIhJFqPn7x98f40=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.14.5.tgz}
+    name: '@babel/helper-hoist-variables'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-member-expression-to-functions/7.14.7:
+    resolution: {integrity: sha1-l+ViRL65QhH+J3vYGOOjKcZveXA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.14.7.tgz}
+    name: '@babel/helper-member-expression-to-functions'
+    version: 7.14.7
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-module-imports/7.14.5:
+    resolution: {integrity: sha1-bRpE32o4yVeqfDEtoHZCnxG0IvM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-module-imports/download/@babel/helper-module-imports-7.14.5.tgz}
+    name: '@babel/helper-module-imports'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-module-transforms/7.14.8:
+    resolution: {integrity: sha1-1Ceffj/V9NXTQtgzrzbU3YfX3Ek=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.14.8.tgz}
+    name: '@babel/helper-module-transforms'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-module-imports': registry.nlark.com/@babel/helper-module-imports/7.14.5
+      '@babel/helper-replace-supers': registry.nlark.com/@babel/helper-replace-supers/7.14.5
+      '@babel/helper-simple-access': registry.nlark.com/@babel/helper-simple-access/7.14.8
+      '@babel/helper-split-export-declaration': registry.nlark.com/@babel/helper-split-export-declaration/7.14.5
+      '@babel/helper-validator-identifier': registry.nlark.com/@babel/helper-validator-identifier/7.14.8
+      '@babel/template': registry.nlark.com/@babel/template/7.14.5
+      '@babel/traverse': registry.nlark.com/@babel/traverse/7.14.8
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-optimise-call-expression/7.14.5:
+    resolution: {integrity: sha1-8nOVqGGeBmWz8DZM3bQcJdcbSZw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.14.5.tgz}
+    name: '@babel/helper-optimise-call-expression'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-plugin-utils/7.14.5:
+    resolution: {integrity: sha1-WsgizpfuxGdBq3ClF5ceRDpwxak=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.14.5.tgz}
+    name: '@babel/helper-plugin-utils'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  registry.nlark.com/@babel/helper-replace-supers/7.14.5:
+    resolution: {integrity: sha1-DswLA8Qc1We0Ak6gFhNMKEFKu5Q=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.14.5.tgz}
+    name: '@babel/helper-replace-supers'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-member-expression-to-functions': registry.nlark.com/@babel/helper-member-expression-to-functions/7.14.7
+      '@babel/helper-optimise-call-expression': registry.nlark.com/@babel/helper-optimise-call-expression/7.14.5
+      '@babel/traverse': registry.nlark.com/@babel/traverse/7.14.8
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-simple-access/7.14.8:
+    resolution: {integrity: sha1-guH+wGRKfndcdNMF8hLDn4/nOSQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-simple-access/download/@babel/helper-simple-access-7.14.8.tgz}
+    name: '@babel/helper-simple-access'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-split-export-declaration/7.14.5:
+    resolution: {integrity: sha1-IrI6VO9RwrdgXYUZMMGXbdC8aTo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.14.5.tgz}
+    name: '@babel/helper-split-export-declaration'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/helper-validator-identifier/7.14.8:
+    resolution: {integrity: sha1-Mr4zp1bynieKDWRPoIosng+Io0w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.8.tgz}
+    name: '@babel/helper-validator-identifier'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  registry.nlark.com/@babel/helper-validator-option/7.14.5:
+    resolution: {integrity: sha1-bnKh//GNXfy4eOHmLxoCHEty1aM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helper-validator-option/download/@babel/helper-validator-option-7.14.5.tgz}
+    name: '@babel/helper-validator-option'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dev: true
+
+  registry.nlark.com/@babel/helpers/7.14.8:
+    resolution: {integrity: sha1-g5+I9GMCWIbP9/haNSlwB+LaG3c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/helpers/download/@babel/helpers-7.14.8.tgz}
+    name: '@babel/helpers'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/template': registry.nlark.com/@babel/template/7.14.5
+      '@babel/traverse': registry.nlark.com/@babel/traverse/7.14.8
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/highlight/7.14.5:
+    resolution: {integrity: sha1-aGGlLwOWZAUAH2qlNKAaJNmejNk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/highlight/download/@babel/highlight-7.14.5.tgz}
+    name: '@babel/highlight'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-validator-identifier': registry.nlark.com/@babel/helper-validator-identifier/7.14.8
+      chalk: registry.nlark.com/chalk/2.4.2
+      js-tokens: registry.nlark.com/js-tokens/4.0.0
+    dev: true
+
+  registry.nlark.com/@babel/parser/7.14.8:
+    resolution: {integrity: sha1-Zv1BZmste4QL1azn90FtWsYCCNQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/parser/download/@babel/parser-7.14.8.tgz}
+    name: '@babel/parser'
+    version: 7.14.8
+    engines: {node: '>=6.0.0'}
+    hasBin: true
+    dev: true
+
+  registry.nlark.com/@babel/plugin-transform-react-jsx-self/7.14.5_@babel+core@7.14.8:
+    resolution: {integrity: sha1-cDtdHtzNNCF5wqme6McGXCtEA8w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/plugin-transform-react-jsx-self/download/@babel/plugin-transform-react-jsx-self-7.14.5.tgz}
+    id: registry.nlark.com/@babel/plugin-transform-react-jsx-self/7.14.5
+    name: '@babel/plugin-transform-react-jsx-self'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': registry.nlark.com/@babel/core/7.14.8
+      '@babel/helper-plugin-utils': registry.nlark.com/@babel/helper-plugin-utils/7.14.5
+    dev: true
+
+  registry.nlark.com/@babel/plugin-transform-react-jsx-source/7.14.5_@babel+core@7.14.8:
+    resolution: {integrity: sha1-efco5g5tvTGiuGCwv2yXZZGKzx0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/plugin-transform-react-jsx-source/download/@babel/plugin-transform-react-jsx-source-7.14.5.tgz}
+    id: registry.nlark.com/@babel/plugin-transform-react-jsx-source/7.14.5
+    name: '@babel/plugin-transform-react-jsx-source'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+    dependencies:
+      '@babel/core': registry.nlark.com/@babel/core/7.14.8
+      '@babel/helper-plugin-utils': registry.nlark.com/@babel/helper-plugin-utils/7.14.5
+    dev: true
+
+  registry.nlark.com/@babel/runtime/7.14.8:
+    resolution: {integrity: sha1-cRmlb0IQGIUmlCkLn5FICXORtEY=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/runtime/download/@babel/runtime-7.14.8.tgz}
+    name: '@babel/runtime'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      regenerator-runtime: 0.13.7
+    dev: false
+
+  registry.nlark.com/@babel/template/7.14.5:
+    resolution: {integrity: sha1-qbydizM1T/blWpxg0RCSAKaJdPQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/template/download/@babel/template-7.14.5.tgz}
+    name: '@babel/template'
+    version: 7.14.5
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': registry.nlark.com/@babel/code-frame/7.14.5
+      '@babel/parser': registry.nlark.com/@babel/parser/7.14.8
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+    dev: true
+
+  registry.nlark.com/@babel/traverse/7.14.8:
+    resolution: {integrity: sha1-wCU/Amd8XeGo/532sKrL7H2hqM4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/traverse/download/@babel/traverse-7.14.8.tgz}
+    name: '@babel/traverse'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/code-frame': registry.nlark.com/@babel/code-frame/7.14.5
+      '@babel/generator': registry.nlark.com/@babel/generator/7.14.8
+      '@babel/helper-function-name': registry.nlark.com/@babel/helper-function-name/7.14.5
+      '@babel/helper-hoist-variables': registry.nlark.com/@babel/helper-hoist-variables/7.14.5
+      '@babel/helper-split-export-declaration': registry.nlark.com/@babel/helper-split-export-declaration/7.14.5
+      '@babel/parser': registry.nlark.com/@babel/parser/7.14.8
+      '@babel/types': registry.nlark.com/@babel/types/7.14.8
+      debug: registry.nlark.com/debug/4.3.2
+      globals: registry.nlark.com/globals/11.12.0
+    dev: true
+
+  registry.nlark.com/@babel/types/7.14.8:
+    resolution: {integrity: sha1-OBCd6PytwGQV+9m3TfAGXU1Bxyg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@babel/types/download/@babel/types-7.14.8.tgz?cache=0&sync_timestamp=1626825492100&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.14.8.tgz}
+    name: '@babel/types'
+    version: 7.14.8
+    engines: {node: '>=6.9.0'}
+    dependencies:
+      '@babel/helper-validator-identifier': registry.nlark.com/@babel/helper-validator-identifier/7.14.8
+      to-fast-properties: 2.0.0
+    dev: true
+
+  registry.nlark.com/@nodelib/fs.scandir/2.1.5:
+    resolution: {integrity: sha1-dhnC6yGyVIP20WdUi0z9WnSIw9U=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@nodelib/fs.scandir/download/@nodelib/fs.scandir-2.1.5.tgz?cache=0&sync_timestamp=1622793808741&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.scandir%2Fdownload%2F%40nodelib%2Ffs.scandir-2.1.5.tgz}
+    name: '@nodelib/fs.scandir'
+    version: 2.1.5
+    engines: {node: '>= 8'}
+    dependencies:
+      '@nodelib/fs.stat': registry.nlark.com/@nodelib/fs.stat/2.0.5
+      run-parallel: 1.2.0
+    dev: true
+
+  registry.nlark.com/@nodelib/fs.stat/2.0.5:
+    resolution: {integrity: sha1-W9Jir5Tp0lvR5xsF3u1Eh2oiLos=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@nodelib/fs.stat/download/@nodelib/fs.stat-2.0.5.tgz?cache=0&sync_timestamp=1622793808360&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40nodelib%2Ffs.stat%2Fdownload%2F%40nodelib%2Ffs.stat-2.0.5.tgz}
+    name: '@nodelib/fs.stat'
+    version: 2.0.5
+    engines: {node: '>= 8'}
+    dev: true
+
+  registry.nlark.com/@nodelib/fs.walk/1.2.8:
+    resolution: {integrity: sha1-6Vc36LtnRt3t9pxVaVNJTxlv5po=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@nodelib/fs.walk/download/@nodelib/fs.walk-1.2.8.tgz}
+    name: '@nodelib/fs.walk'
+    version: 1.2.8
+    engines: {node: '>= 8'}
+    dependencies:
+      '@nodelib/fs.scandir': registry.nlark.com/@nodelib/fs.scandir/2.1.5
+      fastq: registry.nlark.com/fastq/1.11.1
+    dev: true
+
+  registry.nlark.com/@rollup/pluginutils/4.1.1:
+    resolution: {integrity: sha1-HU2obdTt7RVlalfZM/2iuaCNR+w=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@rollup/pluginutils/download/@rollup/pluginutils-4.1.1.tgz}
+    name: '@rollup/pluginutils'
+    version: 4.1.1
+    engines: {node: '>= 8.0.0'}
+    dependencies:
+      estree-walker: registry.nlark.com/estree-walker/2.0.2
+      picomatch: registry.nlark.com/picomatch/2.3.0
+    dev: true
+
+  registry.nlark.com/@types/history/4.7.9:
+    resolution: {integrity: sha1-HPttYO84IsWJ8Y5w+LEvmijOhyQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/history/download/@types/history-4.7.9.tgz}
+    name: '@types/history'
+    version: 4.7.9
+    dev: true
+
+  registry.nlark.com/@types/node/15.14.2:
+    resolution: {integrity: sha1-evirIBVlhvB29HYLwbPF3f/9H/I=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/node/download/@types/node-15.14.2.tgz}
+    name: '@types/node'
+    version: 15.14.2
+    dev: true
+
+  registry.nlark.com/@types/prop-types/15.7.4:
+    resolution: {integrity: sha1-/PcgXCXf95Xuea8eMNosl5CAjxE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/prop-types/download/@types/prop-types-15.7.4.tgz}
+    name: '@types/prop-types'
+    version: 15.7.4
+    dev: true
+
+  registry.nlark.com/@types/react-dom/17.0.9:
+    resolution: {integrity: sha1-RBqYHanXvhFwQuGm/T2sSzD1Wt0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/react-dom/download/@types/react-dom-17.0.9.tgz}
+    name: '@types/react-dom'
+    version: 17.0.9
+    dependencies:
+      '@types/react': registry.nlark.com/@types/react/17.0.14
+    dev: true
+
+  registry.nlark.com/@types/react-router-dom/5.1.8:
+    resolution: {integrity: sha1-vz4cgUmz1i6qIG1YWZ3oLfAkEZI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/react-router-dom/download/@types/react-router-dom-5.1.8.tgz}
+    name: '@types/react-router-dom'
+    version: 5.1.8
+    dependencies:
+      '@types/history': registry.nlark.com/@types/history/4.7.9
+      '@types/react': registry.nlark.com/@types/react/17.0.14
+      '@types/react-router': registry.nlark.com/@types/react-router/5.1.16
+    dev: true
+
+  registry.nlark.com/@types/react-router/5.1.16:
+    resolution: {integrity: sha1-87oEX7lmNOOLIVMcSC+a6zdgipk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/react-router/download/@types/react-router-5.1.16.tgz}
+    name: '@types/react-router'
+    version: 5.1.16
+    dependencies:
+      '@types/history': registry.nlark.com/@types/history/4.7.9
+      '@types/react': registry.nlark.com/@types/react/17.0.14
+    dev: true
+
+  registry.nlark.com/@types/react/17.0.14:
+    resolution: {integrity: sha1-8GKXYcoClFxOj+qZuBd/TFxh+w8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/react/download/@types/react-17.0.14.tgz}
+    name: '@types/react'
+    version: 17.0.14
+    dependencies:
+      '@types/prop-types': registry.nlark.com/@types/prop-types/15.7.4
+      '@types/scheduler': registry.nlark.com/@types/scheduler/0.16.2
+      csstype: registry.nlark.com/csstype/3.0.8
+    dev: true
+
+  registry.nlark.com/@types/scheduler/0.16.2:
+    resolution: {integrity: sha1-GmL4lSVyPd4kuhsBsJK/XfitTTk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/scheduler/download/@types/scheduler-0.16.2.tgz}
+    name: '@types/scheduler'
+    version: 0.16.2
+    dev: true
+
+  registry.nlark.com/@types/throttle-debounce/2.1.0:
+    resolution: {integrity: sha1-HD32JL/Eti+ZLTASuExW1B6rN3Y=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@types/throttle-debounce/download/@types/throttle-debounce-2.1.0.tgz}
+    name: '@types/throttle-debounce'
+    version: 2.1.0
+    dev: true
+
+  registry.nlark.com/@vitejs/plugin-react-refresh/1.3.5:
+    resolution: {integrity: sha1-vkflbZllQjloyKay1i5QFOHiRHg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@vitejs/plugin-react-refresh/download/@vitejs/plugin-react-refresh-1.3.5.tgz}
+    name: '@vitejs/plugin-react-refresh'
+    version: 1.3.5
+    engines: {node: '>=12.0.0'}
+    dependencies:
+      '@babel/core': registry.nlark.com/@babel/core/7.14.8
+      '@babel/plugin-transform-react-jsx-self': registry.nlark.com/@babel/plugin-transform-react-jsx-self/7.14.5_@babel+core@7.14.8
+      '@babel/plugin-transform-react-jsx-source': registry.nlark.com/@babel/plugin-transform-react-jsx-source/7.14.5_@babel+core@7.14.8
+      '@rollup/pluginutils': registry.nlark.com/@rollup/pluginutils/4.1.1
+      react-refresh: registry.nlark.com/react-refresh/0.10.0
+    dev: true
+
+  registry.nlark.com/@windicss/config/1.2.5:
+    resolution: {integrity: sha1-G8jhdai4y/LhvbZ3aetX4qslNvs=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@windicss/config/download/@windicss/config-1.2.5.tgz}
+    name: '@windicss/config'
+    version: 1.2.5
+    dependencies:
+      debug: registry.nlark.com/debug/4.3.2
+      jiti: registry.nlark.com/jiti/1.10.1
+      windicss: registry.nlark.com/windicss/3.1.5
+    dev: true
+
+  registry.nlark.com/@windicss/plugin-utils/1.2.5:
+    resolution: {integrity: sha1-YLq5mbiU9ROFLrz0oBEwZrhvGTg=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/@windicss/plugin-utils/download/@windicss/plugin-utils-1.2.5.tgz}
+    name: '@windicss/plugin-utils'
+    version: 1.2.5
+    dependencies:
+      '@antfu/utils': registry.nlark.com/@antfu/utils/0.2.4
+      '@windicss/config': registry.nlark.com/@windicss/config/1.2.5
+      debug: registry.nlark.com/debug/4.3.2
+      fast-glob: registry.nlark.com/fast-glob/3.2.7
+      magic-string: 0.25.7
+      micromatch: 4.0.4
+      windicss: registry.nlark.com/windicss/3.1.5
+    dev: true
+
+  registry.nlark.com/ansi-styles/3.2.1:
+    resolution: {integrity: sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ansi-styles/download/ansi-styles-3.2.1.tgz}
+    name: ansi-styles
+    version: 3.2.1
+    engines: {node: '>=4'}
+    dependencies:
+      color-convert: 1.9.3
+    dev: true
+
+  registry.nlark.com/ansi-styles/4.3.0:
+    resolution: {integrity: sha1-7dgDYornHATIWuegkG7a00tkiTc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/ansi-styles/download/ansi-styles-4.3.0.tgz}
+    name: ansi-styles
+    version: 4.3.0
+    engines: {node: '>=8'}
+    dependencies:
+      color-convert: 2.0.1
+    dev: true
+
+  registry.nlark.com/browserslist/4.16.6:
+    resolution: {integrity: sha1-15ASd6WojlVO0wWxg+ybDAj2b6I=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/browserslist/download/browserslist-4.16.6.tgz}
+    name: browserslist
+    version: 4.16.6
+    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+    hasBin: true
+    dependencies:
+      caniuse-lite: registry.nlark.com/caniuse-lite/1.0.30001245
+      colorette: 1.2.2
+      electron-to-chromium: registry.nlark.com/electron-to-chromium/1.3.782
+      escalade: 3.1.1
+      node-releases: registry.nlark.com/node-releases/1.1.73
+    dev: true
+
+  registry.nlark.com/caniuse-lite/1.0.30001245:
+    resolution: {integrity: sha1-RblBu9gzyw+lOGH/K650azxspdQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/caniuse-lite/download/caniuse-lite-1.0.30001245.tgz}
+    name: caniuse-lite
+    version: 1.0.30001245
+    dev: true
+
+  registry.nlark.com/chalk/2.4.2:
+    resolution: {integrity: sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz}
+    name: chalk
+    version: 2.4.2
+    engines: {node: '>=4'}
+    dependencies:
+      ansi-styles: registry.nlark.com/ansi-styles/3.2.1
+      escape-string-regexp: 1.0.5
+      supports-color: registry.nlark.com/supports-color/5.5.0
+    dev: true
+
+  registry.nlark.com/chalk/4.1.1:
+    resolution: {integrity: sha1-yAs/qyi/Y3HmhjMl7uZ+YYt35q0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/chalk/download/chalk-4.1.1.tgz?cache=0&sync_timestamp=1618995384030&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fchalk%2Fdownload%2Fchalk-4.1.1.tgz}
+    name: chalk
+    version: 4.1.1
+    engines: {node: '>=10'}
+    dependencies:
+      ansi-styles: registry.nlark.com/ansi-styles/4.3.0
+      supports-color: registry.nlark.com/supports-color/7.2.0
+    dev: true
+
+  registry.nlark.com/chokidar/3.5.2:
+    resolution: {integrity: sha1-26OXb8rbAW9m/TZQIdkWANAcHnU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/chokidar/download/chokidar-3.5.2.tgz}
+    name: chokidar
+    version: 3.5.2
+    engines: {node: '>= 8.10.0'}
+    dependencies:
+      anymatch: 3.1.2
+      braces: 3.0.2
+      glob-parent: registry.nlark.com/glob-parent/5.1.2
+      is-binary-path: 2.1.0
+      is-glob: 4.0.1
+      normalize-path: 3.0.0
+      readdirp: 3.6.0
+    optionalDependencies:
+      fsevents: 2.3.2
+    dev: true
+
+  registry.nlark.com/convert-source-map/1.8.0:
+    resolution: {integrity: sha1-8zc8MtIbTXgN2ABFFGhPt5HKQ2k=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/convert-source-map/download/convert-source-map-1.8.0.tgz}
+    name: convert-source-map
+    version: 1.8.0
+    dependencies:
+      safe-buffer: 5.1.2
+    dev: true
+
+  registry.nlark.com/csstype/3.0.8:
+    resolution: {integrity: sha1-0iZqeScp+yJ80hb7Vy9Dco4a00A=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/csstype/download/csstype-3.0.8.tgz?cache=0&sync_timestamp=1618818778879&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcsstype%2Fdownload%2Fcsstype-3.0.8.tgz}
+    name: csstype
+    version: 3.0.8
+    dev: true
+
+  registry.nlark.com/debug/4.3.2:
+    resolution: {integrity: sha1-8KScGKyHeeMdSgxgKd+3aHPHQos=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/debug/download/debug-4.3.2.tgz}
+    name: debug
+    version: 4.3.2
+    engines: {node: '>=6.0'}
+    dependencies:
+      ms: 2.1.2
+    dev: true
+
+  registry.nlark.com/electron-to-chromium/1.3.782:
+    resolution: {integrity: sha1-UidA/mtLUlXKdUxo2cQGoXsJmOI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/electron-to-chromium/download/electron-to-chromium-1.3.782.tgz}
+    name: electron-to-chromium
+    version: 1.3.782
+    dev: true
+
+  registry.nlark.com/esbuild/0.12.15:
+    resolution: {integrity: sha1-nZnPOa6yGIJlxZg+mD4jaCnwivA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/esbuild/download/esbuild-0.12.15.tgz}
+    name: esbuild
+    version: 0.12.15
+    hasBin: true
+    requiresBuild: true
+    dev: true
+
+  registry.nlark.com/estree-walker/2.0.2:
+    resolution: {integrity: sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/estree-walker/download/estree-walker-2.0.2.tgz}
+    name: estree-walker
+    version: 2.0.2
+    dev: true
+
+  registry.nlark.com/fast-glob/3.2.7:
+    resolution: {integrity: sha1-/Wy3otfpqnp4RhEehaGW1rL3ZqE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fast-glob/download/fast-glob-3.2.7.tgz}
+    name: fast-glob
+    version: 3.2.7
+    engines: {node: '>=8'}
+    dependencies:
+      '@nodelib/fs.stat': registry.nlark.com/@nodelib/fs.stat/2.0.5
+      '@nodelib/fs.walk': registry.nlark.com/@nodelib/fs.walk/1.2.8
+      glob-parent: registry.nlark.com/glob-parent/5.1.2
+      merge2: 1.4.1
+      micromatch: 4.0.4
+    dev: true
+
+  registry.nlark.com/fastq/1.11.1:
+    resolution: {integrity: sha1-XYF1quF9thlH+LFiz8f2MmTSKAc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/fastq/download/fastq-1.11.1.tgz}
+    name: fastq
+    version: 1.11.1
+    dependencies:
+      reusify: 1.0.4
+    dev: true
+
+  registry.nlark.com/glob-parent/5.1.2:
+    resolution: {integrity: sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/glob-parent/download/glob-parent-5.1.2.tgz}
+    name: glob-parent
+    version: 5.1.2
+    engines: {node: '>= 6'}
+    dependencies:
+      is-glob: 4.0.1
+    dev: true
+
+  registry.nlark.com/globals/11.12.0:
+    resolution: {integrity: sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/globals/download/globals-11.12.0.tgz}
+    name: globals
+    version: 11.12.0
+    engines: {node: '>=4'}
+    dev: true
+
+  registry.nlark.com/has-flag/3.0.0:
+    resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/has-flag/download/has-flag-3.0.0.tgz?cache=0&sync_timestamp=1626716875947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-3.0.0.tgz}
+    name: has-flag
+    version: 3.0.0
+    engines: {node: '>=4'}
+    dev: true
+
+  registry.nlark.com/has-flag/4.0.0:
+    resolution: {integrity: sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/has-flag/download/has-flag-4.0.0.tgz?cache=0&sync_timestamp=1626716875947&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fhas-flag%2Fdownload%2Fhas-flag-4.0.0.tgz}
+    name: has-flag
+    version: 4.0.0
+    engines: {node: '>=8'}
+    dev: true
+
+  registry.nlark.com/history/4.10.1:
+    resolution: {integrity: sha1-MzcaZeOoOyZ0NOKz87G0xYqtTPM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/history/download/history-4.10.1.tgz}
+    name: history
+    version: 4.10.1
+    dependencies:
+      '@babel/runtime': registry.nlark.com/@babel/runtime/7.14.8
+      loose-envify: 1.4.0
+      resolve-pathname: 3.0.0
+      tiny-invariant: 1.1.0
+      tiny-warning: 1.0.3
+      value-equal: 1.0.1
+    dev: false
+
+  registry.nlark.com/is-core-module/2.5.0:
+    resolution: {integrity: sha1-91SENhfHC/0pt72HMnQAzaXBhJE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/is-core-module/download/is-core-module-2.5.0.tgz}
+    name: is-core-module
+    version: 2.5.0
+    dependencies:
+      has: 1.0.3
+    dev: true
+
+  registry.nlark.com/jiti/1.10.1:
+    resolution: {integrity: sha1-vCoXW5Q1J03IZZ09mhIakcazoa8=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/jiti/download/jiti-1.10.1.tgz}
+    name: jiti
+    version: 1.10.1
+    hasBin: true
+    dev: true
+
+  registry.nlark.com/js-tokens/4.0.0:
+    resolution: {integrity: sha1-GSA/tZmR35jjoocFDUZHzerzJJk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/js-tokens/download/js-tokens-4.0.0.tgz}
+    name: js-tokens
+    version: 4.0.0
+
+  registry.nlark.com/nanoid/3.1.23:
+    resolution: {integrity: sha1-90QIbOfCvEfuCoRyV01ceOQYOoE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/nanoid/download/nanoid-3.1.23.tgz}
+    name: nanoid
+    version: 3.1.23
+    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+    hasBin: true
+    dev: true
+
+  registry.nlark.com/node-releases/1.1.73:
+    resolution: {integrity: sha1-3U6B3dUnf/hGuAtSu0DEnt96eyA=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/node-releases/download/node-releases-1.1.73.tgz}
+    name: node-releases
+    version: 1.1.73
+    dev: true
+
+  registry.nlark.com/path-parse/1.0.7:
+    resolution: {integrity: sha1-+8EUtgykKzDZ2vWFjkvWi77bZzU=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/path-parse/download/path-parse-1.0.7.tgz}
+    name: path-parse
+    version: 1.0.7
+    dev: true
+
+  registry.nlark.com/picomatch/2.3.0:
+    resolution: {integrity: sha1-8fBh3o9qS/AiiS4tEoI0+5gwKXI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/picomatch/download/picomatch-2.3.0.tgz}
+    name: picomatch
+    version: 2.3.0
+    engines: {node: '>=8.6'}
+    dev: true
+
+  registry.nlark.com/postcss/8.3.5:
+    resolution: {integrity: sha1-mCIWsRNBK8IKhiiekeuZSVKltwk=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/postcss/download/postcss-8.3.5.tgz}
+    name: postcss
+    version: 8.3.5
+    engines: {node: ^10 || ^12 || >=14}
+    dependencies:
+      colorette: 1.2.2
+      nanoid: registry.nlark.com/nanoid/3.1.23
+      source-map-js: registry.nlark.com/source-map-js/0.6.2
+    dev: true
+
+  registry.nlark.com/react-dom/17.0.2_react@17.0.2:
+    resolution: {integrity: sha1-7P+2hF462Nv83EmPDQqTlzZQLCM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/react-dom/download/react-dom-17.0.2.tgz?cache=0&sync_timestamp=1626798062962&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-dom%2Fdownload%2Freact-dom-17.0.2.tgz}
+    id: registry.nlark.com/react-dom/17.0.2
+    name: react-dom
+    version: 17.0.2
+    peerDependencies:
+      react: 17.0.2
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+      react: registry.nlark.com/react/17.0.2
+      scheduler: registry.nlark.com/scheduler/0.20.2
+    dev: false
+
+  registry.nlark.com/react-is/16.13.1:
+    resolution: {integrity: sha1-eJcppNw23imZ3BVt1sHZwYzqVqQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/react-is/download/react-is-16.13.1.tgz}
+    name: react-is
+    version: 16.13.1
+    dev: false
+
+  registry.nlark.com/react-refresh/0.10.0:
+    resolution: {integrity: sha1-L1NslmDAubHVAGhNnlKmXnQE9+M=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/react-refresh/download/react-refresh-0.10.0.tgz?cache=0&sync_timestamp=1626798059143&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-refresh%2Fdownload%2Freact-refresh-0.10.0.tgz}
+    name: react-refresh
+    version: 0.10.0
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  registry.nlark.com/react-router-dom/5.2.0_react@17.0.2:
+    resolution: {integrity: sha1-nmWk0MReEyieZsexfH4XXQ6hVmI=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/react-router-dom/download/react-router-dom-5.2.0.tgz}
+    id: registry.nlark.com/react-router-dom/5.2.0
+    name: react-router-dom
+    version: 5.2.0
+    peerDependencies:
+      react: '>=15'
+    dependencies:
+      '@babel/runtime': registry.nlark.com/@babel/runtime/7.14.8
+      history: registry.nlark.com/history/4.10.1
+      loose-envify: 1.4.0
+      prop-types: 15.7.2
+      react: registry.nlark.com/react/17.0.2
+      react-router: registry.nlark.com/react-router/5.2.0_react@17.0.2
+      tiny-invariant: 1.1.0
+      tiny-warning: 1.0.3
+    dev: false
+
+  registry.nlark.com/react-router/5.2.0_react@17.0.2:
+    resolution: {integrity: sha1-Qk51ZByodH+/duXsyml4GqN+opM=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/react-router/download/react-router-5.2.0.tgz}
+    id: registry.nlark.com/react-router/5.2.0
+    name: react-router
+    version: 5.2.0
+    peerDependencies:
+      react: '>=15'
+    dependencies:
+      '@babel/runtime': registry.nlark.com/@babel/runtime/7.14.8
+      history: registry.nlark.com/history/4.10.1
+      hoist-non-react-statics: 3.3.2
+      loose-envify: 1.4.0
+      mini-create-react-context: 0.4.1_prop-types@15.7.2+react@17.0.2
+      path-to-regexp: 1.8.0
+      prop-types: 15.7.2
+      react: registry.nlark.com/react/17.0.2
+      react-is: registry.nlark.com/react-is/16.13.1
+      tiny-invariant: 1.1.0
+      tiny-warning: 1.0.3
+    dev: false
+
+  registry.nlark.com/react/17.0.2:
+    resolution: {integrity: sha1-0LXMUW0p6z7uOD91tihkz7aAADc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/react/download/react-17.0.2.tgz?cache=0&sync_timestamp=1626798064703&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact%2Fdownload%2Freact-17.0.2.tgz}
+    name: react
+    version: 17.0.2
+    engines: {node: '>=0.10.0'}
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+    dev: false
+
+  registry.nlark.com/rollup/2.53.2:
+    resolution: {integrity: sha1-Mnn5v7of5EZYVWCALkGMX7yu+lE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/rollup/download/rollup-2.53.2.tgz}
+    name: rollup
+    version: 2.53.2
+    engines: {node: '>=10.0.0'}
+    hasBin: true
+    optionalDependencies:
+      fsevents: 2.3.2
+    dev: true
+
+  registry.nlark.com/sass/1.35.2:
+    resolution: {integrity: sha1-tzIxT82vfvjQ8WmGmK3DeAQ8uCE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/sass/download/sass-1.35.2.tgz}
+    name: sass
+    version: 1.35.2
+    engines: {node: '>=8.9.0'}
+    hasBin: true
+    dependencies:
+      chokidar: registry.nlark.com/chokidar/3.5.2
+    dev: true
+
+  registry.nlark.com/scheduler/0.20.2:
+    resolution: {integrity: sha1-S67jlDbjSqk7SHS93L8P6Li1DpE=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/scheduler/download/scheduler-0.20.2.tgz?cache=0&sync_timestamp=1626798074644&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fscheduler%2Fdownload%2Fscheduler-0.20.2.tgz}
+    name: scheduler
+    version: 0.20.2
+    dependencies:
+      loose-envify: 1.4.0
+      object-assign: 4.1.1
+    dev: false
+
+  registry.nlark.com/source-map-js/0.6.2:
+    resolution: {integrity: sha1-C7XeYxtBz72mz7qL0FqA79/SOF4=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/source-map-js/download/source-map-js-0.6.2.tgz}
+    name: source-map-js
+    version: 0.6.2
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  registry.nlark.com/supports-color/5.5.0:
+    resolution: {integrity: sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=, registry: https://registry.npm.taobao.org/, tarball: 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}
+    name: supports-color
+    version: 5.5.0
+    engines: {node: '>=4'}
+    dependencies:
+      has-flag: registry.nlark.com/has-flag/3.0.0
+    dev: true
+
+  registry.nlark.com/supports-color/7.2.0:
+    resolution: {integrity: sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1626703414084&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz}
+    name: supports-color
+    version: 7.2.0
+    engines: {node: '>=8'}
+    dependencies:
+      has-flag: registry.nlark.com/has-flag/4.0.0
+    dev: true
+
+  registry.nlark.com/typescript/4.3.5:
+    resolution: {integrity: sha1-TRw3zBbok5c8RaBohrcRMjTxGfQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/typescript/download/typescript-4.3.5.tgz?cache=0&sync_timestamp=1626766346268&other_urls=https%3A%2F%2Fregistry.nlark.com%2Ftypescript%2Fdownload%2Ftypescript-4.3.5.tgz}
+    name: typescript
+    version: 4.3.5
+    engines: {node: '>=4.2.0'}
+    hasBin: true
+    dev: true
+
+  registry.nlark.com/vite-plugin-windicss/1.2.5_vite@2.4.3:
+    resolution: {integrity: sha1-P6ljQklHokrfLOWILxBEjAtuqTQ=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/vite-plugin-windicss/download/vite-plugin-windicss-1.2.5.tgz}
+    id: registry.nlark.com/vite-plugin-windicss/1.2.5
+    name: vite-plugin-windicss
+    version: 1.2.5
+    peerDependencies:
+      vite: ^2.0.1
+    dependencies:
+      '@windicss/plugin-utils': registry.nlark.com/@windicss/plugin-utils/1.2.5
+      chalk: registry.nlark.com/chalk/4.1.1
+      debug: registry.nlark.com/debug/4.3.2
+      vite: registry.nlark.com/vite/2.4.3
+      windicss: registry.nlark.com/windicss/3.1.5
+    dev: true
+
+  registry.nlark.com/vite/2.4.3:
+    resolution: {integrity: sha1-/kqnjp3X02vLEuzL1SMTsmz633c=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/vite/download/vite-2.4.3.tgz}
+    name: vite
+    version: 2.4.3
+    engines: {node: '>=12.0.0'}
+    hasBin: true
+    dependencies:
+      esbuild: registry.nlark.com/esbuild/0.12.15
+      postcss: registry.nlark.com/postcss/8.3.5
+      resolve: 1.20.0
+      rollup: registry.nlark.com/rollup/2.53.2
+    optionalDependencies:
+      fsevents: 2.3.2
+    dev: true
+
+  registry.nlark.com/windicss/3.1.5:
+    resolution: {integrity: sha1-6bbWrcvG9sbjPmYlo+WSOzKPMTc=, registry: https://registry.npm.taobao.org/, tarball: https://registry.nlark.com/windicss/download/windicss-3.1.5.tgz}
+    name: windicss
+    version: 3.1.5
+    engines: {node: '>= 12'}
+    hasBin: true
+    dev: true
diff --git a/src/AppRouter.tsx b/src/AppRouter.tsx
index 630c7f4..0f70e7c 100644
--- a/src/AppRouter.tsx
+++ b/src/AppRouter.tsx
@@ -1,41 +1,54 @@
-import {
-  BrowserRouter as Router,
-  Switch,
-  Redirect,
-  Route,
-  Link,
-} from "react-router-dom";
-import React from "react";
+import { BrowserRouter as Router, Switch, Redirect, Route, Link } from "react-router-dom"
+import React, { Fragment } from "react"
 
-import { pageList } from "@/plugins/pageHoc";
+import { pageList } from "@/plugins/pageHoc"
 
-import Layout from "@/views/Layout";
+import Layout from "@/views/Layout"
 
-import Home from "@/views/Home";
-import About from "@/views/About";
+import Auth from "@/ui/Auth"
+import routes from "./route"
+
+function RouteMap(props: any) {
+  const routes: any[] = props.routes
+  return (
+    <Switch>
+      {routes.map((route, index) => {
+        console.log(route.path, route.exact)
+
+        const { exact = false } = route
+        if (route.redirect) {
+          return (
+            <Route key={index} path={route.path} exact={exact}>
+              <Redirect to={route.redirect}></Redirect>
+            </Route>
+          )
+        }
+        if (route.component) {
+          return (
+            <Auth key={index} needAuth={!!route.meta?.auth} path={route.path} exact={exact}>
+              <route.component>{route.children && <RouteMap routes={route.children}></RouteMap>}</route.component>
+            </Auth>
+          )
+        }
+      })}
+    </Switch>
+  )
+}
 
 export default function () {
-  console.log(pageList);
+  console.log(pageList)
 
   return (
     <Router>
+      {/* <Switch> */}
       <Layout
         render={() => {
           return (
-            <Switch>
-              <Route path="/about">
-                <About />
-              </Route>
-              <Route path="/home">
-                <Home />
-              </Route>
-              <Route path="/">
-                <Redirect to="/home"></Redirect>
-              </Route>
-            </Switch>
-          );
+            <RouteMap routes={routes}></RouteMap>
+          )
         }}
       ></Layout>
+      {/* </Switch> */}
     </Router>
-  );
+  )
 }
diff --git a/src/assets/style/common.scss b/src/assets/style/common.scss
index ae1646b..8b5b8fd 100644
--- a/src/assets/style/common.scss
+++ b/src/assets/style/common.scss
@@ -1,4 +1,5 @@
 @import "./reset.scss";
+
 body,
 button,
 input,
@@ -6,31 +7,20 @@ select,
 textarea {
   font: 12px/1.5 tahoma, arial, "Hiragino Sans GB", "\5b8b\4f53", sans-serif;
 }
-body{
-  background-image: url("@/assets/images/0.jpg");
-  background-attachment: fixed;
-  background-position: center top 36px;
-  background-repeat: no-repeat;
-  background-size: cover;
-}
+
+// 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;
   text-decoration: none;
   color: inherit;
 }
 
-@mixin clearfix {
-  &:after {
-    clear: both;
-    content: ".";
-    display: block;
-    height: 0;
-    line-height: 0;
-    overflow: hidden;
-  }
-  *height: 1%;
-}
-
 .clearfix {
   @include clearfix;
 }
diff --git a/src/assets/style/global.scss b/src/assets/style/global.scss
index a85e3f2..2675a69 100644
--- a/src/assets/style/global.scss
+++ b/src/assets/style/global.scss
@@ -1 +1,14 @@
-$color: green;
\ No newline at end of file
+$color: green;
+
+
+@mixin clearfix {
+  &:after {
+    clear: both;
+    content: ".";
+    display: block;
+    height: 0;
+    line-height: 0;
+    overflow: hidden;
+  }
+  *height: 1%;
+}
diff --git a/src/route.tsx b/src/route.tsx
new file mode 100644
index 0000000..49caaf0
--- /dev/null
+++ b/src/route.tsx
@@ -0,0 +1,45 @@
+import Home from "@/views/Home"
+import About from "@/views/About"
+import Page404 from "@/views/Auth/Page404"
+import React from "react"
+
+function Test() {
+  return <div>TExtas</div>
+}
+
+export default [
+  {
+    path: "/about",
+    component: About,
+    exact: false,
+    meta: {
+      auth: true,
+    },
+    children: [
+      {
+        path: "/about/test",
+        component: Test,
+        exact: false,
+      },
+    ],
+  },
+  {
+    path: "/home",
+    component: Home,
+    exact: true,
+    meta: {
+      auth: false,
+    },
+    children: [],
+  },
+  {
+    path: "/",
+    exact: true,
+    redirect: "/home",
+  },
+  {
+    path: "*",
+    exact: false,
+    component: Page404,
+  },
+]
diff --git a/src/ui/Auth.tsx b/src/ui/Auth.tsx
new file mode 100644
index 0000000..7fff87c
--- /dev/null
+++ b/src/ui/Auth.tsx
@@ -0,0 +1,37 @@
+import React, { Component, ReactElement } from "react"
+// 高阶组件,就是对原来的组件进行封装
+import { Route, Redirect, NavLink } from "react-router-dom"
+
+interface IProps {
+  needAuth?: boolean
+  path: string
+  exact?: boolean
+}
+
+class Auth extends Component<IProps> {
+  constructor(props: IProps) {
+    super(props)
+  }
+
+  render() {
+    const { path, needAuth = false, exact = false } = this.props // 结构语法的概
+    if (!needAuth) {
+      return (
+        // 如果已经登陆,就直接显示原来的组件
+        <Route exact={exact} path={path}>
+          {this.props.children}
+        </Route>
+      )
+    } else {
+      return (
+        <div>
+          <NavLink to="/login">你还有没有登陆好吧!</NavLink>
+
+          {/* <Redirect to={{ pathname: '/login', state: { from: { path }} }} > </Redirect> */}
+        </div>
+      )
+    }
+  }
+}
+
+export default Auth
diff --git a/src/views/About/index.tsx b/src/views/About/index.tsx
index 36dd82c..a107356 100644
--- a/src/views/About/index.tsx
+++ b/src/views/About/index.tsx
@@ -1,9 +1,13 @@
-import React from "react";
-import { useLocation } from "react-router-dom";
+import React from "react"
+import { useLocation } from "react-router-dom"
 
 export default function (props: any) {
-
   let location = useLocation()
-  console.log(location);
-  return <div className="container mx-auto">About</div>;
+  console.log(location)
+  return (
+    <div className="container mx-auto">
+      <div>About</div>
+      <div>22{props.children}</div>
+    </div>
+  )
 }
diff --git a/src/views/Auth/Page404.tsx b/src/views/Auth/Page404.tsx
new file mode 100644
index 0000000..bf4c59f
--- /dev/null
+++ b/src/views/Auth/Page404.tsx
@@ -0,0 +1,10 @@
+import React from "react"
+import { NavLink } from "react-router-dom"
+
+export default function () {
+  return (
+    <div>
+      <NavLink to="/">404</NavLink>
+    </div>
+  )
+}
diff --git a/src/views/Home/index.tsx b/src/views/Home/index.tsx
index 0f8e453..3641b20 100644
--- a/src/views/Home/index.tsx
+++ b/src/views/Home/index.tsx
@@ -1,30 +1,32 @@
-import React from "react";
-import style from "./index.module.scss";
-import Header from "./Header";
+import React from "react"
+import style from "./index.module.scss"
+import Header from "./Header"
+
+function Test() {
+  return <div>有权限了</div>
+}
 
 export default function (props: any) {
-  console.log(props);
+  console.log(props)
 
   return (
     <div>
       <Header></Header>
       <div className="mt-36px">
         <div className="bg-white min-h-100vh">
-          <div className="container clearfix mx-auto  h-500px">box</div>
-        </div>
-        <div className="min-h-100vh">
-
+          <div className="container clearfix mx-auto  h-500px">asda</div>
         </div>
+        <div className="min-h-100vh"></div>
         <div className="bg-white min-h-100vh">
           <div className="container clearfix mx-auto">
             {[...Array(100)]
               .map((v, i) => i)
-              .map((v) => {
-                return <p key={v}>v</p>;
+              .map(v => {
+                return <p key={v}>v</p>
               })}
           </div>
         </div>
       </div>
     </div>
-  );
+  )
 }
diff --git a/src/views/Layout/index.tsx b/src/views/Layout/index.tsx
index b22a493..d2c9299 100644
--- a/src/views/Layout/index.tsx
+++ b/src/views/Layout/index.tsx
@@ -1,10 +1,16 @@
-import React from "react";
-import { useLocation } from "react-router-dom";
+import React, { ReactElement } from "react"
+import { useLocation } from "react-router-dom"
 
-export default function (props: any) {
+interface IProps {
+  render(): ReactElement
+}
+
+export default function (props: IProps) {
   return (
     <div>
-      <div className="content">{props?.render()}</div>
+      <div className="content">
+        <props.render></props.render>
+      </div>
     </div>
-  );
+  )
 }