From 42ada1234591ab8867822568264b3538750aaa65 Mon Sep 17 00:00:00 2001
From: cyf009 <591388323@qq.com>
Date: Tue, 10 Dec 2024 10:12:19 +0800
Subject: [PATCH] 1

---
 .../template/web/api/ILoginController.java    |    33 +
 .../web/dto/request/LoginRequest.java         |    10 +
 .../web/dto/request/LoginTokenRequest.java    |     8 +
 .../template/web/dto/request/MenuRequest.java |     8 +
 .../web/dto/result/LoginInfoResult.java       |    12 +
 .../template/web/dto/result/MenuResult.java   |    22 +
 .../web/dto/result/UserInfoResult.java        |    19 +
 .../template/business/api/LoginService.java   |    17 +
 .../business/service/LoginServiceImpl.java    |   194 +
 .../seasky/template/utils/HttpClientUtil.java |   131 +
 .../seasky/template/utils/PropertyUtil.java   |    30 +
 .../template/utils/StringToMd5Hash.java       |    26 +
 .../web/controller/LoginController.java       |    41 +
 .../main/resources/application-dev.properties |    13 +-
 WebSite/.editorconfig                         |    14 -
 WebSite/.env.development                      |    15 +-
 WebSite/.env.production                       |     7 +-
 WebSite/.env.staging                          |     8 -
 WebSite/.env.test                             |     8 -
 WebSite/.eslintrc.js                          |    27 +-
 WebSite/.gitignore                            |    22 +-
 WebSite/.prettierrc.js                        |    16 +-
 WebSite/.travis.yml                           |     5 -
 WebSite/Dockerfile                            |     9 -
 WebSite/LICENSE                               |     2 +-
 WebSite/README.md                             |   248 +-
 WebSite/babel.config.js                       |     6 +-
 WebSite/conf/init.sh                          |     7 -
 WebSite/conf/nginx.conf                       |    80 -
 WebSite/jest.config.js                        |    24 -
 WebSite/mock/account.js                       |   334 +-
 WebSite/mock/application.js                   |   169 -
 WebSite/mock/article.js                       |   128 -
 WebSite/mock/index.js                         |    38 +-
 WebSite/mock/mock-server.js                   |    32 +-
 WebSite/mock/remote-search.js                 |    51 -
 WebSite/mock/role/index.js                    |   101 -
 WebSite/mock/role/routes.js                   |   525 -
 WebSite/mock/user.js                          |    85 -
 WebSite/package-lock.json                     | 15911 ++++++----------
 WebSite/package.json                          |   144 +-
 WebSite/plop-templates/component/index.hbs    |    26 -
 WebSite/plop-templates/component/prompt.js    |    55 -
 WebSite/plop-templates/store/index.hbs        |    16 -
 WebSite/plop-templates/store/prompt.js        |    62 -
 WebSite/plop-templates/utils.js               |     9 -
 WebSite/plop-templates/view/index.hbs         |    26 -
 WebSite/plop-templates/view/prompt.js         |    55 -
 WebSite/plopfile.js                           |     9 -
 WebSite/postcss.config.js                     |     5 -
 WebSite/public/favicon.ico                    |   Bin 67646 -> 4286 bytes
 WebSite/public/index.html                     |    23 +-
 WebSite/src/App.vue                           |    31 +-
 WebSite/src/api/article.js                    |    41 -
 WebSite/src/api/qiniu.js                      |     8 -
 WebSite/src/api/remote-search.js              |    17 -
 WebSite/src/api/role.js                       |    38 -
 WebSite/src/api/user.js                       |    40 +-
 WebSite/src/assets/configs/default.json       |     4 -
 WebSite/src/assets/configs/staging.json       |     4 -
 WebSite/src/assets/configs/test.json          |     4 -
 WebSite/src/components/BackToTop/index.vue    |   128 -
 WebSite/src/components/Breadcrumb/index.vue   |   142 -
 WebSite/src/components/Charts/Keyboard.vue    |   169 -
 WebSite/src/components/Charts/LineMarker.vue  |   276 -
 WebSite/src/components/Charts/MixChart.vue    |   277 -
 .../src/components/Charts/mixins/resize.js    |    66 -
 WebSite/src/components/DeptGroup/index.vue    |   105 -
 WebSite/src/components/DndList/index.vue      |   182 -
 WebSite/src/components/DragSelect/index.vue   |    70 -
 WebSite/src/components/Dropzone/index.vue     |   312 -
 WebSite/src/components/ErrorLog/index.vue     |    92 -
 WebSite/src/components/GithubCorner/index.vue |    59 -
 WebSite/src/components/Hamburger/index.vue    |    46 -
 WebSite/src/components/HeaderSearch/index.vue |   198 -
 WebSite/src/components/ImageCropper/index.vue |  1816 --
 .../ImageCropper/utils/data2blob.js           |    19 -
 .../ImageCropper/utils/effectRipple.js        |    53 -
 .../components/ImageCropper/utils/language.js |   240 -
 .../components/ImageCropper/utils/mimes.js    |     7 -
 WebSite/src/components/JcRange/index.vue      |   170 -
 WebSite/src/components/JsonEditor/index.vue   |    72 -
 .../JumpDialog/components/JumpDialogItem.vue  |    39 -
 .../src/components/JumpDialog/event-bus.js    |     9 -
 WebSite/src/components/JumpDialog/index.vue   |   103 -
 WebSite/src/components/Kanban/index.vue       |    98 -
 WebSite/src/components/LayoutCard/index.vue   |   103 -
 WebSite/src/components/MDinput/index.vue      |   364 -
 .../MarkdownEditor/default-options.js         |    31 -
 .../src/components/MarkdownEditor/index.vue   |   122 -
 .../src/components/ModifyPassword/index.vue   |   132 -
 .../OrganizationSelectTree/index.vue          |    55 -
 WebSite/src/components/Pagination/index.vue   |    22 +-
 WebSite/src/components/PanThumb/index.vue     |   146 -
 WebSite/src/components/RightPanel/index.vue   |   149 -
 WebSite/src/components/Screenfull/index.vue   |    63 -
 WebSite/src/components/SelectTree/index.vue   |   201 -
 WebSite/src/components/SelectUser/index.vue   |    97 -
 WebSite/src/components/Share/DropdownMenu.vue |   111 -
 WebSite/src/components/SizeSelect/index.vue   |    60 -
 WebSite/src/components/Sticky/index.vue       |    97 -
 WebSite/src/components/SvgIcon/index.vue      |    25 +-
 WebSite/src/components/TextField/index.vue    |    31 -
 .../src/components/TextHoverEffect/Mallki.vue |   113 -
 WebSite/src/components/ThemePicker/index.vue  |   198 -
 .../Tinymce/components/EditorImage.vue        |   126 -
 .../components/Tinymce/dynamicLoadScript.js   |    61 -
 WebSite/src/components/Tinymce/index.vue      |   254 -
 WebSite/src/components/Tinymce/plugins.js     |     9 -
 WebSite/src/components/Tinymce/toolbar.js     |     9 -
 WebSite/src/components/UnionUser/index.vue    |   285 -
 WebSite/src/components/Upload/SingleImage.vue |   133 -
 .../src/components/Upload/SingleImage2.vue    |   130 -
 .../src/components/Upload/SingleImage3.vue    |   157 -
 WebSite/src/components/UploadExcel/index.vue  |   158 -
 WebSite/src/directive/clipboard/clipboard.js  |    57 -
 WebSite/src/directive/clipboard/index.js      |    13 -
 WebSite/src/directive/el-drag-dialog/drag.js  |    77 -
 WebSite/src/directive/el-drag-dialog/index.js |    13 -
 WebSite/src/directive/el-table/adaptive.js    |    45 -
 WebSite/src/directive/el-table/index.js       |    13 -
 WebSite/src/directive/permission/index.js     |    13 -
 .../src/directive/permission/permission.js    |    22 -
 WebSite/src/directive/sticky.js               |    90 -
 WebSite/src/directive/waves/index.js          |    13 -
 WebSite/src/directive/waves/waves.css         |    26 -
 WebSite/src/directive/waves/waves.js          |    80 -
 WebSite/src/filters/index.js                  |   124 -
 WebSite/src/icons/index.js                    |    14 +-
 WebSite/src/layout/components/AppMain.vue     |    66 -
 WebSite/src/layout/components/Navbar.vue      |   250 -
 .../src/layout/components/Settings/index.vue  |   110 -
 .../layout/components/Sidebar/FixiOSBug.js    |    26 -
 .../src/layout/components/Sidebar/Item.vue    |    29 -
 .../src/layout/components/Sidebar/Link.vue    |    35 -
 .../src/layout/components/Sidebar/Logo.vue    |    95 -
 .../layout/components/Sidebar/SidebarItem.vue |    69 -
 .../src/layout/components/Sidebar/index.vue   |    70 +-
 .../layout/components/TagsView/ScrollPane.vue |    96 -
 .../src/layout/components/TagsView/index.vue  |   447 +-
 WebSite/src/layout/components/index.js        |    19 +-
 WebSite/src/layout/index.vue                  |   103 +-
 WebSite/src/layout/mixin/ResizeHandler.js     |    29 +-
 WebSite/src/main.js                           |   144 +-
 WebSite/src/permission.js                     |    74 -
 WebSite/src/router/index.js                   |   162 +-
 WebSite/src/router/modules/demo.js            |    55 -
 WebSite/src/service/base/base.js              |    34 -
 WebSite/src/service/index.js                  |    56 -
 WebSite/src/service/modules/account.js        |    21 -
 WebSite/src/service/modules/user.js           |    21 -
 WebSite/src/settings.js                       |    48 -
 WebSite/src/store/getters.js                  |    33 +-
 WebSite/src/store/index.js                    |    22 +-
 WebSite/src/store/modules/app.js              |   209 +-
 WebSite/src/store/modules/errorLog.js         |    28 -
 WebSite/src/store/modules/permission.js       |    97 -
 WebSite/src/store/modules/settings.js         |    33 -
 WebSite/src/store/modules/tagsView.js         |   160 -
 WebSite/src/store/modules/user.js             |   142 -
 WebSite/src/styles/element-ui.scss            |    26 +-
 WebSite/src/styles/element-variables.scss     |     6 +-
 WebSite/src/styles/index.scss                 |     4 +-
 WebSite/src/styles/reset.scss                 |    67 -
 WebSite/src/styles/sidebar.scss               |    80 +-
 WebSite/src/styles/transition.scss            |    81 +-
 WebSite/src/styles/variables.scss             |    22 +-
 WebSite/src/utils/auth.js                     |     9 +-
 WebSite/src/utils/clipboard.js                |    23 +-
 WebSite/src/utils/enum.js                     |    50 +-
 WebSite/src/utils/index.js                    |   632 +-
 WebSite/src/utils/loading.js                  |     2 +-
 WebSite/src/utils/request.js                  |    39 +-
 WebSite/src/utils/validate.js                 |    17 +-
 WebSite/src/vendor/Export2Excel.js            |   220 -
 WebSite/src/vendor/Export2Zip.js              |    24 -
 WebSite/src/views/charts/keyboard.vue         |    22 -
 WebSite/src/views/charts/line.vue             |    22 -
 WebSite/src/views/charts/mix-chart.vue        |    22 -
 WebSite/src/views/clipboard/index.vue         |    65 -
 .../views/components-demo/avatar-upload.vue   |    69 -
 .../src/views/components-demo/back-to-top.vue |   162 -
 .../src/views/components-demo/count-to.vue    |   244 -
 .../src/views/components-demo/dnd-list.vue    |    46 -
 .../src/views/components-demo/drag-dialog.vue |    76 -
 .../src/views/components-demo/drag-kanban.vue |    83 -
 .../src/views/components-demo/drag-select.vue |    59 -
 .../src/views/components-demo/dropzone.vue    |    39 -
 .../src/views/components-demo/json-editor.vue |    42 -
 .../src/views/components-demo/markdown.vue    |   124 -
 WebSite/src/views/components-demo/mixin.vue   |   200 -
 .../src/views/components-demo/split-pane.vue  |    71 -
 WebSite/src/views/components-demo/sticky.vue  |   149 -
 WebSite/src/views/components-demo/tinymce.vue |    43 -
 .../dashboard/admin/components/BarChart.vue   |   111 -
 .../dashboard/admin/components/BoxCard.vue    |   116 -
 .../dashboard/admin/components/LineChart.vue  |   138 -
 .../dashboard/admin/components/PanelGroup.vue |   201 -
 .../dashboard/admin/components/PieChart.vue   |    79 -
 .../admin/components/RaddarChart.vue          |   119 -
 .../admin/components/TodoList/Todo.vue        |    81 -
 .../admin/components/TodoList/index.scss      |   320 -
 .../admin/components/TodoList/index.vue       |   142 -
 .../admin/components/TransactionTable.vue     |    55 -
 .../admin/components/mixins/resize.js         |    65 -
 WebSite/src/views/dashboard/admin/index.vue   |   145 -
 WebSite/src/views/dashboard/editor/index.vue  |    77 -
 WebSite/src/views/dashboard/index.vue         |    36 -
 WebSite/src/views/documentation/index.vue     |   103 -
 .../views/error-log/components/ErrorTestA.vue |    13 -
 .../views/error-log/components/ErrorTestB.vue |    11 -
 WebSite/src/views/error-log/index.vue         |    42 -
 WebSite/src/views/error-page/401.vue          |    54 +-
 WebSite/src/views/error-page/404.vue          |    11 +-
 WebSite/src/views/example/button/index.vue    |   160 -
 .../example/dialog/components/Detail.vue      |    39 -
 WebSite/src/views/example/dialog/index.vue    |   116 -
 WebSite/src/views/example/form.vue            |   205 -
 WebSite/src/views/example/icon.vue            |    61 -
 WebSite/src/views/example/index.vue           |   350 -
 WebSite/src/views/example/layout.vue          |   187 -
 WebSite/src/views/example/table.vue           |   169 -
 .../excel/components/AutoWidthOption.vue      |    34 -
 .../views/excel/components/BookTypeOption.vue |    39 -
 .../views/excel/components/FilenameOption.vue |    32 -
 WebSite/src/views/excel/export-excel.vue      |   142 -
 WebSite/src/views/excel/merge-header.vue      |   116 -
 WebSite/src/views/excel/select-excel.vue      |   128 -
 WebSite/src/views/excel/upload-excel.vue      |    55 -
 WebSite/src/views/guide/index.vue             |    43 -
 WebSite/src/views/guide/steps.js              |    53 -
 WebSite/src/views/home/index.vue              |    36 +-
 WebSite/src/views/icons/element-icons.js      |   284 -
 WebSite/src/views/icons/index.vue             |   112 -
 WebSite/src/views/icons/svg-icons.js          |    10 -
 WebSite/src/views/login/auth-redirect.vue     |    15 -
 .../views/login/components/SocialSignin.vue   |    76 -
 WebSite/src/views/login/index.vue             |   625 +-
 WebSite/src/views/nested/menu1/index.vue      |     7 -
 .../src/views/nested/menu1/menu1-1/index.vue  |     7 -
 .../src/views/nested/menu1/menu1-2/index.vue  |     7 -
 .../nested/menu1/menu1-2/menu1-2-1/index.vue  |     5 -
 .../nested/menu1/menu1-2/menu1-2-2/index.vue  |     5 -
 .../src/views/nested/menu1/menu1-3/index.vue  |     5 -
 WebSite/src/views/nested/menu2/index.vue      |     5 -
 WebSite/src/views/outer/index.vue             |    12 +-
 WebSite/src/views/pdf/content.js              |    58 -
 WebSite/src/views/pdf/download.vue            |   214 -
 WebSite/src/views/pdf/index.vue               |    12 -
 .../permission/components/SwitchRoles.vue     |    33 -
 WebSite/src/views/permission/directive.vue    |   131 -
 WebSite/src/views/permission/page.vue         |    19 -
 WebSite/src/views/permission/role.vue         |   302 -
 .../src/views/profile/components/Account.vue  |    38 -
 .../src/views/profile/components/Activity.vue |   202 -
 .../src/views/profile/components/Timeline.vue |    48 -
 .../src/views/profile/components/UserCard.vue |   145 -
 WebSite/src/views/profile/index.vue           |    62 -
 WebSite/src/views/qiniu/upload.vue            |    47 -
 WebSite/src/views/redirect/index.vue          |    12 -
 WebSite/src/views/tab/components/TabPane.vue  |   108 -
 WebSite/src/views/tab/index.vue               |    71 -
 WebSite/src/views/table/complex-table.vue     |   567 -
 WebSite/src/views/table/drag-table.vue        |   167 -
 .../dynamic-table/components/FixedThead.vue   |    70 -
 .../dynamic-table/components/UnfixedThead.vue |    56 -
 .../src/views/table/dynamic-table/index.vue   |    23 -
 WebSite/src/views/table/inline-edit-table.vue |   161 -
 WebSite/src/views/theme/index.vue             |   131 -
 WebSite/src/views/zip/index.vue               |   101 -
 WebSite/tests/unit/.eslintrc.js               |     5 -
 .../tests/unit/components/Hamburger.spec.js   |    18 -
 WebSite/tests/unit/components/SvgIcon.spec.js |    22 -
 WebSite/tests/unit/utils/formatTime.spec.js   |    29 -
 WebSite/tests/unit/utils/parseTime.spec.js    |    27 -
 WebSite/tests/unit/utils/validate.spec.js     |    28 -
 WebSite/vue.config.js                         |   171 +-
 277 files changed, 8362 insertions(+), 33241 deletions(-)
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/ILoginController.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/LoginRequest.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/LoginTokenRequest.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/MenuRequest.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/LoginInfoResult.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/MenuResult.java
 create mode 100644 ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/UserInfoResult.java
 create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/business/api/LoginService.java
 create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/business/service/LoginServiceImpl.java
 create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/utils/HttpClientUtil.java
 create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/utils/PropertyUtil.java
 create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/utils/StringToMd5Hash.java
 create mode 100644 ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/LoginController.java
 delete mode 100644 WebSite/.editorconfig
 delete mode 100644 WebSite/.env.staging
 delete mode 100644 WebSite/.env.test
 delete mode 100644 WebSite/.travis.yml
 delete mode 100644 WebSite/Dockerfile
 delete mode 100644 WebSite/conf/init.sh
 delete mode 100644 WebSite/conf/nginx.conf
 delete mode 100644 WebSite/jest.config.js
 delete mode 100644 WebSite/mock/application.js
 delete mode 100644 WebSite/mock/article.js
 delete mode 100644 WebSite/mock/remote-search.js
 delete mode 100644 WebSite/mock/role/index.js
 delete mode 100644 WebSite/mock/role/routes.js
 delete mode 100644 WebSite/mock/user.js
 delete mode 100644 WebSite/plop-templates/component/index.hbs
 delete mode 100644 WebSite/plop-templates/component/prompt.js
 delete mode 100644 WebSite/plop-templates/store/index.hbs
 delete mode 100644 WebSite/plop-templates/store/prompt.js
 delete mode 100644 WebSite/plop-templates/utils.js
 delete mode 100644 WebSite/plop-templates/view/index.hbs
 delete mode 100644 WebSite/plop-templates/view/prompt.js
 delete mode 100644 WebSite/plopfile.js
 delete mode 100644 WebSite/postcss.config.js
 delete mode 100644 WebSite/src/api/article.js
 delete mode 100644 WebSite/src/api/qiniu.js
 delete mode 100644 WebSite/src/api/remote-search.js
 delete mode 100644 WebSite/src/api/role.js
 delete mode 100644 WebSite/src/assets/configs/default.json
 delete mode 100644 WebSite/src/assets/configs/staging.json
 delete mode 100644 WebSite/src/assets/configs/test.json
 delete mode 100644 WebSite/src/components/BackToTop/index.vue
 delete mode 100644 WebSite/src/components/Breadcrumb/index.vue
 delete mode 100644 WebSite/src/components/Charts/Keyboard.vue
 delete mode 100644 WebSite/src/components/Charts/LineMarker.vue
 delete mode 100644 WebSite/src/components/Charts/MixChart.vue
 delete mode 100644 WebSite/src/components/Charts/mixins/resize.js
 delete mode 100644 WebSite/src/components/DeptGroup/index.vue
 delete mode 100644 WebSite/src/components/DndList/index.vue
 delete mode 100644 WebSite/src/components/DragSelect/index.vue
 delete mode 100644 WebSite/src/components/Dropzone/index.vue
 delete mode 100644 WebSite/src/components/ErrorLog/index.vue
 delete mode 100644 WebSite/src/components/GithubCorner/index.vue
 delete mode 100644 WebSite/src/components/Hamburger/index.vue
 delete mode 100644 WebSite/src/components/HeaderSearch/index.vue
 delete mode 100644 WebSite/src/components/ImageCropper/index.vue
 delete mode 100644 WebSite/src/components/ImageCropper/utils/data2blob.js
 delete mode 100644 WebSite/src/components/ImageCropper/utils/effectRipple.js
 delete mode 100644 WebSite/src/components/ImageCropper/utils/language.js
 delete mode 100644 WebSite/src/components/ImageCropper/utils/mimes.js
 delete mode 100644 WebSite/src/components/JcRange/index.vue
 delete mode 100644 WebSite/src/components/JsonEditor/index.vue
 delete mode 100644 WebSite/src/components/JumpDialog/components/JumpDialogItem.vue
 delete mode 100644 WebSite/src/components/JumpDialog/event-bus.js
 delete mode 100644 WebSite/src/components/JumpDialog/index.vue
 delete mode 100644 WebSite/src/components/Kanban/index.vue
 delete mode 100644 WebSite/src/components/LayoutCard/index.vue
 delete mode 100644 WebSite/src/components/MDinput/index.vue
 delete mode 100644 WebSite/src/components/MarkdownEditor/default-options.js
 delete mode 100644 WebSite/src/components/MarkdownEditor/index.vue
 delete mode 100644 WebSite/src/components/ModifyPassword/index.vue
 delete mode 100644 WebSite/src/components/OrganizationSelectTree/index.vue
 delete mode 100644 WebSite/src/components/PanThumb/index.vue
 delete mode 100644 WebSite/src/components/RightPanel/index.vue
 delete mode 100644 WebSite/src/components/Screenfull/index.vue
 delete mode 100644 WebSite/src/components/SelectTree/index.vue
 delete mode 100644 WebSite/src/components/SelectUser/index.vue
 delete mode 100644 WebSite/src/components/Share/DropdownMenu.vue
 delete mode 100644 WebSite/src/components/SizeSelect/index.vue
 delete mode 100644 WebSite/src/components/Sticky/index.vue
 delete mode 100644 WebSite/src/components/TextField/index.vue
 delete mode 100644 WebSite/src/components/TextHoverEffect/Mallki.vue
 delete mode 100644 WebSite/src/components/ThemePicker/index.vue
 delete mode 100644 WebSite/src/components/Tinymce/components/EditorImage.vue
 delete mode 100644 WebSite/src/components/Tinymce/dynamicLoadScript.js
 delete mode 100644 WebSite/src/components/Tinymce/index.vue
 delete mode 100644 WebSite/src/components/Tinymce/plugins.js
 delete mode 100644 WebSite/src/components/Tinymce/toolbar.js
 delete mode 100644 WebSite/src/components/UnionUser/index.vue
 delete mode 100644 WebSite/src/components/Upload/SingleImage.vue
 delete mode 100644 WebSite/src/components/Upload/SingleImage2.vue
 delete mode 100644 WebSite/src/components/Upload/SingleImage3.vue
 delete mode 100644 WebSite/src/components/UploadExcel/index.vue
 delete mode 100644 WebSite/src/directive/clipboard/clipboard.js
 delete mode 100644 WebSite/src/directive/clipboard/index.js
 delete mode 100644 WebSite/src/directive/el-drag-dialog/drag.js
 delete mode 100644 WebSite/src/directive/el-drag-dialog/index.js
 delete mode 100644 WebSite/src/directive/el-table/adaptive.js
 delete mode 100644 WebSite/src/directive/el-table/index.js
 delete mode 100644 WebSite/src/directive/permission/index.js
 delete mode 100644 WebSite/src/directive/permission/permission.js
 delete mode 100644 WebSite/src/directive/sticky.js
 delete mode 100644 WebSite/src/directive/waves/index.js
 delete mode 100644 WebSite/src/directive/waves/waves.css
 delete mode 100644 WebSite/src/directive/waves/waves.js
 delete mode 100644 WebSite/src/filters/index.js
 delete mode 100644 WebSite/src/layout/components/AppMain.vue
 delete mode 100644 WebSite/src/layout/components/Navbar.vue
 delete mode 100644 WebSite/src/layout/components/Settings/index.vue
 delete mode 100644 WebSite/src/layout/components/Sidebar/FixiOSBug.js
 delete mode 100644 WebSite/src/layout/components/Sidebar/Item.vue
 delete mode 100644 WebSite/src/layout/components/Sidebar/Link.vue
 delete mode 100644 WebSite/src/layout/components/Sidebar/Logo.vue
 delete mode 100644 WebSite/src/layout/components/Sidebar/SidebarItem.vue
 delete mode 100644 WebSite/src/layout/components/TagsView/ScrollPane.vue
 delete mode 100644 WebSite/src/permission.js
 delete mode 100644 WebSite/src/router/modules/demo.js
 delete mode 100644 WebSite/src/service/base/base.js
 delete mode 100644 WebSite/src/service/index.js
 delete mode 100644 WebSite/src/service/modules/account.js
 delete mode 100644 WebSite/src/service/modules/user.js
 delete mode 100644 WebSite/src/settings.js
 delete mode 100644 WebSite/src/store/modules/errorLog.js
 delete mode 100644 WebSite/src/store/modules/permission.js
 delete mode 100644 WebSite/src/store/modules/settings.js
 delete mode 100644 WebSite/src/store/modules/tagsView.js
 delete mode 100644 WebSite/src/store/modules/user.js
 delete mode 100644 WebSite/src/styles/reset.scss
 delete mode 100644 WebSite/src/vendor/Export2Excel.js
 delete mode 100644 WebSite/src/vendor/Export2Zip.js
 delete mode 100644 WebSite/src/views/charts/keyboard.vue
 delete mode 100644 WebSite/src/views/charts/line.vue
 delete mode 100644 WebSite/src/views/charts/mix-chart.vue
 delete mode 100644 WebSite/src/views/clipboard/index.vue
 delete mode 100644 WebSite/src/views/components-demo/avatar-upload.vue
 delete mode 100644 WebSite/src/views/components-demo/back-to-top.vue
 delete mode 100644 WebSite/src/views/components-demo/count-to.vue
 delete mode 100644 WebSite/src/views/components-demo/dnd-list.vue
 delete mode 100644 WebSite/src/views/components-demo/drag-dialog.vue
 delete mode 100644 WebSite/src/views/components-demo/drag-kanban.vue
 delete mode 100644 WebSite/src/views/components-demo/drag-select.vue
 delete mode 100644 WebSite/src/views/components-demo/dropzone.vue
 delete mode 100644 WebSite/src/views/components-demo/json-editor.vue
 delete mode 100644 WebSite/src/views/components-demo/markdown.vue
 delete mode 100644 WebSite/src/views/components-demo/mixin.vue
 delete mode 100644 WebSite/src/views/components-demo/split-pane.vue
 delete mode 100644 WebSite/src/views/components-demo/sticky.vue
 delete mode 100644 WebSite/src/views/components-demo/tinymce.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/BarChart.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/BoxCard.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/LineChart.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/PanelGroup.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/PieChart.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/RaddarChart.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/TodoList/Todo.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/TodoList/index.scss
 delete mode 100644 WebSite/src/views/dashboard/admin/components/TodoList/index.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/TransactionTable.vue
 delete mode 100644 WebSite/src/views/dashboard/admin/components/mixins/resize.js
 delete mode 100644 WebSite/src/views/dashboard/admin/index.vue
 delete mode 100644 WebSite/src/views/dashboard/editor/index.vue
 delete mode 100644 WebSite/src/views/dashboard/index.vue
 delete mode 100644 WebSite/src/views/documentation/index.vue
 delete mode 100644 WebSite/src/views/error-log/components/ErrorTestA.vue
 delete mode 100644 WebSite/src/views/error-log/components/ErrorTestB.vue
 delete mode 100644 WebSite/src/views/error-log/index.vue
 delete mode 100644 WebSite/src/views/example/button/index.vue
 delete mode 100644 WebSite/src/views/example/dialog/components/Detail.vue
 delete mode 100644 WebSite/src/views/example/dialog/index.vue
 delete mode 100644 WebSite/src/views/example/form.vue
 delete mode 100644 WebSite/src/views/example/icon.vue
 delete mode 100644 WebSite/src/views/example/index.vue
 delete mode 100644 WebSite/src/views/example/layout.vue
 delete mode 100644 WebSite/src/views/example/table.vue
 delete mode 100644 WebSite/src/views/excel/components/AutoWidthOption.vue
 delete mode 100644 WebSite/src/views/excel/components/BookTypeOption.vue
 delete mode 100644 WebSite/src/views/excel/components/FilenameOption.vue
 delete mode 100644 WebSite/src/views/excel/export-excel.vue
 delete mode 100644 WebSite/src/views/excel/merge-header.vue
 delete mode 100644 WebSite/src/views/excel/select-excel.vue
 delete mode 100644 WebSite/src/views/excel/upload-excel.vue
 delete mode 100644 WebSite/src/views/guide/index.vue
 delete mode 100644 WebSite/src/views/guide/steps.js
 delete mode 100644 WebSite/src/views/icons/element-icons.js
 delete mode 100644 WebSite/src/views/icons/index.vue
 delete mode 100644 WebSite/src/views/icons/svg-icons.js
 delete mode 100644 WebSite/src/views/login/auth-redirect.vue
 delete mode 100644 WebSite/src/views/login/components/SocialSignin.vue
 delete mode 100644 WebSite/src/views/nested/menu1/index.vue
 delete mode 100644 WebSite/src/views/nested/menu1/menu1-1/index.vue
 delete mode 100644 WebSite/src/views/nested/menu1/menu1-2/index.vue
 delete mode 100644 WebSite/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue
 delete mode 100644 WebSite/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue
 delete mode 100644 WebSite/src/views/nested/menu1/menu1-3/index.vue
 delete mode 100644 WebSite/src/views/nested/menu2/index.vue
 delete mode 100644 WebSite/src/views/pdf/content.js
 delete mode 100644 WebSite/src/views/pdf/download.vue
 delete mode 100644 WebSite/src/views/pdf/index.vue
 delete mode 100644 WebSite/src/views/permission/components/SwitchRoles.vue
 delete mode 100644 WebSite/src/views/permission/directive.vue
 delete mode 100644 WebSite/src/views/permission/page.vue
 delete mode 100644 WebSite/src/views/permission/role.vue
 delete mode 100644 WebSite/src/views/profile/components/Account.vue
 delete mode 100644 WebSite/src/views/profile/components/Activity.vue
 delete mode 100644 WebSite/src/views/profile/components/Timeline.vue
 delete mode 100644 WebSite/src/views/profile/components/UserCard.vue
 delete mode 100644 WebSite/src/views/profile/index.vue
 delete mode 100644 WebSite/src/views/qiniu/upload.vue
 delete mode 100644 WebSite/src/views/redirect/index.vue
 delete mode 100644 WebSite/src/views/tab/components/TabPane.vue
 delete mode 100644 WebSite/src/views/tab/index.vue
 delete mode 100644 WebSite/src/views/table/complex-table.vue
 delete mode 100644 WebSite/src/views/table/drag-table.vue
 delete mode 100644 WebSite/src/views/table/dynamic-table/components/FixedThead.vue
 delete mode 100644 WebSite/src/views/table/dynamic-table/components/UnfixedThead.vue
 delete mode 100644 WebSite/src/views/table/dynamic-table/index.vue
 delete mode 100644 WebSite/src/views/table/inline-edit-table.vue
 delete mode 100644 WebSite/src/views/theme/index.vue
 delete mode 100644 WebSite/src/views/zip/index.vue
 delete mode 100644 WebSite/tests/unit/.eslintrc.js
 delete mode 100644 WebSite/tests/unit/components/Hamburger.spec.js
 delete mode 100644 WebSite/tests/unit/components/SvgIcon.spec.js
 delete mode 100644 WebSite/tests/unit/utils/formatTime.spec.js
 delete mode 100644 WebSite/tests/unit/utils/parseTime.spec.js
 delete mode 100644 WebSite/tests/unit/utils/validate.spec.js

diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/ILoginController.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/ILoginController.java
new file mode 100644
index 0000000..8872bf8
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/api/ILoginController.java
@@ -0,0 +1,33 @@
+package com.seasky.template.web.api;
+
+import com.seasky.core.common.Result;
+import com.seasky.template.web.dto.request.LoginRequest;
+import com.seasky.template.web.dto.request.LoginTokenRequest;
+import com.seasky.template.web.dto.request.MenuRequest;
+import com.seasky.template.web.dto.result.LoginInfoResult;
+import com.seasky.template.web.dto.result.MenuResult;
+import com.seasky.template.web.dto.result.UserInfoResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "登录")
+@RequestMapping("login")
+@RestController
+public interface ILoginController {
+    @ApiOperation("获取登录信息")
+    @PostMapping("/getLogInfo")
+    Result<LoginInfoResult> GetLogInfo(@RequestBody LoginRequest qry);
+    @ApiOperation("获取cooki")
+    @PostMapping("/sfpLoginVerify")
+    Result<String> SfpLoginVerify(@RequestBody LoginRequest qry);
+    @ApiOperation("获取登录后信息")
+    @PostMapping("/getLoginToken")
+    Result<UserInfoResult>   GetLoginToken(@RequestBody LoginTokenRequest qry);
+    @ApiOperation("获取登录后菜单信息")
+    @PostMapping("/getMenuList")
+    Result<MenuResult>   GetMenuList(@RequestBody MenuRequest qry);
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/LoginRequest.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/LoginRequest.java
new file mode 100644
index 0000000..fc85d64
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/LoginRequest.java
@@ -0,0 +1,10 @@
+package com.seasky.template.web.dto.request;
+
+import lombok.Data;
+
+@Data
+public class LoginRequest {
+    public  String principals;
+    public  String credentials;
+    public  String token;
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/LoginTokenRequest.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/LoginTokenRequest.java
new file mode 100644
index 0000000..81b4da3
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/LoginTokenRequest.java
@@ -0,0 +1,8 @@
+package com.seasky.template.web.dto.request;
+
+import lombok.Data;
+
+@Data
+public class LoginTokenRequest {
+    public  String token;
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/MenuRequest.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/MenuRequest.java
new file mode 100644
index 0000000..a8f2986
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/request/MenuRequest.java
@@ -0,0 +1,8 @@
+package com.seasky.template.web.dto.request;
+
+import lombok.Data;
+
+@Data
+public class MenuRequest {
+    public  String personId;
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/LoginInfoResult.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/LoginInfoResult.java
new file mode 100644
index 0000000..452967e
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/LoginInfoResult.java
@@ -0,0 +1,12 @@
+package com.seasky.template.web.dto.result;
+
+import lombok.Data;
+
+@Data
+public class LoginInfoResult {
+    public String PersonId ;
+    public String principals ;
+    public String PersonName ;
+    public String credentials ;
+    public  String token;
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/MenuResult.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/MenuResult.java
new file mode 100644
index 0000000..eca557f
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/MenuResult.java
@@ -0,0 +1,22 @@
+package com.seasky.template.web.dto.result;
+
+import lombok.Data;
+
+import java.util.List;
+@Data
+public class MenuResult {
+    public String id ;
+    public String versionDate;
+    public String creator;
+    public String applicationId;
+    public String menuNo ;
+    public String name ;
+    public String icon ;
+    public String parentId ;
+    public String routingUrl ;
+    public boolean isNewWindow ;
+    public boolean isSystem ;
+    public boolean withUserId ;
+    public boolean enabled ;
+    public List<MenuResult> children ;
+}
diff --git a/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/UserInfoResult.java b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/UserInfoResult.java
new file mode 100644
index 0000000..74384e9
--- /dev/null
+++ b/ServiceSiteCommon/facade/src/main/java/com/seasky/template/web/dto/result/UserInfoResult.java
@@ -0,0 +1,19 @@
+package com.seasky.template.web.dto.result;
+
+import lombok.Data;
+
+@Data
+public class UserInfoResult {
+    public String personId;
+
+    public String personName ;
+
+
+    public String userName ;
+
+
+    public boolean isEmployee ;
+
+
+    public boolean isStudent;
+}
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/LoginService.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/LoginService.java
new file mode 100644
index 0000000..2cc4d38
--- /dev/null
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/api/LoginService.java
@@ -0,0 +1,17 @@
+package com.seasky.template.business.api;
+
+import com.seasky.template.web.dto.request.LoginRequest;
+import com.seasky.template.web.dto.request.LoginTokenRequest;
+import com.seasky.template.web.dto.request.MenuRequest;
+import com.seasky.template.web.dto.result.LoginInfoResult;
+import com.seasky.template.web.dto.result.MenuResult;
+import com.seasky.template.web.dto.result.UserInfoResult;
+
+import java.util.List;
+
+public interface LoginService {
+    List<LoginInfoResult> GetLogInfo(LoginRequest qry);
+    String SfpLoginVerify( LoginRequest qry);
+    UserInfoResult GetLoginToken(LoginTokenRequest qry);
+    List<MenuResult> GetMenuList(MenuRequest qry) ;
+}
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/LoginServiceImpl.java b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/LoginServiceImpl.java
new file mode 100644
index 0000000..174fbd7
--- /dev/null
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/business/service/LoginServiceImpl.java
@@ -0,0 +1,194 @@
+package com.seasky.template.business.service;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.seasky.core.common.Error;
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.exception.DataBusinessException;
+import com.seasky.core.util.ExceptionUtil;
+import com.seasky.template.business.api.LoginService;
+import com.seasky.template.utils.HttpClientUtil;
+import com.seasky.template.utils.PropertyUtil;
+import com.seasky.template.utils.StringToMd5Hash;
+import com.seasky.template.web.dto.request.LoginRequest;
+import com.seasky.template.web.dto.request.LoginTokenRequest;
+import com.seasky.template.web.dto.request.MenuRequest;
+import com.seasky.template.web.dto.result.LoginInfoResult;
+import com.seasky.template.web.dto.result.MenuResult;
+import com.seasky.template.web.dto.result.UserInfoResult;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+@Service
+public class LoginServiceImpl implements LoginService {
+    @Resource
+    PropertyUtil propertyUtil;
+    @Override
+    public List<LoginInfoResult> GetLogInfo(LoginRequest qry) {
+        String path=propertyUtil.getInnerInterfacePath();
+        String secret = propertyUtil.getSecret();
+        String systemid=propertyUtil.getSystemid();
+        if(Objects.isNull(path)) throw ExceptionUtil.getException(null, "请配置内部接口地址!");
+        if(Objects.isNull(secret)) throw ExceptionUtil.getException(null, "请配置内部接口secret!");
+        if(Objects.isNull(systemid)) throw ExceptionUtil.getException(null, "请配置内部接口systemid!");
+        if(Objects.isNull(qry.getPrincipals())) throw ExceptionUtil.getException(null, "登录名不能为空!");
+        if(Objects.isNull(qry.getCredentials())) throw ExceptionUtil.getException(null, "登录密码不能为空!");
+        String url = path+ "/User/GetLogInfo";
+        Map<String, Object> map = new HashMap<>();
+        map.put("principals", qry.getPrincipals());
+        map.put("credentials", qry.getCredentials());
+        map.put("SystemID",systemid);
+        LocalDateTime currentDate = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH");
+        String formattedDate = currentDate.plusHours(1).format(formatter);
+        String token=systemid+"|"+formattedDate+"|"+secret;
+        map.put("Token", StringToMd5Hash.toMD5(token));
+        String s = HttpClientUtil.doPostJson(url, JSONObject.toJSONString(map));
+        JSONObject stationObj = JSONObject.parseObject(s);
+        if (stationObj.getString("isSuccess") == null || !stationObj.getBoolean("isSuccess")) {
+            throw new DataBusinessException(
+                    Error.builder()
+                            .message(stationObj.getString("errorMessage") == null?"登录失败!":stationObj.getString("errorMessage"))
+                            .responseCode(ResponseCode.DATA_ACCESS_EXCEPTION)
+                            .build()
+            );
+        }
+        JSONArray stationArray = stationObj.getJSONArray("data");
+        if(stationArray.size()==0)
+            throw new DataBusinessException(
+                    Error.builder()
+                            .message(stationObj.getString("errorMessage") == null?"登录失败!":stationObj.getString("errorMessage"))
+                            .responseCode(ResponseCode.DATA_ACCESS_EXCEPTION)
+                            .build()
+            );
+
+        List<LoginInfoResult> records=new ArrayList<>();
+        for (int i=0;i<stationArray.size();i++) {
+            JSONObject object=stationArray.getJSONObject(i);
+            LoginInfoResult loginInfoOut=new LoginInfoResult();
+            loginInfoOut.setPersonName(object.getString("personName"));
+            loginInfoOut.setPersonId(object.getString("personID"));
+            loginInfoOut.setToken(object.getString("token"));
+            records.add(loginInfoOut);
+        }
+        return records;
+    }
+
+    @Override
+    public String SfpLoginVerify(LoginRequest qry) {
+        return null;
+    }
+
+    @Override
+    public UserInfoResult GetLoginToken(LoginTokenRequest qry) {
+        String path = propertyUtil.getInnerInterfacePath();
+        String secret = propertyUtil.getSecret();
+        String systemid = propertyUtil.getSystemid();
+        if (Objects.isNull(path)) throw ExceptionUtil.getException(null, "请配置内部接口地址!");
+        if (Objects.isNull(secret)) throw ExceptionUtil.getException(null, "请配置内部接口secret!");
+        if (Objects.isNull(systemid)) throw ExceptionUtil.getException(null, "请配置内部接口systemid!");
+        if (Objects.isNull(qry.getToken())) throw ExceptionUtil.getException(null, "登录名失败!");
+        String url = path + "/User/GetLoginToken";
+        Map<String, Object> map = new HashMap<>();
+        map.put("token", qry.getToken());
+
+        map.put("SystemID", systemid);
+        LocalDateTime currentDate = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH");
+        String formattedDate = currentDate.plusHours(1).format(formatter);
+        String token = systemid + "|" + formattedDate + "|" + secret;
+        map.put("Token", StringToMd5Hash.toMD5(token));
+        String s = HttpClientUtil.doPostJson(url, JSONObject.toJSONString(map));
+        JSONObject stationObj = JSONObject.parseObject(s);
+        if (stationObj.getString("isSuccess") == null || !stationObj.getBoolean("isSuccess")) {
+            throw new DataBusinessException(
+                    Error.builder()
+                            .message(stationObj.getString("errorMessage") == null ? "登录失败!" : stationObj.getString("errorMessage"))
+                            .responseCode(ResponseCode.DATA_ACCESS_EXCEPTION)
+                            .build()
+            );
+        }
+        JSONObject stationArray = JSONObject.parseObject(stationObj.getString("data"));
+        if (stationArray.size() == 0)
+            throw new DataBusinessException(
+                    Error.builder()
+                            .message(stationObj.getString("errorMessage") == null ? "登录失败!" : stationObj.getString("errorMessage"))
+                            .responseCode(ResponseCode.DATA_ACCESS_EXCEPTION)
+                            .build()
+            );
+        UserInfoResult userInfoOut = new UserInfoResult();
+        userInfoOut.setUserName(stationArray.getString("userName"));
+        userInfoOut.setEmployee(stationArray.getBoolean("isEmployee"));
+        userInfoOut.setStudent(stationArray.getBoolean("isStudent"));
+        userInfoOut.setPersonId(stationArray.getString("personID"));
+        userInfoOut.setPersonName(stationArray.getString("personName"));
+        return userInfoOut;
+    }
+
+    @Override
+    public List<MenuResult> GetMenuList(MenuRequest qry) {
+        String path=propertyUtil.getInnerInterfacePath();
+        String secret = propertyUtil.getSecret();
+        String systemid=propertyUtil.getSystemid();
+        if(Objects.isNull(path)) throw ExceptionUtil.getException(null, "请配置内部接口地址!");
+        if(Objects.isNull(secret)) throw ExceptionUtil.getException(null, "请配置内部接口secret!");
+        if(Objects.isNull(systemid)) throw ExceptionUtil.getException(null, "请配置内部接口systemid!");
+        if(Objects.isNull(qry.getPersonId())) throw ExceptionUtil.getException(null, "登录名失败!");
+        String url = path+ "/User/GetMenuListByModule";
+        Map<String, Object> map = new HashMap<>();
+        map.put("PersonId", qry.getPersonId());
+        map.put("module","RE");
+
+        map.put("SystemID",systemid);
+        LocalDateTime currentDate = LocalDateTime.now();
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd-HH");
+        String formattedDate = currentDate.plusHours(1).format(formatter);
+        String token=systemid+"|"+formattedDate+"|"+secret;
+        map.put("Token", StringToMd5Hash.toMD5(token));
+        String s = HttpClientUtil.doPostJson(url, JSONObject.toJSONString(map));
+        JSONObject stationObj = JSONObject.parseObject(s);
+        if (stationObj.getString("isSuccess") == null ||  !stationObj.getBoolean("isSuccess")) {
+            throw new DataBusinessException(
+                    Error.builder()
+                            .message(stationObj.getString("errorMessage") == null?"登录失败!":stationObj.getString("errorMessage"))
+                            .responseCode(ResponseCode.DATA_ACCESS_EXCEPTION)
+                            .build()
+            );
+        }
+        JSONArray stationArray = stationObj.getJSONArray("data");
+        List<MenuResult> records = new ArrayList<>();
+        if(stationArray.size()!=0) {
+
+            for (int i = 0; i < stationArray.size(); i++) {
+                JSONObject object = stationArray.getJSONObject(i);
+                MenuResult menuOut = new MenuResult();
+                menuOut.setMenuNo(object.getString("menuNo"));
+                menuOut.setName(object.getString("name"));
+                menuOut.setRoutingUrl(object.getString("routingUrl"));
+                menuOut.setId(object.getString("id"));
+                menuOut.setApplicationId(object.getString("applicationId"));
+                menuOut.setRoutingUrl(object.getString("routingUrl"));
+                JSONArray childrenArray = object.getJSONArray("children");
+                List<MenuResult> childernRecords = new ArrayList<>();
+                for (int j = 0; j < childrenArray.size(); j++) {
+                    JSONObject childernObject = childrenArray.getJSONObject(j);
+                    MenuResult childern = new MenuResult();
+                    childern.setMenuNo(childernObject.getString("menuNo"));
+                    childern.setName(childernObject.getString("name"));
+                    childern.setRoutingUrl(childernObject.getString("routingUrl"));
+                    childern.setId(childernObject.getString("id"));
+                    childern.setApplicationId(childernObject.getString("applicationId"));
+                    childern.setRoutingUrl(childernObject.getString("routingUrl"));
+                    childernRecords.add(childern);
+                }
+                menuOut.setChildren(childernRecords);
+                records.add(menuOut);
+            }
+        }
+        return records;
+    }
+}
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/utils/HttpClientUtil.java b/ServiceSiteCommon/src/main/java/com/seasky/template/utils/HttpClientUtil.java
new file mode 100644
index 0000000..4f5fe57
--- /dev/null
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/utils/HttpClientUtil.java
@@ -0,0 +1,131 @@
+package com.seasky.template.utils;
+
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+public class HttpClientUtil {
+    public static String doGet(String url, Map<String, String> param) {
+
+    // 创建Httpclient对象
+    CloseableHttpClient httpclient = HttpClients.createDefault();
+
+    String resultString = "";
+    CloseableHttpResponse response = null;
+    try {
+        // 创建uri
+        URIBuilder builder = new URIBuilder(url);
+        if (param != null) {
+            for (String key : param.keySet()) {
+                builder.addParameter(key, param.get(key));
+            }
+        }
+        URI uri = builder.build();
+
+        // 创建http GET请求
+        HttpGet httpGet = new HttpGet(uri);
+
+        // 执行请求
+        response = httpclient.execute(httpGet);
+        // 判断返回状态是否为200
+        if (response.getStatusLine().getStatusCode() == 200) {
+            resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
+        }
+    } catch (Exception e) {
+        e.printStackTrace();
+    } finally {
+        try {
+            if (response != null) {
+                response.close();
+            }
+            httpclient.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+    return resultString;
+}
+
+    public static String doGet(String url) {
+        return doGet(url, null);
+    }
+
+    public static String doPost(String url, Map<String, String> param) {
+        // 创建Httpclient对象
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        String resultString = "";
+        try {
+            // 创建Http Post请求
+            HttpPost httpPost = new HttpPost(url);
+            // 创建参数列表
+            if (param != null) {
+                List<NameValuePair> paramList = new ArrayList<>();
+                for (String key : param.keySet()) {
+                    paramList.add(new BasicNameValuePair(key, param.get(key)));
+                }
+                // 模拟表单
+                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
+                httpPost.setEntity(entity);
+            }
+            // 执行http请求
+            response = httpClient.execute(httpPost);
+            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                response.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+
+        return resultString;
+    }
+
+    public static String doPost(String url) {
+        return doPost(url, null);
+    }
+
+    public static String doPostJson(String url, String json) {
+        // 创建Httpclient对象
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        CloseableHttpResponse response = null;
+        String resultString = "";
+        try {
+            // 创建Http Post请求
+            HttpPost httpPost = new HttpPost(url);
+            // 创建请求内容
+            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
+            httpPost.setEntity(entity);
+            // 执行http请求
+            response = httpClient.execute(httpPost);
+            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                response.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return resultString;
+    }
+}
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/utils/PropertyUtil.java b/ServiceSiteCommon/src/main/java/com/seasky/template/utils/PropertyUtil.java
new file mode 100644
index 0000000..d397bc7
--- /dev/null
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/utils/PropertyUtil.java
@@ -0,0 +1,30 @@
+package com.seasky.template.utils;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+@Data
+public class PropertyUtil {
+    @Value("${innerinterface.url}")
+    private String innerInterfacePath;
+    @Value("${innerinterface.systemid}")
+    private  String systemid;
+    @Value("${innerinterface.secret}")
+    private  String secret;
+    @Value("${sellercode}")
+    private  String sellerCode;
+    @Value("${sellername}")
+    private  String sellerName;
+    @Value("${spp.dzpj.url}")
+    private  String sppDzpjUrl;
+    @Value("${spp.dzpj.key}")
+    private  String sppDzpjKey;
+    @Value("${file.url}")
+    private  String fileUrl;
+    @Value("${file.key}")
+    private  String fileKey;
+    @Value("${file.secre}")
+    private  String fileSecre;
+}
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/utils/StringToMd5Hash.java b/ServiceSiteCommon/src/main/java/com/seasky/template/utils/StringToMd5Hash.java
new file mode 100644
index 0000000..7a69fb5
--- /dev/null
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/utils/StringToMd5Hash.java
@@ -0,0 +1,26 @@
+package com.seasky.template.utils;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+public class StringToMd5Hash {
+    public static String toMD5(String input) {
+        try {
+            // Create MD5 Hash
+            MessageDigest digest = MessageDigest.getInstance("MD5");
+            digest.update(input.getBytes());
+            byte[] messageDigest = digest.digest();
+
+            // Create Hex String
+            StringBuilder hexString = new StringBuilder();
+            for (byte b : messageDigest) {
+                String hex = Integer.toHexString(0xff & b);
+                if (hex.length() == 1) hexString.append('0');
+                hexString.append(hex);
+            }
+            return hexString.toString();
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/LoginController.java b/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/LoginController.java
new file mode 100644
index 0000000..16334c3
--- /dev/null
+++ b/ServiceSiteCommon/src/main/java/com/seasky/template/web/controller/LoginController.java
@@ -0,0 +1,41 @@
+package com.seasky.template.web.controller;
+
+import com.seasky.core.common.ResponseCode;
+import com.seasky.core.common.Result;
+import com.seasky.template.business.api.LoginService;
+import com.seasky.template.web.api.ILoginController;
+import com.seasky.template.web.dto.request.LoginRequest;
+import com.seasky.template.web.dto.request.LoginTokenRequest;
+import com.seasky.template.web.dto.request.MenuRequest;
+import com.seasky.template.web.dto.result.LoginInfoResult;
+import com.seasky.template.web.dto.result.MenuResult;
+import com.seasky.template.web.dto.result.UserInfoResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RestController;
+
+import static com.seasky.core.common.Response.ok;
+
+@RestController
+public class LoginController implements ILoginController {
+    @Autowired
+    LoginService loginService;
+    @Override
+    public Result<LoginInfoResult> GetLogInfo(LoginRequest qry) {
+        return  ok(ResponseCode.SUCCESS, loginService.GetLogInfo(qry));
+    }
+
+    @Override
+    public Result<String> SfpLoginVerify(LoginRequest qry) {
+        return null;
+    }
+
+    @Override
+    public Result<UserInfoResult> GetLoginToken(LoginTokenRequest qry) {
+        return  ok(ResponseCode.SUCCESS, loginService.GetLoginToken(qry));
+    }
+
+    @Override
+    public Result<MenuResult> GetMenuList(MenuRequest qry) {
+        return  ok(ResponseCode.SUCCESS, loginService.GetMenuList(qry));
+    }
+}
diff --git a/ServiceSiteCommon/src/main/resources/application-dev.properties b/ServiceSiteCommon/src/main/resources/application-dev.properties
index 85848d4..09f55e8 100644
--- a/ServiceSiteCommon/src/main/resources/application-dev.properties
+++ b/ServiceSiteCommon/src/main/resources/application-dev.properties
@@ -37,10 +37,21 @@ spring.datasource.druid.read.test-on-borrow=true
 spring.datasource.druid.read.test-on-return=false
 spring.datasource.druid.read.keep-alive=true
 
-pdfResource=D:/pdfResource/arialuni.ttf
+innerinterface.url=http://192.168.2.47:8071/InnerInterface
+innerinterface.systemid=77777777-7777-7777-7777-111111111111
+innerinterface.secret=OGZmNTU3OGZiZTJkMDk3ZDY0MzI0OWIyNzFjYzQyNzc=
+sellercode=123100004250263376
+sellername=????
+spp.dzpj.url=http://demo.seaskysh.com/kp_hx/SPP_DZPJ_QD_PP.asmx
+spp.dzpj.key=seaskyshkp
+file.url=http://192.168.2.47:8082/FileService/
+file.key=14aa7d95-365d-4fc8-86da-425b62a8b1cd
+file.secre=425b62a8ba7d95365d
+
 corePoolSize=10
 maximumPoolSize=90
 keepAliveTime=1
 queue=40000
+pdfResource=D:/pdfResource/arialuni.ttf
 
 
diff --git a/WebSite/.editorconfig b/WebSite/.editorconfig
deleted file mode 100644
index 3454886..0000000
--- a/WebSite/.editorconfig
+++ /dev/null
@@ -1,14 +0,0 @@
-# https://editorconfig.org
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-end_of_line = lf
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[*.md]
-insert_final_newline = false
-trim_trailing_whitespace = false
diff --git a/WebSite/.env.development b/WebSite/.env.development
index 8f5856d..5b1398a 100644
--- a/WebSite/.env.development
+++ b/WebSite/.env.development
@@ -1,14 +1 @@
-# just a flag
-ENV = 'development'
-
-# base api
-VUE_APP_BASE_API = '/dev-api'
-
-# vue-cli uses the VUE_CLI_BABEL_TRANSPILE_MODULES environment variable,
-# to control whether the babel-plugin-dynamic-import-node plugin is enabled.
-# It only does one thing by converting all import() to require().
-# This configuration can significantly increase the speed of hot updates,
-# when you have a large number of pages.
-# Detail:  https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js
-
-VUE_CLI_BABEL_TRANSPILE_MODULES = true
+VUE_APP_BASE_API = '/'
\ No newline at end of file
diff --git a/WebSite/.env.production b/WebSite/.env.production
index 07d391e..9d4496d 100644
--- a/WebSite/.env.production
+++ b/WebSite/.env.production
@@ -1,6 +1 @@
-# just a flag
-ENV = 'production'
-
-# base api
-VUE_APP_BASE_API = '/api'
-
+VUE_APP_BASE_API = '/SFP_Income'
\ No newline at end of file
diff --git a/WebSite/.env.staging b/WebSite/.env.staging
deleted file mode 100644
index d69f663..0000000
--- a/WebSite/.env.staging
+++ /dev/null
@@ -1,8 +0,0 @@
-NODE_ENV = production
-
-# just a flag
-ENV = 'staging'
-
-# base api
-VUE_APP_BASE_API = '/api'
-
diff --git a/WebSite/.env.test b/WebSite/.env.test
deleted file mode 100644
index 49eb66d..0000000
--- a/WebSite/.env.test
+++ /dev/null
@@ -1,8 +0,0 @@
-NODE_ENV = production
-
-# just a flag
-ENV = 'test'
-
-# base api
-VUE_APP_BASE_API = '/api'
-
diff --git a/WebSite/.eslintrc.js b/WebSite/.eslintrc.js
index c5ce0ef..95a72ae 100644
--- a/WebSite/.eslintrc.js
+++ b/WebSite/.eslintrc.js
@@ -1,15 +1,26 @@
+/*
+ * @Description: 
+ * @Autor: dongjunhua
+ * @Date: 2020-12-17 10:20:47
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2020-12-18 09:49:30
+ */
 module.exports = {
   root: true,
   env: {
     node: true
   },
-  extends: ["plugin:vue/essential", "@vue/prettier"],
-  rules: {
-    'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off',
-    'no-unused-vars': "off",
-    'no-console': "off"
-  },
+  extends: ['plugin:vue/vue3-essential', 'eslint:recommended', '@vue/prettier'],
   parserOptions: {
-    parser: "babel-eslint"
-  }
+    parser: 'babel-eslint'
+  },
+  rules: {
+    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
+    'vue/comment-directive': 0
+}
+
 };
+plugins: [
+  "vue"
+]
\ No newline at end of file
diff --git a/WebSite/.gitignore b/WebSite/.gitignore
index eec5347..403adbc 100644
--- a/WebSite/.gitignore
+++ b/WebSite/.gitignore
@@ -1,14 +1,17 @@
 .DS_Store
-node_modules/
-dist/
+node_modules
+/dist
+
+
+# local env files
+.env.local
+.env.*.local
+
+# Log files
 npm-debug.log*
 yarn-debug.log*
 yarn-error.log*
-**/*.log
-
-tests/**/coverage/
-tests/e2e/reports
-selenium-debug.log
+pnpm-debug.log*
 
 # Editor directories and files
 .idea
@@ -17,7 +20,4 @@ selenium-debug.log
 *.ntvs*
 *.njsproj
 *.sln
-*.local
-
-# package-lock.json
-yarn.lock
+*.sw?
diff --git a/WebSite/.prettierrc.js b/WebSite/.prettierrc.js
index 6294ecf..f937327 100644
--- a/WebSite/.prettierrc.js
+++ b/WebSite/.prettierrc.js
@@ -1,12 +1,12 @@
 /*
  * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-08 09:28:07
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-06-08 12:47:32
- */ 
+ * @Autor: dongjunhua
+ * @Date: 2020-12-18 09:43:18
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2020-12-18 09:49:08
+ */
 module.exports = {
   semi: true,
-  printWidth: 80,
-  endOfLine: "auto"
-};
+  singleQuote: true,
+  bracketSpacing: true
+}
\ No newline at end of file
diff --git a/WebSite/.travis.yml b/WebSite/.travis.yml
deleted file mode 100644
index f4be7a0..0000000
--- a/WebSite/.travis.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-language: node_js
-node_js: 10
-script: npm run test
-notifications:
-  email: false
diff --git a/WebSite/Dockerfile b/WebSite/Dockerfile
deleted file mode 100644
index 86f2bc7..0000000
--- a/WebSite/Dockerfile
+++ /dev/null
@@ -1,9 +0,0 @@
-From nginx:latest
-#COPY ./dist /usr/share/nginx/html
-#COPY ./conf/nginx.conf /etc/nginx/nginx.conf
-COPY ./dist /app/html
-COPY ./conf/nginx.conf /app/nginx.conf
-COPY ./conf/init.sh /app/run.sh
-ENTRYPOINT ["nohup","/app/run.sh","&"]
-CMD [ "" ]
-#ENTRYPOINT ["nginx","-g","daemon off"]
\ No newline at end of file
diff --git a/WebSite/LICENSE b/WebSite/LICENSE
index 6151575..1b81e7c 100644
--- a/WebSite/LICENSE
+++ b/WebSite/LICENSE
@@ -1,6 +1,6 @@
 MIT License
 
-Copyright (c) 2017-present PanJiaChen
+Copyright (c) 2021 DongJunHua
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
diff --git a/WebSite/README.md b/WebSite/README.md
index 33d03e3..648b2d4 100644
--- a/WebSite/README.md
+++ b/WebSite/README.md
@@ -1,27 +1,235 @@
-<!--
- * @Descripttion: 
- * @Author: dongjunhua
- * @Date: 2020-04-21 18:54:20
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-18 15:41:52
--->
-# Vue Element Admin
+![](docs/logo_s.png)
 
-前端基础模板,基于 Vue 2.x 及 element-ui
 
-模板后续内容仅在 develop 分支更新,请勿使用 master 分支
 
-**更新历史**
+# Vue Element Next
 
-2020/9/18  
-version: 1.1.0  
-内容:添加前端UI规范,调整部分界面
+基于Vue 3及Element的新版前端框架模板
 
-2020/8/20  
-version: 1.0.0  
-内容:第一个正式版本
+※ 最新版本:v0.7.8(305)-alpha
 
-**注意事项**
+※ 项目地址:http://git.seaskysh.com.cn:8800/dongjunhua/vue-element-next
+
+※ Vue.js 3相关文档文档请参考:https://v3.vuejs.org/
+
+※ Element Plus组件库文档请参考:https://element-plus.gitee.io/#/zh-CN
+
+※ 项目目前仍处于alpha版本阶段,尚不完善且稳定性相对较差,可能存在一系列的问题
+
+※ 如发现任何问题,欢迎随时报告或提交合并请求,以便快速修复和迭代
+
+
+
+
+
+## 如何运行项目
+
+##### 下载项目依赖
+
+```
+npm install
+```
+
+##### 开发环境编译并运行
+```
+npm run serve
+```
+
+##### 开发环境编译并运行(同时启动mock服务)
+
+```
+npm run serve-mock
+```
+
+##### 生产环境打包项目
+
+```
+npm run build
+```
+
+##### 格式化代码
+```
+npm run lint
+```
+
+
+
+
+
+## 说明文档
+
+#### 一、项目结构及主要目录
+
+| 位置            | 说明                                                         |
+| --------------- | ------------------------------------------------------------ |
+| /mock           | mock.js目录,mock的作用是为项目提供模拟数据,方便脱离后端进行开发 |
+| /src            | 主目录                                                       |
+| /src/api        | api接口方法目录,按业务功能划分                              |
+| /src/components | 公共组件目录                                                 |
+| /src/core       | 核心代码及类库目录                                           |
+| /src/layout     | 布局结构代码目录,包括边栏(菜单)、顶栏(面包屑等)、标签栏以及主显示区域 |
+| /src/router     | 路由模块目录                                                 |
+| /src/settings   | 项目参数配置目录                                             |
+| /src/store      | vuex全局状态管理模块目录                                     |
+| /src/style      | 样式目录                                                     |
+| /src/utils      | 工具类目录                                                   |
+| /src/views      | 业务功能页面组件目录                                         |
+
+
+
+#### 二、独立会话模块(ISM)
+
+独立会话模块是模板项目的核心模块,提供了完整的会话相关功能,包括认证、授权、加密和会话管理等,其目的在于解决以往前端开发人员因为经验和对公司基础数据业务流程、逻辑的认识不够,所导致的影响开发效率或其他相关问题。
+
+主要由以下子模块组成:
+
+##### ※ Subject
+
+###### 目录:/src/store/modules/subject.js
+
+独立会话模块的核心子模块,意为主体,会话的管理者,借由vuex实现,维护会话数据并调度其他模块诸如路由来实现对权限的控制,注意,Subject内部不会直接调用任何后端接口来获得认证或授权数据,这些数据需要通过Realm来提供。
+
+以下是Subject提供的方法
+
+| 方法            | 参数    | 参数类型                   | 功能                                                         |
+| --------------- | ------- | -------------------------- | ------------------------------------------------------------ |
+| login           | token   | String/AuthenticationToken | 登录并生成前端会话,在默认模式下,调用此方法需要提供一个AuthenticationToken实例,在单点登录模式下,则通常需要提供单点登录端返回的令牌码,login会调用Realm.doGetAuthenticationInfo()方法并传入token,通常我们应该在此方法中调用后端登录接口或通过令牌获取登录用户信息,并返回一个AuthenticationInfo实例作为认证结果。AuthenticationToken实例对象包含两个字段:<br />**principals**(String/必须):身份,通常为用户名;<br />**credentials**(String/必须):证明,通常为密码。 |
+| permit          | payload | Object                     | 授权,在登录完成后调用,permit会调用Realm.doGetAuthorizationInfo()方法,通常我们应该在此方法中调用后端接口获取当前登录用户的权限相关信息,并返回一个AuthorizationInfo实例。<br />该方法接收一个对象作为参数,包括两个字段:<br />**authorizationToken**(String/可选):该参数会作为Realm.doGetAuthorizationInfo()方法的参数;<br />**afterPermitted**(Function/可选):该函数将会在授权完成后被执行(例如:单点登录端完成登录后需要跳转回业务系统),默认情况下,subject将会调度router跳转到首页。 |
+| checkPermission | payload | Object                     | 用于对路由进行权限校验,该方法在路由守卫中被调用并返回校验结果。<br />该方法接收一个对象作为参数,包括两个字段:<br />**path**(String/必须):需要被校验的路由;<br />**whiteList**(Array/可选):白名单,用于豁免权限校验。 |
+| recovery        | /       | /                          | 用于在vuex重置后从storage恢复会话信息,在路由守卫中被调用。  |
+| logout          | payload | Object                     | 注销当前会话,注销前将会调用Realm.beforeLogout(),通常用于调用后端注销接口,注销后将调度router跳转到登录页面,单点登录模式下将跳转到响应的单点登录地址。<br />该方法接收一个对象作为参数,包括四个字段:<br />**beforeLogout**(Function/可选):用于替换默认的Realm.beforeLogout(),在单点登录模式下,可在该函数返回单点登录的地址;<br />**ssoAddress**(String/可选):单点登录模式下使用,表示单点登录地址,注意,共有三个入口可提供单点登录地址,优先级为:此字段提供的地址 > beforeLogout()返回的地址 > setting中定义的地址;<br />**ssoLogout**(Boolean/可选):单点登录模式下使用,用于注销单点登录端的会话<br />**query**(Object/可选):跳转登录页面时附加的参数。 |
+
+
+
+##### ※ Realm
+
+###### 目录:/src/core/base/Realm.js
+
+安全数据源,用于为Subject提供会话所必须的数据(账号、用户、权限等),通常我们需要在Realm的方法中调用相应的后端api接口获取必要的数据,并返回给Subject。
+
+主要方法如下:
+
+```
+  /**
+   * @method 获取身份认证信息
+   * @for Realm
+   * @param {*} authenticationToken
+   * @return {Promise}
+   */
+  static async doGetAuthenticationInfo(authenticationToken) {
+    const { principals, credentials } = authenticationToken;
+    // 调用后端api
+    // 必须返回一个AuthenticationInfo实例
+    return new AuthenticationInfo();
+  }
+  
+  /**
+   * @method 获取用户权限信息
+   * @for Realm
+   * @param {*} authorizationToken
+   * @return {Promise}
+   */
+  static async doGetAuthorizationInfo(authorizationToken) {
+    // 调用后端api
+    // 必须返回一个AuthorizationInfo实例
+    return new AuthorizationInfo();
+  }
+  
+  /**
+   * @method 注销前的行为
+   * @for Realm
+   * @return {String} ssoAddress
+   */
+  static async beforeLogout() {
+    // 调用后端api,通常是注销
+    // 可返回一个单点登录地址
+    return;
+  }
+```
+
+
+
+##### ※ Guards
+
+###### 目录:/src/router/guards.js
+
+全局路由守卫,用于与subject配合来完成权限校验和路由跳转。
+
+流程图如下:
+
+![](docs/guards_er.png)
+
+
+
+##### ※ Storage
+
+###### 目录:/src/utils/Storage.js
+
+Storage工具类,用于配合subject完成对前端会话的持久化数据维护(包括部分app参数),提供新增,更新和删除,加解密等方法,可配置过期时间。
+
+主要方法如下:
+
+```
+  /**
+   * @method 设置localStorage
+   * @for Storage
+   * @param {string} key
+   * @param {*} value
+   * @param {number} expired
+   */
+  static setLocal(key, value, expired)
+  
+  /**
+   * @method 获取localStorage
+   * @for Storage
+   * @param {string} key
+   * @return {*}
+   */
+  static getLocal(key)
+  
+  /**
+   * @method 删除localStorage
+   * @for Storage
+   * @param {string} key
+   */
+  static delLocal(key)
+  
+  /**
+   * @method 设置sessionStorage
+   * @for Storage
+   * @param {string} key
+   * @param {*} value
+   * @param {number} expired
+   */
+  static setSession(key, value, expired)
+  
+  /**
+   * @method 获取sessionStorage
+   * @for Storage
+   * @param {string} key
+   * @return {*}
+   */
+  static getSession(key)
+  
+  /**
+   * @method 删除sessionStorage
+   * @for Storage
+   * @param {string} key
+   */
+  static delSession(key)
+  
+  /**
+   * @method 添加对Storage的监听
+   * @for Storage
+   * @param {function} callback
+   */
+  static addListener(callback)
+  
+  /**
+   * @method 删除对Storage的监听
+   * @for Storage
+   * @param {function} callback
+   */
+  static removeListener(callback)
+```
 
-如需在打包时使用特定的配置(例如后端地址),请在根目录添加对应的 .env.xxx 文件(xxx 为自定义的环境名称),并在 /src/assets/configs 目录下添加 xxx.json 文件,
-最后在 package.json 中的 scripts 字段中添加对应的命令:"build:xxx": "vue-cli-service build --mode xxx"
diff --git a/WebSite/babel.config.js b/WebSite/babel.config.js
index ba17966..916db64 100644
--- a/WebSite/babel.config.js
+++ b/WebSite/babel.config.js
@@ -1,5 +1,3 @@
 module.exports = {
-  presets: [
-    '@vue/app'
-  ]
-}
+  presets: ['@vue/cli-plugin-babel/preset']
+};
diff --git a/WebSite/conf/init.sh b/WebSite/conf/init.sh
deleted file mode 100644
index 0655229..0000000
--- a/WebSite/conf/init.sh
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/bash
-rm -rf /usr/share/nginx/html/*
-cp -r /app/html/. /usr/share/nginx/html
-cp /app/nginx.conf /etc/nginx/nginx.conf
-#echo "cp finish"
-nginx
-tail -f /dev/null
\ No newline at end of file
diff --git a/WebSite/conf/nginx.conf b/WebSite/conf/nginx.conf
deleted file mode 100644
index 59cb2ea..0000000
--- a/WebSite/conf/nginx.conf
+++ /dev/null
@@ -1,80 +0,0 @@
-
-user  nginx;
-worker_processes  1;
-
-error_log  /var/log/nginx/error.log warn;
-pid        /var/run/nginx.pid;
-
-
-events {
-    worker_connections  1024;
-}
-
-#设定http服务器,利用它的反向代理功能提供负载均衡支持
-http {
-    include       /etc/nginx/mime.types;
-    default_type  application/octet-stream;
-
-    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
-                      '$status $body_bytes_sent "$http_referer" '
-                      '"$http_user_agent" "$http_x_forwarded_for"';
-
-    access_log  /var/log/nginx/access.log  main;
-
-    #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
-    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
-    sendfile        on;
-    #tcp_nopush     on;
-
-    #连接超时时间
-    keepalive_timeout  120;
-    tcp_nodelay        on;
-
-    #gzip压缩开关
-    #gzip  on;
-
-    include /etc/nginx/conf.d/*.conf;
-
-    #HTTP服务器
-    server {
-        #监听80端口,80端口是知名端口号,用于HTTP协议
-        listen       80;
-
-        #定义使用www.xx.com访问
-        server_name  47.110.127.118;
-
-        #首页
-        index index.html
-
-        #指向webapp的目录
-        root /usr/share/nginx/html;
-
-        #编码格式
-        charset utf-8;
-
-        #反向代理的路径(和upstream绑定),location 后面设置映射的路径
-        location /api/ {
-            proxy_pass http://47.110.127.118:8001/;
-        }
-
-        location / {
-         # ng build生成的文件夹目录
-         root   /usr/share/nginx/html;
-         try_files $uri $uri/ /index.html =404;
-         index  index.html;
-        }
-    }
-
-    #server {
-    #    listen       8288;
-    #    server_name  47.110.127.118;
-    #    charset utf-8;
-    #    add_header 'Access-Control-Allow-Origin' '*';
-    #    add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
-    #    add_header 'Access-Control-Allow-Methods' 'PUT,POST,GET,DELETE,OPTIONS';
-    #    location / {
-    #        root  /file;
-    #    }
-    #}
-
-}
diff --git a/WebSite/jest.config.js b/WebSite/jest.config.js
deleted file mode 100644
index 143cdc8..0000000
--- a/WebSite/jest.config.js
+++ /dev/null
@@ -1,24 +0,0 @@
-module.exports = {
-  moduleFileExtensions: ['js', 'jsx', 'json', 'vue'],
-  transform: {
-    '^.+\\.vue$': 'vue-jest',
-    '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$':
-      'jest-transform-stub',
-    '^.+\\.jsx?$': 'babel-jest'
-  },
-  moduleNameMapper: {
-    '^@/(.*)$': '<rootDir>/src/$1'
-  },
-  snapshotSerializers: ['jest-serializer-vue'],
-  testMatch: [
-    '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)'
-  ],
-  collectCoverageFrom: ['src/utils/**/*.{js,vue}', '!src/utils/auth.js', '!src/utils/request.js', 'src/components/**/*.{js,vue}'],
-  coverageDirectory: '<rootDir>/tests/unit/coverage',
-  // 'collectCoverage': true,
-  'coverageReporters': [
-    'lcov',
-    'text-summary'
-  ],
-  testURL: 'http://localhost/'
-}
diff --git a/WebSite/mock/account.js b/WebSite/mock/account.js
index bad54c0..30f1a59 100644
--- a/WebSite/mock/account.js
+++ b/WebSite/mock/account.js
@@ -1,166 +1,138 @@
 /*
  * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-07-11 19:09:10
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-18 13:57:07
+ * @Autor: dongjunhua
+ * @Date: 2021-01-28 10:12:07
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-02-18 15:32:15
  */
-import { deepClone } from "../src/utils/index";
+
+const { deepClone } = require('./utils');
 
 const userList = [
   {
-    id: "1",
-    available: "YES",
-    versionDate: "2020-07-01 01:34:33.767",
-    updator: "1",
-    creator: "1",
-    remark: "test",
-    name: "角色1",
-    code: "0001",
-    userType: "ADMIN",
-    mobilePhone: "15911111111",
-    email: "test@seasky.com",
-    enabled: "YES"
+    id: '1',
+    available: 'YES',
+    versionDate: '2020-07-01 01:34:33.767',
+    updator: '1',
+    creator: '1',
+    remark: '',
+    name: 'Administrator',
+    code: 'admin',
+    userType: 'ADMIN',
+    mobilePhone: '15911111111',
+    email: 'test@seasky.com',
+    enabled: 'YES'
+  },
+  {
+    id: '2',
+    available: 'YES',
+    versionDate: '2020-07-01 01:34:33.767',
+    updator: '1',
+    creator: '1',
+    remark: '',
+    name: 'Guest 01',
+    code: '0001',
+    userType: 'ADMIN',
+    mobilePhone: '15911111111',
+    email: 'test@seasky.com',
+    enabled: 'YES'
   },
   {
-    id: "2",
-    available: "YES",
-    versionDate: "2020-07-01 01:34:33.767",
-    updator: "1",
-    creator: "1",
-    remark: "test",
-    name: "角色2",
-    code: "0002",
-    userType: "ADMIN",
-    mobilePhone: "15911111111",
-    email: "test@seasky.com",
-    enabled: "YES"
+    id: '3',
+    available: 'YES',
+    versionDate: '2020-07-01 01:34:33.767',
+    updator: '1',
+    creator: '1',
+    remark: '',
+    name: 'Guest 02',
+    code: '0002',
+    userType: 'ADMIN',
+    mobilePhone: '15911111111',
+    email: 'test@seasky.com',
+    enabled: 'YES'
   }
 ];
 
 const menuList = [
   {
-    id: "1",
-    available: "YES",
-    versionDate: "2020-07-10 02:31:46.962",
-    creator: "1",
-    applicationId: "1",
-    menuNo: "0000",
-    name: "演示",
-    icon: "list",
-    parentId: "0",
-    routingUrl: "",
-    isNewWindow: "NO",
-    isSystem: "YES",
-    withUserId: "NO",
-    enabled: "YES",
-    authUser: ["1", "2"],
+    id: '1',
+    available: 'YES',
+    versionDate: '2020-07-10 02:31:46.962',
+    creator: '1',
+    applicationId: '1',
+    menuNo: '0000',
+    name: 'Hello World',
+    icon: 'fas fa-globe-asia',
+    parentId: '0',
+    routingUrl: '',
+    isNewWindow: 'NO',
+    isSystem: 'YES',
+    withUserId: 'NO',
+    enabled: 'YES',
+    authUser: ['1', '2'],
     children: [
       {
-        id: "2",
-        available: "YES",
-        versionDate: "2020-07-10 05:53:01.597",
-        updator: "1",
-        creator: "1",
-        applicationId: "1",
-        menuNo: "SBD_001",
-        name: "驾驶舱",
-        icon: "dashboard",
-        parentId: "1",
-        routingUrl: "dashboard",
-        redirectUrl: "",
-        urlParameter: "",
-        isNewWindow: "NO",
-        isSystem: "NO",
-        withUserId: "NO",
-        enabled: "YES",
-        authUser: ["1"],
+        id: '2',
+        available: 'YES',
+        versionDate: '2020-07-10 05:53:01.597',
+        updator: '1',
+        creator: '1',
+        applicationId: '1',
+        menuNo: 'SBD_001',
+        name: 'Hello A',
+        icon: 'fas fa-cube',
+        parentId: '1',
+        routingUrl: 'hello/helloa',
+        redirectUrl: '',
+        urlParameter: '',
+        isNewWindow: 'NO',
+        isSystem: 'NO',
+        withUserId: 'NO',
+        enabled: 'YES',
+        authUser: ['1', '2'],
         children: []
       },
       {
-        id: "3",
-        available: "YES",
-        versionDate: "2020-07-10 05:53:08.334",
-        updator: "1",
-        creator: "1",
-        applicationId: "1",
-        menuNo: "SBD_003",
-        name: "UI规范",
-        icon: "example",
-        parentId: "1",
-        routingUrl: "",
-        redirectUrl: "",
-        urlParameter: "",
-        isNewWindow: "NO",
-        isSystem: "NO",
-        withUserId: "NO",
-        enabled: "YES",
-        authUser: ["1"],
-        children: [
-          {
-            id: "301",
-            menuNo: "301",
-            name: "概述",
-            icon: "",
-            routingUrl: "example/index",
-            redirectUrl: "",
-            authUser: ["1"]
-          },
-          {
-            id: "302",
-            menuNo: "302",
-            name: "布局",
-            icon: "",
-            routingUrl: "example/layout",
-            redirectUrl: "",
-            authUser: ["1"]
-          },
-          {
-            id: "303",
-            menuNo: "303",
-            name: "图标",
-            icon: "",
-            routingUrl: "example/icon",
-            redirectUrl: "",
-            authUser: ["1"]
-          },
-          {
-            id: "304",
-            menuNo: "304",
-            name: "按钮",
-            icon: "",
-            routingUrl: "example/button",
-            redirectUrl: "",
-            authUser: ["1"]
-          },
-          {
-            id: "305",
-            menuNo: "305",
-            name: "表格",
-            icon: "",
-            routingUrl: "example/table",
-            redirectUrl: "",
-            authUser: ["1"]
-          },
-          {
-            id: "306",
-            menuNo: "306",
-            name: "表单",
-            icon: "",
-            routingUrl: "example/form",
-            redirectUrl: "",
-            authUser: ["1"]
-          },
-          {
-            id: "307",
-            menuNo: "307",
-            name: "对话框",
-            icon: "",
-            routingUrl: "example/dialog",
-            redirectUrl: "",
-            authUser: ["1"]
-          }
-        ]
+        id: '3',
+        available: 'YES',
+        versionDate: '2020-07-10 05:53:01.597',
+        updator: '1',
+        creator: '1',
+        applicationId: '1',
+        menuNo: 'SBD_002',
+        name: 'Hello B',
+        icon: 'fas fa-feather-alt',
+        parentId: '1',
+        routingUrl: 'hello/hellob',
+        redirectUrl: '',
+        urlParameter: '',
+        isNewWindow: 'NO',
+        isSystem: 'NO',
+        withUserId: 'NO',
+        enabled: 'YES',
+        authUser: ['1'],
+        children: []
+      },
+      {
+        id: '4',
+        available: 'YES',
+        versionDate: '2020-07-10 05:53:01.597',
+        updator: '1',
+        creator: '1',
+        applicationId: '1',
+        menuNo: 'SBD_003',
+        name: 'Hello C',
+        icon: 'fas fa-layer-group',
+        parentId: '1',
+        routingUrl: 'hello/helloc',
+        redirectUrl: '',
+        urlParameter: '',
+        isNewWindow: 'NO',
+        isSystem: 'NO',
+        withUserId: 'NO',
+        enabled: 'YES',
+        authUser: ['1'],
+        children: []
       }
     ]
   }
@@ -186,53 +158,53 @@ function getMenuListByUser() {
   return menus;
 }
 
-export default [
+module.exports = [
   // login
   {
-    url: "/account/pc/v1/login",
-    type: "post",
-    response: _ => {
+    url: '/account/pc/v1/login',
+    type: 'post',
+    response: () => {
       return {
         data: [
           {
-            id: "1",
-            available: "YES",
-            versionDate: "2020-07-08 02:30:50.390",
-            updator: "1",
-            username: "admin",
-            enabled: "YES",
-            isInitial: "NO",
+            id: '1',
+            available: 'YES',
+            versionDate: '2020-07-08 02:30:50.390',
+            updator: '1',
+            username: 'admin',
+            enabled: 'YES',
+            isInitial: 'NO',
             users: userList,
-            token: "d79ba79c-0561-43ed-afa4-d94a9ef2b5ff"
+            token: 'd79ba79c-0561-43ed-afa4-d94a9ef2b5ff'
           }
         ],
-        code: "00000",
-        description: "成功",
-        currentTime: "1594465972765",
-        rid: "pyAn4K2g"
+        code: '00000',
+        description: '成功',
+        currentTime: '1594465972765',
+        rid: 'pyAn4K2g'
       };
     }
   },
   // setCurrent
   {
-    url: "/user/pc/v1/setCurrent",
-    type: "post",
+    url: '/user/pc/v1/setCurrent',
+    type: 'post',
     response: config => {
       const { id } = config.body;
       currentUser = userList.find(u => u.id === id);
       return {
-        code: "00000",
-        currentTime: "1594466609898",
-        description: "成功",
-        rid: "79HgNrDI"
+        code: '00000',
+        currentTime: '1594466609898',
+        description: '成功',
+        rid: '79HgNrDI'
       };
     }
   },
   // getCurrent
   {
-    url: "/user/pc/v1/getCurrent",
-    type: "post",
-    response: _ => {
+    url: '/user/pc/v1/getCurrent',
+    type: 'post',
+    response: () => {
       return {
         data: [
           {
@@ -241,23 +213,23 @@ export default [
             functionList: []
           }
         ],
-        code: "00000",
-        description: "成功",
-        currentTime: "1594466793502",
-        rid: "YBi5A0sJ"
+        code: '00000',
+        description: '成功',
+        currentTime: '1594466793502',
+        rid: 'YBi5A0sJ'
       };
     }
   },
   // modifyPassword
   {
-    url: "/account/pc/v1/modifyPassword",
-    type: "post",
-    response: _ => {
+    url: '/account/pc/v1/modifyPassword',
+    type: 'post',
+    response: () => {
       return {
-        code: "00000",
-        description: "成功",
-        currentTime: "1594466793502",
-        rid: "YBi5A0sJ"
+        code: '00000',
+        description: '成功',
+        currentTime: '1594466793502',
+        rid: 'YBi5A0sJ'
       };
     }
   }
diff --git a/WebSite/mock/application.js b/WebSite/mock/application.js
deleted file mode 100644
index d632ae7..0000000
--- a/WebSite/mock/application.js
+++ /dev/null
@@ -1,169 +0,0 @@
-export default [
-  // application listApplication
-  {
-    url: "/application/pc/v1/listApplication",
-    type: "post",
-    response: config => {
-      return {
-        data: [
-          {
-            id: 1268442997780377601,
-            available: "YES",
-            versionDate: "2020-06-04 07:22:33.393",
-            recognizeId: "20756ac0-a858-4d3f-9989-f5418dc3866a",
-            name: "内部应用1",
-            applicationType: "INNER",
-            enabled: "YES"
-          },
-          {
-            id: 1268443025580224514,
-            available: "YES",
-            versionDate: "2020-06-04 07:22:39.890",
-            recognizeId: "0e010dfd-f48b-44b0-8f19-2157083d9a30",
-            name: "内部应用2",
-            applicationType: "INNER",
-            enabled: "YES"
-          }
-        ],
-        pageIndex: 1,
-        pageSize: 10,
-        pageCount: 1,
-        total: 2,
-        code: "00000",
-        description: "成功",
-        currentTime: 1591602092687,
-        rid: "AynrJyfn"
-      };
-    }
-  },
-
-  {
-    url: "/application/pc/v1/get",
-    type: "post",
-    response: config => {
-      return {
-        data: [
-          {
-            id: 1268442997780377601,
-            available: "YES",
-            versionDate: "2020-06-04 07:22:33.393",
-            recognizeId: "20756ac0-a858-4d3f-9989-f5418dc3866a",
-            name: "内部应用1",
-            applicationType: "INNER",
-            enabled: "YES"
-          }
-        ],
-        code: "00000",
-        description: "成功",
-        currentTime: 1591602092687,
-        rid: "AynrJyfn"
-      };
-    }
-  },
-
-  {
-    url: "/application/pc/v1/createApplication",
-    type: "post",
-    response: config => {
-      return {
-        data: [
-          {
-            id: 1270152614558253057,
-            recognizeId: "470eb8c0-07b9-45d5-903c-2cb3911c2e7a",
-            name: "内部应用11",
-            applicationType: "INNER",
-            secret: "QzBCMjhEMTlDNjNFRTM1RUNDQ0NCNEFCMUMyMjZDNEI=",
-            enabled: "YES"
-          }
-        ],
-        code: "00000",
-        description: "成功",
-        currentTime: 1591662956455,
-        rid: "LifKbaKn"
-      };
-    }
-  },
-
-  {
-    url: "/application/pc/v1/modifyApplication",
-    type: "post",
-    response: config => {
-      return {
-        data: [
-          {
-            id: 1270152614558253057,
-            recognizeId: "470eb8c0-07b9-45d5-903c-2cb3911c2e7a",
-            name: "内部应用11",
-            applicationType: "INNER",
-            enabled: "YES"
-          }
-        ],
-        code: "00000",
-        description: "成功",
-        currentTime: 1591662956455,
-        rid: "LifKbaKn"
-      };
-    }
-  },
-
-  {
-    url: "/application/pc/v1/removeApplication",
-    type: "get",
-    response: config => {
-      return {
-        data: [true],
-        code: "00000",
-        description: "成功",
-        currentTime: 1591662956455,
-        rid: "LifKbaKn"
-      };
-    }
-  },
-
-  {
-    url: "/application/pc/v1/resetApplicationSecret",
-    type: "get",
-    response: config => {
-      return {
-        data: [
-          {
-            id: 1267367522282737666,
-            available: "YES",
-            versionDate: "2020-06-02T18:26:32.916+0000",
-            updator: 1267339697195388929,
-            creator: 1267339697195388929,
-            recognizeId: "48adee8b-a3b5-11ea-be76-00163e142fbd",
-            name: "基础数据",
-            applicationType: "INNER",
-            secret: "QzBCMjhEMTlDNjNFRTM1RUNDQ0NCNEFCMUMyMjZDNEI=",
-            enabled: "YES"
-          }
-        ],
-        code: "00000",
-        description: "成功",
-        currentTime: 1591151192578,
-        rid: "pasRnum3"
-      };
-    }
-  },
-
-  {
-    url: "/application/pc/v1/exportApplication",
-    type: "get",
-    response: "@paragraph(2)"
-  },
-
-  {
-    url: "/application/pc/v1/importApplication",
-    type: "post",
-    response: config => {
-      return {
-        data: [true],
-        code: "00000",
-        description: "成功",
-        currentTime: 1591662956455,
-        rid: "LifKbaKn"
-      };
-    }
-  }
-];
diff --git a/WebSite/mock/article.js b/WebSite/mock/article.js
deleted file mode 100644
index 4955578..0000000
--- a/WebSite/mock/article.js
+++ /dev/null
@@ -1,128 +0,0 @@
-import Mock from "mockjs";
-
-const List = [];
-const count = 100;
-
-const baseContent =
-  '<p>I am testing data, I am testing data.</p><p><img src="https://wpimg.wallstcn.com/4c69009c-0fd4-4153-b112-6cb53d1cf943"></p>';
-const image_uri =
-  "https://wpimg.wallstcn.com/e4558086-631c-425c-9430-56ffb46e70b3";
-
-for (let i = 0; i < count; i++) {
-  List.push(
-    Mock.mock({
-      id: "@increment",
-      timestamp: +Mock.Random.date("T"),
-      author: "@first",
-      reviewer: "@first",
-      title: "@title(5, 10)",
-      content_short: "mock data",
-      content: baseContent,
-      forecast: "@float(0, 100, 2, 2)",
-      importance: "@integer(1, 3)",
-      "type|1": ["CN", "US", "JP", "EU"],
-      "status|1": ["published", "draft"],
-      display_time: "@datetime",
-      comment_disabled: true,
-      pageviews: "@integer(300, 5000)",
-      image_uri,
-      platforms: ["a-platform"]
-    })
-  );
-}
-
-export default [
-  {
-    url: "/vue-element-admin/article/list",
-    type: "get",
-    response: config => {
-      const {
-        importance,
-        type,
-        title,
-        page = 1,
-        limit = 20,
-        sort
-      } = config.query;
-
-      let mockList = List.filter(item => {
-        if (importance && item.importance !== +importance) return false;
-        if (type && item.type !== type) return false;
-        if (title && item.title.indexOf(title) < 0) return false;
-        return true;
-      });
-
-      if (sort === "-id") {
-        mockList = mockList.reverse();
-      }
-
-      const pageList = mockList.filter(
-        (item, index) => index < limit * page && index >= limit * (page - 1)
-      );
-
-      return {
-        code: 20000,
-        data: {
-          total: mockList.length,
-          items: pageList
-        }
-      };
-    }
-  },
-
-  {
-    url: "/vue-element-admin/article/detail",
-    type: "get",
-    response: config => {
-      const { id } = config.query;
-      for (const article of List) {
-        if (article.id === +id) {
-          return {
-            code: 20000,
-            data: article
-          };
-        }
-      }
-    }
-  },
-
-  {
-    url: "/vue-element-admin/article/pv",
-    type: "get",
-    response: _ => {
-      return {
-        code: 20000,
-        data: {
-          pvData: [
-            { key: "PC", pv: 1024 },
-            { key: "mobile", pv: 1024 },
-            { key: "ios", pv: 1024 },
-            { key: "android", pv: 1024 }
-          ]
-        }
-      };
-    }
-  },
-
-  {
-    url: "/vue-element-admin/article/create",
-    type: "post",
-    response: _ => {
-      return {
-        code: 20000,
-        data: "success"
-      };
-    }
-  },
-
-  {
-    url: "/vue-element-admin/article/update",
-    type: "post",
-    response: _ => {
-      return {
-        code: 20000,
-        data: "success"
-      };
-    }
-  }
-];
diff --git a/WebSite/mock/index.js b/WebSite/mock/index.js
index 94723e6..055270b 100644
--- a/WebSite/mock/index.js
+++ b/WebSite/mock/index.js
@@ -1,34 +1,21 @@
 /*
  * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-07-11 18:39:03
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-07-11 19:32:46
+ * @Autor: dongjunhua
+ * @Date: 2021-01-28 10:08:10
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-28 10:16:30
  */
+const Mock = require('mockjs');
+const { param2Obj } = require('./utils');
 
-import Mock from "mockjs";
-import { param2Obj } from "../src/utils";
+const account = require('./account');
 
-import user from "./user";
-import role from "./role";
-import article from "./article";
-import search from "./remote-search";
-import application from "./application";
-import account from "./account";
-
-const mocks = [
-  ...user,
-  ...role,
-  ...article,
-  ...search,
-  ...application,
-  ...account
-];
+const mocks = [...account];
 
 // for front mock
 // please use it cautiously, it will redefine XMLHttpRequest,
 // which will cause many of your third-party libraries to be invalidated(like progress event).
-export function mockXHR() {
+function mockXHR() {
   // mock patch
   // https://github.com/nuysoft/Mock/issues/300
   Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send;
@@ -64,10 +51,13 @@ export function mockXHR() {
   for (const i of mocks) {
     Mock.mock(
       new RegExp(i.url),
-      i.type || "get",
+      i.type || 'get',
       XHR2ExpressReqWrap(i.response)
     );
   }
 }
 
-export default mocks;
+module.exports = {
+  mocks,
+  mockXHR
+};
diff --git a/WebSite/mock/mock-server.js b/WebSite/mock/mock-server.js
index 8a45851..319ec26 100644
--- a/WebSite/mock/mock-server.js
+++ b/WebSite/mock/mock-server.js
@@ -1,14 +1,21 @@
-const chokidar = require("chokidar");
-const bodyParser = require("body-parser");
-const chalk = require("chalk");
-const path = require("path");
-const Mock = require("mockjs");
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2021-01-28 10:07:16
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-28 10:07:39
+ */
+const chokidar = require('chokidar');
+const bodyParser = require('body-parser');
+const chalk = require('chalk');
+const path = require('path');
+const Mock = require('mockjs');
 
-const mockDir = path.join(process.cwd(), "mock");
+const mockDir = path.join(process.cwd(), 'mock');
 
 function registerRoutes(app) {
   let mockLastIndex;
-  const { default: mocks } = require("./index.js");
+  const { mocks } = require('./index.js');
   const mocksForServer = mocks.map(route => {
     return responseFake(route.url, route.type, route.response);
   });
@@ -35,9 +42,9 @@ function unregisterRoutes() {
 const responseFake = (url, type, respond) => {
   return {
     url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`),
-    type: type || "get",
+    type: type || 'get',
     response(req, res) {
-      console.log("request invoke:" + req.path);
+      console.log('request invoke:' + req.path);
       res.json(
         Mock.mock(respond instanceof Function ? respond(req, res) : respond)
       );
@@ -46,9 +53,6 @@ const responseFake = (url, type, respond) => {
 };
 
 module.exports = app => {
-  // es6 polyfill
-  require("@babel/register");
-
   // parse app.body
   // https://expressjs.com/en/4x/api.html#req.body
   app.use(bodyParser.json());
@@ -68,8 +72,8 @@ module.exports = app => {
       ignored: /mock-server/,
       ignoreInitial: true
     })
-    .on("all", (event, path) => {
-      if (event === "change" || event === "add") {
+    .on('all', (event, path) => {
+      if (event === 'change' || event === 'add') {
         try {
           // remove mock routes stack
           app._router.stack.splice(mockStartIndex, mockRoutesLength);
diff --git a/WebSite/mock/remote-search.js b/WebSite/mock/remote-search.js
deleted file mode 100644
index 60809cb..0000000
--- a/WebSite/mock/remote-search.js
+++ /dev/null
@@ -1,51 +0,0 @@
-import Mock from 'mockjs'
-
-const NameList = []
-const count = 100
-
-for (let i = 0; i < count; i++) {
-  NameList.push(Mock.mock({
-    name: '@first'
-  }))
-}
-NameList.push({ name: 'mock-Pan' })
-
-export default [
-  // username search
-  {
-    url: '/vue-element-admin/search/user',
-    type: 'get',
-    response: config => {
-      const { name } = config.query
-      const mockNameList = NameList.filter(item => {
-        const lowerCaseName = item.name.toLowerCase()
-        return !(name && lowerCaseName.indexOf(name.toLowerCase()) < 0)
-      })
-      return {
-        code: 20000,
-        data: { items: mockNameList }
-      }
-    }
-  },
-
-  // transaction list
-  {
-    url: '/vue-element-admin/transaction/list',
-    type: 'get',
-    response: _ => {
-      return {
-        code: 20000,
-        data: {
-          total: 20,
-          'items|20': [{
-            order_no: '@guid()',
-            timestamp: +Mock.Random.date('T'),
-            username: '@name()',
-            price: '@float(1000, 15000, 0, 2)',
-            'status|1': ['success', 'pending']
-          }]
-        }
-      }
-    }
-  }
-]
diff --git a/WebSite/mock/role/index.js b/WebSite/mock/role/index.js
deleted file mode 100644
index 6f74be8..0000000
--- a/WebSite/mock/role/index.js
+++ /dev/null
@@ -1,101 +0,0 @@
-import Mock from "mockjs";
-import { deepClone } from "../../src/utils/index.js";
-import { asyncRoutes, constantRoutes } from "./routes.js";
-
-const routes = deepClone([...constantRoutes, ...asyncRoutes]);
-
-const roles = [
-  {
-    key: "admin",
-    name: "admin",
-    description: "Super Administrator. Have access to view all pages.",
-    routes: routes
-  },
-  {
-    key: "editor",
-    name: "editor",
-    description: "Normal Editor. Can see all pages except permission page",
-    routes: routes.filter(i => i.path !== "/permission") // just a mock
-  },
-  {
-    key: "visitor",
-    name: "visitor",
-    description:
-      "Just a visitor. Can only see the home page and the document page",
-    routes: [
-      {
-        path: "",
-        redirect: "dashboard",
-        children: [
-          {
-            path: "dashboard",
-            name: "Dashboard",
-            meta: { title: "dashboard", icon: "dashboard" }
-          }
-        ]
-      }
-    ]
-  }
-];
-
-export default [
-  // mock get all routes form server
-  {
-    url: "/vue-element-admin/routes",
-    type: "get",
-    response: _ => {
-      return {
-        code: 20000,
-        data: routes
-      };
-    }
-  },
-
-  // mock get all roles form server
-  {
-    url: "/vue-element-admin/roles",
-    type: "get",
-    response: _ => {
-      return {
-        code: 20000,
-        data: roles
-      };
-    }
-  },
-
-  // add role
-  {
-    url: "/vue-element-admin/role",
-    type: "post",
-    response: {
-      code: 20000,
-      data: {
-        key: Mock.mock("@integer(300, 5000)")
-      }
-    }
-  },
-
-  // update role
-  {
-    url: "/vue-element-admin/role/[A-Za-z0-9]",
-    type: "put",
-    response: {
-      code: 20000,
-      data: {
-        status: "success"
-      }
-    }
-  },
-
-  // delete role
-  {
-    url: "/vue-element-admin/role/[A-Za-z0-9]",
-    type: "delete",
-    response: {
-      code: 20000,
-      data: {
-        status: "success"
-      }
-    }
-  }
-];
diff --git a/WebSite/mock/role/routes.js b/WebSite/mock/role/routes.js
deleted file mode 100644
index 2eec336..0000000
--- a/WebSite/mock/role/routes.js
+++ /dev/null
@@ -1,525 +0,0 @@
-// Just a mock data
-
-export const constantRoutes = [
-  {
-    path: "/redirect",
-    component: "layout/Layout",
-    hidden: true,
-    children: [
-      {
-        path: "/redirect/:path*",
-        component: "views/redirect/index"
-      }
-    ]
-  },
-  {
-    path: "/login",
-    component: "views/login/index",
-    hidden: true
-  },
-  {
-    path: "/auth-redirect",
-    component: "views/login/auth-redirect",
-    hidden: true
-  },
-  {
-    path: "/404",
-    component: "views/error-page/404",
-    hidden: true
-  },
-  {
-    path: "/401",
-    component: "views/error-page/401",
-    hidden: true
-  },
-  {
-    path: "",
-    component: "layout/Layout",
-    redirect: "dashboard",
-    children: [
-      {
-        path: "dashboard",
-        component: "views/dashboard/index",
-        name: "Dashboard",
-        meta: { title: "Dashboard", icon: "dashboard", affix: true }
-      }
-    ]
-  },
-  {
-    path: "/documentation",
-    component: "layout/Layout",
-    children: [
-      {
-        path: "index",
-        component: "views/documentation/index",
-        name: "Documentation",
-        meta: { title: "Documentation", icon: "documentation", affix: true }
-      }
-    ]
-  },
-  {
-    path: "/guide",
-    component: "layout/Layout",
-    redirect: "/guide/index",
-    children: [
-      {
-        path: "index",
-        component: "views/guide/index",
-        name: "Guide",
-        meta: { title: "Guide", icon: "guide", noCache: true }
-      }
-    ]
-  }
-];
-
-export const asyncRoutes = [
-  {
-    path: "/permission",
-    component: "layout/Layout",
-    redirect: "/permission/index",
-    alwaysShow: true,
-    meta: {
-      title: "Permission",
-      icon: "lock",
-      roles: ["admin", "editor"]
-    },
-    children: [
-      {
-        path: "page",
-        component: "views/permission/page",
-        name: "PagePermission",
-        meta: {
-          title: "Page Permission",
-          roles: ["admin"]
-        }
-      },
-      {
-        path: "directive",
-        component: "views/permission/directive",
-        name: "DirectivePermission",
-        meta: {
-          title: "Directive Permission"
-        }
-      },
-      {
-        path: "role",
-        component: "views/permission/role",
-        name: "RolePermission",
-        meta: {
-          title: "Role Permission",
-          roles: ["admin"]
-        }
-      }
-    ]
-  },
-
-  {
-    path: "/icon",
-    component: "layout/Layout",
-    children: [
-      {
-        path: "index",
-        component: "views/icons/index",
-        name: "Icons",
-        meta: { title: "Icons", icon: "icon", noCache: true }
-      }
-    ]
-  },
-
-  {
-    path: "/components",
-    component: "layout/Layout",
-    redirect: "noRedirect",
-    name: "ComponentDemo",
-    meta: {
-      title: "Components",
-      icon: "component"
-    },
-    children: [
-      {
-        path: "tinymce",
-        component: "views/components-demo/tinymce",
-        name: "TinymceDemo",
-        meta: { title: "Tinymce" }
-      },
-      {
-        path: "markdown",
-        component: "views/components-demo/markdown",
-        name: "MarkdownDemo",
-        meta: { title: "Markdown" }
-      },
-      {
-        path: "json-editor",
-        component: "views/components-demo/json-editor",
-        name: "JsonEditorDemo",
-        meta: { title: "Json Editor" }
-      },
-      {
-        path: "split-pane",
-        component: "views/components-demo/split-pane",
-        name: "SplitpaneDemo",
-        meta: { title: "SplitPane" }
-      },
-      {
-        path: "avatar-upload",
-        component: "views/components-demo/avatar-upload",
-        name: "AvatarUploadDemo",
-        meta: { title: "Avatar Upload" }
-      },
-      {
-        path: "dropzone",
-        component: "views/components-demo/dropzone",
-        name: "DropzoneDemo",
-        meta: { title: "Dropzone" }
-      },
-      {
-        path: "sticky",
-        component: "views/components-demo/sticky",
-        name: "StickyDemo",
-        meta: { title: "Sticky" }
-      },
-      {
-        path: "count-to",
-        component: "views/components-demo/count-to",
-        name: "CountToDemo",
-        meta: { title: "Count To" }
-      },
-      {
-        path: "mixin",
-        component: "views/components-demo/mixin",
-        name: "ComponentMixinDemo",
-        meta: { title: "componentMixin" }
-      },
-      {
-        path: "back-to-top",
-        component: "views/components-demo/back-to-top",
-        name: "BackToTopDemo",
-        meta: { title: "Back To Top" }
-      },
-      {
-        path: "drag-dialog",
-        component: "views/components-demo/drag-dialog",
-        name: "DragDialogDemo",
-        meta: { title: "Drag Dialog" }
-      },
-      {
-        path: "drag-select",
-        component: "views/components-demo/drag-select",
-        name: "DragSelectDemo",
-        meta: { title: "Drag Select" }
-      },
-      {
-        path: "dnd-list",
-        component: "views/components-demo/dnd-list",
-        name: "DndListDemo",
-        meta: { title: "Dnd List" }
-      },
-      {
-        path: "drag-kanban",
-        component: "views/components-demo/drag-kanban",
-        name: "DragKanbanDemo",
-        meta: { title: "Drag Kanban" }
-      }
-    ]
-  },
-  {
-    path: "/charts",
-    component: "layout/Layout",
-    redirect: "noRedirect",
-    name: "Charts",
-    meta: {
-      title: "Charts",
-      icon: "chart"
-    },
-    children: [
-      {
-        path: "keyboard",
-        component: "views/charts/keyboard",
-        name: "KeyboardChart",
-        meta: { title: "Keyboard Chart", noCache: true }
-      },
-      {
-        path: "line",
-        component: "views/charts/line",
-        name: "LineChart",
-        meta: { title: "Line Chart", noCache: true }
-      },
-      {
-        path: "mixchart",
-        component: "views/charts/mixChart",
-        name: "MixChart",
-        meta: { title: "Mix Chart", noCache: true }
-      }
-    ]
-  },
-  {
-    path: "/nested",
-    component: "layout/Layout",
-    redirect: "/nested/menu1/menu1-1",
-    name: "Nested",
-    meta: {
-      title: "Nested",
-      icon: "nested"
-    },
-    children: [
-      {
-        path: "menu1",
-        component: "views/nested/menu1/index",
-        name: "Menu1",
-        meta: { title: "Menu1" },
-        redirect: "/nested/menu1/menu1-1",
-        children: [
-          {
-            path: "menu1-1",
-            component: "views/nested/menu1/menu1-1",
-            name: "Menu1-1",
-            meta: { title: "Menu1-1" }
-          },
-          {
-            path: "menu1-2",
-            component: "views/nested/menu1/menu1-2",
-            name: "Menu1-2",
-            redirect: "/nested/menu1/menu1-2/menu1-2-1",
-            meta: { title: "Menu1-2" },
-            children: [
-              {
-                path: "menu1-2-1",
-                component: "views/nested/menu1/menu1-2/menu1-2-1",
-                name: "Menu1-2-1",
-                meta: { title: "Menu1-2-1" }
-              },
-              {
-                path: "menu1-2-2",
-                component: "views/nested/menu1/menu1-2/menu1-2-2",
-                name: "Menu1-2-2",
-                meta: { title: "Menu1-2-2" }
-              }
-            ]
-          },
-          {
-            path: "menu1-3",
-            component: "views/nested/menu1/menu1-3",
-            name: "Menu1-3",
-            meta: { title: "Menu1-3" }
-          }
-        ]
-      },
-      {
-        path: "menu2",
-        name: "Menu2",
-        component: "views/nested/menu2/index",
-        meta: { title: "Menu2" }
-      }
-    ]
-  },
-
-  {
-    path: "/example",
-    component: "layout/Layout",
-    redirect: "/example/list",
-    name: "Example",
-    meta: {
-      title: "Example",
-      icon: "example"
-    },
-    children: [
-      {
-        path: "create",
-        component: "views/example/create",
-        name: "CreateArticle",
-        meta: { title: "Create Article", icon: "edit" }
-      },
-      {
-        path: "edit/:id(\\d+)",
-        component: "views/example/edit",
-        name: "EditArticle",
-        meta: { title: "Edit Article", noCache: true },
-        hidden: true
-      },
-      {
-        path: "list",
-        component: "views/example/list",
-        name: "ArticleList",
-        meta: { title: "Article List", icon: "list" }
-      }
-    ]
-  },
-
-  {
-    path: "/tab",
-    component: "layout/Layout",
-    children: [
-      {
-        path: "index",
-        component: "views/tab/index",
-        name: "Tab",
-        meta: { title: "Tab", icon: "tab" }
-      }
-    ]
-  },
-
-  {
-    path: "/error",
-    component: "layout/Layout",
-    redirect: "noRedirect",
-    name: "ErrorPages",
-    meta: {
-      title: "Error Pages",
-      icon: "404"
-    },
-    children: [
-      {
-        path: "401",
-        component: "views/error-page/401",
-        name: "Page401",
-        meta: { title: "Page 401", noCache: true }
-      },
-      {
-        path: "404",
-        component: "views/error-page/404",
-        name: "Page404",
-        meta: { title: "Page 404", noCache: true }
-      }
-    ]
-  },
-
-  {
-    path: "/error-log",
-    component: "layout/Layout",
-    redirect: "noRedirect",
-    children: [
-      {
-        path: "log",
-        component: "views/error-log/index",
-        name: "ErrorLog",
-        meta: { title: "Error Log", icon: "bug" }
-      }
-    ]
-  },
-
-  {
-    path: "/excel",
-    component: "layout/Layout",
-    redirect: "/excel/export-excel",
-    name: "Excel",
-    meta: {
-      title: "Excel",
-      icon: "excel"
-    },
-    children: [
-      {
-        path: "export-excel",
-        component: "views/excel/export-excel",
-        name: "ExportExcel",
-        meta: { title: "Export Excel" }
-      },
-      {
-        path: "export-selected-excel",
-        component: "views/excel/select-excel",
-        name: "SelectExcel",
-        meta: { title: "Select Excel" }
-      },
-      {
-        path: "export-merge-header",
-        component: "views/excel/merge-header",
-        name: "MergeHeader",
-        meta: { title: "Merge Header" }
-      },
-      {
-        path: "upload-excel",
-        component: "views/excel/upload-excel",
-        name: "UploadExcel",
-        meta: { title: "Upload Excel" }
-      }
-    ]
-  },
-
-  {
-    path: "/zip",
-    component: "layout/Layout",
-    redirect: "/zip/download",
-    alwaysShow: true,
-    meta: { title: "Zip", icon: "zip" },
-    children: [
-      {
-        path: "download",
-        component: "views/zip/index",
-        name: "ExportZip",
-        meta: { title: "Export Zip" }
-      }
-    ]
-  },
-
-  {
-    path: "/pdf",
-    component: "layout/Layout",
-    redirect: "/pdf/index",
-    children: [
-      {
-        path: "index",
-        component: "views/pdf/index",
-        name: "PDF",
-        meta: { title: "PDF", icon: "pdf" }
-      }
-    ]
-  },
-  {
-    path: "/pdf/download",
-    component: "views/pdf/download",
-    hidden: true
-  },
-
-  {
-    path: "/theme",
-    component: "layout/Layout",
-    redirect: "noRedirect",
-    children: [
-      {
-        path: "index",
-        component: "views/theme/index",
-        name: "Theme",
-        meta: { title: "Theme", icon: "theme" }
-      }
-    ]
-  },
-
-  {
-    path: "/clipboard",
-    component: "layout/Layout",
-    redirect: "noRedirect",
-    children: [
-      {
-        path: "index",
-        component: "views/clipboard/index",
-        name: "ClipboardDemo",
-        meta: { title: "Clipboard Demo", icon: "clipboard" }
-      }
-    ]
-  },
-
-  {
-    path: "/i18n",
-    component: "layout/Layout",
-    children: [
-      {
-        path: "index",
-        component: "views/i18n-demo/index",
-        name: "I18n",
-        meta: { title: "I18n", icon: "international" }
-      }
-    ]
-  },
-
-  {
-    path: "external-link",
-    component: "layout/Layout",
-    children: [
-      {
-        path: "https://github.com/PanJiaChen/vue-element-admin",
-        meta: { title: "External Link", icon: "link" }
-      }
-    ]
-  },
-
-  { path: "*", redirect: "/404", hidden: true }
-];
diff --git a/WebSite/mock/user.js b/WebSite/mock/user.js
deleted file mode 100644
index a544b5c..0000000
--- a/WebSite/mock/user.js
+++ /dev/null
@@ -1,85 +0,0 @@
-const tokens = {
-  admin: {
-    token: "admin-token"
-  },
-  editor: {
-    token: "editor-token"
-  }
-};
-
-const users = {
-  "admin-token": {
-    roles: ["admin"],
-    introduction: "I am a super administrator",
-    avatar:
-      "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif",
-    name: "Super Admin"
-  },
-  "editor-token": {
-    roles: ["editor"],
-    introduction: "I am an editor",
-    avatar:
-      "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif",
-    name: "Normal Editor"
-  }
-};
-
-export default [
-  // user login
-  {
-    url: "/vue-element-admin/user/login",
-    type: "post",
-    response: config => {
-      const { username } = config.body;
-      const token = tokens[username];
-
-      // mock error
-      if (!token) {
-        return {
-          code: 60204,
-          message: "Account and password are incorrect."
-        };
-      }
-
-      return {
-        code: 20000,
-        data: token
-      };
-    }
-  },
-
-  // get user info
-  {
-    url: "/vue-element-admin/user/info.*",
-    type: "get",
-    response: config => {
-      const { token } = config.query;
-      const info = users[token];
-
-      // mock error
-      if (!info) {
-        return {
-          code: 50008,
-          message: "Login failed, unable to get user details."
-        };
-      }
-
-      return {
-        code: 20000,
-        data: info
-      };
-    }
-  },
-
-  // user logout
-  {
-    url: "/vue-element-admin/user/logout",
-    type: "post",
-    response: _ => {
-      return {
-        code: 20000,
-        data: "success"
-      };
-    }
-  }
-];
diff --git a/WebSite/package-lock.json b/WebSite/package-lock.json
index a7cd0ff..f938bb3 100644
--- a/WebSite/package-lock.json
+++ b/WebSite/package-lock.json
@@ -1,368 +1,475 @@
 {
-  "name": "vue-element-admin",
-  "version": "4.2.1",
+  "name": "vue-element-next",
+  "version": "0.7.8",
   "lockfileVersion": 1,
   "requires": true,
   "dependencies": {
+    "@ant-design/colors": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz",
+      "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==",
+      "requires": {
+        "@ctrl/tinycolor": "^3.4.0"
+      }
+    },
+    "@ant-design/icons-svg": {
+      "version": "4.4.2",
+      "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz",
+      "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA=="
+    },
+    "@ant-design/icons-vue": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz",
+      "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==",
+      "requires": {
+        "@ant-design/colors": "^6.0.0",
+        "@ant-design/icons-svg": "^4.2.1"
+      }
+    },
     "@babel/code-frame": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.8.3.tgz",
-      "integrity": "sha1-M+JZA9dIEYFTThLsCiXxa2/PQZ4=",
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.12.11.tgz",
+      "integrity": "sha1-9K1DWqJj25NbjxDyxVLSP7cWpj8=",
       "dev": true,
       "requires": {
-        "@babel/highlight": "^7.8.3"
+        "@babel/highlight": "^7.10.4"
       }
     },
+    "@babel/compat-data": {
+      "version": "7.12.7",
+      "resolved": "https://registry.npm.taobao.org/@babel/compat-data/download/@babel/compat-data-7.12.7.tgz",
+      "integrity": "sha1-kym0eCp9a71+71fhGt35HuPvHkE=",
+      "dev": true
+    },
     "@babel/core": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.0.0.tgz?cache=0&sync_timestamp=1583373395226&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.0.0.tgz",
-      "integrity": "sha1-DLDA/S54oKK+yXaY9UmunOC5lRU=",
-      "dev": true,
-      "requires": {
-        "@babel/code-frame": "^7.0.0",
-        "@babel/generator": "^7.0.0",
-        "@babel/helpers": "^7.0.0",
-        "@babel/parser": "^7.0.0",
-        "@babel/template": "^7.0.0",
-        "@babel/traverse": "^7.0.0",
-        "@babel/types": "^7.0.0",
-        "convert-source-map": "^1.1.0",
-        "debug": "^3.1.0",
-        "json5": "^0.5.0",
-        "lodash": "^4.17.10",
-        "resolve": "^1.3.2",
+      "version": "7.12.10",
+      "resolved": "https://registry.npm.taobao.org/@babel/core/download/@babel/core-7.12.10.tgz?cache=0&sync_timestamp=1607569002613&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fcore%2Fdownload%2F%40babel%2Fcore-7.12.10.tgz",
+      "integrity": "sha1-t5ouG59w7T2Eu/ttjE74JfYGvM0=",
+      "dev": true,
+      "requires": {
+        "@babel/code-frame": "^7.10.4",
+        "@babel/generator": "^7.12.10",
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helpers": "^7.12.5",
+        "@babel/parser": "^7.12.10",
+        "@babel/template": "^7.12.7",
+        "@babel/traverse": "^7.12.10",
+        "@babel/types": "^7.12.10",
+        "convert-source-map": "^1.7.0",
+        "debug": "^4.1.0",
+        "gensync": "^1.0.0-beta.1",
+        "json5": "^2.1.2",
+        "lodash": "^4.17.19",
         "semver": "^5.4.1",
         "source-map": "^0.5.0"
       }
     },
     "@babel/generator": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.8.7.tgz",
-      "integrity": "sha1-hws895hPUpeZgVKvYlxPPjQUAPc=",
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/generator/download/@babel/generator-7.12.11.tgz?cache=0&sync_timestamp=1608076804367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fgenerator%2Fdownload%2F%40babel%2Fgenerator-7.12.11.tgz",
+      "integrity": "sha1-mKffe4w1jJo3qweiQFaFMBaro68=",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.7",
+        "@babel/types": "^7.12.11",
         "jsesc": "^2.5.1",
-        "lodash": "^4.17.13",
         "source-map": "^0.5.0"
       }
     },
     "@babel/helper-annotate-as-pure": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.8.3.tgz",
-      "integrity": "sha1-YLwLxlf2Ogkk/5pLSgskoTz03u4=",
+      "version": "7.12.10",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-annotate-as-pure/download/@babel/helper-annotate-as-pure-7.12.10.tgz?cache=0&sync_timestamp=1607583990559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-annotate-as-pure%2Fdownload%2F%40babel%2Fhelper-annotate-as-pure-7.12.10.tgz",
+      "integrity": "sha1-VKubAA5gqTZEzhez830xOq8dEV0=",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.12.10"
       }
     },
     "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
-      "integrity": "sha1-yECXpCegYaxWocMOv1S3si0kFQM=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-builder-binary-assignment-operator-visitor/download/@babel/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
+      "integrity": "sha1-uwt18xv5jL+f8UPBrleLhydK4aM=",
       "dev": true,
       "requires": {
-        "@babel/helper-explode-assignable-expression": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/helper-explode-assignable-expression": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
-    "@babel/helper-call-delegate": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-call-delegate/download/@babel/helper-call-delegate-7.8.7.tgz",
-      "integrity": "sha1-KKJ5wubGIqYjPaVIEn+YB1EyTKs=",
+    "@babel/helper-compilation-targets": {
+      "version": "7.12.5",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-compilation-targets/download/@babel/helper-compilation-targets-7.12.5.tgz",
+      "integrity": "sha1-y0cMdhmNtqJOnbyJhydWMeXSmDE=",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "^7.8.3",
-        "@babel/traverse": "^7.8.3",
-        "@babel/types": "^7.8.7"
+        "@babel/compat-data": "^7.12.5",
+        "@babel/helper-validator-option": "^7.12.1",
+        "browserslist": "^4.14.5",
+        "semver": "^5.5.0"
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.8.6.tgz",
-      "integrity": "sha1-JDpbRuL48PZ03BOHYx62souFHeA=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-create-class-features-plugin/download/@babel/helper-create-class-features-plugin-7.12.1.tgz",
+      "integrity": "sha1-PEWZj0Me3UqSFMXx060USKYTf24=",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/helper-member-expression-to-functions": "^7.8.3",
-        "@babel/helper-optimise-call-expression": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-replace-supers": "^7.8.6",
-        "@babel/helper-split-export-declaration": "^7.8.3"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-member-expression-to-functions": "^7.12.1",
+        "@babel/helper-optimise-call-expression": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.12.1",
+        "@babel/helper-split-export-declaration": "^7.10.4"
       }
     },
     "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.8.6.tgz?cache=0&sync_timestamp=1582806206622&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-create-regexp-features-plugin%2Fdownload%2F%40babel%2Fhelper-create-regexp-features-plugin-7.8.6.tgz",
-      "integrity": "sha1-f6BAyX+4rr4SR6XGRTMMMtCDBms=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-create-regexp-features-plugin/download/@babel/helper-create-regexp-features-plugin-7.12.7.tgz",
+      "integrity": "sha1-IIQXLpVEP6CgkhS6G7Mo+a6hJ48=",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.8.3",
-        "@babel/helper-regex": "^7.8.3",
-        "regexpu-core": "^4.6.0"
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "regexpu-core": "^4.7.1"
       }
     },
     "@babel/helper-define-map": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.8.3.tgz",
-      "integrity": "sha1-oGVcrVRRw3YLcm66h18c2PqgLBU=",
+      "version": "7.10.5",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-define-map/download/@babel/helper-define-map-7.10.5.tgz",
+      "integrity": "sha1-tTwQ23imQIABUmkrEzkxR6y5uzA=",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/types": "^7.8.3",
-        "lodash": "^4.17.13"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/types": "^7.10.5",
+        "lodash": "^4.17.19"
       }
     },
     "@babel/helper-explode-assignable-expression": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.8.3.tgz",
-      "integrity": "sha1-pyjcW06J4w/C38fQT6KKkwZT+YI=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-explode-assignable-expression/download/@babel/helper-explode-assignable-expression-7.12.1.tgz",
+      "integrity": "sha1-gAakZmlcSthqKl8vsVtfLDGtVjM=",
       "dev": true,
       "requires": {
-        "@babel/traverse": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.12.1"
       }
     },
     "@babel/helper-function-name": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.8.3.tgz?cache=0&sync_timestamp=1578980714632&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.8.3.tgz",
-      "integrity": "sha1-7utmWgGx8RBo6fuGrVahyxqCTMo=",
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-function-name/download/@babel/helper-function-name-7.12.11.tgz?cache=0&sync_timestamp=1608076808489&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-function-name%2Fdownload%2F%40babel%2Fhelper-function-name-7.12.11.tgz",
+      "integrity": "sha1-H9dziu5dz1PD7P8k8dqcUR7Ee0I=",
       "dev": true,
       "requires": {
-        "@babel/helper-get-function-arity": "^7.8.3",
-        "@babel/template": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/helper-get-function-arity": "^7.12.10",
+        "@babel/template": "^7.12.7",
+        "@babel/types": "^7.12.11"
       }
     },
     "@babel/helper-get-function-arity": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.8.3.tgz?cache=0&sync_timestamp=1578980710093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.8.3.tgz",
-      "integrity": "sha1-uJS5R70AQ4HOY+odufCFR+kgq9U=",
+      "version": "7.12.10",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-get-function-arity/download/@babel/helper-get-function-arity-7.12.10.tgz?cache=0&sync_timestamp=1607584582871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-get-function-arity%2Fdownload%2F%40babel%2Fhelper-get-function-arity-7.12.10.tgz",
+      "integrity": "sha1-sViBejFltfqiBHgl36YZcN3MFs8=",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.12.10"
       }
     },
     "@babel/helper-hoist-variables": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.8.3.tgz",
-      "integrity": "sha1-Hb6ba1XXjJtBg/yM3G4wzrg7cTQ=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-hoist-variables/download/@babel/helper-hoist-variables-7.10.4.tgz",
+      "integrity": "sha1-1JsAHR1aaMpeZgTdoBpil/fJOB4=",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.8.3.tgz",
-      "integrity": "sha1-ZZtxBJjqbB2ZB+DHPyBu7n2twkw=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-member-expression-to-functions/download/@babel/helper-member-expression-to-functions-7.12.7.tgz",
+      "integrity": "sha1-qne9A5bsgRTl4weH76eFmdh0qFU=",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.12.7"
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.8.3.tgz",
-      "integrity": "sha1-f+OVibOcAWMxtrjD9EHo8LFBlJg=",
+      "version": "7.12.5",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-module-imports/download/@babel/helper-module-imports-7.12.5.tgz?cache=0&sync_timestamp=1604441102741&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-module-imports%2Fdownload%2F%40babel%2Fhelper-module-imports-7.12.5.tgz",
+      "integrity": "sha1-G/wCKfeUmI927QpNTpCGCFC1Tfs=",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.12.5"
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.8.6.tgz",
-      "integrity": "sha1-ahO17srcNWkgRwc6ZOQpd7l2VKQ=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-module-transforms/download/@babel/helper-module-transforms-7.12.1.tgz",
+      "integrity": "sha1-eVT+xx9bMsSOSzA7Q3w0RT/XJHw=",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "^7.8.3",
-        "@babel/helper-replace-supers": "^7.8.6",
-        "@babel/helper-simple-access": "^7.8.3",
-        "@babel/helper-split-export-declaration": "^7.8.3",
-        "@babel/template": "^7.8.6",
-        "@babel/types": "^7.8.6",
-        "lodash": "^4.17.13"
+        "@babel/helper-module-imports": "^7.12.1",
+        "@babel/helper-replace-supers": "^7.12.1",
+        "@babel/helper-simple-access": "^7.12.1",
+        "@babel/helper-split-export-declaration": "^7.11.0",
+        "@babel/helper-validator-identifier": "^7.10.4",
+        "@babel/template": "^7.10.4",
+        "@babel/traverse": "^7.12.1",
+        "@babel/types": "^7.12.1",
+        "lodash": "^4.17.19"
       }
     },
     "@babel/helper-optimise-call-expression": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.8.3.tgz",
-      "integrity": "sha1-ftBxgT0Jx1KY708giVYAa2ER7Lk=",
+      "version": "7.12.10",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-optimise-call-expression/download/@babel/helper-optimise-call-expression-7.12.10.tgz?cache=0&sync_timestamp=1607576932268&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-optimise-call-expression%2Fdownload%2F%40babel%2Fhelper-optimise-call-expression-7.12.10.tgz",
+      "integrity": "sha1-lMpOMG7hGn3W6fQoI+Ksa0mIHi0=",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.12.10"
       }
     },
     "@babel/helper-plugin-utils": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.8.3.tgz",
-      "integrity": "sha1-nqKTvhm6vA9S/4yoizTDYRsghnA=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-plugin-utils/download/@babel/helper-plugin-utils-7.10.4.tgz",
+      "integrity": "sha1-L3WoMSadT2d95JmG3/WZJ1M883U=",
       "dev": true
     },
-    "@babel/helper-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-regex/download/@babel/helper-regex-7.8.3.tgz",
-      "integrity": "sha1-E5dyYH1RuT8j7/5yEFsxnSpMaWU=",
+    "@babel/helper-remap-async-to-generator": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.12.1.tgz",
+      "integrity": "sha1-jE27+RYxT2BH3AXmoiFwdCODR/0=",
       "dev": true,
       "requires": {
-        "lodash": "^4.17.13"
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-wrap-function": "^7.10.4",
+        "@babel/types": "^7.12.1"
       }
     },
-    "@babel/helper-remap-async-to-generator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-remap-async-to-generator/download/@babel/helper-remap-async-to-generator-7.8.3.tgz",
-      "integrity": "sha1-JzxgDYub9QBhQsHjWIfVVcEu3YY=",
+    "@babel/helper-replace-supers": {
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.12.11.tgz?cache=0&sync_timestamp=1608076803456&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.12.11.tgz",
+      "integrity": "sha1-6lEWWPxmx5CPkjEG3YjgjRmX1g0=",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.8.3",
-        "@babel/helper-wrap-function": "^7.8.3",
-        "@babel/template": "^7.8.3",
-        "@babel/traverse": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/helper-member-expression-to-functions": "^7.12.7",
+        "@babel/helper-optimise-call-expression": "^7.12.10",
+        "@babel/traverse": "^7.12.10",
+        "@babel/types": "^7.12.11"
       }
     },
-    "@babel/helper-replace-supers": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-replace-supers/download/@babel/helper-replace-supers-7.8.6.tgz?cache=0&sync_timestamp=1582807511441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-replace-supers%2Fdownload%2F%40babel%2Fhelper-replace-supers-7.8.6.tgz",
-      "integrity": "sha1-Wtp0T9WtcyA78dZ0WaJ9y6Z+/8g=",
+    "@babel/helper-simple-access": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.12.1.tgz?cache=0&sync_timestamp=1602802634851&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-simple-access%2Fdownload%2F%40babel%2Fhelper-simple-access-7.12.1.tgz",
+      "integrity": "sha1-MkJ+WqYVR9OOsebq9f0UJv2tkTY=",
       "dev": true,
       "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.8.3",
-        "@babel/helper-optimise-call-expression": "^7.8.3",
-        "@babel/traverse": "^7.8.6",
-        "@babel/types": "^7.8.6"
+        "@babel/types": "^7.12.1"
       }
     },
-    "@babel/helper-simple-access": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-simple-access/download/@babel/helper-simple-access-7.8.3.tgz",
-      "integrity": "sha1-f4EJkotNq0ZUB2mGr1dSMd62Oa4=",
+    "@babel/helper-skip-transparent-expression-wrappers": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-skip-transparent-expression-wrappers/download/@babel/helper-skip-transparent-expression-wrappers-7.12.1.tgz",
+      "integrity": "sha1-Ri3GOn5DWt6EaDhcY9K4TM5LPL8=",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.12.1"
       }
     },
     "@babel/helper-split-export-declaration": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.8.3.tgz?cache=0&sync_timestamp=1578980712591&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.8.3.tgz",
-      "integrity": "sha1-ManzAHD5E2inGCzwX4MXgQZfx6k=",
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-split-export-declaration/download/@babel/helper-split-export-declaration-7.12.11.tgz?cache=0&sync_timestamp=1608076804774&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fhelper-split-export-declaration%2Fdownload%2F%40babel%2Fhelper-split-export-declaration-7.12.11.tgz",
+      "integrity": "sha1-G0zEJEWGQ8R9NwIiI9oz126kYDo=",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.8.3"
+        "@babel/types": "^7.12.11"
       }
     },
+    "@babel/helper-validator-identifier": {
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.12.11.tgz",
+      "integrity": "sha1-yaHwIZF9y1zPDU5FPjmQIpgfye0="
+    },
+    "@babel/helper-validator-option": {
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-validator-option/download/@babel/helper-validator-option-7.12.11.tgz",
+      "integrity": "sha1-1my4t6Pn/kxpYrMgIKEx7PCEf08=",
+      "dev": true
+    },
     "@babel/helper-wrap-function": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.8.3.tgz",
-      "integrity": "sha1-nb2yu1XvFKqgH+jJm2Kb1TUthhA=",
+      "version": "7.12.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/helper-wrap-function/download/@babel/helper-wrap-function-7.12.3.tgz",
+      "integrity": "sha1-MzIzn8TR+78cJ9eVjCfTRwjpkNk=",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/template": "^7.8.3",
-        "@babel/traverse": "^7.8.3",
-        "@babel/types": "^7.8.3"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/template": "^7.10.4",
+        "@babel/traverse": "^7.10.4",
+        "@babel/types": "^7.10.4"
       }
     },
     "@babel/helpers": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.8.4.tgz",
-      "integrity": "sha1-dU6z7nJ8Fl4KJA1sIH3nxFXzb3M=",
+      "version": "7.12.5",
+      "resolved": "https://registry.npm.taobao.org/@babel/helpers/download/@babel/helpers-7.12.5.tgz",
+      "integrity": "sha1-Ghukp2jZtYMQ7aUWxEmRP+ZHEW4=",
       "dev": true,
       "requires": {
-        "@babel/template": "^7.8.3",
-        "@babel/traverse": "^7.8.4",
-        "@babel/types": "^7.8.3"
+        "@babel/template": "^7.10.4",
+        "@babel/traverse": "^7.12.5",
+        "@babel/types": "^7.12.5"
       }
     },
     "@babel/highlight": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.8.3.tgz",
-      "integrity": "sha1-KPFz0EIj6qpZvB1Dmjg25tEmV5c=",
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/highlight/download/@babel/highlight-7.10.4.tgz",
+      "integrity": "sha1-fRvf1ldTU4+r5sOFls23bZrGAUM=",
       "dev": true,
       "requires": {
+        "@babel/helper-validator-identifier": "^7.10.4",
         "chalk": "^2.0.0",
-        "esutils": "^2.0.2",
         "js-tokens": "^4.0.0"
       }
     },
     "@babel/parser": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.8.7.tgz",
-      "integrity": "sha1-e4+s+V0l/vlTSq1RxP/s3hph4mo=",
-      "dev": true
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/parser/download/@babel/parser-7.12.11.tgz?cache=0&sync_timestamp=1608076801657&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fparser%2Fdownload%2F%40babel%2Fparser-7.12.11.tgz",
+      "integrity": "sha1-nONZW810vFxGaQXobFNbiyUBHnk="
     },
     "@babel/plugin-proposal-async-generator-functions": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.8.3.tgz",
-      "integrity": "sha1-utMpxnCzgliXIbJ1QMfSiGAcbm8=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-async-generator-functions/download/@babel/plugin-proposal-async-generator-functions-7.12.1.tgz?cache=0&sync_timestamp=1602802638761&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-async-generator-functions%2Fdownload%2F%40babel%2Fplugin-proposal-async-generator-functions-7.12.1.tgz",
+      "integrity": "sha1-3GwRcOJ9isqZ/2X0klvQaxyQVQ4=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-remap-async-to-generator": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-remap-async-to-generator": "^7.12.1",
         "@babel/plugin-syntax-async-generators": "^7.8.0"
       }
     },
     "@babel/plugin-proposal-class-properties": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.8.3.tgz",
-      "integrity": "sha1-XgZlSvXNBLYIkVqtqbKmeIAERk4=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-class-properties/download/@babel/plugin-proposal-class-properties-7.12.1.tgz?cache=0&sync_timestamp=1602802520476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-class-properties%2Fdownload%2F%40babel%2Fplugin-proposal-class-properties-7.12.1.tgz",
+      "integrity": "sha1-oIL/VB8qKaSCEGW4rdk0bAwW5d4=",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-create-class-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-decorators": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.8.3.tgz",
-      "integrity": "sha1-IVaGCrZcWr8GjD9nBCGEBBBmVD4=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-decorators/download/@babel/plugin-proposal-decorators-7.12.1.tgz",
+      "integrity": "sha1-WScUOf7UFFRWxBBnRQVDruMy0V8=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-decorators": "^7.12.1"
+      }
+    },
+    "@babel/plugin-proposal-dynamic-import": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-dynamic-import/download/@babel/plugin-proposal-dynamic-import-7.12.1.tgz?cache=0&sync_timestamp=1602802624550&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-dynamic-import%2Fdownload%2F%40babel%2Fplugin-proposal-dynamic-import-7.12.1.tgz",
+      "integrity": "sha1-Q+tcKjSH7NmMXI6otf22midJstw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.0"
+      }
+    },
+    "@babel/plugin-proposal-export-namespace-from": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-export-namespace-from/download/@babel/plugin-proposal-export-namespace-from-7.12.1.tgz?cache=0&sync_timestamp=1602802622582&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-export-namespace-from%2Fdownload%2F%40babel%2Fplugin-proposal-export-namespace-from-7.12.1.tgz",
+      "integrity": "sha1-i5uPN2stiPXdd05NJKXMLjZ5ttQ=",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/plugin-syntax-decorators": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-json-strings": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.8.3.tgz",
-      "integrity": "sha1-2lIWsjipi1ih4F1oUhBLEPmnDWs=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.12.1.tgz",
+      "integrity": "sha1-1FQjtRdxTu3VYhqd/cA/qfTrJBw=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "@babel/plugin-syntax-json-strings": "^7.8.0"
       }
     },
+    "@babel/plugin-proposal-logical-assignment-operators": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-logical-assignment-operators/download/@babel/plugin-proposal-logical-assignment-operators-7.12.1.tgz?cache=0&sync_timestamp=1602802623336&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-logical-assignment-operators%2Fdownload%2F%40babel%2Fplugin-proposal-logical-assignment-operators-7.12.1.tgz",
+      "integrity": "sha1-8sSQ024bPJZZJBA0pdLNUCY6J1E=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
+      }
+    },
+    "@babel/plugin-proposal-nullish-coalescing-operator": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-nullish-coalescing-operator/download/@babel/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz?cache=0&sync_timestamp=1602802623075&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator%2Fdownload%2F%40babel%2Fplugin-proposal-nullish-coalescing-operator-7.12.1.tgz",
+      "integrity": "sha1-PtT/8xwBXn8/FGfxkNvlRc17BGw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
+      }
+    },
+    "@babel/plugin-proposal-numeric-separator": {
+      "version": "7.12.7",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-numeric-separator/download/@babel/plugin-proposal-numeric-separator-7.12.7.tgz",
+      "integrity": "sha1-i/JT3oE5CZ/qGTspfSOp1AbvBWs=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+      }
+    },
     "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.8.3.tgz",
-      "integrity": "sha1-61rjZhGN3KZ77Vg7U9dVTK2ZUbs=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.12.1.tgz?cache=0&sync_timestamp=1602802329071&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.12.1.tgz",
+      "integrity": "sha1-3vm9A86g+bcig9rA7CLSicdpEGk=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/plugin-syntax-object-rest-spread": "^7.8.0"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+        "@babel/plugin-transform-parameters": "^7.12.1"
       }
     },
     "@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.8.3.tgz",
-      "integrity": "sha1-ne6WqxZQ7tiGRq6XNMoWesSpxck=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-catch-binding/download/@babel/plugin-proposal-optional-catch-binding-7.12.1.tgz?cache=0&sync_timestamp=1602802625025&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-optional-catch-binding%2Fdownload%2F%40babel%2Fplugin-proposal-optional-catch-binding-7.12.1.tgz",
+      "integrity": "sha1-zMJCGvZNOq5QtVinHO3pKaWrKUI=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
       }
     },
+    "@babel/plugin-proposal-optional-chaining": {
+      "version": "7.12.7",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-optional-chaining/download/@babel/plugin-proposal-optional-chaining-7.12.7.tgz",
+      "integrity": "sha1-4C8OobXcWdQB7Bb7gkZ59oPTMDw=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.0"
+      }
+    },
+    "@babel/plugin-proposal-private-methods": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-private-methods/download/@babel/plugin-proposal-private-methods-7.12.1.tgz",
+      "integrity": "sha1-hoFPbnohN0yYDBDTi0ST5wP0o4k=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-create-class-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
     "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.3.tgz",
-      "integrity": "sha1-tkbDrepfmIAMmrRRBaw00GzUpH8=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.12.1.tgz?cache=0&sync_timestamp=1602802514976&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-unicode-property-regex%2Fdownload%2F%40babel%2Fplugin-proposal-unicode-property-regex-7.12.1.tgz",
+      "integrity": "sha1-Khg5WNQXdluerjNPR3WOXWqC4HI=",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-syntax-async-generators": {
@@ -374,13 +481,22 @@
         "@babel/helper-plugin-utils": "^7.8.0"
       }
     },
+    "@babel/plugin-syntax-class-properties": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-class-properties/download/@babel/plugin-syntax-class-properties-7.12.1.tgz?cache=0&sync_timestamp=1602802624701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-class-properties%2Fdownload%2F%40babel%2Fplugin-syntax-class-properties-7.12.1.tgz",
+      "integrity": "sha1-vLKXxTZueb663vUJVJzZOwTxmXg=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
     "@babel/plugin-syntax-decorators": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.8.3.tgz",
-      "integrity": "sha1-jSwVqfGvYksAJflhaCqdU9MAG9o=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-decorators/download/@babel/plugin-syntax-decorators-7.12.1.tgz?cache=0&sync_timestamp=1602802624858&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-decorators%2Fdownload%2F%40babel%2Fplugin-syntax-decorators-7.12.1.tgz",
+      "integrity": "sha1-gai1NbKER2xBvm3gaFOogCuYxd0=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-syntax-dynamic-import": {
@@ -392,6 +508,15 @@
         "@babel/helper-plugin-utils": "^7.8.0"
       }
     },
+    "@babel/plugin-syntax-export-namespace-from": {
+      "version": "7.8.3",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-export-namespace-from/download/@babel/plugin-syntax-export-namespace-from-7.8.3.tgz",
+      "integrity": "sha1-AolkqbqA28CUyRXEh618TnpmRlo=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.8.3"
+      }
+    },
     "@babel/plugin-syntax-json-strings": {
       "version": "7.8.3",
       "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-json-strings/download/@babel/plugin-syntax-json-strings-7.8.3.tgz",
@@ -402,12 +527,39 @@
       }
     },
     "@babel/plugin-syntax-jsx": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.12.1.tgz",
+      "integrity": "sha1-nZ01fMgYqnrnk1kXwSV/Z2d6CSY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-logical-assignment-operators": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-logical-assignment-operators/download/@babel/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
+      "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-syntax-nullish-coalescing-operator": {
       "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-jsx/download/@babel/plugin-syntax-jsx-7.8.3.tgz",
-      "integrity": "sha1-UhsGyDxASA8eWLT9M7kuzrHW6pQ=",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-nullish-coalescing-operator/download/@babel/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
+      "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-numeric-separator": {
+      "version": "7.10.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-numeric-separator/download/@babel/plugin-syntax-numeric-separator-7.10.4.tgz",
+      "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-syntax-object-rest-spread": {
@@ -428,458 +580,515 @@
         "@babel/helper-plugin-utils": "^7.8.0"
       }
     },
-    "@babel/plugin-transform-arrow-functions": {
+    "@babel/plugin-syntax-optional-chaining": {
       "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.8.3.tgz",
-      "integrity": "sha1-gndsLtDNnhpJlW2uuJYCTJRzuLY=",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-optional-chaining/download/@babel/plugin-syntax-optional-chaining-7.8.3.tgz",
+      "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.8.0"
+      }
+    },
+    "@babel/plugin-syntax-top-level-await": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-syntax-top-level-await/download/@babel/plugin-syntax-top-level-await-7.12.1.tgz?cache=0&sync_timestamp=1602802626493&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-syntax-top-level-await%2Fdownload%2F%40babel%2Fplugin-syntax-top-level-await-7.12.1.tgz",
+      "integrity": "sha1-3WwLNXrBuxQtmFN0UKMZYl0T0qA=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-transform-arrow-functions": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-arrow-functions/download/@babel/plugin-transform-arrow-functions-7.12.1.tgz",
+      "integrity": "sha1-gIP/yGrI53f74ktZZ8SyUh88srM=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-async-to-generator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.8.3.tgz",
-      "integrity": "sha1-Qwj60NlAnXHq+5sabuNfnWS2QIY=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-async-to-generator/download/@babel/plugin-transform-async-to-generator-7.12.1.tgz",
+      "integrity": "sha1-OEmknMKiLpdDy9a1KSbTAzcimvE=",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-remap-async-to-generator": "^7.8.3"
+        "@babel/helper-module-imports": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-remap-async-to-generator": "^7.12.1"
       }
     },
     "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.8.3.tgz",
-      "integrity": "sha1-Q37sW3mbWFIHIISzrl72boNJ6KM=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoped-functions/download/@babel/plugin-transform-block-scoped-functions-7.12.1.tgz",
+      "integrity": "sha1-8qGjZb3itxEuCm3tkGf918B5Bdk=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.8.3.tgz",
-      "integrity": "sha1-l9Ndq2aFekN8FmNYuR0JBQyGjzo=",
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-block-scoping/download/@babel/plugin-transform-block-scoping-7.12.11.tgz?cache=0&sync_timestamp=1608074943321&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-block-scoping%2Fdownload%2F%40babel%2Fplugin-transform-block-scoping-7.12.11.tgz",
+      "integrity": "sha1-g66SoQTbuTp9bG3RhE81EIPEa08=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "lodash": "^4.17.13"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.8.6.tgz?cache=0&sync_timestamp=1582806192447&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.8.6.tgz",
-      "integrity": "sha1-d1NER6R3y+WZWuSu4+OfvICQxG0=",
-      "dev": true,
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.8.3",
-        "@babel/helper-define-map": "^7.8.3",
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/helper-optimise-call-expression": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-replace-supers": "^7.8.6",
-        "@babel/helper-split-export-declaration": "^7.8.3",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-classes/download/@babel/plugin-transform-classes-7.12.1.tgz?cache=0&sync_timestamp=1602802519287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-classes%2Fdownload%2F%40babel%2Fplugin-transform-classes-7.12.1.tgz",
+      "integrity": "sha1-ZeZQ/K3dPYjdzmfA+DSj1DajLbY=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.10.4",
+        "@babel/helper-define-map": "^7.10.4",
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-optimise-call-expression": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.12.1",
+        "@babel/helper-split-export-declaration": "^7.10.4",
         "globals": "^11.1.0"
       }
     },
     "@babel/plugin-transform-computed-properties": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.8.3.tgz",
-      "integrity": "sha1-ltDSi3985OtbEguy4OlDNDyG+Bs=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-computed-properties/download/@babel/plugin-transform-computed-properties-7.12.1.tgz?cache=0&sync_timestamp=1602802627593&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-computed-properties%2Fdownload%2F%40babel%2Fplugin-transform-computed-properties-7.12.1.tgz",
+      "integrity": "sha1-1oz2ybf4OKikFEutvpdUHqCQSFI=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.8.3.tgz",
-      "integrity": "sha1-IN372eRnaQaxBW7mCviFkMx6qgs=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-destructuring/download/@babel/plugin-transform-destructuring-7.12.1.tgz",
+      "integrity": "sha1-uaVw/g0KjUYBFkE8tPl+jgiy+Ec=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.8.3.tgz",
-      "integrity": "sha1-w8bsXuYSXGmTxcvKINyGIanqem4=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-dotall-regex/download/@babel/plugin-transform-dotall-regex-7.12.1.tgz?cache=0&sync_timestamp=1602802515252&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-dotall-regex%2Fdownload%2F%40babel%2Fplugin-transform-dotall-regex-7.12.1.tgz",
+      "integrity": "sha1-odFsFIYoF7ZAnApnjW+Tc8qc2XU=",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.8.3.tgz",
-      "integrity": "sha1-jRLfMJqlN/JyiZxWXqF2jihuIfE=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-duplicate-keys/download/@babel/plugin-transform-duplicate-keys-7.12.1.tgz",
+      "integrity": "sha1-dFZhuropWsBuaGgieXpp+6osoig=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.8.3.tgz",
-      "integrity": "sha1-WBptf1aXDga/UVYM1k9elHtw17c=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-exponentiation-operator/download/@babel/plugin-transform-exponentiation-operator-7.12.1.tgz",
+      "integrity": "sha1-sPLtNWuhvhQo7K8Sj/iiTwKDCuA=",
       "dev": true,
       "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-for-of": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.8.6.tgz?cache=0&sync_timestamp=1582807505906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-for-of%2Fdownload%2F%40babel%2Fplugin-transform-for-of-7.8.6.tgz",
-      "integrity": "sha1-oFG9G0AsYa+Xon/1G0aDIcfCoIU=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-for-of/download/@babel/plugin-transform-for-of-7.12.1.tgz",
+      "integrity": "sha1-B2QPKIZ+0W+VEcmciIKR9WCSHPo=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-function-name": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.8.3.tgz",
-      "integrity": "sha1-J5NzyycyKqrWfCaD53bfxHGW7Ys=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-function-name/download/@babel/plugin-transform-function-name-7.12.1.tgz",
+      "integrity": "sha1-LsdiWMcP4IxtfaFUADpIBiDrpmc=",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-literals": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.8.3.tgz",
-      "integrity": "sha1-rvI5gj2RmU7Hto5VGTUl1229XcE=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-literals/download/@babel/plugin-transform-literals-7.12.1.tgz",
+      "integrity": "sha1-1zuAOiazcBfd+dO7j03Fi/uAb1c=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-transform-member-expression-literals": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-member-expression-literals/download/@babel/plugin-transform-member-expression-literals-7.12.1.tgz?cache=0&sync_timestamp=1602802629539&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-member-expression-literals%2Fdownload%2F%40babel%2Fplugin-transform-member-expression-literals-7.12.1.tgz",
+      "integrity": "sha1-SWA4YC2vFRSmTUPY4Xy7J1Xgw60=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-modules-amd": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.8.3.tgz",
-      "integrity": "sha1-ZWBtRGFrUCJedvVXjzPFaKC4dqU=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-amd/download/@babel/plugin-transform-modules-amd-7.12.1.tgz",
+      "integrity": "sha1-MVQwCwJhhWZu67DA7X+EFf789vk=",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "babel-plugin-dynamic-import-node": "^2.3.0"
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.8.3.tgz",
-      "integrity": "sha1-3yUXBuwzG9BYo0vdcmE5FfgpKKU=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-commonjs/download/@babel/plugin-transform-modules-commonjs-7.12.1.tgz?cache=0&sync_timestamp=1602802521057&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-commonjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-commonjs-7.12.1.tgz",
+      "integrity": "sha1-+kAxJFQmNseGz5tGCg/7tIqG5kg=",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-simple-access": "^7.8.3",
-        "babel-plugin-dynamic-import-node": "^2.3.0"
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-simple-access": "^7.12.1",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.8.3.tgz",
-      "integrity": "sha1-2LvyIsHb42YfRA8vAMFum7fQ1CA=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-systemjs/download/@babel/plugin-transform-modules-systemjs-7.12.1.tgz?cache=0&sync_timestamp=1602802350800&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-modules-systemjs%2Fdownload%2F%40babel%2Fplugin-transform-modules-systemjs-7.12.1.tgz",
+      "integrity": "sha1-Zj/qYg1ZPJPyFKRkzTmb9txoMIY=",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "^7.8.3",
-        "@babel/helper-module-transforms": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "babel-plugin-dynamic-import-node": "^2.3.0"
+        "@babel/helper-hoist-variables": "^7.10.4",
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-validator-identifier": "^7.10.4",
+        "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-umd": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.8.3.tgz",
-      "integrity": "sha1-WS1XjOBsUvW5iwL5E9ZT/+lyZho=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-modules-umd/download/@babel/plugin-transform-modules-umd-7.12.1.tgz",
+      "integrity": "sha1-61ohjWscaPPWIXuPosyC/sZUeQI=",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-module-transforms": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
-      "integrity": "sha1-oqcr/6ICrA4tBQav0JOcXsvEjGw=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-named-capturing-groups-regex/download/@babel/plugin-transform-named-capturing-groups-regex-7.12.1.tgz",
+      "integrity": "sha1-tAf1yWvg2fX4hGdJf6grMKw+h1M=",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.8.3"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.1"
       }
     },
     "@babel/plugin-transform-new-target": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.8.3.tgz",
-      "integrity": "sha1-YMwq5m2FyVq1QOs0urtkNNTHDEM=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-new-target/download/@babel/plugin-transform-new-target-7.12.1.tgz?cache=0&sync_timestamp=1602802505443&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-new-target%2Fdownload%2F%40babel%2Fplugin-transform-new-target-7.12.1.tgz",
+      "integrity": "sha1-gAc/Au4bstNlw0FkkOCFyVdZ3sA=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-object-super": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.8.3.tgz",
-      "integrity": "sha1-67ah56hv+paFi9asAQLWWUQmFyU=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-object-super/download/@babel/plugin-transform-object-super-7.12.1.tgz?cache=0&sync_timestamp=1602802640327&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-object-super%2Fdownload%2F%40babel%2Fplugin-transform-object-super-7.12.1.tgz",
+      "integrity": "sha1-TqCGlrjS5lhB0MdwZIKwSL7RBm4=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-replace-supers": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-replace-supers": "^7.12.1"
       }
     },
     "@babel/plugin-transform-parameters": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.8.7.tgz",
-      "integrity": "sha1-ZvovHeQSm04ER1CSI6xxvaSVU5U=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-parameters/download/@babel/plugin-transform-parameters-7.12.1.tgz",
+      "integrity": "sha1-0uljsDh3FlDJIu/1k3mclthTJV0=",
       "dev": true,
       "requires": {
-        "@babel/helper-call-delegate": "^7.8.7",
-        "@babel/helper-get-function-arity": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
+    "@babel/plugin-transform-property-literals": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-property-literals/download/@babel/plugin-transform-property-literals-7.12.1.tgz",
+      "integrity": "sha1-QbyBIA1zCrtEVquLP71VN7Wa3s0=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-regenerator": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.8.7.tgz",
-      "integrity": "sha1-Xkag3KK+4a2ChesFJ+arycN2cvg=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-regenerator/download/@babel/plugin-transform-regenerator-7.12.1.tgz",
+      "integrity": "sha1-Xwoo2EL2RiKB8GqWToi6jXq0l1M=",
       "dev": true,
       "requires": {
         "regenerator-transform": "^0.14.2"
       }
     },
+    "@babel/plugin-transform-reserved-words": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-reserved-words/download/@babel/plugin-transform-reserved-words-7.12.1.tgz",
+      "integrity": "sha1-b9/IzH7cxCs2p8EhiMZ4fIc63Ng=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-plugin-utils": "^7.10.4"
+      }
+    },
     "@babel/plugin-transform-runtime": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.8.3.tgz",
-      "integrity": "sha1-wBU7wKU3XrwfFZHLfuoiOt6p8Wk=",
+      "version": "7.12.10",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-runtime/download/@babel/plugin-transform-runtime-7.12.10.tgz?cache=0&sync_timestamp=1607569369088&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-runtime%2Fdownload%2F%40babel%2Fplugin-transform-runtime-7.12.10.tgz",
+      "integrity": "sha1-rw/e1OhGxLNweOjl0G3qxs2EhWI=",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "resolve": "^1.8.1",
+        "@babel/helper-module-imports": "^7.12.5",
+        "@babel/helper-plugin-utils": "^7.10.4",
         "semver": "^5.5.1"
       }
     },
     "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.8.3.tgz",
-      "integrity": "sha1-KFRSFuAjqDLU06EYXtSSvP6sCMg=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-shorthand-properties/download/@babel/plugin-transform-shorthand-properties-7.12.1.tgz",
+      "integrity": "sha1-C/nKxVUPzgz98ENCD2YdZF/cdeM=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-spread": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.8.3.tgz",
-      "integrity": "sha1-nI/+gXD9+4ixFOy5ILgvtulf5eg=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-spread/download/@babel/plugin-transform-spread-7.12.1.tgz?cache=0&sync_timestamp=1602802639374&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-spread%2Fdownload%2F%40babel%2Fplugin-transform-spread-7.12.1.tgz",
+      "integrity": "sha1-Un+fMRvk7H/cK3m7ife/iEs+Hh4=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.12.1"
       }
     },
     "@babel/plugin-transform-sticky-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.8.3.tgz",
-      "integrity": "sha1-vnoSkPgdrnZ0dUUhmeH3bWF1sQA=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-sticky-regex/download/@babel/plugin-transform-sticky-regex-7.12.7.tgz",
+      "integrity": "sha1-VgIkYTqyOYdFOUjtIdCwsZP6f60=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3",
-        "@babel/helper-regex": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-template-literals": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.8.3.tgz",
-      "integrity": "sha1-e/pHMrRV6mpDEwrcC6dn7A5AKoA=",
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-template-literals/download/@babel/plugin-transform-template-literals-7.12.1.tgz",
+      "integrity": "sha1-tD7ObtmnnAxxEZ9XbSme8J2UKEM=",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
     "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.8.4",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.8.4.tgz",
-      "integrity": "sha1-7eQGIxXOCq+KZXqSCFjxovNfxBI=",
+      "version": "7.12.10",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-typeof-symbol/download/@babel/plugin-transform-typeof-symbol-7.12.10.tgz?cache=0&sync_timestamp=1607569558495&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-typeof-symbol%2Fdownload%2F%40babel%2Fplugin-transform-typeof-symbol-7.12.10.tgz",
+      "integrity": "sha1-3gHEyPllgL0A8YMHKw0Ozc8N7Es=",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
-    "@babel/plugin-transform-unicode-regex": {
-      "version": "7.8.3",
-      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.8.3.tgz",
-      "integrity": "sha1-DO8247pz5cVyc+/7GC9GuRoeyq0=",
+    "@babel/plugin-transform-unicode-escapes": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-escapes/download/@babel/plugin-transform-unicode-escapes-7.12.1.tgz",
+      "integrity": "sha1-UjK5+BzLBwcLfDw2xnobePGEVwk=",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.8.3",
-        "@babel/helper-plugin-utils": "^7.8.3"
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
-    "@babel/preset-env": {
-      "version": "7.3.4",
-      "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.3.4.tgz?cache=0&sync_timestamp=1583373395373&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.3.4.tgz",
-      "integrity": "sha1-iHzzi20jyC8ZtRNSmL2xYAYuM+E=",
-      "dev": true,
-      "requires": {
-        "@babel/helper-module-imports": "^7.0.0",
-        "@babel/helper-plugin-utils": "^7.0.0",
-        "@babel/plugin-proposal-async-generator-functions": "^7.2.0",
-        "@babel/plugin-proposal-json-strings": "^7.2.0",
-        "@babel/plugin-proposal-object-rest-spread": "^7.3.4",
-        "@babel/plugin-proposal-optional-catch-binding": "^7.2.0",
-        "@babel/plugin-proposal-unicode-property-regex": "^7.2.0",
-        "@babel/plugin-syntax-async-generators": "^7.2.0",
-        "@babel/plugin-syntax-json-strings": "^7.2.0",
-        "@babel/plugin-syntax-object-rest-spread": "^7.2.0",
-        "@babel/plugin-syntax-optional-catch-binding": "^7.2.0",
-        "@babel/plugin-transform-arrow-functions": "^7.2.0",
-        "@babel/plugin-transform-async-to-generator": "^7.3.4",
-        "@babel/plugin-transform-block-scoped-functions": "^7.2.0",
-        "@babel/plugin-transform-block-scoping": "^7.3.4",
-        "@babel/plugin-transform-classes": "^7.3.4",
-        "@babel/plugin-transform-computed-properties": "^7.2.0",
-        "@babel/plugin-transform-destructuring": "^7.2.0",
-        "@babel/plugin-transform-dotall-regex": "^7.2.0",
-        "@babel/plugin-transform-duplicate-keys": "^7.2.0",
-        "@babel/plugin-transform-exponentiation-operator": "^7.2.0",
-        "@babel/plugin-transform-for-of": "^7.2.0",
-        "@babel/plugin-transform-function-name": "^7.2.0",
-        "@babel/plugin-transform-literals": "^7.2.0",
-        "@babel/plugin-transform-modules-amd": "^7.2.0",
-        "@babel/plugin-transform-modules-commonjs": "^7.2.0",
-        "@babel/plugin-transform-modules-systemjs": "^7.3.4",
-        "@babel/plugin-transform-modules-umd": "^7.2.0",
-        "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0",
-        "@babel/plugin-transform-new-target": "^7.0.0",
-        "@babel/plugin-transform-object-super": "^7.2.0",
-        "@babel/plugin-transform-parameters": "^7.2.0",
-        "@babel/plugin-transform-regenerator": "^7.3.4",
-        "@babel/plugin-transform-shorthand-properties": "^7.2.0",
-        "@babel/plugin-transform-spread": "^7.2.0",
-        "@babel/plugin-transform-sticky-regex": "^7.2.0",
-        "@babel/plugin-transform-template-literals": "^7.2.0",
-        "@babel/plugin-transform-typeof-symbol": "^7.2.0",
-        "@babel/plugin-transform-unicode-regex": "^7.2.0",
-        "browserslist": "^4.3.4",
-        "invariant": "^2.2.2",
-        "js-levenshtein": "^1.1.3",
-        "semver": "^5.3.0"
-      }
-    },
-    "@babel/register": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npm.taobao.org/@babel/register/download/@babel/register-7.0.0.tgz",
-      "integrity": "sha1-+mNLrhv6Qp9gYVt1T8Hx10Xt2Cc=",
+    "@babel/plugin-transform-unicode-regex": {
+      "version": "7.12.1",
+      "resolved": "https://registry.npm.taobao.org/@babel/plugin-transform-unicode-regex/download/@babel/plugin-transform-unicode-regex-7.12.1.tgz?cache=0&sync_timestamp=1602802516121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-transform-unicode-regex%2Fdownload%2F%40babel%2Fplugin-transform-unicode-regex-7.12.1.tgz",
+      "integrity": "sha1-zJZh9hOQ21xl4/66zO/Vxqw/rss=",
       "dev": true,
       "requires": {
-        "core-js": "^2.5.7",
-        "find-cache-dir": "^1.0.0",
-        "home-or-tmp": "^3.0.0",
-        "lodash": "^4.17.10",
-        "mkdirp": "^0.5.1",
-        "pirates": "^4.0.0",
-        "source-map-support": "^0.5.9"
+        "@babel/helper-create-regexp-features-plugin": "^7.12.1",
+        "@babel/helper-plugin-utils": "^7.10.4"
       }
     },
-    "@babel/runtime": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.8.7.tgz?cache=0&sync_timestamp=1583373757080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.8.7.tgz",
-      "integrity": "sha1-j+/OmALbVIgbpZ+Quyhxm0mWMk0=",
+    "@babel/preset-env": {
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/preset-env/download/@babel/preset-env-7.12.11.tgz?cache=0&sync_timestamp=1608076805354&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fpreset-env%2Fdownload%2F%40babel%2Fpreset-env-7.12.11.tgz",
+      "integrity": "sha1-VdX3mBSHNlyT27yEUHscchXoV/k=",
+      "dev": true,
+      "requires": {
+        "@babel/compat-data": "^7.12.7",
+        "@babel/helper-compilation-targets": "^7.12.5",
+        "@babel/helper-module-imports": "^7.12.5",
+        "@babel/helper-plugin-utils": "^7.10.4",
+        "@babel/helper-validator-option": "^7.12.11",
+        "@babel/plugin-proposal-async-generator-functions": "^7.12.1",
+        "@babel/plugin-proposal-class-properties": "^7.12.1",
+        "@babel/plugin-proposal-dynamic-import": "^7.12.1",
+        "@babel/plugin-proposal-export-namespace-from": "^7.12.1",
+        "@babel/plugin-proposal-json-strings": "^7.12.1",
+        "@babel/plugin-proposal-logical-assignment-operators": "^7.12.1",
+        "@babel/plugin-proposal-nullish-coalescing-operator": "^7.12.1",
+        "@babel/plugin-proposal-numeric-separator": "^7.12.7",
+        "@babel/plugin-proposal-object-rest-spread": "^7.12.1",
+        "@babel/plugin-proposal-optional-catch-binding": "^7.12.1",
+        "@babel/plugin-proposal-optional-chaining": "^7.12.7",
+        "@babel/plugin-proposal-private-methods": "^7.12.1",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.12.1",
+        "@babel/plugin-syntax-async-generators": "^7.8.0",
+        "@babel/plugin-syntax-class-properties": "^7.12.1",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.0",
+        "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
+        "@babel/plugin-syntax-json-strings": "^7.8.0",
+        "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
+        "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+        "@babel/plugin-syntax-numeric-separator": "^7.10.4",
+        "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+        "@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
+        "@babel/plugin-syntax-optional-chaining": "^7.8.0",
+        "@babel/plugin-syntax-top-level-await": "^7.12.1",
+        "@babel/plugin-transform-arrow-functions": "^7.12.1",
+        "@babel/plugin-transform-async-to-generator": "^7.12.1",
+        "@babel/plugin-transform-block-scoped-functions": "^7.12.1",
+        "@babel/plugin-transform-block-scoping": "^7.12.11",
+        "@babel/plugin-transform-classes": "^7.12.1",
+        "@babel/plugin-transform-computed-properties": "^7.12.1",
+        "@babel/plugin-transform-destructuring": "^7.12.1",
+        "@babel/plugin-transform-dotall-regex": "^7.12.1",
+        "@babel/plugin-transform-duplicate-keys": "^7.12.1",
+        "@babel/plugin-transform-exponentiation-operator": "^7.12.1",
+        "@babel/plugin-transform-for-of": "^7.12.1",
+        "@babel/plugin-transform-function-name": "^7.12.1",
+        "@babel/plugin-transform-literals": "^7.12.1",
+        "@babel/plugin-transform-member-expression-literals": "^7.12.1",
+        "@babel/plugin-transform-modules-amd": "^7.12.1",
+        "@babel/plugin-transform-modules-commonjs": "^7.12.1",
+        "@babel/plugin-transform-modules-systemjs": "^7.12.1",
+        "@babel/plugin-transform-modules-umd": "^7.12.1",
+        "@babel/plugin-transform-named-capturing-groups-regex": "^7.12.1",
+        "@babel/plugin-transform-new-target": "^7.12.1",
+        "@babel/plugin-transform-object-super": "^7.12.1",
+        "@babel/plugin-transform-parameters": "^7.12.1",
+        "@babel/plugin-transform-property-literals": "^7.12.1",
+        "@babel/plugin-transform-regenerator": "^7.12.1",
+        "@babel/plugin-transform-reserved-words": "^7.12.1",
+        "@babel/plugin-transform-shorthand-properties": "^7.12.1",
+        "@babel/plugin-transform-spread": "^7.12.1",
+        "@babel/plugin-transform-sticky-regex": "^7.12.7",
+        "@babel/plugin-transform-template-literals": "^7.12.1",
+        "@babel/plugin-transform-typeof-symbol": "^7.12.10",
+        "@babel/plugin-transform-unicode-escapes": "^7.12.1",
+        "@babel/plugin-transform-unicode-regex": "^7.12.1",
+        "@babel/preset-modules": "^0.1.3",
+        "@babel/types": "^7.12.11",
+        "core-js-compat": "^3.8.0",
+        "semver": "^5.5.0"
+      }
+    },
+    "@babel/preset-modules": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/@babel/preset-modules/download/@babel/preset-modules-0.1.4.tgz",
+      "integrity": "sha1-Ni8raMZihClw/bXiVP/I/BwuQV4=",
       "dev": true,
       "requires": {
-        "regenerator-runtime": "^0.13.4"
-      },
-      "dependencies": {
-        "regenerator-runtime": {
-          "version": "0.13.4",
-          "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.4.tgz?cache=0&sync_timestamp=1582505712016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.4.tgz",
-          "integrity": "sha1-6Wv2EqM2LRK7affo90/+qyXHrJE=",
-          "dev": true
-        }
+        "@babel/helper-plugin-utils": "^7.0.0",
+        "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+        "@babel/plugin-transform-dotall-regex": "^7.4.4",
+        "@babel/types": "^7.4.4",
+        "esutils": "^2.0.2"
       }
     },
-    "@babel/runtime-corejs2": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npm.taobao.org/@babel/runtime-corejs2/download/@babel/runtime-corejs2-7.8.7.tgz?cache=0&sync_timestamp=1583373407579&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime-corejs2%2Fdownload%2F%40babel%2Fruntime-corejs2-7.8.7.tgz",
-      "integrity": "sha1-XGr8sz7xL6H422uRX/a17K9q+xE=",
-      "dev": true,
+    "@babel/runtime": {
+      "version": "7.12.5",
+      "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.12.5.tgz?cache=0&sync_timestamp=1604443606981&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.12.5.tgz",
+      "integrity": "sha1-QQ5+SHRB4bNgwpvnFdhw2bmFiC4=",
       "requires": {
-        "core-js": "^2.6.5",
         "regenerator-runtime": "^0.13.4"
-      },
-      "dependencies": {
-        "regenerator-runtime": {
-          "version": "0.13.4",
-          "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.4.tgz?cache=0&sync_timestamp=1582505712016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.13.4.tgz",
-          "integrity": "sha1-6Wv2EqM2LRK7affo90/+qyXHrJE=",
-          "dev": true
-        }
       }
     },
     "@babel/template": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.8.6.tgz",
-      "integrity": "sha1-hrIq8V+CjfsIZHT5ZNzD45xDzis=",
+      "version": "7.12.7",
+      "resolved": "https://registry.npm.taobao.org/@babel/template/download/@babel/template-7.12.7.tgz",
+      "integrity": "sha1-yBcjNpYBjjn7tsSR0vtoTgXtQ7w=",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "^7.8.3",
-        "@babel/parser": "^7.8.6",
-        "@babel/types": "^7.8.6"
+        "@babel/code-frame": "^7.10.4",
+        "@babel/parser": "^7.12.7",
+        "@babel/types": "^7.12.7"
       }
     },
     "@babel/traverse": {
-      "version": "7.8.6",
-      "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.8.6.tgz",
-      "integrity": "sha1-rP4MZOHNmRs+MuroE6brVklUtf8=",
+      "version": "7.12.10",
+      "resolved": "https://registry.npm.taobao.org/@babel/traverse/download/@babel/traverse-7.12.10.tgz?cache=0&sync_timestamp=1607569332108&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftraverse%2Fdownload%2F%40babel%2Ftraverse-7.12.10.tgz",
+      "integrity": "sha1-LR9AQei/QuoJnlstxI1qWUwAAXo=",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "^7.8.3",
-        "@babel/generator": "^7.8.6",
-        "@babel/helper-function-name": "^7.8.3",
-        "@babel/helper-split-export-declaration": "^7.8.3",
-        "@babel/parser": "^7.8.6",
-        "@babel/types": "^7.8.6",
+        "@babel/code-frame": "^7.10.4",
+        "@babel/generator": "^7.12.10",
+        "@babel/helper-function-name": "^7.10.4",
+        "@babel/helper-split-export-declaration": "^7.11.0",
+        "@babel/parser": "^7.12.10",
+        "@babel/types": "^7.12.10",
         "debug": "^4.1.0",
         "globals": "^11.1.0",
-        "lodash": "^4.17.13"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        }
+        "lodash": "^4.17.19"
       }
     },
     "@babel/types": {
-      "version": "7.8.7",
-      "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.8.7.tgz?cache=0&sync_timestamp=1583373407005&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Ftypes%2Fdownload%2F%40babel%2Ftypes-7.8.7.tgz",
-      "integrity": "sha1-H8lynhrLsjN9W2l3pjl5tIGfXR0=",
-      "dev": true,
+      "version": "7.12.11",
+      "resolved": "https://registry.npm.taobao.org/@babel/types/download/@babel/types-7.12.11.tgz",
+      "integrity": "sha1-qG5NceMKm27hAlkERsmGYliSg84=",
       "requires": {
-        "esutils": "^2.0.2",
-        "lodash": "^4.17.13",
+        "@babel/helper-validator-identifier": "^7.12.11",
+        "lodash": "^4.17.19",
         "to-fast-properties": "^2.0.0"
       }
     },
+    "@ctrl/tinycolor": {
+      "version": "3.6.1",
+      "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz",
+      "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA=="
+    },
+    "@element-plus/icons": {
+      "version": "0.0.11",
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons/-/icons-0.0.11.tgz",
+      "integrity": "sha512-iKQXSxXu131Ai+I9Ymtcof9WId7kaXvB1+WRfAfpQCW7UiAMYgdNDqb/u0hgTo2Yq3MwC4MWJnNuTBEpG8r7+A=="
+    },
+    "@element-plus/icons-vue": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz",
+      "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg=="
+    },
+    "@emotion/hash": {
+      "version": "0.9.2",
+      "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.2.tgz",
+      "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g=="
+    },
+    "@emotion/unitless": {
+      "version": "0.8.1",
+      "resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz",
+      "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ=="
+    },
+    "@fortawesome/fontawesome-free": {
+      "version": "5.15.1",
+      "resolved": "https://registry.npm.taobao.org/@fortawesome/fontawesome-free/download/@fortawesome/fontawesome-free-5.15.1.tgz",
+      "integrity": "sha1-zP723b5Z+P6PaUeD4dPriJAtxes=",
+      "dev": true
+    },
     "@hapi/address": {
       "version": "2.1.4",
-      "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Faddress%2Fdownload%2F%40hapi%2Faddress-2.1.4.tgz",
+      "resolved": "https://registry.npm.taobao.org/@hapi/address/download/@hapi/address-2.1.4.tgz",
       "integrity": "sha1-XWftQ/P9QaadS5/3tW58DR0KgeU=",
       "dev": true
     },
@@ -891,13 +1100,13 @@
     },
     "@hapi/hoek": {
       "version": "8.5.1",
-      "resolved": "https://registry.npm.taobao.org/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/@hapi/hoek/download/@hapi/hoek-8.5.1.tgz?cache=0&sync_timestamp=1599008863490&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fhoek%2Fdownload%2F%40hapi%2Fhoek-8.5.1.tgz",
       "integrity": "sha1-/elgZMpEbeyMVajC8TCVewcMbgY=",
       "dev": true
     },
     "@hapi/joi": {
       "version": "15.1.1",
-      "resolved": "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/@hapi/joi/download/@hapi/joi-15.1.1.tgz?cache=0&sync_timestamp=1603524515155&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40hapi%2Fjoi%2Fdownload%2F%40hapi%2Fjoi-15.1.1.tgz",
       "integrity": "sha1-xnW4pxKW8Cgz+NbSQ7NMV7jOGdc=",
       "dev": true,
       "requires": {
@@ -943,249 +1152,476 @@
       "integrity": "sha1-K1o6s/kYzKSKjHVMCBaOPwPrphs=",
       "dev": true
     },
-    "@samverschueren/stream-to-observable": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/@samverschueren/stream-to-observable/download/@samverschueren/stream-to-observable-0.3.0.tgz",
-      "integrity": "sha1-7N9I1TLFjqR3rPyrgDSEJPjQZi8=",
-      "dev": true,
+    "@popperjs/core": {
+      "version": "2.11.8",
+      "resolved": "https://registry.npmmirror.com/@popperjs/core/-/core-2.11.8.tgz",
+      "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A=="
+    },
+    "@simonwep/pickr": {
+      "version": "1.8.2",
+      "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz",
+      "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==",
       "requires": {
-        "any-observable": "^0.3.0"
+        "core-js": "^3.15.1",
+        "nanopop": "^2.1.0"
+      },
+      "dependencies": {
+        "core-js": {
+          "version": "3.38.0",
+          "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.38.0.tgz",
+          "integrity": "sha512-XPpwqEodRljce9KswjZShh95qJ1URisBeKCjUdq27YdenkslVe7OO0ZJhlYXAChW7OhXaRLl8AAba7IBfoIHug=="
+        }
       }
     },
     "@soda/friendly-errors-webpack-plugin": {
-      "version": "1.7.1",
-      "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.7.1.tgz",
-      "integrity": "sha1-cG9kvLSouWQrSK46zkRMcDNNYV0=",
+      "version": "1.8.0",
+      "resolved": "https://registry.npm.taobao.org/@soda/friendly-errors-webpack-plugin/download/@soda/friendly-errors-webpack-plugin-1.8.0.tgz?cache=0&sync_timestamp=1607927399532&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40soda%2Ffriendly-errors-webpack-plugin%2Fdownload%2F%40soda%2Ffriendly-errors-webpack-plugin-1.8.0.tgz",
+      "integrity": "sha1-hHUdgqkwGdXJLAzw5FrFkIfNIkA=",
       "dev": true,
       "requires": {
-        "chalk": "^1.1.3",
-        "error-stack-parser": "^2.0.0",
-        "string-width": "^2.0.0"
+        "chalk": "^2.4.2",
+        "error-stack-parser": "^2.0.2",
+        "string-width": "^2.0.0",
+        "strip-ansi": "^5"
       },
       "dependencies": {
         "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
+          "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
           "dev": true
         },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
           "dev": true
         },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+        "string-width": {
+          "version": "2.1.1",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz",
+          "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
           "dev": true,
           "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^4.0.0"
+          },
+          "dependencies": {
+            "strip-ansi": {
+              "version": "4.0.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
+              "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^3.0.0"
+              }
+            }
           }
         },
         "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
           "dev": true,
           "requires": {
-            "ansi-regex": "^2.0.0"
+            "ansi-regex": "^4.1.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            }
           }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
         }
       }
     },
-    "@types/codemirror": {
-      "version": "0.0.71",
-      "resolved": "https://registry.npm.taobao.org/@types/codemirror/download/@types/codemirror-0.0.71.tgz",
-      "integrity": "sha1-hh8byzEAwKBkVnxUAPKYHPSujKc=",
+    "@soda/get-current-script": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/@soda/get-current-script/download/@soda/get-current-script-1.0.2.tgz",
+      "integrity": "sha1-pTUV2yXYA4N0OBtzryC7Ty5QjYc=",
+      "dev": true
+    },
+    "@types/anymatch": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npm.taobao.org/@types/anymatch/download/@types/anymatch-1.3.1.tgz?cache=0&sync_timestamp=1605052639708&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fanymatch%2Fdownload%2F%40types%2Fanymatch-1.3.1.tgz",
+      "integrity": "sha1-M2utwb7sudrMOL6izzKt9ieoQho=",
+      "dev": true
+    },
+    "@types/body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npm.taobao.org/@types/body-parser/download/@types/body-parser-1.19.0.tgz",
+      "integrity": "sha1-BoWzxH6zAG/+0RfN1VFkth+AU48=",
+      "dev": true,
       "requires": {
-        "@types/tern": "*"
+        "@types/connect": "*",
+        "@types/node": "*"
       }
     },
-    "@types/estree": {
-      "version": "0.0.42",
-      "resolved": "https://registry.npm.taobao.org/@types/estree/download/@types/estree-0.0.42.tgz",
-      "integrity": "sha1-jQwfSAM57+2z5GBw4i3WPgQw3RE="
+    "@types/connect": {
+      "version": "3.4.34",
+      "resolved": "https://registry.npm.taobao.org/@types/connect/download/@types/connect-3.4.34.tgz?cache=0&sync_timestamp=1607458904874&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fconnect%2Fdownload%2F%40types%2Fconnect-3.4.34.tgz",
+      "integrity": "sha1-FwpAIjptZmAG2TyhKK8r6x2bGQE=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*"
+      }
     },
-    "@types/events": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/@types/events/download/@types/events-3.0.0.tgz?cache=0&sync_timestamp=1580841990603&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fevents%2Fdownload%2F%40types%2Fevents-3.0.0.tgz",
-      "integrity": "sha1-KGLz9Yqaf3w+eNefEw3U1xwlwqc=",
-      "dev": true
+    "@types/connect-history-api-fallback": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npm.taobao.org/@types/connect-history-api-fallback/download/@types/connect-history-api-fallback-1.3.3.tgz",
+      "integrity": "sha1-R3K3m4tTGF8PTJ3qsJI2uvdu47Q=",
+      "dev": true,
+      "requires": {
+        "@types/express-serve-static-core": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/express": {
+      "version": "4.17.9",
+      "resolved": "https://registry.npm.taobao.org/@types/express/download/@types/express-4.17.9.tgz?cache=0&sync_timestamp=1605057477768&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fexpress%2Fdownload%2F%40types%2Fexpress-4.17.9.tgz",
+      "integrity": "sha1-9fLfat1wP/KEKK3VK97IoQkbCng=",
+      "dev": true,
+      "requires": {
+        "@types/body-parser": "*",
+        "@types/express-serve-static-core": "*",
+        "@types/qs": "*",
+        "@types/serve-static": "*"
+      }
+    },
+    "@types/express-serve-static-core": {
+      "version": "4.17.17",
+      "resolved": "https://registry.npm.taobao.org/@types/express-serve-static-core/download/@types/express-serve-static-core-4.17.17.tgz?cache=0&sync_timestamp=1608052291315&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fexpress-serve-static-core%2Fdownload%2F%40types%2Fexpress-serve-static-core-4.17.17.tgz",
+      "integrity": "sha1-a6AkZRZbbJw9jbOije9rFvybcPU=",
+      "dev": true,
+      "requires": {
+        "@types/node": "*",
+        "@types/qs": "*",
+        "@types/range-parser": "*"
+      }
     },
     "@types/glob": {
-      "version": "7.1.1",
-      "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.1.tgz",
-      "integrity": "sha1-qlmhxuP7xCHgfM0xqUTDDrpSFXU=",
+      "version": "7.1.3",
+      "resolved": "https://registry.npm.taobao.org/@types/glob/download/@types/glob-7.1.3.tgz?cache=0&sync_timestamp=1605053345113&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fglob%2Fdownload%2F%40types%2Fglob-7.1.3.tgz",
+      "integrity": "sha1-5rqA82t9qtLGhazZJmOC5omFwYM=",
       "dev": true,
       "requires": {
-        "@types/events": "*",
         "@types/minimatch": "*",
         "@types/node": "*"
       }
     },
-    "@types/jquery": {
-      "version": "3.3.33",
-      "resolved": "https://registry.npm.taobao.org/@types/jquery/download/@types/jquery-3.3.33.tgz",
-      "integrity": "sha1-YdnL1ABP/N9s9+NHIKh6ViWn2Ok=",
+    "@types/http-proxy": {
+      "version": "1.17.4",
+      "resolved": "https://registry.npm.taobao.org/@types/http-proxy/download/@types/http-proxy-1.17.4.tgz?cache=0&sync_timestamp=1605053586725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhttp-proxy%2Fdownload%2F%40types%2Fhttp-proxy-1.17.4.tgz",
+      "integrity": "sha1-58kuPb4+E6p5lED/QubToXqdBFs=",
+      "dev": true,
       "requires": {
-        "@types/sizzle": "*"
+        "@types/node": "*"
       }
     },
-    "@types/json-schema": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.5.tgz?cache=0&sync_timestamp=1591720889158&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.5.tgz",
-      "integrity": "sha1-3M5EMOZLRDuolF8CkPtWStW6xt0="
-    },
-    "@types/linkify-it": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/@types/linkify-it/download/@types/linkify-it-2.1.0.tgz",
-      "integrity": "sha1-6j3WTEgFWXMReQth6HLL0e0s2AY="
-    },
-    "@types/markdown-it": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npm.taobao.org/@types/markdown-it/download/@types/markdown-it-0.0.7.tgz",
-      "integrity": "sha1-dQcEhaPYrRHn3rgof0QwvhW/TTk=",
+    "@types/http-proxy-middleware": {
+      "version": "0.19.3",
+      "resolved": "https://registry.npm.taobao.org/@types/http-proxy-middleware/download/@types/http-proxy-middleware-0.19.3.tgz?cache=0&sync_timestamp=1605053586886&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fhttp-proxy-middleware%2Fdownload%2F%40types%2Fhttp-proxy-middleware-0.19.3.tgz",
+      "integrity": "sha1-suuW+8D5rHJQtdnExTqt4ElJfQM=",
+      "dev": true,
       "requires": {
-        "@types/linkify-it": "*"
+        "@types/connect": "*",
+        "@types/http-proxy": "*",
+        "@types/node": "*"
       }
     },
+    "@types/json-schema": {
+      "version": "7.0.6",
+      "resolved": "https://registry.npm.taobao.org/@types/json-schema/download/@types/json-schema-7.0.6.tgz?cache=0&sync_timestamp=1605053861867&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fjson-schema%2Fdownload%2F%40types%2Fjson-schema-7.0.6.tgz",
+      "integrity": "sha1-9MfsQ+gbMZqYFRFQMXCfJph4kfA=",
+      "dev": true
+    },
+    "@types/mime": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npm.taobao.org/@types/mime/download/@types/mime-2.0.3.tgz",
+      "integrity": "sha1-yJO3NyHbc2mZQ7/DZTsd63+qSjo=",
+      "dev": true
+    },
     "@types/minimatch": {
       "version": "3.0.3",
-      "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimatch%2Fdownload%2F%40types%2Fminimatch-3.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/@types/minimatch/download/@types/minimatch-3.0.3.tgz",
       "integrity": "sha1-PcoOPzOyAPx9ETnAzZbBJoyt/Z0=",
       "dev": true
     },
+    "@types/minimist": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@types/minimist/download/@types/minimist-1.2.1.tgz?cache=0&sync_timestamp=1604943486106&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fminimist%2Fdownload%2F%40types%2Fminimist-1.2.1.tgz",
+      "integrity": "sha1-KD9mn/dte4Jg34q3pCYsyD2YglY=",
+      "dev": true
+    },
     "@types/node": {
-      "version": "13.9.0",
-      "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-13.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-13.9.0.tgz",
-      "integrity": "sha1-W27np3+qzd195xkBfQvBL1L4FYk=",
+      "version": "14.14.14",
+      "resolved": "https://registry.npm.taobao.org/@types/node/download/@types/node-14.14.14.tgz?cache=0&sync_timestamp=1608047832709&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.14.14.tgz",
+      "integrity": "sha1-9/1fPMhSEwERn2ORDw+5ZcfXYa4=",
+      "dev": true
+    },
+    "@types/normalize-package-data": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npm.taobao.org/@types/normalize-package-data/download/@types/normalize-package-data-2.4.0.tgz?cache=0&sync_timestamp=1605054783883&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnormalize-package-data%2Fdownload%2F%40types%2Fnormalize-package-data-2.4.0.tgz",
+      "integrity": "sha1-5IbQ2XOW15vu3QpuM/RTT/a0lz4=",
       "dev": true
     },
     "@types/q": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.2.tgz?cache=0&sync_timestamp=1580864548163&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.2.tgz",
-      "integrity": "sha1-aQoUdbhPKohP0HzXl8APXzE1bqg=",
+      "version": "1.5.4",
+      "resolved": "https://registry.npm.taobao.org/@types/q/download/@types/q-1.5.4.tgz?cache=0&sync_timestamp=1605055096527&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fq%2Fdownload%2F%40types%2Fq-1.5.4.tgz",
+      "integrity": "sha1-FZJUFOCtLNdlv+9YhC9+JqesyyQ=",
       "dev": true
     },
-    "@types/sizzle": {
-      "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/@types/sizzle/download/@types/sizzle-2.3.2.tgz",
-      "integrity": "sha1-qBG4wY4rq6t9VCszZYh64uTZ3kc="
+    "@types/qs": {
+      "version": "6.9.5",
+      "resolved": "https://registry.npm.taobao.org/@types/qs/download/@types/qs-6.9.5.tgz?cache=0&sync_timestamp=1605055106687&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fqs%2Fdownload%2F%40types%2Fqs-6.9.5.tgz",
+      "integrity": "sha1-Q0cRvdSete5p2QwdZ8NUqajssYs=",
+      "dev": true
     },
-    "@types/strip-bom": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/@types/strip-bom/download/@types/strip-bom-3.0.0.tgz",
-      "integrity": "sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=",
+    "@types/range-parser": {
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/@types/range-parser/download/@types/range-parser-1.2.3.tgz",
+      "integrity": "sha1-fuMwunyq+5gJC+zoal7kQRWQTCw=",
+      "dev": true
+    },
+    "@types/serve-static": {
+      "version": "1.13.8",
+      "resolved": "https://registry.npm.taobao.org/@types/serve-static/download/@types/serve-static-1.13.8.tgz?cache=0&sync_timestamp=1605657862811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fserve-static%2Fdownload%2F%40types%2Fserve-static-1.13.8.tgz",
+      "integrity": "sha1-hREp1DRDPHCCFIV0/+wmPVgwnEY=",
+      "dev": true,
+      "requires": {
+        "@types/mime": "*",
+        "@types/node": "*"
+      }
+    },
+    "@types/source-list-map": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/@types/source-list-map/download/@types/source-list-map-0.1.2.tgz",
+      "integrity": "sha1-AHiDYGP/rxdBI0m7o2QIfgrALsk=",
       "dev": true
     },
-    "@types/strip-json-comments": {
-      "version": "0.0.30",
-      "resolved": "https://registry.npm.taobao.org/@types/strip-json-comments/download/@types/strip-json-comments-0.0.30.tgz",
-      "integrity": "sha1-mqMMBNshKpoGSdaub9UKzMQHSKE=",
+    "@types/tapable": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/@types/tapable/download/@types/tapable-1.0.6.tgz?cache=0&sync_timestamp=1605057449125&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Ftapable%2Fdownload%2F%40types%2Ftapable-1.0.6.tgz",
+      "integrity": "sha1-qcpLcKGLJwzLK8Cqr+/R1Ia36nQ=",
       "dev": true
     },
-    "@types/tern": {
-      "version": "0.23.3",
-      "resolved": "https://registry.npm.taobao.org/@types/tern/download/@types/tern-0.23.3.tgz",
-      "integrity": "sha1-S1RTjwSojJ/3neH2+U9XWn8zlGA=",
+    "@types/uglify-js": {
+      "version": "3.11.1",
+      "resolved": "https://registry.npm.taobao.org/@types/uglify-js/download/@types/uglify-js-3.11.1.tgz?cache=0&sync_timestamp=1605057452755&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fuglify-js%2Fdownload%2F%40types%2Fuglify-js-3.11.1.tgz",
+      "integrity": "sha1-l/8w5hoKpodsJwtfU4c34tarjOs=",
+      "dev": true,
+      "requires": {
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "@types/webpack": {
+      "version": "4.41.25",
+      "resolved": "https://registry.npm.taobao.org/@types/webpack/download/@types/webpack-4.41.25.tgz",
+      "integrity": "sha1-TTta7MTkQRezdigPv9LcNml5aMQ=",
+      "dev": true,
+      "requires": {
+        "@types/anymatch": "*",
+        "@types/node": "*",
+        "@types/tapable": "*",
+        "@types/uglify-js": "*",
+        "@types/webpack-sources": "*",
+        "source-map": "^0.6.0"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "@types/webpack-dev-server": {
+      "version": "3.11.1",
+      "resolved": "https://registry.npm.taobao.org/@types/webpack-dev-server/download/@types/webpack-dev-server-3.11.1.tgz",
+      "integrity": "sha1-+PTawdoibVML0VodXcNLI7p2bMs=",
+      "dev": true,
+      "requires": {
+        "@types/connect-history-api-fallback": "*",
+        "@types/express": "*",
+        "@types/http-proxy-middleware": "*",
+        "@types/serve-static": "*",
+        "@types/webpack": "*"
+      }
+    },
+    "@types/webpack-sources": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/@types/webpack-sources/download/@types/webpack-sources-2.1.0.tgz",
+      "integrity": "sha1-iIKwvWLR4M5i8YPQ0Bty5ugujBA=",
+      "dev": true,
       "requires": {
-        "@types/estree": "*"
+        "@types/node": "*",
+        "@types/source-list-map": "*",
+        "source-map": "^0.7.3"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.7.3",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.7.3.tgz",
+          "integrity": "sha1-UwL4FpAxc1ImVECS5kmB91F1A4M=",
+          "dev": true
+        }
       }
     },
     "@vue/babel-helper-vue-jsx-merge-props": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.0.0.tgz",
-      "integrity": "sha1-BI/leZWNpAj7eosqPsBQtQpmEEA=",
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-jsx-merge-props/download/@vue/babel-helper-vue-jsx-merge-props-1.2.1.tgz?cache=0&sync_timestamp=1602851174430&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-helper-vue-jsx-merge-props%2Fdownload%2F%40vue%2Fbabel-helper-vue-jsx-merge-props-1.2.1.tgz",
+      "integrity": "sha1-MWJKelBfsU2h1YAjclpMXycOaoE=",
       "dev": true
     },
+    "@vue/babel-helper-vue-transform-on": {
+      "version": "1.0.0-rc.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-helper-vue-transform-on/download/@vue/babel-helper-vue-transform-on-1.0.0-rc.2.tgz",
+      "integrity": "sha1-ckY0H2ZufG5lsT2kIOLOhXFPu8o=",
+      "dev": true
+    },
+    "@vue/babel-plugin-jsx": {
+      "version": "1.0.0-rc.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-jsx/download/@vue/babel-plugin-jsx-1.0.0-rc.5.tgz?cache=0&sync_timestamp=1607773057378&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-plugin-jsx%2Fdownload%2F%40vue%2Fbabel-plugin-jsx-1.0.0-rc.5.tgz",
+      "integrity": "sha1-5EC+LQd17jgoy6LDigOxmpIXSGU=",
+      "dev": true,
+      "requires": {
+        "@babel/helper-module-imports": "^7.0.0",
+        "@babel/plugin-syntax-jsx": "^7.0.0",
+        "@babel/template": "^7.0.0",
+        "@babel/traverse": "^7.0.0",
+        "@babel/types": "^7.0.0",
+        "@vue/babel-helper-vue-transform-on": "^1.0.0-rc.2",
+        "camelcase": "^6.0.0",
+        "html-tags": "^3.1.0",
+        "svg-tags": "^1.0.0"
+      }
+    },
     "@vue/babel-plugin-transform-vue-jsx": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.1.2.tgz",
-      "integrity": "sha1-wKPm78Ai515CR7RIqPxrhvA+kcA=",
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-plugin-transform-vue-jsx/download/@vue/babel-plugin-transform-vue-jsx-1.2.1.tgz?cache=0&sync_timestamp=1602851113524&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-plugin-transform-vue-jsx%2Fdownload%2F%40vue%2Fbabel-plugin-transform-vue-jsx-1.2.1.tgz",
+      "integrity": "sha1-ZGBGxlLC8CQnJ/NFGdkXsGQEHtc=",
       "dev": true,
       "requires": {
         "@babel/helper-module-imports": "^7.0.0",
         "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
         "html-tags": "^2.0.0",
         "lodash.kebabcase": "^4.1.1",
         "svg-tags": "^1.0.0"
+      },
+      "dependencies": {
+        "html-tags": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+          "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+          "dev": true
+        }
       }
     },
     "@vue/babel-preset-app": {
-      "version": "3.12.1",
-      "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-3.12.1.tgz",
-      "integrity": "sha1-JMR3BS8HjzD9t3NRA7FN0fosv+E=",
+      "version": "4.5.9",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-app/download/@vue/babel-preset-app-4.5.9.tgz?cache=0&sync_timestamp=1607995430964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-preset-app%2Fdownload%2F%40vue%2Fbabel-preset-app-4.5.9.tgz",
+      "integrity": "sha1-pO8YMKITAeT3fXzUoEVV2KAerzM=",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "^7.0.0",
-        "@babel/plugin-proposal-class-properties": "^7.0.0",
-        "@babel/plugin-proposal-decorators": "^7.1.0",
-        "@babel/plugin-syntax-dynamic-import": "^7.0.0",
-        "@babel/plugin-syntax-jsx": "^7.0.0",
-        "@babel/plugin-transform-runtime": "^7.4.0",
-        "@babel/preset-env": "^7.0.0 < 7.4.0",
-        "@babel/runtime": "^7.0.0",
-        "@babel/runtime-corejs2": "^7.2.0",
-        "@vue/babel-preset-jsx": "^1.0.0",
-        "babel-plugin-dynamic-import-node": "^2.2.0",
-        "babel-plugin-module-resolver": "3.2.0",
-        "core-js": "^2.6.5"
+        "@babel/core": "^7.11.0",
+        "@babel/helper-compilation-targets": "^7.9.6",
+        "@babel/helper-module-imports": "^7.8.3",
+        "@babel/plugin-proposal-class-properties": "^7.8.3",
+        "@babel/plugin-proposal-decorators": "^7.8.3",
+        "@babel/plugin-syntax-dynamic-import": "^7.8.3",
+        "@babel/plugin-syntax-jsx": "^7.8.3",
+        "@babel/plugin-transform-runtime": "^7.11.0",
+        "@babel/preset-env": "^7.11.0",
+        "@babel/runtime": "^7.11.0",
+        "@vue/babel-plugin-jsx": "^1.0.0-0",
+        "@vue/babel-preset-jsx": "^1.1.2",
+        "babel-plugin-dynamic-import-node": "^2.3.3",
+        "core-js": "^3.6.5",
+        "core-js-compat": "^3.6.5",
+        "semver": "^6.1.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
       }
     },
     "@vue/babel-preset-jsx": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.1.2.tgz",
-      "integrity": "sha1-LhaetMIE6jfKZsLqhaiAv8mdTyA=",
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-preset-jsx/download/@vue/babel-preset-jsx-1.2.4.tgz?cache=0&sync_timestamp=1603806927648&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-preset-jsx%2Fdownload%2F%40vue%2Fbabel-preset-jsx-1.2.4.tgz",
+      "integrity": "sha1-kv6nnbbxOwHoDToAmeKSS9y+Toc=",
+      "dev": true,
+      "requires": {
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
+        "@vue/babel-sugar-composition-api-inject-h": "^1.2.1",
+        "@vue/babel-sugar-composition-api-render-instance": "^1.2.4",
+        "@vue/babel-sugar-functional-vue": "^1.2.2",
+        "@vue/babel-sugar-inject-h": "^1.2.2",
+        "@vue/babel-sugar-v-model": "^1.2.3",
+        "@vue/babel-sugar-v-on": "^1.2.3"
+      }
+    },
+    "@vue/babel-sugar-composition-api-inject-h": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-inject-h/download/@vue/babel-sugar-composition-api-inject-h-1.2.1.tgz?cache=0&sync_timestamp=1602851113182&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-composition-api-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-composition-api-inject-h-1.2.1.tgz",
+      "integrity": "sha1-BdbgxDJxDjdYKyvppgSbaJtvA+s=",
+      "dev": true,
+      "requires": {
+        "@babel/plugin-syntax-jsx": "^7.2.0"
+      }
+    },
+    "@vue/babel-sugar-composition-api-render-instance": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-composition-api-render-instance/download/@vue/babel-sugar-composition-api-render-instance-1.2.4.tgz?cache=0&sync_timestamp=1603806850559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-composition-api-render-instance%2Fdownload%2F%40vue%2Fbabel-sugar-composition-api-render-instance-1.2.4.tgz",
+      "integrity": "sha1-5MvGmXw0T6wnF4WteikyXFHWjRk=",
       "dev": true,
       "requires": {
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.1.2",
-        "@vue/babel-sugar-functional-vue": "^1.1.2",
-        "@vue/babel-sugar-inject-h": "^1.1.2",
-        "@vue/babel-sugar-v-model": "^1.1.2",
-        "@vue/babel-sugar-v-on": "^1.1.2"
+        "@babel/plugin-syntax-jsx": "^7.2.0"
       }
     },
     "@vue/babel-sugar-functional-vue": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.1.2.tgz",
-      "integrity": "sha1-9+JPugnm8e5wEEVgqICAV1VfGpo=",
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-functional-vue/download/@vue/babel-sugar-functional-vue-1.2.2.tgz?cache=0&sync_timestamp=1602929973472&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-functional-vue%2Fdownload%2F%40vue%2Fbabel-sugar-functional-vue-1.2.2.tgz",
+      "integrity": "sha1-JnqayNeHyW7b8Dzj85LEnam9Jlg=",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0"
       }
     },
     "@vue/babel-sugar-inject-h": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.1.2.tgz",
-      "integrity": "sha1-ilJ2ttji7Rb/yAeKrZQjYnTm7fA=",
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-inject-h/download/@vue/babel-sugar-inject-h-1.2.2.tgz?cache=0&sync_timestamp=1602929885089&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fbabel-sugar-inject-h%2Fdownload%2F%40vue%2Fbabel-sugar-inject-h-1.2.2.tgz",
+      "integrity": "sha1-1zjTyJM2fshJHcu2abAAkZKT46o=",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0"
       }
     },
     "@vue/babel-sugar-v-model": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.1.2.tgz",
-      "integrity": "sha1-H/b9G4ACI/ycsehNzrXlLXN6gZI=",
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-model/download/@vue/babel-sugar-v-model-1.2.3.tgz",
+      "integrity": "sha1-+h8pulHr8KoabDX6ZtU5vEWaGPI=",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-helper-vue-jsx-merge-props": "^1.0.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.1.2",
+        "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
         "camelcase": "^5.0.0",
         "html-tags": "^2.0.0",
         "svg-tags": "^1.0.0"
@@ -1196,17 +1632,23 @@
           "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz",
           "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
           "dev": true
+        },
+        "html-tags": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
+          "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
+          "dev": true
         }
       }
     },
     "@vue/babel-sugar-v-on": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.1.2.tgz",
-      "integrity": "sha1-su+ZuPL6sJ++rSWq1w70Lhz1sTs=",
+      "version": "1.2.3",
+      "resolved": "https://registry.npm.taobao.org/@vue/babel-sugar-v-on/download/@vue/babel-sugar-v-on-1.2.3.tgz",
+      "integrity": "sha1-NCNnF4WGpp85LwS/ujICHQKROto=",
       "dev": true,
       "requires": {
         "@babel/plugin-syntax-jsx": "^7.2.0",
-        "@vue/babel-plugin-transform-vue-jsx": "^1.1.2",
+        "@vue/babel-plugin-transform-vue-jsx": "^1.2.1",
         "camelcase": "^5.0.0"
       },
       "dependencies": {
@@ -1219,364 +1661,300 @@
       }
     },
     "@vue/cli-overlay": {
-      "version": "3.12.1",
-      "resolved": "https://registry.npm.taobao.org/@vue/cli-overlay/download/@vue/cli-overlay-3.12.1.tgz",
-      "integrity": "sha1-vf3o9xI1YasG5OTGC4VMxQkvWrE=",
+      "version": "4.5.9",
+      "resolved": "https://registry.npm.taobao.org/@vue/cli-overlay/download/@vue/cli-overlay-4.5.9.tgz?cache=0&sync_timestamp=1607995708025&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-overlay%2Fdownload%2F%40vue%2Fcli-overlay-4.5.9.tgz",
+      "integrity": "sha1-OTQYttXq+GOPWZyTnLQlg4JX03w=",
       "dev": true
     },
     "@vue/cli-plugin-babel": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-3.5.3.tgz",
-      "integrity": "sha1-bo3o9gkEvMGITb4Q7g1hfd2TrwQ=",
+      "version": "4.5.9",
+      "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-babel/download/@vue/cli-plugin-babel-4.5.9.tgz?cache=0&sync_timestamp=1607993492631&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-babel%2Fdownload%2F%40vue%2Fcli-plugin-babel-4.5.9.tgz",
+      "integrity": "sha1-oJmHVL3QjthAKnvvSU7LFs7hfpI=",
       "dev": true,
       "requires": {
-        "@babel/core": "^7.0.0",
-        "@vue/babel-preset-app": "^3.5.3",
-        "@vue/cli-shared-utils": "^3.5.1",
-        "babel-loader": "^8.0.5",
-        "webpack": ">=4 < 4.29"
+        "@babel/core": "^7.11.0",
+        "@vue/babel-preset-app": "^4.5.9",
+        "@vue/cli-shared-utils": "^4.5.9",
+        "babel-loader": "^8.1.0",
+        "cache-loader": "^4.1.0",
+        "thread-loader": "^2.1.3",
+        "webpack": "^4.0.0"
       }
     },
     "@vue/cli-plugin-eslint": {
-      "version": "3.12.1",
-      "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-3.12.1.tgz",
-      "integrity": "sha1-MCxGOGfzjnkLuZbq/fcVnHgtyM8=",
+      "version": "4.5.9",
+      "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-eslint/download/@vue/cli-plugin-eslint-4.5.9.tgz?cache=0&sync_timestamp=1607995816126&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-eslint%2Fdownload%2F%40vue%2Fcli-plugin-eslint-4.5.9.tgz",
+      "integrity": "sha1-fX+KSLjnPmsZ/i9Us5x4hQqasz0=",
       "dev": true,
       "requires": {
-        "@vue/cli-shared-utils": "^3.12.1",
-        "babel-eslint": "^10.0.1",
-        "eslint": "^4.19.1",
-        "eslint-loader": "^2.1.2",
-        "eslint-plugin-vue": "^4.7.1",
+        "@vue/cli-shared-utils": "^4.5.9",
+        "eslint-loader": "^2.2.1",
         "globby": "^9.2.0",
+        "inquirer": "^7.1.0",
         "webpack": "^4.0.0",
         "yorkie": "^2.0.0"
-      },
-      "dependencies": {
-        "ajv": {
-          "version": "5.5.2",
-          "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz?cache=0&sync_timestamp=1582379612319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-5.5.2.tgz",
-          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "co": "^4.6.0",
-            "fast-deep-equal": "^1.0.0",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.3.0"
-          }
-        },
-        "eslint": {
-          "version": "4.19.1",
-          "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-4.19.1.tgz",
-          "integrity": "sha1-MtHWU+HZBAiFS/spbwdux+GGowA=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ajv": "^5.3.0",
-            "babel-code-frame": "^6.22.0",
-            "chalk": "^2.1.0",
-            "concat-stream": "^1.6.0",
-            "cross-spawn": "^5.1.0",
-            "debug": "^3.1.0",
-            "doctrine": "^2.1.0",
-            "eslint-scope": "^3.7.1",
-            "eslint-visitor-keys": "^1.0.0",
-            "espree": "^3.5.4",
-            "esquery": "^1.0.0",
-            "esutils": "^2.0.2",
-            "file-entry-cache": "^2.0.0",
-            "functional-red-black-tree": "^1.0.1",
-            "glob": "^7.1.2",
-            "globals": "^11.0.1",
-            "ignore": "^3.3.3",
-            "imurmurhash": "^0.1.4",
-            "inquirer": "^3.0.6",
-            "is-resolvable": "^1.0.0",
-            "js-yaml": "^3.9.1",
-            "json-stable-stringify-without-jsonify": "^1.0.1",
-            "levn": "^0.3.0",
-            "lodash": "^4.17.4",
-            "minimatch": "^3.0.2",
-            "mkdirp": "^0.5.1",
-            "natural-compare": "^1.4.0",
-            "optionator": "^0.8.2",
-            "path-is-inside": "^1.0.2",
-            "pluralize": "^7.0.0",
-            "progress": "^2.0.0",
-            "regexpp": "^1.0.1",
-            "require-uncached": "^1.0.3",
-            "semver": "^5.3.0",
-            "strip-ansi": "^4.0.0",
-            "strip-json-comments": "~2.0.1",
-            "table": "4.0.2",
-            "text-table": "~0.2.0"
-          }
-        },
-        "eslint-plugin-vue": {
-          "version": "4.7.1",
-          "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-4.7.1.tgz?cache=0&sync_timestamp=1583662392429&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-4.7.1.tgz",
-          "integrity": "sha1-yCm5/GJYLBiXtaC5Sv1E7MpRHmM=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "vue-eslint-parser": "^2.0.3"
-          }
-        },
-        "eslint-scope": {
-          "version": "3.7.3",
-          "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-3.7.3.tgz",
-          "integrity": "sha1-u1ByANPRf2AkdjYWC0gmKEsQhTU=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "esrecurse": "^4.1.0",
-            "estraverse": "^4.1.1"
-          }
-        },
-        "fast-deep-equal": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz?cache=0&sync_timestamp=1575383928809&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-1.1.0.tgz",
-          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
-          "dev": true,
-          "optional": true
-        },
-        "json-schema-traverse": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz",
-          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
-          "dev": true,
-          "optional": true
-        },
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        }
       }
     },
-    "@vue/cli-plugin-unit-jest": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-unit-jest/download/@vue/cli-plugin-unit-jest-3.5.3.tgz",
-      "integrity": "sha1-0R8Iedc/brcS30UHLZRw2Kh9CeU=",
+    "@vue/cli-plugin-router": {
+      "version": "4.5.9",
+      "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-router/download/@vue/cli-plugin-router-4.5.9.tgz?cache=0&sync_timestamp=1607994046816&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-router%2Fdownload%2F%40vue%2Fcli-plugin-router-4.5.9.tgz",
+      "integrity": "sha1-s9I6gIPSaoG9Cb+cjQEKPk5LE9A=",
       "dev": true,
       "requires": {
-        "@vue/cli-shared-utils": "^3.5.1",
-        "babel-jest": "^23.6.0",
-        "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2",
-        "jest": "^23.6.0",
-        "jest-serializer-vue": "^2.0.2",
-        "jest-transform-stub": "^2.0.0",
-        "vue-jest": "^3.0.3"
+        "@vue/cli-shared-utils": "^4.5.9"
       }
     },
+    "@vue/cli-plugin-vuex": {
+      "version": "4.5.9",
+      "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.9.tgz",
+      "integrity": "sha1-WujxUAx+KUBrAvrILM6uq4bB6Do=",
+      "dev": true
+    },
     "@vue/cli-service": {
-      "version": "3.5.3",
-      "resolved": "https://registry.npm.taobao.org/@vue/cli-service/download/@vue/cli-service-3.5.3.tgz",
-      "integrity": "sha1-B5sJBlrWWXIRkGxlwStYYgkmN/I=",
+      "version": "4.5.9",
+      "resolved": "https://registry.npm.taobao.org/@vue/cli-service/download/@vue/cli-service-4.5.9.tgz?cache=0&sync_timestamp=1607994273937&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-service%2Fdownload%2F%40vue%2Fcli-service-4.5.9.tgz",
+      "integrity": "sha1-PKMRKkQYPKrOQR1R0LamFuLhl7E=",
       "dev": true,
       "requires": {
         "@intervolga/optimize-cssnano-plugin": "^1.0.5",
         "@soda/friendly-errors-webpack-plugin": "^1.7.1",
-        "@vue/cli-overlay": "^3.5.1",
-        "@vue/cli-shared-utils": "^3.5.1",
-        "@vue/component-compiler-utils": "^2.6.0",
+        "@soda/get-current-script": "^1.0.0",
+        "@types/minimist": "^1.2.0",
+        "@types/webpack": "^4.0.0",
+        "@types/webpack-dev-server": "^3.11.0",
+        "@vue/cli-overlay": "^4.5.9",
+        "@vue/cli-plugin-router": "^4.5.9",
+        "@vue/cli-plugin-vuex": "^4.5.9",
+        "@vue/cli-shared-utils": "^4.5.9",
+        "@vue/component-compiler-utils": "^3.1.2",
         "@vue/preload-webpack-plugin": "^1.1.0",
         "@vue/web-component-wrapper": "^1.2.0",
-        "acorn": "^6.1.0",
-        "acorn-walk": "^6.1.1",
-        "address": "^1.0.3",
-        "autoprefixer": "^9.4.8",
-        "cache-loader": "^2.0.1",
-        "case-sensitive-paths-webpack-plugin": "^2.2.0",
-        "chalk": "^2.4.2",
-        "clipboardy": "^1.2.3",
-        "cliui": "^4.1.0",
-        "copy-webpack-plugin": "^4.6.0",
+        "acorn": "^7.4.0",
+        "acorn-walk": "^7.1.1",
+        "address": "^1.1.2",
+        "autoprefixer": "^9.8.6",
+        "browserslist": "^4.12.0",
+        "cache-loader": "^4.1.0",
+        "case-sensitive-paths-webpack-plugin": "^2.3.0",
+        "cli-highlight": "^2.1.4",
+        "clipboardy": "^2.3.0",
+        "cliui": "^6.0.0",
+        "copy-webpack-plugin": "^5.1.1",
+        "css-loader": "^3.5.3",
         "cssnano": "^4.1.10",
         "debug": "^4.1.1",
-        "dotenv": "^6.2.0",
-        "dotenv-expand": "^4.2.0",
-        "escape-string-regexp": "^1.0.5",
-        "file-loader": "^3.0.1",
+        "default-gateway": "^5.0.5",
+        "dotenv": "^8.2.0",
+        "dotenv-expand": "^5.1.0",
+        "file-loader": "^4.2.0",
         "fs-extra": "^7.0.1",
-        "globby": "^9.0.0",
-        "hash-sum": "^1.0.2",
+        "globby": "^9.2.0",
+        "hash-sum": "^2.0.0",
         "html-webpack-plugin": "^3.2.0",
         "launch-editor-middleware": "^2.2.1",
-        "lodash.defaultsdeep": "^4.6.0",
+        "lodash.defaultsdeep": "^4.6.1",
         "lodash.mapvalues": "^4.6.0",
         "lodash.transform": "^4.6.0",
-        "mini-css-extract-plugin": "^0.5.0",
-        "minimist": "^1.2.0",
-        "ora": "^3.1.0",
-        "portfinder": "^1.0.20",
+        "mini-css-extract-plugin": "^0.9.0",
+        "minimist": "^1.2.5",
+        "pnp-webpack-plugin": "^1.6.4",
+        "portfinder": "^1.0.26",
         "postcss-loader": "^3.0.0",
-        "read-pkg": "^4.0.1",
-        "semver": "^5.6.0",
-        "slash": "^2.0.0",
-        "source-map-url": "^0.4.0",
-        "ssri": "^6.0.1",
-        "string.prototype.padend": "^3.0.0",
-        "terser-webpack-plugin": "^1.2.2",
-        "thread-loader": "^2.1.2",
-        "url-loader": "^1.1.2",
-        "vue-loader": "^15.6.4",
-        "webpack": ">=4 < 4.29",
-        "webpack-bundle-analyzer": "^3.0.4",
-        "webpack-chain": "^4.11.0",
-        "webpack-dev-server": "^3.2.0",
-        "webpack-merge": "^4.2.1",
-        "yorkie": "^2.0.0"
+        "ssri": "^7.1.0",
+        "terser-webpack-plugin": "^2.3.6",
+        "thread-loader": "^2.1.3",
+        "url-loader": "^2.2.0",
+        "vue-loader": "^15.9.2",
+        "vue-loader-v16": "npm:vue-loader@^16.0.0-beta.7",
+        "vue-style-loader": "^4.1.2",
+        "webpack": "^4.0.0",
+        "webpack-bundle-analyzer": "^3.8.0",
+        "webpack-chain": "^6.4.0",
+        "webpack-dev-server": "^3.11.0",
+        "webpack-merge": "^4.2.2"
       },
       "dependencies": {
         "acorn": {
-          "version": "6.4.1",
-          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1583823913618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz",
-          "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=",
+          "version": "7.4.1",
+          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1602534280466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
         },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
+        "cacache": {
+          "version": "13.0.1",
+          "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-13.0.1.tgz?cache=0&sync_timestamp=1594428108619&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-13.0.1.tgz",
+          "integrity": "sha1-qAAMIWlwiQgvhSh6GuxuOCAkpxw=",
+          "dev": true,
+          "requires": {
+            "chownr": "^1.1.2",
+            "figgy-pudding": "^3.5.1",
+            "fs-minipass": "^2.0.0",
+            "glob": "^7.1.4",
+            "graceful-fs": "^4.2.2",
+            "infer-owner": "^1.0.4",
+            "lru-cache": "^5.1.1",
+            "minipass": "^3.0.0",
+            "minipass-collect": "^1.0.2",
+            "minipass-flush": "^1.0.5",
+            "minipass-pipeline": "^1.2.2",
+            "mkdirp": "^0.5.1",
+            "move-concurrently": "^1.0.1",
+            "p-map": "^3.0.0",
+            "promise-inflight": "^1.0.1",
+            "rimraf": "^2.7.1",
+            "ssri": "^7.0.0",
+            "unique-filename": "^1.1.1"
           }
         },
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
           "dev": true
         },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        },
-        "parse-json": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz",
-          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+        "ssri": {
+          "version": "7.1.0",
+          "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-7.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-7.1.0.tgz",
+          "integrity": "sha1-ksJBv23oI2W1x/tL126XVSLhKU0=",
           "dev": true,
           "requires": {
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
+            "figgy-pudding": "^3.5.1",
+            "minipass": "^3.1.1"
           }
         },
-        "read-pkg": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-4.0.1.tgz",
-          "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
+        "terser-webpack-plugin": {
+          "version": "2.3.8",
+          "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-2.3.8.tgz?cache=0&sync_timestamp=1603881839307&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-2.3.8.tgz",
+          "integrity": "sha1-iUdkoZsHQ/L3BOfCqEjFKDppZyQ=",
           "dev": true,
           "requires": {
-            "normalize-package-data": "^2.3.2",
-            "parse-json": "^4.0.0",
-            "pify": "^3.0.0"
+            "cacache": "^13.0.1",
+            "find-cache-dir": "^3.3.1",
+            "jest-worker": "^25.4.0",
+            "p-limit": "^2.3.0",
+            "schema-utils": "^2.6.6",
+            "serialize-javascript": "^4.0.0",
+            "source-map": "^0.6.1",
+            "terser": "^4.6.12",
+            "webpack-sources": "^1.4.3"
           }
         }
       }
     },
     "@vue/cli-shared-utils": {
-      "version": "3.12.1",
-      "resolved": "https://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-3.12.1.tgz",
-      "integrity": "sha1-vPB2KH3a3uu7l8anSN/p/1DsjfA=",
+      "version": "4.5.9",
+      "resolved": "https://registry.npm.taobao.org/@vue/cli-shared-utils/download/@vue/cli-shared-utils-4.5.9.tgz?cache=0&sync_timestamp=1607992019644&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-shared-utils%2Fdownload%2F%40vue%2Fcli-shared-utils-4.5.9.tgz",
+      "integrity": "sha1-SHzqS0KC9N/5B+59iruo3Q3QPM0=",
       "dev": true,
       "requires": {
         "@hapi/joi": "^15.0.1",
-        "chalk": "^2.4.1",
+        "chalk": "^2.4.2",
         "execa": "^1.0.0",
         "launch-editor": "^2.2.1",
         "lru-cache": "^5.1.1",
         "node-ipc": "^9.1.1",
         "open": "^6.3.0",
         "ora": "^3.4.0",
-        "request": "^2.87.0",
-        "request-promise-native": "^1.0.7",
-        "semver": "^6.0.0",
-        "string.prototype.padstart": "^3.0.0"
+        "read-pkg": "^5.1.1",
+        "request": "^2.88.2",
+        "semver": "^6.1.0",
+        "strip-ansi": "^6.0.0"
       },
       "dependencies": {
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz",
-          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          },
-          "dependencies": {
-            "semver": {
-              "version": "5.7.1",
-              "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz",
-              "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
-              "dev": true
-            }
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
-          "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
-          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "lru-cache": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz",
-          "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
-          "dev": true,
-          "requires": {
-            "yallist": "^3.0.2"
-          }
-        },
         "semver": {
           "version": "6.3.0",
-          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
           "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
           "dev": true
+        }
+      }
+    },
+    "@vue/compiler-core": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/compiler-core/download/@vue/compiler-core-3.0.5.tgz",
+      "integrity": "sha1-puVMq+lTbnTGUTrNJknzEa8dQ6w=",
+      "dev": true,
+      "requires": {
+        "@babel/parser": "^7.12.0",
+        "@babel/types": "^7.12.0",
+        "@vue/shared": "3.0.5",
+        "estree-walker": "^2.0.1",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
+      }
+    },
+    "@vue/compiler-dom": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/compiler-dom/download/@vue/compiler-dom-3.0.5.tgz",
+      "integrity": "sha1-eIWhPm0Y9k3ejrzuwFLtLBAmlsI=",
+      "dev": true,
+      "requires": {
+        "@vue/compiler-core": "3.0.5",
+        "@vue/shared": "3.0.5"
+      }
+    },
+    "@vue/compiler-sfc": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/compiler-sfc/download/@vue/compiler-sfc-3.0.5.tgz",
+      "integrity": "sha1-OuCOYCRKcvr5WYNhh0+3vbWx03w=",
+      "dev": true,
+      "requires": {
+        "@babel/parser": "^7.12.0",
+        "@babel/types": "^7.12.0",
+        "@vue/compiler-core": "3.0.5",
+        "@vue/compiler-dom": "3.0.5",
+        "@vue/compiler-ssr": "3.0.5",
+        "@vue/shared": "3.0.5",
+        "consolidate": "^0.16.0",
+        "estree-walker": "^2.0.1",
+        "hash-sum": "^2.0.0",
+        "lru-cache": "^5.1.1",
+        "magic-string": "^0.25.7",
+        "merge-source-map": "^1.1.0",
+        "postcss": "^7.0.32",
+        "postcss-modules": "^3.2.2",
+        "postcss-selector-parser": "^6.0.4",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "consolidate": {
+          "version": "0.16.0",
+          "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.16.0.tgz?cache=0&sync_timestamp=1599596863404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.16.0.tgz",
+          "integrity": "sha1-oRhkdokw8vGUMWYKZZBmaPX73BY=",
+          "dev": true,
+          "requires": {
+            "bluebird": "^3.7.2"
+          }
         },
-        "yallist": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz",
-          "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=",
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
           "dev": true
         }
       }
     },
+    "@vue/compiler-ssr": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/compiler-ssr/download/@vue/compiler-ssr-3.0.5.tgz",
+      "integrity": "sha1-dmGtiRoL6UhybH960eQlJTxYe4M=",
+      "dev": true,
+      "requires": {
+        "@vue/compiler-dom": "3.0.5",
+        "@vue/shared": "3.0.5"
+      }
+    },
     "@vue/component-compiler-utils": {
-      "version": "2.6.0",
-      "resolved": "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-2.6.0.tgz",
-      "integrity": "sha1-qkbSpvdkdECwuJMkNNIvEjceVDs=",
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.2.0.tgz",
+      "integrity": "sha1-j4UYLO7Sjps8dTE95mn4MWbRHl0=",
       "dev": true,
       "requires": {
         "consolidate": "^0.15.1",
@@ -1584,68 +1962,111 @@
         "lru-cache": "^4.1.2",
         "merge-source-map": "^1.1.0",
         "postcss": "^7.0.14",
-        "postcss-selector-parser": "^5.0.0",
-        "prettier": "1.16.3",
+        "postcss-selector-parser": "^6.0.2",
+        "prettier": "^1.18.2",
         "source-map": "~0.6.1",
         "vue-template-es2015-compiler": "^1.9.0"
       },
       "dependencies": {
-        "cssesc": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-2.0.0.tgz",
-          "integrity": "sha1-OxO9G7HLNuG8taTc0n9UxdyzVwM=",
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
           "dev": true
         },
-        "postcss-selector-parser": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-5.0.0.tgz",
-          "integrity": "sha1-JJBENWaXsztk8aj3yAki3d7nGVw=",
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427573763&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz",
+          "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
           "dev": true,
           "requires": {
-            "cssesc": "^2.0.0",
-            "indexes-of": "^1.0.1",
-            "uniq": "^1.0.1"
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
           }
         },
-        "prettier": {
-          "version": "1.16.3",
-          "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.3.tgz",
-          "integrity": "sha512-kn/GU6SMRYPxUakNXhpP0EedT/KmaPzr0H5lIsDogrykbaxOpOfAFfk5XA7DZrJyMAv1wlMV3CPcZruGXVVUZw==",
-          "dev": true
-        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
           "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
           "dev": true
+        },
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
         }
       }
     },
     "@vue/eslint-config-prettier": {
       "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz",
-      "integrity": "sha512-wFQmv45c3ige5EA+ngijq40YpVcIkAy0Lihupnsnd1Dao5CBbPyfCzqtejFLZX1EwH/kCJdpz3t6s+5wd3+KxQ==",
+      "resolved": "https://registry.npm.taobao.org/@vue/eslint-config-prettier/download/@vue/eslint-config-prettier-6.0.0.tgz",
+      "integrity": "sha1-rVkSswj0rkaEWOAqKwXbC50kZwA=",
       "dev": true,
       "requires": {
         "eslint-config-prettier": "^6.0.0"
       }
     },
     "@vue/preload-webpack-plugin": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.1.tgz",
-      "integrity": "sha1-GHI1MNME9EMCHaIpLW7JUCgmEEo=",
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz",
+      "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
       "dev": true
     },
-    "@vue/test-utils": {
-      "version": "1.0.0-beta.29",
-      "resolved": "https://registry.npm.taobao.org/@vue/test-utils/download/@vue/test-utils-1.0.0-beta.29.tgz?cache=0&sync_timestamp=1583751388817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Ftest-utils%2Fdownload%2F%40vue%2Ftest-utils-1.0.0-beta.29.tgz",
-      "integrity": "sha1-yULPJeiRzwgbagMzK0rh70MHJvA=",
-      "dev": true,
+    "@vue/reactivity": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/reactivity/download/@vue/reactivity-3.0.5.tgz",
+      "integrity": "sha1-43ieTVI9hF+a4LTXcOK0VZR0L9I=",
+      "requires": {
+        "@vue/shared": "3.0.5"
+      },
+      "dependencies": {
+        "@vue/shared": {
+          "version": "3.0.5",
+          "resolved": "https://registry.npm.taobao.org/@vue/shared/download/@vue/shared-3.0.5.tgz",
+          "integrity": "sha1-wTHYi9ZxPMTZOzuxNy7bGYMiX/A="
+        }
+      }
+    },
+    "@vue/runtime-core": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/runtime-core/download/@vue/runtime-core-3.0.5.tgz",
+      "integrity": "sha1-2mMx1fMA1XlOng69yKi9cqnhmWI=",
+      "requires": {
+        "@vue/reactivity": "3.0.5",
+        "@vue/shared": "3.0.5"
+      },
+      "dependencies": {
+        "@vue/shared": {
+          "version": "3.0.5",
+          "resolved": "https://registry.npm.taobao.org/@vue/shared/download/@vue/shared-3.0.5.tgz",
+          "integrity": "sha1-wTHYi9ZxPMTZOzuxNy7bGYMiX/A="
+        }
+      }
+    },
+    "@vue/runtime-dom": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/runtime-dom/download/@vue/runtime-dom-3.0.5.tgz",
+      "integrity": "sha1-HOLJxEniarBpY9oAZAluiCp6iTU=",
       "requires": {
-        "dom-event-types": "^1.0.0",
-        "lodash": "^4.17.4"
+        "@vue/runtime-core": "3.0.5",
+        "@vue/shared": "3.0.5",
+        "csstype": "^2.6.8"
+      },
+      "dependencies": {
+        "@vue/shared": {
+          "version": "3.0.5",
+          "resolved": "https://registry.npm.taobao.org/@vue/shared/download/@vue/shared-3.0.5.tgz",
+          "integrity": "sha1-wTHYi9ZxPMTZOzuxNy7bGYMiX/A="
+        }
       }
     },
+    "@vue/shared": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/@vue/shared/download/@vue/shared-3.0.5.tgz",
+      "integrity": "sha1-wTHYi9ZxPMTZOzuxNy7bGYMiX/A=",
+      "dev": true
+    },
     "@vue/web-component-wrapper": {
       "version": "1.2.0",
       "resolved": "https://registry.npm.taobao.org/@vue/web-component-wrapper/download/@vue/web-component-wrapper-1.2.0.tgz",
@@ -1653,175 +2074,178 @@
       "dev": true
     },
     "@webassemblyjs/ast": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.7.11.tgz?cache=0&sync_timestamp=1580600103531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fast%2Fdownload%2F%40webassemblyjs%2Fast-1.7.11.tgz",
-      "integrity": "sha1-uYhYLK+7Kwlei1VlJvMMkNBXys4=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ast/download/@webassemblyjs/ast-1.9.0.tgz",
+      "integrity": "sha1-vYUGBLQEJFmlpBzX0zjL7Wle2WQ=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/helper-module-context": "1.7.11",
-        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-        "@webassemblyjs/wast-parser": "1.7.11"
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0"
       }
     },
     "@webassemblyjs/floating-point-hex-parser": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.7.11.tgz?cache=0&sync_timestamp=1580600093212&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Ffloating-point-hex-parser%2Fdownload%2F%40webassemblyjs%2Ffloating-point-hex-parser-1.7.11.tgz",
-      "integrity": "sha1-pp8K9lAuuaPARVVbGmEp09Py4xM=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/floating-point-hex-parser/download/@webassemblyjs/floating-point-hex-parser-1.9.0.tgz",
+      "integrity": "sha1-PD07Jxvd/ITesA9xNEQ4MR1S/7Q=",
       "dev": true
     },
     "@webassemblyjs/helper-api-error": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.7.11.tgz?cache=0&sync_timestamp=1580600095518&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-api-error%2Fdownload%2F%40webassemblyjs%2Fhelper-api-error-1.7.11.tgz",
-      "integrity": "sha1-x7a7gQX4QDlRGis5zklPGTgYoyo=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-api-error/download/@webassemblyjs/helper-api-error-1.9.0.tgz",
+      "integrity": "sha1-ID9nbjM7lsnaLuqzzO8zxFkotqI=",
       "dev": true
     },
     "@webassemblyjs/helper-buffer": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.7.11.tgz?cache=0&sync_timestamp=1580600094393&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-buffer%2Fdownload%2F%40webassemblyjs%2Fhelper-buffer-1.7.11.tgz",
-      "integrity": "sha1-MSLUjcxslFbtmC3r4WyPNxAd85s=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-buffer/download/@webassemblyjs/helper-buffer-1.9.0.tgz",
+      "integrity": "sha1-oUQtJpxf6yP8vJ73WdrDVH8p3gA=",
       "dev": true
     },
     "@webassemblyjs/helper-code-frame": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.7.11.tgz?cache=0&sync_timestamp=1580600150532&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-code-frame%2Fdownload%2F%40webassemblyjs%2Fhelper-code-frame-1.7.11.tgz",
-      "integrity": "sha1-z48QbnRmYqDaKb3vY1/NPRJINks=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-code-frame/download/@webassemblyjs/helper-code-frame-1.9.0.tgz",
+      "integrity": "sha1-ZH+Iks0gQ6gqwMjF51w28dkVnyc=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/wast-printer": "1.7.11"
+        "@webassemblyjs/wast-printer": "1.9.0"
       }
     },
     "@webassemblyjs/helper-fsm": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.7.11.tgz?cache=0&sync_timestamp=1580600091792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-fsm%2Fdownload%2F%40webassemblyjs%2Fhelper-fsm-1.7.11.tgz",
-      "integrity": "sha1-3ziIKmJAgNA/dQP5Pj8XrFrAEYE=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-fsm/download/@webassemblyjs/helper-fsm-1.9.0.tgz",
+      "integrity": "sha1-wFJWtxJEIUZx9LCOwQitY7cO3bg=",
       "dev": true
     },
     "@webassemblyjs/helper-module-context": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.7.11.tgz?cache=0&sync_timestamp=1580600151060&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-module-context%2Fdownload%2F%40webassemblyjs%2Fhelper-module-context-1.7.11.tgz",
-      "integrity": "sha1-2HTXIuUeYqwgJHaTXWScgC+g4gk=",
-      "dev": true
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-module-context/download/@webassemblyjs/helper-module-context-1.9.0.tgz",
+      "integrity": "sha1-JdiIS3aDmHGgimxvgGw5ee9xLwc=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0"
+      }
     },
     "@webassemblyjs/helper-wasm-bytecode": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.7.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fhelper-wasm-bytecode%2Fdownload%2F%40webassemblyjs%2Fhelper-wasm-bytecode-1.7.11.tgz",
-      "integrity": "sha1-3ZoegX8cLrEFtM8QEwk8ufPJywY=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-bytecode/download/@webassemblyjs/helper-wasm-bytecode-1.9.0.tgz",
+      "integrity": "sha1-T+2L6sm4wU+MWLcNEk1UndH+V5A=",
       "dev": true
     },
     "@webassemblyjs/helper-wasm-section": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.7.11.tgz",
-      "integrity": "sha1-nJrEHs+fvP/8lvbSZ14t4zgR5oo=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/helper-wasm-section/download/@webassemblyjs/helper-wasm-section-1.9.0.tgz",
+      "integrity": "sha1-WkE41aYpK6GLBMWuSXF+QWeWU0Y=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/helper-buffer": "1.7.11",
-        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-        "@webassemblyjs/wasm-gen": "1.7.11"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0"
       }
     },
     "@webassemblyjs/ieee754": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.7.11.tgz",
-      "integrity": "sha1-yVg562N1ejGICq7HtlEtQZGsZAs=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/ieee754/download/@webassemblyjs/ieee754-1.9.0.tgz",
+      "integrity": "sha1-Fceg+6roP7JhQ7us9tbfFwKtOeQ=",
       "dev": true,
       "requires": {
         "@xtuc/ieee754": "^1.2.0"
       }
     },
     "@webassemblyjs/leb128": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.7.11.tgz?cache=0&sync_timestamp=1580600096686&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fleb128%2Fdownload%2F%40webassemblyjs%2Fleb128-1.7.11.tgz",
-      "integrity": "sha1-1yZ6HunEWU/T9+NymIGOxlaH22M=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/leb128/download/@webassemblyjs/leb128-1.9.0.tgz",
+      "integrity": "sha1-8Zygt2ptxVYjoJz/p2noOPoeHJU=",
       "dev": true,
       "requires": {
-        "@xtuc/long": "4.2.1"
+        "@xtuc/long": "4.2.2"
       }
     },
     "@webassemblyjs/utf8": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.7.11.tgz?cache=0&sync_timestamp=1580600100063&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Futf8%2Fdownload%2F%40webassemblyjs%2Futf8-1.7.11.tgz",
-      "integrity": "sha1-Btchjqn9yUpnk6qSIIFg2z0m7oI=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/utf8/download/@webassemblyjs/utf8-1.9.0.tgz",
+      "integrity": "sha1-BNM7Y2945qaBMifoJAL3Y3tiKas=",
       "dev": true
     },
     "@webassemblyjs/wasm-edit": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.7.11.tgz?cache=0&sync_timestamp=1580600102353&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-edit%2Fdownload%2F%40webassemblyjs%2Fwasm-edit-1.7.11.tgz",
-      "integrity": "sha1-jHTKR01PlR0B266b1wgU7iKoIAU=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-edit/download/@webassemblyjs/wasm-edit-1.9.0.tgz",
+      "integrity": "sha1-P+bXnT8PkiGDqoYALELdJWz+6c8=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/helper-buffer": "1.7.11",
-        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-        "@webassemblyjs/helper-wasm-section": "1.7.11",
-        "@webassemblyjs/wasm-gen": "1.7.11",
-        "@webassemblyjs/wasm-opt": "1.7.11",
-        "@webassemblyjs/wasm-parser": "1.7.11",
-        "@webassemblyjs/wast-printer": "1.7.11"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/helper-wasm-section": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-opt": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "@webassemblyjs/wast-printer": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-gen": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.7.11.tgz?cache=0&sync_timestamp=1580600104620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-gen%2Fdownload%2F%40webassemblyjs%2Fwasm-gen-1.7.11.tgz",
-      "integrity": "sha1-m7upQvIjdWhqb7dZr816ycRdoag=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-gen/download/@webassemblyjs/wasm-gen-1.9.0.tgz",
+      "integrity": "sha1-ULxw7Gje2OJ2OwGhQYv0NJGnpJw=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-        "@webassemblyjs/ieee754": "1.7.11",
-        "@webassemblyjs/leb128": "1.7.11",
-        "@webassemblyjs/utf8": "1.7.11"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-opt": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.7.11.tgz?cache=0&sync_timestamp=1580600101082&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-opt%2Fdownload%2F%40webassemblyjs%2Fwasm-opt-1.7.11.tgz",
-      "integrity": "sha1-szHo5874+OLwB9QsOjagWAp9bKc=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-opt/download/@webassemblyjs/wasm-opt-1.9.0.tgz",
+      "integrity": "sha1-IhEYHlsxMmRDzIES658LkChyGmE=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/helper-buffer": "1.7.11",
-        "@webassemblyjs/wasm-gen": "1.7.11",
-        "@webassemblyjs/wasm-parser": "1.7.11"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-buffer": "1.9.0",
+        "@webassemblyjs/wasm-gen": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0"
       }
     },
     "@webassemblyjs/wasm-parser": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.7.11.tgz?cache=0&sync_timestamp=1580600149379&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwasm-parser%2Fdownload%2F%40webassemblyjs%2Fwasm-parser-1.7.11.tgz",
-      "integrity": "sha1-bj0g+mo1GfawhO+Tka1YIR77Cho=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wasm-parser/download/@webassemblyjs/wasm-parser-1.9.0.tgz",
+      "integrity": "sha1-nUjkSCbfSmWYKUqmyHRp1kL/9l4=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/helper-api-error": "1.7.11",
-        "@webassemblyjs/helper-wasm-bytecode": "1.7.11",
-        "@webassemblyjs/ieee754": "1.7.11",
-        "@webassemblyjs/leb128": "1.7.11",
-        "@webassemblyjs/utf8": "1.7.11"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+        "@webassemblyjs/ieee754": "1.9.0",
+        "@webassemblyjs/leb128": "1.9.0",
+        "@webassemblyjs/utf8": "1.9.0"
       }
     },
     "@webassemblyjs/wast-parser": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.7.11.tgz?cache=0&sync_timestamp=1580600149981&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-parser%2Fdownload%2F%40webassemblyjs%2Fwast-parser-1.7.11.tgz",
-      "integrity": "sha1-Jb0RdWLKjAAnIP+BFu+QctnKhpw=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-parser/download/@webassemblyjs/wast-parser-1.9.0.tgz",
+      "integrity": "sha1-MDERXXmsW9JhVWzsw/qQo+9FGRQ=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/floating-point-hex-parser": "1.7.11",
-        "@webassemblyjs/helper-api-error": "1.7.11",
-        "@webassemblyjs/helper-code-frame": "1.7.11",
-        "@webassemblyjs/helper-fsm": "1.7.11",
-        "@xtuc/long": "4.2.1"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+        "@webassemblyjs/helper-api-error": "1.9.0",
+        "@webassemblyjs/helper-code-frame": "1.9.0",
+        "@webassemblyjs/helper-fsm": "1.9.0",
+        "@xtuc/long": "4.2.2"
       }
     },
     "@webassemblyjs/wast-printer": {
-      "version": "1.7.11",
-      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.7.11.tgz?cache=0&sync_timestamp=1580600105652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40webassemblyjs%2Fwast-printer%2Fdownload%2F%40webassemblyjs%2Fwast-printer-1.7.11.tgz",
-      "integrity": "sha1-xCRbbeJCy1CizJUBdP2/ZceNeBM=",
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/@webassemblyjs/wast-printer/download/@webassemblyjs/wast-printer-1.9.0.tgz",
+      "integrity": "sha1-STXVTIX+9jewDOn1I3dFHQDUeJk=",
       "dev": true,
       "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/wast-parser": "1.7.11",
-        "@xtuc/long": "4.2.1"
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/wast-parser": "1.9.0",
+        "@xtuc/long": "4.2.2"
       }
     },
     "@xtuc/ieee754": {
@@ -1831,26 +2255,9 @@
       "dev": true
     },
     "@xtuc/long": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.1.tgz",
-      "integrity": "sha1-XIXWYvdvodNFdXZsXc1mFavNMNg=",
-      "dev": true
-    },
-    "JSV": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/JSV/download/JSV-4.0.2.tgz",
-      "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c="
-    },
-    "abab": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/abab/download/abab-2.0.3.tgz",
-      "integrity": "sha1-Yj4gdeAustPyR15J+ZyRhGRnkHo=",
-      "dev": true
-    },
-    "abbrev": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/abbrev/download/abbrev-1.1.1.tgz",
-      "integrity": "sha1-+PLIh60Qv2f2NPAFtph/7TF5qsg=",
+      "version": "4.2.2",
+      "resolved": "https://registry.npm.taobao.org/@xtuc/long/download/@xtuc/long-4.2.2.tgz",
+      "integrity": "sha1-0pHGpOl5ibXGHZrPOWrk/hM6cY0=",
       "dev": true
     },
     "accepts": {
@@ -1864,61 +2271,21 @@
       }
     },
     "acorn": {
-      "version": "5.7.4",
-      "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-5.7.4.tgz?cache=0&sync_timestamp=1583823913618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-5.7.4.tgz",
-      "integrity": "sha1-Po2KmUfQWZoXltECJddDL0pKz14=",
+      "version": "6.4.2",
+      "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.2.tgz?cache=0&sync_timestamp=1602534280466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.2.tgz",
+      "integrity": "sha1-NYZv1xBSjpLeEM8GAWSY5H454eY=",
       "dev": true
     },
-    "acorn-dynamic-import": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/acorn-dynamic-import/download/acorn-dynamic-import-3.0.0.tgz",
-      "integrity": "sha1-kBzu5Mf6rvfgetKkfokGddpQong=",
-      "dev": true,
-      "requires": {
-        "acorn": "^5.0.0"
-      }
-    },
-    "acorn-globals": {
-      "version": "4.3.4",
-      "resolved": "https://registry.npm.taobao.org/acorn-globals/download/acorn-globals-4.3.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn-globals%2Fdownload%2Facorn-globals-4.3.4.tgz",
-      "integrity": "sha1-n6GSat3BHJcwjE5m163Q1Awycuc=",
-      "dev": true,
-      "requires": {
-        "acorn": "^6.0.1",
-        "acorn-walk": "^6.0.1"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "6.4.1",
-          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1583823913618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz",
-          "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=",
-          "dev": true
-        }
-      }
-    },
     "acorn-jsx": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-3.0.1.tgz",
-      "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "acorn": "^3.0.4"
-      },
-      "dependencies": {
-        "acorn": {
-          "version": "3.3.0",
-          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-3.3.0.tgz?cache=0&sync_timestamp=1583823913618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-3.3.0.tgz",
-          "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
-          "dev": true,
-          "optional": true
-        }
-      }
+      "version": "5.3.1",
+      "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz",
+      "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=",
+      "dev": true
     },
     "acorn-walk": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-6.2.0.tgz",
-      "integrity": "sha1-Ejy487hMIXHx9/slJhWxx4prGow=",
+      "version": "7.2.0",
+      "resolved": "https://registry.npm.taobao.org/acorn-walk/download/acorn-walk-7.2.0.tgz",
+      "integrity": "sha1-DeiJpgEgOQmw++B7iTjcIdLpZ7w=",
       "dev": true
     },
     "address": {
@@ -1928,18 +2295,27 @@
       "dev": true
     },
     "adler-32": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/adler-32/download/adler-32-1.2.0.tgz",
-      "integrity": "sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=",
+      "version": "1.3.0",
+      "resolved": "https://r2.cnpmjs.org/adler-32/-/adler-32-1.3.0.tgz",
+      "integrity": "sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g==",
       "requires": {
-        "exit-on-epipe": "~1.0.1",
-        "printj": "~1.1.0"
+        "printj": "~1.2.2"
+      }
+    },
+    "aggregate-error": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/aggregate-error/download/aggregate-error-3.1.0.tgz",
+      "integrity": "sha1-kmcP9Q9TWb23o+DUDQ7DDFc3aHo=",
+      "dev": true,
+      "requires": {
+        "clean-stack": "^2.0.0",
+        "indent-string": "^4.0.0"
       }
     },
     "ajv": {
-      "version": "6.12.0",
-      "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.0.tgz?cache=0&sync_timestamp=1582379612319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.0.tgz",
-      "integrity": "sha1-BtYLlth7hFSlrauobnhU2mKdtLc=",
+      "version": "6.12.6",
+      "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.6.tgz?cache=0&sync_timestamp=1608145983865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.6.tgz",
+      "integrity": "sha1-uvWmLoArB9l3A0WG+MO69a3ybfQ=",
       "dev": true,
       "requires": {
         "fast-deep-equal": "^3.1.1",
@@ -1950,14 +2326,15 @@
     },
     "ajv-errors": {
       "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz?cache=0&sync_timestamp=1608064310528&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz",
       "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
       "dev": true
     },
     "ajv-keywords": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.4.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.4.1.tgz",
-      "integrity": "sha1-75FuJxxkrBIXH9g4TqrmsjRYVNo="
+      "version": "3.5.2",
+      "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1608059810829&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz",
+      "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
+      "dev": true
     },
     "alphanum-sort": {
       "version": "1.0.2",
@@ -1965,12 +2342,6 @@
       "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=",
       "dev": true
     },
-    "amdefine": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/amdefine/download/amdefine-1.0.1.tgz",
-      "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
-      "dev": true
-    },
     "ansi-colors": {
       "version": "3.2.4",
       "resolved": "https://registry.npm.taobao.org/ansi-colors/download/ansi-colors-3.2.4.tgz",
@@ -1978,10 +2349,21 @@
       "dev": true
     },
     "ansi-escapes": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-3.2.0.tgz",
-      "integrity": "sha1-h4C5j/nb9WOBUtHx/lwde0RCl2s=",
-      "dev": true
+      "version": "4.3.1",
+      "resolved": "https://registry.npm.taobao.org/ansi-escapes/download/ansi-escapes-4.3.1.tgz",
+      "integrity": "sha1-pcR8xDGB8fOP/XB2g3cA05VSKmE=",
+      "dev": true,
+      "requires": {
+        "type-fest": "^0.11.0"
+      },
+      "dependencies": {
+        "type-fest": {
+          "version": "0.11.0",
+          "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.11.0.tgz?cache=0&sync_timestamp=1606468796224&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.11.0.tgz",
+          "integrity": "sha1-l6vwhyMQ/tiKXEZrJWgVdhReM/E=",
+          "dev": true
+        }
+      }
     },
     "ansi-html": {
       "version": "0.0.7",
@@ -1990,49 +2372,89 @@
       "dev": true
     },
     "ansi-regex": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
-      "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
-    },
-    "ansi-styles": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-1.0.0.tgz",
-      "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg="
-    },
-    "any-observable": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/any-observable/download/any-observable-0.3.0.tgz",
-      "integrity": "sha1-r5M0deWAamfQ198JDdXovvZdEZs=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+      "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
       "dev": true
     },
-    "anymatch": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
-      "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
-      "dev": true,
-      "requires": {
-        "micromatch": "^3.1.4",
-        "normalize-path": "^2.1.1"
-      },
-      "dependencies": {
-        "normalize-path": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-          "dev": true,
+    "ansi-styles": {
+      "version": "3.2.1",
+      "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&sync_timestamp=1606792371412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz",
+      "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+      "dev": true,
+      "requires": {
+        "color-convert": "^1.9.0"
+      }
+    },
+    "ant-design-vue": {
+      "version": "4.0.0-rc.6",
+      "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.0.0-rc.6.tgz",
+      "integrity": "sha512-j+GAhgC1p1+nmQVbaEeY2miZ1h+8jBLlxTESX93MwcshVaYTkZNhiyddtl92VvEDJTedzuX+1oT3TP5wG/+tHg==",
+      "requires": {
+        "@ant-design/colors": "^6.0.0",
+        "@ant-design/icons-vue": "^6.1.0",
+        "@babel/runtime": "^7.10.5",
+        "@ctrl/tinycolor": "^3.5.0",
+        "@emotion/hash": "^0.9.0",
+        "@emotion/unitless": "^0.8.0",
+        "@simonwep/pickr": "~1.8.0",
+        "array-tree-filter": "^2.1.0",
+        "async-validator": "^4.0.0",
+        "csstype": "^3.1.1",
+        "dayjs": "^1.10.5",
+        "dom-align": "^1.12.1",
+        "dom-scroll-into-view": "^2.0.0",
+        "lodash": "^4.17.21",
+        "lodash-es": "^4.17.15",
+        "resize-observer-polyfill": "^1.5.1",
+        "scroll-into-view-if-needed": "^2.2.25",
+        "shallow-equal": "^1.0.0",
+        "stylis": "^4.1.3",
+        "throttle-debounce": "^5.0.0",
+        "vue-types": "^3.0.0",
+        "warning": "^4.0.0"
+      },
+      "dependencies": {
+        "@ant-design/icons-vue": {
+          "version": "6.1.0",
+          "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-6.1.0.tgz",
+          "integrity": "sha512-EX6bYm56V+ZrKN7+3MT/ubDkvJ5rK/O2t380WFRflDcVFgsvl3NLH7Wxeau6R8DbrO5jWR6DSTC3B6gYFp77AA==",
           "requires": {
-            "remove-trailing-separator": "^1.0.1"
+            "@ant-design/colors": "^6.0.0",
+            "@ant-design/icons-svg": "^4.2.1"
           }
+        },
+        "async-validator": {
+          "version": "4.2.5",
+          "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz",
+          "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg=="
+        },
+        "csstype": {
+          "version": "3.1.3",
+          "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+          "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+        },
+        "lodash": {
+          "version": "4.17.21",
+          "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+          "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
         }
       }
     },
-    "append-transform": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/append-transform/download/append-transform-0.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fappend-transform%2Fdownload%2Fappend-transform-0.4.0.tgz",
-      "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=",
+    "any-promise": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/any-promise/download/any-promise-1.3.0.tgz",
+      "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=",
+      "dev": true
+    },
+    "anymatch": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-3.1.1.tgz",
+      "integrity": "sha1-xV7PAhheJGklk5kxDBc84xIzsUI=",
       "dev": true,
       "requires": {
-        "default-require-extensions": "^1.0.0"
+        "normalize-path": "^3.0.0",
+        "picomatch": "^2.0.4"
       }
     },
     "aproba": {
@@ -2042,25 +2464,16 @@
       "dev": true
     },
     "arch": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.1.1.tgz",
-      "integrity": "sha1-j1wnMao1owkpIhuwZA7tZRdeyE4=",
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/arch/download/arch-2.2.0.tgz",
+      "integrity": "sha1-G8R4GPMFdk8jqzMGsL/AhsWinRE=",
       "dev": true
     },
-    "are-we-there-yet": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/are-we-there-yet/download/are-we-there-yet-1.1.5.tgz",
-      "integrity": "sha1-SzXClE8GKov82mZBB2A1D+nd/CE=",
-      "dev": true,
-      "requires": {
-        "delegates": "^1.0.0",
-        "readable-stream": "^2.0.6"
-      }
-    },
     "argparse": {
       "version": "1.0.10",
       "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz",
       "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
+      "dev": true,
       "requires": {
         "sprintf-js": "~1.0.2"
       }
@@ -2083,35 +2496,16 @@
       "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
       "dev": true
     },
-    "array-each": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/array-each/download/array-each-1.0.1.tgz",
-      "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
+    "array-flatten": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313315299&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz",
+      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
       "dev": true
     },
-    "array-equal": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/array-equal/download/array-equal-1.0.0.tgz",
-      "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=",
-      "dev": true
-    },
-    "array-find-index": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/array-find-index/download/array-find-index-1.0.2.tgz",
-      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
-      "dev": true
-    },
-    "array-flatten": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313315299&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz",
-      "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=",
-      "dev": true
-    },
-    "array-slice": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/array-slice/download/array-slice-1.1.0.tgz",
-      "integrity": "sha1-42jqFfibxwaff/uJrsOmx9SsItQ=",
-      "dev": true
+    "array-tree-filter": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz",
+      "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw=="
     },
     "array-union": {
       "version": "1.0.2",
@@ -2134,12 +2528,6 @@
       "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
       "dev": true
     },
-    "arrify": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/arrify/download/arrify-1.0.1.tgz",
-      "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
-      "dev": true
-    },
     "asn1": {
       "version": "0.2.4",
       "resolved": "https://registry.npm.taobao.org/asn1/download/asn1-0.2.4.tgz",
@@ -2150,14 +2538,23 @@
       }
     },
     "asn1.js": {
-      "version": "4.10.1",
-      "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-4.10.1.tgz",
-      "integrity": "sha1-ucK/WAXx5kqt7tbfOiv6+1pz9aA=",
+      "version": "5.4.1",
+      "resolved": "https://registry.npm.taobao.org/asn1.js/download/asn1.js-5.4.1.tgz",
+      "integrity": "sha1-EamAuE67kXgc41sP3C7ilON4Pwc=",
       "dev": true,
       "requires": {
         "bn.js": "^4.0.0",
         "inherits": "^2.0.1",
-        "minimalistic-assert": "^1.0.0"
+        "minimalistic-assert": "^1.0.0",
+        "safer-buffer": "^2.1.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
+          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
+          "dev": true
+        }
       }
     },
     "assert": {
@@ -2178,7 +2575,7 @@
         },
         "util": {
           "version": "0.10.3",
-          "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz",
+          "resolved": "https://registry.npm.taobao.org/util/download/util-0.10.3.tgz?cache=0&sync_timestamp=1588238435623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.10.3.tgz",
           "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=",
           "dev": true,
           "requires": {
@@ -2220,12 +2617,6 @@
       "integrity": "sha1-tyfb+H12UWAvBvTUrDh/R9kbDL8=",
       "dev": true
     },
-    "async-foreach": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npm.taobao.org/async-foreach/download/async-foreach-0.1.3.tgz",
-      "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=",
-      "dev": true
-    },
     "async-limiter": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/async-limiter/download/async-limiter-1.0.1.tgz?cache=0&sync_timestamp=1574272018408&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-limiter%2Fdownload%2Fasync-limiter-1.0.1.tgz",
@@ -2233,12 +2624,9 @@
       "dev": true
     },
     "async-validator": {
-      "version": "1.8.5",
-      "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-1.8.5.tgz?cache=0&sync_timestamp=1575620599372&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-1.8.5.tgz",
-      "integrity": "sha1-3D4I7B/Q3dtn5ghC8CwM0c7G1/A=",
-      "requires": {
-        "babel-runtime": "6.x"
-      }
+      "version": "3.5.2",
+      "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz",
+      "integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ=="
     },
     "asynckit": {
       "version": "0.4.0",
@@ -2253,18 +2641,18 @@
       "dev": true
     },
     "autoprefixer": {
-      "version": "9.7.4",
-      "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.7.4.tgz",
-      "integrity": "sha1-+L8+BnB9BH8GQdh67oz7F0sqU3g=",
+      "version": "9.8.6",
+      "resolved": "https://registry.npm.taobao.org/autoprefixer/download/autoprefixer-9.8.6.tgz?cache=0&sync_timestamp=1607413393711&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.6.tgz",
+      "integrity": "sha1-O3NZTKG/kmYyDFrPFYjXTep0IQ8=",
       "dev": true,
       "requires": {
-        "browserslist": "^4.8.3",
-        "caniuse-lite": "^1.0.30001020",
-        "chalk": "^2.4.2",
+        "browserslist": "^4.12.0",
+        "caniuse-lite": "^1.0.30001109",
+        "colorette": "^1.2.1",
         "normalize-range": "^0.1.2",
         "num2fraction": "^1.2.2",
-        "postcss": "^7.0.26",
-        "postcss-value-parser": "^4.0.2"
+        "postcss": "^7.0.32",
+        "postcss-value-parser": "^4.1.0"
       }
     },
     "aws-sign2": {
@@ -2274,640 +2662,186 @@
       "dev": true
     },
     "aws4": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.9.1.tgz?cache=0&sync_timestamp=1578959055063&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.9.1.tgz",
-      "integrity": "sha1-fjPY99RJs/ZzzXLeuavcVS2+Uo4=",
+      "version": "1.11.0",
+      "resolved": "https://registry.npm.taobao.org/aws4/download/aws4-1.11.0.tgz?cache=0&sync_timestamp=1604101647749&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faws4%2Fdownload%2Faws4-1.11.0.tgz",
+      "integrity": "sha1-1h9G2DslGSUOJ4Ta9bCUeai0HFk=",
       "dev": true
     },
     "axios": {
-      "version": "0.18.1",
-      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.18.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.18.1.tgz",
-      "integrity": "sha1-/z8N4ue10YDnV62YAA8Qgbh7zqM=",
-      "requires": {
-        "follow-redirects": "1.5.10",
-        "is-buffer": "^2.0.2"
-      }
-    },
-    "babel-code-frame": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-code-frame/download/babel-code-frame-6.26.0.tgz",
-      "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
-      "dev": true,
+      "version": "0.21.1",
+      "resolved": "https://registry.npm.taobao.org/axios/download/axios-0.21.1.tgz?cache=0&sync_timestamp=1608611162952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Faxios%2Fdownload%2Faxios-0.21.1.tgz",
+      "integrity": "sha1-IlY0gZYvTWvemnbVFu8OXTwJsrg=",
       "requires": {
-        "chalk": "^1.1.3",
-        "esutils": "^2.0.2",
-        "js-tokens": "^3.0.2"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "js-tokens": {
-          "version": "3.0.2",
-          "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-3.0.2.tgz",
-          "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        }
+        "follow-redirects": "^1.10.0"
       }
     },
-    "babel-core": {
-      "version": "7.0.0-bridge.0",
-      "resolved": "https://registry.npm.taobao.org/babel-core/download/babel-core-7.0.0-bridge.0.tgz",
-      "integrity": "sha1-laSS3dkPm06aSh2hTrM1uHtjTs4=",
-      "dev": true
-    },
     "babel-eslint": {
-      "version": "10.0.1",
-      "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.0.1.tgz",
-      "integrity": "sha1-kZaB3AmWFM19MdRciQhpUJKh+u0=",
+      "version": "10.1.0",
+      "resolved": "https://registry.npm.taobao.org/babel-eslint/download/babel-eslint-10.1.0.tgz?cache=0&sync_timestamp=1600349064486&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-eslint%2Fdownload%2Fbabel-eslint-10.1.0.tgz",
+      "integrity": "sha1-aWjlaKkQt4+zd5zdi2rC9HmUMjI=",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "@babel/parser": "^7.0.0",
-        "@babel/traverse": "^7.0.0",
-        "@babel/types": "^7.0.0",
-        "eslint-scope": "3.7.1",
-        "eslint-visitor-keys": "^1.0.0"
-      },
-      "dependencies": {
-        "eslint-scope": {
-          "version": "3.7.1",
-          "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-3.7.1.tgz",
-          "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
-          "dev": true,
-          "requires": {
-            "esrecurse": "^4.1.0",
-            "estraverse": "^4.1.1"
-          }
-        }
+        "@babel/parser": "^7.7.0",
+        "@babel/traverse": "^7.7.0",
+        "@babel/types": "^7.7.0",
+        "eslint-visitor-keys": "^1.0.0",
+        "resolve": "^1.12.0"
       }
     },
-    "babel-generator": {
-      "version": "6.26.1",
-      "resolved": "https://registry.npm.taobao.org/babel-generator/download/babel-generator-6.26.1.tgz",
-      "integrity": "sha1-GERAjTuPDTWkBOp6wYDwh6YBvZA=",
+    "babel-loader": {
+      "version": "8.2.2",
+      "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.2.2.tgz",
+      "integrity": "sha1-k2POhMEMmkDmx1N0jhRBtgyKC4E=",
       "dev": true,
       "requires": {
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "detect-indent": "^4.0.0",
-        "jsesc": "^1.3.0",
-        "lodash": "^4.17.4",
-        "source-map": "^0.5.7",
-        "trim-right": "^1.0.1"
-      },
-      "dependencies": {
-        "jsesc": {
-          "version": "1.3.0",
-          "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-1.3.0.tgz",
-          "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
-          "dev": true
-        }
+        "find-cache-dir": "^3.3.1",
+        "loader-utils": "^1.4.0",
+        "make-dir": "^3.1.0",
+        "schema-utils": "^2.6.5"
       }
     },
-    "babel-helper-vue-jsx-merge-props": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/babel-helper-vue-jsx-merge-props/download/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
-      "integrity": "sha1-Iq69OzOQIyjlEyk6jkmSs4T58bY="
-    },
-    "babel-helpers": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-helpers/download/babel-helpers-6.24.1.tgz",
-      "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",
+    "babel-plugin-dynamic-import-node": {
+      "version": "2.3.3",
+      "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.3.tgz?cache=0&sync_timestamp=1587495874530&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.3.tgz",
+      "integrity": "sha1-hP2hnJduxcbe/vV/lCez3vZuF6M=",
       "dev": true,
       "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-template": "^6.24.1"
+        "object.assign": "^4.1.0"
       }
     },
-    "babel-jest": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/babel-jest/download/babel-jest-23.6.0.tgz?cache=0&sync_timestamp=1579654876842&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-jest%2Fdownload%2Fbabel-jest-23.6.0.tgz",
-      "integrity": "sha1-pkQjI2ZVeiJAoMCD2msleGGFovE=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-istanbul": "^4.1.6",
-        "babel-preset-jest": "^23.2.0"
-      }
+    "balanced-match": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
+      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+      "dev": true
     },
-    "babel-loader": {
-      "version": "8.0.6",
-      "resolved": "https://registry.npm.taobao.org/babel-loader/download/babel-loader-8.0.6.tgz",
-      "integrity": "sha1-4zvbbzYrA/S7FBoMIauHxQG3Dfs=",
+    "base": {
+      "version": "0.11.2",
+      "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
+      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
       "dev": true,
       "requires": {
-        "find-cache-dir": "^2.0.0",
-        "loader-utils": "^1.0.2",
-        "mkdirp": "^0.5.1",
-        "pify": "^4.0.1"
+        "cache-base": "^1.0.1",
+        "class-utils": "^0.3.5",
+        "component-emitter": "^1.2.1",
+        "define-property": "^1.0.0",
+        "isobject": "^3.0.1",
+        "mixin-deep": "^1.2.0",
+        "pascalcase": "^0.1.1"
       },
       "dependencies": {
-        "find-cache-dir": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz",
-          "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
-          "dev": true,
-          "requires": {
-            "commondir": "^1.0.1",
-            "make-dir": "^2.0.0",
-            "pkg-dir": "^3.0.0"
-          }
-        },
-        "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz",
-          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
-          "dev": true,
-          "requires": {
-            "locate-path": "^3.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
-          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
-          "dev": true,
-          "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "make-dir": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1581538411621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz",
-          "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
+        "define-property": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
+          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
           "dev": true,
           "requires": {
-            "pify": "^4.0.1",
-            "semver": "^5.6.0"
+            "is-descriptor": "^1.0.0"
           }
         },
-        "p-limit": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.2.tgz?cache=0&sync_timestamp=1577904218145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.2.2.tgz",
-          "integrity": "sha1-YSebZ3IfUoeqHBOpp/u8SMkpGx4=",
+        "is-accessor-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
+          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
           "dev": true,
           "requires": {
-            "p-try": "^2.0.0"
+            "kind-of": "^6.0.0"
           }
         },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz",
-          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+        "is-data-descriptor": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
+          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
           "dev": true,
           "requires": {
-            "p-limit": "^2.0.0"
+            "kind-of": "^6.0.0"
           }
         },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
-          "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
-          "dev": true
-        },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz",
-          "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
-          "dev": true
-        },
-        "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
-          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+        "is-descriptor": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
+          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
           "dev": true,
           "requires": {
-            "find-up": "^3.0.0"
+            "is-accessor-descriptor": "^1.0.0",
+            "is-data-descriptor": "^1.0.0",
+            "kind-of": "^6.0.2"
           }
         }
       }
     },
-    "babel-messages": {
-      "version": "6.23.0",
-      "resolved": "https://registry.npm.taobao.org/babel-messages/download/babel-messages-6.23.0.tgz",
-      "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0"
-      }
+    "base64-js": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.5.1.tgz",
+      "integrity": "sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=",
+      "dev": true
     },
-    "babel-plugin-dynamic-import-node": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-dynamic-import-node/download/babel-plugin-dynamic-import-node-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-dynamic-import-node%2Fdownload%2Fbabel-plugin-dynamic-import-node-2.3.0.tgz",
-      "integrity": "sha1-8A9Qe9qjw+P/bn5emNkKesq5b38=",
+    "batch": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz",
+      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
+      "dev": true
+    },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
       "dev": true,
       "requires": {
-        "object.assign": "^4.1.0"
+        "tweetnacl": "^0.14.3"
       }
     },
-    "babel-plugin-istanbul": {
-      "version": "4.1.6",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-istanbul/download/babel-plugin-istanbul-4.1.6.tgz",
-      "integrity": "sha1-NsWbIZLvzoHFs3gyG3QXWt0cmkU=",
+    "bfj": {
+      "version": "6.1.2",
+      "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz",
+      "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=",
       "dev": true,
       "requires": {
-        "babel-plugin-syntax-object-rest-spread": "^6.13.0",
-        "find-up": "^2.1.0",
-        "istanbul-lib-instrument": "^1.10.1",
-        "test-exclude": "^4.2.1"
+        "bluebird": "^3.5.5",
+        "check-types": "^8.0.3",
+        "hoopy": "^0.1.4",
+        "tryer": "^1.0.1"
       }
     },
-    "babel-plugin-jest-hoist": {
-      "version": "23.2.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-jest-hoist/download/babel-plugin-jest-hoist-23.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbabel-plugin-jest-hoist%2Fdownload%2Fbabel-plugin-jest-hoist-23.2.0.tgz",
-      "integrity": "sha1-5h+uBaHKiAGq3uV6bWa4zvr0QWc=",
+    "big.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz",
+      "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg=",
       "dev": true
     },
-    "babel-plugin-module-resolver": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-module-resolver/download/babel-plugin-module-resolver-3.2.0.tgz",
-      "integrity": "sha1-3fpeMB47mqEthSqZefGLN4gf9ac=",
+    "binary-extensions": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-2.2.0.tgz?cache=0&sync_timestamp=1610299514499&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbinary-extensions%2Fdownload%2Fbinary-extensions-2.2.0.tgz",
+      "integrity": "sha1-dfUC7q+f/eQvyYgpZFvk6na9ni0=",
+      "dev": true
+    },
+    "bindings": {
+      "version": "1.5.0",
+      "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
+      "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "find-babel-config": "^1.1.0",
-        "glob": "^7.1.2",
-        "pkg-up": "^2.0.0",
-        "reselect": "^3.0.1",
-        "resolve": "^1.4.0"
+        "file-uri-to-path": "1.0.0"
       }
     },
-    "babel-plugin-syntax-object-rest-spread": {
-      "version": "6.13.0",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-syntax-object-rest-spread/download/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",
-      "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=",
+    "bluebird": {
+      "version": "3.7.2",
+      "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz",
+      "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
       "dev": true
     },
-    "babel-plugin-transform-es2015-modules-commonjs": {
-      "version": "6.26.2",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-es2015-modules-commonjs/download/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",
-      "integrity": "sha1-WKeThjqefKhwvcWogRF/+sJ9tvM=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-transform-strict-mode": "^6.24.1",
-        "babel-runtime": "^6.26.0",
-        "babel-template": "^6.26.0",
-        "babel-types": "^6.26.0"
-      }
+    "bn.js": {
+      "version": "5.1.3",
+      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.3.tgz",
+      "integrity": "sha1-vsoAVAj2Quvr6oCwQrTRjSrA7ms=",
+      "dev": true
     },
-    "babel-plugin-transform-strict-mode": {
-      "version": "6.24.1",
-      "resolved": "https://registry.npm.taobao.org/babel-plugin-transform-strict-mode/download/babel-plugin-transform-strict-mode-6.24.1.tgz",
-      "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.22.0",
-        "babel-types": "^6.24.1"
-      }
-    },
-    "babel-preset-jest": {
-      "version": "23.2.0",
-      "resolved": "https://registry.npm.taobao.org/babel-preset-jest/download/babel-preset-jest-23.2.0.tgz",
-      "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-jest-hoist": "^23.2.0",
-        "babel-plugin-syntax-object-rest-spread": "^6.13.0"
-      }
-    },
-    "babel-register": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-register/download/babel-register-6.26.0.tgz",
-      "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",
-      "dev": true,
-      "requires": {
-        "babel-core": "^6.26.0",
-        "babel-runtime": "^6.26.0",
-        "core-js": "^2.5.0",
-        "home-or-tmp": "^2.0.0",
-        "lodash": "^4.17.4",
-        "mkdirp": "^0.5.1",
-        "source-map-support": "^0.4.15"
-      },
-      "dependencies": {
-        "babel-core": {
-          "version": "6.26.3",
-          "resolved": "https://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz",
-          "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=",
-          "dev": true,
-          "requires": {
-            "babel-code-frame": "^6.26.0",
-            "babel-generator": "^6.26.0",
-            "babel-helpers": "^6.24.1",
-            "babel-messages": "^6.23.0",
-            "babel-register": "^6.26.0",
-            "babel-runtime": "^6.26.0",
-            "babel-template": "^6.26.0",
-            "babel-traverse": "^6.26.0",
-            "babel-types": "^6.26.0",
-            "babylon": "^6.18.0",
-            "convert-source-map": "^1.5.1",
-            "debug": "^2.6.9",
-            "json5": "^0.5.1",
-            "lodash": "^4.17.4",
-            "minimatch": "^3.0.4",
-            "path-is-absolute": "^1.0.1",
-            "private": "^0.1.8",
-            "slash": "^1.0.0",
-            "source-map": "^0.5.7"
-          }
-        },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "home-or-tmp": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-2.0.0.tgz",
-          "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
-          "dev": true,
-          "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.1"
-          }
-        },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-          "dev": true
-        },
-        "source-map-support": {
-          "version": "0.4.18",
-          "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.4.18.tgz?cache=0&sync_timestamp=1572389965235&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.4.18.tgz",
-          "integrity": "sha1-Aoam3ovkJkEzhZTpfM6nXwosWF8=",
-          "dev": true,
-          "requires": {
-            "source-map": "^0.5.6"
-          }
-        }
-      }
-    },
-    "babel-runtime": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-runtime/download/babel-runtime-6.26.0.tgz",
-      "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-      "requires": {
-        "core-js": "^2.4.0",
-        "regenerator-runtime": "^0.11.0"
-      }
-    },
-    "babel-template": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-template/download/babel-template-6.26.0.tgz",
-      "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.26.0",
-        "babel-traverse": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "lodash": "^4.17.4"
-      }
-    },
-    "babel-traverse": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-traverse/download/babel-traverse-6.26.0.tgz",
-      "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",
-      "dev": true,
-      "requires": {
-        "babel-code-frame": "^6.26.0",
-        "babel-messages": "^6.23.0",
-        "babel-runtime": "^6.26.0",
-        "babel-types": "^6.26.0",
-        "babylon": "^6.18.0",
-        "debug": "^2.6.8",
-        "globals": "^9.18.0",
-        "invariant": "^2.2.2",
-        "lodash": "^4.17.4"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "globals": {
-          "version": "9.18.0",
-          "resolved": "https://registry.npm.taobao.org/globals/download/globals-9.18.0.tgz",
-          "integrity": "sha1-qjiWs+abSH8X4x7SFD1pqOMMLYo=",
-          "dev": true
-        }
-      }
-    },
-    "babel-types": {
-      "version": "6.26.0",
-      "resolved": "https://registry.npm.taobao.org/babel-types/download/babel-types-6.26.0.tgz",
-      "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
-      "dev": true,
-      "requires": {
-        "babel-runtime": "^6.26.0",
-        "esutils": "^2.0.2",
-        "lodash": "^4.17.4",
-        "to-fast-properties": "^1.0.3"
-      },
-      "dependencies": {
-        "to-fast-properties": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npm.taobao.org/to-fast-properties/download/to-fast-properties-1.0.3.tgz",
-          "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=",
-          "dev": true
-        }
-      }
-    },
-    "babylon": {
-      "version": "6.18.0",
-      "resolved": "https://registry.npm.taobao.org/babylon/download/babylon-6.18.0.tgz",
-      "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=",
-      "dev": true
-    },
-    "balanced-match": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.0.tgz",
-      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
-      "dev": true
-    },
-    "base": {
-      "version": "0.11.2",
-      "resolved": "https://registry.npm.taobao.org/base/download/base-0.11.2.tgz",
-      "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=",
-      "dev": true,
-      "requires": {
-        "cache-base": "^1.0.1",
-        "class-utils": "^0.3.5",
-        "component-emitter": "^1.2.1",
-        "define-property": "^1.0.0",
-        "isobject": "^3.0.1",
-        "mixin-deep": "^1.2.0",
-        "pascalcase": "^0.1.1"
-      },
-      "dependencies": {
-        "define-property": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/define-property/download/define-property-1.0.0.tgz",
-          "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
-          "dev": true,
-          "requires": {
-            "is-descriptor": "^1.0.0"
-          }
-        },
-        "is-accessor-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-1.0.0.tgz",
-          "integrity": "sha1-FpwvbT3x+ZJhgHI2XJsOofaHhlY=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-data-descriptor": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-1.0.0.tgz",
-          "integrity": "sha1-2Eh2Mh0Oet0DmQQGq7u9NrqSaMc=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^6.0.0"
-          }
-        },
-        "is-descriptor": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-1.0.2.tgz",
-          "integrity": "sha1-OxWXRqZmBLBPjIFSS6NlxfFNhuw=",
-          "dev": true,
-          "requires": {
-            "is-accessor-descriptor": "^1.0.0",
-            "is-data-descriptor": "^1.0.0",
-            "kind-of": "^6.0.2"
-          }
-        }
-      }
-    },
-    "base64-js": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/base64-js/download/base64-js-1.3.1.tgz",
-      "integrity": "sha1-WOzoy3XdB+ce0IxzarxfrE2/jfE=",
-      "dev": true
-    },
-    "batch": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npm.taobao.org/batch/download/batch-0.6.1.tgz",
-      "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
-      "dev": true
-    },
-    "bcrypt-pbkdf": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/bcrypt-pbkdf/download/bcrypt-pbkdf-1.0.2.tgz",
-      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
-      "dev": true,
-      "requires": {
-        "tweetnacl": "^0.14.3"
-      }
-    },
-    "bfj": {
-      "version": "6.1.2",
-      "resolved": "https://registry.npm.taobao.org/bfj/download/bfj-6.1.2.tgz",
-      "integrity": "sha1-MlyGGoIryzWKQceKM7jm4ght3n8=",
-      "dev": true,
-      "requires": {
-        "bluebird": "^3.5.5",
-        "check-types": "^8.0.3",
-        "hoopy": "^0.1.4",
-        "tryer": "^1.0.1"
-      }
-    },
-    "big.js": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-5.2.2.tgz",
-      "integrity": "sha1-ZfCvOC9Xi83HQr2cKB6cstd2gyg="
-    },
-    "binary-extensions": {
-      "version": "1.13.1",
-      "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz",
-      "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
-      "dev": true
-    },
-    "bindings": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/bindings/download/bindings-1.5.0.tgz",
-      "integrity": "sha1-EDU8npRTNLwFEabZCzj7x8nFBN8=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "file-uri-to-path": "1.0.0"
-      }
-    },
-    "block-stream": {
-      "version": "0.0.9",
-      "resolved": "https://registry.npm.taobao.org/block-stream/download/block-stream-0.0.9.tgz",
-      "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
-      "dev": true,
-      "requires": {
-        "inherits": "~2.0.0"
-      }
-    },
-    "bluebird": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npm.taobao.org/bluebird/download/bluebird-3.7.2.tgz",
-      "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
-      "dev": true
-    },
-    "bn.js": {
-      "version": "4.11.8",
-      "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.8.tgz",
-      "integrity": "sha1-LN4J617jQfSEdGuwMJsyU7GxRC8=",
-      "dev": true
-    },
-    "body-parser": {
-      "version": "1.19.0",
-      "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbody-parser%2Fdownload%2Fbody-parser-1.19.0.tgz",
-      "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
+    "body-parser": {
+      "version": "1.19.0",
+      "resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbody-parser%2Fdownload%2Fbody-parser-1.19.0.tgz",
+      "integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=",
       "dev": true,
       "requires": {
         "bytes": "3.1.0",
@@ -2924,13 +2858,19 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
           "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
           }
         },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        },
         "qs": {
           "version": "6.7.0",
           "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz",
@@ -2969,7 +2909,7 @@
     },
     "brace-expansion": {
       "version": "1.1.11",
-      "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz",
+      "resolved": "https://registry.npm.taobao.org/brace-expansion/download/brace-expansion-1.1.11.tgz?cache=0&sync_timestamp=1601898189928&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrace-expansion%2Fdownload%2Fbrace-expansion-1.1.11.tgz",
       "integrity": "sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=",
       "dev": true,
       "requires": {
@@ -3012,29 +2952,6 @@
       "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",
       "dev": true
     },
-    "browser-process-hrtime": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/browser-process-hrtime/download/browser-process-hrtime-1.0.0.tgz",
-      "integrity": "sha1-PJtLfXgsgSHlbxAQbYTA0P/JRiY=",
-      "dev": true
-    },
-    "browser-resolve": {
-      "version": "1.11.3",
-      "resolved": "https://registry.npm.taobao.org/browser-resolve/download/browser-resolve-1.11.3.tgz",
-      "integrity": "sha1-m3y7PQ9RDky4a9vXlhJNKLWJCvY=",
-      "dev": true,
-      "requires": {
-        "resolve": "1.1.7"
-      },
-      "dependencies": {
-        "resolve": {
-          "version": "1.1.7",
-          "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.1.7.tgz?cache=0&sync_timestamp=1580943346382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.1.7.tgz",
-          "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=",
-          "dev": true
-        }
-      }
-    },
     "browserify-aes": {
       "version": "1.2.0",
       "resolved": "https://registry.npm.taobao.org/browserify-aes/download/browserify-aes-1.2.0.tgz",
@@ -3073,28 +2990,49 @@
       }
     },
     "browserify-rsa": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.0.1.tgz",
-      "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/browserify-rsa/download/browserify-rsa-4.1.0.tgz",
+      "integrity": "sha1-sv0Gtbda4pf3zi3GUfkY9b4VjI0=",
       "dev": true,
       "requires": {
-        "bn.js": "^4.1.0",
+        "bn.js": "^5.0.0",
         "randombytes": "^2.0.1"
       }
     },
     "browserify-sign": {
-      "version": "4.0.4",
-      "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.0.4.tgz",
-      "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
+      "version": "4.2.1",
+      "resolved": "https://registry.npm.taobao.org/browserify-sign/download/browserify-sign-4.2.1.tgz",
+      "integrity": "sha1-6vSt1G3VS+O7OzbAzxWrvrp5VsM=",
       "dev": true,
       "requires": {
-        "bn.js": "^4.1.1",
-        "browserify-rsa": "^4.0.0",
-        "create-hash": "^1.1.0",
-        "create-hmac": "^1.1.2",
-        "elliptic": "^6.0.0",
-        "inherits": "^2.0.1",
-        "parse-asn1": "^5.0.0"
+        "bn.js": "^5.1.1",
+        "browserify-rsa": "^4.0.1",
+        "create-hash": "^1.2.0",
+        "create-hmac": "^1.1.7",
+        "elliptic": "^6.5.3",
+        "inherits": "^2.0.4",
+        "parse-asn1": "^5.1.5",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581622984924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz?cache=0&sync_timestamp=1589129103371&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz",
+          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
+          "dev": true
+        }
       }
     },
     "browserify-zlib": {
@@ -3107,28 +3045,21 @@
       }
     },
     "browserslist": {
-      "version": "4.9.1",
-      "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.9.1.tgz",
-      "integrity": "sha1-Af+5yjGhrvdngSj8aiJTMWqnKHw=",
-      "dev": true,
-      "requires": {
-        "caniuse-lite": "^1.0.30001030",
-        "electron-to-chromium": "^1.3.363",
-        "node-releases": "^1.1.50"
-      }
-    },
-    "bser": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/bser/download/bser-2.1.1.tgz?cache=0&sync_timestamp=1571761384718&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbser%2Fdownload%2Fbser-2.1.1.tgz",
-      "integrity": "sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU=",
+      "version": "4.16.0",
+      "resolved": "https://registry.npm.taobao.org/browserslist/download/browserslist-4.16.0.tgz?cache=0&sync_timestamp=1607665649211&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbrowserslist%2Fdownload%2Fbrowserslist-4.16.0.tgz",
+      "integrity": "sha1-QQJ3YnUAvjyyihv+A3WG++35SIs=",
       "dev": true,
       "requires": {
-        "node-int64": "^0.4.0"
+        "caniuse-lite": "^1.0.30001165",
+        "colorette": "^1.2.1",
+        "electron-to-chromium": "^1.3.621",
+        "escalade": "^3.1.1",
+        "node-releases": "^1.1.67"
       }
     },
     "buffer": {
       "version": "4.9.2",
-      "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/buffer/download/buffer-4.9.2.tgz?cache=0&sync_timestamp=1606098100352&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbuffer%2Fdownload%2Fbuffer-4.9.2.tgz",
       "integrity": "sha1-Iw6tNEACmIZEhBqwJEr4xEu+Pvg=",
       "dev": true,
       "requires": {
@@ -3137,32 +3068,10 @@
         "isarray": "^1.0.0"
       }
     },
-    "buffer-alloc": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/buffer-alloc/download/buffer-alloc-1.2.0.tgz",
-      "integrity": "sha1-iQ3ZDZI6hz4I4Q5f1RpX5bfM4Ow=",
-      "dev": true,
-      "requires": {
-        "buffer-alloc-unsafe": "^1.1.0",
-        "buffer-fill": "^1.0.0"
-      }
-    },
-    "buffer-alloc-unsafe": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/buffer-alloc-unsafe/download/buffer-alloc-unsafe-1.1.0.tgz",
-      "integrity": "sha1-vX3CauKXLQ7aJTvgYdupkjScGfA=",
-      "dev": true
-    },
-    "buffer-fill": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/buffer-fill/download/buffer-fill-1.0.0.tgz",
-      "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=",
-      "dev": true
-    },
-    "buffer-from": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
-      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
+    "buffer-from": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/buffer-from/download/buffer-from-1.1.1.tgz",
+      "integrity": "sha1-MnE7wCj3XAL9txDXx7zsHyxgcO8=",
       "dev": true
     },
     "buffer-indexof": {
@@ -3171,6 +3080,12 @@
       "integrity": "sha1-Uvq8xqYG0aADAoAmSO9o9jnaJow=",
       "dev": true
     },
+    "buffer-json": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/buffer-json/download/buffer-json-2.0.0.tgz",
+      "integrity": "sha1-9z4TseQvGW/i/WfQAcfXEH7dfCM=",
+      "dev": true
+    },
     "buffer-xor": {
       "version": "1.0.3",
       "resolved": "https://registry.npm.taobao.org/buffer-xor/download/buffer-xor-1.0.3.tgz",
@@ -3190,9 +3105,9 @@
       "dev": true
     },
     "cacache": {
-      "version": "12.0.3",
-      "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.3.tgz",
-      "integrity": "sha1-vpmruk4b9d9GHNWiwQcfxDJXM5A=",
+      "version": "12.0.4",
+      "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-12.0.4.tgz?cache=0&sync_timestamp=1594428108619&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcacache%2Fdownload%2Fcacache-12.0.4.tgz",
+      "integrity": "sha1-ZovL0QWutfHZL+JVcOyVJcj6pAw=",
       "dev": true,
       "requires": {
         "bluebird": "^3.5.5",
@@ -3210,29 +3125,6 @@
         "ssri": "^6.0.1",
         "unique-filename": "^1.1.1",
         "y18n": "^4.0.0"
-      },
-      "dependencies": {
-        "lru-cache": {
-          "version": "5.1.1",
-          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz",
-          "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
-          "dev": true,
-          "requires": {
-            "yallist": "^3.0.2"
-          }
-        },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz",
-          "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=",
-          "dev": true
-        },
-        "yallist": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz",
-          "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=",
-          "dev": true
-        }
       }
     },
     "cache-base": {
@@ -3253,29 +3145,26 @@
       }
     },
     "cache-loader": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/cache-loader/download/cache-loader-2.0.1.tgz",
-      "integrity": "sha1-V1j0GmLXwjlB48PHAW5vrrA6ywc=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/cache-loader/download/cache-loader-4.1.0.tgz",
+      "integrity": "sha1-mUjK41OuwKH8ser9ojAIFuyFOH4=",
       "dev": true,
       "requires": {
-        "loader-utils": "^1.1.0",
+        "buffer-json": "^2.0.0",
+        "find-cache-dir": "^3.0.0",
+        "loader-utils": "^1.2.3",
         "mkdirp": "^0.5.1",
-        "neo-async": "^2.6.0",
-        "normalize-path": "^3.0.0",
-        "schema-utils": "^1.0.0"
-      },
-      "dependencies": {
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
-          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
+        "neo-async": "^2.6.1",
+        "schema-utils": "^2.0.0"
+      }
+    },
+    "call-bind": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/call-bind/download/call-bind-1.0.0.tgz?cache=0&sync_timestamp=1604117087261&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcall-bind%2Fdownload%2Fcall-bind-1.0.0.tgz",
+      "integrity": "sha1-JBJwVLs/m9y0sfuCQYGGBy93uM4=",
+      "requires": {
+        "function-bind": "^1.1.1",
+        "get-intrinsic": "^1.0.0"
       }
     },
     "call-me-maybe": {
@@ -3291,36 +3180,26 @@
       "dev": true,
       "requires": {
         "callsites": "^2.0.0"
-      },
-      "dependencies": {
-        "callsites": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz",
-          "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
-          "dev": true
-        }
       }
     },
     "caller-path": {
-      "version": "0.1.0",
-      "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-0.1.0.tgz?cache=0&sync_timestamp=1574395542397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-path%2Fdownload%2Fcaller-path-0.1.0.tgz",
-      "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1574395542397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz",
+      "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "callsites": "^0.2.0"
+        "caller-callsite": "^2.0.0"
       }
     },
     "callsites": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-0.2.0.tgz",
-      "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
-      "dev": true,
-      "optional": true
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz",
+      "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+      "dev": true
     },
     "camel-case": {
       "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/camel-case/download/camel-case-3.0.0.tgz?cache=0&sync_timestamp=1606867359182&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcamel-case%2Fdownload%2Fcamel-case-3.0.0.tgz",
       "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",
       "dev": true,
       "requires": {
@@ -3329,27 +3208,10 @@
       }
     },
     "camelcase": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz",
-      "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
-    },
-    "camelcase-keys": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/camelcase-keys/download/camelcase-keys-2.1.0.tgz",
-      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
-      "dev": true,
-      "requires": {
-        "camelcase": "^2.0.0",
-        "map-obj": "^1.0.0"
-      },
-      "dependencies": {
-        "camelcase": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-2.1.1.tgz",
-          "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
-          "dev": true
-        }
-      }
+      "version": "6.2.0",
+      "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-6.2.0.tgz",
+      "integrity": "sha1-kkr4gcnVJaydh/QNlk5c6pgqGAk=",
+      "dev": true
     },
     "caniuse-api": {
       "version": "3.0.0",
@@ -3364,20 +3226,11 @@
       }
     },
     "caniuse-lite": {
-      "version": "1.0.30001033",
-      "resolved": "https://registry.npm.taobao.org/caniuse-lite/download/caniuse-lite-1.0.30001033.tgz",
-      "integrity": "sha1-YMMo+1aGDeYPmiy0GcMfuAWHy6A=",
+      "version": "1.0.30001439",
+      "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001439.tgz",
+      "integrity": "sha512-1MgUzEkoMO6gKfXflStpYgZDlFM7M/ck/bgfVCACO5vnAf0fXoNVHdWtqGU+MYca+4bL9Z5bpOVmR33cWW9G2A==",
       "dev": true
     },
-    "capture-exit": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/capture-exit/download/capture-exit-1.2.0.tgz",
-      "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=",
-      "dev": true,
-      "requires": {
-        "rsvp": "^3.3.3"
-      }
-    },
     "case-sensitive-paths-webpack-plugin": {
       "version": "2.3.0",
       "resolved": "https://registry.npm.taobao.org/case-sensitive-paths-webpack-plugin/download/case-sensitive-paths-webpack-plugin-2.3.0.tgz",
@@ -3391,68 +3244,38 @@
       "dev": true
     },
     "cfb": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/cfb/download/cfb-1.1.3.tgz",
-      "integrity": "sha1-Bd5oFiWcjovDJxOrqQVgjuOF32Y=",
+      "version": "1.2.1",
+      "resolved": "https://r2.cnpmjs.org/cfb/-/cfb-1.2.1.tgz",
+      "integrity": "sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ==",
       "requires": {
-        "adler-32": "~1.2.0",
-        "commander": "^2.16.0",
+        "adler-32": "~1.3.0",
         "crc-32": "~1.2.0",
-        "printj": "~1.1.2"
+        "printj": "~1.3.0"
+      },
+      "dependencies": {
+        "printj": {
+          "version": "1.3.1",
+          "resolved": "https://r.cnpmjs.org/printj/-/printj-1.3.1.tgz",
+          "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg=="
+        }
       }
     },
     "chalk": {
       "version": "2.4.2",
-      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.4.2.tgz?cache=0&sync_timestamp=1591687076871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.4.2.tgz",
       "integrity": "sha1-zUJUFnelQzPPVBpJEIwUMrRMlCQ=",
+      "dev": true,
       "requires": {
         "ansi-styles": "^3.2.1",
         "escape-string-regexp": "^1.0.5",
         "supports-color": "^5.3.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        }
-      }
-    },
-    "change-case": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/change-case/download/change-case-3.1.0.tgz",
-      "integrity": "sha1-DmEbftyZUt8uhROye0LecmR90X4=",
-      "dev": true,
-      "requires": {
-        "camel-case": "^3.0.0",
-        "constant-case": "^2.0.0",
-        "dot-case": "^2.1.0",
-        "header-case": "^1.0.0",
-        "is-lower-case": "^1.1.0",
-        "is-upper-case": "^1.1.0",
-        "lower-case": "^1.1.1",
-        "lower-case-first": "^1.0.0",
-        "no-case": "^2.3.2",
-        "param-case": "^2.1.0",
-        "pascal-case": "^2.0.0",
-        "path-case": "^2.1.0",
-        "sentence-case": "^2.1.0",
-        "snake-case": "^2.1.0",
-        "swap-case": "^1.1.0",
-        "title-case": "^2.1.0",
-        "upper-case": "^1.1.1",
-        "upper-case-first": "^1.1.0"
       }
     },
     "chardet": {
-      "version": "0.4.2",
-      "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.4.2.tgz?cache=0&sync_timestamp=1562888139305&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.4.2.tgz",
-      "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=",
-      "dev": true,
-      "optional": true
+      "version": "0.7.0",
+      "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz",
+      "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
+      "dev": true
     },
     "check-types": {
       "version": "8.0.3",
@@ -3461,23 +3284,54 @@
       "dev": true
     },
     "chokidar": {
-      "version": "2.1.5",
-      "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.5.tgz",
-      "integrity": "sha1-CuhDTZYigaX1bHKGnnnLbZ2GrU0=",
+      "version": "3.5.1",
+      "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.5.1.tgz?cache=0&sync_timestamp=1610719440699&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.5.1.tgz",
+      "integrity": "sha1-7pznu+vSt59J8wR5nVRo4x4U5oo=",
       "dev": true,
       "requires": {
-        "anymatch": "^2.0.0",
-        "async-each": "^1.0.1",
-        "braces": "^2.3.2",
-        "fsevents": "^1.2.7",
-        "glob-parent": "^3.1.0",
-        "inherits": "^2.0.3",
-        "is-binary-path": "^1.0.0",
-        "is-glob": "^4.0.0",
-        "normalize-path": "^3.0.0",
-        "path-is-absolute": "^1.0.0",
-        "readdirp": "^2.2.1",
-        "upath": "^1.1.1"
+        "anymatch": "~3.1.1",
+        "braces": "~3.0.2",
+        "fsevents": "~2.3.1",
+        "glob-parent": "~5.1.0",
+        "is-binary-path": "~2.1.0",
+        "is-glob": "~4.0.1",
+        "normalize-path": "~3.0.0",
+        "readdirp": "~3.5.0"
+      },
+      "dependencies": {
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
+        }
       }
     },
     "chownr": {
@@ -3511,13 +3365,6 @@
         "safe-buffer": "^5.0.1"
       }
     },
-    "circular-json": {
-      "version": "0.3.3",
-      "resolved": "https://registry.npm.taobao.org/circular-json/download/circular-json-0.3.3.tgz",
-      "integrity": "sha1-gVyZ6oT2gJUp0vRXkb34JxE1LWY=",
-      "dev": true,
-      "optional": true
-    },
     "class-utils": {
       "version": "0.3.6",
       "resolved": "https://registry.npm.taobao.org/class-utils/download/class-utils-0.3.6.tgz",
@@ -3558,6 +3405,12 @@
         }
       }
     },
+    "clean-stack": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/clean-stack/download/clean-stack-2.2.0.tgz?cache=0&sync_timestamp=1605702369164&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclean-stack%2Fdownload%2Fclean-stack-2.2.0.tgz",
+      "integrity": "sha1-7oRy27Ep5yezHooQpCfe6d/kAIs=",
+      "dev": true
+    },
     "cli-cursor": {
       "version": "2.1.0",
       "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-cursor%2Fdownload%2Fcli-cursor-2.1.0.tgz",
@@ -3567,74 +3420,86 @@
         "restore-cursor": "^2.0.0"
       }
     },
-    "cli-spinners": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.2.0.tgz",
-      "integrity": "sha1-6LmI2SBsaSMC2O6DTnqFwBRNj3c=",
-      "dev": true
-    },
-    "cli-truncate": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/cli-truncate/download/cli-truncate-0.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-truncate%2Fdownload%2Fcli-truncate-0.2.1.tgz",
-      "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+    "cli-highlight": {
+      "version": "2.1.9",
+      "resolved": "https://registry.npm.taobao.org/cli-highlight/download/cli-highlight-2.1.9.tgz?cache=0&sync_timestamp=1606814157980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-highlight%2Fdownload%2Fcli-highlight-2.1.9.tgz",
+      "integrity": "sha1-T07LBTJtcNVtS0JJ+r+acPsAJJc=",
       "dev": true,
       "requires": {
-        "slice-ansi": "0.0.4",
-        "string-width": "^1.0.1"
+        "chalk": "^4.0.0",
+        "highlight.js": "^10.0.0",
+        "mz": "^2.4.0",
+        "parse5": "^5.1.1",
+        "parse5-htmlparser2-tree-adapter": "^6.0.0",
+        "yargs": "^15.0.0"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1606792371412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
           "dev": true,
           "requires": {
-            "number-is-nan": "^1.0.0"
+            "color-convert": "^2.0.1"
           }
         },
-        "slice-ansi": {
-          "version": "0.0.4",
-          "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-0.0.4.tgz?cache=0&sync_timestamp=1581872792458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslice-ansi%2Fdownload%2Fslice-ansi-0.0.4.tgz",
-          "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
-          "dev": true
+        "chalk": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687076871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz",
+          "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=",
+          "dev": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
         },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
           "dev": true,
           "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
+            "color-name": "~1.1.4"
           }
         },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
+          "dev": true
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
           "dev": true,
           "requires": {
-            "ansi-regex": "^2.0.0"
+            "has-flag": "^4.0.0"
           }
         }
       }
     },
+    "cli-spinners": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npm.taobao.org/cli-spinners/download/cli-spinners-2.5.0.tgz?cache=0&sync_timestamp=1602505897921&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-spinners%2Fdownload%2Fcli-spinners-2.5.0.tgz",
+      "integrity": "sha1-EnY+RyUb+VHLdcIB36WP8byy0Ec=",
+      "dev": true
+    },
     "cli-width": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-2.2.0.tgz",
-      "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/cli-width/download/cli-width-3.0.0.tgz",
+      "integrity": "sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=",
       "dev": true
     },
     "clipboard": {
       "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/clipboard/download/clipboard-2.0.4.tgz?cache=0&sync_timestamp=1583389652647&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fclipboard%2Fdownload%2Fclipboard-2.0.4.tgz",
+      "resolved": "https://registry.npm.taobao.org/clipboard/download/clipboard-2.0.4.tgz",
       "integrity": "sha1-g22v1mzw/qXXHOXVsL9ulYAJES0=",
       "requires": {
         "good-listener": "^1.2.2",
@@ -3643,50 +3508,36 @@
       }
     },
     "clipboardy": {
-      "version": "1.2.3",
-      "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-1.2.3.tgz",
-      "integrity": "sha1-BSY2G/eHJMHyC+JI1CjjZUM8B+8=",
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/clipboardy/download/clipboardy-2.3.0.tgz",
+      "integrity": "sha1-PCkDZQxo5GqRs4iYW8J3QofbopA=",
       "dev": true,
       "requires": {
-        "arch": "^2.1.0",
-        "execa": "^0.8.0"
+        "arch": "^2.1.1",
+        "execa": "^1.0.0",
+        "is-wsl": "^2.1.1"
       },
       "dependencies": {
-        "execa": {
-          "version": "0.8.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz",
-          "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
+        "is-wsl": {
+          "version": "2.2.0",
+          "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-2.2.0.tgz",
+          "integrity": "sha1-dKTHbnfKn9P5MvKQwX6jJs0VcnE=",
           "dev": true,
           "requires": {
-            "cross-spawn": "^5.0.1",
-            "get-stream": "^3.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
+            "is-docker": "^2.0.0"
           }
         }
       }
     },
     "cliui": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-4.1.0.tgz",
-      "integrity": "sha1-NIQi2+gtgAswIu709qwQvy5NG0k=",
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-6.0.0.tgz",
+      "integrity": "sha1-UR1wLAxOQcoVbX0OlgIfI+EyJbE=",
+      "dev": true,
       "requires": {
-        "string-width": "^2.1.1",
-        "strip-ansi": "^4.0.0",
-        "wrap-ansi": "^2.0.0"
-      },
-      "dependencies": {
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        }
+        "string-width": "^4.2.0",
+        "strip-ansi": "^6.0.0",
+        "wrap-ansi": "^6.2.0"
       }
     },
     "clone": {
@@ -3706,12 +3557,6 @@
         "shallow-clone": "^3.0.0"
       }
     },
-    "co": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npm.taobao.org/co/download/co-4.6.0.tgz",
-      "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
-      "dev": true
-    },
     "coa": {
       "version": "2.0.2",
       "resolved": "https://registry.npm.taobao.org/coa/download/coa-2.0.2.tgz",
@@ -3723,31 +3568,10 @@
         "q": "^1.1.2"
       }
     },
-    "code-point-at": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/code-point-at/download/code-point-at-1.1.0.tgz",
-      "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
-    },
-    "codemirror": {
-      "version": "5.45.0",
-      "resolved": "https://registry.npm.taobao.org/codemirror/download/codemirror-5.45.0.tgz",
-      "integrity": "sha1-2167s79EAoxoQFPzlU0BHvzsJ60="
-    },
     "codepage": {
-      "version": "1.14.0",
-      "resolved": "https://registry.npm.taobao.org/codepage/download/codepage-1.14.0.tgz",
-      "integrity": "sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=",
-      "requires": {
-        "commander": "~2.14.1",
-        "exit-on-epipe": "~1.0.1"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.14.1",
-          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.14.1.tgz",
-          "integrity": "sha1-IjUSPjevjKPGXfRbAm29NXsBuao="
-        }
-      }
+      "version": "1.15.0",
+      "resolved": "https://r2.cnpmjs.org/codepage/-/codepage-1.15.0.tgz",
+      "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA=="
     },
     "collection-visit": {
       "version": "1.0.0",
@@ -3760,19 +3584,20 @@
       }
     },
     "color": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolor%2Fdownload%2Fcolor-3.1.2.tgz",
-      "integrity": "sha1-aBSOf4XUGtdknF+oyBBvCY0inhA=",
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/color/download/color-3.1.3.tgz",
+      "integrity": "sha1-ymf7TnuX1hHc3jns7tQiBn2RWW4=",
       "dev": true,
       "requires": {
         "color-convert": "^1.9.1",
-        "color-string": "^1.5.2"
+        "color-string": "^1.5.4"
       }
     },
     "color-convert": {
       "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"
       }
@@ -3780,18 +3605,25 @@
     "color-name": {
       "version": "1.1.3",
       "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.3.tgz",
-      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+      "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+      "dev": true
     },
     "color-string": {
-      "version": "1.5.3",
-      "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.3.tgz",
-      "integrity": "sha1-ybvF8BtYtUkvPWhXRZy2WQziBMw=",
+      "version": "1.5.4",
+      "resolved": "https://registry.npm.taobao.org/color-string/download/color-string-1.5.4.tgz",
+      "integrity": "sha1-3VHNJc/ulT0Tj+QAI3LMPQ5QTLY=",
       "dev": true,
       "requires": {
         "color-name": "^1.0.0",
         "simple-swizzle": "^0.2.2"
       }
     },
+    "colorette": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/colorette/download/colorette-1.2.1.tgz",
+      "integrity": "sha1-TQuSEyXBT6+SYzCGpTbbbolWSxs=",
+      "dev": true
+    },
     "combined-stream": {
       "version": "1.0.8",
       "resolved": "https://registry.npm.taobao.org/combined-stream/download/combined-stream-1.0.8.tgz",
@@ -3802,9 +3634,10 @@
       }
     },
     "commander": {
-      "version": "2.17.1",
-      "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz",
-      "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78="
+      "version": "2.20.3",
+      "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1607933281807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz",
+      "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
+      "dev": true
     },
     "commondir": {
       "version": "1.0.1",
@@ -3850,15 +3683,26 @@
         },
         "debug": {
           "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
           "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
           }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
         }
       }
     },
+    "compute-scroll-into-view": {
+      "version": "1.0.20",
+      "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz",
+      "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg=="
+    },
     "concat-map": {
       "version": "0.0.1",
       "resolved": "https://registry.npm.taobao.org/concat-map/download/concat-map-0.0.1.tgz",
@@ -3877,134 +3721,27 @@
         "typedarray": "^0.0.6"
       }
     },
-    "condense-newlines": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/condense-newlines/download/condense-newlines-0.2.1.tgz",
-      "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=",
-      "dev": true,
-      "requires": {
-        "extend-shallow": "^2.0.1",
-        "is-whitespace": "^0.3.0",
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "config-chain": {
-      "version": "1.1.12",
-      "resolved": "https://registry.npm.taobao.org/config-chain/download/config-chain-1.1.12.tgz",
-      "integrity": "sha1-D96NCRIA616AjK8l/mGMAvSOTvo=",
-      "dev": true,
-      "requires": {
-        "ini": "^1.3.4",
-        "proto-list": "~1.2.1"
-      }
-    },
-    "connect": {
-      "version": "3.6.6",
-      "resolved": "https://registry.npm.taobao.org/connect/download/connect-3.6.6.tgz",
-      "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=",
-      "dev": true,
-      "requires": {
-        "debug": "2.6.9",
-        "finalhandler": "1.1.0",
-        "parseurl": "~1.3.2",
-        "utils-merge": "1.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "finalhandler": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.0.tgz",
-          "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=",
-          "dev": true,
-          "requires": {
-            "debug": "2.6.9",
-            "encodeurl": "~1.0.1",
-            "escape-html": "~1.0.3",
-            "on-finished": "~2.3.0",
-            "parseurl": "~1.3.2",
-            "statuses": "~1.3.1",
-            "unpipe": "~1.0.0"
-          }
-        },
-        "statuses": {
-          "version": "1.3.1",
-          "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.3.1.tgz",
-          "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=",
-          "dev": true
-        }
-      }
-    },
-    "connect-history-api-fallback": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz",
-      "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
-      "dev": true
-    },
-    "console-browserify": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz",
-      "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=",
-      "dev": true
-    },
-    "console-control-strings": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/console-control-strings/download/console-control-strings-1.1.0.tgz",
-      "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=",
-      "dev": true
-    },
-    "consolidate": {
-      "version": "0.15.1",
-      "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz",
-      "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=",
+    "connect-history-api-fallback": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/connect-history-api-fallback/download/connect-history-api-fallback-1.6.0.tgz",
+      "integrity": "sha1-izIIk1kwjRERFdgcrT/Oq4iPl7w=",
+      "dev": true
+    },
+    "console-browserify": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/console-browserify/download/console-browserify-1.2.0.tgz",
+      "integrity": "sha1-ZwY871fOts9Jk6KrOlWECujEkzY=",
+      "dev": true
+    },
+    "consolidate": {
+      "version": "0.15.1",
+      "resolved": "https://registry.npm.taobao.org/consolidate/download/consolidate-0.15.1.tgz?cache=0&sync_timestamp=1599596863404&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fconsolidate%2Fdownload%2Fconsolidate-0.15.1.tgz",
+      "integrity": "sha1-IasEMjXHGgfUXZqtmFk7DbpWurc=",
       "dev": true,
       "requires": {
         "bluebird": "^3.1.1"
       }
     },
-    "constant-case": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/constant-case/download/constant-case-2.0.0.tgz",
-      "integrity": "sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY=",
-      "dev": true,
-      "requires": {
-        "snake-case": "^2.1.0",
-        "upper-case": "^1.1.1"
-      }
-    },
     "constants-browserify": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/constants-browserify/download/constants-browserify-1.0.0.tgz",
@@ -4037,7 +3774,7 @@
     },
     "cookie": {
       "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz?cache=0&sync_timestamp=1587525873712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz",
       "integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=",
       "dev": true
     },
@@ -4068,40 +3805,64 @@
       "dev": true
     },
     "copy-webpack-plugin": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-4.6.0.tgz",
-      "integrity": "sha1-5/QN2KaEd9QF3Rt6hUquMksVi64=",
+      "version": "5.1.2",
+      "resolved": "https://registry.npm.taobao.org/copy-webpack-plugin/download/copy-webpack-plugin-5.1.2.tgz?cache=0&sync_timestamp=1608126698047&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcopy-webpack-plugin%2Fdownload%2Fcopy-webpack-plugin-5.1.2.tgz",
+      "integrity": "sha1-ioieHcr6bJHGzUvhrRWPHTgjuuI=",
       "dev": true,
       "requires": {
-        "cacache": "^10.0.4",
-        "find-cache-dir": "^1.0.0",
+        "cacache": "^12.0.3",
+        "find-cache-dir": "^2.1.0",
+        "glob-parent": "^3.1.0",
         "globby": "^7.1.1",
-        "is-glob": "^4.0.0",
-        "loader-utils": "^1.1.0",
+        "is-glob": "^4.0.1",
+        "loader-utils": "^1.2.3",
         "minimatch": "^3.0.4",
-        "p-limit": "^1.0.0",
-        "serialize-javascript": "^1.4.0"
+        "normalize-path": "^3.0.0",
+        "p-limit": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "serialize-javascript": "^4.0.0",
+        "webpack-log": "^2.0.0"
       },
       "dependencies": {
-        "cacache": {
-          "version": "10.0.4",
-          "resolved": "https://registry.npm.taobao.org/cacache/download/cacache-10.0.4.tgz",
-          "integrity": "sha1-ZFI2eZnv+dQYiu/ZoU6dfGomNGA=",
+        "find-cache-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-2.1.0.tgz",
+          "integrity": "sha1-jQ+UzRP+Q8bHwmGg2GEVypGMBfc=",
           "dev": true,
           "requires": {
-            "bluebird": "^3.5.1",
-            "chownr": "^1.0.1",
-            "glob": "^7.1.2",
-            "graceful-fs": "^4.1.11",
-            "lru-cache": "^4.1.1",
-            "mississippi": "^2.0.0",
-            "mkdirp": "^0.5.1",
-            "move-concurrently": "^1.0.1",
-            "promise-inflight": "^1.0.1",
-            "rimraf": "^2.6.2",
-            "ssri": "^5.2.4",
-            "unique-filename": "^1.1.0",
-            "y18n": "^4.0.0"
+            "commondir": "^1.0.1",
+            "make-dir": "^2.0.0",
+            "pkg-dir": "^3.0.0"
+          }
+        },
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
+          "dev": true,
+          "requires": {
+            "locate-path": "^3.0.0"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
           }
         },
         "globby": {
@@ -4116,78 +3877,117 @@
             "ignore": "^3.3.5",
             "pify": "^3.0.0",
             "slash": "^1.0.0"
+          },
+          "dependencies": {
+            "pify": {
+              "version": "3.0.0",
+              "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz",
+              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+              "dev": true
+            }
           }
         },
-        "mississippi": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-2.0.0.tgz",
-          "integrity": "sha1-NEKlCPr8KFAEhv7qmUCWduTuWm8=",
+        "ignore": {
+          "version": "3.3.10",
+          "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz",
+          "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
+          "dev": true
+        },
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
           "dev": true,
           "requires": {
-            "concat-stream": "^1.5.0",
-            "duplexify": "^3.4.2",
-            "end-of-stream": "^1.1.0",
-            "flush-write-stream": "^1.0.0",
-            "from2": "^2.1.0",
-            "parallel-transform": "^1.1.0",
-            "pump": "^2.0.1",
-            "pumpify": "^1.3.3",
-            "stream-each": "^1.1.0",
-            "through2": "^2.0.0"
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
           }
         },
-        "pump": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/pump/download/pump-2.0.1.tgz",
-          "integrity": "sha1-Ejma3W5M91Jtlzy8i1zi4pCLOQk=",
+        "make-dir": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz",
+          "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
           "dev": true,
           "requires": {
-            "end-of-stream": "^1.1.0",
-            "once": "^1.3.1"
+            "pify": "^4.0.1",
+            "semver": "^5.6.0"
           }
         },
-        "serialize-javascript": {
-          "version": "1.9.1",
-          "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-1.9.1.tgz?cache=0&sync_timestamp=1581887711256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-1.9.1.tgz",
-          "integrity": "sha1-z8IArvd7YAxH2pu4FJyUPnmML9s=",
-          "dev": true
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
+          "dev": true,
+          "requires": {
+            "p-limit": "^2.0.0"
+          }
         },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
           "dev": true
         },
-        "ssri": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npm.taobao.org/ssri/download/ssri-5.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-5.3.0.tgz",
-          "integrity": "sha1-ujhyycbTOgcEp9cf8EXl7EiZnQY=",
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
           "dev": true,
           "requires": {
-            "safe-buffer": "^5.1.1"
+            "find-up": "^3.0.0"
           }
         },
-        "y18n": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.0.tgz",
-          "integrity": "sha1-le+U+F7MgdAHwmThkKEg8KPIVms=",
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        },
+        "slash": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
+          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
           "dev": true
         }
       }
     },
     "core-js": {
-      "version": "2.6.11",
-      "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-2.6.11.tgz",
-      "integrity": "sha1-OIMUafmSK97Y7iHJ3EaYXgOZMIw="
+      "version": "3.8.1",
+      "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.8.1.tgz?cache=0&sync_timestamp=1607215907966&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js%2Fdownload%2Fcore-js-3.8.1.tgz",
+      "integrity": "sha1-9RUjZorIopTRKFw7nbRAJf2mbUc="
+    },
+    "core-js-compat": {
+      "version": "3.8.1",
+      "resolved": "https://registry.npm.taobao.org/core-js-compat/download/core-js-compat-3.8.1.tgz?cache=0&sync_timestamp=1607215923501&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcore-js-compat%2Fdownload%2Fcore-js-compat-3.8.1.tgz",
+      "integrity": "sha1-jR3dNB1mC6YZTL4M5g9MeUyHo24=",
+      "dev": true,
+      "requires": {
+        "browserslist": "^4.15.0",
+        "semver": "7.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.0.0.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.0.0.tgz",
+          "integrity": "sha1-XzyjV2HkfgWyBsba/yz4FPAxa44=",
+          "dev": true
+        }
+      }
     },
     "core-util-is": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz",
-      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
+      "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
+      "dev": true
     },
     "cosmiconfig": {
       "version": "5.2.1",
-      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz?cache=0&sync_timestamp=1572710769619&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcosmiconfig%2Fdownload%2Fcosmiconfig-5.2.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/cosmiconfig/download/cosmiconfig-5.2.1.tgz",
       "integrity": "sha1-BA9yaAnFked6F8CjYmykW08Wixo=",
       "dev": true,
       "requires": {
@@ -4210,22 +4010,37 @@
       }
     },
     "crc-32": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/crc-32/download/crc-32-1.2.0.tgz",
-      "integrity": "sha1-yy224puIUI4y2d0OwWk+e0Ghggg=",
+      "version": "1.2.1",
+      "resolved": "https://r.cnpmjs.org/crc-32/-/crc-32-1.2.1.tgz",
+      "integrity": "sha512-Dn/xm/1vFFgs3nfrpEVScHoIslO9NZRITWGz/1E/St6u4xw99vfZzVkW0OSnzx2h9egej9xwMCEut6sqwokM/w==",
       "requires": {
         "exit-on-epipe": "~1.0.1",
-        "printj": "~1.1.0"
+        "printj": "~1.3.1"
+      },
+      "dependencies": {
+        "printj": {
+          "version": "1.3.1",
+          "resolved": "https://r.cnpmjs.org/printj/-/printj-1.3.1.tgz",
+          "integrity": "sha512-GA3TdL8szPK4AQ2YnOe/b+Y1jUFwmmGMMK/qbY7VcE3Z7FU8JstbKiKRzO6CIiAKPhTO8m01NoQ0V5f3jc4OGg=="
+        }
       }
     },
     "create-ecdh": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.3.tgz",
-      "integrity": "sha1-yREbbzMEXEaX8UR4f5JUzcd8Rf8=",
+      "version": "4.0.4",
+      "resolved": "https://registry.npm.taobao.org/create-ecdh/download/create-ecdh-4.0.4.tgz",
+      "integrity": "sha1-1uf0v/pmc2CFoHYv06YyaE2rzE4=",
       "dev": true,
       "requires": {
         "bn.js": "^4.1.0",
-        "elliptic": "^6.0.0"
+        "elliptic": "^6.5.3"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
+          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
+          "dev": true
+        }
       }
     },
     "create-hash": {
@@ -4256,11 +4071,14 @@
       }
     },
     "cross-spawn": {
-      "version": "5.1.0",
-      "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-5.1.0.tgz",
-      "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+      "version": "6.0.5",
+      "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz",
+      "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+      "dev": true,
       "requires": {
-        "lru-cache": "^4.0.1",
+        "nice-try": "^1.0.4",
+        "path-key": "^2.0.1",
+        "semver": "^5.5.0",
         "shebang-command": "^1.2.0",
         "which": "^1.2.9"
       }
@@ -4284,25 +4102,10 @@
         "randomfill": "^1.0.3"
       }
     },
-    "css": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npm.taobao.org/css/download/css-2.2.4.tgz",
-      "integrity": "sha1-xkZ1XHOXHyu6amAeLPL9cbEpiSk=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.3",
-        "source-map": "^0.6.1",
-        "source-map-resolve": "^0.5.2",
-        "urix": "^0.1.0"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-          "dev": true
-        }
-      }
+    "crypto-js": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/crypto-js/download/crypto-js-4.0.0.tgz",
+      "integrity": "sha1-KQSrJnep0EKFai6i74DekuSjbcw="
     },
     "css-color-names": {
       "version": "0.0.4",
@@ -4312,7 +4115,7 @@
     },
     "css-declaration-sorter": {
       "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz?cache=0&sync_timestamp=1582155815799&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-declaration-sorter%2Fdownload%2Fcss-declaration-sorter-4.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/css-declaration-sorter/download/css-declaration-sorter-4.0.1.tgz?cache=0&sync_timestamp=1604519271783&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-declaration-sorter%2Fdownload%2Fcss-declaration-sorter-4.0.1.tgz",
       "integrity": "sha1-wZiUD2OnbX42wecQGLABchBUyyI=",
       "dev": true,
       "requires": {
@@ -4322,8 +4125,9 @@
     },
     "css-loader": {
       "version": "3.6.0",
-      "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1592056820460&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/css-loader/download/css-loader-3.6.0.tgz?cache=0&sync_timestamp=1604507120816&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-loader%2Fdownload%2Fcss-loader-3.6.0.tgz",
       "integrity": "sha1-Lkssfm4tJ/jI8o9hv/zS5ske9kU=",
+      "dev": true,
       "requires": {
         "camelcase": "^5.3.1",
         "cssesc": "^3.0.0",
@@ -4340,70 +4144,23 @@
         "semver": "^6.3.0"
       },
       "dependencies": {
-        "ajv": {
-          "version": "6.12.3",
-          "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-6.12.3.tgz?cache=0&sync_timestamp=1593878551850&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-6.12.3.tgz",
-          "integrity": "sha1-GMWvOKER3etPJpe9eNaKvByr1wY=",
-          "requires": {
-            "fast-deep-equal": "^3.1.1",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.4.1",
-            "uri-js": "^4.2.2"
-          }
-        },
         "camelcase": {
           "version": "5.3.1",
           "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz",
-          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA="
-        },
-        "postcss": {
-          "version": "7.0.32",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-7.0.32.tgz",
-          "integrity": "sha1-QxDW7jRwU9o0M9sr5JKIPWLOxZ0=",
-          "requires": {
-            "chalk": "^2.4.2",
-            "source-map": "^0.6.1",
-            "supports-color": "^6.1.0"
-          }
-        },
-        "postcss-value-parser": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-4.1.0.tgz",
-          "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss="
-        },
-        "schema-utils": {
-          "version": "2.7.0",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.0.tgz",
-          "integrity": "sha1-FxUfdtjq5n+793lgwzxnatn078c=",
-          "requires": {
-            "@types/json-schema": "^7.0.4",
-            "ajv": "^6.12.2",
-            "ajv-keywords": "^3.4.1"
-          }
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
         },
         "semver": {
           "version": "6.3.0",
-          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1586886267748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
-          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0="
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
-        },
-        "supports-color": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
-          "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
-          "requires": {
-            "has-flag": "^3.0.0"
-          }
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
         }
       }
     },
     "css-select": {
       "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-2.1.0.tgz?cache=0&sync_timestamp=1607468308878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-select%2Fdownload%2Fcss-select-2.1.0.tgz",
       "integrity": "sha1-ajRlM1ZjWTSoG6ymjQJVQyEF2+8=",
       "dev": true,
       "requires": {
@@ -4420,31 +4177,34 @@
       "dev": true
     },
     "css-tree": {
-      "version": "1.0.0-alpha.28",
-      "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.28.tgz?cache=0&sync_timestamp=1575583542748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.28.tgz",
-      "integrity": "sha1-joloGQ2IbJR3vI1h6W9hrz9/+n8=",
+      "version": "1.0.0-alpha.37",
+      "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.37.tgz?cache=0&sync_timestamp=1606404040784&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.37.tgz",
+      "integrity": "sha1-mL69YsTB2flg7DQM+fdSLjBwmiI=",
       "dev": true,
       "requires": {
-        "mdn-data": "~1.1.0",
-        "source-map": "^0.5.3"
+        "mdn-data": "2.0.4",
+        "source-map": "^0.6.1"
+      },
+      "dependencies": {
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
+        }
       }
     },
-    "css-url-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/css-url-regex/download/css-url-regex-1.1.0.tgz",
-      "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
-      "dev": true
-    },
     "css-what": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.2.1.tgz",
-      "integrity": "sha1-9KjxJCEGRiG0VnVeNKA6LCLfXaE=",
+      "version": "3.4.2",
+      "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-3.4.2.tgz?cache=0&sync_timestamp=1602570970779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-3.4.2.tgz",
+      "integrity": "sha1-6nAm/LAXd+295SEk4h8yfnrpUOQ=",
       "dev": true
     },
     "cssesc": {
       "version": "3.0.0",
       "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
-      "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4="
+      "integrity": "sha1-N3QZGZA7hoVl4cCep0dEXNGJg+4=",
+      "dev": true
     },
     "cssnano": {
       "version": "4.1.10",
@@ -4460,7 +4220,7 @@
     },
     "cssnano-preset-default": {
       "version": "4.0.7",
-      "resolved": "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.7.tgz",
+      "resolved": "https://registry.npm.taobao.org/cssnano-preset-default/download/cssnano-preset-default-4.0.7.tgz?cache=0&sync_timestamp=1603212703768&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssnano-preset-default%2Fdownload%2Fcssnano-preset-default-4.0.7.tgz",
       "integrity": "sha1-UexmLM/KD4izltzZZ5zbkxvhf3Y=",
       "dev": true,
       "requires": {
@@ -4524,49 +4284,42 @@
       "dev": true
     },
     "csso": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npm.taobao.org/csso/download/csso-3.5.1.tgz",
-      "integrity": "sha1-e564vmFiiXPBsmHhadLwJACOdYs=",
+      "version": "4.2.0",
+      "resolved": "https://registry.npm.taobao.org/csso/download/csso-4.2.0.tgz?cache=0&sync_timestamp=1606408790645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsso%2Fdownload%2Fcsso-4.2.0.tgz",
+      "integrity": "sha1-6jpWE0bo3J9UbW/r7dUBh884lSk=",
       "dev": true,
       "requires": {
-        "css-tree": "1.0.0-alpha.29"
+        "css-tree": "^1.1.2"
       },
       "dependencies": {
         "css-tree": {
-          "version": "1.0.0-alpha.29",
-          "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.0.0-alpha.29.tgz?cache=0&sync_timestamp=1575583542748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.0.0-alpha.29.tgz",
-          "integrity": "sha1-P6nU7zFCy9HDAedmTB81K9gvWjk=",
+          "version": "1.1.2",
+          "resolved": "https://registry.npm.taobao.org/css-tree/download/css-tree-1.1.2.tgz?cache=0&sync_timestamp=1606404040784&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-tree%2Fdownload%2Fcss-tree-1.1.2.tgz",
+          "integrity": "sha1-muOTtdr9fa6KYiR1yux409j717U=",
           "dev": true,
           "requires": {
-            "mdn-data": "~1.1.0",
-            "source-map": "^0.5.3"
+            "mdn-data": "2.0.14",
+            "source-map": "^0.6.1"
           }
+        },
+        "mdn-data": {
+          "version": "2.0.14",
+          "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.14.tgz",
+          "integrity": "sha1-cRP8QoGRfWPOKbQ0RvcB5owlulA=",
+          "dev": true
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
         }
       }
     },
-    "cssom": {
-      "version": "0.3.8",
-      "resolved": "https://registry.npm.taobao.org/cssom/download/cssom-0.3.8.tgz?cache=0&sync_timestamp=1573719337707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcssom%2Fdownload%2Fcssom-0.3.8.tgz",
-      "integrity": "sha1-nxJ29bK0Y/IRTT8sdSUK+MGjb0o=",
-      "dev": true
-    },
-    "cssstyle": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/cssstyle/download/cssstyle-1.4.0.tgz",
-      "integrity": "sha1-nTEyginTxWXGHlhrAgQaKPzNzPE=",
-      "dev": true,
-      "requires": {
-        "cssom": "0.3.x"
-      }
-    },
-    "currently-unhandled": {
-      "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
-      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
-      "dev": true,
-      "requires": {
-        "array-find-index": "^1.0.1"
-      }
+    "csstype": {
+      "version": "2.6.14",
+      "resolved": "https://registry.npm.taobao.org/csstype/download/csstype-2.6.14.tgz?cache=0&sync_timestamp=1605258867356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcsstype%2Fdownload%2Fcsstype-2.6.14.tgz",
+      "integrity": "sha1-AEgipAUDRbVa1NzAC+HZzy9Clt4="
     },
     "cyclist": {
       "version": "1.0.1",
@@ -4576,61 +4329,32 @@
     },
     "dashdash": {
       "version": "1.14.1",
-      "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/dashdash/download/dashdash-1.14.1.tgz?cache=0&sync_timestamp=1601073333186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdashdash%2Fdownload%2Fdashdash-1.14.1.tgz",
       "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
       "dev": true,
       "requires": {
         "assert-plus": "^1.0.0"
       }
     },
-    "data-urls": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/data-urls/download/data-urls-1.1.0.tgz?cache=0&sync_timestamp=1577997348324&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdata-urls%2Fdownload%2Fdata-urls-1.1.0.tgz",
-      "integrity": "sha1-Fe4Fgrql4iu1nHcUDaj5x2lju/4=",
-      "dev": true,
-      "requires": {
-        "abab": "^2.0.0",
-        "whatwg-mimetype": "^2.2.0",
-        "whatwg-url": "^7.0.0"
-      },
-      "dependencies": {
-        "whatwg-url": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-7.1.0.tgz?cache=0&sync_timestamp=1578023109671&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-7.1.0.tgz",
-          "integrity": "sha1-wsSS8eymEpiO/T0iZr4bn8YXDQY=",
-          "dev": true,
-          "requires": {
-            "lodash.sortby": "^4.7.0",
-            "tr46": "^1.0.1",
-            "webidl-conversions": "^4.0.2"
-          }
-        }
-      }
-    },
-    "date-fns": {
-      "version": "1.30.1",
-      "resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-1.30.1.tgz",
-      "integrity": "sha1-LnG/CxGRU9u0zE6I2epaz7UNwFw=",
-      "dev": true
-    },
-    "de-indent": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
-      "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
-      "dev": true
+    "dayjs": {
+      "version": "1.11.12",
+      "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.12.tgz",
+      "integrity": "sha512-Rt2g+nTbLlDWZTwwrIXjy9MeiZmSDI375FvZs72ngxx8PDC6YXOeR3q5LAuPzjZQxhiWdRKac7RKV+YyQYfYIg=="
     },
     "debug": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.1.0.tgz",
-      "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=",
+      "version": "4.3.1",
+      "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.3.1.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-4.3.1.tgz",
+      "integrity": "sha1-8NIpxQXgxtjEmsVT0bE9wYP2su4=",
+      "dev": true,
       "requires": {
-        "ms": "2.0.0"
+        "ms": "2.1.2"
       }
     },
     "decamelize": {
       "version": "1.2.0",
       "resolved": "https://registry.npm.taobao.org/decamelize/download/decamelize-1.2.0.tgz",
-      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+      "dev": true
     },
     "decode-uri-component": {
       "version": "0.2.0",
@@ -4638,15 +4362,9 @@
       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
       "dev": true
     },
-    "dedent": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npm.taobao.org/dedent/download/dedent-0.7.0.tgz",
-      "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
-      "dev": true
-    },
     "deep-equal": {
       "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/deep-equal/download/deep-equal-1.1.1.tgz?cache=0&sync_timestamp=1606859943631&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": {
@@ -4667,66 +4385,124 @@
     "deepmerge": {
       "version": "1.5.2",
       "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.5.2.tgz",
-      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M="
+      "integrity": "sha1-EEmdhohEza1P7ghC34x/bwyVp1M=",
+      "dev": true
     },
     "default-gateway": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz",
-      "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=",
+      "version": "5.0.5",
+      "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-5.0.5.tgz",
+      "integrity": "sha1-T9a9XShV05s0zFpZUFSG6ar8mxA=",
       "dev": true,
       "requires": {
-        "execa": "^1.0.0",
-        "ip-regex": "^2.1.0"
+        "execa": "^3.3.0"
       },
       "dependencies": {
         "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz",
-          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz",
+          "integrity": "sha1-9zqFudXUHQRVUcF34ogtSshXKKY=",
           "dev": true,
           "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
+            "path-key": "^3.1.0",
+            "shebang-command": "^2.0.0",
+            "which": "^2.0.1"
           }
         },
         "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
-          "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
+          "version": "3.4.0",
+          "resolved": "https://registry.npm.taobao.org/execa/download/execa-3.4.0.tgz?cache=0&sync_timestamp=1606970975645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-3.4.0.tgz",
+          "integrity": "sha1-wI7UVQ72XYWPrCaf/IVyRG8364k=",
           "dev": true,
           "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
+            "cross-spawn": "^7.0.0",
+            "get-stream": "^5.0.0",
+            "human-signals": "^1.1.1",
+            "is-stream": "^2.0.0",
+            "merge-stream": "^2.0.0",
+            "npm-run-path": "^4.0.0",
+            "onetime": "^5.1.0",
+            "p-finally": "^2.0.0",
+            "signal-exit": "^3.0.2",
+            "strip-final-newline": "^2.0.0"
           }
         },
         "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
-          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-5.2.0.tgz",
+          "integrity": "sha1-SWaheV7lrOZecGxLe+txJX1uItM=",
           "dev": true,
           "requires": {
             "pump": "^3.0.0"
           }
+        },
+        "is-stream": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-2.0.0.tgz",
+          "integrity": "sha1-venDJoDW+uBBKdasnZIc54FfeOM=",
+          "dev": true
+        },
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
+          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+          "dev": true
+        },
+        "npm-run-path": {
+          "version": "4.0.1",
+          "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-4.0.1.tgz",
+          "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=",
+          "dev": true,
+          "requires": {
+            "path-key": "^3.0.0"
+          }
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz",
+          "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
+          "dev": true,
+          "requires": {
+            "mimic-fn": "^2.1.0"
+          }
+        },
+        "p-finally": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-2.0.1.tgz?cache=0&sync_timestamp=1560955759606&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-finally%2Fdownload%2Fp-finally-2.0.1.tgz",
+          "integrity": "sha1-vW/KqcVZoJa2gIBvTWV7Pw8kBWE=",
+          "dev": true
+        },
+        "path-key": {
+          "version": "3.1.1",
+          "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-3.1.1.tgz?cache=0&sync_timestamp=1574441322626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-3.1.1.tgz",
+          "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=",
+          "dev": true
+        },
+        "shebang-command": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-2.0.0.tgz",
+          "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=",
+          "dev": true,
+          "requires": {
+            "shebang-regex": "^3.0.0"
+          }
+        },
+        "shebang-regex": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-3.0.0.tgz",
+          "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=",
+          "dev": true
+        },
+        "which": {
+          "version": "2.0.2",
+          "resolved": "https://registry.npm.taobao.org/which/download/which-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-2.0.2.tgz",
+          "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=",
+          "dev": true,
+          "requires": {
+            "isexe": "^2.0.0"
+          }
         }
       }
     },
-    "default-require-extensions": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/default-require-extensions/download/default-require-extensions-1.0.0.tgz",
-      "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=",
-      "dev": true,
-      "requires": {
-        "strip-bom": "^2.0.0"
-      }
-    },
     "defaults": {
       "version": "1.0.3",
       "resolved": "https://registry.npm.taobao.org/defaults/download/defaults-1.0.3.tgz",
@@ -4788,7 +4564,7 @@
     },
     "del": {
       "version": "4.1.1",
-      "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/del/download/del-4.1.1.tgz?cache=0&sync_timestamp=1601076741536&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdel%2Fdownload%2Fdel-4.1.1.tgz",
       "integrity": "sha1-no8RciLqRKMf86FWwEm5kFKp8LQ=",
       "dev": true,
       "requires": {
@@ -4822,10 +4598,10 @@
             }
           }
         },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz",
-          "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
+        "p-map": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz",
+          "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=",
           "dev": true
         }
       }
@@ -4841,12 +4617,6 @@
       "resolved": "https://registry.npm.taobao.org/delegate/download/delegate-3.2.0.tgz",
       "integrity": "sha1-tmtxwxWFIuirV0T3INjKDCr1kWY="
     },
-    "delegates": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/delegates/download/delegates-1.0.0.tgz",
-      "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
-      "dev": true
-    },
     "depd": {
       "version": "1.1.2",
       "resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz",
@@ -4869,39 +4639,12 @@
       "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
       "dev": true
     },
-    "detect-file": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/detect-file/download/detect-file-1.0.0.tgz",
-      "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
-      "dev": true
-    },
-    "detect-indent": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/detect-indent/download/detect-indent-4.0.0.tgz",
-      "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",
-      "dev": true,
-      "requires": {
-        "repeating": "^2.0.0"
-      }
-    },
-    "detect-newline": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/detect-newline/download/detect-newline-2.1.0.tgz",
-      "integrity": "sha1-9B8cEL5LAOh7XxPaaAdZ8sW/0+I=",
-      "dev": true
-    },
     "detect-node": {
       "version": "2.0.4",
       "resolved": "https://registry.npm.taobao.org/detect-node/download/detect-node-2.0.4.tgz",
       "integrity": "sha1-AU7o+PZpxcWAI9pkuBecCDooxGw=",
       "dev": true
     },
-    "diff": {
-      "version": "3.5.0",
-      "resolved": "https://registry.npm.taobao.org/diff/download/diff-3.5.0.tgz",
-      "integrity": "sha1-gAwN0eCov7yVg1wgKtIg/jF+WhI=",
-      "dev": true
-    },
     "diffie-hellman": {
       "version": "5.0.3",
       "resolved": "https://registry.npm.taobao.org/diffie-hellman/download/diffie-hellman-5.0.3.tgz",
@@ -4911,6 +4654,14 @@
         "bn.js": "^4.1.0",
         "miller-rabin": "^4.0.0",
         "randombytes": "^2.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
+          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
+          "dev": true
+        }
       }
     },
     "dir-glob": {
@@ -4948,15 +4699,19 @@
       }
     },
     "doctrine": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-2.1.0.tgz",
-      "integrity": "sha1-XNAfwQFiG0LEzX9dGmYkNxbT850=",
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz",
+      "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
       "dev": true,
-      "optional": true,
       "requires": {
         "esutils": "^2.0.2"
       }
     },
+    "dom-align": {
+      "version": "1.12.4",
+      "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz",
+      "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw=="
+    },
     "dom-converter": {
       "version": "0.2.0",
       "resolved": "https://registry.npm.taobao.org/dom-converter/download/dom-converter-0.2.0.tgz",
@@ -4966,15 +4721,14 @@
         "utila": "~0.4"
       }
     },
-    "dom-event-types": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/dom-event-types/download/dom-event-types-1.0.0.tgz",
-      "integrity": "sha1-WDCgop4b+Df+UKcM2ApZcjKBPK4=",
-      "dev": true
+    "dom-scroll-into-view": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz",
+      "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w=="
     },
     "dom-serializer": {
       "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1573447907918&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/dom-serializer/download/dom-serializer-0.2.2.tgz?cache=0&sync_timestamp=1607193111136&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdom-serializer%2Fdownload%2Fdom-serializer-0.2.2.tgz",
       "integrity": "sha1-GvuB9TNxcXXUeGVd68XjMtn5u1E=",
       "dev": true,
       "requires": {
@@ -4983,43 +4737,28 @@
       },
       "dependencies": {
         "domelementtype": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.0.1.tgz",
-          "integrity": "sha1-H4vf6R9aeAYydOgDtL3O326U+U0=",
-          "dev": true
-        },
-        "entities": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.0.0.tgz",
-          "integrity": "sha1-aNYITKsbB5dnVA2A5Wo5tCPkq/Q=",
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-2.1.0.tgz?cache=0&sync_timestamp=1606865969598&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-2.1.0.tgz",
+          "integrity": "sha1-qFHAgKbRw9lDRK7RUdmfZp7fWF4=",
           "dev": true
         }
       }
     },
     "domain-browser": {
       "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz?cache=0&sync_timestamp=1575879334171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomain-browser%2Fdownload%2Fdomain-browser-1.2.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/domain-browser/download/domain-browser-1.2.0.tgz",
       "integrity": "sha1-PTH1AZGmdJ3RN1p/Ui6CPULlTto=",
       "dev": true
     },
     "domelementtype": {
       "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/domelementtype/download/domelementtype-1.3.1.tgz?cache=0&sync_timestamp=1606865969598&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomelementtype%2Fdownload%2Fdomelementtype-1.3.1.tgz",
       "integrity": "sha1-0EjESzew0Qp/Kj1f7j9DM9eQSB8=",
       "dev": true
     },
-    "domexception": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/domexception/download/domexception-1.0.1.tgz",
-      "integrity": "sha1-k3RCZEymoxJh7zbj7Gd/6AVYLJA=",
-      "dev": true,
-      "requires": {
-        "webidl-conversions": "^4.0.2"
-      }
-    },
     "domhandler": {
       "version": "2.4.2",
-      "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/domhandler/download/domhandler-2.4.2.tgz?cache=0&sync_timestamp=1606872259940&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdomhandler%2Fdownload%2Fdomhandler-2.4.2.tgz",
       "integrity": "sha1-iAUJfpM9ZehVRvcm1g9euItE+AM=",
       "dev": true,
       "requires": {
@@ -5042,50 +4781,31 @@
         "domelementtype": "1"
       }
     },
-    "dot-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/dot-case/download/dot-case-2.1.1.tgz",
-      "integrity": "sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4=",
-      "dev": true,
-      "requires": {
-        "no-case": "^2.2.0"
-      }
-    },
     "dot-prop": {
-      "version": "5.2.0",
-      "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.2.0.tgz?cache=0&sync_timestamp=1572620518450&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.2.0.tgz",
-      "integrity": "sha1-w07MKVVtxF8fTCJpe29JBODMT8s=",
+      "version": "5.3.0",
+      "resolved": "https://registry.npm.taobao.org/dot-prop/download/dot-prop-5.3.0.tgz?cache=0&sync_timestamp=1605778245141&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdot-prop%2Fdownload%2Fdot-prop-5.3.0.tgz",
+      "integrity": "sha1-kMzOcIzZzYLMTcjD3dmr3VWyDog=",
       "dev": true,
       "requires": {
         "is-obj": "^2.0.0"
       }
     },
     "dotenv": {
-      "version": "6.2.0",
-      "resolved": "https://registry.npm.taobao.org/dotenv/download/dotenv-6.2.0.tgz?cache=0&sync_timestamp=1571190685588&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-6.2.0.tgz",
-      "integrity": "sha1-lBwEEFNdlCyL7PKNPzV9vZ1HYGQ=",
+      "version": "8.2.0",
+      "resolved": "https://registry.npm.taobao.org/dotenv/download/dotenv-8.2.0.tgz?cache=0&sync_timestamp=1571190685588&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdotenv%2Fdownload%2Fdotenv-8.2.0.tgz",
+      "integrity": "sha1-l+YZJZradQ7qPk6j4mvO6lQksWo=",
       "dev": true
     },
     "dotenv-expand": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-4.2.0.tgz",
-      "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
+      "version": "5.1.0",
+      "resolved": "https://registry.npm.taobao.org/dotenv-expand/download/dotenv-expand-5.1.0.tgz",
+      "integrity": "sha1-P7rwIL/XlIhAcuomsel5HUWmKfA=",
       "dev": true
     },
-    "driver.js": {
-      "version": "0.9.5",
-      "resolved": "https://registry.npm.taobao.org/driver.js/download/driver.js-0.9.5.tgz",
-      "integrity": "sha1-7oqLan06Sbq29Vy14lBVg322zaQ="
-    },
-    "dropzone": {
-      "version": "5.5.1",
-      "resolved": "https://registry.npm.taobao.org/dropzone/download/dropzone-5.5.1.tgz",
-      "integrity": "sha1-BuL1E+YdaqNj1LVW8YV09Hz3uiY="
-    },
     "duplexer": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.1.tgz",
-      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/duplexer/download/duplexer-0.1.2.tgz",
+      "integrity": "sha1-Or5DrvODX4rgd9E23c4PJ2sEAOY=",
       "dev": true
     },
     "duplexify": {
@@ -5101,9 +4821,9 @@
       }
     },
     "easy-stack": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.0.tgz",
-      "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=",
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/easy-stack/download/easy-stack-1.0.1.tgz",
+      "integrity": "sha1-iv5CZGJpiMq7EfPHBMzQyDVBEGY=",
       "dev": true
     },
     "ecc-jsbn": {
@@ -5116,34 +4836,6 @@
         "safer-buffer": "^2.1.0"
       }
     },
-    "echarts": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npm.taobao.org/echarts/download/echarts-4.2.1.tgz",
-      "integrity": "sha1-mo6jsDNU+G+CTZdiXDNM8Wll7wM=",
-      "requires": {
-        "zrender": "4.0.7"
-      }
-    },
-    "editorconfig": {
-      "version": "0.15.3",
-      "resolved": "https://registry.npm.taobao.org/editorconfig/download/editorconfig-0.15.3.tgz",
-      "integrity": "sha1-vvhMTnX7jcsM5c7o79UcFZmb78U=",
-      "dev": true,
-      "requires": {
-        "commander": "^2.19.0",
-        "lru-cache": "^4.1.5",
-        "semver": "^5.6.0",
-        "sigmund": "^1.0.1"
-      },
-      "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz",
-          "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
-          "dev": true
-        }
-      }
-    },
     "ee-first": {
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz",
@@ -5157,34 +4849,29 @@
       "dev": true
     },
     "electron-to-chromium": {
-      "version": "1.3.373",
-      "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.373.tgz?cache=0&sync_timestamp=1583812992693&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.373.tgz",
-      "integrity": "sha1-ZF3nocCTy2FOJxZzg0eBj5MJI/8=",
-      "dev": true
-    },
-    "elegant-spinner": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/elegant-spinner/download/elegant-spinner-1.0.1.tgz",
-      "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+      "version": "1.3.628",
+      "resolved": "https://registry.npm.taobao.org/electron-to-chromium/download/electron-to-chromium-1.3.628.tgz?cache=0&sync_timestamp=1608143621573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.628.tgz",
+      "integrity": "sha1-vloU3fOkVd6HYnTITeCSZDmih6c=",
       "dev": true
     },
-    "element-ui": {
-      "version": "2.13.0",
-      "resolved": "https://registry.npm.taobao.org/element-ui/download/element-ui-2.13.0.tgz",
-      "integrity": "sha1-9rsE5bCnbqX2JGYES3dEB7pOvS0=",
+    "element-plus": {
+      "version": "1.0.2-beta.31",
+      "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-1.0.2-beta.31.tgz",
+      "integrity": "sha512-ujM/vLqh3LViUbWcACpmQb60FT4o/nE1nRmPTeMcVhcgML1+BA51woPG5FOmAF8AWFB1m73VGzfex3hCoC6vJA==",
       "requires": {
-        "async-validator": "~1.8.1",
-        "babel-helper-vue-jsx-merge-props": "^2.0.0",
-        "deepmerge": "^1.2.0",
+        "@popperjs/core": "^2.4.4",
+        "async-validator": "^3.4.0",
+        "dayjs": "1.x",
+        "lodash": "^4.17.20",
+        "mitt": "^2.1.0",
         "normalize-wheel": "^1.0.1",
-        "resize-observer-polyfill": "^1.5.0",
-        "throttle-debounce": "^1.0.1"
+        "resize-observer-polyfill": "^1.5.1"
       }
     },
     "elliptic": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.2.tgz",
-      "integrity": "sha1-BcVnjXFzwEnYykM1UiJKSV0ON2I=",
+      "version": "6.5.3",
+      "resolved": "https://registry.npm.taobao.org/elliptic/download/elliptic-6.5.3.tgz?cache=0&sync_timestamp=1592492754083&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felliptic%2Fdownload%2Felliptic-6.5.3.tgz",
+      "integrity": "sha1-y1nrLv2vc6C9eMzXAVpirW4Pk9Y=",
       "dev": true,
       "requires": {
         "bn.js": "^4.4.0",
@@ -5194,18 +4881,27 @@
         "inherits": "^2.0.1",
         "minimalistic-assert": "^1.0.0",
         "minimalistic-crypto-utils": "^1.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
+          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
+          "dev": true
+        }
       }
     },
     "emoji-regex": {
-      "version": "7.0.3",
-      "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz",
-      "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+      "version": "8.0.0",
+      "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-8.0.0.tgz",
+      "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=",
       "dev": true
     },
     "emojis-list": {
       "version": "3.0.0",
       "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-3.0.0.tgz",
-      "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang="
+      "integrity": "sha1-VXBmIEatKeLpFucariYKvf9Pang=",
+      "dev": true
     },
     "encodeurl": {
       "version": "1.0.2",
@@ -5223,9 +4919,9 @@
       }
     },
     "enhanced-resolve": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.1.1.tgz?cache=0&sync_timestamp=1572993058578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.1.1.tgz",
-      "integrity": "sha1-KTfiuAZs0P584JkKmPDXGjUYn2Y=",
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/enhanced-resolve/download/enhanced-resolve-4.3.0.tgz?cache=0&sync_timestamp=1606945778512&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fenhanced-resolve%2Fdownload%2Fenhanced-resolve-4.3.0.tgz",
+      "integrity": "sha1-O4BvO/r8HsfeaVUe+TzKRsFwQSY=",
       "dev": true,
       "requires": {
         "graceful-fs": "^4.1.2",
@@ -5246,14 +4942,15 @@
       }
     },
     "entities": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz",
-      "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY="
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/entities/download/entities-2.1.0.tgz?cache=0&sync_timestamp=1602898797807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-2.1.0.tgz",
+      "integrity": "sha1-mS0xKc999ocLlsV4WMJJoSD4uLU=",
+      "dev": true
     },
     "errno": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.7.tgz",
-      "integrity": "sha1-RoTXF3mtOa8Xfj8AeZb3xnyFJhg=",
+      "version": "0.1.8",
+      "resolved": "https://registry.npm.taobao.org/errno/download/errno-0.1.8.tgz",
+      "integrity": "sha1-i7Ppx9Rjvkl2/4iPdrSAnrwugR8=",
       "dev": true,
       "requires": {
         "prr": "~1.0.1"
@@ -5278,22 +4975,23 @@
       }
     },
     "es-abstract": {
-      "version": "1.17.4",
-      "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.4.tgz",
-      "integrity": "sha1-467fGXBrIOfCWUw1/A1XYFp54YQ=",
+      "version": "1.18.0-next.1",
+      "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.18.0-next.1.tgz",
+      "integrity": "sha1-bjoKS9pxflAjqzuOkL7DYQjSLGg=",
       "dev": true,
       "requires": {
         "es-to-primitive": "^1.2.1",
         "function-bind": "^1.1.1",
         "has": "^1.0.3",
         "has-symbols": "^1.0.1",
-        "is-callable": "^1.1.5",
-        "is-regex": "^1.0.5",
-        "object-inspect": "^1.7.0",
+        "is-callable": "^1.2.2",
+        "is-negative-zero": "^2.0.0",
+        "is-regex": "^1.1.1",
+        "object-inspect": "^1.8.0",
         "object-keys": "^1.1.1",
-        "object.assign": "^4.1.0",
-        "string.prototype.trimleft": "^2.1.1",
-        "string.prototype.trimright": "^2.1.1"
+        "object.assign": "^4.1.1",
+        "string.prototype.trimend": "^1.0.1",
+        "string.prototype.trimstart": "^1.0.1"
       }
     },
     "es-to-primitive": {
@@ -5307,6 +5005,12 @@
         "is-symbol": "^1.0.2"
       }
     },
+    "escalade": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/escalade/download/escalade-3.1.1.tgz?cache=0&sync_timestamp=1602567230854&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescalade%2Fdownload%2Fescalade-3.1.1.tgz",
+      "integrity": "sha1-2M/ccACWXFoBdLSoLqpcBVJ0LkA=",
+      "dev": true
+    },
     "escape-html": {
       "version": "1.0.3",
       "resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz",
@@ -5315,333 +5019,117 @@
     },
     "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&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescape-string-regexp%2Fdownload%2Fescape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
-    },
-    "escodegen": {
-      "version": "1.14.1",
-      "resolved": "https://registry.npm.taobao.org/escodegen/download/escodegen-1.14.1.tgz?cache=0&sync_timestamp=1580954812183&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fescodegen%2Fdownload%2Fescodegen-1.14.1.tgz",
-      "integrity": "sha1-ugHQyCeLXpWppFNQFCAmZZAnpFc=",
-      "dev": true,
-      "requires": {
-        "esprima": "^4.0.1",
-        "estraverse": "^4.2.0",
-        "esutils": "^2.0.2",
-        "optionator": "^0.8.1",
-        "source-map": "~0.6.1"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-          "dev": true,
-          "optional": true
-        }
-      }
+      "resolved": "https://registry.npm.taobao.org/escape-string-regexp/download/escape-string-regexp-1.0.5.tgz",
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
     },
     "eslint": {
-      "version": "5.15.3",
-      "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-5.15.3.tgz",
-      "integrity": "sha1-x5w5CdyKf6NxT7NAwR4w/SUmuLU=",
+      "version": "6.8.0",
+      "resolved": "https://registry.npm.taobao.org/eslint/download/eslint-6.8.0.tgz?cache=0&sync_timestamp=1607153145204&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint%2Fdownload%2Feslint-6.8.0.tgz",
+      "integrity": "sha1-YiYtZylzn5J1cjgkMC+yJ8jJP/s=",
       "dev": true,
       "requires": {
         "@babel/code-frame": "^7.0.0",
-        "ajv": "^6.9.1",
+        "ajv": "^6.10.0",
         "chalk": "^2.1.0",
         "cross-spawn": "^6.0.5",
         "debug": "^4.0.1",
         "doctrine": "^3.0.0",
-        "eslint-scope": "^4.0.3",
-        "eslint-utils": "^1.3.1",
-        "eslint-visitor-keys": "^1.0.0",
-        "espree": "^5.0.1",
+        "eslint-scope": "^5.0.0",
+        "eslint-utils": "^1.4.3",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.1.2",
         "esquery": "^1.0.1",
         "esutils": "^2.0.2",
         "file-entry-cache": "^5.0.1",
         "functional-red-black-tree": "^1.0.1",
-        "glob": "^7.1.2",
-        "globals": "^11.7.0",
+        "glob-parent": "^5.0.0",
+        "globals": "^12.1.0",
         "ignore": "^4.0.6",
         "import-fresh": "^3.0.0",
         "imurmurhash": "^0.1.4",
-        "inquirer": "^6.2.2",
-        "js-yaml": "^3.12.0",
+        "inquirer": "^7.0.0",
+        "is-glob": "^4.0.0",
+        "js-yaml": "^3.13.1",
         "json-stable-stringify-without-jsonify": "^1.0.1",
         "levn": "^0.3.0",
-        "lodash": "^4.17.11",
+        "lodash": "^4.17.14",
         "minimatch": "^3.0.4",
         "mkdirp": "^0.5.1",
         "natural-compare": "^1.4.0",
-        "optionator": "^0.8.2",
-        "path-is-inside": "^1.0.2",
+        "optionator": "^0.8.3",
         "progress": "^2.0.0",
         "regexpp": "^2.0.1",
-        "semver": "^5.5.1",
-        "strip-ansi": "^4.0.0",
-        "strip-json-comments": "^2.0.1",
+        "semver": "^6.1.2",
+        "strip-ansi": "^5.2.0",
+        "strip-json-comments": "^3.0.1",
         "table": "^5.2.3",
-        "text-table": "^0.2.0"
+        "text-table": "^0.2.0",
+        "v8-compile-cache": "^2.0.3"
       },
       "dependencies": {
-        "acorn": {
-          "version": "6.4.1",
-          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1583823913618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz",
-          "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=",
-          "dev": true
-        },
-        "acorn-jsx": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.2.0.tgz",
-          "integrity": "sha1-TGYGkXPW/daO2FI5/CViJhgrLr4=",
-          "dev": true
-        },
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
-          "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
+        "eslint-scope": {
+          "version": "5.1.1",
+          "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1600070417656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz",
+          "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=",
           "dev": true,
           "requires": {
-            "color-convert": "^1.9.0"
+            "esrecurse": "^4.3.0",
+            "estraverse": "^4.1.1"
           }
         },
-        "chardet": {
-          "version": "0.7.0",
-          "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1562888139305&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz",
-          "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
-          "dev": true
-        },
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz",
-          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+        "globals": {
+          "version": "12.4.0",
+          "resolved": "https://registry.npm.taobao.org/globals/download/globals-12.4.0.tgz?cache=0&sync_timestamp=1607413619483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-12.4.0.tgz",
+          "integrity": "sha1-oYgTV2pBsAokqX5/gVkYwuGZJfg=",
           "dev": true,
           "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
+            "type-fest": "^0.8.1"
           }
         },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+        "import-fresh": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.2.tgz?cache=0&sync_timestamp=1604255567620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.2.2.tgz",
+          "integrity": "sha1-/BKcFgxdaCNVB/QzGmuq0Ya9vD4=",
           "dev": true,
           "requires": {
-            "ms": "^2.1.1"
+            "parent-module": "^1.0.0",
+            "resolve-from": "^4.0.0"
           }
         },
-        "doctrine": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/doctrine/download/doctrine-3.0.0.tgz",
-          "integrity": "sha1-rd6+rXKmV023g2OdyHoSF3OXOWE=",
-          "dev": true,
-          "requires": {
-            "esutils": "^2.0.2"
-          }
+        "resolve-from": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz",
+          "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+          "dev": true
         },
-        "espree": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npm.taobao.org/espree/download/espree-5.0.1.tgz?cache=0&sync_timestamp=1583168748616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-5.0.1.tgz",
-          "integrity": "sha1-XWUm+k/H8HiKXPdbFfMDI+L4H3o=",
-          "dev": true,
-          "requires": {
-            "acorn": "^6.0.7",
-            "acorn-jsx": "^5.0.0",
-            "eslint-visitor-keys": "^1.0.0"
-          }
-        },
-        "external-editor": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&sync_timestamp=1562602052556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz",
-          "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=",
-          "dev": true,
-          "requires": {
-            "chardet": "^0.7.0",
-            "iconv-lite": "^0.4.24",
-            "tmp": "^0.0.33"
-          }
-        },
-        "file-entry-cache": {
-          "version": "5.0.1",
-          "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz",
-          "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=",
-          "dev": true,
-          "requires": {
-            "flat-cache": "^2.0.1"
-          }
-        },
-        "flat-cache": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz",
-          "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=",
-          "dev": true,
-          "requires": {
-            "flatted": "^2.0.0",
-            "rimraf": "2.6.3",
-            "write": "1.0.3"
-          }
-        },
-        "ignore": {
-          "version": "4.0.6",
-          "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz",
-          "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
-          "dev": true
-        },
-        "import-fresh": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-3.2.1.tgz?cache=0&sync_timestamp=1573665120798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-3.2.1.tgz",
-          "integrity": "sha1-Yz/2GFBueTr1rJG/SLcmd+FcvmY=",
-          "dev": true,
-          "requires": {
-            "parent-module": "^1.0.0",
-            "resolve-from": "^4.0.0"
-          }
-        },
-        "inquirer": {
-          "version": "6.5.2",
-          "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.2.tgz?cache=0&sync_timestamp=1583819607980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-6.5.2.tgz",
-          "integrity": "sha1-rVCUI3XQNtMn/1KMCL1fqwiZKMo=",
-          "dev": true,
-          "requires": {
-            "ansi-escapes": "^3.2.0",
-            "chalk": "^2.4.2",
-            "cli-cursor": "^2.1.0",
-            "cli-width": "^2.0.0",
-            "external-editor": "^3.0.3",
-            "figures": "^2.0.0",
-            "lodash": "^4.17.12",
-            "mute-stream": "0.0.7",
-            "run-async": "^2.2.0",
-            "rxjs": "^6.4.0",
-            "string-width": "^2.1.0",
-            "strip-ansi": "^5.1.0",
-            "through": "^2.3.6"
-          },
-          "dependencies": {
-            "strip-ansi": {
-              "version": "5.2.0",
-              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
-              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
-              "dev": true,
-              "requires": {
-                "ansi-regex": "^4.1.0"
-              }
-            }
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        },
-        "regexpp": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz?cache=0&sync_timestamp=1567160849322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpp%2Fdownload%2Fregexpp-2.0.1.tgz",
-          "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=",
-          "dev": true
-        },
-        "resolve-from": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-4.0.0.tgz",
-          "integrity": "sha1-SrzYUq0y3Xuqv+m0DgCjbbXzkuY=",
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
           "dev": true
         },
-        "rimraf": {
-          "version": "2.6.3",
-          "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1581257110269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz",
-          "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
-          "dev": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "slice-ansi": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz?cache=0&sync_timestamp=1581872792458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslice-ansi%2Fdownload%2Fslice-ansi-2.1.0.tgz",
-          "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.2.0",
-            "astral-regex": "^1.0.0",
-            "is-fullwidth-code-point": "^2.0.0"
-          }
-        },
         "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          },
-          "dependencies": {
-            "ansi-regex": {
-              "version": "3.0.0",
-              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-3.0.0.tgz",
-              "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
-              "dev": true
-            }
-          }
-        },
-        "table": {
-          "version": "5.4.6",
-          "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz",
-          "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=",
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
           "dev": true,
           "requires": {
-            "ajv": "^6.10.2",
-            "lodash": "^4.17.14",
-            "slice-ansi": "^2.1.0",
-            "string-width": "^3.0.0"
-          },
-          "dependencies": {
-            "string-width": {
-              "version": "3.1.0",
-              "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz",
-              "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
-              "dev": true,
-              "requires": {
-                "emoji-regex": "^7.0.1",
-                "is-fullwidth-code-point": "^2.0.0",
-                "strip-ansi": "^5.1.0"
-              }
-            },
-            "strip-ansi": {
-              "version": "5.2.0",
-              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
-              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
-              "dev": true,
-              "requires": {
-                "ansi-regex": "^4.1.0"
-              }
-            }
+            "ansi-regex": "^4.1.0"
           }
         },
-        "write": {
-          "version": "1.0.3",
-          "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz",
-          "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=",
-          "dev": true,
-          "requires": {
-            "mkdirp": "^0.5.1"
-          }
+        "type-fest": {
+          "version": "0.8.1",
+          "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1606468796224&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz",
+          "integrity": "sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=",
+          "dev": true
         }
       }
     },
     "eslint-config-prettier": {
-      "version": "6.10.0",
-      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.10.0.tgz",
-      "integrity": "sha512-AtndijGte1rPILInUdHjvKEGbIV06NuvPrqlIEaEaWtbtvJh464mDeyGMdZEQMsGvC0ZVkiex1fSNcC4HAbRGg==",
+      "version": "6.15.0",
+      "resolved": "https://registry.npm.taobao.org/eslint-config-prettier/download/eslint-config-prettier-6.15.0.tgz?cache=0&sync_timestamp=1607205673337&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-config-prettier%2Fdownload%2Feslint-config-prettier-6.15.0.tgz",
+      "integrity": "sha1-f5P2y31FqS8VN6cOzAY2bhrG/tk=",
       "dev": true,
       "requires": {
         "get-stdin": "^6.0.0"
@@ -5661,80 +5149,64 @@
       }
     },
     "eslint-plugin-prettier": {
-      "version": "3.1.2",
-      "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz",
-      "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==",
+      "version": "3.3.0",
+      "resolved": "https://registry.npm.taobao.org/eslint-plugin-prettier/download/eslint-plugin-prettier-3.3.0.tgz?cache=0&sync_timestamp=1607910777157&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-prettier%2Fdownload%2Feslint-plugin-prettier-3.3.0.tgz",
+      "integrity": "sha1-YeKVNJplaI/6wLeAjvCoJEvdjUA=",
       "dev": true,
       "requires": {
         "prettier-linter-helpers": "^1.0.0"
       }
     },
     "eslint-plugin-vue": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-5.2.2.tgz?cache=0&sync_timestamp=1583662392429&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-5.2.2.tgz",
-      "integrity": "sha1-hmAYI7dyG3C8ktVPFyjPwDs2KDw=",
+      "version": "7.3.0",
+      "resolved": "https://registry.npm.taobao.org/eslint-plugin-vue/download/eslint-plugin-vue-7.3.0.tgz?cache=0&sync_timestamp=1608096201611&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-plugin-vue%2Fdownload%2Feslint-plugin-vue-7.3.0.tgz",
+      "integrity": "sha1-D68Pzw4bEFK/gA1N7kLWT1BnnLA=",
       "dev": true,
       "requires": {
-        "vue-eslint-parser": "^5.0.0"
+        "eslint-utils": "^2.1.0",
+        "natural-compare": "^1.4.0",
+        "semver": "^7.3.2",
+        "vue-eslint-parser": "^7.3.0"
       },
       "dependencies": {
-        "acorn": {
-          "version": "6.4.1",
-          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1583823913618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz",
-          "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=",
-          "dev": true
-        },
-        "acorn-jsx": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.2.0.tgz",
-          "integrity": "sha1-TGYGkXPW/daO2FI5/CViJhgrLr4=",
-          "dev": true
-        },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
+        "eslint-utils": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-2.1.0.tgz",
+          "integrity": "sha1-0t5eA0JOcH3BDHQGjd7a5wh0Gyc=",
           "dev": true,
           "requires": {
-            "ms": "^2.1.1"
+            "eslint-visitor-keys": "^1.1.0"
           }
         },
-        "espree": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/espree/download/espree-4.1.0.tgz?cache=0&sync_timestamp=1583168748616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-4.1.0.tgz",
-          "integrity": "sha1-co1UUeD9FWwEOEp62J7VH/VOsl8=",
+        "lru-cache": {
+          "version": "6.0.0",
+          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-6.0.0.tgz?cache=0&sync_timestamp=1594427573763&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-6.0.0.tgz",
+          "integrity": "sha1-bW/mVw69lqr5D8rR2vo7JWbbOpQ=",
           "dev": true,
           "requires": {
-            "acorn": "^6.0.2",
-            "acorn-jsx": "^5.0.0",
-            "eslint-visitor-keys": "^1.0.0"
+            "yallist": "^4.0.0"
           }
         },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        },
-        "vue-eslint-parser": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-5.0.0.tgz",
-          "integrity": "sha1-APTk2pTsl0uCGib/DtD3p4QCuKE=",
+        "semver": {
+          "version": "7.3.4",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-7.3.4.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-7.3.4.tgz",
+          "integrity": "sha1-J6qn0uTKdkUvmNOt0JOnLJQ+3Jc=",
           "dev": true,
           "requires": {
-            "debug": "^4.1.0",
-            "eslint-scope": "^4.0.0",
-            "eslint-visitor-keys": "^1.0.0",
-            "espree": "^4.1.0",
-            "esquery": "^1.0.1",
-            "lodash": "^4.17.11"
+            "lru-cache": "^6.0.0"
           }
+        },
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz",
+          "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+          "dev": true
         }
       }
     },
     "eslint-scope": {
       "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-4.0.3.tgz?cache=0&sync_timestamp=1600070417656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-4.0.3.tgz",
       "integrity": "sha1-ygODMxD2iJoyZHgaqC5j65z+eEg=",
       "dev": true,
       "requires": {
@@ -5744,7 +5216,7 @@
     },
     "eslint-utils": {
       "version": "1.4.3",
-      "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-utils%2Fdownload%2Feslint-utils-1.4.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/eslint-utils/download/eslint-utils-1.4.3.tgz",
       "integrity": "sha1-dP7HxU0Hdrb2fgJRBAtYBlZOmB8=",
       "dev": true,
       "requires": {
@@ -5752,20 +5224,28 @@
       }
     },
     "eslint-visitor-keys": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.1.0.tgz?cache=0&sync_timestamp=1565705523991&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.1.0.tgz",
-      "integrity": "sha1-4qgs6oT/JGrW+1f5veW0ZiFFnsI=",
+      "version": "1.3.0",
+      "resolved": "https://registry.npm.taobao.org/eslint-visitor-keys/download/eslint-visitor-keys-1.3.0.tgz?cache=0&sync_timestamp=1599829544231&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-visitor-keys%2Fdownload%2Feslint-visitor-keys-1.3.0.tgz",
+      "integrity": "sha1-MOvR73wv3/AcOk8VEESvJfqwUj4=",
       "dev": true
     },
     "espree": {
-      "version": "3.5.4",
-      "resolved": "https://registry.npm.taobao.org/espree/download/espree-3.5.4.tgz?cache=0&sync_timestamp=1583168748616&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-3.5.4.tgz",
-      "integrity": "sha1-sPRHGHyKi+2US4FaZgvd9d610ac=",
+      "version": "6.2.1",
+      "resolved": "https://registry.npm.taobao.org/espree/download/espree-6.2.1.tgz?cache=0&sync_timestamp=1607144055171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fespree%2Fdownload%2Fespree-6.2.1.tgz",
+      "integrity": "sha1-d/xy4f10SiBSwg84pbV1gy6Cc0o=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "acorn": "^5.5.0",
-        "acorn-jsx": "^3.0.0"
+        "acorn": "^7.1.1",
+        "acorn-jsx": "^5.2.0",
+        "eslint-visitor-keys": "^1.1.0"
+      },
+      "dependencies": {
+        "acorn": {
+          "version": "7.4.1",
+          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1602534280466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
+          "dev": true
+        }
       }
     },
     "esprima": {
@@ -5775,21 +5255,37 @@
       "dev": true
     },
     "esquery": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.1.0.tgz",
-      "integrity": "sha1-xcC2bzg+dlZAT4azEzTXJSTt20g=",
+      "version": "1.3.1",
+      "resolved": "https://registry.npm.taobao.org/esquery/download/esquery-1.3.1.tgz?cache=0&sync_timestamp=1587061209806&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesquery%2Fdownload%2Fesquery-1.3.1.tgz",
+      "integrity": "sha1-t4tYKKqOIU4p+3TE1bdS4cAz2lc=",
       "dev": true,
       "requires": {
-        "estraverse": "^4.0.0"
+        "estraverse": "^5.1.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz",
+          "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
+          "dev": true
+        }
       }
     },
     "esrecurse": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.2.1.tgz",
-      "integrity": "sha1-AHo7n9vCs7uH5IeeoZyS/b05Qs8=",
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/esrecurse/download/esrecurse-4.3.0.tgz",
+      "integrity": "sha1-eteWTWeauyi+5yzsY3WLHF0smSE=",
       "dev": true,
       "requires": {
-        "estraverse": "^4.1.0"
+        "estraverse": "^5.2.0"
+      },
+      "dependencies": {
+        "estraverse": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-5.2.0.tgz",
+          "integrity": "sha1-MH30JUfmzHMk088DwVXVzbjFOIA=",
+          "dev": true
+        }
       }
     },
     "estraverse": {
@@ -5798,6 +5294,11 @@
       "integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=",
       "dev": true
     },
+    "estree-walker": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/estree-walker/download/estree-walker-2.0.2.tgz",
+      "integrity": "sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw="
+    },
     "esutils": {
       "version": "2.0.3",
       "resolved": "https://registry.npm.taobao.org/esutils/download/esutils-2.0.3.tgz",
@@ -5810,26 +5311,22 @@
       "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
       "dev": true
     },
-    "eve": {
-      "version": "git://github.com/adobe-webplatform/eve.git#eef80ed8d188423c2272746fb8ae5cc8dad84cb1",
-      "from": "git://github.com/adobe-webplatform/eve.git#eef80ed"
-    },
     "event-pubsub": {
       "version": "4.3.0",
-      "resolved": "https://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/event-pubsub/download/event-pubsub-4.3.0.tgz?cache=0&sync_timestamp=1606361501216&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fevent-pubsub%2Fdownload%2Fevent-pubsub-4.3.0.tgz",
       "integrity": "sha1-9o2Ba8KfHsAsU53FjI3UDOcss24=",
       "dev": true
     },
     "eventemitter3": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.0.tgz?cache=0&sync_timestamp=1560950873670&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feventemitter3%2Fdownload%2Feventemitter3-4.0.0.tgz",
-      "integrity": "sha1-1lF2FjiH7lnzhtZMgmELaWpKdOs=",
+      "version": "4.0.7",
+      "resolved": "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz",
+      "integrity": "sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=",
       "dev": true
     },
     "events": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/events/download/events-3.1.0.tgz",
-      "integrity": "sha1-hCea8bNMt1qoi/X/KR9tC9mzGlk=",
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/events/download/events-3.2.0.tgz",
+      "integrity": "sha1-k7h8GPjvzUICpGGuxN/AVWtjk3k=",
       "dev": true
     },
     "eventsource": {
@@ -5851,22 +5348,14 @@
         "safe-buffer": "^5.1.1"
       }
     },
-    "exec-sh": {
-      "version": "0.2.2",
-      "resolved": "https://registry.npm.taobao.org/exec-sh/download/exec-sh-0.2.2.tgz",
-      "integrity": "sha1-Kl5//L19C6J1W97LFuWkJ9+97DY=",
-      "dev": true,
-      "requires": {
-        "merge": "^1.2.0"
-      }
-    },
     "execa": {
-      "version": "0.7.0",
-      "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.7.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.7.0.tgz",
-      "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1606970975645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
+      "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
+      "dev": true,
       "requires": {
-        "cross-spawn": "^5.0.1",
-        "get-stream": "^3.0.0",
+        "cross-spawn": "^6.0.0",
+        "get-stream": "^4.0.0",
         "is-stream": "^1.1.0",
         "npm-run-path": "^2.0.0",
         "p-finally": "^1.0.0",
@@ -5874,16 +5363,10 @@
         "strip-eof": "^1.0.0"
       }
     },
-    "exit": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/exit/download/exit-0.1.2.tgz",
-      "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=",
-      "dev": true
-    },
     "exit-on-epipe": {
       "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/exit-on-epipe/download/exit-on-epipe-1.0.1.tgz",
-      "integrity": "sha1-C92S6H1ShdJn2qgXHQ6wYVlolpI="
+      "resolved": "https://r2.cnpmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz",
+      "integrity": "sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw=="
     },
     "expand-brackets": {
       "version": "2.1.4",
@@ -5902,7 +5385,7 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
           "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
@@ -5926,97 +5409,12 @@
           "requires": {
             "is-extendable": "^0.1.0"
           }
-        }
-      }
-    },
-    "expand-range": {
-      "version": "1.8.2",
-      "resolved": "https://registry.npm.taobao.org/expand-range/download/expand-range-1.8.2.tgz",
-      "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=",
-      "dev": true,
-      "requires": {
-        "fill-range": "^2.1.0"
-      },
-      "dependencies": {
-        "fill-range": {
-          "version": "2.2.4",
-          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-2.2.4.tgz",
-          "integrity": "sha1-6x53OrsFbc2N8r/favWbizqTZWU=",
-          "dev": true,
-          "requires": {
-            "is-number": "^2.1.0",
-            "isobject": "^2.0.0",
-            "randomatic": "^3.0.0",
-            "repeat-element": "^1.1.2",
-            "repeat-string": "^1.5.2"
-          }
         },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
           "dev": true
-        },
-        "is-number": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-2.1.0.tgz",
-          "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=",
-          "dev": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          }
-        },
-        "isobject": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-2.1.0.tgz",
-          "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
-          "dev": true,
-          "requires": {
-            "isarray": "1.0.0"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "expand-tilde": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/expand-tilde/download/expand-tilde-2.0.2.tgz",
-      "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
-      "dev": true,
-      "requires": {
-        "homedir-polyfill": "^1.0.1"
-      }
-    },
-    "expect": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/expect/download/expect-23.6.0.tgz?cache=0&sync_timestamp=1579654879185&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpect%2Fdownload%2Fexpect-23.6.0.tgz",
-      "integrity": "sha1-HgyNO6mlgch71x+5vIhi1ENCX5g=",
-      "dev": true,
-      "requires": {
-        "ansi-styles": "^3.2.0",
-        "jest-diff": "^23.6.0",
-        "jest-get-type": "^22.1.0",
-        "jest-matcher-utils": "^23.6.0",
-        "jest-message-util": "^23.4.0",
-        "jest-regex-util": "^23.3.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
         }
       }
     },
@@ -6060,17 +5458,17 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
           "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
           }
         },
-        "path-to-regexp": {
-          "version": "0.1.7",
-          "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz",
-          "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
           "dev": true
         },
         "qs": {
@@ -6109,14 +5507,13 @@
       }
     },
     "external-editor": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-2.2.0.tgz?cache=0&sync_timestamp=1562602052556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-2.2.0.tgz",
-      "integrity": "sha1-BFURz9jRM/OEZnPRBHwVTiFK09U=",
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&sync_timestamp=1562602052556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz",
+      "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "chardet": "^0.4.0",
-        "iconv-lite": "^0.4.17",
+        "chardet": "^0.7.0",
+        "iconv-lite": "^0.4.24",
         "tmp": "^0.0.33"
       }
     },
@@ -6185,15 +5582,6 @@
         }
       }
     },
-    "extract-from-css": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npm.taobao.org/extract-from-css/download/extract-from-css-0.4.4.tgz",
-      "integrity": "sha1-HqffLnx8brmSL6COitrqSG9vj5I=",
-      "dev": true,
-      "requires": {
-        "css": "^2.1.0"
-      }
-    },
     "extsprintf": {
       "version": "1.3.0",
       "resolved": "https://registry.npm.taobao.org/extsprintf/download/extsprintf-1.3.0.tgz",
@@ -6201,19 +5589,20 @@
       "dev": true
     },
     "fast-deep-equal": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.1.tgz?cache=0&sync_timestamp=1575383928809&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.1.tgz",
-      "integrity": "sha1-VFFFB3xQFJHjOxXsQIwpQ3bpSuQ="
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-3.1.3.tgz?cache=0&sync_timestamp=1591599651635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-3.1.3.tgz",
+      "integrity": "sha1-On1WtVnWy8PrUSMlJE5hmmXGxSU=",
+      "dev": true
     },
     "fast-diff": {
       "version": "1.2.0",
-      "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
-      "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+      "resolved": "https://registry.npm.taobao.org/fast-diff/download/fast-diff-1.2.0.tgz",
+      "integrity": "sha1-c+4RmC2Gyq95WYKNUZz+kn+sXwM=",
       "dev": true
     },
     "fast-glob": {
       "version": "2.2.7",
-      "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz",
+      "resolved": "https://registry.npm.taobao.org/fast-glob/download/fast-glob-2.2.7.tgz?cache=0&sync_timestamp=1592290365180&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-glob%2Fdownload%2Ffast-glob-2.2.7.tgz",
       "integrity": "sha1-aVOFfDr6R1//ku5gFdUtpwpM050=",
       "dev": true,
       "requires": {
@@ -6223,12 +5612,36 @@
         "is-glob": "^4.0.0",
         "merge2": "^1.2.3",
         "micromatch": "^3.1.10"
+      },
+      "dependencies": {
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        }
       }
     },
     "fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npm.taobao.org/fast-json-stable-stringify/download/fast-json-stable-stringify-2.1.0.tgz?cache=0&sync_timestamp=1576340291001&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-json-stable-stringify%2Fdownload%2Ffast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM="
+      "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=",
+      "dev": true
     },
     "fast-levenshtein": {
       "version": "2.0.6",
@@ -6245,68 +5658,44 @@
         "websocket-driver": ">=0.5.1"
       }
     },
-    "fb-watchman": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/fb-watchman/download/fb-watchman-2.0.1.tgz",
-      "integrity": "sha1-/IT7OdJwnPP/bXQ3BhV7tXCKioU=",
-      "dev": true,
-      "requires": {
-        "bser": "2.1.1"
-      }
-    },
     "figgy-pudding": {
-      "version": "3.5.1",
-      "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.1.tgz",
-      "integrity": "sha1-hiRwESkBxyeg5JWoB0S9W6odZ5A=",
+      "version": "3.5.2",
+      "resolved": "https://registry.npm.taobao.org/figgy-pudding/download/figgy-pudding-3.5.2.tgz",
+      "integrity": "sha1-tO7oFIq7Adzx0aw0Nn1Z4S+mHW4=",
       "dev": true
     },
     "figures": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/figures/download/figures-2.0.0.tgz?cache=0&sync_timestamp=1581865437156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-2.0.0.tgz",
-      "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/figures/download/figures-3.2.0.tgz?cache=0&sync_timestamp=1581865437156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-3.2.0.tgz",
+      "integrity": "sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=",
       "dev": true,
       "requires": {
         "escape-string-regexp": "^1.0.5"
       }
     },
     "file-entry-cache": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-2.0.0.tgz",
-      "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
+      "version": "5.0.1",
+      "resolved": "https://registry.npm.taobao.org/file-entry-cache/download/file-entry-cache-5.0.1.tgz",
+      "integrity": "sha1-yg9u+m3T1WEzP7FFFQZcL6/fQ5w=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "flat-cache": "^1.2.1",
-        "object-assign": "^4.0.1"
+        "flat-cache": "^2.0.1"
       }
     },
     "file-loader": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-3.0.1.tgz?cache=0&sync_timestamp=1582135550059&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-3.0.1.tgz",
-      "integrity": "sha1-+OC6C1mZGLUa3+RdZtHnca1WD6o=",
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/file-loader/download/file-loader-4.3.0.tgz?cache=0&sync_timestamp=1603816990383&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffile-loader%2Fdownload%2Ffile-loader-4.3.0.tgz",
+      "integrity": "sha1-eA8ED3KbPRgBnyBgX3I+hEuKWK8=",
       "dev": true,
       "requires": {
-        "loader-utils": "^1.0.2",
-        "schema-utils": "^1.0.0"
-      },
-      "dependencies": {
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
-          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
+        "loader-utils": "^1.2.3",
+        "schema-utils": "^2.5.0"
       }
     },
     "file-saver": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/file-saver/download/file-saver-2.0.1.tgz",
-      "integrity": "sha1-f+IkKvHLxVminYF2B4qLVteB+nk="
+      "version": "2.0.5",
+      "resolved": "https://r2.cnpmjs.org/file-saver/-/file-saver-2.0.5.tgz",
+      "integrity": "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="
     },
     "file-uri-to-path": {
       "version": "1.0.0",
@@ -6315,22 +5704,6 @@
       "dev": true,
       "optional": true
     },
-    "filename-regex": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/filename-regex/download/filename-regex-2.0.1.tgz",
-      "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=",
-      "dev": true
-    },
-    "fileset": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/fileset/download/fileset-2.0.3.tgz",
-      "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=",
-      "dev": true,
-      "requires": {
-        "glob": "^7.0.3",
-        "minimatch": "^3.0.3"
-      }
-    },
     "filesize": {
       "version": "3.6.1",
       "resolved": "https://registry.npm.taobao.org/filesize/download/filesize-3.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffilesize%2Fdownload%2Ffilesize-3.6.1.tgz",
@@ -6377,103 +5750,51 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
           "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
             "ms": "2.0.0"
           }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
         }
       }
     },
-    "find-babel-config": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/find-babel-config/download/find-babel-config-1.2.0.tgz",
-      "integrity": "sha1-qbezF+tbmGDNqdVHQKjIM3oig6I=",
-      "dev": true,
-      "requires": {
-        "json5": "^0.5.1",
-        "path-exists": "^3.0.0"
-      }
-    },
     "find-cache-dir": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-1.0.0.tgz",
-      "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+      "version": "3.3.1",
+      "resolved": "https://registry.npm.taobao.org/find-cache-dir/download/find-cache-dir-3.3.1.tgz",
+      "integrity": "sha1-ibM/rUpGcNqpT4Vff74x1thP6IA=",
       "dev": true,
       "requires": {
         "commondir": "^1.0.1",
-        "make-dir": "^1.0.0",
-        "pkg-dir": "^2.0.0"
+        "make-dir": "^3.0.2",
+        "pkg-dir": "^4.1.0"
       }
     },
-    "find-parent-dir": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/find-parent-dir/download/find-parent-dir-0.3.0.tgz",
-      "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
-      "dev": true
-    },
     "find-up": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz",
-      "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
-      "requires": {
-        "locate-path": "^2.0.0"
-      }
-    },
-    "findup-sync": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/findup-sync/download/findup-sync-2.0.0.tgz",
-      "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
-      "dev": true,
-      "requires": {
-        "detect-file": "^1.0.0",
-        "is-glob": "^3.1.0",
-        "micromatch": "^3.0.4",
-        "resolve-dir": "^1.0.1"
-      },
-      "dependencies": {
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
-      }
-    },
-    "fined": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/fined/download/fined-1.2.0.tgz",
-      "integrity": "sha1-0AvszxqitHXRbUI7Aji3E6LEo3s=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-4.1.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-4.1.0.tgz",
+      "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=",
       "dev": true,
       "requires": {
-        "expand-tilde": "^2.0.2",
-        "is-plain-object": "^2.0.3",
-        "object.defaults": "^1.1.0",
-        "object.pick": "^1.2.0",
-        "parse-filepath": "^1.0.1"
+        "locate-path": "^5.0.0",
+        "path-exists": "^4.0.0"
       }
     },
-    "flagged-respawn": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/flagged-respawn/download/flagged-respawn-1.0.1.tgz",
-      "integrity": "sha1-595vEnnd2cqarIpZcdYYYGs6q0E=",
-      "dev": true
-    },
     "flat-cache": {
-      "version": "1.3.4",
-      "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-1.3.4.tgz",
-      "integrity": "sha1-LC73dSXMKSkAff/6HdMUqpyd7m8=",
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/flat-cache/download/flat-cache-2.0.1.tgz",
+      "integrity": "sha1-XSltbwS9pEpGMKMBQTvbwuwIXsA=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "circular-json": "^0.3.1",
-        "graceful-fs": "^4.1.2",
-        "rimraf": "~2.6.2",
-        "write": "^0.2.1"
+        "flatted": "^2.0.0",
+        "rimraf": "2.6.3",
+        "write": "1.0.3"
       },
       "dependencies": {
         "rimraf": {
@@ -6481,7 +5802,6 @@
           "resolved": "https://registry.npm.taobao.org/rimraf/download/rimraf-2.6.3.tgz?cache=0&sync_timestamp=1581257110269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frimraf%2Fdownload%2Frimraf-2.6.3.tgz",
           "integrity": "sha1-stEE/g2Psnz54KHNqCYt04M8bKs=",
           "dev": true,
-          "optional": true,
           "requires": {
             "glob": "^7.1.3"
           }
@@ -6489,9 +5809,9 @@
       }
     },
     "flatted": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fflatted%2Fdownload%2Fflatted-2.0.1.tgz",
-      "integrity": "sha1-aeV8qo8OrLwoHS4stFjUb9tEngg=",
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/flatted/download/flatted-2.0.2.tgz",
+      "integrity": "sha1-RXWyHivO50NKqb5mL0t7X5wrUTg=",
       "dev": true
     },
     "flush-write-stream": {
@@ -6504,19 +5824,10 @@
         "readable-stream": "^2.3.6"
       }
     },
-    "fn-name": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/fn-name/download/fn-name-2.0.1.tgz",
-      "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=",
-      "dev": true
-    },
     "follow-redirects": {
-      "version": "1.5.10",
-      "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.5.10.tgz",
-      "integrity": "sha1-e3qfmuov3/NnhqlP9kPtB/T/Xio=",
-      "requires": {
-        "debug": "=3.1.0"
-      }
+      "version": "1.13.1",
+      "resolved": "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.1.tgz?cache=0&sync_timestamp=1607916833378&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffollow-redirects%2Fdownload%2Ffollow-redirects-1.13.1.tgz",
+      "integrity": "sha1-X2m4Ezds7k/QR0o6uoNd8Eq3Y7c="
     },
     "for-in": {
       "version": "1.0.2",
@@ -6524,15 +5835,6 @@
       "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
       "dev": true
     },
-    "for-own": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/for-own/download/for-own-0.1.5.tgz",
-      "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=",
-      "dev": true,
-      "requires": {
-        "for-in": "^1.0.1"
-      }
-    },
     "forever-agent": {
       "version": "0.6.1",
       "resolved": "https://registry.npm.taobao.org/forever-agent/download/forever-agent-0.6.1.tgz",
@@ -6558,8 +5860,8 @@
     },
     "frac": {
       "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/frac/download/frac-1.1.2.tgz",
-      "integrity": "sha1-PXT39keMiKG1AgMG10fcYxPHTQs="
+      "resolved": "https://r2.cnpmjs.org/frac/-/frac-1.1.2.tgz",
+      "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA=="
     },
     "fragment-cache": {
       "version": "0.2.1",
@@ -6597,6 +5899,15 @@
         "universalify": "^0.1.0"
       }
     },
+    "fs-minipass": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/fs-minipass/download/fs-minipass-2.1.0.tgz",
+      "integrity": "sha1-f1A2/b8SxjwWkZDL5BmchSJx+fs=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "fs-write-stream-atomic": {
       "version": "1.0.10",
       "resolved": "https://registry.npm.taobao.org/fs-write-stream-atomic/download/fs-write-stream-atomic-1.0.10.tgz",
@@ -6616,1853 +5927,242 @@
       "dev": true
     },
     "fsevents": {
-      "version": "1.2.11",
-      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.11.tgz?cache=0&sync_timestamp=1580708699417&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.11.tgz",
-      "integrity": "sha1-Z79X9HWPAu3oj7KhcS/vTRU1i+M=",
+      "version": "2.3.1",
+      "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.1.tgz",
+      "integrity": "sha1-sgmrFMYQEmNsiGNQft9/tozFTp8=",
+      "dev": true,
+      "optional": true
+    },
+    "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="
+    },
+    "functional-red-black-tree": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz",
+      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+      "dev": true
+    },
+    "generic-names": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/generic-names/download/generic-names-2.0.1.tgz?cache=0&sync_timestamp=1603542764418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgeneric-names%2Fdownload%2Fgeneric-names-2.0.1.tgz",
+      "integrity": "sha1-+KN46tLMqno08DF7BVVIMq5BuHI=",
+      "dev": true,
+      "requires": {
+        "loader-utils": "^1.1.0"
+      }
+    },
+    "gensync": {
+      "version": "1.0.0-beta.2",
+      "resolved": "https://registry.npm.taobao.org/gensync/download/gensync-1.0.0-beta.2.tgz?cache=0&sync_timestamp=1603830155677&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgensync%2Fdownload%2Fgensync-1.0.0-beta.2.tgz",
+      "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=",
+      "dev": true
+    },
+    "get-caller-file": {
+      "version": "2.0.5",
+      "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-2.0.5.tgz",
+      "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=",
+      "dev": true
+    },
+    "get-intrinsic": {
+      "version": "1.1.1",
+      "resolved": "https://r2.cnpmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
+      "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+      "requires": {
+        "function-bind": "^1.1.1",
+        "has": "^1.0.3",
+        "has-symbols": "^1.0.1"
+      }
+    },
+    "get-stdin": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz",
+      "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=",
+      "dev": true
+    },
+    "get-stream": {
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
+      "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+      "dev": true,
+      "requires": {
+        "pump": "^3.0.0"
+      }
+    },
+    "get-value": {
+      "version": "2.0.6",
+      "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz",
+      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+      "dev": true
+    },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
+      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "glob": {
+      "version": "7.1.6",
+      "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz",
+      "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=",
+      "dev": true,
+      "requires": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^3.0.4",
+        "once": "^1.3.0",
+        "path-is-absolute": "^1.0.0"
+      }
+    },
+    "glob-parent": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-5.1.1.tgz",
+      "integrity": "sha1-tsHvQXxOVmPqSY8cRa+saRa7wik=",
+      "dev": true,
+      "requires": {
+        "is-glob": "^4.0.1"
+      }
+    },
+    "glob-to-regexp": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz",
+      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
+      "dev": true
+    },
+    "globals": {
+      "version": "11.12.0",
+      "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz?cache=0&sync_timestamp=1607413619483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fglobals%2Fdownload%2Fglobals-11.12.0.tgz",
+      "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=",
+      "dev": true
+    },
+    "globby": {
+      "version": "9.2.0",
+      "resolved": "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz",
+      "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=",
+      "dev": true,
+      "requires": {
+        "@types/glob": "^7.1.1",
+        "array-union": "^1.0.2",
+        "dir-glob": "^2.2.2",
+        "fast-glob": "^2.2.6",
+        "glob": "^7.1.3",
+        "ignore": "^4.0.3",
+        "pify": "^4.0.1",
+        "slash": "^2.0.0"
+      }
+    },
+    "good-listener": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz",
+      "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
+      "requires": {
+        "delegate": "^3.1.2"
+      }
+    },
+    "graceful-fs": {
+      "version": "4.2.4",
+      "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.4.tgz?cache=0&sync_timestamp=1588086876757&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgraceful-fs%2Fdownload%2Fgraceful-fs-4.2.4.tgz",
+      "integrity": "sha1-Ila94U02MpWMRl68ltxGfKB6Kfs=",
+      "dev": true
+    },
+    "gzip-size": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz?cache=0&sync_timestamp=1605523115814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fgzip-size%2Fdownload%2Fgzip-size-5.1.1.tgz",
+      "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=",
+      "dev": true,
+      "requires": {
+        "duplexer": "^0.1.1",
+        "pify": "^4.0.1"
+      }
+    },
+    "handle-thing": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.1.tgz",
+      "integrity": "sha1-hX95zjWVgMNA1DCBzGSJcNC7I04=",
+      "dev": true
+    },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
+      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+      "dev": true
+    },
+    "har-validator": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.5.tgz",
+      "integrity": "sha1-HwgDufjLIMD6E4It8ezds2veHv0=",
+      "dev": true,
+      "requires": {
+        "ajv": "^6.12.3",
+        "har-schema": "^2.0.0"
+      }
+    },
+    "has": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
+      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
+      "requires": {
+        "function-bind": "^1.1.1"
+      }
+    },
+    "has-ansi": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz",
+      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "bindings": "^1.5.0",
-        "nan": "^2.12.1",
-        "node-pre-gyp": "*"
+        "ansi-regex": "^2.0.0"
       },
       "dependencies": {
-        "abbrev": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
         "ansi-regex": {
           "version": "2.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "aproba": {
-          "version": "1.2.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "are-we-there-yet": {
-          "version": "1.1.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "delegates": "^1.0.0",
-            "readable-stream": "^2.0.6"
-          }
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "brace-expansion": {
-          "version": "1.1.11",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "chownr": {
-          "version": "1.1.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "code-point-at": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "console-control-strings": {
-          "version": "1.1.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "debug": {
-          "version": "3.2.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "deep-extend": {
-          "version": "0.6.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "delegates": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "detect-libc": {
-          "version": "1.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "fs-minipass": {
-          "version": "1.2.7",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.6.0"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "gauge": {
-          "version": "2.7.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "aproba": "^1.0.3",
-            "console-control-strings": "^1.0.0",
-            "has-unicode": "^2.0.0",
-            "object-assign": "^4.1.0",
-            "signal-exit": "^3.0.0",
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wide-align": "^1.1.0"
-          }
-        },
-        "glob": {
-          "version": "7.1.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "fs.realpath": "^1.0.0",
-            "inflight": "^1.0.4",
-            "inherits": "2",
-            "minimatch": "^3.0.4",
-            "once": "^1.3.0",
-            "path-is-absolute": "^1.0.0"
-          }
-        },
-        "has-unicode": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "iconv-lite": {
-          "version": "0.4.24",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        },
-        "ignore-walk": {
-          "version": "3.0.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimatch": "^3.0.4"
-          }
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "ini": {
-          "version": "1.3.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "minimist": {
-          "version": "0.0.8",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "minipass": {
-          "version": "2.9.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.0"
-          }
-        },
-        "minizlib": {
-          "version": "1.3.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minipass": "^2.9.0"
-          }
-        },
-        "mkdirp": {
-          "version": "0.5.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "minimist": "0.0.8"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "needle": {
-          "version": "2.4.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "debug": "^3.2.6",
-            "iconv-lite": "^0.4.4",
-            "sax": "^1.2.4"
-          }
-        },
-        "node-pre-gyp": {
-          "version": "0.14.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "detect-libc": "^1.0.2",
-            "mkdirp": "^0.5.1",
-            "needle": "^2.2.1",
-            "nopt": "^4.0.1",
-            "npm-packlist": "^1.1.6",
-            "npmlog": "^4.0.2",
-            "rc": "^1.2.7",
-            "rimraf": "^2.6.1",
-            "semver": "^5.3.0",
-            "tar": "^4.4.2"
-          }
-        },
-        "nopt": {
-          "version": "4.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "abbrev": "1",
-            "osenv": "^0.1.4"
-          }
-        },
-        "npm-bundled": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "npm-normalize-package-bin": "^1.0.1"
-          }
-        },
-        "npm-normalize-package-bin": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "npm-packlist": {
-          "version": "1.4.7",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ignore-walk": "^3.0.1",
-            "npm-bundled": "^1.0.1"
-          }
-        },
-        "npmlog": {
-          "version": "4.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "are-we-there-yet": "~1.1.2",
-            "console-control-strings": "~1.1.0",
-            "gauge": "~2.7.3",
-            "set-blocking": "~2.0.0"
-          }
-        },
-        "number-is-nan": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "object-assign": {
-          "version": "4.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "os-homedir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "osenv": {
-          "version": "0.1.5",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "os-homedir": "^1.0.0",
-            "os-tmpdir": "^1.0.0"
-          }
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "rc": {
-          "version": "1.2.8",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "deep-extend": "^0.6.0",
-            "ini": "~1.3.0",
-            "minimist": "^1.2.0",
-            "strip-json-comments": "~2.0.1"
-          },
-          "dependencies": {
-            "minimist": {
-              "version": "1.2.0",
-              "bundled": true,
-              "dev": true,
-              "optional": true
-            }
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "core-util-is": "~1.0.0",
-            "inherits": "~2.0.3",
-            "isarray": "~1.0.0",
-            "process-nextick-args": "~2.0.0",
-            "safe-buffer": "~5.1.1",
-            "string_decoder": "~1.1.1",
-            "util-deprecate": "~1.0.1"
-          }
-        },
-        "rimraf": {
-          "version": "2.7.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "glob": "^7.1.3"
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "sax": {
-          "version": "1.2.4",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "semver": {
-          "version": "5.7.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "set-blocking": {
-          "version": "2.0.0",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "signal-exit": {
-          "version": "3.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "strip-json-comments": {
-          "version": "2.0.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "tar": {
-          "version": "4.4.13",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "chownr": "^1.1.1",
-            "fs-minipass": "^1.2.5",
-            "minipass": "^2.8.6",
-            "minizlib": "^1.2.1",
-            "mkdirp": "^0.5.0",
-            "safe-buffer": "^5.1.2",
-            "yallist": "^3.0.3"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "wide-align": {
-          "version": "1.1.3",
-          "bundled": true,
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "string-width": "^1.0.2 || 2"
-          }
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        },
-        "yallist": {
-          "version": "3.1.1",
-          "bundled": true,
-          "dev": true,
-          "optional": true
-        }
-      }
-    },
-    "fstream": {
-      "version": "1.0.12",
-      "resolved": "https://registry.npm.taobao.org/fstream/download/fstream-1.0.12.tgz",
-      "integrity": "sha1-Touo7i1Ivk99DeUFRVVI6uWTIEU=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.2",
-        "inherits": "~2.0.0",
-        "mkdirp": ">=0.5 0",
-        "rimraf": "2"
-      }
-    },
-    "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=",
-      "dev": true
-    },
-    "functional-red-black-tree": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/functional-red-black-tree/download/functional-red-black-tree-1.0.1.tgz",
-      "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
-      "dev": true
-    },
-    "fuse.js": {
-      "version": "3.4.4",
-      "resolved": "https://registry.npm.taobao.org/fuse.js/download/fuse.js-3.4.4.tgz",
-      "integrity": "sha1-+Y9V/LO1lc9qPmKcX/rxCYIQPpU="
-    },
-    "g-status": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/g-status/download/g-status-2.0.2.tgz",
-      "integrity": "sha1-Jw/TIRno/JSW8Gb+X+iOCmvHi5c=",
-      "dev": true,
-      "requires": {
-        "arrify": "^1.0.1",
-        "matcher": "^1.0.0",
-        "simple-git": "^1.85.0"
-      }
-    },
-    "gauge": {
-      "version": "2.7.4",
-      "resolved": "https://registry.npm.taobao.org/gauge/download/gauge-2.7.4.tgz",
-      "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
-      "dev": true,
-      "requires": {
-        "aproba": "^1.0.3",
-        "console-control-strings": "^1.0.0",
-        "has-unicode": "^2.0.0",
-        "object-assign": "^4.1.0",
-        "signal-exit": "^3.0.0",
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1",
-        "wide-align": "^1.1.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-          "dev": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        }
-      }
-    },
-    "gaze": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/gaze/download/gaze-1.1.3.tgz",
-      "integrity": "sha1-xEFzPhO5J6yMD/C0w7Az8ogSkko=",
-      "dev": true,
-      "requires": {
-        "globule": "^1.0.0"
-      }
-    },
-    "get-caller-file": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz",
-      "integrity": "sha1-+Xj6TJDR3+f/LWvtoqUV5xO9z0o="
-    },
-    "get-own-enumerable-property-symbols": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/get-own-enumerable-property-symbols/download/get-own-enumerable-property-symbols-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fget-own-enumerable-property-symbols%2Fdownload%2Fget-own-enumerable-property-symbols-3.0.2.tgz",
-      "integrity": "sha1-tf3nfyLL4185C04ImSLFC85u9mQ=",
-      "dev": true
-    },
-    "get-stdin": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-6.0.0.tgz",
-      "integrity": "sha1-ngm/cSs2CrkiXoEgSPcf3pyJZXs=",
-      "dev": true
-    },
-    "get-stream": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz",
-      "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
-    },
-    "get-value": {
-      "version": "2.0.6",
-      "resolved": "https://registry.npm.taobao.org/get-value/download/get-value-2.0.6.tgz",
-      "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
-      "dev": true
-    },
-    "getpass": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npm.taobao.org/getpass/download/getpass-0.1.7.tgz",
-      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0"
-      }
-    },
-    "glob": {
-      "version": "7.1.6",
-      "resolved": "https://registry.npm.taobao.org/glob/download/glob-7.1.6.tgz",
-      "integrity": "sha1-FB8zuBp8JJLhJVlDB0gMRmeSeKY=",
-      "dev": true,
-      "requires": {
-        "fs.realpath": "^1.0.0",
-        "inflight": "^1.0.4",
-        "inherits": "2",
-        "minimatch": "^3.0.4",
-        "once": "^1.3.0",
-        "path-is-absolute": "^1.0.0"
-      }
-    },
-    "glob-base": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/glob-base/download/glob-base-0.3.0.tgz",
-      "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
-      "dev": true,
-      "requires": {
-        "glob-parent": "^2.0.0",
-        "is-glob": "^2.0.0"
-      },
-      "dependencies": {
-        "glob-parent": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-2.0.0.tgz",
-          "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
-          "dev": true,
-          "requires": {
-            "is-glob": "^2.0.0"
-          }
-        },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        }
-      }
-    },
-    "glob-parent": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
-      "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
-      "dev": true,
-      "requires": {
-        "is-glob": "^3.1.0",
-        "path-dirname": "^1.0.0"
-      },
-      "dependencies": {
-        "is-glob": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
-          "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^2.1.0"
-          }
-        }
-      }
-    },
-    "glob-to-regexp": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/glob-to-regexp/download/glob-to-regexp-0.3.0.tgz",
-      "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=",
-      "dev": true
-    },
-    "global-modules": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/global-modules/download/global-modules-1.0.0.tgz",
-      "integrity": "sha1-bXcPDrUjrHgWTXK15xqIdyZcw+o=",
-      "dev": true,
-      "requires": {
-        "global-prefix": "^1.0.1",
-        "is-windows": "^1.0.1",
-        "resolve-dir": "^1.0.0"
-      }
-    },
-    "global-prefix": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/global-prefix/download/global-prefix-1.0.2.tgz",
-      "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
-      "dev": true,
-      "requires": {
-        "expand-tilde": "^2.0.2",
-        "homedir-polyfill": "^1.0.1",
-        "ini": "^1.3.4",
-        "is-windows": "^1.0.1",
-        "which": "^1.2.14"
-      }
-    },
-    "globals": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npm.taobao.org/globals/download/globals-11.12.0.tgz",
-      "integrity": "sha1-q4eVM4hooLq9hSV1gBjCp+uVxC4=",
-      "dev": true
-    },
-    "globby": {
-      "version": "9.2.0",
-      "resolved": "https://registry.npm.taobao.org/globby/download/globby-9.2.0.tgz",
-      "integrity": "sha1-/QKacGxwPSm90XD0tts6P3p8tj0=",
-      "dev": true,
-      "requires": {
-        "@types/glob": "^7.1.1",
-        "array-union": "^1.0.2",
-        "dir-glob": "^2.2.2",
-        "fast-glob": "^2.2.6",
-        "glob": "^7.1.3",
-        "ignore": "^4.0.3",
-        "pify": "^4.0.1",
-        "slash": "^2.0.0"
-      },
-      "dependencies": {
-        "ignore": {
-          "version": "4.0.6",
-          "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz",
-          "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
-          "dev": true
-        },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz",
-          "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
-          "dev": true
-        }
-      }
-    },
-    "globule": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/globule/download/globule-1.3.1.tgz",
-      "integrity": "sha1-kKJTOPIrf761J87mPGKa6nVNM7k=",
-      "dev": true,
-      "requires": {
-        "glob": "~7.1.1",
-        "lodash": "~4.17.12",
-        "minimatch": "~3.0.2"
-      }
-    },
-    "good-listener": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/good-listener/download/good-listener-1.2.2.tgz",
-      "integrity": "sha1-1TswzfkxPf+33JoNR3CWqm0UXFA=",
-      "requires": {
-        "delegate": "^3.1.2"
-      }
-    },
-    "graceful-fs": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npm.taobao.org/graceful-fs/download/graceful-fs-4.2.3.tgz",
-      "integrity": "sha1-ShL/G2A3bvCYYsIJPt2Qgyi+hCM=",
-      "dev": true
-    },
-    "growly": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/growly/download/growly-1.3.0.tgz",
-      "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
-      "dev": true
-    },
-    "gzip-size": {
-      "version": "5.1.1",
-      "resolved": "https://registry.npm.taobao.org/gzip-size/download/gzip-size-5.1.1.tgz",
-      "integrity": "sha1-y5vuaS+HwGErIyhAqHOQTkwTUnQ=",
-      "dev": true,
-      "requires": {
-        "duplexer": "^0.1.1",
-        "pify": "^4.0.1"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz",
-          "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
-          "dev": true
-        }
-      }
-    },
-    "handle-thing": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/handle-thing/download/handle-thing-2.0.0.tgz",
-      "integrity": "sha1-DgOWlf9QyT/CiFV9aW88HcZ3Z1Q=",
-      "dev": true
-    },
-    "handlebars": {
-      "version": "4.7.3",
-      "resolved": "https://registry.npm.taobao.org/handlebars/download/handlebars-4.7.3.tgz",
-      "integrity": "sha1-js4nl4Johs+AgtFyb/IdKgIlUO4=",
-      "dev": true,
-      "requires": {
-        "neo-async": "^2.6.0",
-        "optimist": "^0.6.1",
-        "source-map": "^0.6.1",
-        "uglify-js": "^3.1.4"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-          "dev": true
-        }
-      }
-    },
-    "har-schema": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/har-schema/download/har-schema-2.0.0.tgz",
-      "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
-      "dev": true
-    },
-    "har-validator": {
-      "version": "5.1.3",
-      "resolved": "https://registry.npm.taobao.org/har-validator/download/har-validator-5.1.3.tgz",
-      "integrity": "sha1-HvievT5JllV2de7ZiTEQ3DUPoIA=",
-      "dev": true,
-      "requires": {
-        "ajv": "^6.5.5",
-        "har-schema": "^2.0.0"
-      }
-    },
-    "has": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/has/download/has-1.0.3.tgz",
-      "integrity": "sha1-ci18v8H2qoJB8W3YFOAR4fQeh5Y=",
-      "dev": true,
-      "requires": {
-        "function-bind": "^1.1.1"
-      }
-    },
-    "has-ansi": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-ansi/download/has-ansi-2.0.0.tgz",
-      "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
-      "dev": true,
-      "requires": {
-        "ansi-regex": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        }
-      }
-    },
-    "has-color": {
-      "version": "0.1.7",
-      "resolved": "https://registry.npm.taobao.org/has-color/download/has-color-0.1.7.tgz",
-      "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8="
-    },
-    "has-flag": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
-    },
-    "has-symbols": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz?cache=0&sync_timestamp=1573950719586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.1.tgz",
-      "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg=",
-      "dev": true
-    },
-    "has-unicode": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/has-unicode/download/has-unicode-2.0.1.tgz",
-      "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
-      "dev": true
-    },
-    "has-value": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz",
-      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
-      "dev": true,
-      "requires": {
-        "get-value": "^2.0.6",
-        "has-values": "^1.0.0",
-        "isobject": "^3.0.0"
-      }
-    },
-    "has-values": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz",
-      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
-      "dev": true,
-      "requires": {
-        "is-number": "^3.0.0",
-        "kind-of": "^4.0.0"
-      },
-      "dependencies": {
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
-          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        }
-      }
-    },
-    "hash-base": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.0.4.tgz",
-      "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "safe-buffer": "^5.0.1"
-      }
-    },
-    "hash-sum": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
-      "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
-      "dev": true
-    },
-    "hash.js": {
-      "version": "1.1.7",
-      "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
-      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.3",
-        "minimalistic-assert": "^1.0.1"
-      }
-    },
-    "he": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
-      "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
-      "dev": true
-    },
-    "header-case": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/header-case/download/header-case-1.0.1.tgz",
-      "integrity": "sha1-lTWXMZfBRLCWE81l0xfvGZY70C0=",
-      "dev": true,
-      "requires": {
-        "no-case": "^2.2.0",
-        "upper-case": "^1.1.3"
-      }
-    },
-    "hex-color-regex": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz",
-      "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=",
-      "dev": true
-    },
-    "highlight.js": {
-      "version": "9.18.1",
-      "resolved": "https://registry.npm.taobao.org/highlight.js/download/highlight.js-9.18.1.tgz",
-      "integrity": "sha1-7SGqAB/mJSuxCj121HVzxlOf4Tw="
-    },
-    "hmac-drbg": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
-      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
-      "dev": true,
-      "requires": {
-        "hash.js": "^1.0.3",
-        "minimalistic-assert": "^1.0.0",
-        "minimalistic-crypto-utils": "^1.0.1"
-      }
-    },
-    "home-or-tmp": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/home-or-tmp/download/home-or-tmp-3.0.0.tgz",
-      "integrity": "sha1-V6j+JM8zzdUkhgoVgh3cJchmcfs=",
-      "dev": true
-    },
-    "homedir-polyfill": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/homedir-polyfill/download/homedir-polyfill-1.0.3.tgz",
-      "integrity": "sha1-dDKYzvTlrz4ZQWH7rcwhUdOgWOg=",
-      "dev": true,
-      "requires": {
-        "parse-passwd": "^1.0.0"
-      }
-    },
-    "hoopy": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz",
-      "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=",
-      "dev": true
-    },
-    "hosted-git-info": {
-      "version": "2.8.8",
-      "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz?cache=0&sync_timestamp=1583017354488&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhosted-git-info%2Fdownload%2Fhosted-git-info-2.8.8.tgz",
-      "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=",
-      "dev": true
-    },
-    "hpack.js": {
-      "version": "2.1.6",
-      "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz",
-      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
-      "dev": true,
-      "requires": {
-        "inherits": "^2.0.1",
-        "obuf": "^1.0.0",
-        "readable-stream": "^2.0.1",
-        "wbuf": "^1.1.0"
-      }
-    },
-    "hsl-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz",
-      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
-      "dev": true
-    },
-    "hsla-regex": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz",
-      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
-      "dev": true
-    },
-    "html-comment-regex": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz",
-      "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=",
-      "dev": true
-    },
-    "html-encoding-sniffer": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/html-encoding-sniffer/download/html-encoding-sniffer-1.0.2.tgz",
-      "integrity": "sha1-5w2EuU2lOqN14R/jo1G+ZkLKRvg=",
-      "dev": true,
-      "requires": {
-        "whatwg-encoding": "^1.0.1"
-      }
-    },
-    "html-entities": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.2.1.tgz",
-      "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
-      "dev": true
-    },
-    "html-minifier": {
-      "version": "3.5.21",
-      "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz",
-      "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=",
-      "dev": true,
-      "requires": {
-        "camel-case": "3.0.x",
-        "clean-css": "4.2.x",
-        "commander": "2.17.x",
-        "he": "1.2.x",
-        "param-case": "2.1.x",
-        "relateurl": "0.2.x",
-        "uglify-js": "3.4.x"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-          "dev": true
-        },
-        "uglify-js": {
-          "version": "3.4.10",
-          "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1582036112063&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
-          "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
-          "dev": true,
-          "requires": {
-            "commander": "~2.19.0",
-            "source-map": "~0.6.1"
-          },
-          "dependencies": {
-            "commander": {
-              "version": "2.19.0",
-              "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz",
-              "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=",
-              "dev": true
-            }
-          }
-        }
-      }
-    },
-    "html-tags": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-2.0.0.tgz",
-      "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=",
-      "dev": true
-    },
-    "html-webpack-plugin": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz?cache=0&sync_timestamp=1573491310172&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-3.2.0.tgz",
-      "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
-      "dev": true,
-      "requires": {
-        "html-minifier": "^3.2.3",
-        "loader-utils": "^0.2.16",
-        "lodash": "^4.17.3",
-        "pretty-error": "^2.0.2",
-        "tapable": "^1.0.0",
-        "toposort": "^1.0.0",
-        "util.promisify": "1.0.0"
-      },
-      "dependencies": {
-        "big.js": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz",
-          "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
-          "dev": true
-        },
-        "emojis-list": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
-          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
-          "dev": true
-        },
-        "loader-utils": {
-          "version": "0.2.17",
-          "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz",
-          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
-          "dev": true,
-          "requires": {
-            "big.js": "^3.1.3",
-            "emojis-list": "^2.0.0",
-            "json5": "^0.5.0",
-            "object-assign": "^4.0.1"
-          }
-        },
-        "util.promisify": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz",
-          "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
-          "dev": true,
-          "requires": {
-            "define-properties": "^1.1.2",
-            "object.getownpropertydescriptors": "^2.0.3"
-          }
-        }
-      }
-    },
-    "htmlparser2": {
-      "version": "3.10.1",
-      "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1582422905208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz",
-      "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=",
-      "dev": true,
-      "requires": {
-        "domelementtype": "^1.3.1",
-        "domhandler": "^2.3.0",
-        "domutils": "^1.5.1",
-        "entities": "^1.1.1",
-        "inherits": "^2.0.1",
-        "readable-stream": "^3.1.1"
-      },
-      "dependencies": {
-        "readable-stream": {
-          "version": "3.6.0",
-          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581622984924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
-          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
-          "dev": true,
-          "requires": {
-            "inherits": "^2.0.3",
-            "string_decoder": "^1.1.1",
-            "util-deprecate": "^1.0.1"
-          }
-        }
-      }
-    },
-    "http-deceiver": {
-      "version": "1.2.7",
-      "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz",
-      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
-      "dev": true
-    },
-    "http-errors": {
-      "version": "1.7.2",
-      "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz?cache=0&sync_timestamp=1561418493658&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.7.2.tgz",
-      "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
-      "dev": true,
-      "requires": {
-        "depd": "~1.1.2",
-        "inherits": "2.0.3",
-        "setprototypeof": "1.1.1",
-        "statuses": ">= 1.5.0 < 2",
-        "toidentifier": "1.0.0"
-      },
-      "dependencies": {
-        "inherits": {
-          "version": "2.0.3",
-          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz",
-          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
-          "dev": true
-        }
-      }
-    },
-    "http-parser-js": {
-      "version": "0.4.10",
-      "resolved": "https://registry.npm.taobao.org/http-parser-js/download/http-parser-js-0.4.10.tgz?cache=0&sync_timestamp=1572714277347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-parser-js%2Fdownload%2Fhttp-parser-js-0.4.10.tgz",
-      "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
-      "dev": true
-    },
-    "http-proxy": {
-      "version": "1.18.0",
-      "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.0.tgz?cache=0&sync_timestamp=1568770896103&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.0.tgz",
-      "integrity": "sha1-2+VfY+daNH2389mZdPJpKjFKajo=",
-      "dev": true,
-      "requires": {
-        "eventemitter3": "^4.0.0",
-        "follow-redirects": "^1.0.0",
-        "requires-port": "^1.0.0"
-      }
-    },
-    "http-proxy-middleware": {
-      "version": "0.19.1",
-      "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz",
-      "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=",
-      "dev": true,
-      "requires": {
-        "http-proxy": "^1.17.0",
-        "is-glob": "^4.0.0",
-        "lodash": "^4.17.11",
-        "micromatch": "^3.1.10"
-      }
-    },
-    "http-signature": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1582586910479&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz",
-      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "^1.0.0",
-        "jsprim": "^1.2.2",
-        "sshpk": "^1.7.0"
-      }
-    },
-    "https-browserify": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
-      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
-      "dev": true
-    },
-    "husky": {
-      "version": "1.3.1",
-      "resolved": "https://registry.npm.taobao.org/husky/download/husky-1.3.1.tgz",
-      "integrity": "sha1-JoI+OZMAOIyir/8Rz6ioawAz+uA=",
-      "dev": true,
-      "requires": {
-        "cosmiconfig": "^5.0.7",
-        "execa": "^1.0.0",
-        "find-up": "^3.0.0",
-        "get-stdin": "^6.0.0",
-        "is-ci": "^2.0.0",
-        "pkg-dir": "^3.0.0",
-        "please-upgrade-node": "^3.1.1",
-        "read-pkg": "^4.0.1",
-        "run-node": "^1.0.0",
-        "slash": "^2.0.0"
-      },
-      "dependencies": {
-        "ci-info": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/ci-info/download/ci-info-2.0.0.tgz",
-          "integrity": "sha1-Z6npZL4xpR4V5QENWObxKDQAL0Y=",
-          "dev": true
-        },
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz",
-          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
-          "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "find-up": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz",
-          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
-          "dev": true,
-          "requires": {
-            "locate-path": "^3.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
-          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "is-ci": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-2.0.0.tgz",
-          "integrity": "sha1-a8YzQYGBDgS1wis9WJ/cpVAmQEw=",
-          "dev": true,
-          "requires": {
-            "ci-info": "^2.0.0"
-          }
-        },
-        "locate-path": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
-          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
-          "dev": true,
-          "requires": {
-            "p-locate": "^3.0.0",
-            "path-exists": "^3.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.2.tgz?cache=0&sync_timestamp=1577904218145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.2.2.tgz",
-          "integrity": "sha1-YSebZ3IfUoeqHBOpp/u8SMkpGx4=",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
-        "p-locate": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz",
-          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
-          "dev": true,
-          "requires": {
-            "p-limit": "^2.0.0"
-          }
-        },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
-          "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
-          "dev": true
-        },
-        "parse-json": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz",
-          "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
-          "dev": true,
-          "requires": {
-            "error-ex": "^1.3.1",
-            "json-parse-better-errors": "^1.0.1"
-          }
-        },
-        "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
-          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
-          "dev": true,
-          "requires": {
-            "find-up": "^3.0.0"
-          }
-        },
-        "read-pkg": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-4.0.1.tgz",
-          "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
-          "dev": true,
-          "requires": {
-            "normalize-package-data": "^2.3.2",
-            "parse-json": "^4.0.0",
-            "pify": "^3.0.0"
-          }
-        }
-      }
-    },
-    "iconv-lite": {
-      "version": "0.4.24",
-      "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1579333981154&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz",
-      "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
-      "dev": true,
-      "requires": {
-        "safer-buffer": ">= 2.1.2 < 3"
-      }
-    },
-    "icss-utils": {
-      "version": "4.1.1",
-      "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz",
-      "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=",
-      "requires": {
-        "postcss": "^7.0.14"
-      }
-    },
-    "ieee754": {
-      "version": "1.1.13",
-      "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz",
-      "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=",
-      "dev": true
-    },
-    "iferr": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz",
-      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
-      "dev": true
-    },
-    "ignore": {
-      "version": "3.3.10",
-      "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-3.3.10.tgz",
-      "integrity": "sha1-Cpf7h2mG6AgcYxFg+PnziRV/AEM=",
-      "dev": true
-    },
-    "image-size": {
-      "version": "0.5.5",
-      "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz?cache=0&sync_timestamp=1569841504754&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimage-size%2Fdownload%2Fimage-size-0.5.5.tgz",
-      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
-      "dev": true
-    },
-    "immediate": {
-      "version": "3.0.6",
-      "resolved": "https://registry.npm.taobao.org/immediate/download/immediate-3.0.6.tgz",
-      "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
-    },
-    "import-cwd": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
-      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
-      "dev": true,
-      "requires": {
-        "import-from": "^2.1.0"
-      }
-    },
-    "import-fresh": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1573665120798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz",
-      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
-      "dev": true,
-      "requires": {
-        "caller-path": "^2.0.0",
-        "resolve-from": "^3.0.0"
-      },
-      "dependencies": {
-        "caller-path": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/caller-path/download/caller-path-2.0.0.tgz?cache=0&sync_timestamp=1574395542397&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcaller-path%2Fdownload%2Fcaller-path-2.0.0.tgz",
-          "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
-          "dev": true,
-          "requires": {
-            "caller-callsite": "^2.0.0"
-          }
-        },
-        "resolve-from": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz",
-          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-          "dev": true
-        }
-      }
-    },
-    "import-from": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz",
-      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
-      "dev": true,
-      "requires": {
-        "resolve-from": "^3.0.0"
-      },
-      "dependencies": {
-        "resolve-from": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz",
-          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-          "dev": true
-        }
-      }
-    },
-    "import-local": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-1.0.0.tgz",
-      "integrity": "sha1-Xk/9wD9P5sAJxnKb6yljHC+CJ7w=",
-      "dev": true,
-      "requires": {
-        "pkg-dir": "^2.0.0",
-        "resolve-cwd": "^2.0.0"
-      }
-    },
-    "imurmurhash": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
-      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
-      "dev": true
-    },
-    "in-publish": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/in-publish/download/in-publish-2.0.0.tgz",
-      "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=",
-      "dev": true
-    },
-    "indent-string": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-3.2.0.tgz",
-      "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
-      "dev": true
-    },
-    "indexes-of": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz",
-      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
-    },
-    "infer-owner": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz",
-      "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=",
-      "dev": true
-    },
-    "inflight": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
-      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
-      "dev": true,
-      "requires": {
-        "once": "^1.3.0",
-        "wrappy": "1"
-      }
-    },
-    "inherits": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz",
-      "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w="
-    },
-    "ini": {
-      "version": "1.3.5",
-      "resolved": "https://registry.npm.taobao.org/ini/download/ini-1.3.5.tgz",
-      "integrity": "sha1-7uJfVtscnsYIXgwid4CD9Zar+Sc=",
-      "dev": true
-    },
-    "inquirer": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-3.3.0.tgz?cache=0&sync_timestamp=1583819607980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-3.3.0.tgz",
-      "integrity": "sha1-ndLyrXZdyrH/BEO0kUQqILoifck=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "ansi-escapes": "^3.0.0",
-        "chalk": "^2.0.0",
-        "cli-cursor": "^2.1.0",
-        "cli-width": "^2.0.0",
-        "external-editor": "^2.0.4",
-        "figures": "^2.0.0",
-        "lodash": "^4.3.0",
-        "mute-stream": "0.0.7",
-        "run-async": "^2.2.0",
-        "rx-lite": "^4.0.8",
-        "rx-lite-aggregates": "^4.0.8",
-        "string-width": "^2.1.0",
-        "strip-ansi": "^4.0.0",
-        "through": "^2.3.6"
-      },
-      "dependencies": {
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        }
-      }
-    },
-    "internal-ip": {
-      "version": "4.3.0",
-      "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz",
-      "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=",
-      "dev": true,
-      "requires": {
-        "default-gateway": "^4.2.0",
-        "ipaddr.js": "^1.9.0"
-      }
-    },
-    "interpret": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/interpret/download/interpret-1.2.0.tgz",
-      "integrity": "sha1-1QYaYiS+WOgIOYX1AU2EQ1lXYpY=",
-      "dev": true
-    },
-    "invariant": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npm.taobao.org/invariant/download/invariant-2.2.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finvariant%2Fdownload%2Finvariant-2.2.4.tgz",
-      "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=",
-      "dev": true,
-      "requires": {
-        "loose-envify": "^1.0.0"
-      }
-    },
-    "invert-kv": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-1.0.0.tgz",
-      "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
-    },
-    "ip": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz",
-      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
-      "dev": true
-    },
-    "ip-regex": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz",
-      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
-      "dev": true
-    },
-    "ipaddr.js": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
-      "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
-      "dev": true
-    },
-    "is-absolute": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-absolute/download/is-absolute-1.0.0.tgz",
-      "integrity": "sha1-OV4a6EsR8mrReV5zwXN45IowFXY=",
-      "dev": true,
-      "requires": {
-        "is-relative": "^1.0.0",
-        "is-windows": "^1.0.1"
-      }
-    },
-    "is-absolute-url": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz?cache=0&sync_timestamp=1569736493122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-2.1.0.tgz",
-      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
-      "dev": true
-    },
-    "is-accessor-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
-      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
-      "dev": true,
-      "requires": {
-        "kind-of": "^3.0.2"
-      },
-      "dependencies": {
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
+          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
           "dev": true
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
         }
       }
     },
-    "is-arguments": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.0.4.tgz",
-      "integrity": "sha1-P6+WbHy6D/Q3+zH2JQCC/PBEjPM=",
-      "dev": true
-    },
-    "is-arrayish": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
-      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+    "has-flag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-3.0.0.tgz",
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
       "dev": true
     },
-    "is-binary-path": {
+    "has-symbols": {
       "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
-      "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
-      "dev": true,
-      "requires": {
-        "binary-extensions": "^1.0.0"
-      }
-    },
-    "is-buffer": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-2.0.4.tgz",
-      "integrity": "sha1-PlcvI8hBGlz9lVfISeNmXgspBiM="
-    },
-    "is-callable": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.1.5.tgz",
-      "integrity": "sha1-9+RrWWiQRW23Tn9ul2yzJz0G+qs=",
-      "dev": true
-    },
-    "is-ci": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz",
-      "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=",
-      "dev": true,
-      "requires": {
-        "ci-info": "^1.5.0"
-      }
+      "resolved": "https://registry.npm.taobao.org/has-symbols/download/has-symbols-1.0.1.tgz?cache=0&sync_timestamp=1573950719586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhas-symbols%2Fdownload%2Fhas-symbols-1.0.1.tgz",
+      "integrity": "sha1-n1IUdYpEGWxAbZvXbOv4HsLdMeg="
     },
-    "is-color-stop": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz",
-      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
+    "has-value": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-value/download/has-value-1.0.0.tgz",
+      "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
       "dev": true,
       "requires": {
-        "css-color-names": "^0.0.4",
-        "hex-color-regex": "^1.1.0",
-        "hsl-regex": "^1.0.0",
-        "hsla-regex": "^1.0.0",
-        "rgb-regex": "^1.0.1",
-        "rgba-regex": "^1.0.0"
+        "get-value": "^2.0.6",
+        "has-values": "^1.0.0",
+        "isobject": "^3.0.0"
       }
     },
-    "is-data-descriptor": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
-      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+    "has-values": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/has-values/download/has-values-1.0.0.tgz",
+      "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
       "dev": true,
       "requires": {
-        "kind-of": "^3.0.2"
+        "is-number": "^3.0.0",
+        "kind-of": "^4.0.0"
       },
       "dependencies": {
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
         "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-4.0.0.tgz",
+          "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
           "dev": true,
           "requires": {
             "is-buffer": "^1.1.5"
@@ -8470,1037 +6170,741 @@
         }
       }
     },
-    "is-date-object": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729182289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz",
-      "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=",
-      "dev": true
-    },
-    "is-descriptor": {
-      "version": "0.1.6",
-      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
-      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
-      "dev": true,
-      "requires": {
-        "is-accessor-descriptor": "^0.1.6",
-        "is-data-descriptor": "^0.1.4",
-        "kind-of": "^5.0.0"
-      },
-      "dependencies": {
-        "kind-of": {
-          "version": "5.1.0",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
-          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
-          "dev": true
-        }
-      }
-    },
-    "is-directory": {
-      "version": "0.3.1",
-      "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz",
-      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
-      "dev": true
-    },
-    "is-dotfile": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/is-dotfile/download/is-dotfile-1.0.3.tgz",
-      "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=",
-      "dev": true
-    },
-    "is-equal-shallow": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npm.taobao.org/is-equal-shallow/download/is-equal-shallow-0.1.3.tgz",
-      "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=",
-      "dev": true,
-      "requires": {
-        "is-primitive": "^2.0.0"
-      }
-    },
-    "is-extendable": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz",
-      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
-      "dev": true
-    },
-    "is-extglob": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
-      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
-      "dev": true
-    },
-    "is-finite": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-finite/download/is-finite-1.1.0.tgz?cache=0&sync_timestamp=1581061044831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-finite%2Fdownload%2Fis-finite-1.1.0.tgz",
-      "integrity": "sha1-kEE1x3+0LAZB1qobzbxNqo2ggvM=",
-      "dev": true
-    },
-    "is-fullwidth-code-point": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
-      "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
-    },
-    "is-generator-fn": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-generator-fn/download/is-generator-fn-1.0.0.tgz",
-      "integrity": "sha1-lp1J4bszKfa7fwkIm+JleLLd1Go=",
-      "dev": true
-    },
-    "is-glob": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
-      "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
-      "dev": true,
-      "requires": {
-        "is-extglob": "^2.1.1"
-      }
-    },
-    "is-lower-case": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/is-lower-case/download/is-lower-case-1.1.3.tgz",
-      "integrity": "sha1-fhR75HaNxGbbO/shzGCzHmrWk5M=",
-      "dev": true,
-      "requires": {
-        "lower-case": "^1.1.0"
-      }
-    },
-    "is-number": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
-      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+    "hash-base": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/hash-base/download/hash-base-3.1.0.tgz",
+      "integrity": "sha1-VcOB2eBuHSmXqIO0o/3f5/DTrzM=",
       "dev": true,
       "requires": {
-        "kind-of": "^3.0.2"
+        "inherits": "^2.0.4",
+        "readable-stream": "^3.6.0",
+        "safe-buffer": "^5.2.0"
       },
       "dependencies": {
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581622984924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
           "dev": true,
           "requires": {
-            "is-buffer": "^1.1.5"
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
           }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.2.1.tgz?cache=0&sync_timestamp=1589129103371&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.2.1.tgz",
+          "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=",
+          "dev": true
         }
       }
     },
-    "is-obj": {
+    "hash-sum": {
       "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz",
-      "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=",
+      "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-2.0.0.tgz",
+      "integrity": "sha1-gdAbtd6OpKIUrV1urRtSNGCwtFo=",
       "dev": true
     },
-    "is-observable": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-observable/download/is-observable-1.1.0.tgz",
-      "integrity": "sha1-s+mGyPRN6VCGfKtUA/WjRlAFl14=",
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npm.taobao.org/hash.js/download/hash.js-1.1.7.tgz",
+      "integrity": "sha1-C6vKU46NTuSg+JiNaIZlN6ADz0I=",
       "dev": true,
       "requires": {
-        "symbol-observable": "^1.1.0"
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
       }
     },
-    "is-path-cwd": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz",
-      "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=",
+    "he": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
+      "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
       "dev": true
     },
-    "is-path-in-cwd": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1562347183080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz",
-      "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=",
-      "dev": true,
-      "requires": {
-        "is-path-inside": "^2.1.0"
-      }
-    },
-    "is-path-inside": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz",
-      "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=",
-      "dev": true,
-      "requires": {
-        "path-is-inside": "^1.0.2"
-      }
-    },
-    "is-plain-obj": {
+    "hex-color-regex": {
       "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz",
-      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+      "resolved": "https://registry.npm.taobao.org/hex-color-regex/download/hex-color-regex-1.1.0.tgz",
+      "integrity": "sha1-TAb8y0YC/iYCs8k9+C1+fb8aio4=",
       "dev": true
     },
-    "is-plain-object": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz",
-      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
+    "highlight.js": {
+      "version": "10.4.1",
+      "resolved": "https://registry.npm.taobao.org/highlight.js/download/highlight.js-10.4.1.tgz",
+      "integrity": "sha1-1I+89KmXHENhs/lfMCdHr+GdutA=",
+      "dev": true
+    },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/hmac-drbg/download/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
       "dev": true,
       "requires": {
-        "isobject": "^3.0.1"
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
       }
     },
-    "is-posix-bracket": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/is-posix-bracket/download/is-posix-bracket-0.1.1.tgz",
-      "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=",
-      "dev": true
-    },
-    "is-primitive": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-primitive/download/is-primitive-2.0.0.tgz",
-      "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=",
+    "hoopy": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/hoopy/download/hoopy-0.1.4.tgz",
+      "integrity": "sha1-YJIH1mEQADOpqUAq096mdzgcGx0=",
       "dev": true
     },
-    "is-promise": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-promise/download/is-promise-2.1.0.tgz",
-      "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+    "hosted-git-info": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npm.taobao.org/hosted-git-info/download/hosted-git-info-2.8.8.tgz",
+      "integrity": "sha1-dTm9S8Hg4KiVgVouAmJCCxKFhIg=",
       "dev": true
     },
-    "is-regex": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.0.5.tgz",
-      "integrity": "sha1-OdWJo1i/GJZ/cmlnEguPwa7XTq4=",
+    "hpack.js": {
+      "version": "2.1.6",
+      "resolved": "https://registry.npm.taobao.org/hpack.js/download/hpack.js-2.1.6.tgz",
+      "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=",
       "dev": true,
       "requires": {
-        "has": "^1.0.3"
+        "inherits": "^2.0.1",
+        "obuf": "^1.0.0",
+        "readable-stream": "^2.0.1",
+        "wbuf": "^1.1.0"
       }
     },
-    "is-regexp": {
+    "hsl-regex": {
       "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-regexp/download/is-regexp-1.0.0.tgz",
-      "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+      "resolved": "https://registry.npm.taobao.org/hsl-regex/download/hsl-regex-1.0.0.tgz",
+      "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=",
       "dev": true
     },
-    "is-relative": {
+    "hsla-regex": {
       "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-relative/download/is-relative-1.0.0.tgz",
-      "integrity": "sha1-obtpNc6MXboei5dUubLcwCDiJg0=",
+      "resolved": "https://registry.npm.taobao.org/hsla-regex/download/hsla-regex-1.0.0.tgz",
+      "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=",
+      "dev": true
+    },
+    "html-comment-regex": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/html-comment-regex/download/html-comment-regex-1.1.2.tgz",
+      "integrity": "sha1-l9RoiutcgYhqNk+qDK0d2hTUM6c=",
+      "dev": true
+    },
+    "html-entities": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npm.taobao.org/html-entities/download/html-entities-1.3.3.tgz?cache=0&sync_timestamp=1607916471106&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-entities%2Fdownload%2Fhtml-entities-1.3.3.tgz",
+      "integrity": "sha1-PcpjikPufeMW/CMGc5hJEVKtRzY=",
+      "dev": true
+    },
+    "html-minifier": {
+      "version": "3.5.21",
+      "resolved": "https://registry.npm.taobao.org/html-minifier/download/html-minifier-3.5.21.tgz",
+      "integrity": "sha1-0AQOBUcw41TbAIRjWTGUAVIS0gw=",
       "dev": true,
       "requires": {
-        "is-unc-path": "^1.0.0"
+        "camel-case": "3.0.x",
+        "clean-css": "4.2.x",
+        "commander": "2.17.x",
+        "he": "1.2.x",
+        "param-case": "2.1.x",
+        "relateurl": "0.2.x",
+        "uglify-js": "3.4.x"
+      },
+      "dependencies": {
+        "commander": {
+          "version": "2.17.1",
+          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.17.1.tgz?cache=0&sync_timestamp=1607933281807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.17.1.tgz",
+          "integrity": "sha1-vXerfebelCBc6sxy8XFtKfIKd78=",
+          "dev": true
+        }
       }
     },
-    "is-resolvable": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz",
-      "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=",
+    "html-tags": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/html-tags/download/html-tags-3.1.0.tgz",
+      "integrity": "sha1-e15vfmZen7QfMAB+2eDUHpf7IUA=",
       "dev": true
     },
-    "is-stream": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz",
-      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
-    },
-    "is-svg": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz",
-      "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=",
+    "html-webpack-plugin": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npm.taobao.org/html-webpack-plugin/download/html-webpack-plugin-3.2.0.tgz?cache=0&sync_timestamp=1608059716703&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtml-webpack-plugin%2Fdownload%2Fhtml-webpack-plugin-3.2.0.tgz",
+      "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=",
       "dev": true,
       "requires": {
-        "html-comment-regex": "^1.1.0"
+        "html-minifier": "^3.2.3",
+        "loader-utils": "^0.2.16",
+        "lodash": "^4.17.3",
+        "pretty-error": "^2.0.2",
+        "tapable": "^1.0.0",
+        "toposort": "^1.0.0",
+        "util.promisify": "1.0.0"
+      },
+      "dependencies": {
+        "big.js": {
+          "version": "3.2.0",
+          "resolved": "https://registry.npm.taobao.org/big.js/download/big.js-3.2.0.tgz",
+          "integrity": "sha1-pfwpi4G54Nyi5FiCR4S2XFK6WI4=",
+          "dev": true
+        },
+        "emojis-list": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/emojis-list/download/emojis-list-2.1.0.tgz",
+          "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",
+          "dev": true
+        },
+        "json5": {
+          "version": "0.5.1",
+          "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz?cache=0&sync_timestamp=1586045693798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-0.5.1.tgz",
+          "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
+          "dev": true
+        },
+        "loader-utils": {
+          "version": "0.2.17",
+          "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz",
+          "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+          "dev": true,
+          "requires": {
+            "big.js": "^3.1.3",
+            "emojis-list": "^2.0.0",
+            "json5": "^0.5.0",
+            "object-assign": "^4.0.1"
+          }
+        },
+        "util.promisify": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/util.promisify/download/util.promisify-1.0.0.tgz",
+          "integrity": "sha1-RA9xZaRZyaFtwUXrjnLzVocJcDA=",
+          "dev": true,
+          "requires": {
+            "define-properties": "^1.1.2",
+            "object.getownpropertydescriptors": "^2.0.3"
+          }
+        }
       }
     },
-    "is-symbol": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz?cache=0&sync_timestamp=1574296409833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.3.tgz",
-      "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=",
+    "htmlparser2": {
+      "version": "3.10.1",
+      "resolved": "https://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.10.1.tgz?cache=0&sync_timestamp=1607394302039&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhtmlparser2%2Fdownload%2Fhtmlparser2-3.10.1.tgz",
+      "integrity": "sha1-vWedw/WYl7ajS7EHSchVu1OpOS8=",
       "dev": true,
       "requires": {
-        "has-symbols": "^1.0.1"
+        "domelementtype": "^1.3.1",
+        "domhandler": "^2.3.0",
+        "domutils": "^1.5.1",
+        "entities": "^1.1.1",
+        "inherits": "^2.0.1",
+        "readable-stream": "^3.1.1"
+      },
+      "dependencies": {
+        "entities": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npm.taobao.org/entities/download/entities-1.1.2.tgz?cache=0&sync_timestamp=1602898797807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fentities%2Fdownload%2Fentities-1.1.2.tgz",
+          "integrity": "sha1-vfpzUplmTfr9NFKe1PhSKidf6lY=",
+          "dev": true
+        },
+        "readable-stream": {
+          "version": "3.6.0",
+          "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581622984924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
+          "integrity": "sha1-M3u9o63AcGvT4CRCaihtS0sskZg=",
+          "dev": true,
+          "requires": {
+            "inherits": "^2.0.3",
+            "string_decoder": "^1.1.1",
+            "util-deprecate": "^1.0.1"
+          }
+        }
       }
     },
-    "is-typedarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
-      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+    "http-deceiver": {
+      "version": "1.2.7",
+      "resolved": "https://registry.npm.taobao.org/http-deceiver/download/http-deceiver-1.2.7.tgz",
+      "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=",
       "dev": true
     },
-    "is-unc-path": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/is-unc-path/download/is-unc-path-1.0.0.tgz",
-      "integrity": "sha1-1zHoiY7QkKEsNSrS6u1Qla0yLJ0=",
+    "http-errors": {
+      "version": "1.7.2",
+      "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz",
+      "integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=",
       "dev": true,
       "requires": {
-        "unc-path-regex": "^0.1.2"
+        "depd": "~1.1.2",
+        "inherits": "2.0.3",
+        "setprototypeof": "1.1.1",
+        "statuses": ">= 1.5.0 < 2",
+        "toidentifier": "1.0.0"
+      },
+      "dependencies": {
+        "inherits": {
+          "version": "2.0.3",
+          "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.3.tgz",
+          "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+          "dev": true
+        }
       }
     },
-    "is-upper-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/is-upper-case/download/is-upper-case-1.1.2.tgz?cache=0&sync_timestamp=1575601779106&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-upper-case%2Fdownload%2Fis-upper-case-1.1.2.tgz",
-      "integrity": "sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8=",
+    "http-proxy": {
+      "version": "1.18.1",
+      "resolved": "https://registry.npm.taobao.org/http-proxy/download/http-proxy-1.18.1.tgz?cache=0&sync_timestamp=1589778321455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-proxy%2Fdownload%2Fhttp-proxy-1.18.1.tgz",
+      "integrity": "sha1-QBVB8FNIhLv5UmAzTnL4juOXZUk=",
       "dev": true,
       "requires": {
-        "upper-case": "^1.1.0"
+        "eventemitter3": "^4.0.0",
+        "follow-redirects": "^1.0.0",
+        "requires-port": "^1.0.0"
       }
     },
-    "is-utf8": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/is-utf8/download/is-utf8-0.2.1.tgz",
-      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
-      "dev": true
+    "http-proxy-middleware": {
+      "version": "0.19.1",
+      "resolved": "https://registry.npm.taobao.org/http-proxy-middleware/download/http-proxy-middleware-0.19.1.tgz",
+      "integrity": "sha1-GDx9xKoUeRUDBkmMIQza+WCApDo=",
+      "dev": true,
+      "requires": {
+        "http-proxy": "^1.17.0",
+        "is-glob": "^4.0.0",
+        "lodash": "^4.17.11",
+        "micromatch": "^3.1.10"
+      }
     },
-    "is-whitespace": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/is-whitespace/download/is-whitespace-0.3.0.tgz",
-      "integrity": "sha1-Fjnssb4DauxppUy7QBz77XEUq38=",
-      "dev": true
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/http-signature/download/http-signature-1.2.0.tgz?cache=0&sync_timestamp=1600868613104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-signature%2Fdownload%2Fhttp-signature-1.2.0.tgz",
+      "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
     },
-    "is-windows": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
-      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
+    "https-browserify": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/https-browserify/download/https-browserify-1.0.0.tgz",
+      "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=",
       "dev": true
     },
-    "is-wsl": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz?cache=0&sync_timestamp=1569219566107&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-wsl%2Fdownload%2Fis-wsl-1.1.0.tgz",
-      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+    "human-signals": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/human-signals/download/human-signals-1.1.1.tgz",
+      "integrity": "sha1-xbHNFPUK6uCatsWf5jujOV/k36M=",
       "dev": true
     },
-    "isarray": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz",
-      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
-    },
-    "isbinaryfile": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npm.taobao.org/isbinaryfile/download/isbinaryfile-3.0.3.tgz?cache=0&sync_timestamp=1578829407263&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisbinaryfile%2Fdownload%2Fisbinaryfile-3.0.3.tgz",
-      "integrity": "sha1-XW3vPt6/boyoyunDAYOoBLX4voA=",
+    "iconv-lite": {
+      "version": "0.4.24",
+      "resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz",
+      "integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=",
       "dev": true,
       "requires": {
-        "buffer-alloc": "^1.2.0"
+        "safer-buffer": ">= 2.1.2 < 3"
       }
     },
-    "isexe": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisexe%2Fdownload%2Fisexe-2.0.0.tgz",
-      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
-    },
-    "isobject": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
-      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
-      "dev": true
-    },
-    "isstream": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
-      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+    "icss-replace-symbols": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/icss-replace-symbols/download/icss-replace-symbols-1.1.0.tgz",
+      "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
       "dev": true
     },
-    "istanbul-api": {
-      "version": "1.3.7",
-      "resolved": "https://registry.npm.taobao.org/istanbul-api/download/istanbul-api-1.3.7.tgz",
-      "integrity": "sha1-qGx3DSsD4R4/d4zXrt2C0nIgkqo=",
-      "dev": true,
-      "requires": {
-        "async": "^2.1.4",
-        "fileset": "^2.0.2",
-        "istanbul-lib-coverage": "^1.2.1",
-        "istanbul-lib-hook": "^1.2.2",
-        "istanbul-lib-instrument": "^1.10.2",
-        "istanbul-lib-report": "^1.1.5",
-        "istanbul-lib-source-maps": "^1.2.6",
-        "istanbul-reports": "^1.5.1",
-        "js-yaml": "^3.7.0",
-        "mkdirp": "^0.5.1",
-        "once": "^1.4.0"
+    "icss-utils": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npm.taobao.org/icss-utils/download/icss-utils-4.1.1.tgz?cache=0&sync_timestamp=1605801267950&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficss-utils%2Fdownload%2Ficss-utils-4.1.1.tgz",
+      "integrity": "sha1-IRcLU3ie4nRHwvR91oMIFAP5pGc=",
+      "dev": true,
+      "requires": {
+        "postcss": "^7.0.14"
       }
     },
-    "istanbul-lib-coverage": {
+    "ieee754": {
       "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/istanbul-lib-coverage/download/istanbul-lib-coverage-1.2.1.tgz?cache=0&sync_timestamp=1577062400885&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-coverage%2Fdownload%2Fistanbul-lib-coverage-1.2.1.tgz",
-      "integrity": "sha1-zPftzQoLubj3Kf7rCTBHD5r2ZPA=",
+      "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.2.1.tgz?cache=0&sync_timestamp=1603838209136&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fieee754%2Fdownload%2Fieee754-1.2.1.tgz",
+      "integrity": "sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=",
       "dev": true
     },
-    "istanbul-lib-hook": {
-      "version": "1.2.2",
-      "resolved": "https://registry.npm.taobao.org/istanbul-lib-hook/download/istanbul-lib-hook-1.2.2.tgz",
-      "integrity": "sha1-vGvwfxKmQfvxyFOR0Nqo8K6mv4Y=",
-      "dev": true,
-      "requires": {
-        "append-transform": "^0.4.0"
-      }
+    "iferr": {
+      "version": "0.1.5",
+      "resolved": "https://registry.npm.taobao.org/iferr/download/iferr-0.1.5.tgz",
+      "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
+      "dev": true
     },
-    "istanbul-lib-instrument": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npm.taobao.org/istanbul-lib-instrument/download/istanbul-lib-instrument-1.10.2.tgz?cache=0&sync_timestamp=1580741110293&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-instrument%2Fdownload%2Fistanbul-lib-instrument-1.10.2.tgz",
-      "integrity": "sha1-H1XtEKw8R/K93dUweTUSZ1TQqco=",
-      "dev": true,
-      "requires": {
-        "babel-generator": "^6.18.0",
-        "babel-template": "^6.16.0",
-        "babel-traverse": "^6.18.0",
-        "babel-types": "^6.18.0",
-        "babylon": "^6.18.0",
-        "istanbul-lib-coverage": "^1.2.1",
-        "semver": "^5.3.0"
-      }
+    "ignore": {
+      "version": "4.0.6",
+      "resolved": "https://registry.npm.taobao.org/ignore/download/ignore-4.0.6.tgz",
+      "integrity": "sha1-dQ49tYYgh7RzfrrIIH/9HvJ7Jfw=",
+      "dev": true
     },
-    "istanbul-lib-report": {
-      "version": "1.1.5",
-      "resolved": "https://registry.npm.taobao.org/istanbul-lib-report/download/istanbul-lib-report-1.1.5.tgz?cache=0&sync_timestamp=1577062405578&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-report%2Fdownload%2Fistanbul-lib-report-1.1.5.tgz",
-      "integrity": "sha1-8qZX/GKC+WFwqvKB6zCkWPf0Fww=",
+    "image-size": {
+      "version": "0.5.5",
+      "resolved": "https://registry.npm.taobao.org/image-size/download/image-size-0.5.5.tgz",
+      "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
+      "dev": true
+    },
+    "import-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/import-cwd/download/import-cwd-2.1.0.tgz",
+      "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=",
       "dev": true,
       "requires": {
-        "istanbul-lib-coverage": "^1.2.1",
-        "mkdirp": "^0.5.1",
-        "path-parse": "^1.0.5",
-        "supports-color": "^3.1.2"
-      },
-      "dependencies": {
-        "has-flag": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-1.0.0.tgz",
-          "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
-          "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^1.0.0"
-          }
-        }
+        "import-from": "^2.1.0"
       }
     },
-    "istanbul-lib-source-maps": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npm.taobao.org/istanbul-lib-source-maps/download/istanbul-lib-source-maps-1.2.6.tgz?cache=0&sync_timestamp=1577062405633&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fistanbul-lib-source-maps%2Fdownload%2Fistanbul-lib-source-maps-1.2.6.tgz",
-      "integrity": "sha1-N7n/ZhWA+PyhEjJ1LuQuCMZnXY8=",
+    "import-fresh": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/import-fresh/download/import-fresh-2.0.0.tgz?cache=0&sync_timestamp=1604255567620&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fimport-fresh%2Fdownload%2Fimport-fresh-2.0.0.tgz",
+      "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
       "dev": true,
       "requires": {
-        "debug": "^3.1.0",
-        "istanbul-lib-coverage": "^1.2.1",
-        "mkdirp": "^0.5.1",
-        "rimraf": "^2.6.1",
-        "source-map": "^0.5.3"
+        "caller-path": "^2.0.0",
+        "resolve-from": "^3.0.0"
       }
     },
-    "istanbul-reports": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/istanbul-reports/download/istanbul-reports-1.5.1.tgz",
-      "integrity": "sha1-l+Tb87UV6MSEyuoV1lJO69P/Tho=",
+    "import-from": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/import-from/download/import-from-2.1.0.tgz",
+      "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=",
       "dev": true,
       "requires": {
-        "handlebars": "^4.0.3"
+        "resolve-from": "^3.0.0"
       }
     },
-    "javascript-stringify": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-1.6.0.tgz?cache=0&sync_timestamp=1572948916758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjavascript-stringify%2Fdownload%2Fjavascript-stringify-1.6.0.tgz",
-      "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=",
-      "dev": true
-    },
-    "jest": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest/download/jest-23.6.0.tgz",
-      "integrity": "sha1-rVg16SPr9uGeeh11KaQy7f7ngT0=",
+    "import-local": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz",
+      "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=",
       "dev": true,
       "requires": {
-        "import-local": "^1.0.0",
-        "jest-cli": "^23.6.0"
+        "pkg-dir": "^3.0.0",
+        "resolve-cwd": "^2.0.0"
       },
       "dependencies": {
-        "arr-diff": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz",
-          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.0.1"
-          }
-        },
-        "array-unique": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz",
-          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
-          "dev": true
-        },
-        "braces": {
-          "version": "1.8.5",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz",
-          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
-          "dev": true,
-          "requires": {
-            "expand-range": "^1.8.1",
-            "preserve": "^0.2.0",
-            "repeat-element": "^1.1.2"
-          }
-        },
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz",
-          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
-          "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "expand-brackets": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz",
-          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
-          "dev": true,
-          "requires": {
-            "is-posix-bracket": "^0.1.0"
-          }
-        },
-        "extglob": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz",
-          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
-          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "invert-kv": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz",
-          "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=",
-          "dev": true
-        },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "jest-cli": {
-          "version": "23.6.0",
-          "resolved": "https://registry.npm.taobao.org/jest-cli/download/jest-cli-23.6.0.tgz?cache=0&sync_timestamp=1579655155387&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-cli%2Fdownload%2Fjest-cli-23.6.0.tgz",
-          "integrity": "sha1-YauRd0Qzj0Q+8rqigt3/3WWKXaQ=",
-          "dev": true,
-          "requires": {
-            "ansi-escapes": "^3.0.0",
-            "chalk": "^2.0.1",
-            "exit": "^0.1.2",
-            "glob": "^7.1.2",
-            "graceful-fs": "^4.1.11",
-            "import-local": "^1.0.0",
-            "is-ci": "^1.0.10",
-            "istanbul-api": "^1.3.1",
-            "istanbul-lib-coverage": "^1.2.0",
-            "istanbul-lib-instrument": "^1.10.1",
-            "istanbul-lib-source-maps": "^1.2.4",
-            "jest-changed-files": "^23.4.2",
-            "jest-config": "^23.6.0",
-            "jest-environment-jsdom": "^23.4.0",
-            "jest-get-type": "^22.1.0",
-            "jest-haste-map": "^23.6.0",
-            "jest-message-util": "^23.4.0",
-            "jest-regex-util": "^23.3.0",
-            "jest-resolve-dependencies": "^23.6.0",
-            "jest-runner": "^23.6.0",
-            "jest-runtime": "^23.6.0",
-            "jest-snapshot": "^23.6.0",
-            "jest-util": "^23.4.0",
-            "jest-validate": "^23.6.0",
-            "jest-watcher": "^23.4.0",
-            "jest-worker": "^23.2.0",
-            "micromatch": "^2.3.11",
-            "node-notifier": "^5.2.1",
-            "prompts": "^0.1.9",
-            "realpath-native": "^1.0.0",
-            "rimraf": "^2.5.4",
-            "slash": "^1.0.0",
-            "string-length": "^2.0.0",
-            "strip-ansi": "^4.0.0",
-            "which": "^1.2.12",
-            "yargs": "^11.0.0"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        },
-        "lcid": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz",
-          "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=",
-          "dev": true,
-          "requires": {
-            "invert-kv": "^2.0.0"
-          }
-        },
-        "mem": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmem%2Fdownload%2Fmem-4.3.0.tgz",
-          "integrity": "sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=",
-          "dev": true,
-          "requires": {
-            "map-age-cleaner": "^0.1.1",
-            "mimic-fn": "^2.0.0",
-            "p-is-promise": "^2.0.0"
-          }
-        },
-        "micromatch": {
-          "version": "2.3.11",
-          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-2.3.11.tgz",
-          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+        "find-up": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
+          "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
           "dev": true,
           "requires": {
-            "arr-diff": "^2.0.0",
-            "array-unique": "^0.2.1",
-            "braces": "^1.8.2",
-            "expand-brackets": "^0.1.4",
-            "extglob": "^0.3.1",
-            "filename-regex": "^2.0.0",
-            "is-extglob": "^1.0.0",
-            "is-glob": "^2.0.1",
-            "kind-of": "^3.0.2",
-            "normalize-path": "^2.0.1",
-            "object.omit": "^2.0.0",
-            "parse-glob": "^3.0.4",
-            "regex-cache": "^0.4.2"
+            "locate-path": "^3.0.0"
           }
         },
-        "mimic-fn": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
-          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
-          "dev": true
-        },
-        "normalize-path": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+        "locate-path": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
+          "integrity": "sha1-2+w7OrdZdYBxtY/ln8QYca8hQA4=",
           "dev": true,
           "requires": {
-            "remove-trailing-separator": "^1.0.1"
+            "p-locate": "^3.0.0",
+            "path-exists": "^3.0.0"
           }
         },
-        "os-locale": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-3.1.0.tgz",
-          "integrity": "sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=",
+        "p-locate": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
+          "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
           "dev": true,
           "requires": {
-            "execa": "^1.0.0",
-            "lcid": "^2.0.0",
-            "mem": "^4.0.0"
+            "p-limit": "^2.0.0"
           }
         },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
           "dev": true
         },
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        },
-        "yargs": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-11.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-11.1.1.tgz",
-          "integrity": "sha1-UFLv40RqTfXtZpyZWIbMDxNwJ2Y=",
-          "dev": true,
-          "requires": {
-            "cliui": "^4.0.0",
-            "decamelize": "^1.1.1",
-            "find-up": "^2.1.0",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^3.1.0",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
-            "set-blocking": "^2.0.0",
-            "string-width": "^2.0.0",
-            "which-module": "^2.0.0",
-            "y18n": "^3.2.1",
-            "yargs-parser": "^9.0.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "9.0.2",
-          "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-9.0.2.tgz",
-          "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
+        "pkg-dir": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
+          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
           "dev": true,
           "requires": {
-            "camelcase": "^4.1.0"
+            "find-up": "^3.0.0"
           }
         }
       }
     },
-    "jest-changed-files": {
-      "version": "23.4.2",
-      "resolved": "https://registry.npm.taobao.org/jest-changed-files/download/jest-changed-files-23.4.2.tgz",
-      "integrity": "sha1-Hu1og3DNXuuv5K6T00uztklo/oM=",
+    "imurmurhash": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/imurmurhash/download/imurmurhash-0.1.4.tgz",
+      "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+      "dev": true
+    },
+    "indent-string": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-4.0.0.tgz",
+      "integrity": "sha1-Yk+PRJfWGbLZdoUx1Y9BIoVNclE=",
+      "dev": true
+    },
+    "indexes-of": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/indexes-of/download/indexes-of-1.0.1.tgz",
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
+    },
+    "infer-owner": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/infer-owner/download/infer-owner-1.0.4.tgz",
+      "integrity": "sha1-xM78qo5RBRwqQLos6KPScpWvlGc=",
+      "dev": true
+    },
+    "inflight": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npm.taobao.org/inflight/download/inflight-1.0.6.tgz",
+      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
       "dev": true,
       "requires": {
-        "throat": "^4.0.0"
+        "once": "^1.3.0",
+        "wrappy": "1"
       }
     },
-    "jest-config": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-config/download/jest-config-23.6.0.tgz?cache=0&sync_timestamp=1579655052078&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-config%2Fdownload%2Fjest-config-23.6.0.tgz",
-      "integrity": "sha1-+CVGqQreLYxwJvv2rFIH/CL46x0=",
-      "dev": true,
-      "requires": {
-        "babel-core": "^6.0.0",
-        "babel-jest": "^23.6.0",
-        "chalk": "^2.0.1",
-        "glob": "^7.1.1",
-        "jest-environment-jsdom": "^23.4.0",
-        "jest-environment-node": "^23.4.0",
-        "jest-get-type": "^22.1.0",
-        "jest-jasmine2": "^23.6.0",
-        "jest-regex-util": "^23.3.0",
-        "jest-resolve": "^23.6.0",
-        "jest-util": "^23.4.0",
-        "jest-validate": "^23.6.0",
-        "micromatch": "^2.3.11",
-        "pretty-format": "^23.6.0"
+    "inherits": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finherits%2Fdownload%2Finherits-2.0.4.tgz",
+      "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=",
+      "dev": true
+    },
+    "inquirer": {
+      "version": "7.3.3",
+      "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-7.3.3.tgz",
+      "integrity": "sha1-BNF2sq8Er8FXqD/XwQDpjuCq0AM=",
+      "dev": true,
+      "requires": {
+        "ansi-escapes": "^4.2.1",
+        "chalk": "^4.1.0",
+        "cli-cursor": "^3.1.0",
+        "cli-width": "^3.0.0",
+        "external-editor": "^3.0.3",
+        "figures": "^3.0.0",
+        "lodash": "^4.17.19",
+        "mute-stream": "0.0.8",
+        "run-async": "^2.4.0",
+        "rxjs": "^6.6.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0",
+        "through": "^2.3.6"
       },
       "dependencies": {
-        "arr-diff": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz",
-          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.0.1"
-          }
-        },
-        "array-unique": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz",
-          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
-          "dev": true
-        },
-        "babel-core": {
-          "version": "6.26.3",
-          "resolved": "https://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz",
-          "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=",
-          "dev": true,
-          "requires": {
-            "babel-code-frame": "^6.26.0",
-            "babel-generator": "^6.26.0",
-            "babel-helpers": "^6.24.1",
-            "babel-messages": "^6.23.0",
-            "babel-register": "^6.26.0",
-            "babel-runtime": "^6.26.0",
-            "babel-template": "^6.26.0",
-            "babel-traverse": "^6.26.0",
-            "babel-types": "^6.26.0",
-            "babylon": "^6.18.0",
-            "convert-source-map": "^1.5.1",
-            "debug": "^2.6.9",
-            "json5": "^0.5.1",
-            "lodash": "^4.17.4",
-            "minimatch": "^3.0.4",
-            "path-is-absolute": "^1.0.1",
-            "private": "^0.1.8",
-            "slash": "^1.0.0",
-            "source-map": "^0.5.7"
-          }
-        },
-        "braces": {
-          "version": "1.8.5",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz",
-          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1606792371412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
           "dev": true,
           "requires": {
-            "expand-range": "^1.8.1",
-            "preserve": "^0.2.0",
-            "repeat-element": "^1.1.2"
+            "color-convert": "^2.0.1"
           }
         },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
+        "chalk": {
+          "version": "4.1.0",
+          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-4.1.0.tgz?cache=0&sync_timestamp=1591687076871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-4.1.0.tgz",
+          "integrity": "sha1-ThSHCmGNni7dl92DRf2dncMVZGo=",
           "dev": true,
           "requires": {
-            "ms": "2.0.0"
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
           }
         },
-        "expand-brackets": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz",
-          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
+        "cli-cursor": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/cli-cursor/download/cli-cursor-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcli-cursor%2Fdownload%2Fcli-cursor-3.1.0.tgz",
+          "integrity": "sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=",
           "dev": true,
           "requires": {
-            "is-posix-bracket": "^0.1.0"
+            "restore-cursor": "^3.1.0"
           }
         },
-        "extglob": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz",
-          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
           "dev": true,
           "requires": {
-            "is-extglob": "^1.0.0"
+            "color-name": "~1.1.4"
           }
         },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
           "dev": true
         },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
           "dev": true
         },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
+        "mimic-fn": {
+          "version": "2.1.0",
+          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
+          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
+          "dev": true
+        },
+        "onetime": {
+          "version": "5.1.2",
+          "resolved": "https://registry.npm.taobao.org/onetime/download/onetime-5.1.2.tgz",
+          "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=",
           "dev": true,
           "requires": {
-            "is-extglob": "^1.0.0"
+            "mimic-fn": "^2.1.0"
           }
         },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+        "restore-cursor": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/restore-cursor/download/restore-cursor-3.1.0.tgz",
+          "integrity": "sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=",
           "dev": true,
           "requires": {
-            "is-buffer": "^1.1.5"
+            "onetime": "^5.1.0",
+            "signal-exit": "^3.0.2"
           }
         },
-        "micromatch": {
-          "version": "2.3.11",
-          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-2.3.11.tgz",
-          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
           "dev": true,
           "requires": {
-            "arr-diff": "^2.0.0",
-            "array-unique": "^0.2.1",
-            "braces": "^1.8.2",
-            "expand-brackets": "^0.1.4",
-            "extglob": "^0.3.1",
-            "filename-regex": "^2.0.0",
-            "is-extglob": "^1.0.0",
-            "is-glob": "^2.0.1",
-            "kind-of": "^3.0.2",
-            "normalize-path": "^2.0.1",
-            "object.omit": "^2.0.0",
-            "parse-glob": "^3.0.4",
-            "regex-cache": "^0.4.2"
+            "has-flag": "^4.0.0"
           }
-        },
-        "normalize-path": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+        }
+      }
+    },
+    "internal-ip": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/internal-ip/download/internal-ip-4.3.0.tgz?cache=0&sync_timestamp=1605885653768&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finternal-ip%2Fdownload%2Finternal-ip-4.3.0.tgz",
+      "integrity": "sha1-hFRSuq2dLKO2nGNaE3rLmg2tCQc=",
+      "dev": true,
+      "requires": {
+        "default-gateway": "^4.2.0",
+        "ipaddr.js": "^1.9.0"
+      },
+      "dependencies": {
+        "default-gateway": {
+          "version": "4.2.0",
+          "resolved": "https://registry.npm.taobao.org/default-gateway/download/default-gateway-4.2.0.tgz",
+          "integrity": "sha1-FnEEx1AMIRX23WmwpTa7jtcgVSs=",
           "dev": true,
           "requires": {
-            "remove-trailing-separator": "^1.0.1"
+            "execa": "^1.0.0",
+            "ip-regex": "^2.1.0"
           }
-        },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-          "dev": true
         }
       }
     },
-    "jest-diff": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-diff/download/jest-diff-23.6.0.tgz?cache=0&sync_timestamp=1579655156028&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-diff%2Fdownload%2Fjest-diff-23.6.0.tgz",
-      "integrity": "sha1-FQDz8W6FC7PXEjNAgIm+CZ9hDH0=",
+    "ip": {
+      "version": "1.1.5",
+      "resolved": "https://registry.npm.taobao.org/ip/download/ip-1.1.5.tgz",
+      "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+      "dev": true
+    },
+    "ip-regex": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/ip-regex/download/ip-regex-2.1.0.tgz?cache=0&sync_timestamp=1601334312409&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fip-regex%2Fdownload%2Fip-regex-2.1.0.tgz",
+      "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=",
+      "dev": true
+    },
+    "ipaddr.js": {
+      "version": "1.9.1",
+      "resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz",
+      "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=",
+      "dev": true
+    },
+    "is-absolute-url": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-2.1.0.tgz?cache=0&sync_timestamp=1569736493122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-2.1.0.tgz",
+      "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=",
+      "dev": true
+    },
+    "is-accessor-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-accessor-descriptor/download/is-accessor-descriptor-0.1.6.tgz",
+      "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
       "dev": true,
       "requires": {
-        "chalk": "^2.0.1",
-        "diff": "^3.2.0",
-        "jest-get-type": "^22.1.0",
-        "pretty-format": "^23.6.0"
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "3.2.2",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
+          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+          "dev": true,
+          "requires": {
+            "is-buffer": "^1.1.5"
+          }
+        }
       }
     },
-    "jest-docblock": {
-      "version": "23.2.0",
-      "resolved": "https://registry.npm.taobao.org/jest-docblock/download/jest-docblock-23.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-docblock%2Fdownload%2Fjest-docblock-23.2.0.tgz",
-      "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=",
+    "is-arguments": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-arguments/download/is-arguments-1.1.0.tgz?cache=0&sync_timestamp=1607117383813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-arguments%2Fdownload%2Fis-arguments-1.1.0.tgz",
+      "integrity": "sha1-YjUwMd++4HzrNGVqa95Z7+yujdk=",
       "dev": true,
       "requires": {
-        "detect-newline": "^2.1.0"
+        "call-bind": "^1.0.0"
       }
     },
-    "jest-each": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-each/download/jest-each-23.6.0.tgz",
-      "integrity": "sha1-ugw6gqgFQ4cBYTnHM6BSQtPXFXU=",
+    "is-arrayish": {
+      "version": "0.2.1",
+      "resolved": "https://registry.npm.taobao.org/is-arrayish/download/is-arrayish-0.2.1.tgz",
+      "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+      "dev": true
+    },
+    "is-binary-path": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-2.1.0.tgz",
+      "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=",
       "dev": true,
       "requires": {
-        "chalk": "^2.0.1",
-        "pretty-format": "^23.6.0"
+        "binary-extensions": "^2.0.0"
       }
     },
-    "jest-environment-jsdom": {
-      "version": "23.4.0",
-      "resolved": "https://registry.npm.taobao.org/jest-environment-jsdom/download/jest-environment-jsdom-23.4.0.tgz?cache=0&sync_timestamp=1579655041281&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-environment-jsdom%2Fdownload%2Fjest-environment-jsdom-23.4.0.tgz",
-      "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=",
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz?cache=0&sync_timestamp=1604429388528&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-buffer%2Fdownload%2Fis-buffer-1.1.6.tgz",
+      "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
+      "dev": true
+    },
+    "is-callable": {
+      "version": "1.2.2",
+      "resolved": "https://registry.npm.taobao.org/is-callable/download/is-callable-1.2.2.tgz",
+      "integrity": "sha1-x8ZxXNItTdtI0+GZcCI6zquwgNk=",
+      "dev": true
+    },
+    "is-ci": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npm.taobao.org/is-ci/download/is-ci-1.2.1.tgz",
+      "integrity": "sha1-43ecjuF/zPQoSI9uKBGH8uYyhBw=",
       "dev": true,
       "requires": {
-        "jest-mock": "^23.2.0",
-        "jest-util": "^23.4.0",
-        "jsdom": "^11.5.1"
+        "ci-info": "^1.5.0"
       }
     },
-    "jest-environment-node": {
-      "version": "23.4.0",
-      "resolved": "https://registry.npm.taobao.org/jest-environment-node/download/jest-environment-node-23.4.0.tgz",
-      "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=",
+    "is-color-stop": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-color-stop/download/is-color-stop-1.1.0.tgz",
+      "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=",
       "dev": true,
       "requires": {
-        "jest-mock": "^23.2.0",
-        "jest-util": "^23.4.0"
+        "css-color-names": "^0.0.4",
+        "hex-color-regex": "^1.1.0",
+        "hsl-regex": "^1.0.0",
+        "hsla-regex": "^1.0.0",
+        "rgb-regex": "^1.0.1",
+        "rgba-regex": "^1.0.0"
       }
     },
-    "jest-get-type": {
-      "version": "22.4.3",
-      "resolved": "https://registry.npm.taobao.org/jest-get-type/download/jest-get-type-22.4.3.tgz",
-      "integrity": "sha1-46hQTYR5NC3UQgI2syKGnxiQDOQ=",
-      "dev": true
+    "is-core-module": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz?cache=0&sync_timestamp=1606411666495&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.2.0.tgz",
+      "integrity": "sha1-lwN+89UiJNhRY/VZeytj2a/tmBo=",
+      "dev": true,
+      "requires": {
+        "has": "^1.0.3"
+      }
     },
-    "jest-haste-map": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-haste-map/download/jest-haste-map-23.6.0.tgz?cache=0&sync_timestamp=1579654873769&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-haste-map%2Fdownload%2Fjest-haste-map-23.6.0.tgz",
-      "integrity": "sha1-Lj65l4FMppbWKv2z8lKfW7yTXhY=",
+    "is-data-descriptor": {
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/is-data-descriptor/download/is-data-descriptor-0.1.4.tgz",
+      "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
       "dev": true,
       "requires": {
-        "fb-watchman": "^2.0.0",
-        "graceful-fs": "^4.1.11",
-        "invariant": "^2.2.4",
-        "jest-docblock": "^23.2.0",
-        "jest-serializer": "^23.0.1",
-        "jest-worker": "^23.2.0",
-        "micromatch": "^2.3.11",
-        "sane": "^2.0.0"
+        "kind-of": "^3.0.2"
       },
       "dependencies": {
-        "arr-diff": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz",
-          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.0.1"
-          }
-        },
-        "array-unique": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz",
-          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
-          "dev": true
-        },
-        "braces": {
-          "version": "1.8.5",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz",
-          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
-          "dev": true,
-          "requires": {
-            "expand-range": "^1.8.1",
-            "preserve": "^0.2.0",
-            "repeat-element": "^1.1.2"
-          }
-        },
-        "expand-brackets": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz",
-          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
-          "dev": true,
-          "requires": {
-            "is-posix-bracket": "^0.1.0"
-          }
-        },
-        "extglob": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz",
-          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
@@ -9509,157 +6913,88 @@
           "requires": {
             "is-buffer": "^1.1.5"
           }
-        },
-        "micromatch": {
-          "version": "2.3.11",
-          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-2.3.11.tgz",
-          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
-          "dev": true,
-          "requires": {
-            "arr-diff": "^2.0.0",
-            "array-unique": "^0.2.1",
-            "braces": "^1.8.2",
-            "expand-brackets": "^0.1.4",
-            "extglob": "^0.3.1",
-            "filename-regex": "^2.0.0",
-            "is-extglob": "^1.0.0",
-            "is-glob": "^2.0.1",
-            "kind-of": "^3.0.2",
-            "normalize-path": "^2.0.1",
-            "object.omit": "^2.0.0",
-            "parse-glob": "^3.0.4",
-            "regex-cache": "^0.4.2"
-          }
-        },
-        "normalize-path": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-          "dev": true,
-          "requires": {
-            "remove-trailing-separator": "^1.0.1"
-          }
         }
       }
     },
-    "jest-jasmine2": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-jasmine2/download/jest-jasmine2-23.6.0.tgz",
-      "integrity": "sha1-hA6Tf4SKbIY43yQ2CrhpzHGFkuA=",
-      "dev": true,
-      "requires": {
-        "babel-traverse": "^6.0.0",
-        "chalk": "^2.0.1",
-        "co": "^4.6.0",
-        "expect": "^23.6.0",
-        "is-generator-fn": "^1.0.0",
-        "jest-diff": "^23.6.0",
-        "jest-each": "^23.6.0",
-        "jest-matcher-utils": "^23.6.0",
-        "jest-message-util": "^23.4.0",
-        "jest-snapshot": "^23.6.0",
-        "jest-util": "^23.4.0",
-        "pretty-format": "^23.6.0"
-      }
+    "is-date-object": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/is-date-object/download/is-date-object-1.0.2.tgz?cache=0&sync_timestamp=1576729182289&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-date-object%2Fdownload%2Fis-date-object-1.0.2.tgz",
+      "integrity": "sha1-vac28s2P0G0yhE53Q7+nSUw7/X4=",
+      "dev": true
     },
-    "jest-leak-detector": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-leak-detector/download/jest-leak-detector-23.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-leak-detector%2Fdownload%2Fjest-leak-detector-23.6.0.tgz",
-      "integrity": "sha1-5CMP1CzzgaGhlxI3rVaJfefhcd4=",
+    "is-descriptor": {
+      "version": "0.1.6",
+      "resolved": "https://registry.npm.taobao.org/is-descriptor/download/is-descriptor-0.1.6.tgz",
+      "integrity": "sha1-Nm2CQN3kh8pRgjsaufB6EKeCUco=",
       "dev": true,
       "requires": {
-        "pretty-format": "^23.6.0"
+        "is-accessor-descriptor": "^0.1.6",
+        "is-data-descriptor": "^0.1.4",
+        "kind-of": "^5.0.0"
+      },
+      "dependencies": {
+        "kind-of": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-5.1.0.tgz",
+          "integrity": "sha1-cpyR4thXt6QZofmqZWhcTDP1hF0=",
+          "dev": true
+        }
       }
     },
-    "jest-matcher-utils": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-matcher-utils/download/jest-matcher-utils-23.6.0.tgz?cache=0&sync_timestamp=1579655064075&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-matcher-utils%2Fdownload%2Fjest-matcher-utils-23.6.0.tgz",
-      "integrity": "sha1-cmvOoMUpQmGnQXr7baMYa0uMrIA=",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.0.1",
-        "jest-get-type": "^22.1.0",
-        "pretty-format": "^23.6.0"
-      }
+    "is-directory": {
+      "version": "0.3.1",
+      "resolved": "https://registry.npm.taobao.org/is-directory/download/is-directory-0.3.1.tgz",
+      "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+      "dev": true
+    },
+    "is-docker": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/is-docker/download/is-docker-2.1.1.tgz",
+      "integrity": "sha1-QSWojkTkUNOE4JBH7eca3C0UQVY=",
+      "dev": true
+    },
+    "is-extendable": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npm.taobao.org/is-extendable/download/is-extendable-0.1.1.tgz",
+      "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+      "dev": true
+    },
+    "is-extglob": {
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-2.1.1.tgz",
+      "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
+      "dev": true
+    },
+    "is-fullwidth-code-point": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz",
+      "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=",
+      "dev": true
     },
-    "jest-message-util": {
-      "version": "23.4.0",
-      "resolved": "https://registry.npm.taobao.org/jest-message-util/download/jest-message-util-23.4.0.tgz?cache=0&sync_timestamp=1579655040577&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-message-util%2Fdownload%2Fjest-message-util-23.4.0.tgz",
-      "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=",
+    "is-glob": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-4.0.1.tgz",
+      "integrity": "sha1-dWfb6fL14kZ7x3q4PEopSCQHpdw=",
       "dev": true,
       "requires": {
-        "@babel/code-frame": "^7.0.0-beta.35",
-        "chalk": "^2.0.1",
-        "micromatch": "^2.3.11",
-        "slash": "^1.0.0",
-        "stack-utils": "^1.0.1"
-      },
-      "dependencies": {
-        "arr-diff": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz",
-          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.0.1"
-          }
-        },
-        "array-unique": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz",
-          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
-          "dev": true
-        },
-        "braces": {
-          "version": "1.8.5",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz",
-          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
-          "dev": true,
-          "requires": {
-            "expand-range": "^1.8.1",
-            "preserve": "^0.2.0",
-            "repeat-element": "^1.1.2"
-          }
-        },
-        "expand-brackets": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz",
-          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
-          "dev": true,
-          "requires": {
-            "is-posix-bracket": "^0.1.0"
-          }
-        },
-        "extglob": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz",
-          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
+        "is-extglob": "^2.1.1"
+      }
+    },
+    "is-negative-zero": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/is-negative-zero/download/is-negative-zero-2.0.1.tgz?cache=0&sync_timestamp=1607125693555&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-negative-zero%2Fdownload%2Fis-negative-zero-2.0.1.tgz",
+      "integrity": "sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ=",
+      "dev": true
+    },
+    "is-number": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-3.0.0.tgz",
+      "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+      "dev": true,
+      "requires": {
+        "kind-of": "^3.0.2"
+      },
+      "dependencies": {
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
@@ -9668,558 +7003,203 @@
           "requires": {
             "is-buffer": "^1.1.5"
           }
-        },
-        "micromatch": {
-          "version": "2.3.11",
-          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-2.3.11.tgz",
-          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
-          "dev": true,
-          "requires": {
-            "arr-diff": "^2.0.0",
-            "array-unique": "^0.2.1",
-            "braces": "^1.8.2",
-            "expand-brackets": "^0.1.4",
-            "extglob": "^0.3.1",
-            "filename-regex": "^2.0.0",
-            "is-extglob": "^1.0.0",
-            "is-glob": "^2.0.1",
-            "kind-of": "^3.0.2",
-            "normalize-path": "^2.0.1",
-            "object.omit": "^2.0.0",
-            "parse-glob": "^3.0.4",
-            "regex-cache": "^0.4.2"
-          }
-        },
-        "normalize-path": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-          "dev": true,
-          "requires": {
-            "remove-trailing-separator": "^1.0.1"
-          }
-        },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-          "dev": true
         }
       }
     },
-    "jest-mock": {
-      "version": "23.2.0",
-      "resolved": "https://registry.npm.taobao.org/jest-mock/download/jest-mock-23.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-mock%2Fdownload%2Fjest-mock-23.2.0.tgz",
-      "integrity": "sha1-rRxg8p6HGdR8JuETgJi20YsmETQ=",
+    "is-obj": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-2.0.0.tgz",
+      "integrity": "sha1-Rz+wXZc3BeP9liBUUBjKjiLvSYI=",
       "dev": true
     },
-    "jest-regex-util": {
-      "version": "23.3.0",
-      "resolved": "https://registry.npm.taobao.org/jest-regex-util/download/jest-regex-util-23.3.0.tgz?cache=0&sync_timestamp=1579654911019&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-regex-util%2Fdownload%2Fjest-regex-util-23.3.0.tgz",
-      "integrity": "sha1-X4ZylUfCeFxAAs6qj4Sf6MpHG8U=",
+    "is-path-cwd": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-2.2.0.tgz",
+      "integrity": "sha1-Z9Q7gmZKe1GR/ZEZEn6zAASKn9s=",
       "dev": true
     },
-    "jest-resolve": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-resolve/download/jest-resolve-23.6.0.tgz?cache=0&sync_timestamp=1579655061407&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-resolve%2Fdownload%2Fjest-resolve-23.6.0.tgz",
-      "integrity": "sha1-zx0aJM5+57I9ZhwzuiFQ866/oK4=",
+    "is-path-in-cwd": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-2.1.0.tgz?cache=0&sync_timestamp=1562347183080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-2.1.0.tgz",
+      "integrity": "sha1-v+Lcomxp85cmWkAJljYCk1oFOss=",
       "dev": true,
       "requires": {
-        "browser-resolve": "^1.11.3",
-        "chalk": "^2.0.1",
-        "realpath-native": "^1.0.0"
+        "is-path-inside": "^2.1.0"
       }
     },
-    "jest-resolve-dependencies": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-resolve-dependencies/download/jest-resolve-dependencies-23.6.0.tgz",
-      "integrity": "sha1-tFJq8kyFQNmj+rECwVCBz1Cbcj0=",
+    "is-path-inside": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-2.1.0.tgz",
+      "integrity": "sha1-fJgQWH1lmkDSe8201WFuqwWUlLI=",
       "dev": true,
       "requires": {
-        "jest-regex-util": "^23.3.0",
-        "jest-snapshot": "^23.6.0"
+        "path-is-inside": "^1.0.2"
       }
     },
-    "jest-runner": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-runner/download/jest-runner-23.6.0.tgz",
-      "integrity": "sha1-OJS9IZ/8Pzy5TcSKQXCi5vI6Wjg=",
+    "is-plain-obj": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-plain-obj/download/is-plain-obj-1.1.0.tgz",
+      "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=",
+      "dev": true
+    },
+    "is-plain-object": {
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/is-plain-object/download/is-plain-object-2.0.4.tgz?cache=0&sync_timestamp=1600349132080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-plain-object%2Fdownload%2Fis-plain-object-2.0.4.tgz",
+      "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=",
       "dev": true,
       "requires": {
-        "exit": "^0.1.2",
-        "graceful-fs": "^4.1.11",
-        "jest-config": "^23.6.0",
-        "jest-docblock": "^23.2.0",
-        "jest-haste-map": "^23.6.0",
-        "jest-jasmine2": "^23.6.0",
-        "jest-leak-detector": "^23.6.0",
-        "jest-message-util": "^23.4.0",
-        "jest-runtime": "^23.6.0",
-        "jest-util": "^23.4.0",
-        "jest-worker": "^23.2.0",
-        "source-map-support": "^0.5.6",
-        "throat": "^4.0.0"
+        "isobject": "^3.0.1"
       }
     },
-    "jest-runtime": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-runtime/download/jest-runtime-23.6.0.tgz",
-      "integrity": "sha1-BZ5YyKtEWRfNDg2ErCumjejyMII=",
+    "is-regex": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npm.taobao.org/is-regex/download/is-regex-1.1.1.tgz",
+      "integrity": "sha1-xvmKrMVG9s7FRooHt7FTq1ZKV7k=",
       "dev": true,
       "requires": {
-        "babel-core": "^6.0.0",
-        "babel-plugin-istanbul": "^4.1.6",
-        "chalk": "^2.0.1",
-        "convert-source-map": "^1.4.0",
-        "exit": "^0.1.2",
-        "fast-json-stable-stringify": "^2.0.0",
-        "graceful-fs": "^4.1.11",
-        "jest-config": "^23.6.0",
-        "jest-haste-map": "^23.6.0",
-        "jest-message-util": "^23.4.0",
-        "jest-regex-util": "^23.3.0",
-        "jest-resolve": "^23.6.0",
-        "jest-snapshot": "^23.6.0",
-        "jest-util": "^23.4.0",
-        "jest-validate": "^23.6.0",
-        "micromatch": "^2.3.11",
-        "realpath-native": "^1.0.0",
-        "slash": "^1.0.0",
-        "strip-bom": "3.0.0",
-        "write-file-atomic": "^2.1.0",
-        "yargs": "^11.0.0"
-      },
-      "dependencies": {
-        "arr-diff": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz",
-          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.0.1"
-          }
-        },
-        "array-unique": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz",
-          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
-          "dev": true
-        },
-        "babel-core": {
-          "version": "6.26.3",
-          "resolved": "https://registry.npm.taobao.org/babel-core/download/babel-core-6.26.3.tgz",
-          "integrity": "sha1-suLwnjQtDwyI4vAuBneUEl51wgc=",
-          "dev": true,
-          "requires": {
-            "babel-code-frame": "^6.26.0",
-            "babel-generator": "^6.26.0",
-            "babel-helpers": "^6.24.1",
-            "babel-messages": "^6.23.0",
-            "babel-register": "^6.26.0",
-            "babel-runtime": "^6.26.0",
-            "babel-template": "^6.26.0",
-            "babel-traverse": "^6.26.0",
-            "babel-types": "^6.26.0",
-            "babylon": "^6.18.0",
-            "convert-source-map": "^1.5.1",
-            "debug": "^2.6.9",
-            "json5": "^0.5.1",
-            "lodash": "^4.17.4",
-            "minimatch": "^3.0.4",
-            "path-is-absolute": "^1.0.1",
-            "private": "^0.1.8",
-            "slash": "^1.0.0",
-            "source-map": "^0.5.7"
-          }
-        },
-        "braces": {
-          "version": "1.8.5",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz",
-          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
-          "dev": true,
-          "requires": {
-            "expand-range": "^1.8.1",
-            "preserve": "^0.2.0",
-            "repeat-element": "^1.1.2"
-          }
-        },
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz",
-          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "debug": {
-          "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
-          "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
-          "dev": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
-          "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "expand-brackets": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz",
-          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
-          "dev": true,
-          "requires": {
-            "is-posix-bracket": "^0.1.0"
-          }
-        },
-        "extglob": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz",
-          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
-          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "invert-kv": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz",
-          "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=",
-          "dev": true
-        },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        },
-        "lcid": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz",
-          "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=",
-          "dev": true,
-          "requires": {
-            "invert-kv": "^2.0.0"
-          }
-        },
-        "mem": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmem%2Fdownload%2Fmem-4.3.0.tgz",
-          "integrity": "sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=",
-          "dev": true,
-          "requires": {
-            "map-age-cleaner": "^0.1.1",
-            "mimic-fn": "^2.0.0",
-            "p-is-promise": "^2.0.0"
-          }
-        },
-        "micromatch": {
-          "version": "2.3.11",
-          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-2.3.11.tgz",
-          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
-          "dev": true,
-          "requires": {
-            "arr-diff": "^2.0.0",
-            "array-unique": "^0.2.1",
-            "braces": "^1.8.2",
-            "expand-brackets": "^0.1.4",
-            "extglob": "^0.3.1",
-            "filename-regex": "^2.0.0",
-            "is-extglob": "^1.0.0",
-            "is-glob": "^2.0.1",
-            "kind-of": "^3.0.2",
-            "normalize-path": "^2.0.1",
-            "object.omit": "^2.0.0",
-            "parse-glob": "^3.0.4",
-            "regex-cache": "^0.4.2"
-          }
-        },
-        "mimic-fn": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
-          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
-          "dev": true
-        },
-        "normalize-path": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-          "dev": true,
-          "requires": {
-            "remove-trailing-separator": "^1.0.1"
-          }
-        },
-        "os-locale": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-3.1.0.tgz",
-          "integrity": "sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=",
-          "dev": true,
-          "requires": {
-            "execa": "^1.0.0",
-            "lcid": "^2.0.0",
-            "mem": "^4.0.0"
-          }
-        },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-          "dev": true
-        },
-        "strip-bom": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz",
-          "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-          "dev": true
-        },
-        "yargs": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-11.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-11.1.1.tgz",
-          "integrity": "sha1-UFLv40RqTfXtZpyZWIbMDxNwJ2Y=",
-          "dev": true,
-          "requires": {
-            "cliui": "^4.0.0",
-            "decamelize": "^1.1.1",
-            "find-up": "^2.1.0",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^3.1.0",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
-            "set-blocking": "^2.0.0",
-            "string-width": "^2.0.0",
-            "which-module": "^2.0.0",
-            "y18n": "^3.2.1",
-            "yargs-parser": "^9.0.2"
-          }
-        },
-        "yargs-parser": {
-          "version": "9.0.2",
-          "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-9.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-9.0.2.tgz",
-          "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^4.1.0"
-          }
-        }
+        "has-symbols": "^1.0.1"
       }
     },
-    "jest-serializer": {
-      "version": "23.0.1",
-      "resolved": "https://registry.npm.taobao.org/jest-serializer/download/jest-serializer-23.0.1.tgz",
-      "integrity": "sha1-o3dq6zEekP6D+rnlM+hRAr0WQWU=",
+    "is-resolvable": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-resolvable/download/is-resolvable-1.1.0.tgz",
+      "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=",
       "dev": true
     },
-    "jest-serializer-vue": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/jest-serializer-vue/download/jest-serializer-vue-2.0.2.tgz",
-      "integrity": "sha1-sjjvKGNX7GtIBCG9RxRQUJh9WbM=",
+    "is-stream": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-stream/download/is-stream-1.1.0.tgz",
+      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+      "dev": true
+    },
+    "is-svg": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-svg/download/is-svg-3.0.0.tgz",
+      "integrity": "sha1-kyHb0pwhLlypnE+peUxxS8r6L3U=",
       "dev": true,
       "requires": {
-        "pretty": "2.0.0"
+        "html-comment-regex": "^1.1.0"
       }
     },
-    "jest-snapshot": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-snapshot/download/jest-snapshot-23.6.0.tgz?cache=0&sync_timestamp=1579654884339&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-snapshot%2Fdownload%2Fjest-snapshot-23.6.0.tgz",
-      "integrity": "sha1-+cJiXRsYrNoB7C0rgmwM5YpaoXo=",
+    "is-symbol": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/is-symbol/download/is-symbol-1.0.3.tgz?cache=0&sync_timestamp=1574296409833&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-symbol%2Fdownload%2Fis-symbol-1.0.3.tgz",
+      "integrity": "sha1-OOEBS55jKb4N6dJKQU/XRB7GGTc=",
       "dev": true,
       "requires": {
-        "babel-types": "^6.0.0",
-        "chalk": "^2.0.1",
-        "jest-diff": "^23.6.0",
-        "jest-matcher-utils": "^23.6.0",
-        "jest-message-util": "^23.4.0",
-        "jest-resolve": "^23.6.0",
-        "mkdirp": "^0.5.1",
-        "natural-compare": "^1.4.0",
-        "pretty-format": "^23.6.0",
-        "semver": "^5.5.0"
+        "has-symbols": "^1.0.1"
       }
     },
-    "jest-transform-stub": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/jest-transform-stub/download/jest-transform-stub-2.0.0.tgz",
-      "integrity": "sha1-GQGLCFH3VolyFHpdYAdLVfAiWn0=",
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/is-typedarray/download/is-typedarray-1.0.0.tgz",
+      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+      "dev": true
+    },
+    "is-windows": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/is-windows/download/is-windows-1.0.2.tgz",
+      "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=",
+      "dev": true
+    },
+    "is-wsl": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/is-wsl/download/is-wsl-1.1.0.tgz",
+      "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=",
+      "dev": true
+    },
+    "isarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz?cache=0&sync_timestamp=1562592096220&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisarray%2Fdownload%2Fisarray-1.0.0.tgz",
+      "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+      "dev": true
+    },
+    "isexe": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/isexe/download/isexe-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fisexe%2Fdownload%2Fisexe-2.0.0.tgz",
+      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+      "dev": true
+    },
+    "isobject": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/isobject/download/isobject-3.0.1.tgz",
+      "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+      "dev": true
+    },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npm.taobao.org/isstream/download/isstream-0.1.2.tgz",
+      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+      "dev": true
+    },
+    "javascript-stringify": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/javascript-stringify/download/javascript-stringify-2.0.1.tgz?cache=0&sync_timestamp=1572948916758&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjavascript-stringify%2Fdownload%2Fjavascript-stringify-2.0.1.tgz",
+      "integrity": "sha1-bvNYA1MQ411mfGde1j0+t8GqGeU=",
       "dev": true
     },
-    "jest-util": {
-      "version": "23.4.0",
-      "resolved": "https://registry.npm.taobao.org/jest-util/download/jest-util-23.4.0.tgz",
-      "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=",
+    "jest-worker": {
+      "version": "25.5.0",
+      "resolved": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-25.5.0.tgz",
+      "integrity": "sha1-JhHQcbec6g9D7lej0RhZOsFUfbE=",
       "dev": true,
       "requires": {
-        "callsites": "^2.0.0",
-        "chalk": "^2.0.1",
-        "graceful-fs": "^4.1.11",
-        "is-ci": "^1.0.10",
-        "jest-message-util": "^23.4.0",
-        "mkdirp": "^0.5.1",
-        "slash": "^1.0.0",
-        "source-map": "^0.6.0"
+        "merge-stream": "^2.0.0",
+        "supports-color": "^7.0.0"
       },
       "dependencies": {
-        "callsites": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/callsites/download/callsites-2.0.0.tgz",
-          "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
-          "dev": true
-        },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-4.0.0.tgz",
+          "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=",
           "dev": true
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-          "dev": true
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-7.2.0.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-7.2.0.tgz",
+          "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=",
+          "dev": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
         }
       }
     },
-    "jest-validate": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/jest-validate/download/jest-validate-23.6.0.tgz?cache=0&sync_timestamp=1579654875817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-validate%2Fdownload%2Fjest-validate-23.6.0.tgz",
-      "integrity": "sha1-NnYfmdHtM/zUJbTkxVldYrZZdHQ=",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.0.1",
-        "jest-get-type": "^22.1.0",
-        "leven": "^2.1.0",
-        "pretty-format": "^23.6.0"
-      }
-    },
-    "jest-watcher": {
-      "version": "23.4.0",
-      "resolved": "https://registry.npm.taobao.org/jest-watcher/download/jest-watcher-23.4.0.tgz",
-      "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=",
-      "dev": true,
-      "requires": {
-        "ansi-escapes": "^3.0.0",
-        "chalk": "^2.0.1",
-        "string-length": "^2.0.0"
-      }
-    },
-    "jest-worker": {
-      "version": "23.2.0",
-      "resolved": "https://registry.npm.taobao.org/jest-worker/download/jest-worker-23.2.0.tgz?cache=0&sync_timestamp=1579655017974&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjest-worker%2Fdownload%2Fjest-worker-23.2.0.tgz",
-      "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=",
-      "dev": true,
-      "requires": {
-        "merge-stream": "^1.0.1"
-      }
-    },
-    "jquery": {
-      "version": "3.4.1",
-      "resolved": "https://registry.npm.taobao.org/jquery/download/jquery-3.4.1.tgz",
-      "integrity": "sha1-cU8fjZ3eS9+lV2S6N+8hRjDYDvI="
-    },
     "js-base64": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.5.2.tgz",
-      "integrity": "sha1-MTtidN2nGPcU0AszMLuubjjpAgk=",
+      "version": "2.6.4",
+      "resolved": "https://registry.npm.taobao.org/js-base64/download/js-base64-2.6.4.tgz?cache=0&sync_timestamp=1604448575022&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-base64%2Fdownload%2Fjs-base64-2.6.4.tgz",
+      "integrity": "sha1-9OaGxd4eofhn28rT1G2WlCjfmMQ=",
       "dev": true
     },
-    "js-beautify": {
-      "version": "1.10.3",
-      "resolved": "https://registry.npm.taobao.org/js-beautify/download/js-beautify-1.10.3.tgz",
-      "integrity": "sha1-xz+hDPadPfpS2O1iTyPGTApqlME=",
-      "dev": true,
-      "requires": {
-        "config-chain": "^1.1.12",
-        "editorconfig": "^0.15.3",
-        "glob": "^7.1.3",
-        "mkdirp": "~0.5.1",
-        "nopt": "~4.0.1"
-      }
-    },
     "js-cookie": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/js-cookie/download/js-cookie-2.2.0.tgz",
-      "integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s="
-    },
-    "js-levenshtein": {
-      "version": "1.1.6",
-      "resolved": "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz",
-      "integrity": "sha1-xs7ljrNVA3LfjeuF+tXOZs4B1Z0=",
-      "dev": true
+      "version": "3.0.5",
+      "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz",
+      "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw=="
     },
     "js-message": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.5.tgz",
-      "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=",
+      "version": "1.0.7",
+      "resolved": "https://registry.npm.taobao.org/js-message/download/js-message-1.0.7.tgz?cache=0&sync_timestamp=1605132733712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-message%2Fdownload%2Fjs-message-1.0.7.tgz",
+      "integrity": "sha1-+93QU8ekcCGHG7iyyVOXzBfCDkc=",
       "dev": true
     },
     "js-queue": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/js-queue/download/js-queue-2.0.0.tgz",
-      "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=",
+      "version": "2.0.2",
+      "resolved": "https://registry.npm.taobao.org/js-queue/download/js-queue-2.0.2.tgz",
+      "integrity": "sha1-C+WQM4+QOzbHPTPDGIOoIUEs1II=",
       "dev": true,
       "requires": {
-        "easy-stack": "^1.0.0"
+        "easy-stack": "^1.0.1"
       }
     },
     "js-tokens": {
       "version": "4.0.0",
       "resolved": "https://registry.npm.taobao.org/js-tokens/download/js-tokens-4.0.0.tgz",
-      "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=",
-      "dev": true
+      "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk="
     },
     "js-yaml": {
-      "version": "3.13.1",
-      "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.13.1.tgz",
-      "integrity": "sha1-r/FRswv9+o5J4F2iLnQV6d+jeEc=",
+      "version": "3.14.1",
+      "resolved": "https://registry.npm.taobao.org/js-yaml/download/js-yaml-3.14.1.tgz?cache=0&sync_timestamp=1607370811335&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjs-yaml%2Fdownload%2Fjs-yaml-3.14.1.tgz",
+      "integrity": "sha1-2ugS/bOCX6MGYJqHFzg8UMNqBTc=",
       "dev": true,
       "requires": {
         "argparse": "^1.0.7",
@@ -10232,43 +7212,9 @@
       "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
       "dev": true
     },
-    "jsdom": {
-      "version": "11.12.0",
-      "resolved": "https://registry.npm.taobao.org/jsdom/download/jsdom-11.12.0.tgz",
-      "integrity": "sha1-GoDUDd03ih3lllbp5txaO6hle8g=",
-      "dev": true,
-      "requires": {
-        "abab": "^2.0.0",
-        "acorn": "^5.5.3",
-        "acorn-globals": "^4.1.0",
-        "array-equal": "^1.0.0",
-        "cssom": ">= 0.3.2 < 0.4.0",
-        "cssstyle": "^1.0.0",
-        "data-urls": "^1.0.0",
-        "domexception": "^1.0.1",
-        "escodegen": "^1.9.1",
-        "html-encoding-sniffer": "^1.0.2",
-        "left-pad": "^1.3.0",
-        "nwsapi": "^2.0.7",
-        "parse5": "4.0.0",
-        "pn": "^1.1.0",
-        "request": "^2.87.0",
-        "request-promise-native": "^1.0.5",
-        "sax": "^1.2.4",
-        "symbol-tree": "^3.2.2",
-        "tough-cookie": "^2.3.4",
-        "w3c-hr-time": "^1.0.1",
-        "webidl-conversions": "^4.0.2",
-        "whatwg-encoding": "^1.0.3",
-        "whatwg-mimetype": "^2.1.0",
-        "whatwg-url": "^6.4.1",
-        "ws": "^5.2.0",
-        "xml-name-validator": "^3.0.0"
-      }
-    },
     "jsesc": {
       "version": "2.5.2",
-      "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-2.5.2.tgz?cache=0&sync_timestamp=1603891198638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-2.5.2.tgz",
       "integrity": "sha1-gFZNLkg9rPbo7yCWUKZ98/DCg6Q=",
       "dev": true
     },
@@ -10278,6 +7224,12 @@
       "integrity": "sha1-u4Z8+zRQ5pEHwTHRxRS6s9yLyqk=",
       "dev": true
     },
+    "json-parse-even-better-errors": {
+      "version": "2.3.1",
+      "resolved": "https://registry.npm.taobao.org/json-parse-even-better-errors/download/json-parse-even-better-errors-2.3.1.tgz",
+      "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=",
+      "dev": true
+    },
     "json-schema": {
       "version": "0.2.3",
       "resolved": "https://registry.npm.taobao.org/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1567740732347&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz",
@@ -10286,8 +7238,9 @@
     },
     "json-schema-traverse": {
       "version": "0.4.1",
-      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA="
+      "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz?cache=0&sync_timestamp=1608000211395&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson-schema-traverse%2Fdownload%2Fjson-schema-traverse-0.4.1.tgz",
+      "integrity": "sha1-afaofZUTq4u4/mO9sJecRI5oRmA=",
+      "dev": true
     },
     "json-stable-stringify-without-jsonify": {
       "version": "1.0.1",
@@ -10299,438 +7252,99 @@
       "version": "5.0.1",
       "resolved": "https://registry.npm.taobao.org/json-stringify-safe/download/json-stringify-safe-5.0.1.tgz",
       "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
-      "dev": true
-    },
-    "json3": {
-      "version": "3.3.3",
-      "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz",
-      "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
-      "dev": true
-    },
-    "json5": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npm.taobao.org/json5/download/json5-0.5.1.tgz",
-      "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",
-      "dev": true
-    },
-    "jsonfile": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz",
-      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.6"
-      }
-    },
-    "jsonlint": {
-      "version": "1.6.3",
-      "resolved": "https://registry.npm.taobao.org/jsonlint/download/jsonlint-1.6.3.tgz",
-      "integrity": "sha1-y14x78C3gpHQ2GL77wWQCt8hKYg=",
-      "requires": {
-        "JSV": "^4.0.x",
-        "nomnom": "^1.5.x"
-      }
-    },
-    "jsprim": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
-      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
-      "dev": true,
-      "requires": {
-        "assert-plus": "1.0.0",
-        "extsprintf": "1.3.0",
-        "json-schema": "0.2.3",
-        "verror": "1.10.0"
-      }
-    },
-    "jszip": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npm.taobao.org/jszip/download/jszip-3.2.1.tgz",
-      "integrity": "sha1-xdMt9ydAQigrFX77FuUitDQ14Bo=",
-      "requires": {
-        "lie": "~3.3.0",
-        "pako": "~1.0.2",
-        "readable-stream": "~2.3.6",
-        "set-immediate-shim": "~1.0.1"
-      }
-    },
-    "killable": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz",
-      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
-      "dev": true
-    },
-    "kind-of": {
-      "version": "6.0.3",
-      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
-      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
-      "dev": true
-    },
-    "kleur": {
-      "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/kleur/download/kleur-2.0.2.tgz",
-      "integrity": "sha1-twT0lE2V4lXQOPDLBfuKYCxVowA=",
-      "dev": true
-    },
-    "launch-editor": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz",
-      "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.3.0",
-        "shell-quote": "^1.6.1"
-      }
-    },
-    "launch-editor-middleware": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz",
-      "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=",
-      "dev": true,
-      "requires": {
-        "launch-editor": "^2.2.1"
-      }
-    },
-    "lcid": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-1.0.0.tgz",
-      "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
-      "requires": {
-        "invert-kv": "^1.0.0"
-      }
-    },
-    "left-pad": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/left-pad/download/left-pad-1.3.0.tgz",
-      "integrity": "sha1-W4o6d2Xf4AEmHd6RVYnngvjJTR4=",
-      "dev": true
-    },
-    "leven": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/leven/download/leven-2.1.0.tgz",
-      "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=",
-      "dev": true
-    },
-    "levn": {
-      "version": "0.3.0",
-      "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
-      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
-      "dev": true,
-      "requires": {
-        "prelude-ls": "~1.1.2",
-        "type-check": "~0.3.2"
-      }
-    },
-    "lie": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npm.taobao.org/lie/download/lie-3.3.0.tgz",
-      "integrity": "sha1-3Pgt7lRfRgdNryAMfBxaCOD0D2o=",
-      "requires": {
-        "immediate": "~3.0.5"
-      }
-    },
-    "liftoff": {
-      "version": "2.5.0",
-      "resolved": "https://registry.npm.taobao.org/liftoff/download/liftoff-2.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fliftoff%2Fdownload%2Fliftoff-2.5.0.tgz",
-      "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=",
-      "dev": true,
-      "requires": {
-        "extend": "^3.0.0",
-        "findup-sync": "^2.0.0",
-        "fined": "^1.0.1",
-        "flagged-respawn": "^1.0.0",
-        "is-plain-object": "^2.0.4",
-        "object.map": "^1.0.0",
-        "rechoir": "^0.6.2",
-        "resolve": "^1.1.7"
-      }
-    },
-    "linkify-it": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/linkify-it/download/linkify-it-2.2.0.tgz",
-      "integrity": "sha1-47VGl+eL+RXHCjis14/QngBYsc8=",
-      "requires": {
-        "uc.micro": "^1.0.1"
-      }
-    },
-    "lint-staged": {
-      "version": "8.1.5",
-      "resolved": "https://registry.npm.taobao.org/lint-staged/download/lint-staged-8.1.5.tgz",
-      "integrity": "sha1-NyR2/hpYuINOtWLtTJkSa9YL3Xk=",
-      "dev": true,
-      "requires": {
-        "chalk": "^2.3.1",
-        "commander": "^2.14.1",
-        "cosmiconfig": "^5.0.2",
-        "debug": "^3.1.0",
-        "dedent": "^0.7.0",
-        "del": "^3.0.0",
-        "execa": "^1.0.0",
-        "find-parent-dir": "^0.3.0",
-        "g-status": "^2.0.2",
-        "is-glob": "^4.0.0",
-        "is-windows": "^1.0.2",
-        "listr": "^0.14.2",
-        "listr-update-renderer": "^0.5.0",
-        "lodash": "^4.17.11",
-        "log-symbols": "^2.2.0",
-        "micromatch": "^3.1.8",
-        "npm-which": "^3.0.1",
-        "p-map": "^1.1.1",
-        "path-is-inside": "^1.0.2",
-        "pify": "^3.0.0",
-        "please-upgrade-node": "^3.0.2",
-        "staged-git-files": "1.1.2",
-        "string-argv": "^0.0.2",
-        "stringify-object": "^3.2.2",
-        "yup": "^0.26.10"
-      },
-      "dependencies": {
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz",
-          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
-          "dev": true,
-          "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
-          }
-        },
-        "del": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/del/download/del-3.0.0.tgz",
-          "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
-          "dev": true,
-          "requires": {
-            "globby": "^6.1.0",
-            "is-path-cwd": "^1.0.0",
-            "is-path-in-cwd": "^1.0.0",
-            "p-map": "^1.1.1",
-            "pify": "^3.0.0",
-            "rimraf": "^2.2.8"
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
-          "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
-        },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
-          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
-          "dev": true,
-          "requires": {
-            "pump": "^3.0.0"
-          }
-        },
-        "globby": {
-          "version": "6.1.0",
-          "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz",
-          "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-          "dev": true,
-          "requires": {
-            "array-union": "^1.0.1",
-            "glob": "^7.0.3",
-            "object-assign": "^4.0.1",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          },
-          "dependencies": {
-            "pify": {
-              "version": "2.3.0",
-              "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-2.3.0.tgz",
-              "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-              "dev": true
-            }
-          }
-        },
-        "is-path-cwd": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz",
-          "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
-          "dev": true
-        },
-        "is-path-in-cwd": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz?cache=0&sync_timestamp=1562347183080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-1.0.1.tgz",
-          "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=",
-          "dev": true,
-          "requires": {
-            "is-path-inside": "^1.0.0"
-          }
-        },
-        "is-path-inside": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz",
-          "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
-          "dev": true,
-          "requires": {
-            "path-is-inside": "^1.0.1"
-          }
-        },
-        "p-map": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz",
-          "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=",
-          "dev": true
-        }
+      "dev": true
+    },
+    "json3": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz",
+      "integrity": "sha1-f8EON1/FrkLEcFpcwKpvYr4wW4E=",
+      "dev": true
+    },
+    "json5": {
+      "version": "2.1.3",
+      "resolved": "https://registry.npm.taobao.org/json5/download/json5-2.1.3.tgz?cache=0&sync_timestamp=1586045693798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-2.1.3.tgz",
+      "integrity": "sha1-ybD3+pIzv+WAf+ZvzzpWF+1ZfUM=",
+      "dev": true,
+      "requires": {
+        "minimist": "^1.2.5"
       }
     },
-    "listr": {
-      "version": "0.14.3",
-      "resolved": "https://registry.npm.taobao.org/listr/download/listr-0.14.3.tgz",
-      "integrity": "sha1-L+qQlgTkNL5GTFC926DUlpKPpYY=",
+    "jsonfile": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/jsonfile/download/jsonfile-4.0.0.tgz?cache=0&sync_timestamp=1604161917513&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-4.0.0.tgz",
+      "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
       "dev": true,
       "requires": {
-        "@samverschueren/stream-to-observable": "^0.3.0",
-        "is-observable": "^1.1.0",
-        "is-promise": "^2.1.0",
-        "is-stream": "^1.1.0",
-        "listr-silent-renderer": "^1.1.1",
-        "listr-update-renderer": "^0.5.0",
-        "listr-verbose-renderer": "^0.5.0",
-        "p-map": "^2.0.0",
-        "rxjs": "^6.3.3"
+        "graceful-fs": "^4.1.6"
       }
     },
-    "listr-silent-renderer": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/listr-silent-renderer/download/listr-silent-renderer-1.1.1.tgz",
-      "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
+    "jsprim": {
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/jsprim/download/jsprim-1.4.1.tgz",
+      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+      "dev": true,
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.2.3",
+        "verror": "1.10.0"
+      }
+    },
+    "killable": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npm.taobao.org/killable/download/killable-1.0.1.tgz",
+      "integrity": "sha1-TIzkQRh6Bhx0dPuHygjipjgZSJI=",
+      "dev": true
+    },
+    "kind-of": {
+      "version": "6.0.3",
+      "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-6.0.3.tgz",
+      "integrity": "sha1-B8BQNKbDSfoG4k+jWqdttFgM5N0=",
       "dev": true
     },
-    "listr-update-renderer": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npm.taobao.org/listr-update-renderer/download/listr-update-renderer-0.5.0.tgz",
-      "integrity": "sha1-Tqg2hUinuK7LfgbYyVy0WuLt5qI=",
+    "launch-editor": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/launch-editor/download/launch-editor-2.2.1.tgz",
+      "integrity": "sha1-hxtaPuOdZoD8wm03kwtu7aidsMo=",
       "dev": true,
       "requires": {
-        "chalk": "^1.1.3",
-        "cli-truncate": "^0.2.1",
-        "elegant-spinner": "^1.0.1",
-        "figures": "^1.7.0",
-        "indent-string": "^3.0.0",
-        "log-symbols": "^1.0.2",
-        "log-update": "^2.3.0",
-        "strip-ansi": "^3.0.1"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "figures": {
-          "version": "1.7.0",
-          "resolved": "https://registry.npm.taobao.org/figures/download/figures-1.7.0.tgz?cache=0&sync_timestamp=1581865437156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffigures%2Fdownload%2Ffigures-1.7.0.tgz",
-          "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
-          "dev": true,
-          "requires": {
-            "escape-string-regexp": "^1.0.5",
-            "object-assign": "^4.1.0"
-          }
-        },
-        "log-symbols": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/log-symbols/download/log-symbols-1.0.2.tgz",
-          "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
-          "dev": true,
-          "requires": {
-            "chalk": "^1.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        }
+        "chalk": "^2.3.0",
+        "shell-quote": "^1.6.1"
       }
     },
-    "listr-verbose-renderer": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npm.taobao.org/listr-verbose-renderer/download/listr-verbose-renderer-0.5.0.tgz",
-      "integrity": "sha1-8RMhZ1NepMEmEQK58o2sfLoeA9s=",
+    "launch-editor-middleware": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/launch-editor-middleware/download/launch-editor-middleware-2.2.1.tgz",
+      "integrity": "sha1-4UsH5scVSwpLhqD9NFeE5FgEwVc=",
       "dev": true,
       "requires": {
-        "chalk": "^2.4.1",
-        "cli-cursor": "^2.1.0",
-        "date-fns": "^1.27.2",
-        "figures": "^2.0.0"
+        "launch-editor": "^2.2.1"
       }
     },
-    "load-json-file": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/load-json-file/download/load-json-file-1.1.0.tgz",
-      "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+    "levn": {
+      "version": "0.3.0",
+      "resolved": "https://registry.npm.taobao.org/levn/download/levn-0.3.0.tgz",
+      "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
       "dev": true,
       "requires": {
-        "graceful-fs": "^4.1.2",
-        "parse-json": "^2.2.0",
-        "pify": "^2.0.0",
-        "pinkie-promise": "^2.0.0",
-        "strip-bom": "^2.0.0"
-      },
-      "dependencies": {
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-          "dev": true
-        }
+        "prelude-ls": "~1.1.2",
+        "type-check": "~0.3.2"
       }
     },
+    "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=",
+      "dev": true
+    },
     "loader-fs-cache": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.2.tgz",
-      "integrity": "sha1-VM7fa3J+F3n9jwEgXwX26IcG8IY=",
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/loader-fs-cache/download/loader-fs-cache-1.0.3.tgz?cache=0&sync_timestamp=1584820647539&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-fs-cache%2Fdownload%2Floader-fs-cache-1.0.3.tgz",
+      "integrity": "sha1-8IZXZG1gcHi+LwoDL4vWndbyd9k=",
       "dev": true,
       "requires": {
         "find-cache-dir": "^0.1.1",
-        "mkdirp": "0.5.1"
+        "mkdirp": "^0.5.1"
       },
       "dependencies": {
         "find-cache-dir": {
@@ -10746,7 +7360,7 @@
         },
         "find-up": {
           "version": "1.1.2",
-          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-1.1.2.tgz",
           "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
           "dev": true,
           "requires": {
@@ -10776,7 +7390,7 @@
     },
     "loader-runner": {
       "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1574712098491&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/loader-runner/download/loader-runner-2.4.0.tgz?cache=0&sync_timestamp=1601450780890&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floader-runner%2Fdownload%2Floader-runner-2.4.0.tgz",
       "integrity": "sha1-7UcGa/5TTX6ExMe5mYwqdWB9k1c=",
       "dev": true
     },
@@ -10784,6 +7398,7 @@
       "version": "1.4.0",
       "resolved": "https://registry.npm.taobao.org/loader-utils/download/loader-utils-1.4.0.tgz",
       "integrity": "sha1-xXm140yzSxp07cbB+za/o3HVphM=",
+      "dev": true,
       "requires": {
         "big.js": "^5.2.2",
         "emojis-list": "^3.0.0",
@@ -10792,32 +7407,38 @@
       "dependencies": {
         "json5": {
           "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/json5/download/json5-1.0.1.tgz?cache=0&sync_timestamp=1586045693798&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjson5%2Fdownload%2Fjson5-1.0.1.tgz",
           "integrity": "sha1-d5+wAYYE+oVOrL9iUhgNg1Q+Pb4=",
+          "dev": true,
           "requires": {
             "minimist": "^1.2.0"
           }
-        },
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
         }
       }
     },
     "locate-path": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-2.0.0.tgz",
-      "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+      "version": "5.0.0",
+      "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-5.0.0.tgz",
+      "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=",
+      "dev": true,
       "requires": {
-        "p-locate": "^2.0.0",
-        "path-exists": "^3.0.0"
+        "p-locate": "^4.1.0"
       }
     },
     "lodash": {
-      "version": "4.17.15",
-      "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.15.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.15.tgz",
-      "integrity": "sha1-tEf2ZwoEVbv+7dETku/zMOoJdUg=",
+      "version": "4.17.20",
+      "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.20.tgz?cache=0&sync_timestamp=1597336053864&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.20.tgz",
+      "integrity": "sha1-tEqbYpe8tpjxxRo1RaKzs2jVnFI="
+    },
+    "lodash-es": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz",
+      "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+    },
+    "lodash.camelcase": {
+      "version": "4.3.0",
+      "resolved": "https://registry.npm.taobao.org/lodash.camelcase/download/lodash.camelcase-4.3.0.tgz",
+      "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=",
       "dev": true
     },
     "lodash.defaultsdeep": {
@@ -10826,12 +7447,6 @@
       "integrity": "sha1-US6b1yHSctlOPTpjZT+hdRZ0HKY=",
       "dev": true
     },
-    "lodash.get": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npm.taobao.org/lodash.get/download/lodash.get-4.4.2.tgz",
-      "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
-      "dev": true
-    },
     "lodash.kebabcase": {
       "version": "4.1.1",
       "resolved": "https://registry.npm.taobao.org/lodash.kebabcase/download/lodash.kebabcase-4.1.1.tgz",
@@ -10850,18 +7465,6 @@
       "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=",
       "dev": true
     },
-    "lodash.padend": {
-      "version": "4.6.1",
-      "resolved": "https://registry.npm.taobao.org/lodash.padend/download/lodash.padend-4.6.1.tgz",
-      "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=",
-      "dev": true
-    },
-    "lodash.sortby": {
-      "version": "4.7.0",
-      "resolved": "https://registry.npm.taobao.org/lodash.sortby/download/lodash.sortby-4.7.0.tgz",
-      "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=",
-      "dev": true
-    },
     "lodash.transform": {
       "version": "4.6.0",
       "resolved": "https://registry.npm.taobao.org/lodash.transform/download/lodash.transform-4.6.0.tgz",
@@ -10883,121 +7486,59 @@
         "chalk": "^2.0.1"
       }
     },
-    "log-update": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/log-update/download/log-update-2.3.0.tgz",
-      "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=",
-      "dev": true,
-      "requires": {
-        "ansi-escapes": "^3.0.0",
-        "cli-cursor": "^2.0.0",
-        "wrap-ansi": "^3.0.1"
-      },
-      "dependencies": {
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        },
-        "wrap-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-3.0.1.tgz",
-          "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=",
-          "dev": true,
-          "requires": {
-            "string-width": "^2.1.1",
-            "strip-ansi": "^4.0.0"
-          }
-        }
-      }
-    },
     "loglevel": {
-      "version": "1.6.7",
-      "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.6.7.tgz",
-      "integrity": "sha1-s+A0IzGIxouIn1uGJBUwb1ZeLFY=",
+      "version": "1.7.1",
+      "resolved": "https://registry.npm.taobao.org/loglevel/download/loglevel-1.7.1.tgz?cache=0&sync_timestamp=1606312255832&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floglevel%2Fdownload%2Floglevel-1.7.1.tgz",
+      "integrity": "sha1-AF/eL15uRwaPk1/yhXPhJe9y8Zc=",
       "dev": true
     },
     "loose-envify": {
       "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/loose-envify/download/loose-envify-1.4.0.tgz",
-      "integrity": "sha1-ce5R+nvkyuwaY4OffmgtgTLTDK8=",
-      "dev": true,
+      "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz",
+      "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
       "requires": {
         "js-tokens": "^3.0.0 || ^4.0.0"
       }
     },
-    "loud-rejection": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/loud-rejection/download/loud-rejection-1.6.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Floud-rejection%2Fdownload%2Floud-rejection-1.6.0.tgz",
-      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
-      "dev": true,
-      "requires": {
-        "currently-unhandled": "^0.4.1",
-        "signal-exit": "^3.0.0"
-      }
-    },
     "lower-case": {
       "version": "1.1.4",
-      "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz",
+      "resolved": "https://registry.npm.taobao.org/lower-case/download/lower-case-1.1.4.tgz?cache=0&sync_timestamp=1606867304538&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flower-case%2Fdownload%2Flower-case-1.1.4.tgz",
       "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=",
       "dev": true
     },
-    "lower-case-first": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/lower-case-first/download/lower-case-first-1.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flower-case-first%2Fdownload%2Flower-case-first-1.0.2.tgz",
-      "integrity": "sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E=",
-      "dev": true,
-      "requires": {
-        "lower-case": "^1.1.2"
-      }
-    },
     "lru-cache": {
-      "version": "4.1.5",
-      "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz",
-      "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
-      "requires": {
-        "pseudomap": "^1.0.2",
-        "yallist": "^2.1.2"
-      }
-    },
-    "make-dir": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-1.3.0.tgz?cache=0&sync_timestamp=1581538411621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-1.3.0.tgz",
-      "integrity": "sha1-ecEDO4BRW9bSTsmTPoYMp17ifww=",
-      "dev": true,
-      "requires": {
-        "pify": "^3.0.0"
-      }
-    },
-    "make-iterator": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/make-iterator/download/make-iterator-1.0.1.tgz",
-      "integrity": "sha1-KbM/MSqo9UfEpeSQ9Wr87JkTOtY=",
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-5.1.1.tgz?cache=0&sync_timestamp=1594427573763&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-5.1.1.tgz",
+      "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=",
       "dev": true,
       "requires": {
-        "kind-of": "^6.0.2"
+        "yallist": "^3.0.2"
       }
     },
-    "makeerror": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npm.taobao.org/makeerror/download/makeerror-1.0.11.tgz",
-      "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=",
+    "magic-string": {
+      "version": "0.25.7",
+      "resolved": "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz",
+      "integrity": "sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE=",
       "dev": true,
       "requires": {
-        "tmpl": "1.0.x"
+        "sourcemap-codec": "^1.4.4"
       }
     },
-    "map-age-cleaner": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npm.taobao.org/map-age-cleaner/download/map-age-cleaner-0.1.3.tgz",
-      "integrity": "sha1-fVg6cwZDTAVf5HSw9FB45uG0uSo=",
+    "make-dir": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz",
+      "integrity": "sha1-QV6WcEazp/HRhSd9hKpYIDcmoT8=",
       "dev": true,
       "requires": {
-        "p-defer": "^1.0.0"
+        "semver": "^6.0.0"
+      },
+      "dependencies": {
+        "semver": {
+          "version": "6.3.0",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
+          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
+          "dev": true
+        }
       }
     },
     "map-cache": {
@@ -11006,12 +7547,6 @@
       "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
       "dev": true
     },
-    "map-obj": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/map-obj/download/map-obj-1.0.1.tgz",
-      "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
-      "dev": true
-    },
     "map-visit": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/map-visit/download/map-visit-1.0.0.tgz",
@@ -11021,33 +7556,6 @@
         "object-visit": "^1.0.0"
       }
     },
-    "markdown-it": {
-      "version": "8.4.2",
-      "resolved": "https://registry.npm.taobao.org/markdown-it/download/markdown-it-8.4.2.tgz",
-      "integrity": "sha1-OG+YmY3BWjdyKqdyIIT0Agvdm1Q=",
-      "requires": {
-        "argparse": "^1.0.7",
-        "entities": "~1.1.1",
-        "linkify-it": "^2.0.0",
-        "mdurl": "^1.0.1",
-        "uc.micro": "^1.0.5"
-      }
-    },
-    "matcher": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/matcher/download/matcher-1.1.1.tgz?cache=0&sync_timestamp=1574143092340&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmatcher%2Fdownload%2Fmatcher-1.1.1.tgz",
-      "integrity": "sha1-UdgwHhOPhAmCszixFrsMCa9iwcI=",
-      "dev": true,
-      "requires": {
-        "escape-string-regexp": "^1.0.4"
-      }
-    },
-    "math-random": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/math-random/download/math-random-1.0.4.tgz",
-      "integrity": "sha1-XdaUPJOFSCZwFtTjTwV1gwgMUUw=",
-      "dev": true
-    },
     "md5.js": {
       "version": "1.3.5",
       "resolved": "https://registry.npm.taobao.org/md5.js/download/md5.js-1.3.5.tgz",
@@ -11060,30 +7568,17 @@
       }
     },
     "mdn-data": {
-      "version": "1.1.4",
-      "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-1.1.4.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmdn-data%2Fdownload%2Fmdn-data-1.1.4.tgz",
-      "integrity": "sha1-ULXU/8RXUnZXPE7tuHgIEqhBnwE=",
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/mdn-data/download/mdn-data-2.0.4.tgz",
+      "integrity": "sha1-aZs8OKxvHXKAkaZGULZdOIUC/Vs=",
       "dev": true
     },
-    "mdurl": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz",
-      "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
-    },
     "media-typer": {
       "version": "0.3.0",
       "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
       "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
       "dev": true
     },
-    "mem": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/mem/download/mem-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmem%2Fdownload%2Fmem-1.1.0.tgz",
-      "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
-      "requires": {
-        "mimic-fn": "^1.0.0"
-      }
-    },
     "memory-fs": {
       "version": "0.4.1",
       "resolved": "https://registry.npm.taobao.org/memory-fs/download/memory-fs-0.4.1.tgz",
@@ -11094,38 +7589,6 @@
         "readable-stream": "^2.0.1"
       }
     },
-    "meow": {
-      "version": "3.7.0",
-      "resolved": "https://registry.npm.taobao.org/meow/download/meow-3.7.0.tgz",
-      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
-      "dev": true,
-      "requires": {
-        "camelcase-keys": "^2.0.0",
-        "decamelize": "^1.1.2",
-        "loud-rejection": "^1.0.0",
-        "map-obj": "^1.0.1",
-        "minimist": "^1.1.3",
-        "normalize-package-data": "^2.3.4",
-        "object-assign": "^4.0.1",
-        "read-pkg-up": "^1.0.1",
-        "redent": "^1.0.0",
-        "trim-newlines": "^1.0.0"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-          "dev": true
-        }
-      }
-    },
-    "merge": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npm.taobao.org/merge/download/merge-1.2.1.tgz",
-      "integrity": "sha1-OL6/gMMiCopIe2/Ps5QbsRcgwUU=",
-      "dev": true
-    },
     "merge-descriptors": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz",
@@ -11134,7 +7597,7 @@
     },
     "merge-options": {
       "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/merge-options/download/merge-options-1.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/merge-options/download/merge-options-1.0.1.tgz?cache=0&sync_timestamp=1606146913544&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmerge-options%2Fdownload%2Fmerge-options-1.0.1.tgz",
       "integrity": "sha1-KmSyRFe+zU5NxggoMkfpTOWJqjI=",
       "dev": true,
       "requires": {
@@ -11159,18 +7622,15 @@
       }
     },
     "merge-stream": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-1.0.1.tgz",
-      "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=",
-      "dev": true,
-      "requires": {
-        "readable-stream": "^2.0.1"
-      }
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/merge-stream/download/merge-stream-2.0.0.tgz",
+      "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=",
+      "dev": true
     },
     "merge2": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.3.0.tgz",
-      "integrity": "sha1-WzZu6DsvFYLEj4fkfPGpNSEDyoE=",
+      "version": "1.4.1",
+      "resolved": "https://registry.npm.taobao.org/merge2/download/merge2-1.4.1.tgz",
+      "integrity": "sha1-Q2iJL4hekHRVpv19xVwMnUBJkK4=",
       "dev": true
     },
     "methods": {
@@ -11179,30 +7639,6 @@
       "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
       "dev": true
     },
-    "microargs": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/microargs/download/microargs-1.1.2.tgz",
-      "integrity": "sha1-cl++3PEg2xIxfT7aU00/Ga+GdzM=",
-      "dev": true
-    },
-    "microcli": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npm.taobao.org/microcli/download/microcli-1.3.3.tgz",
-      "integrity": "sha1-J/GzMLD5Nb5jFPKYlyEFoyX3Mec=",
-      "dev": true,
-      "requires": {
-        "lodash": "4.17.11",
-        "microargs": "1.1.2"
-      },
-      "dependencies": {
-        "lodash": {
-          "version": "4.17.11",
-          "resolved": "https://registry.npm.taobao.org/lodash/download/lodash-4.17.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flodash%2Fdownload%2Flodash-4.17.11.tgz",
-          "integrity": "sha1-s56mIp72B+zYniyN8SU2iRysm40=",
-          "dev": true
-        }
-      }
-    },
     "micromatch": {
       "version": "3.1.10",
       "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-3.1.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-3.1.10.tgz",
@@ -11232,48 +7668,70 @@
       "requires": {
         "bn.js": "^4.0.0",
         "brorand": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
+          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
+          "dev": true
+        }
       }
     },
     "mime": {
-      "version": "2.4.4",
-      "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.4.tgz?cache=0&sync_timestamp=1560034758817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.4.tgz",
-      "integrity": "sha1-vXuRE1/GsBzePpuuM9ZZtj2IV+U=",
+      "version": "2.4.7",
+      "resolved": "https://registry.npm.taobao.org/mime/download/mime-2.4.7.tgz?cache=0&sync_timestamp=1608084083331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-2.4.7.tgz",
+      "integrity": "sha1-lirtm+DtGckf19wuzl1/TompDXQ=",
       "dev": true
     },
     "mime-db": {
-      "version": "1.43.0",
-      "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.43.0.tgz?cache=0&sync_timestamp=1578281193492&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.43.0.tgz",
-      "integrity": "sha1-ChLgUCZQ5HPXNVNQUOfI9OtPrlg=",
+      "version": "1.44.0",
+      "resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1600831175828&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz",
+      "integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=",
       "dev": true
     },
     "mime-types": {
-      "version": "2.1.26",
-      "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.26.tgz?cache=0&sync_timestamp=1578282566609&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-types%2Fdownload%2Fmime-types-2.1.26.tgz",
-      "integrity": "sha1-nJIfwJt+FJpl39wNpNIJlyALCgY=",
+      "version": "2.1.27",
+      "resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz",
+      "integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=",
       "dev": true,
       "requires": {
-        "mime-db": "1.43.0"
+        "mime-db": "1.44.0"
       }
     },
     "mimic-fn": {
       "version": "1.2.0",
       "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-1.2.0.tgz",
-      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI="
+      "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=",
+      "dev": true
     },
     "mini-css-extract-plugin": {
-      "version": "0.5.0",
-      "resolved": "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.5.0.tgz?cache=0&sync_timestamp=1576856580721&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.5.0.tgz",
-      "integrity": "sha1-rABZsCuWklFaY3EVsMyf7To1x7A=",
+      "version": "0.9.0",
+      "resolved": "https://registry.npm.taobao.org/mini-css-extract-plugin/download/mini-css-extract-plugin-0.9.0.tgz?cache=0&sync_timestamp=1607647582104&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmini-css-extract-plugin%2Fdownload%2Fmini-css-extract-plugin-0.9.0.tgz",
+      "integrity": "sha1-R/LPB6oWWrNXM7H8l9TEbAVkM54=",
       "dev": true,
       "requires": {
         "loader-utils": "^1.1.0",
+        "normalize-url": "1.9.1",
         "schema-utils": "^1.0.0",
         "webpack-sources": "^1.1.0"
       },
       "dependencies": {
+        "normalize-url": {
+          "version": "1.9.1",
+          "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-1.9.1.tgz?cache=0&sync_timestamp=1602432435724&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-1.9.1.tgz",
+          "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+          "dev": true,
+          "requires": {
+            "object-assign": "^4.0.1",
+            "prepend-http": "^1.0.0",
+            "query-string": "^4.1.0",
+            "sort-keys": "^1.0.0"
+          }
+        },
         "schema-utils": {
           "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz",
           "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
           "dev": true,
           "requires": {
@@ -11306,11 +7764,55 @@
       }
     },
     "minimist": {
-      "version": "0.0.8",
-      "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-0.0.8.tgz",
-      "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+      "version": "1.2.5",
+      "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz",
+      "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
       "dev": true
     },
+    "minipass": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npm.taobao.org/minipass/download/minipass-3.1.3.tgz",
+      "integrity": "sha1-fUL/HzljVILhX5zbUxhN7r1YFf0=",
+      "dev": true,
+      "requires": {
+        "yallist": "^4.0.0"
+      },
+      "dependencies": {
+        "yallist": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-4.0.0.tgz",
+          "integrity": "sha1-m7knkNnA7/7GO+c1GeEaNQGaOnI=",
+          "dev": true
+        }
+      }
+    },
+    "minipass-collect": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npm.taobao.org/minipass-collect/download/minipass-collect-1.0.2.tgz",
+      "integrity": "sha1-IrgTv3Rdxu26JXa5QAIq1u3Ixhc=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-flush": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npm.taobao.org/minipass-flush/download/minipass-flush-1.0.5.tgz",
+      "integrity": "sha1-gucTXX6JpQ/+ZGEKeHlTxMTLs3M=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
+    "minipass-pipeline": {
+      "version": "1.2.4",
+      "resolved": "https://registry.npm.taobao.org/minipass-pipeline/download/minipass-pipeline-1.2.4.tgz?cache=0&sync_timestamp=1595998531778&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fminipass-pipeline%2Fdownload%2Fminipass-pipeline-1.2.4.tgz",
+      "integrity": "sha1-aEcveXEcCEZXwGfFxq2Tzd6oIUw=",
+      "dev": true,
+      "requires": {
+        "minipass": "^3.0.0"
+      }
+    },
     "mississippi": {
       "version": "3.0.0",
       "resolved": "https://registry.npm.taobao.org/mississippi/download/mississippi-3.0.0.tgz",
@@ -11330,10 +7832,9 @@
       }
     },
     "mitt": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/mitt/download/mitt-1.1.2.tgz",
-      "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
-      "dev": true
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/mitt/-/mitt-2.1.0.tgz",
+      "integrity": "sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg=="
     },
     "mixin-deep": {
       "version": "1.3.2",
@@ -11357,12 +7858,12 @@
       }
     },
     "mkdirp": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.1.tgz",
-      "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+      "version": "0.5.5",
+      "resolved": "https://registry.npm.taobao.org/mkdirp/download/mkdirp-0.5.5.tgz",
+      "integrity": "sha1-2Rzv1i0UNsoPQWIOJRKI1CAJne8=",
       "dev": true,
       "requires": {
-        "minimist": "0.0.8"
+        "minimist": "^1.2.5"
       }
     },
     "mockjs": {
@@ -11374,11 +7875,6 @@
         "commander": "*"
       }
     },
-    "moment": {
-      "version": "2.24.0",
-      "resolved": "https://registry.npm.taobao.org/moment/download/moment-2.24.0.tgz",
-      "integrity": "sha1-DQVdU/UFKqZTyfbraLtdEr9cK1s="
-    },
     "move-concurrently": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz",
@@ -11394,13 +7890,14 @@
       }
     },
     "ms": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
-      "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.2.tgz",
+      "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
+      "dev": true
     },
     "multicast-dns": {
       "version": "6.2.3",
-      "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/multicast-dns/download/multicast-dns-6.2.3.tgz?cache=0&sync_timestamp=1585239065356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmulticast-dns%2Fdownload%2Fmulticast-dns-6.2.3.tgz",
       "integrity": "sha1-oOx72QVcQoL3kMPIL04o2zsxsik=",
       "dev": true,
       "requires": {
@@ -11415,16 +7912,28 @@
       "dev": true
     },
     "mute-stream": {
-      "version": "0.0.7",
-      "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz",
-      "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+      "version": "0.0.8",
+      "resolved": "https://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.8.tgz",
+      "integrity": "sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=",
       "dev": true
     },
+    "mz": {
+      "version": "2.7.0",
+      "resolved": "https://registry.npm.taobao.org/mz/download/mz-2.7.0.tgz",
+      "integrity": "sha1-lQCAV6Vsr63CvGPd5/n/aVWUjjI=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0",
+        "object-assign": "^4.0.1",
+        "thenify-all": "^1.0.0"
+      }
+    },
     "nan": {
-      "version": "2.14.0",
-      "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.0.tgz",
-      "integrity": "sha1-eBj3IgJ7JFmobwKV1DTR/CM2xSw=",
-      "dev": true
+      "version": "2.14.2",
+      "resolved": "https://registry.npm.taobao.org/nan/download/nan-2.14.2.tgz?cache=0&sync_timestamp=1602591931869&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnan%2Fdownload%2Fnan-2.14.2.tgz",
+      "integrity": "sha1-9TdkAGlRaPTMaUrJOT0MlYXu6hk=",
+      "dev": true,
+      "optional": true
     },
     "nanomatch": {
       "version": "1.2.13",
@@ -11445,6 +7954,11 @@
         "to-regex": "^3.0.1"
       }
     },
+    "nanopop": {
+      "version": "2.4.2",
+      "resolved": "https://registry.npmmirror.com/nanopop/-/nanopop-2.4.2.tgz",
+      "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw=="
+    },
     "natural-compare": {
       "version": "1.4.0",
       "resolved": "https://registry.npm.taobao.org/natural-compare/download/natural-compare-1.4.0.tgz",
@@ -11458,9 +7972,9 @@
       "dev": true
     },
     "neo-async": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fneo-async%2Fdownload%2Fneo-async-2.6.1.tgz",
-      "integrity": "sha1-rCetpmFn+ohJpq3dg39rGJrSCBw=",
+      "version": "2.6.2",
+      "resolved": "https://registry.npm.taobao.org/neo-async/download/neo-async-2.6.2.tgz",
+      "integrity": "sha1-tKr7k+OustgXTKU88WOrfXMIMF8=",
       "dev": true
     },
     "nice-try": {
@@ -11471,476 +7985,78 @@
     },
     "no-case": {
       "version": "2.3.2",
-      "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz?cache=0&sync_timestamp=1576721505371&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fno-case%2Fdownload%2Fno-case-2.3.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/no-case/download/no-case-2.3.2.tgz",
       "integrity": "sha1-YLgTOWvjmz8SiKTB7V0efSi0ZKw=",
       "dev": true,
       "requires": {
         "lower-case": "^1.1.1"
       }
     },
-    "node-cache": {
-      "version": "4.2.1",
-      "resolved": "https://registry.npm.taobao.org/node-cache/download/node-cache-4.2.1.tgz?cache=0&sync_timestamp=1575815899867&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-cache%2Fdownload%2Fnode-cache-4.2.1.tgz",
-      "integrity": "sha1-79hHTe5O3sQTjN3tWA9VFlAPczQ=",
-      "dev": true,
-      "requires": {
-        "clone": "2.x",
-        "lodash": "^4.17.15"
-      },
-      "dependencies": {
-        "clone": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/clone/download/clone-2.1.2.tgz",
-          "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
-          "dev": true
-        }
-      }
-    },
-    "node-forge": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.9.0.tgz?cache=0&sync_timestamp=1569524669712&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.9.0.tgz",
-      "integrity": "sha1-1iQFDtu0SHStyhK7mlLsY8t4JXk=",
-      "dev": true
-    },
-    "node-gyp": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npm.taobao.org/node-gyp/download/node-gyp-3.8.0.tgz",
-      "integrity": "sha1-VAMEJhwzDoDQ1e3OJTpoyzlkIYw=",
-      "dev": true,
-      "requires": {
-        "fstream": "^1.0.0",
-        "glob": "^7.0.3",
-        "graceful-fs": "^4.1.2",
-        "mkdirp": "^0.5.0",
-        "nopt": "2 || 3",
-        "npmlog": "0 || 1 || 2 || 3 || 4",
-        "osenv": "0",
-        "request": "^2.87.0",
-        "rimraf": "2",
-        "semver": "~5.3.0",
-        "tar": "^2.0.0",
-        "which": "1"
-      },
-      "dependencies": {
-        "nopt": {
-          "version": "3.0.6",
-          "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-3.0.6.tgz",
-          "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
-          "dev": true,
-          "requires": {
-            "abbrev": "1"
-          }
-        },
-        "semver": {
-          "version": "5.3.0",
-          "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.3.0.tgz",
-          "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
-          "dev": true
-        }
-      }
-    },
-    "node-int64": {
-      "version": "0.4.0",
-      "resolved": "https://registry.npm.taobao.org/node-int64/download/node-int64-0.4.0.tgz",
-      "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=",
-      "dev": true
-    },
-    "node-ipc": {
-      "version": "9.1.1",
-      "resolved": "https://registry.npm.taobao.org/node-ipc/download/node-ipc-9.1.1.tgz",
-      "integrity": "sha1-TiRe1pOOZRAOWV68XcNLFujdXWk=",
-      "dev": true,
-      "requires": {
-        "event-pubsub": "4.3.0",
-        "js-message": "1.0.5",
-        "js-queue": "2.0.0"
-      }
-    },
-    "node-libs-browser": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz",
-      "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=",
-      "dev": true,
-      "requires": {
-        "assert": "^1.1.1",
-        "browserify-zlib": "^0.2.0",
-        "buffer": "^4.3.0",
-        "console-browserify": "^1.1.0",
-        "constants-browserify": "^1.0.0",
-        "crypto-browserify": "^3.11.0",
-        "domain-browser": "^1.1.1",
-        "events": "^3.0.0",
-        "https-browserify": "^1.0.0",
-        "os-browserify": "^0.3.0",
-        "path-browserify": "0.0.1",
-        "process": "^0.11.10",
-        "punycode": "^1.2.4",
-        "querystring-es3": "^0.2.0",
-        "readable-stream": "^2.3.3",
-        "stream-browserify": "^2.0.1",
-        "stream-http": "^2.7.2",
-        "string_decoder": "^1.0.0",
-        "timers-browserify": "^2.0.4",
-        "tty-browserify": "0.0.0",
-        "url": "^0.11.0",
-        "util": "^0.11.0",
-        "vm-browserify": "^1.0.1"
-      },
-      "dependencies": {
-        "punycode": {
-          "version": "1.4.1",
-          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
-          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
-          "dev": true
-        }
-      }
-    },
-    "node-modules-regexp": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/node-modules-regexp/download/node-modules-regexp-1.0.0.tgz",
-      "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
-      "dev": true
-    },
-    "node-notifier": {
-      "version": "5.4.3",
-      "resolved": "https://registry.npm.taobao.org/node-notifier/download/node-notifier-5.4.3.tgz",
-      "integrity": "sha1-y3La+UyTkECY4oucWQ/YZuRkvVA=",
-      "dev": true,
-      "requires": {
-        "growly": "^1.3.0",
-        "is-wsl": "^1.1.0",
-        "semver": "^5.5.0",
-        "shellwords": "^0.1.1",
-        "which": "^1.3.0"
-      }
-    },
-    "node-plop": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npm.taobao.org/node-plop/download/node-plop-0.18.0.tgz",
-      "integrity": "sha1-tEZHiY7p44fUbmkfE6AfrFO/Sf4=",
-      "dev": true,
-      "requires": {
-        "change-case": "^3.0.1",
-        "co": "^4.6.0",
-        "core-js": "^2.4.1",
-        "del": "^3.0.0",
-        "globby": "^8.0.0",
-        "handlebars": "^4.1.0",
-        "inquirer": "^6.0.0",
-        "isbinaryfile": "^3.0.2",
-        "lodash.get": "^4.4.2",
-        "mkdirp": "^0.5.1",
-        "pify": "^4.0.0",
-        "resolve": "^1.2.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
-          "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
-          "dev": true
-        },
-        "chardet": {
-          "version": "0.7.0",
-          "resolved": "https://registry.npm.taobao.org/chardet/download/chardet-0.7.0.tgz?cache=0&sync_timestamp=1562888139305&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchardet%2Fdownload%2Fchardet-0.7.0.tgz",
-          "integrity": "sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=",
-          "dev": true
-        },
-        "del": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/del/download/del-3.0.0.tgz",
-          "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
-          "dev": true,
-          "requires": {
-            "globby": "^6.1.0",
-            "is-path-cwd": "^1.0.0",
-            "is-path-in-cwd": "^1.0.0",
-            "p-map": "^1.1.1",
-            "pify": "^3.0.0",
-            "rimraf": "^2.2.8"
-          },
-          "dependencies": {
-            "globby": {
-              "version": "6.1.0",
-              "resolved": "https://registry.npm.taobao.org/globby/download/globby-6.1.0.tgz",
-              "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
-              "dev": true,
-              "requires": {
-                "array-union": "^1.0.1",
-                "glob": "^7.0.3",
-                "object-assign": "^4.0.1",
-                "pify": "^2.0.0",
-                "pinkie-promise": "^2.0.0"
-              },
-              "dependencies": {
-                "pify": {
-                  "version": "2.3.0",
-                  "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-2.3.0.tgz",
-                  "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-                  "dev": true
-                }
-              }
-            },
-            "pify": {
-              "version": "3.0.0",
-              "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz",
-              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-              "dev": true
-            }
-          }
-        },
-        "dir-glob": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/dir-glob/download/dir-glob-2.0.0.tgz",
-          "integrity": "sha1-CyBdK2rvmCOMooZZioIE0p0KADQ=",
-          "dev": true,
-          "requires": {
-            "arrify": "^1.0.1",
-            "path-type": "^3.0.0"
-          }
-        },
-        "external-editor": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/external-editor/download/external-editor-3.1.0.tgz?cache=0&sync_timestamp=1562602052556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexternal-editor%2Fdownload%2Fexternal-editor-3.1.0.tgz",
-          "integrity": "sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=",
-          "dev": true,
-          "requires": {
-            "chardet": "^0.7.0",
-            "iconv-lite": "^0.4.24",
-            "tmp": "^0.0.33"
-          }
-        },
-        "globby": {
-          "version": "8.0.2",
-          "resolved": "https://registry.npm.taobao.org/globby/download/globby-8.0.2.tgz",
-          "integrity": "sha1-VpdhnM2VxSdduy1vqkIIfBqUHY0=",
-          "dev": true,
-          "requires": {
-            "array-union": "^1.0.1",
-            "dir-glob": "2.0.0",
-            "fast-glob": "^2.0.2",
-            "glob": "^7.1.2",
-            "ignore": "^3.3.5",
-            "pify": "^3.0.0",
-            "slash": "^1.0.0"
-          },
-          "dependencies": {
-            "pify": {
-              "version": "3.0.0",
-              "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz",
-              "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
-              "dev": true
-            }
-          }
-        },
-        "inquirer": {
-          "version": "6.5.2",
-          "resolved": "https://registry.npm.taobao.org/inquirer/download/inquirer-6.5.2.tgz?cache=0&sync_timestamp=1583819607980&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Finquirer%2Fdownload%2Finquirer-6.5.2.tgz",
-          "integrity": "sha1-rVCUI3XQNtMn/1KMCL1fqwiZKMo=",
-          "dev": true,
-          "requires": {
-            "ansi-escapes": "^3.2.0",
-            "chalk": "^2.4.2",
-            "cli-cursor": "^2.1.0",
-            "cli-width": "^2.0.0",
-            "external-editor": "^3.0.3",
-            "figures": "^2.0.0",
-            "lodash": "^4.17.12",
-            "mute-stream": "0.0.7",
-            "run-async": "^2.2.0",
-            "rxjs": "^6.4.0",
-            "string-width": "^2.1.0",
-            "strip-ansi": "^5.1.0",
-            "through": "^2.3.6"
-          }
-        },
-        "is-path-cwd": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-path-cwd/download/is-path-cwd-1.0.0.tgz",
-          "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
-          "dev": true
-        },
-        "is-path-in-cwd": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-path-in-cwd/download/is-path-in-cwd-1.0.1.tgz?cache=0&sync_timestamp=1562347183080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-path-in-cwd%2Fdownload%2Fis-path-in-cwd-1.0.1.tgz",
-          "integrity": "sha1-WsSLNF72dTOb1sekipEhELJBz1I=",
-          "dev": true,
-          "requires": {
-            "is-path-inside": "^1.0.0"
-          }
-        },
-        "is-path-inside": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-path-inside/download/is-path-inside-1.0.1.tgz",
-          "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
-          "dev": true,
-          "requires": {
-            "path-is-inside": "^1.0.1"
-          }
-        },
-        "p-map": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-1.2.0.tgz",
-          "integrity": "sha1-5OlPMR6rvIYzoeeZCBZfyiYkG2s=",
-          "dev": true
-        },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz",
-          "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
-          "dev": true
-        },
-        "slash": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/slash/download/slash-1.0.0.tgz",
-          "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "5.2.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
-          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^4.1.0"
-          }
-        }
-      }
-    },
-    "node-releases": {
-      "version": "1.1.51",
-      "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.51.tgz?cache=0&sync_timestamp=1583684592405&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.51.tgz",
-      "integrity": "sha1-cNDgVCITQ9KWYAa/vU2YYizAC9A=",
-      "dev": true,
-      "requires": {
-        "semver": "^6.3.0"
-      },
-      "dependencies": {
-        "semver": {
-          "version": "6.3.0",
-          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
-          "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
-          "dev": true
-        }
-      }
-    },
-    "node-sass": {
-      "version": "4.13.1",
-      "resolved": "https://registry.npm.taobao.org/node-sass/download/node-sass-4.13.1.tgz",
-      "integrity": "sha1-nbVolpa7LuwsMrmL/qTHoumS0KM=",
+    "node-forge": {
+      "version": "0.10.0",
+      "resolved": "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz",
+      "integrity": "sha1-Mt6ir7Ppkm8C7lzoeUkCaRpna/M=",
+      "dev": true
+    },
+    "node-ipc": {
+      "version": "9.1.3",
+      "resolved": "https://registry.npm.taobao.org/node-ipc/download/node-ipc-9.1.3.tgz",
+      "integrity": "sha1-HfPwadEDGErpEn+ohdva6lakQ28=",
       "dev": true,
       "requires": {
-        "async-foreach": "^0.1.3",
-        "chalk": "^1.1.1",
-        "cross-spawn": "^3.0.0",
-        "gaze": "^1.0.0",
-        "get-stdin": "^4.0.1",
-        "glob": "^7.0.3",
-        "in-publish": "^2.0.0",
-        "lodash": "^4.17.15",
-        "meow": "^3.7.0",
-        "mkdirp": "^0.5.1",
-        "nan": "^2.13.2",
-        "node-gyp": "^3.8.0",
-        "npmlog": "^4.0.0",
-        "request": "^2.88.0",
-        "sass-graph": "^2.2.4",
-        "stdout-stream": "^1.4.0",
-        "true-case-path": "^1.0.2"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "cross-spawn": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-3.0.1.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-3.0.1.tgz",
-          "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=",
-          "dev": true,
-          "requires": {
-            "lru-cache": "^4.0.1",
-            "which": "^1.2.9"
-          }
-        },
-        "get-stdin": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz",
-          "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        }
+        "event-pubsub": "4.3.0",
+        "js-message": "1.0.7",
+        "js-queue": "2.0.2"
       }
     },
-    "nomnom": {
-      "version": "1.8.1",
-      "resolved": "https://registry.npm.taobao.org/nomnom/download/nomnom-1.8.1.tgz",
-      "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=",
+    "node-libs-browser": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npm.taobao.org/node-libs-browser/download/node-libs-browser-2.2.1.tgz",
+      "integrity": "sha1-tk9RPRgzhiX5A0bSew0jXmMfZCU=",
+      "dev": true,
       "requires": {
-        "chalk": "~0.4.0",
-        "underscore": "~1.6.0"
+        "assert": "^1.1.1",
+        "browserify-zlib": "^0.2.0",
+        "buffer": "^4.3.0",
+        "console-browserify": "^1.1.0",
+        "constants-browserify": "^1.0.0",
+        "crypto-browserify": "^3.11.0",
+        "domain-browser": "^1.1.1",
+        "events": "^3.0.0",
+        "https-browserify": "^1.0.0",
+        "os-browserify": "^0.3.0",
+        "path-browserify": "0.0.1",
+        "process": "^0.11.10",
+        "punycode": "^1.2.4",
+        "querystring-es3": "^0.2.0",
+        "readable-stream": "^2.3.3",
+        "stream-browserify": "^2.0.1",
+        "stream-http": "^2.7.2",
+        "string_decoder": "^1.0.0",
+        "timers-browserify": "^2.0.4",
+        "tty-browserify": "0.0.0",
+        "url": "^0.11.0",
+        "util": "^0.11.0",
+        "vm-browserify": "^1.0.1"
       },
       "dependencies": {
-        "chalk": {
-          "version": "0.4.0",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-0.4.0.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-0.4.0.tgz",
-          "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=",
-          "requires": {
-            "ansi-styles": "~1.0.0",
-            "has-color": "~0.1.0",
-            "strip-ansi": "~0.1.0"
-          }
+        "punycode": {
+          "version": "1.4.1",
+          "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-1.4.1.tgz",
+          "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+          "dev": true
         }
       }
     },
-    "nopt": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/nopt/download/nopt-4.0.3.tgz",
-      "integrity": "sha1-o3XK2dAv2SEnjZVMIlTVqlfhXkg=",
-      "dev": true,
-      "requires": {
-        "abbrev": "1",
-        "osenv": "^0.1.4"
-      }
+    "node-releases": {
+      "version": "1.1.67",
+      "resolved": "https://registry.npm.taobao.org/node-releases/download/node-releases-1.1.67.tgz?cache=0&sync_timestamp=1605581282886&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-releases%2Fdownload%2Fnode-releases-1.1.67.tgz",
+      "integrity": "sha1-KOv8zNC6pqrY6NTY/ky8Sa4jnBI=",
+      "dev": true
     },
     "normalize-package-data": {
       "version": "2.5.0",
-      "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.5.0.tgz?cache=0&sync_timestamp=1602547447569&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-package-data%2Fdownload%2Fnormalize-package-data-2.5.0.tgz",
       "integrity": "sha1-5m2xg4sgDB38IzIl0SyzZSDiNKg=",
       "dev": true,
       "requires": {
@@ -11953,7 +8069,8 @@
     "normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-3.0.0.tgz",
-      "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU="
+      "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=",
+      "dev": true
     },
     "normalize-range": {
       "version": "0.1.2",
@@ -11963,58 +8080,27 @@
     },
     "normalize-url": {
       "version": "3.3.0",
-      "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1580491266117&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/normalize-url/download/normalize-url-3.3.0.tgz?cache=0&sync_timestamp=1602432435724&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnormalize-url%2Fdownload%2Fnormalize-url-3.3.0.tgz",
       "integrity": "sha1-suHE3E98bVd0PfczpPWXjRhlBVk=",
       "dev": true
     },
     "normalize-wheel": {
       "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/normalize-wheel/download/normalize-wheel-1.0.1.tgz",
-      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+      "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA=="
     },
     "normalize.css": {
       "version": "7.0.0",
       "resolved": "https://registry.npm.taobao.org/normalize.css/download/normalize.css-7.0.0.tgz",
       "integrity": "sha1-q/sd2CRwZ04DIrU86xqvQSk45L8="
     },
-    "npm-path": {
-      "version": "2.0.4",
-      "resolved": "https://registry.npm.taobao.org/npm-path/download/npm-path-2.0.4.tgz",
-      "integrity": "sha1-xkE0el/51qCeTZvOVYDE9QUnjmQ=",
-      "dev": true,
-      "requires": {
-        "which": "^1.2.10"
-      }
-    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npm.taobao.org/npm-run-path/download/npm-run-path-2.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnpm-run-path%2Fdownload%2Fnpm-run-path-2.0.2.tgz",
       "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
-      "requires": {
-        "path-key": "^2.0.0"
-      }
-    },
-    "npm-which": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/npm-which/download/npm-which-3.0.1.tgz",
-      "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
-      "dev": true,
-      "requires": {
-        "commander": "^2.9.0",
-        "npm-path": "^2.0.2",
-        "which": "^1.2.10"
-      }
-    },
-    "npmlog": {
-      "version": "4.1.2",
-      "resolved": "https://registry.npm.taobao.org/npmlog/download/npmlog-4.1.2.tgz",
-      "integrity": "sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=",
       "dev": true,
       "requires": {
-        "are-we-there-yet": "~1.1.2",
-        "console-control-strings": "~1.1.0",
-        "gauge": "~2.7.3",
-        "set-blocking": "~2.0.0"
+        "path-key": "^2.0.0"
       }
     },
     "nprogress": {
@@ -12024,7 +8110,7 @@
     },
     "nth-check": {
       "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/nth-check/download/nth-check-1.0.2.tgz?cache=0&sync_timestamp=1606860944410&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnth-check%2Fdownload%2Fnth-check-1.0.2.tgz",
       "integrity": "sha1-sr0pXDfj3VijvwcAN2Zjuk2c8Fw=",
       "dev": true,
       "requires": {
@@ -12037,17 +8123,6 @@
       "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=",
       "dev": true
     },
-    "number-is-nan": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/number-is-nan/download/number-is-nan-1.0.1.tgz?cache=0&sync_timestamp=1581061562193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnumber-is-nan%2Fdownload%2Fnumber-is-nan-1.0.1.tgz",
-      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
-    },
-    "nwsapi": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/nwsapi/download/nwsapi-2.2.0.tgz",
-      "integrity": "sha1-IEh5qePQaP8qVROcLHcngGgaOLc=",
-      "dev": true
-    },
     "oauth-sign": {
       "version": "0.9.0",
       "resolved": "https://registry.npm.taobao.org/oauth-sign/download/oauth-sign-0.9.0.tgz",
@@ -12080,12 +8155,6 @@
             "is-descriptor": "^0.1.0"
           }
         },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
@@ -12104,16 +8173,19 @@
       "dev": true
     },
     "object-inspect": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.7.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.7.0.tgz",
-      "integrity": "sha1-9Pa9GBrXfwBrXs5gvQtvOY/3Smc=",
-      "dev": true
+      "version": "1.9.0",
+      "resolved": "https://registry.npm.taobao.org/object-inspect/download/object-inspect-1.9.0.tgz?cache=0&sync_timestamp=1606804265193&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-inspect%2Fdownload%2Fobject-inspect-1.9.0.tgz",
+      "integrity": "sha1-yQUh104RJ7ZyZt7TOUrWEWmGUzo="
     },
     "object-is": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.0.2.tgz?cache=0&sync_timestamp=1576479714417&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-is%2Fdownload%2Fobject-is-1.0.2.tgz",
-      "integrity": "sha1-a4DrhP5FFJj2UAeYLwNaW0Re3sQ=",
-      "dev": true
+      "version": "1.1.4",
+      "resolved": "https://registry.npm.taobao.org/object-is/download/object-is-1.1.4.tgz",
+      "integrity": "sha1-Y9bIPACkP0y8lDTrl1fIpbhWUGg=",
+      "dev": true,
+      "requires": {
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3"
+      }
     },
     "object-keys": {
       "version": "1.1.1",
@@ -12131,79 +8203,26 @@
       }
     },
     "object.assign": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.0.tgz",
-      "integrity": "sha1-lovxEA15Vrs8oIbwBvhGs7xACNo=",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.2",
-        "function-bind": "^1.1.1",
-        "has-symbols": "^1.0.0",
-        "object-keys": "^1.0.11"
-      }
-    },
-    "object.defaults": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/object.defaults/download/object.defaults-1.1.0.tgz",
-      "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
+      "version": "4.1.2",
+      "resolved": "https://registry.npm.taobao.org/object.assign/download/object.assign-4.1.2.tgz?cache=0&sync_timestamp=1604115104654&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.assign%2Fdownload%2Fobject.assign-4.1.2.tgz",
+      "integrity": "sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA=",
       "dev": true,
       "requires": {
-        "array-each": "^1.0.1",
-        "array-slice": "^1.0.0",
-        "for-own": "^1.0.0",
-        "isobject": "^3.0.0"
-      },
-      "dependencies": {
-        "for-own": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/for-own/download/for-own-1.0.0.tgz",
-          "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
-          "dev": true,
-          "requires": {
-            "for-in": "^1.0.1"
-          }
-        }
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3",
+        "has-symbols": "^1.0.1",
+        "object-keys": "^1.1.1"
       }
     },
     "object.getownpropertydescriptors": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.getownpropertydescriptors%2Fdownload%2Fobject.getownpropertydescriptors-2.1.0.tgz",
-      "integrity": "sha1-Npvx+VktiridcS3O1cuBx8U1Jkk=",
+      "version": "2.1.1",
+      "resolved": "https://registry.npm.taobao.org/object.getownpropertydescriptors/download/object.getownpropertydescriptors-2.1.1.tgz",
+      "integrity": "sha1-Df2o0QgHTZxWPoBJDIg7ZmEJFUQ=",
       "dev": true,
       "requires": {
+        "call-bind": "^1.0.0",
         "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      }
-    },
-    "object.map": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/object.map/download/object.map-1.0.1.tgz",
-      "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
-      "dev": true,
-      "requires": {
-        "for-own": "^1.0.0",
-        "make-iterator": "^1.0.0"
-      },
-      "dependencies": {
-        "for-own": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/for-own/download/for-own-1.0.0.tgz",
-          "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
-          "dev": true,
-          "requires": {
-            "for-in": "^1.0.1"
-          }
-        }
-      }
-    },
-    "object.omit": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/object.omit/download/object.omit-2.0.1.tgz",
-      "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
-      "dev": true,
-      "requires": {
-        "for-own": "^0.1.4",
-        "is-extendable": "^0.1.1"
+        "es-abstract": "^1.18.0-next.1"
       }
     },
     "object.pick": {
@@ -12216,14 +8235,14 @@
       }
     },
     "object.values": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.1.tgz",
-      "integrity": "sha1-aKmezeNWt+kpWjxeDOMdyMlT3l4=",
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/object.values/download/object.values-1.1.2.tgz?cache=0&sync_timestamp=1606429851964&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject.values%2Fdownload%2Fobject.values-1.1.2.tgz",
+      "integrity": "sha1-eiAV4G/LD1Rr1lJIbOhYOkcxxzE=",
       "dev": true,
       "requires": {
+        "call-bind": "^1.0.0",
         "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1",
-        "function-bind": "^1.1.1",
+        "es-abstract": "^1.18.0-next.1",
         "has": "^1.0.3"
       }
     },
@@ -12233,12 +8252,6 @@
       "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
       "dev": true
     },
-    "omelette": {
-      "version": "0.4.5",
-      "resolved": "https://registry.npm.taobao.org/omelette/download/omelette-0.4.5.tgz",
-      "integrity": "sha1-8WvEd7fiY7WXlqZWYZZOR2LprnQ=",
-      "dev": true
-    },
     "on-finished": {
       "version": "2.3.0",
       "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
@@ -12274,7 +8287,7 @@
     },
     "open": {
       "version": "6.4.0",
-      "resolved": "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1583734682914&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-6.4.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/open/download/open-6.4.0.tgz?cache=0&sync_timestamp=1601376181109&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fopen%2Fdownload%2Fopen-6.4.0.tgz",
       "integrity": "sha1-XBPpbQ3IlGhhZPGJZez+iJ7PyKk=",
       "dev": true,
       "requires": {
@@ -12282,9 +8295,9 @@
       }
     },
     "opener": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.1.tgz",
-      "integrity": "sha1-bS8Od/GgrwAyrKcWwsH7uOfoq+0=",
+      "version": "1.5.2",
+      "resolved": "https://registry.npm.taobao.org/opener/download/opener-1.5.2.tgz",
+      "integrity": "sha1-XTfh81B3udysQwE3InGv3rKhNZg=",
       "dev": true
     },
     "opn": {
@@ -12296,19 +8309,9 @@
         "is-wsl": "^1.1.0"
       }
     },
-    "optimist": {
-      "version": "0.6.1",
-      "resolved": "https://registry.npm.taobao.org/optimist/download/optimist-0.6.1.tgz",
-      "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=",
-      "dev": true,
-      "requires": {
-        "minimist": "~0.0.1",
-        "wordwrap": "~0.0.2"
-      }
-    },
     "optionator": {
       "version": "0.8.3",
-      "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/optionator/download/optionator-0.8.3.tgz?cache=0&sync_timestamp=1585966238288&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Foptionator%2Fdownload%2Foptionator-0.8.3.tgz",
       "integrity": "sha1-hPodA2/p08fiHZmIS2ARZ+yPtJU=",
       "dev": true,
       "requires": {
@@ -12334,12 +8337,6 @@
         "wcwidth": "^1.0.1"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
-          "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
-          "dev": true
-        },
         "strip-ansi": {
           "version": "5.2.0",
           "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
@@ -12366,76 +8363,44 @@
       "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
       "dev": true
     },
-    "os-homedir": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/os-homedir/download/os-homedir-1.0.2.tgz",
-      "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
-      "dev": true
-    },
-    "os-locale": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-2.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-2.1.0.tgz",
-      "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=",
-      "requires": {
-        "execa": "^0.7.0",
-        "lcid": "^1.0.0",
-        "mem": "^1.1.0"
-      }
-    },
     "os-tmpdir": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz",
       "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
       "dev": true
     },
-    "osenv": {
-      "version": "0.1.5",
-      "resolved": "https://registry.npm.taobao.org/osenv/download/osenv-0.1.5.tgz",
-      "integrity": "sha1-hc36+uso6Gd/QW4odZK18/SepBA=",
-      "dev": true,
-      "requires": {
-        "os-homedir": "^1.0.0",
-        "os-tmpdir": "^1.0.0"
-      }
-    },
-    "p-defer": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-defer/download/p-defer-1.0.0.tgz",
-      "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
-      "dev": true
-    },
     "p-finally": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/p-finally/download/p-finally-1.0.0.tgz?cache=0&sync_timestamp=1560955759606&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-finally%2Fdownload%2Fp-finally-1.0.0.tgz",
-      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
-    },
-    "p-is-promise": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/p-is-promise/download/p-is-promise-2.1.0.tgz",
-      "integrity": "sha1-kYzrrqJIpiz3/6uOO8qMX4gvxC4=",
+      "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
       "dev": true
     },
     "p-limit": {
-      "version": "1.3.0",
-      "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-1.3.0.tgz?cache=0&sync_timestamp=1577904218145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-1.3.0.tgz",
-      "integrity": "sha1-uGvV8MJWkJEcdZD8v8IBDVSzzLg=",
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.3.0.tgz",
+      "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=",
+      "dev": true,
       "requires": {
-        "p-try": "^1.0.0"
+        "p-try": "^2.0.0"
       }
     },
     "p-locate": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-2.0.0.tgz",
-      "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-4.1.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-4.1.0.tgz",
+      "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=",
+      "dev": true,
       "requires": {
-        "p-limit": "^1.1.0"
+        "p-limit": "^2.2.0"
       }
     },
     "p-map": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-2.1.0.tgz",
-      "integrity": "sha1-MQko/u+cnsxltosXaTAYpmXOoXU=",
-      "dev": true
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/p-map/download/p-map-3.0.0.tgz",
+      "integrity": "sha1-1wTZr4orpoTiYA2aIVmD1BQal50=",
+      "dev": true,
+      "requires": {
+        "aggregate-error": "^3.0.0"
+      }
     },
     "p-retry": {
       "version": "3.0.1",
@@ -12447,14 +8412,16 @@
       }
     },
     "p-try": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-1.0.0.tgz",
-      "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
+      "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
+      "dev": true
     },
     "pako": {
       "version": "1.0.11",
-      "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz?cache=0&sync_timestamp=1580283988434&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpako%2Fdownload%2Fpako-1.0.11.tgz",
-      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8="
+      "resolved": "https://registry.npm.taobao.org/pako/download/pako-1.0.11.tgz",
+      "integrity": "sha1-bJWZ00DVTf05RjgCUqNXBaa5kr8=",
+      "dev": true
     },
     "parallel-transform": {
       "version": "1.2.0",
@@ -12494,95 +8461,64 @@
       }
     },
     "parse-asn1": {
-      "version": "5.1.5",
-      "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-asn1%2Fdownload%2Fparse-asn1-5.1.5.tgz",
-      "integrity": "sha1-ADJxND2ljclMrOSU+u89IUfs6g4=",
+      "version": "5.1.6",
+      "resolved": "https://registry.npm.taobao.org/parse-asn1/download/parse-asn1-5.1.6.tgz",
+      "integrity": "sha1-OFCAo+wTy2KmLTlAnLPoiETNrtQ=",
       "dev": true,
       "requires": {
-        "asn1.js": "^4.0.0",
+        "asn1.js": "^5.2.0",
         "browserify-aes": "^1.0.0",
-        "create-hash": "^1.1.0",
         "evp_bytestokey": "^1.0.0",
         "pbkdf2": "^3.0.3",
         "safe-buffer": "^5.1.1"
       }
     },
-    "parse-filepath": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/parse-filepath/download/parse-filepath-1.0.2.tgz",
-      "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
+    "parse-json": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-5.1.0.tgz",
+      "integrity": "sha1-+WCIzfJKj6qa6poAny2dlCyZlkY=",
       "dev": true,
       "requires": {
-        "is-absolute": "^1.0.0",
-        "map-cache": "^0.2.0",
-        "path-root": "^0.1.1"
+        "@babel/code-frame": "^7.0.0",
+        "error-ex": "^1.3.1",
+        "json-parse-even-better-errors": "^2.3.0",
+        "lines-and-columns": "^1.1.6"
       }
     },
-    "parse-glob": {
-      "version": "3.0.4",
-      "resolved": "https://registry.npm.taobao.org/parse-glob/download/parse-glob-3.0.4.tgz",
-      "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
+    "parse5": {
+      "version": "5.1.1",
+      "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-5.1.1.tgz",
+      "integrity": "sha1-9o5OW6GFKsLK3AD0VV//bCq7YXg=",
+      "dev": true
+    },
+    "parse5-htmlparser2-tree-adapter": {
+      "version": "6.0.1",
+      "resolved": "https://registry.npm.taobao.org/parse5-htmlparser2-tree-adapter/download/parse5-htmlparser2-tree-adapter-6.0.1.tgz",
+      "integrity": "sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY=",
       "dev": true,
       "requires": {
-        "glob-base": "^0.3.0",
-        "is-dotfile": "^1.0.0",
-        "is-extglob": "^1.0.0",
-        "is-glob": "^2.0.0"
+        "parse5": "^6.0.1"
       },
       "dependencies": {
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
+        "parse5": {
+          "version": "6.0.1",
+          "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-6.0.1.tgz",
+          "integrity": "sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws=",
           "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
         }
       }
     },
-    "parse-json": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-2.2.0.tgz",
-      "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
-      "dev": true,
-      "requires": {
-        "error-ex": "^1.2.0"
-      }
-    },
-    "parse-passwd": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/parse-passwd/download/parse-passwd-1.0.0.tgz",
-      "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
-      "dev": true
-    },
-    "parse5": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npm.taobao.org/parse5/download/parse5-4.0.0.tgz?cache=0&sync_timestamp=1573036762880&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse5%2Fdownload%2Fparse5-4.0.0.tgz",
-      "integrity": "sha1-bXhlbj2o14tOwLkG98CO8d/j9gg=",
-      "dev": true
-    },
     "parseurl": {
       "version": "1.3.3",
       "resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz",
       "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=",
       "dev": true
     },
-    "pascal-case": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/pascal-case/download/pascal-case-2.0.1.tgz",
-      "integrity": "sha1-LVeNNFX2YNpl7KGO+VtODekSdh4=",
-      "dev": true,
-      "requires": {
-        "camel-case": "^3.0.0",
-        "upper-case-first": "^1.1.0"
-      }
+    "particles.js": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/particles.js/download/particles.js-2.0.0.tgz",
+      "integrity": "sha1-IThsQyjWx/lngKIB6W7t/AnHNvY=",
+      "dev": true
     },
     "pascalcase": {
       "version": "0.1.1",
@@ -12596,15 +8532,6 @@
       "integrity": "sha1-5sTd1+06onxoogzE5Q4aTug7vEo=",
       "dev": true
     },
-    "path-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/path-case/download/path-case-2.1.1.tgz",
-      "integrity": "sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU=",
-      "dev": true,
-      "requires": {
-        "no-case": "^2.2.0"
-      }
-    },
     "path-dirname": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/path-dirname/download/path-dirname-1.0.2.tgz",
@@ -12612,9 +8539,10 @@
       "dev": true
     },
     "path-exists": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
-      "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-4.0.0.tgz",
+      "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=",
+      "dev": true
     },
     "path-is-absolute": {
       "version": "1.0.1",
@@ -12631,7 +8559,8 @@
     "path-key": {
       "version": "2.0.1",
       "resolved": "https://registry.npm.taobao.org/path-key/download/path-key-2.0.1.tgz?cache=0&sync_timestamp=1574441322626&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpath-key%2Fdownload%2Fpath-key-2.0.1.tgz",
-      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A="
+      "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+      "dev": true
     },
     "path-parse": {
       "version": "1.0.6",
@@ -12639,25 +8568,11 @@
       "integrity": "sha1-1i27VnlAXXLEc37FhgDp3c8G0kw=",
       "dev": true
     },
-    "path-root": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/path-root/download/path-root-0.1.1.tgz",
-      "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
-      "dev": true,
-      "requires": {
-        "path-root-regex": "^0.1.0"
-      }
-    },
-    "path-root-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/path-root-regex/download/path-root-regex-0.1.2.tgz",
-      "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
-      "dev": true
-    },
     "path-to-regexp": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-2.4.0.tgz",
-      "integrity": "sha1-Nc5/Mz1WFvHB4b/iZsOrouWy5wQ="
+      "version": "0.1.7",
+      "resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz",
+      "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
+      "dev": true
     },
     "path-type": {
       "version": "3.0.0",
@@ -12666,12 +8581,20 @@
       "dev": true,
       "requires": {
         "pify": "^3.0.0"
+      },
+      "dependencies": {
+        "pify": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz",
+          "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+          "dev": true
+        }
       }
     },
     "pbkdf2": {
-      "version": "3.0.17",
-      "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.0.17.tgz",
-      "integrity": "sha1-l2wgZTBhexTrsyEUI597CTNuk6Y=",
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz",
+      "integrity": "sha1-y4cksPramEWWhW0abrr9NYRlS5Q=",
       "dev": true,
       "requires": {
         "create-hash": "^1.1.2",
@@ -12687,10 +8610,16 @@
       "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
       "dev": true
     },
+    "picomatch": {
+      "version": "2.2.2",
+      "resolved": "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz",
+      "integrity": "sha1-IfMz6ba46v8CRo9RRupAbTRfTa0=",
+      "dev": true
+    },
     "pify": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/pify/download/pify-3.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-3.0.0.tgz",
-      "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz",
+      "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
       "dev": true
     },
     "pinkie": {
@@ -12708,148 +8637,43 @@
         "pinkie": "^2.0.0"
       }
     },
-    "pirates": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/pirates/download/pirates-4.0.1.tgz",
-      "integrity": "sha1-ZDqSyviUVm+RsrmG0sZpUKji+4c=",
-      "dev": true,
-      "requires": {
-        "node-modules-regexp": "^1.0.0"
-      }
-    },
     "pkg-dir": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-2.0.0.tgz",
-      "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
-      "dev": true,
-      "requires": {
-        "find-up": "^2.1.0"
-      }
-    },
-    "pkg-up": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/pkg-up/download/pkg-up-2.0.0.tgz",
-      "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
-      "dev": true,
-      "requires": {
-        "find-up": "^2.1.0"
-      }
-    },
-    "plantuml-encoder": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/plantuml-encoder/download/plantuml-encoder-1.4.0.tgz",
-      "integrity": "sha1-eJkwLPeF3pVr8aFn4VQg/u5Zdfc="
-    },
-    "please-upgrade-node": {
-      "version": "3.2.0",
-      "resolved": "https://registry.npm.taobao.org/please-upgrade-node/download/please-upgrade-node-3.2.0.tgz?cache=0&sync_timestamp=1565266069139&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fplease-upgrade-node%2Fdownload%2Fplease-upgrade-node-3.2.0.tgz",
-      "integrity": "sha1-rt3T+ZTJM+StmLmdmlVu+g4v6UI=",
+      "version": "4.2.0",
+      "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-4.2.0.tgz",
+      "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=",
       "dev": true,
       "requires": {
-        "semver-compare": "^1.0.0"
+        "find-up": "^4.0.0"
       }
     },
-    "plop": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/plop/download/plop-2.3.0.tgz",
-      "integrity": "sha1-6bPM+dj9vOB37nN3t1/MX1Ed9WI=",
+    "pnp-webpack-plugin": {
+      "version": "1.6.4",
+      "resolved": "https://registry.npm.taobao.org/pnp-webpack-plugin/download/pnp-webpack-plugin-1.6.4.tgz",
+      "integrity": "sha1-yXEaxNxIpoXauvyG+Lbdn434QUk=",
       "dev": true,
       "requires": {
-        "chalk": "^1.1.3",
-        "interpret": "^1.2.0",
-        "liftoff": "^2.5.0",
-        "minimist": "^1.2.0",
-        "node-plop": "~0.18.0",
-        "ora": "^3.0.0",
-        "v8flags": "^2.0.10"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz",
-          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
-          "dev": true
-        },
-        "chalk": {
-          "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
-          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^2.2.1",
-            "escape-string-regexp": "^1.0.2",
-            "has-ansi": "^2.0.0",
-            "strip-ansi": "^3.0.0",
-            "supports-color": "^2.0.0"
-          }
-        },
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-          "dev": true
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
-          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
-          "dev": true
-        }
+        "ts-pnp": "^1.1.6"
       }
     },
-    "pluralize": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npm.taobao.org/pluralize/download/pluralize-7.0.0.tgz",
-      "integrity": "sha1-KYuJ34uTsCIdv0Ia0rGx6iP8Z3c=",
-      "dev": true,
-      "optional": true
-    },
-    "pn": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/pn/download/pn-1.1.0.tgz",
-      "integrity": "sha1-4vTO8OIZ9GPBeas3Rj5OHs3Muvs=",
-      "dev": true
-    },
     "portfinder": {
-      "version": "1.0.25",
-      "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.25.tgz",
-      "integrity": "sha1-JU/TN/+6hp9LnTftwpgFnLTTXso=",
+      "version": "1.0.28",
+      "resolved": "https://registry.npm.taobao.org/portfinder/download/portfinder-1.0.28.tgz",
+      "integrity": "sha1-Z8RiKFK9U3TdHdkA93n1NGL6x3g=",
       "dev": true,
       "requires": {
         "async": "^2.6.2",
         "debug": "^3.1.1",
-        "mkdirp": "^0.5.1"
+        "mkdirp": "^0.5.5"
       },
       "dependencies": {
         "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz",
-          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "version": "3.2.7",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
           "dev": true,
           "requires": {
             "ms": "^2.1.1"
           }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
         }
       }
     },
@@ -12860,9 +8684,10 @@
       "dev": true
     },
     "postcss": {
-      "version": "7.0.27",
-      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-7.0.27.tgz?cache=0&sync_timestamp=1581994853208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.27.tgz",
-      "integrity": "sha1-zGfNxrDao3UQW3xCSoVWc0X8VNk=",
+      "version": "7.0.35",
+      "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-7.0.35.tgz?cache=0&sync_timestamp=1607512891622&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-7.0.35.tgz",
+      "integrity": "sha1-0r4AuZj38hHYonaXQHny6SuXDiQ=",
+      "dev": true,
       "requires": {
         "chalk": "^2.4.2",
         "source-map": "^0.6.1",
@@ -12872,12 +8697,14 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+          "dev": true
         },
         "supports-color": {
           "version": "6.1.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
           "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
+          "dev": true,
           "requires": {
             "has-flag": "^3.0.0"
           }
@@ -12885,9 +8712,9 @@
       }
     },
     "postcss-calc": {
-      "version": "7.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.2.tgz?cache=0&sync_timestamp=1582014198134&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.2.tgz",
-      "integrity": "sha1-UE780AjKAnMSBWiweSsWzc3oqsE=",
+      "version": "7.0.5",
+      "resolved": "https://registry.npm.taobao.org/postcss-calc/download/postcss-calc-7.0.5.tgz?cache=0&sync_timestamp=1601732582224&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-calc%2Fdownload%2Fpostcss-calc-7.0.5.tgz",
+      "integrity": "sha1-+KbpnxLmGcLrwjz2xIb9wVhgkz4=",
       "dev": true,
       "requires": {
         "postcss": "^7.0.27",
@@ -12897,7 +8724,7 @@
     },
     "postcss-colormin": {
       "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-colormin/download/postcss-colormin-4.0.3.tgz?cache=0&sync_timestamp=1603212787349&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-colormin%2Fdownload%2Fpostcss-colormin-4.0.3.tgz",
       "integrity": "sha1-rgYLzpPteUrHEmTwgTLVUJVr04E=",
       "dev": true,
       "requires": {
@@ -12910,7 +8737,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -12918,7 +8745,7 @@
     },
     "postcss-convert-values": {
       "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-convert-values/download/postcss-convert-values-4.0.1.tgz?cache=0&sync_timestamp=1603212787465&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-convert-values%2Fdownload%2Fpostcss-convert-values-4.0.1.tgz",
       "integrity": "sha1-yjgT7U2g+BL51DcDWE5Enr4Ymn8=",
       "dev": true,
       "requires": {
@@ -12928,7 +8755,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -12945,7 +8772,7 @@
     },
     "postcss-discard-duplicates": {
       "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-discard-duplicates/download/postcss-discard-duplicates-4.0.2.tgz?cache=0&sync_timestamp=1603212787804&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-discard-duplicates%2Fdownload%2Fpostcss-discard-duplicates-4.0.2.tgz",
       "integrity": "sha1-P+EzzTyCKC5VD8myORdqkge3hOs=",
       "dev": true,
       "requires": {
@@ -12971,9 +8798,9 @@
       }
     },
     "postcss-load-config": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.0.tgz",
-      "integrity": "sha1-yE1pK3u3tB3c7ZTuYuirMbQXsAM=",
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/postcss-load-config/download/postcss-load-config-2.1.2.tgz?cache=0&sync_timestamp=1601607668112&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-load-config%2Fdownload%2Fpostcss-load-config-2.1.2.tgz",
+      "integrity": "sha1-xepQTyxK7zPHNZo03jVzdyrXUCo=",
       "dev": true,
       "requires": {
         "cosmiconfig": "^5.0.0",
@@ -12982,7 +8809,7 @@
     },
     "postcss-loader": {
       "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-3.0.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-loader/download/postcss-loader-3.0.0.tgz?cache=0&sync_timestamp=1605790892391&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-loader%2Fdownload%2Fpostcss-loader-3.0.0.tgz",
       "integrity": "sha1-a5eUPkfHLYRfqeA/Jzdz1OjdbC0=",
       "dev": true,
       "requires": {
@@ -12994,7 +8821,7 @@
       "dependencies": {
         "schema-utils": {
           "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz",
           "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
           "dev": true,
           "requires": {
@@ -13007,7 +8834,7 @@
     },
     "postcss-merge-longhand": {
       "version": "4.0.11",
-      "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-merge-longhand/download/postcss-merge-longhand-4.0.11.tgz?cache=0&sync_timestamp=1603212783596&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-longhand%2Fdownload%2Fpostcss-merge-longhand-4.0.11.tgz",
       "integrity": "sha1-YvSaE+Sg7gTnuY9CuxYGLKJUniQ=",
       "dev": true,
       "requires": {
@@ -13019,7 +8846,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13027,7 +8854,7 @@
     },
     "postcss-merge-rules": {
       "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-merge-rules/download/postcss-merge-rules-4.0.3.tgz?cache=0&sync_timestamp=1603212783716&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-merge-rules%2Fdownload%2Fpostcss-merge-rules-4.0.3.tgz",
       "integrity": "sha1-NivqT/Wh+Y5AdacTxsslrv75plA=",
       "dev": true,
       "requires": {
@@ -13041,7 +8868,7 @@
       "dependencies": {
         "postcss-selector-parser": {
           "version": "3.1.2",
-          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1601045448419&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
           "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
           "dev": true,
           "requires": {
@@ -13054,7 +8881,7 @@
     },
     "postcss-minify-font-values": {
       "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-minify-font-values/download/postcss-minify-font-values-4.0.2.tgz?cache=0&sync_timestamp=1603212783911&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-font-values%2Fdownload%2Fpostcss-minify-font-values-4.0.2.tgz",
       "integrity": "sha1-zUw0TM5HQ0P6xdgiBqssvLiv1aY=",
       "dev": true,
       "requires": {
@@ -13064,7 +8891,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13072,7 +8899,7 @@
     },
     "postcss-minify-gradients": {
       "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-minify-gradients/download/postcss-minify-gradients-4.0.2.tgz?cache=0&sync_timestamp=1603212784003&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-gradients%2Fdownload%2Fpostcss-minify-gradients-4.0.2.tgz",
       "integrity": "sha1-k7KcL/UJnFNe7NpWxKpuZlpmNHE=",
       "dev": true,
       "requires": {
@@ -13084,7 +8911,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13106,7 +8933,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13114,7 +8941,7 @@
     },
     "postcss-minify-selectors": {
       "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-minify-selectors/download/postcss-minify-selectors-4.0.2.tgz?cache=0&sync_timestamp=1603212784204&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-minify-selectors%2Fdownload%2Fpostcss-minify-selectors-4.0.2.tgz",
       "integrity": "sha1-4uXrQL/uUA0M2SQ1APX46kJi+9g=",
       "dev": true,
       "requires": {
@@ -13126,7 +8953,7 @@
       "dependencies": {
         "postcss-selector-parser": {
           "version": "3.1.2",
-          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1601045448419&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
           "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
           "dev": true,
           "requires": {
@@ -13137,29 +8964,49 @@
         }
       }
     },
+    "postcss-modules": {
+      "version": "3.2.2",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules/download/postcss-modules-3.2.2.tgz?cache=0&sync_timestamp=1606641106141&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules%2Fdownload%2Fpostcss-modules-3.2.2.tgz",
+      "integrity": "sha1-7jkN4PnxjnYeF3jfub4maFwCxR8=",
+      "dev": true,
+      "requires": {
+        "generic-names": "^2.0.1",
+        "icss-replace-symbols": "^1.1.0",
+        "lodash.camelcase": "^4.3.0",
+        "postcss": "^7.0.32",
+        "postcss-modules-extract-imports": "^2.0.0",
+        "postcss-modules-local-by-default": "^3.0.2",
+        "postcss-modules-scope": "^2.2.0",
+        "postcss-modules-values": "^3.0.0",
+        "string-hash": "^1.1.1"
+      }
+    },
     "postcss-modules-extract-imports": {
       "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-2.0.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-extract-imports/download/postcss-modules-extract-imports-2.0.0.tgz?cache=0&sync_timestamp=1602588238811&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-extract-imports%2Fdownload%2Fpostcss-modules-extract-imports-2.0.0.tgz",
       "integrity": "sha1-gYcZoa4doyX5gyRGsBE27rSTzX4=",
+      "dev": true,
       "requires": {
         "postcss": "^7.0.5"
       }
     },
     "postcss-modules-local-by-default": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-3.0.2.tgz",
-      "integrity": "sha1-6KZWG+kUqvPAUodjd1JMqQ27eRU=",
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-local-by-default/download/postcss-modules-local-by-default-3.0.3.tgz?cache=0&sync_timestamp=1602587661752&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-local-by-default%2Fdownload%2Fpostcss-modules-local-by-default-3.0.3.tgz",
+      "integrity": "sha1-uxTgzHgnnVBNvcv9fgyiiZP/u7A=",
+      "dev": true,
       "requires": {
         "icss-utils": "^4.1.1",
-        "postcss": "^7.0.16",
+        "postcss": "^7.0.32",
         "postcss-selector-parser": "^6.0.2",
-        "postcss-value-parser": "^4.0.0"
+        "postcss-value-parser": "^4.1.0"
       }
     },
     "postcss-modules-scope": {
       "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-modules-scope/download/postcss-modules-scope-2.2.0.tgz?cache=0&sync_timestamp=1602593225142&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-modules-scope%2Fdownload%2Fpostcss-modules-scope-2.2.0.tgz",
       "integrity": "sha1-OFyuATzHdD9afXYC0Qc6iequYu4=",
+      "dev": true,
       "requires": {
         "postcss": "^7.0.6",
         "postcss-selector-parser": "^6.0.0"
@@ -13169,6 +9016,7 @@
       "version": "3.0.0",
       "resolved": "https://registry.npm.taobao.org/postcss-modules-values/download/postcss-modules-values-3.0.0.tgz",
       "integrity": "sha1-W1AA1uuuKbQlUwG0o6VFdEI+fxA=",
+      "dev": true,
       "requires": {
         "icss-utils": "^4.0.0",
         "postcss": "^7.0.6"
@@ -13196,7 +9044,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13204,7 +9052,7 @@
     },
     "postcss-normalize-positions": {
       "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-normalize-positions/download/postcss-normalize-positions-4.0.2.tgz?cache=0&sync_timestamp=1603212712085&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-normalize-positions%2Fdownload%2Fpostcss-normalize-positions-4.0.2.tgz",
       "integrity": "sha1-BfdX+E8mBDc3g2ipH4ky1LECkX8=",
       "dev": true,
       "requires": {
@@ -13216,7 +9064,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13236,7 +9084,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13255,7 +9103,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13274,7 +9122,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13293,7 +9141,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13313,7 +9161,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13331,7 +9179,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13339,7 +9187,7 @@
     },
     "postcss-ordered-values": {
       "version": "4.1.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-ordered-values/download/postcss-ordered-values-4.1.2.tgz?cache=0&sync_timestamp=1603212785171&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-ordered-values%2Fdownload%2Fpostcss-ordered-values-4.1.2.tgz",
       "integrity": "sha1-DPdcgg7H1cTSgBiVWeC1ceusDu4=",
       "dev": true,
       "requires": {
@@ -13350,7 +9198,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13367,7 +9215,7 @@
     },
     "postcss-reduce-initial": {
       "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-reduce-initial/download/postcss-reduce-initial-4.0.3.tgz?cache=0&sync_timestamp=1603212785269&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-initial%2Fdownload%2Fpostcss-reduce-initial-4.0.3.tgz",
       "integrity": "sha1-f9QuvqXpyBRgljniwuhK4nC6SN8=",
       "dev": true,
       "requires": {
@@ -13379,7 +9227,7 @@
     },
     "postcss-reduce-transforms": {
       "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/postcss-reduce-transforms/download/postcss-reduce-transforms-4.0.2.tgz?cache=0&sync_timestamp=1603212785466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-reduce-transforms%2Fdownload%2Fpostcss-reduce-transforms-4.0.2.tgz",
       "integrity": "sha1-F++kBerMbge+NBSlyi0QdGgdTik=",
       "dev": true,
       "requires": {
@@ -13391,20 +9239,22 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
       }
     },
     "postcss-selector-parser": {
-      "version": "6.0.2",
-      "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-6.0.2.tgz",
-      "integrity": "sha1-k0z3mdAWyDQRhZ4J3Oyt4BKG7Fw=",
+      "version": "6.0.4",
+      "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-6.0.4.tgz?cache=0&sync_timestamp=1601045448419&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-6.0.4.tgz",
+      "integrity": "sha1-VgdaE4CgRgTDiwY+p3Z6Epr1wrM=",
+      "dev": true,
       "requires": {
         "cssesc": "^3.0.0",
         "indexes-of": "^1.0.1",
-        "uniq": "^1.0.1"
+        "uniq": "^1.0.1",
+        "util-deprecate": "^1.0.2"
       }
     },
     "postcss-svgo": {
@@ -13421,7 +9271,7 @@
       "dependencies": {
         "postcss-value-parser": {
           "version": "3.3.1",
-          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-3.3.1.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-3.3.1.tgz",
           "integrity": "sha1-n/giVH4okyE88cMO+lGsX9G6goE=",
           "dev": true
         }
@@ -13439,13 +9289,14 @@
       }
     },
     "postcss-value-parser": {
-      "version": "4.0.3",
-      "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.0.3.tgz?cache=0&sync_timestamp=1582038102813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-4.0.3.tgz",
-      "integrity": "sha1-ZR/0WTqp7ajV0NZlk6JBeurrMl0="
+      "version": "4.1.0",
+      "resolved": "https://registry.npm.taobao.org/postcss-value-parser/download/postcss-value-parser-4.1.0.tgz?cache=0&sync_timestamp=1588083303810&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-value-parser%2Fdownload%2Fpostcss-value-parser-4.1.0.tgz",
+      "integrity": "sha1-RD9qIM7WSBor2k+oUypuVdeJoss=",
+      "dev": true
     },
     "posthtml": {
       "version": "0.9.2",
-      "resolved": "https://registry.npm.taobao.org/posthtml/download/posthtml-0.9.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/posthtml/download/posthtml-0.9.2.tgz?cache=0&sync_timestamp=1606388295556&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fposthtml%2Fdownload%2Fposthtml-0.9.2.tgz",
       "integrity": "sha1-9MBtufZ7Yf0XxOJW5+PZUVv3Jv0=",
       "dev": true,
       "requires": {
@@ -13455,7 +9306,7 @@
     },
     "posthtml-parser": {
       "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/posthtml-parser/download/posthtml-parser-0.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fposthtml-parser%2Fdownload%2Fposthtml-parser-0.2.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/posthtml-parser/download/posthtml-parser-0.2.1.tgz",
       "integrity": "sha1-NdUw3jhnQMK6JP8usvrznM3ycd0=",
       "dev": true,
       "requires": {
@@ -13475,18 +9326,18 @@
       }
     },
     "posthtml-rename-id": {
-      "version": "1.0.11",
-      "resolved": "https://registry.npm.taobao.org/posthtml-rename-id/download/posthtml-rename-id-1.0.11.tgz",
-      "integrity": "sha1-AigaHkSCqjyMMPeYz5qIjjLZJ1w=",
+      "version": "1.0.12",
+      "resolved": "https://registry.npm.taobao.org/posthtml-rename-id/download/posthtml-rename-id-1.0.12.tgz",
+      "integrity": "sha1-z39us3FGvxr6wx5o8YxswZrmFDM=",
       "dev": true,
       "requires": {
         "escape-string-regexp": "1.0.5"
       }
     },
     "posthtml-render": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/posthtml-render/download/posthtml-render-1.2.0.tgz?cache=0&sync_timestamp=1582613308689&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fposthtml-render%2Fdownload%2Fposthtml-render-1.2.0.tgz",
-      "integrity": "sha1-PfDIAKi7uVr1g6lHSFIEaUd63fQ=",
+      "version": "1.4.0",
+      "resolved": "https://registry.npm.taobao.org/posthtml-render/download/posthtml-render-1.4.0.tgz?cache=0&sync_timestamp=1605682819222&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fposthtml-render%2Fdownload%2Fposthtml-render-1.4.0.tgz",
+      "integrity": "sha1-QBFAcMRYgcrLkzR9rj7/U6+8/xM=",
       "dev": true
     },
     "posthtml-svg-mode": {
@@ -13503,94 +9354,45 @@
     },
     "prelude-ls": {
       "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/prelude-ls/download/prelude-ls-1.1.2.tgz?cache=0&sync_timestamp=1585868608597&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprelude-ls%2Fdownload%2Fprelude-ls-1.1.2.tgz",
       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
       "dev": true
     },
-    "preserve": {
-      "version": "0.2.0",
-      "resolved": "https://registry.npm.taobao.org/preserve/download/preserve-0.2.0.tgz",
-      "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=",
+    "prepend-http": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npm.taobao.org/prepend-http/download/prepend-http-1.0.4.tgz",
+      "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
       "dev": true
     },
     "prettier": {
       "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
-      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+      "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1606523097359&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
+      "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
       "dev": true
     },
     "prettier-linter-helpers": {
       "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
-      "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+      "resolved": "https://registry.npm.taobao.org/prettier-linter-helpers/download/prettier-linter-helpers-1.0.0.tgz",
+      "integrity": "sha1-0j1B/hN1ZG3i0BBNNFSjAIgCz3s=",
       "dev": true,
       "requires": {
         "fast-diff": "^1.1.2"
       }
     },
-    "pretty": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/pretty/download/pretty-2.0.0.tgz",
-      "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=",
-      "dev": true,
-      "requires": {
-        "condense-newlines": "^0.2.1",
-        "extend-shallow": "^2.0.1",
-        "js-beautify": "^1.6.12"
-      },
-      "dependencies": {
-        "extend-shallow": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/extend-shallow/download/extend-shallow-2.0.1.tgz",
-          "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
-          "dev": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        }
-      }
-    },
     "pretty-error": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.1.tgz",
-      "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=",
-      "dev": true,
-      "requires": {
-        "renderkid": "^2.0.1",
-        "utila": "~0.4"
-      }
-    },
-    "pretty-format": {
-      "version": "23.6.0",
-      "resolved": "https://registry.npm.taobao.org/pretty-format/download/pretty-format-23.6.0.tgz?cache=0&sync_timestamp=1579655022191&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpretty-format%2Fdownload%2Fpretty-format-23.6.0.tgz",
-      "integrity": "sha1-XqrI7razO5h7f+YJfqaooUarV2A=",
+      "version": "2.1.2",
+      "resolved": "https://registry.npm.taobao.org/pretty-error/download/pretty-error-2.1.2.tgz",
+      "integrity": "sha1-von4LYGxyG7I/fvDhQRYgnJ/k7Y=",
       "dev": true,
       "requires": {
-        "ansi-regex": "^3.0.0",
-        "ansi-styles": "^3.2.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        }
+        "lodash": "^4.17.20",
+        "renderkid": "^2.0.4"
       }
     },
     "printj": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/printj/download/printj-1.1.2.tgz",
-      "integrity": "sha1-2Q3rKXWoufYA+zoclOP0xTx4oiI="
-    },
-    "private": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npm.taobao.org/private/download/private-0.1.8.tgz",
-      "integrity": "sha1-I4Hts2ifelPWUxkAYPz4ItLzaP8=",
-      "dev": true
+      "version": "1.2.3",
+      "resolved": "https://r2.cnpmjs.org/printj/-/printj-1.2.3.tgz",
+      "integrity": "sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA=="
     },
     "process": {
       "version": "0.11.10",
@@ -13601,7 +9403,8 @@
     "process-nextick-args": {
       "version": "2.0.1",
       "resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz",
-      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I="
+      "integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=",
+      "dev": true
     },
     "progress": {
       "version": "2.0.3",
@@ -13615,28 +9418,6 @@
       "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
       "dev": true
     },
-    "prompts": {
-      "version": "0.1.14",
-      "resolved": "https://registry.npm.taobao.org/prompts/download/prompts-0.1.14.tgz",
-      "integrity": "sha1-qOFcYSxcnsj4ERhH3zM3ycvUQ7I=",
-      "dev": true,
-      "requires": {
-        "kleur": "^2.0.1",
-        "sisteransi": "^0.1.1"
-      }
-    },
-    "property-expr": {
-      "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/property-expr/download/property-expr-1.5.1.tgz?cache=0&sync_timestamp=1583512528282&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fproperty-expr%2Fdownload%2Fproperty-expr-1.5.1.tgz",
-      "integrity": "sha1-IuhwaJSgyOKNWHNYBPa6OjZzMU8=",
-      "dev": true
-    },
-    "proto-list": {
-      "version": "1.2.4",
-      "resolved": "https://registry.npm.taobao.org/proto-list/download/proto-list-1.2.4.tgz",
-      "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
-      "dev": true
-    },
     "proxy-addr": {
       "version": "2.0.6",
       "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz?cache=0&sync_timestamp=1582556112011&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fproxy-addr%2Fdownload%2Fproxy-addr-2.0.6.tgz",
@@ -13656,12 +9437,13 @@
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/pseudomap/download/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
     },
     "psl": {
-      "version": "1.7.0",
-      "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.7.0.tgz?cache=0&sync_timestamp=1577538558975&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpsl%2Fdownload%2Fpsl-1.7.0.tgz",
-      "integrity": "sha1-8cTEeo75cWfepda79IFtc26ISjw=",
+      "version": "1.8.0",
+      "resolved": "https://registry.npm.taobao.org/psl/download/psl-1.8.0.tgz",
+      "integrity": "sha1-kyb4vPsBOtzABf3/BWrM4CDlHCQ=",
       "dev": true
     },
     "public-encrypt": {
@@ -13676,6 +9458,14 @@
         "parse-asn1": "^5.0.0",
         "randombytes": "^2.0.1",
         "safe-buffer": "^5.1.2"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.11.9",
+          "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-4.11.9.tgz",
+          "integrity": "sha1-JtVWgpRY+dHoH8SJUkk9C6NQeCg=",
+          "dev": true
+        }
       }
     },
     "pump": {
@@ -13714,7 +9504,8 @@
     "punycode": {
       "version": "2.1.1",
       "resolved": "https://registry.npm.taobao.org/punycode/download/punycode-2.1.1.tgz",
-      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew="
+      "integrity": "sha1-tYsBCsQMIsVldhbI0sLALHv0eew=",
+      "dev": true
     },
     "q": {
       "version": "1.5.1",
@@ -13723,14 +9514,16 @@
       "dev": true
     },
     "qs": {
-      "version": "6.5.2",
-      "resolved": "https://registry.npm.taobao.org/qs/download/qs-6.5.2.tgz",
-      "integrity": "sha1-yzroBuh0BERYTvFUzo7pjUA/PjY=",
-      "dev": true
+      "version": "6.10.3",
+      "resolved": "https://r.cnpmjs.org/qs/-/qs-6.10.3.tgz",
+      "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
+      "requires": {
+        "side-channel": "^1.0.4"
+      }
     },
     "query-string": {
       "version": "4.3.4",
-      "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz",
+      "resolved": "https://registry.npm.taobao.org/query-string/download/query-string-4.3.4.tgz?cache=0&sync_timestamp=1604609999412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fquery-string%2Fdownload%2Fquery-string-4.3.4.tgz",
       "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
       "dev": true,
       "requires": {
@@ -13751,30 +9544,11 @@
       "dev": true
     },
     "querystringify": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.1.1.tgz",
-      "integrity": "sha1-YOWl/WSn+L+k0qsu1v30yFutFU4=",
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/querystringify/download/querystringify-2.2.0.tgz",
+      "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
       "dev": true
     },
-    "randomatic": {
-      "version": "3.1.1",
-      "resolved": "https://registry.npm.taobao.org/randomatic/download/randomatic-3.1.1.tgz",
-      "integrity": "sha1-t3bvxZN1mE42xTey9RofCv8Noe0=",
-      "dev": true,
-      "requires": {
-        "is-number": "^4.0.0",
-        "kind-of": "^6.0.0",
-        "math-random": "^1.0.1"
-      },
-      "dependencies": {
-        "is-number": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-4.0.0.tgz",
-          "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=",
-          "dev": true
-        }
-      }
-    },
     "randombytes": {
       "version": "2.1.0",
       "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
@@ -13800,13 +9574,6 @@
       "integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=",
       "dev": true
     },
-    "raphael": {
-      "version": "git+https://github.com/nhn/raphael.git#78a6ed3ec269f33b6457b0ec66f8c3d1f2ed70e0",
-      "from": "git+https://github.com/nhn/raphael.git#2.2.0-c",
-      "requires": {
-        "eve": "git://github.com/adobe-webplatform/eve.git#eef80ed"
-      }
-    },
     "raw-body": {
       "version": "2.4.0",
       "resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz",
@@ -13820,75 +9587,28 @@
       }
     },
     "raw-loader": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npm.taobao.org/raw-loader/download/raw-loader-0.5.1.tgz?cache=0&sync_timestamp=1574695040943&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fraw-loader%2Fdownload%2Fraw-loader-0.5.1.tgz",
-      "integrity": "sha1-DD0L6u2KAclm2Xh793goElKpeao="
-    },
-    "read-pkg": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-1.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-1.1.0.tgz",
-      "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
-      "dev": true,
-      "requires": {
-        "load-json-file": "^1.0.0",
-        "normalize-package-data": "^2.3.2",
-        "path-type": "^1.0.0"
-      },
-      "dependencies": {
-        "path-type": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/path-type/download/path-type-1.1.0.tgz",
-          "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
-          "dev": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "pify": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "pify": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-2.3.0.tgz",
-          "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
-          "dev": true
-        }
-      }
-    },
-    "read-pkg-up": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-1.0.1.tgz?cache=0&sync_timestamp=1575620436254&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg-up%2Fdownload%2Fread-pkg-up-1.0.1.tgz",
-      "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
-      "dev": true,
-      "requires": {
-        "find-up": "^1.0.0",
-        "read-pkg": "^1.0.0"
-      },
-      "dependencies": {
-        "find-up": {
-          "version": "1.1.2",
-          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-1.1.2.tgz",
-          "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
-          "dev": true,
-          "requires": {
-            "path-exists": "^2.0.0",
-            "pinkie-promise": "^2.0.0"
-          }
-        },
-        "path-exists": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-2.1.0.tgz",
-          "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
-          "dev": true,
-          "requires": {
-            "pinkie-promise": "^2.0.0"
-          }
-        }
+      "version": "0.5.1",
+      "resolved": "https://r2.cnpmjs.org/raw-loader/-/raw-loader-0.5.1.tgz",
+      "integrity": "sha512-sf7oGoLuaYAScB4VGr0tzetsYlS8EJH6qnTCfQ/WVEa89hALQ4RQfCKt5xCyPQKPDUbVUAIP1QsxAwfAjlDp7Q==",
+      "dev": true
+    },
+    "read-pkg": {
+      "version": "5.2.0",
+      "resolved": "https://registry.npm.taobao.org/read-pkg/download/read-pkg-5.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fread-pkg%2Fdownload%2Fread-pkg-5.2.0.tgz",
+      "integrity": "sha1-e/KVQ4yloz5WzTDgU7NO5yUMk8w=",
+      "dev": true,
+      "requires": {
+        "@types/normalize-package-data": "^2.4.0",
+        "normalize-package-data": "^2.5.0",
+        "parse-json": "^5.0.0",
+        "type-fest": "^0.6.0"
       }
     },
     "readable-stream": {
       "version": "2.3.7",
       "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz?cache=0&sync_timestamp=1581622984924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz",
       "integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=",
+      "dev": true,
       "requires": {
         "core-util-is": "~1.0.0",
         "inherits": "~2.0.3",
@@ -13900,107 +9620,41 @@
       }
     },
     "readdirp": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
-      "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "micromatch": "^3.1.10",
-        "readable-stream": "^2.0.2"
-      }
-    },
-    "realpath-native": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/realpath-native/download/realpath-native-1.1.0.tgz",
-      "integrity": "sha1-IAMpT+oj+wZy8kduviL89Jii1lw=",
-      "dev": true,
-      "requires": {
-        "util.promisify": "^1.0.0"
-      }
-    },
-    "rechoir": {
-      "version": "0.6.2",
-      "resolved": "https://registry.npm.taobao.org/rechoir/download/rechoir-0.6.2.tgz",
-      "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
-      "dev": true,
-      "requires": {
-        "resolve": "^1.1.6"
-      }
-    },
-    "redent": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/redent/download/redent-1.0.0.tgz",
-      "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+      "version": "3.5.0",
+      "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-3.5.0.tgz",
+      "integrity": "sha1-m6dMAZsV02UnjS6Ru4xI17TULJ4=",
       "dev": true,
       "requires": {
-        "indent-string": "^2.1.0",
-        "strip-indent": "^1.0.1"
-      },
-      "dependencies": {
-        "get-stdin": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/get-stdin/download/get-stdin-4.0.1.tgz",
-          "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
-          "dev": true
-        },
-        "indent-string": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/indent-string/download/indent-string-2.1.0.tgz",
-          "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
-          "dev": true,
-          "requires": {
-            "repeating": "^2.0.0"
-          }
-        },
-        "strip-indent": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-indent/download/strip-indent-1.0.1.tgz",
-          "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
-          "dev": true,
-          "requires": {
-            "get-stdin": "^4.0.1"
-          }
-        }
+        "picomatch": "^2.2.1"
       }
     },
     "regenerate": {
-      "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.0.tgz",
-      "integrity": "sha1-SoVuxLVuQHfFV1icroXnpMiGmhE=",
+      "version": "1.4.2",
+      "resolved": "https://registry.npm.taobao.org/regenerate/download/regenerate-1.4.2.tgz?cache=0&sync_timestamp=1604218439731&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate%2Fdownload%2Fregenerate-1.4.2.tgz",
+      "integrity": "sha1-uTRtiCfo9aMve6KWN9OYtpAUhIo=",
       "dev": true
     },
     "regenerate-unicode-properties": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.1.0.tgz",
-      "integrity": "sha1-71Hg8OpK1CS3e/fLQfPgFccKPw4=",
+      "version": "8.2.0",
+      "resolved": "https://registry.npm.taobao.org/regenerate-unicode-properties/download/regenerate-unicode-properties-8.2.0.tgz?cache=0&sync_timestamp=1583975113523&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerate-unicode-properties%2Fdownload%2Fregenerate-unicode-properties-8.2.0.tgz",
+      "integrity": "sha1-5d5xEdZV57pgwFfb6f83yH5lzew=",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.0"
       }
     },
     "regenerator-runtime": {
-      "version": "0.11.1",
-      "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.11.1.tgz?cache=0&sync_timestamp=1582505712016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.11.1.tgz",
-      "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk="
+      "version": "0.13.7",
+      "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.13.7.tgz",
+      "integrity": "sha1-ysLazIoepnX+qrrriugziYrkb1U="
     },
     "regenerator-transform": {
-      "version": "0.14.2",
-      "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.2.tgz?cache=0&sync_timestamp=1582478716594&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-transform%2Fdownload%2Fregenerator-transform-0.14.2.tgz",
-      "integrity": "sha1-lJ2dh0aP+I1afkc067mUqJLeH/I=",
-      "dev": true,
-      "requires": {
-        "@babel/runtime": "^7.8.4",
-        "private": "^0.1.8"
-      }
-    },
-    "regex-cache": {
-      "version": "0.4.4",
-      "resolved": "https://registry.npm.taobao.org/regex-cache/download/regex-cache-0.4.4.tgz",
-      "integrity": "sha1-db3FiioUls7EihKDW8VMjVYjNt0=",
+      "version": "0.14.5",
+      "resolved": "https://registry.npm.taobao.org/regenerator-transform/download/regenerator-transform-0.14.5.tgz",
+      "integrity": "sha1-yY2hVGg2ccnE3LFuznNlF+G3/rQ=",
       "dev": true,
       "requires": {
-        "is-equal-shallow": "^0.1.3"
+        "@babel/runtime": "^7.8.4"
       }
     },
     "regex-not": {
@@ -14021,39 +9675,59 @@
       "requires": {
         "define-properties": "^1.1.3",
         "es-abstract": "^1.17.0-next.1"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.17.7",
+          "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz",
+          "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        }
       }
     },
     "regexpp": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-1.1.0.tgz?cache=0&sync_timestamp=1567160849322&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpp%2Fdownload%2Fregexpp-1.1.0.tgz",
-      "integrity": "sha1-DjUW3Qt5BPQT0tQZPc5GGMOmias=",
-      "dev": true,
-      "optional": true
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/regexpp/download/regexpp-2.0.1.tgz",
+      "integrity": "sha1-jRnTHPYySCtYkEn4KB+T28uk0H8=",
+      "dev": true
     },
     "regexpu-core": {
-      "version": "4.6.0",
-      "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.6.0.tgz?cache=0&sync_timestamp=1568375270709&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.6.0.tgz",
-      "integrity": "sha1-IDfBizJ8/Oim/qKk7EQfJDKvuLY=",
+      "version": "4.7.1",
+      "resolved": "https://registry.npm.taobao.org/regexpu-core/download/regexpu-core-4.7.1.tgz?cache=0&sync_timestamp=1600413905865&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregexpu-core%2Fdownload%2Fregexpu-core-4.7.1.tgz",
+      "integrity": "sha1-LepamgcjMpj78NuR+pq8TG4PitY=",
       "dev": true,
       "requires": {
         "regenerate": "^1.4.0",
-        "regenerate-unicode-properties": "^8.1.0",
-        "regjsgen": "^0.5.0",
-        "regjsparser": "^0.6.0",
+        "regenerate-unicode-properties": "^8.2.0",
+        "regjsgen": "^0.5.1",
+        "regjsparser": "^0.6.4",
         "unicode-match-property-ecmascript": "^1.0.4",
-        "unicode-match-property-value-ecmascript": "^1.1.0"
+        "unicode-match-property-value-ecmascript": "^1.2.0"
       }
     },
     "regjsgen": {
-      "version": "0.5.1",
-      "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.1.tgz",
-      "integrity": "sha1-SPC/Gl6iBRlpKcDZeYtC0e2YRDw=",
+      "version": "0.5.2",
+      "resolved": "https://registry.npm.taobao.org/regjsgen/download/regjsgen-0.5.2.tgz",
+      "integrity": "sha1-kv8pX7He7L9uzaslQ9IH6RqjNzM=",
       "dev": true
     },
     "regjsparser": {
-      "version": "0.6.3",
-      "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.3.tgz",
-      "integrity": "sha1-dBksWAXTXp9evjwftbQNQKijhGA=",
+      "version": "0.6.4",
+      "resolved": "https://registry.npm.taobao.org/regjsparser/download/regjsparser-0.6.4.tgz?cache=0&sync_timestamp=1583896806843&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregjsparser%2Fdownload%2Fregjsparser-0.6.4.tgz",
+      "integrity": "sha1-p2n4aEMIQBpm6bUp0kNv9NBmYnI=",
       "dev": true,
       "requires": {
         "jsesc": "~0.5.0"
@@ -14061,7 +9735,7 @@
       "dependencies": {
         "jsesc": {
           "version": "0.5.0",
-          "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/jsesc/download/jsesc-0.5.0.tgz?cache=0&sync_timestamp=1603891198638&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsesc%2Fdownload%2Fjsesc-0.5.0.tgz",
           "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
           "dev": true
         }
@@ -14080,16 +9754,16 @@
       "dev": true
     },
     "renderkid": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.3.tgz",
-      "integrity": "sha1-OAF5wv9a4TZcUivy/Pz/AcW3QUk=",
+      "version": "2.0.4",
+      "resolved": "https://registry.npm.taobao.org/renderkid/download/renderkid-2.0.4.tgz",
+      "integrity": "sha1-0yXlMq+yjT+Hlv/uMGvo/9b8hkw=",
       "dev": true,
       "requires": {
         "css-select": "^1.1.0",
         "dom-converter": "^0.2",
         "htmlparser2": "^3.3.0",
-        "strip-ansi": "^3.0.0",
-        "utila": "^0.4.0"
+        "lodash": "^4.17.20",
+        "strip-ansi": "^3.0.0"
       },
       "dependencies": {
         "ansi-regex": {
@@ -14100,7 +9774,7 @@
         },
         "css-select": {
           "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/css-select/download/css-select-1.2.0.tgz?cache=0&sync_timestamp=1607468308878&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-select%2Fdownload%2Fcss-select-1.2.0.tgz",
           "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
           "dev": true,
           "requires": {
@@ -14112,7 +9786,7 @@
         },
         "css-what": {
           "version": "2.1.3",
-          "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-2.1.3.tgz",
+          "resolved": "https://registry.npm.taobao.org/css-what/download/css-what-2.1.3.tgz?cache=0&sync_timestamp=1602570970779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcss-what%2Fdownload%2Fcss-what-2.1.3.tgz",
           "integrity": "sha1-ptdgRXM2X+dGhsPzEcVlE9iChfI=",
           "dev": true
         },
@@ -14149,15 +9823,6 @@
       "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
       "dev": true
     },
-    "repeating": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/repeating/download/repeating-2.0.1.tgz",
-      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
-      "dev": true,
-      "requires": {
-        "is-finite": "^1.0.0"
-      }
-    },
     "request": {
       "version": "2.88.2",
       "resolved": "https://registry.npm.taobao.org/request/download/request-2.88.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest%2Fdownload%2Frequest-2.88.2.tgz",
@@ -14184,48 +9849,27 @@
         "tough-cookie": "~2.5.0",
         "tunnel-agent": "^0.6.0",
         "uuid": "^3.3.2"
-      }
-    },
-    "request-promise-core": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/request-promise-core/download/request-promise-core-1.1.3.tgz",
-      "integrity": "sha1-6aPAgbUTgN/qZ3M2Bh/qh5qCnuk=",
-      "dev": true,
-      "requires": {
-        "lodash": "^4.17.15"
-      }
-    },
-    "request-promise-native": {
-      "version": "1.0.8",
-      "resolved": "https://registry.npm.taobao.org/request-promise-native/download/request-promise-native-1.0.8.tgz?cache=0&sync_timestamp=1572829762814&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frequest-promise-native%2Fdownload%2Frequest-promise-native-1.0.8.tgz",
-      "integrity": "sha1-pFW5YLgm5E4r+Jma9k3/K/5YyzY=",
-      "dev": true,
-      "requires": {
-        "request-promise-core": "1.1.3",
-        "stealthy-require": "^1.1.1",
-        "tough-cookie": "^2.3.3"
+      },
+      "dependencies": {
+        "qs": {
+          "version": "6.5.3",
+          "resolved": "https://r.cnpmjs.org/qs/-/qs-6.5.3.tgz",
+          "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==",
+          "dev": true
+        }
       }
     },
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npm.taobao.org/require-directory/download/require-directory-2.1.1.tgz",
-      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I="
+      "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+      "dev": true
     },
     "require-main-filename": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-1.0.1.tgz",
-      "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE="
-    },
-    "require-uncached": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/require-uncached/download/require-uncached-1.0.3.tgz",
-      "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "caller-path": "^0.1.0",
-        "resolve-from": "^1.0.0"
-      }
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/require-main-filename/download/require-main-filename-2.0.0.tgz",
+      "integrity": "sha1-0LMp7MfMD2Fkn2IhW+aa9UqomJs=",
+      "dev": true
     },
     "requires-port": {
       "version": "1.0.0",
@@ -14233,23 +9877,18 @@
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
       "dev": true
     },
-    "reselect": {
-      "version": "3.0.1",
-      "resolved": "https://registry.npm.taobao.org/reselect/download/reselect-3.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freselect%2Fdownload%2Freselect-3.0.1.tgz",
-      "integrity": "sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc=",
-      "dev": true
-    },
     "resize-observer-polyfill": {
       "version": "1.5.1",
-      "resolved": "https://registry.npm.taobao.org/resize-observer-polyfill/download/resize-observer-polyfill-1.5.1.tgz",
-      "integrity": "sha1-DpAg3T0hAkRY1OvSfiPkAmmBBGQ="
+      "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
     },
     "resolve": {
-      "version": "1.15.1",
-      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.15.1.tgz?cache=0&sync_timestamp=1580943346382&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.15.1.tgz",
-      "integrity": "sha1-J73N7/6vLWJEuVuw+fS0ZTRR8+g=",
+      "version": "1.19.0",
+      "resolved": "https://registry.npm.taobao.org/resolve/download/resolve-1.19.0.tgz",
+      "integrity": "sha1-GvW/YwQJc0oGfK4pMYqsf6KaJnw=",
       "dev": true,
       "requires": {
+        "is-core-module": "^2.1.0",
         "path-parse": "^1.0.6"
       }
     },
@@ -14260,32 +9899,13 @@
       "dev": true,
       "requires": {
         "resolve-from": "^3.0.0"
-      },
-      "dependencies": {
-        "resolve-from": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz",
-          "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
-          "dev": true
-        }
-      }
-    },
-    "resolve-dir": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/resolve-dir/download/resolve-dir-1.0.1.tgz",
-      "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
-      "dev": true,
-      "requires": {
-        "expand-tilde": "^2.0.0",
-        "global-modules": "^1.0.0"
       }
     },
     "resolve-from": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-1.0.1.tgz",
-      "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
-      "dev": true,
-      "optional": true
+      "version": "3.0.0",
+      "resolved": "https://registry.npm.taobao.org/resolve-from/download/resolve-from-3.0.0.tgz",
+      "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+      "dev": true
     },
     "resolve-url": {
       "version": "0.2.1",
@@ -14346,25 +9966,10 @@
         "inherits": "^2.0.1"
       }
     },
-    "rsvp": {
-      "version": "3.6.2",
-      "resolved": "https://registry.npm.taobao.org/rsvp/download/rsvp-3.6.2.tgz",
-      "integrity": "sha1-LpZJFZmpbN4bUV1WdKj3qRRSkmo=",
-      "dev": true
-    },
     "run-async": {
-      "version": "2.4.0",
-      "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frun-async%2Fdownload%2Frun-async-2.4.0.tgz",
-      "integrity": "sha1-5ZBUpbhods+uB/Qx0Yy63cWU8eg=",
-      "dev": true,
-      "requires": {
-        "is-promise": "^2.1.0"
-      }
-    },
-    "run-node": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/run-node/download/run-node-1.0.0.tgz",
-      "integrity": "sha1-RrULlGoqotSUeuHYhumFb9nKvl4=",
+      "version": "2.4.1",
+      "resolved": "https://registry.npm.taobao.org/run-async/download/run-async-2.4.1.tgz",
+      "integrity": "sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=",
       "dev": true
     },
     "run-queue": {
@@ -14376,76 +9981,10 @@
         "aproba": "^1.1.1"
       }
     },
-    "runjs": {
-      "version": "4.4.2",
-      "resolved": "https://registry.npm.taobao.org/runjs/download/runjs-4.4.2.tgz",
-      "integrity": "sha1-Ot9bU60bEZuEazyuEzTpq3/zSSA=",
-      "dev": true,
-      "requires": {
-        "chalk": "2.3.0",
-        "lodash.padend": "4.6.1",
-        "microcli": "1.3.3",
-        "omelette": "0.4.5"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "3.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-3.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-3.2.1.tgz",
-          "integrity": "sha1-QfuyAkPlCxK+DwS43tvwdSDOhB0=",
-          "dev": true,
-          "requires": {
-            "color-convert": "^1.9.0"
-          }
-        },
-        "chalk": {
-          "version": "2.3.0",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-2.3.0.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-2.3.0.tgz",
-          "integrity": "sha1-tepI78nBeT3MybR2fJORTT8tUro=",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^3.1.0",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^4.0.0"
-          }
-        },
-        "has-flag": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/has-flag/download/has-flag-2.0.0.tgz",
-          "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
-          "dev": true
-        },
-        "supports-color": {
-          "version": "4.5.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-4.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-4.5.0.tgz",
-          "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
-          "dev": true,
-          "requires": {
-            "has-flag": "^2.0.0"
-          }
-        }
-      }
-    },
-    "rx-lite": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npm.taobao.org/rx-lite/download/rx-lite-4.0.8.tgz",
-      "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=",
-      "dev": true,
-      "optional": true
-    },
-    "rx-lite-aggregates": {
-      "version": "4.0.8",
-      "resolved": "https://registry.npm.taobao.org/rx-lite-aggregates/download/rx-lite-aggregates-4.0.8.tgz",
-      "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "rx-lite": "*"
-      }
-    },
     "rxjs": {
-      "version": "6.5.4",
-      "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.5.4.tgz",
-      "integrity": "sha1-4Hd/4NGEzseHLfFH8wNXLUFOIRw=",
+      "version": "6.6.3",
+      "resolved": "https://registry.npm.taobao.org/rxjs/download/rxjs-6.6.3.tgz?cache=0&sync_timestamp=1607305563098&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Frxjs%2Fdownload%2Frxjs-6.6.3.tgz",
+      "integrity": "sha1-jKhGNcTaqQDA05Z6buesYCce5VI=",
       "dev": true,
       "requires": {
         "tslib": "^1.9.0"
@@ -14453,8 +9992,9 @@
     },
     "safe-buffer": {
       "version": "5.1.2",
-      "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1562377642757&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz",
-      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0="
+      "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz?cache=0&sync_timestamp=1589129103371&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsafe-buffer%2Fdownload%2Fsafe-buffer-5.1.2.tgz",
+      "integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=",
+      "dev": true
     },
     "safe-regex": {
       "version": "1.1.0",
@@ -14471,164 +10011,31 @@
       "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=",
       "dev": true
     },
-    "sane": {
-      "version": "2.5.2",
-      "resolved": "https://registry.npm.taobao.org/sane/download/sane-2.5.2.tgz",
-      "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=",
-      "dev": true,
-      "requires": {
-        "anymatch": "^2.0.0",
-        "capture-exit": "^1.2.0",
-        "exec-sh": "^0.2.0",
-        "fb-watchman": "^2.0.0",
-        "fsevents": "^1.2.3",
-        "micromatch": "^3.1.4",
-        "minimist": "^1.1.1",
-        "walker": "~1.0.5",
-        "watch": "~0.18.0"
-      },
-      "dependencies": {
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-          "dev": true
-        }
-      }
-    },
-    "sass-graph": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npm.taobao.org/sass-graph/download/sass-graph-2.2.4.tgz",
-      "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=",
+    "sass": {
+      "version": "1.30.0",
+      "resolved": "https://registry.npm.taobao.org/sass/download/sass-1.30.0.tgz",
+      "integrity": "sha1-YLu7r3a6EBF+YcbCTwAWHD1gYQ4=",
       "dev": true,
       "requires": {
-        "glob": "^7.0.0",
-        "lodash": "^4.0.0",
-        "scss-tokenizer": "^0.2.3",
-        "yargs": "^7.0.0"
-      },
-      "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
-          "dev": true
-        },
-        "camelcase": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-3.0.0.tgz",
-          "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
-          "dev": true
-        },
-        "cliui": {
-          "version": "3.2.0",
-          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz",
-          "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
-          "dev": true,
-          "requires": {
-            "string-width": "^1.0.1",
-            "strip-ansi": "^3.0.1",
-            "wrap-ansi": "^2.0.0"
-          }
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
-          "dev": true,
-          "requires": {
-            "number-is-nan": "^1.0.0"
-          }
-        },
-        "os-locale": {
-          "version": "1.4.0",
-          "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-1.4.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-1.4.0.tgz",
-          "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
-          "dev": true,
-          "requires": {
-            "lcid": "^1.0.0"
-          }
-        },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
-          "dev": true,
-          "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "which-module": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-1.0.0.tgz",
-          "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
-          "dev": true
-        },
-        "yargs": {
-          "version": "7.1.0",
-          "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-7.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-7.1.0.tgz",
-          "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^3.0.0",
-            "cliui": "^3.2.0",
-            "decamelize": "^1.1.1",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^1.4.0",
-            "read-pkg-up": "^1.0.1",
-            "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
-            "set-blocking": "^2.0.0",
-            "string-width": "^1.0.2",
-            "which-module": "^1.0.0",
-            "y18n": "^3.2.1",
-            "yargs-parser": "^5.0.0"
-          }
-        },
-        "yargs-parser": {
-          "version": "5.0.0",
-          "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-5.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-5.0.0.tgz",
-          "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=",
-          "dev": true,
-          "requires": {
-            "camelcase": "^3.0.0"
-          }
-        }
+        "chokidar": ">=2.0.0 <4.0.0"
       }
     },
     "sass-loader": {
-      "version": "7.3.1",
-      "resolved": "https://registry.npm.taobao.org/sass-loader/download/sass-loader-7.3.1.tgz",
-      "integrity": "sha1-pb9ooEvOocE/+ELXRxUPerfQ0j8=",
+      "version": "8.0.2",
+      "resolved": "https://registry.npm.taobao.org/sass-loader/download/sass-loader-8.0.2.tgz?cache=0&sync_timestamp=1605100670008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsass-loader%2Fdownload%2Fsass-loader-8.0.2.tgz",
+      "integrity": "sha1-3r7NjDziQ8dkVPLoKQSCFQOACQ0=",
       "dev": true,
       "requires": {
         "clone-deep": "^4.0.1",
-        "loader-utils": "^1.0.1",
-        "neo-async": "^2.5.0",
-        "pify": "^4.0.1",
+        "loader-utils": "^1.2.3",
+        "neo-async": "^2.6.1",
+        "schema-utils": "^2.6.1",
         "semver": "^6.3.0"
       },
       "dependencies": {
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz",
-          "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
-          "dev": true
-        },
         "semver": {
           "version": "6.3.0",
-          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
           "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
           "dev": true
         }
@@ -14640,74 +10047,32 @@
       "integrity": "sha1-KBYjTiN4vdxOU1T6tcqold9xANk=",
       "dev": true
     },
-    "schema-utils": {
-      "version": "0.4.7",
-      "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-0.4.7.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-0.4.7.tgz",
-      "integrity": "sha1-unT1l9K+LqiAExdG7hfQoJPGgYc=",
-      "dev": true,
-      "requires": {
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0"
-      }
-    },
-    "screenfull": {
-      "version": "4.2.0",
-      "resolved": "https://registry.npm.taobao.org/screenfull/download/screenfull-4.2.0.tgz",
-      "integrity": "sha1-1SUqWg9WUEcZq77Z67zZIIEV2gM="
-    },
-    "script-ext-html-webpack-plugin": {
-      "version": "2.1.3",
-      "resolved": "https://registry.npm.taobao.org/script-ext-html-webpack-plugin/download/script-ext-html-webpack-plugin-2.1.3.tgz",
-      "integrity": "sha1-tL9wPN2+PeLm9IPhnf66K17Eq/4=",
-      "dev": true,
-      "requires": {
-        "debug": "^4.1.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        }
+    "schema-utils": {
+      "version": "2.7.1",
+      "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-2.7.1.tgz",
+      "integrity": "sha1-HKTzLRskxZDCA7jnpQvw6kzTlNc=",
+      "dev": true,
+      "requires": {
+        "@types/json-schema": "^7.0.5",
+        "ajv": "^6.12.4",
+        "ajv-keywords": "^3.5.2"
       }
     },
     "script-loader": {
       "version": "0.7.2",
-      "resolved": "https://registry.npm.taobao.org/script-loader/download/script-loader-0.7.2.tgz",
-      "integrity": "sha1-IBbbb4byX1z1baOJFdgzeLsWa6c=",
+      "resolved": "https://r2.cnpmjs.org/script-loader/-/script-loader-0.7.2.tgz",
+      "integrity": "sha512-UMNLEvgOAQuzK8ji8qIscM3GIrRCWN6MmMXGD4SD5l6cSycgGsCo0tX5xRnfQcoghqct0tjHjcykgI1PyBE2aA==",
+      "dev": true,
       "requires": {
         "raw-loader": "~0.5.1"
       }
     },
-    "scss-tokenizer": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npm.taobao.org/scss-tokenizer/download/scss-tokenizer-0.2.3.tgz",
-      "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=",
-      "dev": true,
+    "scroll-into-view-if-needed": {
+      "version": "2.2.31",
+      "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz",
+      "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==",
       "requires": {
-        "js-base64": "^2.1.8",
-        "source-map": "^0.4.2"
-      },
-      "dependencies": {
-        "source-map": {
-          "version": "0.4.4",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.4.4.tgz",
-          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
-          "dev": true,
-          "requires": {
-            "amdefine": ">=0.0.4"
-          }
-        }
+        "compute-scroll-into-view": "^1.0.20"
       }
     },
     "select": {
@@ -14722,26 +10087,20 @@
       "dev": true
     },
     "selfsigned": {
-      "version": "1.10.7",
-      "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.7.tgz?cache=0&sync_timestamp=1569952074772&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fselfsigned%2Fdownload%2Fselfsigned-1.10.7.tgz",
-      "integrity": "sha1-2lgZ/QSdVXTyjoipvMbbxubzkGs=",
+      "version": "1.10.8",
+      "resolved": "https://registry.npm.taobao.org/selfsigned/download/selfsigned-1.10.8.tgz",
+      "integrity": "sha1-DRcgi30Swz+OrIXEGDXyf8PYGjA=",
       "dev": true,
       "requires": {
-        "node-forge": "0.9.0"
+        "node-forge": "^0.10.0"
       }
     },
     "semver": {
       "version": "5.7.1",
-      "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz",
       "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
       "dev": true
     },
-    "semver-compare": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/semver-compare/download/semver-compare-1.0.0.tgz",
-      "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
-      "dev": true
-    },
     "send": {
       "version": "0.17.1",
       "resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz",
@@ -14765,7 +10124,7 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
           "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
@@ -14774,7 +10133,7 @@
           "dependencies": {
             "ms": {
               "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz",
+              "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
               "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
               "dev": true
             }
@@ -14782,34 +10141,27 @@
         },
         "mime": {
           "version": "1.6.0",
-          "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1560034758817&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1608084083331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz",
           "integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=",
           "dev": true
         },
         "ms": {
           "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz",
           "integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=",
           "dev": true
         }
       }
     },
-    "sentence-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/sentence-case/download/sentence-case-2.1.1.tgz",
-      "integrity": "sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ=",
+    "serialize-javascript": {
+      "version": "4.0.0",
+      "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-4.0.0.tgz",
+      "integrity": "sha1-tSXhI4SJpez8Qq+sw/6Z5mb0sao=",
       "dev": true,
       "requires": {
-        "no-case": "^2.2.0",
-        "upper-case-first": "^1.1.2"
+        "randombytes": "^2.1.0"
       }
     },
-    "serialize-javascript": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/serialize-javascript/download/serialize-javascript-2.1.2.tgz?cache=0&sync_timestamp=1581887711256&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fserialize-javascript%2Fdownload%2Fserialize-javascript-2.1.2.tgz",
-      "integrity": "sha1-7OxTsOAxe9yV73arcHS3OEeF+mE=",
-      "dev": true
-    },
     "serve-index": {
       "version": "1.9.1",
       "resolved": "https://registry.npm.taobao.org/serve-index/download/serve-index-1.9.1.tgz",
@@ -14827,7 +10179,7 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
           "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
@@ -14836,7 +10188,7 @@
         },
         "http-errors": {
           "version": "1.6.3",
-          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz?cache=0&sync_timestamp=1561418493658&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fhttp-errors%2Fdownload%2Fhttp-errors-1.6.3.tgz",
+          "resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.6.3.tgz",
           "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
           "dev": true,
           "requires": {
@@ -14852,6 +10204,12 @@
           "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
           "dev": true
         },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
+        },
         "setprototypeof": {
           "version": "1.1.0",
           "resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.0.tgz",
@@ -14875,12 +10233,8 @@
     "set-blocking": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/set-blocking/download/set-blocking-2.0.0.tgz",
-      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
-    },
-    "set-immediate-shim": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/set-immediate-shim/download/set-immediate-shim-1.0.1.tgz",
-      "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E="
+      "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+      "dev": true
     },
     "set-value": {
       "version": "2.0.1",
@@ -14936,10 +10290,16 @@
         "kind-of": "^6.0.2"
       }
     },
+    "shallow-equal": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz",
+      "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA=="
+    },
     "shebang-command": {
       "version": "1.2.0",
       "resolved": "https://registry.npm.taobao.org/shebang-command/download/shebang-command-1.2.0.tgz",
       "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+      "dev": true,
       "requires": {
         "shebang-regex": "^1.0.0"
       }
@@ -14947,7 +10307,8 @@
     "shebang-regex": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/shebang-regex/download/shebang-regex-1.0.0.tgz",
-      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="
+      "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+      "dev": true
     },
     "shell-quote": {
       "version": "1.7.2",
@@ -14955,56 +10316,21 @@
       "integrity": "sha1-Z6fQLHbJ2iT5nSCAj8re0ODgS+I=",
       "dev": true
     },
-    "shellwords": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/shellwords/download/shellwords-0.1.1.tgz",
-      "integrity": "sha1-1rkYHBpI05cyTISHHvvPxz/AZUs=",
-      "dev": true
-    },
-    "showdown": {
-      "version": "1.9.0",
-      "resolved": "https://registry.npm.taobao.org/showdown/download/showdown-1.9.0.tgz",
-      "integrity": "sha1-1J0qC22yG3wulu+FX3s7KijvRvQ=",
+    "side-channel": {
+      "version": "1.0.4",
+      "resolved": "https://r2.cnpmjs.org/side-channel/-/side-channel-1.0.4.tgz",
+      "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
       "requires": {
-        "yargs": "^10.0.3"
+        "call-bind": "^1.0.0",
+        "get-intrinsic": "^1.0.2",
+        "object-inspect": "^1.9.0"
       }
     },
-    "sigmund": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/sigmund/download/sigmund-1.0.1.tgz",
-      "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=",
-      "dev": true
-    },
     "signal-exit": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsignal-exit%2Fdownload%2Fsignal-exit-3.0.2.tgz",
-      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
-    },
-    "simple-git": {
-      "version": "1.131.0",
-      "resolved": "https://registry.npm.taobao.org/simple-git/download/simple-git-1.131.0.tgz",
-      "integrity": "sha1-aNhb9qcG5Bi4qSyudl0q01h4HiE=",
-      "dev": true,
-      "requires": {
-        "debug": "^4.0.1"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        }
-      }
+      "version": "3.0.3",
+      "resolved": "https://registry.npm.taobao.org/signal-exit/download/signal-exit-3.0.3.tgz",
+      "integrity": "sha1-oUEMLt2PB3sItOJTyOrPyvBXRhw=",
+      "dev": true
     },
     "simple-swizzle": {
       "version": "0.2.2",
@@ -15023,12 +10349,6 @@
         }
       }
     },
-    "sisteransi": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/sisteransi/download/sisteransi-0.1.1.tgz",
-      "integrity": "sha1-VDFEfV99FnWqxmfM0LhlpJlMs84=",
-      "dev": true
-    },
     "slash": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/slash/download/slash-2.0.0.tgz",
@@ -15036,22 +10356,22 @@
       "dev": true
     },
     "slice-ansi": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-1.0.0.tgz?cache=0&sync_timestamp=1581872792458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslice-ansi%2Fdownload%2Fslice-ansi-1.0.0.tgz",
-      "integrity": "sha1-BE8aSdiEL/MHqta1Be0Xi9lQE00=",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "is-fullwidth-code-point": "^2.0.0"
-      }
-    },
-    "snake-case": {
       "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/snake-case/download/snake-case-2.1.0.tgz",
-      "integrity": "sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8=",
+      "resolved": "https://registry.npm.taobao.org/slice-ansi/download/slice-ansi-2.1.0.tgz?cache=0&sync_timestamp=1581872792458&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fslice-ansi%2Fdownload%2Fslice-ansi-2.1.0.tgz",
+      "integrity": "sha1-ys12k0YaY3pXiNkqfdT7oGjoFjY=",
       "dev": true,
       "requires": {
-        "no-case": "^2.2.0"
+        "ansi-styles": "^3.2.0",
+        "astral-regex": "^1.0.0",
+        "is-fullwidth-code-point": "^2.0.0"
+      },
+      "dependencies": {
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        }
       }
     },
     "snapdragon": {
@@ -15072,7 +10392,7 @@
       "dependencies": {
         "debug": {
           "version": "2.6.9",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz",
           "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=",
           "dev": true,
           "requires": {
@@ -15096,6 +10416,12 @@
           "requires": {
             "is-extendable": "^0.1.0"
           }
+        },
+        "ms": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz",
+          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+          "dev": true
         }
       }
     },
@@ -15159,12 +10485,6 @@
         "kind-of": "^3.2.0"
       },
       "dependencies": {
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
@@ -15177,18 +10497,19 @@
       }
     },
     "sockjs": {
-      "version": "0.3.19",
-      "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.19.tgz",
-      "integrity": "sha1-2Xa76ACve9IK4IWY1YI5NQiZPA0=",
+      "version": "0.3.20",
+      "resolved": "https://registry.npm.taobao.org/sockjs/download/sockjs-0.3.20.tgz",
+      "integrity": "sha1-smooPsVi74smh7RAM6Tuzqx12FU=",
       "dev": true,
       "requires": {
         "faye-websocket": "^0.10.0",
-        "uuid": "^3.0.1"
+        "uuid": "^3.4.0",
+        "websocket-driver": "0.6.5"
       }
     },
     "sockjs-client": {
       "version": "1.4.0",
-      "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.4.0.tgz?cache=0&sync_timestamp=1566505930428&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsockjs-client%2Fdownload%2Fsockjs-client-1.4.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/sockjs-client/download/sockjs-client-1.4.0.tgz",
       "integrity": "sha1-yfJWjhnI/YFztJl+o0IOC7MGx9U=",
       "dev": true,
       "requires": {
@@ -15201,9 +10522,9 @@
       },
       "dependencies": {
         "debug": {
-          "version": "3.2.6",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.6.tgz",
-          "integrity": "sha1-6D0X3hbYp++3cX7b5fsQE17uYps=",
+          "version": "3.2.7",
+          "resolved": "https://registry.npm.taobao.org/debug/download/debug-3.2.7.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-3.2.7.tgz",
+          "integrity": "sha1-clgLfpFF+zm2Z2+cXl+xALk0F5o=",
           "dev": true,
           "requires": {
             "ms": "^2.1.1"
@@ -15217,19 +10538,17 @@
           "requires": {
             "websocket-driver": ">=0.5.1"
           }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
         }
       }
     },
-    "sortablejs": {
-      "version": "1.8.4",
-      "resolved": "https://registry.npm.taobao.org/sortablejs/download/sortablejs-1.8.4.tgz",
-      "integrity": "sha1-G7/q+pbTmbg/KOJdjknU+/2GfzA="
+    "sort-keys": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz?cache=0&sync_timestamp=1602621924510&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsort-keys%2Fdownload%2Fsort-keys-1.1.2.tgz",
+      "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+      "dev": true,
+      "requires": {
+        "is-plain-obj": "^1.0.0"
+      }
     },
     "source-list-map": {
       "version": "2.0.1",
@@ -15245,7 +10564,7 @@
     },
     "source-map-resolve": {
       "version": "0.5.3",
-      "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829475930&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz",
       "integrity": "sha1-GQhmvs51U+H48mei7oLGBrVQmho=",
       "dev": true,
       "requires": {
@@ -15257,9 +10576,9 @@
       }
     },
     "source-map-support": {
-      "version": "0.5.16",
-      "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.16.tgz?cache=0&sync_timestamp=1572389965235&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-support%2Fdownload%2Fsource-map-support-0.5.16.tgz",
-      "integrity": "sha1-CuBp5/47p1OMZMmFFeNTOerFoEI=",
+      "version": "0.5.19",
+      "resolved": "https://registry.npm.taobao.org/source-map-support/download/source-map-support-0.5.19.tgz",
+      "integrity": "sha1-qYti+G3K9PZzmWSMCFKRq56P7WE=",
       "dev": true,
       "requires": {
         "buffer-from": "^1.0.0",
@@ -15280,10 +10599,16 @@
       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
       "dev": true
     },
+    "sourcemap-codec": {
+      "version": "1.4.8",
+      "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
+      "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=",
+      "dev": true
+    },
     "spdx-correct": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.0.tgz",
-      "integrity": "sha1-+4PlBERSaPFUsHTiGMh8ADzTHfQ=",
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/spdx-correct/download/spdx-correct-3.1.1.tgz",
+      "integrity": "sha1-3s6BrJweZxPl99G28X1Gj6U9iak=",
       "dev": true,
       "requires": {
         "spdx-expression-parse": "^3.0.0",
@@ -15291,15 +10616,15 @@
       }
     },
     "spdx-exceptions": {
-      "version": "2.2.0",
-      "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.2.0.tgz",
-      "integrity": "sha1-LqRQrudPKom/uUUZwH/Nb0EyKXc=",
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/spdx-exceptions/download/spdx-exceptions-2.3.0.tgz?cache=0&sync_timestamp=1587422410312&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-exceptions%2Fdownload%2Fspdx-exceptions-2.3.0.tgz",
+      "integrity": "sha1-PyjOGnegA3JoPq3kpDMYNSeiFj0=",
       "dev": true
     },
     "spdx-expression-parse": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.0.tgz",
-      "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=",
+      "version": "3.0.1",
+      "resolved": "https://registry.npm.taobao.org/spdx-expression-parse/download/spdx-expression-parse-3.0.1.tgz",
+      "integrity": "sha1-z3D1BILu/cmOPOCmgz5KU87rpnk=",
       "dev": true,
       "requires": {
         "spdx-exceptions": "^2.1.0",
@@ -15307,15 +10632,15 @@
       }
     },
     "spdx-license-ids": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.5.tgz",
-      "integrity": "sha1-NpS1gEVnpFjTyARYQqY1hjL2JlQ=",
+      "version": "3.0.7",
+      "resolved": "https://registry.npm.taobao.org/spdx-license-ids/download/spdx-license-ids-3.0.7.tgz?cache=0&sync_timestamp=1606610843748&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdx-license-ids%2Fdownload%2Fspdx-license-ids-3.0.7.tgz",
+      "integrity": "sha1-6cGKQQ5e1+EkQqVJ+9ivp2cDjWU=",
       "dev": true
     },
     "spdy": {
-      "version": "4.0.1",
-      "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.1.tgz",
-      "integrity": "sha1-bxLtHF236k8k67i4m6WMh8CCV/I=",
+      "version": "4.0.2",
+      "resolved": "https://registry.npm.taobao.org/spdy/download/spdy-4.0.2.tgz?cache=0&sync_timestamp=1585970558936&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fspdy%2Fdownload%2Fspdy-4.0.2.tgz",
+      "integrity": "sha1-t09GYgOj7aRSwCSSuR+56EonZ3s=",
       "dev": true,
       "requires": {
         "debug": "^4.1.0",
@@ -15323,23 +10648,6 @@
         "http-deceiver": "^1.2.7",
         "select-hose": "^2.0.0",
         "spdy-transport": "^3.0.0"
-      },
-      "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        }
       }
     },
     "spdy-transport": {
@@ -15356,21 +10664,6 @@
         "wbuf": "^1.7.3"
       },
       "dependencies": {
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        },
         "readable-stream": {
           "version": "3.6.0",
           "resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-3.6.0.tgz?cache=0&sync_timestamp=1581622984924&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-3.6.0.tgz",
@@ -15396,16 +10689,13 @@
     "sprintf-js": {
       "version": "1.0.3",
       "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsprintf-js%2Fdownload%2Fsprintf-js-1.0.3.tgz",
-      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
-    },
-    "squire-rte": {
-      "version": "github:sohee-lee7/Squire#b1e0e1031fa18912d233c204cbe7c7fae4a42621",
-      "from": "github:sohee-lee7/Squire#b1e0e1031fa18912d233c204cbe7c7fae4a42621"
+      "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+      "dev": true
     },
     "ssf": {
-      "version": "0.10.3",
-      "resolved": "https://registry.npm.taobao.org/ssf/download/ssf-0.10.3.tgz",
-      "integrity": "sha1-jq4fwpyQpVLnkhII+BiS1vd6yys=",
+      "version": "0.11.2",
+      "resolved": "https://r2.cnpmjs.org/ssf/-/ssf-0.11.2.tgz",
+      "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==",
       "requires": {
         "frac": "~1.1.2"
       }
@@ -15442,22 +10732,10 @@
       "integrity": "sha1-g26zyDgv4pNv6vVEYxAXzn1Ho88=",
       "dev": true
     },
-    "stack-utils": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/stack-utils/download/stack-utils-1.0.2.tgz",
-      "integrity": "sha1-M+ujiXeIVYvr/C2wWdwVjsNs67g=",
-      "dev": true
-    },
     "stackframe": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.1.1.tgz?cache=0&sync_timestamp=1578260012451&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstackframe%2Fdownload%2Fstackframe-1.1.1.tgz",
-      "integrity": "sha1-/+8KMxixtgw7WFZJiaylZgcp7HE=",
-      "dev": true
-    },
-    "staged-git-files": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/staged-git-files/download/staged-git-files-1.1.2.tgz",
-      "integrity": "sha1-QybTOIbcns+immGTv1EbqQpGRUs=",
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/stackframe/download/stackframe-1.2.0.tgz",
+      "integrity": "sha1-UkKUktY8YuuYmATBFVLj0i53kwM=",
       "dev": true
     },
     "static-extend": {
@@ -15483,28 +10761,13 @@
     },
     "statuses": {
       "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1587327902535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz",
       "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
       "dev": true
     },
-    "stdout-stream": {
-      "version": "1.4.1",
-      "resolved": "https://registry.npm.taobao.org/stdout-stream/download/stdout-stream-1.4.1.tgz",
-      "integrity": "sha1-WsF0zdXNcmEEqgwLK9g4FdjVNd4=",
-      "dev": true,
-      "requires": {
-        "readable-stream": "^2.0.1"
-      }
-    },
-    "stealthy-require": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/stealthy-require/download/stealthy-require-1.1.1.tgz",
-      "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
-      "dev": true
-    },
     "stream-browserify": {
       "version": "2.0.2",
-      "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/stream-browserify/download/stream-browserify-2.0.2.tgz?cache=0&sync_timestamp=1587041545531&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstream-browserify%2Fdownload%2Fstream-browserify-2.0.2.tgz",
       "integrity": "sha1-h1IdOKRKp+6RzhzSpH3wy0ndZgs=",
       "dev": true,
       "requires": {
@@ -15547,137 +10810,80 @@
       "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
       "dev": true
     },
-    "string-argv": {
-      "version": "0.0.2",
-      "resolved": "https://registry.npm.taobao.org/string-argv/download/string-argv-0.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring-argv%2Fdownload%2Fstring-argv-0.0.2.tgz",
-      "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=",
+    "string-hash": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npm.taobao.org/string-hash/download/string-hash-1.1.3.tgz",
+      "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=",
       "dev": true
     },
-    "string-length": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/string-length/download/string-length-2.0.0.tgz",
-      "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=",
-      "dev": true,
-      "requires": {
-        "astral-regex": "^1.0.0",
-        "strip-ansi": "^4.0.0"
-      },
-      "dependencies": {
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "dev": true,
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        }
-      }
-    },
     "string-width": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-2.1.1.tgz",
-      "integrity": "sha1-q5Pyeo3BPSjKyBXEYhQ6bZASrp4=",
-      "requires": {
-        "is-fullwidth-code-point": "^2.0.0",
-        "strip-ansi": "^4.0.0"
-      },
-      "dependencies": {
-        "strip-ansi": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-4.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-4.0.0.tgz",
-          "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
-          "requires": {
-            "ansi-regex": "^3.0.0"
-          }
-        }
-      }
-    },
-    "string.prototype.padend": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/string.prototype.padend/download/string.prototype.padend-3.1.0.tgz?cache=0&sync_timestamp=1576312179430&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.padend%2Fdownload%2Fstring.prototype.padend-3.1.0.tgz",
-      "integrity": "sha1-3Aj1eoAQ3FwVNVAxj2fhOtu3KsM=",
-      "dev": true,
-      "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
-      }
-    },
-    "string.prototype.padstart": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/string.prototype.padstart/download/string.prototype.padstart-3.1.0.tgz?cache=0&sync_timestamp=1576312396721&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.padstart%2Fdownload%2Fstring.prototype.padstart-3.1.0.tgz",
-      "integrity": "sha1-tHwIdUDQcQvlpJN1dRoKYnvU/5A=",
+      "version": "4.2.0",
+      "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-4.2.0.tgz",
+      "integrity": "sha1-lSGCxGzHssMT0VluYjmSvRY7crU=",
       "dev": true,
       "requires": {
-        "define-properties": "^1.1.3",
-        "es-abstract": "^1.17.0-next.1"
+        "emoji-regex": "^8.0.0",
+        "is-fullwidth-code-point": "^3.0.0",
+        "strip-ansi": "^6.0.0"
       }
     },
-    "string.prototype.trimleft": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/string.prototype.trimleft/download/string.prototype.trimleft-2.1.1.tgz",
-      "integrity": "sha1-m9uKxqvW1gKxek7TIYcNL43O/HQ=",
+    "string.prototype.trimend": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/string.prototype.trimend/download/string.prototype.trimend-1.0.3.tgz?cache=0&sync_timestamp=1606007972119&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimend%2Fdownload%2Fstring.prototype.trimend-1.0.3.tgz",
+      "integrity": "sha1-oivVPMpcfPRNfJ1ccyEYhz1s0Ys=",
       "dev": true,
       "requires": {
-        "define-properties": "^1.1.3",
-        "function-bind": "^1.1.1"
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3"
       }
     },
-    "string.prototype.trimright": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/string.prototype.trimright/download/string.prototype.trimright-2.1.1.tgz",
-      "integrity": "sha1-RAMUsVmWyGbOigNBiU1FGGIAxdk=",
+    "string.prototype.trimstart": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/string.prototype.trimstart/download/string.prototype.trimstart-1.0.3.tgz?cache=0&sync_timestamp=1606007972027&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstring.prototype.trimstart%2Fdownload%2Fstring.prototype.trimstart-1.0.3.tgz",
+      "integrity": "sha1-m0y1kOEjuzZWRAHVmCQpjeUP1ao=",
       "dev": true,
       "requires": {
-        "define-properties": "^1.1.3",
-        "function-bind": "^1.1.1"
+        "call-bind": "^1.0.0",
+        "define-properties": "^1.1.3"
       }
     },
     "string_decoder": {
       "version": "1.1.1",
       "resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz",
       "integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=",
+      "dev": true,
       "requires": {
         "safe-buffer": "~5.1.0"
       }
     },
-    "stringify-object": {
-      "version": "3.3.0",
-      "resolved": "https://registry.npm.taobao.org/stringify-object/download/stringify-object-3.3.0.tgz",
-      "integrity": "sha1-cDBlrvyhkwDTzoivT1s5VtdVZik=",
+    "strip-ansi": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-6.0.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-6.0.0.tgz",
+      "integrity": "sha1-CxVx3XZpzNTz4G4U7x7tJiJa5TI=",
       "dev": true,
       "requires": {
-        "get-own-enumerable-property-symbols": "^3.0.0",
-        "is-obj": "^1.0.1",
-        "is-regexp": "^1.0.0"
+        "ansi-regex": "^5.0.0"
       },
       "dependencies": {
-        "is-obj": {
-          "version": "1.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-obj/download/is-obj-1.0.1.tgz",
-          "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+        "ansi-regex": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-5.0.0.tgz",
+          "integrity": "sha1-OIU59VF5vzkznIGvMKZU1p+Hy3U=",
           "dev": true
         }
       }
     },
-    "strip-ansi": {
-      "version": "0.1.1",
-      "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-0.1.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-0.1.1.tgz",
-      "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE="
-    },
-    "strip-bom": {
-      "version": "2.0.0",
-      "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-2.0.0.tgz",
-      "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
-      "dev": true,
-      "requires": {
-        "is-utf8": "^0.2.0"
-      }
-    },
     "strip-eof": {
       "version": "1.0.0",
       "resolved": "https://registry.npm.taobao.org/strip-eof/download/strip-eof-1.0.0.tgz",
-      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8="
+      "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+      "dev": true
+    },
+    "strip-final-newline": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npm.taobao.org/strip-final-newline/download/strip-final-newline-2.0.0.tgz",
+      "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=",
+      "dev": true
     },
     "strip-indent": {
       "version": "2.0.0",
@@ -15686,9 +10892,9 @@
       "dev": true
     },
     "strip-json-comments": {
-      "version": "2.0.1",
-      "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-2.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-json-comments%2Fdownload%2Fstrip-json-comments-2.0.1.tgz",
-      "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/strip-json-comments/download/strip-json-comments-3.1.1.tgz",
+      "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=",
       "dev": true
     },
     "stylehacks": {
@@ -15704,7 +10910,7 @@
       "dependencies": {
         "postcss-selector-parser": {
           "version": "3.1.2",
-          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss-selector-parser/download/postcss-selector-parser-3.1.2.tgz?cache=0&sync_timestamp=1601045448419&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss-selector-parser%2Fdownload%2Fpostcss-selector-parser-3.1.2.tgz",
           "integrity": "sha1-sxD1xMD9r3b5SQK7qjDbaqhPUnA=",
           "dev": true,
           "requires": {
@@ -15715,18 +10921,24 @@
         }
       }
     },
+    "stylis": {
+      "version": "4.3.2",
+      "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.2.tgz",
+      "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg=="
+    },
     "supports-color": {
       "version": "5.5.0",
-      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-5.5.0.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-5.5.0.tgz",
       "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=",
+      "dev": true,
       "requires": {
         "has-flag": "^3.0.0"
       }
     },
     "svg-baker": {
-      "version": "1.5.0",
-      "resolved": "https://registry.npm.taobao.org/svg-baker/download/svg-baker-1.5.0.tgz",
-      "integrity": "sha1-6U51Uj2TA+mis0SJhwgNlmy5CvQ=",
+      "version": "1.7.0",
+      "resolved": "https://registry.npm.taobao.org/svg-baker/download/svg-baker-1.7.0.tgz?cache=0&sync_timestamp=1586349310975&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvg-baker%2Fdownload%2Fsvg-baker-1.7.0.tgz",
+      "integrity": "sha1-g2f3jYdVUMUv5HVvcwPVxdfC6ac=",
       "dev": true,
       "requires": {
         "bluebird": "^3.5.0",
@@ -15752,13 +10964,13 @@
         },
         "ansi-styles": {
           "version": "2.2.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz",
+          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-2.2.1.tgz?cache=0&sync_timestamp=1606792371412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-2.2.1.tgz",
           "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
           "dev": true
         },
         "chalk": {
           "version": "1.1.3",
-          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1573282949696&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
+          "resolved": "https://registry.npm.taobao.org/chalk/download/chalk-1.1.3.tgz?cache=0&sync_timestamp=1591687076871&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchalk%2Fdownload%2Fchalk-1.1.3.tgz",
           "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
           "dev": true,
           "requires": {
@@ -15771,7 +10983,7 @@
           "dependencies": {
             "supports-color": {
               "version": "2.0.0",
-              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
+              "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-2.0.0.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-2.0.0.tgz",
               "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
               "dev": true
             }
@@ -15889,7 +11101,7 @@
         },
         "postcss": {
           "version": "5.2.18",
-          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz?cache=0&sync_timestamp=1581994853208&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-5.2.18.tgz",
+          "resolved": "https://registry.npm.taobao.org/postcss/download/postcss-5.2.18.tgz?cache=0&sync_timestamp=1607512891622&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-5.2.18.tgz",
           "integrity": "sha1-ut+hSX1GJE9jkPWLMZgw2RB4U8U=",
           "dev": true,
           "requires": {
@@ -15910,7 +11122,7 @@
         },
         "supports-color": {
           "version": "3.2.3",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-3.2.3.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-3.2.3.tgz",
           "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
           "dev": true,
           "requires": {
@@ -15920,14 +11132,14 @@
       }
     },
     "svg-baker-runtime": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npm.taobao.org/svg-baker-runtime/download/svg-baker-runtime-1.4.3.tgz",
-      "integrity": "sha1-jsA12vOvSr5+eIEgho67+Eo0Ro8=",
+      "version": "1.4.7",
+      "resolved": "https://registry.npm.taobao.org/svg-baker-runtime/download/svg-baker-runtime-1.4.7.tgz",
+      "integrity": "sha1-9HIGN/W2IC7vY3jYHx/q0IFfik4=",
       "dev": true,
       "requires": {
         "deepmerge": "1.3.2",
         "mitt": "1.1.2",
-        "svg-baker": "^1.5.0"
+        "svg-baker": "^1.7.0"
       },
       "dependencies": {
         "deepmerge": {
@@ -15935,12 +11147,18 @@
           "resolved": "https://registry.npm.taobao.org/deepmerge/download/deepmerge-1.3.2.tgz",
           "integrity": "sha1-FmNpFinU2/42T6EqKk8KqGqjoFA=",
           "dev": true
+        },
+        "mitt": {
+          "version": "1.1.2",
+          "resolved": "https://registry.npm.taobao.org/mitt/download/mitt-1.1.2.tgz",
+          "integrity": "sha1-OA5hSA1qYVtmDwertg1R4KTkvtY=",
+          "dev": true
         }
       }
     },
     "svg-sprite-loader": {
       "version": "4.1.3",
-      "resolved": "https://registry.npm.taobao.org/svg-sprite-loader/download/svg-sprite-loader-4.1.3.tgz?cache=0&sync_timestamp=1580480714186&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvg-sprite-loader%2Fdownload%2Fsvg-sprite-loader-4.1.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/svg-sprite-loader/download/svg-sprite-loader-4.1.3.tgz?cache=0&sync_timestamp=1608021801840&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvg-sprite-loader%2Fdownload%2Fsvg-sprite-loader-4.1.3.tgz",
       "integrity": "sha1-0lz6daXE5Jn3tSgigdtus72hP+A=",
       "dev": true,
       "requires": {
@@ -15970,19 +11188,18 @@
       "dev": true
     },
     "svgo": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-1.2.0.tgz?cache=0&sync_timestamp=1572433264480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvgo%2Fdownload%2Fsvgo-1.2.0.tgz",
-      "integrity": "sha1-MFqPwPT5cQgoxlA5u5PVeTIl/8M=",
+      "version": "1.3.2",
+      "resolved": "https://registry.npm.taobao.org/svgo/download/svgo-1.3.2.tgz?cache=0&sync_timestamp=1572433264480&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsvgo%2Fdownload%2Fsvgo-1.3.2.tgz",
+      "integrity": "sha1-ttxRHAYzRsnkFbgeQ0ARRbltQWc=",
       "dev": true,
       "requires": {
         "chalk": "^2.4.1",
         "coa": "^2.0.2",
         "css-select": "^2.0.0",
         "css-select-base-adapter": "^0.1.1",
-        "css-tree": "1.0.0-alpha.28",
-        "css-url-regex": "^1.1.0",
-        "csso": "^3.5.1",
-        "js-yaml": "^3.12.0",
+        "css-tree": "1.0.0-alpha.37",
+        "csso": "^4.0.2",
+        "js-yaml": "^3.13.1",
         "mkdirp": "~0.5.1",
         "object.values": "^1.1.0",
         "sax": "~1.2.4",
@@ -15991,106 +11208,62 @@
         "util.promisify": "~1.0.0"
       }
     },
-    "swap-case": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/swap-case/download/swap-case-1.1.2.tgz?cache=0&sync_timestamp=1575601560703&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fswap-case%2Fdownload%2Fswap-case-1.1.2.tgz",
-      "integrity": "sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM=",
-      "dev": true,
-      "requires": {
-        "lower-case": "^1.1.1",
-        "upper-case": "^1.1.1"
-      }
-    },
-    "symbol-observable": {
-      "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/symbol-observable/download/symbol-observable-1.2.0.tgz",
-      "integrity": "sha1-wiaIrtTqs83C3+rLtWFmBWCgCAQ=",
-      "dev": true
-    },
-    "symbol-tree": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.4.tgz",
-      "integrity": "sha1-QwY30ki6d+B4iDlR+5qg7tfGP6I=",
-      "dev": true
-    },
-    "synchronous-promise": {
-      "version": "2.0.10",
-      "resolved": "https://registry.npm.taobao.org/synchronous-promise/download/synchronous-promise-2.0.10.tgz",
-      "integrity": "sha1-5kxv06/SX0I5YzUwQ/Smjr05f9g=",
-      "dev": true
-    },
     "table": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/table/download/table-4.0.2.tgz",
-      "integrity": "sha1-ozRHN1OR52atNNNIbm4q7chNLjY=",
+      "version": "5.4.6",
+      "resolved": "https://registry.npm.taobao.org/table/download/table-5.4.6.tgz?cache=0&sync_timestamp=1605825584818&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftable%2Fdownload%2Ftable-5.4.6.tgz",
+      "integrity": "sha1-EpLRlQDOP4YFOwXw6Ofko7shB54=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "ajv": "^5.2.3",
-        "ajv-keywords": "^2.1.0",
-        "chalk": "^2.1.0",
-        "lodash": "^4.17.4",
-        "slice-ansi": "1.0.0",
-        "string-width": "^2.1.1"
+        "ajv": "^6.10.2",
+        "lodash": "^4.17.14",
+        "slice-ansi": "^2.1.0",
+        "string-width": "^3.0.0"
       },
       "dependencies": {
-        "ajv": {
-          "version": "5.5.2",
-          "resolved": "https://registry.npm.taobao.org/ajv/download/ajv-5.5.2.tgz?cache=0&sync_timestamp=1582379612319&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv%2Fdownload%2Fajv-5.5.2.tgz",
-          "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "co": "^4.6.0",
-            "fast-deep-equal": "^1.0.0",
-            "fast-json-stable-stringify": "^2.0.0",
-            "json-schema-traverse": "^0.3.0"
-          }
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
         },
-        "ajv-keywords": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-2.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-2.1.1.tgz",
-          "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
-          "dev": true,
-          "optional": true
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
         },
-        "fast-deep-equal": {
-          "version": "1.1.0",
-          "resolved": "https://registry.npm.taobao.org/fast-deep-equal/download/fast-deep-equal-1.1.0.tgz?cache=0&sync_timestamp=1575383928809&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffast-deep-equal%2Fdownload%2Ffast-deep-equal-1.1.0.tgz",
-          "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
           "dev": true,
-          "optional": true
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          }
         },
-        "json-schema-traverse": {
-          "version": "0.3.1",
-          "resolved": "https://registry.npm.taobao.org/json-schema-traverse/download/json-schema-traverse-0.3.1.tgz",
-          "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+        "strip-ansi": {
+          "version": "5.2.0",
+          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+          "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
           "dev": true,
-          "optional": true
+          "requires": {
+            "ansi-regex": "^4.1.0"
+          }
         }
       }
     },
     "tapable": {
       "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/tapable/download/tapable-1.1.3.tgz?cache=0&sync_timestamp=1607088855476&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftapable%2Fdownload%2Ftapable-1.1.3.tgz",
       "integrity": "sha1-ofzMBrWNth/XpF2i2kT186Pme6I=",
       "dev": true
     },
-    "tar": {
-      "version": "2.2.2",
-      "resolved": "https://registry.npm.taobao.org/tar/download/tar-2.2.2.tgz",
-      "integrity": "sha1-DKiEhWLHKZuLRG/2pNYM27I+3EA=",
-      "dev": true,
-      "requires": {
-        "block-stream": "*",
-        "fstream": "^1.0.12",
-        "inherits": "2"
-      }
-    },
     "terser": {
-      "version": "4.6.6",
-      "resolved": "https://registry.npm.taobao.org/terser/download/terser-4.6.6.tgz?cache=0&sync_timestamp=1583252322857&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.6.6.tgz",
-      "integrity": "sha1-2iOC5sr734YgXoL7mhFb1mTVSGM=",
+      "version": "4.8.0",
+      "resolved": "https://registry.npm.taobao.org/terser/download/terser-4.8.0.tgz?cache=0&sync_timestamp=1606494026148&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser%2Fdownload%2Fterser-4.8.0.tgz",
+      "integrity": "sha1-YwVjQ9fHC7KfOvZlhlpG/gOg3xc=",
       "dev": true,
       "requires": {
         "commander": "^2.20.0",
@@ -16098,12 +11271,6 @@
         "source-map-support": "~0.5.12"
       },
       "dependencies": {
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz",
-          "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
-          "dev": true
-        },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
@@ -16113,16 +11280,16 @@
       }
     },
     "terser-webpack-plugin": {
-      "version": "1.4.3",
-      "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.3.tgz",
-      "integrity": "sha1-Xsry29xfuZdF/QZ5H0b8ndscmnw=",
+      "version": "1.4.5",
+      "resolved": "https://registry.npm.taobao.org/terser-webpack-plugin/download/terser-webpack-plugin-1.4.5.tgz?cache=0&sync_timestamp=1603881839307&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fterser-webpack-plugin%2Fdownload%2Fterser-webpack-plugin-1.4.5.tgz",
+      "integrity": "sha1-oheu+uozDnNP+sthIOwfoxLWBAs=",
       "dev": true,
       "requires": {
         "cacache": "^12.0.2",
         "find-cache-dir": "^2.1.0",
         "is-wsl": "^1.1.0",
         "schema-utils": "^1.0.0",
-        "serialize-javascript": "^2.1.2",
+        "serialize-javascript": "^4.0.0",
         "source-map": "^0.6.1",
         "terser": "^4.1.2",
         "webpack-sources": "^1.4.0",
@@ -16142,7 +11309,7 @@
         },
         "find-up": {
           "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
           "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
           "dev": true,
           "requires": {
@@ -16161,7 +11328,7 @@
         },
         "make-dir": {
           "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz?cache=0&sync_timestamp=1581538411621&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-2.1.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-2.1.0.tgz",
           "integrity": "sha1-XwMQ4YuL6JjMBwCSlaMK5B6R5vU=",
           "dev": true,
           "requires": {
@@ -16169,34 +11336,19 @@
             "semver": "^5.6.0"
           }
         },
-        "p-limit": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.2.tgz?cache=0&sync_timestamp=1577904218145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.2.2.tgz",
-          "integrity": "sha1-YSebZ3IfUoeqHBOpp/u8SMkpGx4=",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
         "p-locate": {
           "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
           "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
           "dev": true,
           "requires": {
             "p-limit": "^2.0.0"
           }
         },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
-          "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
-          "dev": true
-        },
-        "pify": {
-          "version": "4.0.1",
-          "resolved": "https://registry.npm.taobao.org/pify/download/pify-4.0.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpify%2Fdownload%2Fpify-4.0.1.tgz",
-          "integrity": "sha1-SyzSXFDVmHNcUCkiJP2MbfQeMjE=",
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
           "dev": true
         },
         "pkg-dir": {
@@ -16210,7 +11362,7 @@
         },
         "schema-utils": {
           "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz",
           "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
           "dev": true,
           "requires": {
@@ -16227,134 +11379,33 @@
         }
       }
     },
-    "test-exclude": {
-      "version": "4.2.3",
-      "resolved": "https://registry.npm.taobao.org/test-exclude/download/test-exclude-4.2.3.tgz",
-      "integrity": "sha1-qaXmRHTkOYM5JFoKdprXwvSpfCA=",
-      "dev": true,
-      "requires": {
-        "arrify": "^1.0.1",
-        "micromatch": "^2.3.11",
-        "object-assign": "^4.1.0",
-        "read-pkg-up": "^1.0.1",
-        "require-main-filename": "^1.0.1"
-      },
-      "dependencies": {
-        "arr-diff": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/arr-diff/download/arr-diff-2.0.0.tgz",
-          "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=",
-          "dev": true,
-          "requires": {
-            "arr-flatten": "^1.0.1"
-          }
-        },
-        "array-unique": {
-          "version": "0.2.1",
-          "resolved": "https://registry.npm.taobao.org/array-unique/download/array-unique-0.2.1.tgz",
-          "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=",
-          "dev": true
-        },
-        "braces": {
-          "version": "1.8.5",
-          "resolved": "https://registry.npm.taobao.org/braces/download/braces-1.8.5.tgz",
-          "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
-          "dev": true,
-          "requires": {
-            "expand-range": "^1.8.1",
-            "preserve": "^0.2.0",
-            "repeat-element": "^1.1.2"
-          }
-        },
-        "expand-brackets": {
-          "version": "0.1.5",
-          "resolved": "https://registry.npm.taobao.org/expand-brackets/download/expand-brackets-0.1.5.tgz",
-          "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=",
-          "dev": true,
-          "requires": {
-            "is-posix-bracket": "^0.1.0"
-          }
-        },
-        "extglob": {
-          "version": "0.3.2",
-          "resolved": "https://registry.npm.taobao.org/extglob/download/extglob-0.3.2.tgz",
-          "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
-        "is-extglob": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-extglob/download/is-extglob-1.0.0.tgz",
-          "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=",
-          "dev": true
-        },
-        "is-glob": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-2.0.1.tgz",
-          "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=",
-          "dev": true,
-          "requires": {
-            "is-extglob": "^1.0.0"
-          }
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
-          "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
-          "dev": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        },
-        "micromatch": {
-          "version": "2.3.11",
-          "resolved": "https://registry.npm.taobao.org/micromatch/download/micromatch-2.3.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmicromatch%2Fdownload%2Fmicromatch-2.3.11.tgz",
-          "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
-          "dev": true,
-          "requires": {
-            "arr-diff": "^2.0.0",
-            "array-unique": "^0.2.1",
-            "braces": "^1.8.2",
-            "expand-brackets": "^0.1.4",
-            "extglob": "^0.3.1",
-            "filename-regex": "^2.0.0",
-            "is-extglob": "^1.0.0",
-            "is-glob": "^2.0.1",
-            "kind-of": "^3.0.2",
-            "normalize-path": "^2.0.1",
-            "object.omit": "^2.0.0",
-            "parse-glob": "^3.0.4",
-            "regex-cache": "^0.4.2"
-          }
-        },
-        "normalize-path": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
-          "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
-          "dev": true,
-          "requires": {
-            "remove-trailing-separator": "^1.0.1"
-          }
-        }
-      }
-    },
     "text-table": {
       "version": "0.2.0",
       "resolved": "https://registry.npm.taobao.org/text-table/download/text-table-0.2.0.tgz",
       "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
       "dev": true
     },
+    "thenify": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npm.taobao.org/thenify/download/thenify-3.3.1.tgz",
+      "integrity": "sha1-iTLmhqQGYDigFt2eLKRq3Zg4qV8=",
+      "dev": true,
+      "requires": {
+        "any-promise": "^1.0.0"
+      }
+    },
+    "thenify-all": {
+      "version": "1.6.0",
+      "resolved": "https://registry.npm.taobao.org/thenify-all/download/thenify-all-1.6.0.tgz",
+      "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=",
+      "dev": true,
+      "requires": {
+        "thenify": ">= 3.1.0 < 4"
+      }
+    },
     "thread-loader": {
       "version": "2.1.3",
-      "resolved": "https://registry.npm.taobao.org/thread-loader/download/thread-loader-2.1.3.tgz?cache=0&sync_timestamp=1565261083321&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthread-loader%2Fdownload%2Fthread-loader-2.1.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/thread-loader/download/thread-loader-2.1.3.tgz?cache=0&sync_timestamp=1603809423332&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fthread-loader%2Fdownload%2Fthread-loader-2.1.3.tgz",
       "integrity": "sha1-y9LBOfwrLebp0o9iKGq3cMGsvdo=",
       "dev": true,
       "requires": {
@@ -16363,16 +11414,10 @@
         "neo-async": "^2.6.0"
       }
     },
-    "throat": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npm.taobao.org/throat/download/throat-4.1.0.tgz",
-      "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
-      "dev": true
-    },
     "throttle-debounce": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/throttle-debounce/download/throttle-debounce-1.1.0.tgz",
-      "integrity": "sha1-UYU9o3vmihVctugns1FKPEIuic0="
+      "version": "5.0.2",
+      "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz",
+      "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A=="
     },
     "through": {
       "version": "2.3.8",
@@ -16397,9 +11442,9 @@
       "dev": true
     },
     "timers-browserify": {
-      "version": "2.0.11",
-      "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.11.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftimers-browserify%2Fdownload%2Ftimers-browserify-2.0.11.tgz",
-      "integrity": "sha1-gAsfPu4nLlvFPuRloE0OgEwxIR8=",
+      "version": "2.0.12",
+      "resolved": "https://registry.npm.taobao.org/timers-browserify/download/timers-browserify-2.0.12.tgz?cache=0&sync_timestamp=1603793688024&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftimers-browserify%2Fdownload%2Ftimers-browserify-2.0.12.tgz",
+      "integrity": "sha1-RKRcEfv0B/NPl7zNFXfGUjYbAO4=",
       "dev": true,
       "requires": {
         "setimmediate": "^1.0.4"
@@ -16416,31 +11461,15 @@
       "resolved": "https://registry.npm.taobao.org/tiny-emitter/download/tiny-emitter-2.1.0.tgz",
       "integrity": "sha1-HRpW7fxRxD6GPLtTgqcjMONVVCM="
     },
-    "title-case": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/title-case/download/title-case-2.1.1.tgz?cache=0&sync_timestamp=1575601563515&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftitle-case%2Fdownload%2Ftitle-case-2.1.1.tgz",
-      "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=",
-      "dev": true,
-      "requires": {
-        "no-case": "^2.2.0",
-        "upper-case": "^1.0.3"
-      }
-    },
     "tmp": {
       "version": "0.0.33",
-      "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz",
+      "resolved": "https://registry.npm.taobao.org/tmp/download/tmp-0.0.33.tgz?cache=0&sync_timestamp=1588178571895&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftmp%2Fdownload%2Ftmp-0.0.33.tgz",
       "integrity": "sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=",
       "dev": true,
       "requires": {
         "os-tmpdir": "~1.0.2"
       }
     },
-    "tmpl": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/tmpl/download/tmpl-1.0.4.tgz",
-      "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=",
-      "dev": true
-    },
     "to-arraybuffer": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/to-arraybuffer/download/to-arraybuffer-1.0.1.tgz",
@@ -16450,13 +11479,7 @@
     "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=",
-      "dev": true
-    },
-    "to-mark": {
-      "version": "1.1.9",
-      "resolved": "https://registry.npm.taobao.org/to-mark/download/to-mark-1.1.9.tgz",
-      "integrity": "sha1-LPvI52XEMN3LRqIYvgebTKJ3PVs="
+      "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
     },
     "to-object-path": {
       "version": "0.3.0",
@@ -16467,12 +11490,6 @@
         "kind-of": "^3.0.2"
       },
       "dependencies": {
-        "is-buffer": {
-          "version": "1.1.6",
-          "resolved": "https://registry.npm.taobao.org/is-buffer/download/is-buffer-1.1.6.tgz",
-          "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=",
-          "dev": true
-        },
         "kind-of": {
           "version": "3.2.2",
           "resolved": "https://registry.npm.taobao.org/kind-of/download/kind-of-3.2.2.tgz",
@@ -16528,72 +11545,28 @@
         "punycode": "^2.1.1"
       }
     },
-    "tr46": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/tr46/download/tr46-1.0.1.tgz",
-      "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",
-      "dev": true,
-      "requires": {
-        "punycode": "^2.1.0"
-      }
-    },
     "traverse": {
       "version": "0.6.6",
       "resolved": "https://registry.npm.taobao.org/traverse/download/traverse-0.6.6.tgz",
       "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=",
       "dev": true
     },
-    "trim-newlines": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npm.taobao.org/trim-newlines/download/trim-newlines-1.0.0.tgz",
-      "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
-      "dev": true
-    },
-    "trim-right": {
-      "version": "1.0.1",
-      "resolved": "https://registry.npm.taobao.org/trim-right/download/trim-right-1.0.1.tgz",
-      "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
-      "dev": true
-    },
-    "true-case-path": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npm.taobao.org/true-case-path/download/true-case-path-1.0.3.tgz",
-      "integrity": "sha1-+BO1qMhrQNpZYGcisUTjIleZ9H0=",
-      "dev": true,
-      "requires": {
-        "glob": "^7.1.2"
-      }
-    },
     "tryer": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz",
       "integrity": "sha1-8shUBoALmw90yfdGW4HqrSQSUvg=",
       "dev": true
     },
-    "tsconfig": {
-      "version": "7.0.0",
-      "resolved": "https://registry.npm.taobao.org/tsconfig/download/tsconfig-7.0.0.tgz",
-      "integrity": "sha1-hFOIdaTcIW5cSlQys6Tew9VOkbc=",
-      "dev": true,
-      "requires": {
-        "@types/strip-bom": "^3.0.0",
-        "@types/strip-json-comments": "0.0.30",
-        "strip-bom": "^3.0.0",
-        "strip-json-comments": "^2.0.0"
-      },
-      "dependencies": {
-        "strip-bom": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz",
-          "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
-          "dev": true
-        }
-      }
+    "ts-pnp": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz",
+      "integrity": "sha1-pQCtCEsHmPHDBxrzkeZZEshrypI=",
+      "dev": true
     },
     "tslib": {
-      "version": "1.11.1",
-      "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.11.1.tgz",
-      "integrity": "sha1-6xXRKIJ/vuKEFUnhcfRe0zisfjU=",
+      "version": "1.14.1",
+      "resolved": "https://registry.npm.taobao.org/tslib/download/tslib-1.14.1.tgz",
+      "integrity": "sha1-zy04vcNKE0vK8QkcQfZhni9nLQA=",
       "dev": true
     },
     "tty-browserify": {
@@ -16602,69 +11575,6 @@
       "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
       "dev": true
     },
-    "tui-chart": {
-      "version": "3.10.1",
-      "resolved": "https://registry.npm.taobao.org/tui-chart/download/tui-chart-3.10.1.tgz?cache=0&sync_timestamp=1583286496287&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftui-chart%2Fdownload%2Ftui-chart-3.10.1.tgz",
-      "integrity": "sha1-jwq/rPhmLtTRsdNYRB6LcC7ndIA=",
-      "requires": {
-        "core-js": "^3.6.4",
-        "raphael": "git+https://github.com/nhn/raphael.git#2.2.0-c",
-        "tui-code-snippet": "^2.3.1"
-      },
-      "dependencies": {
-        "core-js": {
-          "version": "3.6.4",
-          "resolved": "https://registry.npm.taobao.org/core-js/download/core-js-3.6.4.tgz",
-          "integrity": "sha1-RAqDU2tFgRS5yyrBWAujd9xHBkc="
-        },
-        "tui-code-snippet": {
-          "version": "2.3.1",
-          "resolved": "https://registry.npm.taobao.org/tui-code-snippet/download/tui-code-snippet-2.3.1.tgz",
-          "integrity": "sha1-0R2YOMkKLhTeyxDeullXWHMcZt4="
-        }
-      }
-    },
-    "tui-code-snippet": {
-      "version": "1.5.2",
-      "resolved": "https://registry.npm.taobao.org/tui-code-snippet/download/tui-code-snippet-1.5.2.tgz",
-      "integrity": "sha1-9Ljw8ayZawtbYh93yVB68ZoN4jg="
-    },
-    "tui-color-picker": {
-      "version": "2.2.6",
-      "resolved": "https://registry.npm.taobao.org/tui-color-picker/download/tui-color-picker-2.2.6.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftui-color-picker%2Fdownload%2Ftui-color-picker-2.2.6.tgz",
-      "integrity": "sha1-urVORzgOVQuzrIrpdAIbPMJRiqk=",
-      "requires": {
-        "tui-code-snippet": "^2.2.0"
-      },
-      "dependencies": {
-        "tui-code-snippet": {
-          "version": "2.3.1",
-          "resolved": "https://registry.npm.taobao.org/tui-code-snippet/download/tui-code-snippet-2.3.1.tgz",
-          "integrity": "sha1-0R2YOMkKLhTeyxDeullXWHMcZt4="
-        }
-      }
-    },
-    "tui-editor": {
-      "version": "1.3.3",
-      "resolved": "https://registry.npm.taobao.org/tui-editor/download/tui-editor-1.3.3.tgz",
-      "integrity": "sha1-l3KVk7mg97dCyVTjzhIww41m/y8=",
-      "requires": {
-        "@types/codemirror": "0.0.71",
-        "@types/jquery": "^3.3.29",
-        "@types/markdown-it": "0.0.7",
-        "codemirror": "^5.33.0",
-        "highlight.js": "^9.12.0",
-        "jquery": "^3.3.1",
-        "markdown-it": "^8.4.0",
-        "plantuml-encoder": "^1.2.5",
-        "resize-observer-polyfill": "^1.5.0",
-        "squire-rte": "github:sohee-lee7/Squire#b1e0e1031fa18912d233c204cbe7c7fae4a42621",
-        "to-mark": "^1.1.4",
-        "tui-chart": "^3.0.1",
-        "tui-code-snippet": "^1.5.0",
-        "tui-color-picker": "^2.2.1"
-      }
-    },
     "tunnel-agent": {
       "version": "0.6.0",
       "resolved": "https://registry.npm.taobao.org/tunnel-agent/download/tunnel-agent-0.6.0.tgz",
@@ -16689,6 +11599,12 @@
         "prelude-ls": "~1.1.2"
       }
     },
+    "type-fest": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npm.taobao.org/type-fest/download/type-fest-0.6.0.tgz?cache=0&sync_timestamp=1606468796224&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftype-fest%2Fdownload%2Ftype-fest-0.6.0.tgz",
+      "integrity": "sha1-jSojcNPfiG61yQraHFv2GIrPg4s=",
+      "dev": true
+    },
     "type-is": {
       "version": "1.6.18",
       "resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz",
@@ -16705,49 +11621,30 @@
       "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
       "dev": true
     },
-    "uc.micro": {
-      "version": "1.0.6",
-      "resolved": "https://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.6.tgz",
-      "integrity": "sha1-nEEagCpAmpH8bPdAgbq6NLJEmaw="
-    },
     "uglify-js": {
-      "version": "3.8.0",
-      "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.8.0.tgz?cache=0&sync_timestamp=1582036112063&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.8.0.tgz",
-      "integrity": "sha1-81Qa6XsvBI1+fjqk85/YofXXqAU=",
+      "version": "3.4.10",
+      "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz",
+      "integrity": "sha1-mtlWPY6zrN+404WX0q8dgV9qdV8=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "commander": "~2.20.3",
+        "commander": "~2.19.0",
         "source-map": "~0.6.1"
       },
       "dependencies": {
         "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz",
-          "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
-          "dev": true,
-          "optional": true
+          "version": "2.19.0",
+          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.19.0.tgz?cache=0&sync_timestamp=1607933281807&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcommander%2Fdownload%2Fcommander-2.19.0.tgz",
+          "integrity": "sha1-9hmKqE5bg8RgVLlN3tv+1e6f8So=",
+          "dev": true
         },
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
           "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
-          "dev": true,
-          "optional": true
+          "dev": true
         }
       }
     },
-    "unc-path-regex": {
-      "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/unc-path-regex/download/unc-path-regex-0.1.2.tgz",
-      "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
-      "dev": true
-    },
-    "underscore": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/underscore/download/underscore-1.6.0.tgz",
-      "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag="
-    },
     "unicode-canonical-property-names-ecmascript": {
       "version": "1.0.4",
       "resolved": "https://registry.npm.taobao.org/unicode-canonical-property-names-ecmascript/download/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
@@ -16765,15 +11662,15 @@
       }
     },
     "unicode-match-property-value-ecmascript": {
-      "version": "1.1.0",
-      "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.1.0.tgz",
-      "integrity": "sha1-W0tCbgjROoA2Xg1lesemwexGonc=",
+      "version": "1.2.0",
+      "resolved": "https://registry.npm.taobao.org/unicode-match-property-value-ecmascript/download/unicode-match-property-value-ecmascript-1.2.0.tgz?cache=0&sync_timestamp=1583948924460&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-match-property-value-ecmascript%2Fdownload%2Funicode-match-property-value-ecmascript-1.2.0.tgz",
+      "integrity": "sha1-DZH2AO7rMJaqlisdb8iIduZOpTE=",
       "dev": true
     },
     "unicode-property-aliases-ecmascript": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.0.5.tgz",
-      "integrity": "sha1-qcxsx85joKMCP8meNBuUQx1AWlc=",
+      "version": "1.1.0",
+      "resolved": "https://registry.npm.taobao.org/unicode-property-aliases-ecmascript/download/unicode-property-aliases-ecmascript-1.1.0.tgz?cache=0&sync_timestamp=1583946096584&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funicode-property-aliases-ecmascript%2Fdownload%2Funicode-property-aliases-ecmascript-1.1.0.tgz",
+      "integrity": "sha1-3Vepn2IHvt/0Yoq++5TFDblByPQ=",
       "dev": true
     },
     "unidecode": {
@@ -16797,7 +11694,8 @@
     "uniq": {
       "version": "1.0.1",
       "resolved": "https://registry.npm.taobao.org/uniq/download/uniq-1.0.1.tgz",
-      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+      "dev": true
     },
     "uniqs": {
       "version": "2.0.0",
@@ -16825,7 +11723,7 @@
     },
     "universalify": {
       "version": "0.1.2",
-      "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz?cache=0&sync_timestamp=1583531099652&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funiversalify%2Fdownload%2Funiversalify-0.1.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/universalify/download/universalify-0.1.2.tgz",
       "integrity": "sha1-tkb2m+OULavOzJ1mOcgNwQXvqmY=",
       "dev": true
     },
@@ -16883,36 +11781,28 @@
     },
     "upath": {
       "version": "1.2.0",
-      "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/upath/download/upath-1.2.0.tgz?cache=0&sync_timestamp=1604768637331&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupath%2Fdownload%2Fupath-1.2.0.tgz",
       "integrity": "sha1-j2bbzVWog6za5ECK+LA1pQRMGJQ=",
       "dev": true
     },
     "upper-case": {
       "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/upper-case/download/upper-case-1.1.3.tgz?cache=0&sync_timestamp=1606859943902&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case%2Fdownload%2Fupper-case-1.1.3.tgz",
       "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=",
       "dev": true
     },
-    "upper-case-first": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/upper-case-first/download/upper-case-first-1.1.2.tgz?cache=0&sync_timestamp=1575601561477&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fupper-case-first%2Fdownload%2Fupper-case-first-1.1.2.tgz",
-      "integrity": "sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU=",
-      "dev": true,
-      "requires": {
-        "upper-case": "^1.1.1"
-      }
-    },
     "uri-js": {
-      "version": "4.2.2",
-      "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.2.2.tgz",
-      "integrity": "sha1-lMVA4f93KVbiKZUHwBCupsiDjrA=",
+      "version": "4.4.0",
+      "resolved": "https://registry.npm.taobao.org/uri-js/download/uri-js-4.4.0.tgz",
+      "integrity": "sha1-qnFCYd55PoqCNHp7zJznTobyhgI=",
+      "dev": true,
       "requires": {
         "punycode": "^2.1.0"
       }
     },
     "urix": {
       "version": "0.1.0",
-      "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/urix/download/urix-0.1.0.tgz?cache=0&sync_timestamp=1585438689517&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furix%2Fdownload%2Furix-0.1.0.tgz",
       "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
       "dev": true
     },
@@ -16935,27 +11825,14 @@
       }
     },
     "url-loader": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-1.1.2.tgz",
-      "integrity": "sha1-uXHRkbg69pPF4/6kBkvp4fLX+Ng=",
+      "version": "2.3.0",
+      "resolved": "https://registry.npm.taobao.org/url-loader/download/url-loader-2.3.0.tgz?cache=0&sync_timestamp=1602252594253&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Furl-loader%2Fdownload%2Furl-loader-2.3.0.tgz",
+      "integrity": "sha1-4OLvZY8APvuMpBsPP/v3a6uIZYs=",
       "dev": true,
       "requires": {
-        "loader-utils": "^1.1.0",
-        "mime": "^2.0.3",
-        "schema-utils": "^1.0.0"
-      },
-      "dependencies": {
-        "schema-utils": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
-          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
-          "dev": true,
-          "requires": {
-            "ajv": "^6.1.0",
-            "ajv-errors": "^1.0.0",
-            "ajv-keywords": "^3.1.0"
-          }
-        }
+        "loader-utils": "^1.2.3",
+        "mime": "^2.4.4",
+        "schema-utils": "^2.5.0"
       }
     },
     "url-parse": {
@@ -16983,15 +11860,9 @@
       "integrity": "sha1-1QyMrHmhn7wg8pEfVuuXP04QBw8=",
       "dev": true
     },
-    "user-home": {
-      "version": "1.1.1",
-      "resolved": "https://registry.npm.taobao.org/user-home/download/user-home-1.1.1.tgz",
-      "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=",
-      "dev": true
-    },
     "util": {
       "version": "0.11.1",
-      "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz",
+      "resolved": "https://registry.npm.taobao.org/util/download/util-0.11.1.tgz?cache=0&sync_timestamp=1588238435623&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Futil%2Fdownload%2Futil-0.11.1.tgz",
       "integrity": "sha1-MjZzNyDsZLsn9uJvQhqqLhtYjWE=",
       "dev": true,
       "requires": {
@@ -17009,7 +11880,8 @@
     "util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
     },
     "util.promisify": {
       "version": "1.0.1",
@@ -17021,6 +11893,27 @@
         "es-abstract": "^1.17.2",
         "has-symbols": "^1.0.1",
         "object.getownpropertydescriptors": "^2.1.0"
+      },
+      "dependencies": {
+        "es-abstract": {
+          "version": "1.17.7",
+          "resolved": "https://registry.npm.taobao.org/es-abstract/download/es-abstract-1.17.7.tgz",
+          "integrity": "sha1-pN5hsvZpifx0IWdsHLl4dXOs5Uw=",
+          "dev": true,
+          "requires": {
+            "es-to-primitive": "^1.2.1",
+            "function-bind": "^1.1.1",
+            "has": "^1.0.3",
+            "has-symbols": "^1.0.1",
+            "is-callable": "^1.2.2",
+            "is-regex": "^1.1.1",
+            "object-inspect": "^1.8.0",
+            "object-keys": "^1.1.1",
+            "object.assign": "^4.1.1",
+            "string.prototype.trimend": "^1.0.1",
+            "string.prototype.trimstart": "^1.0.1"
+          }
+        }
       }
     },
     "utila": {
@@ -17037,18 +11930,15 @@
     },
     "uuid": {
       "version": "3.4.0",
-      "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1583326207173&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
+      "resolved": "https://registry.npm.taobao.org/uuid/download/uuid-3.4.0.tgz?cache=0&sync_timestamp=1607460052228&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuuid%2Fdownload%2Fuuid-3.4.0.tgz",
       "integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
       "dev": true
     },
-    "v8flags": {
-      "version": "2.1.1",
-      "resolved": "https://registry.npm.taobao.org/v8flags/download/v8flags-2.1.1.tgz",
-      "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=",
-      "dev": true,
-      "requires": {
-        "user-home": "^1.1.1"
-      }
+    "v8-compile-cache": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.2.0.tgz?cache=0&sync_timestamp=1603909372873&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.2.0.tgz",
+      "integrity": "sha1-lHHvo++RKNL3xqfKOcTda1BVsTI=",
+      "dev": true
     },
     "validate-npm-package-license": {
       "version": "3.0.4",
@@ -17083,45 +11973,76 @@
         "extsprintf": "^1.2.0"
       }
     },
-    "vm-browserify": {
-      "version": "1.1.2",
-      "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870776965&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz",
-      "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=",
-      "dev": true
-    },
-    "vue": {
-      "version": "2.6.10",
-      "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.10.tgz?cache=0&sync_timestamp=1583556397972&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.10.tgz",
-      "integrity": "sha1-pysaQqTYKnIepDjRtr9V5mGVxjc="
-    },
-    "vue-count-to": {
-      "version": "1.0.13",
-      "resolved": "https://registry.npm.taobao.org/vue-count-to/download/vue-count-to-1.0.13.tgz",
-      "integrity": "sha1-PnVz6m5kwrKXL2TgoqsuI8dZD/M="
-    },
+    "vm-browserify": {
+      "version": "1.1.2",
+      "resolved": "https://registry.npm.taobao.org/vm-browserify/download/vm-browserify-1.1.2.tgz?cache=0&sync_timestamp=1572870776965&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvm-browserify%2Fdownload%2Fvm-browserify-1.1.2.tgz",
+      "integrity": "sha1-eGQcSIuObKkadfUR56OzKobl3aA=",
+      "dev": true
+    },
+    "vue": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npm.taobao.org/vue/download/vue-3.0.5.tgz",
+      "integrity": "sha1-3huC66JKv+ceCXD8m41LK6vcP+E=",
+      "requires": {
+        "@vue/compiler-dom": "3.0.5",
+        "@vue/runtime-dom": "3.0.5",
+        "@vue/shared": "3.0.5"
+      },
+      "dependencies": {
+        "@vue/compiler-core": {
+          "version": "3.0.5",
+          "resolved": "https://registry.npm.taobao.org/@vue/compiler-core/download/@vue/compiler-core-3.0.5.tgz",
+          "integrity": "sha1-puVMq+lTbnTGUTrNJknzEa8dQ6w=",
+          "requires": {
+            "@babel/parser": "^7.12.0",
+            "@babel/types": "^7.12.0",
+            "@vue/shared": "3.0.5",
+            "estree-walker": "^2.0.1",
+            "source-map": "^0.6.1"
+          }
+        },
+        "@vue/compiler-dom": {
+          "version": "3.0.5",
+          "resolved": "https://registry.npm.taobao.org/@vue/compiler-dom/download/@vue/compiler-dom-3.0.5.tgz",
+          "integrity": "sha1-eIWhPm0Y9k3ejrzuwFLtLBAmlsI=",
+          "requires": {
+            "@vue/compiler-core": "3.0.5",
+            "@vue/shared": "3.0.5"
+          }
+        },
+        "@vue/shared": {
+          "version": "3.0.5",
+          "resolved": "https://registry.npm.taobao.org/@vue/shared/download/@vue/shared-3.0.5.tgz",
+          "integrity": "sha1-wTHYi9ZxPMTZOzuxNy7bGYMiX/A="
+        },
+        "source-map": {
+          "version": "0.6.1",
+          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM="
+        }
+      }
+    },
     "vue-eslint-parser": {
-      "version": "2.0.3",
-      "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-2.0.3.tgz",
-      "integrity": "sha1-wmjJbG2Uz+PZOKX3WTlZsMozYNE=",
+      "version": "7.3.0",
+      "resolved": "https://registry.npm.taobao.org/vue-eslint-parser/download/vue-eslint-parser-7.3.0.tgz?cache=0&sync_timestamp=1608030996396&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-eslint-parser%2Fdownload%2Fvue-eslint-parser-7.3.0.tgz",
+      "integrity": "sha1-iUCFg52Z2BKW+ggdGWQ3M/I9dVk=",
       "dev": true,
-      "optional": true,
       "requires": {
-        "debug": "^3.1.0",
-        "eslint-scope": "^3.7.1",
-        "eslint-visitor-keys": "^1.0.0",
-        "espree": "^3.5.2",
-        "esquery": "^1.0.0",
-        "lodash": "^4.17.4"
+        "debug": "^4.1.1",
+        "eslint-scope": "^5.0.0",
+        "eslint-visitor-keys": "^1.1.0",
+        "espree": "^6.2.1",
+        "esquery": "^1.0.1",
+        "lodash": "^4.17.15"
       },
       "dependencies": {
         "eslint-scope": {
-          "version": "3.7.3",
-          "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-3.7.3.tgz",
-          "integrity": "sha1-u1ByANPRf2AkdjYWC0gmKEsQhTU=",
+          "version": "5.1.1",
+          "resolved": "https://registry.npm.taobao.org/eslint-scope/download/eslint-scope-5.1.1.tgz?cache=0&sync_timestamp=1600070417656&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Feslint-scope%2Fdownload%2Feslint-scope-5.1.1.tgz",
+          "integrity": "sha1-54blmmbLkrP2wfsNUIqrF0hI9Iw=",
           "dev": true,
-          "optional": true,
           "requires": {
-            "esrecurse": "^4.1.0",
+            "esrecurse": "^4.3.0",
             "estraverse": "^4.1.1"
           }
         }
@@ -17133,33 +12054,10 @@
       "integrity": "sha1-UylVzB6yCKPZkLOp+acFdGV+CPI=",
       "dev": true
     },
-    "vue-jest": {
-      "version": "3.0.5",
-      "resolved": "https://registry.npm.taobao.org/vue-jest/download/vue-jest-3.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-jest%2Fdownload%2Fvue-jest-3.0.5.tgz",
-      "integrity": "sha1-1vEktULcv/IHv5KWwZQT9MQLcMk=",
-      "dev": true,
-      "requires": {
-        "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0",
-        "chalk": "^2.1.0",
-        "extract-from-css": "^0.4.4",
-        "find-babel-config": "^1.1.0",
-        "js-beautify": "^1.6.14",
-        "node-cache": "^4.1.1",
-        "object-assign": "^4.1.1",
-        "source-map": "^0.5.6",
-        "tsconfig": "^7.0.0",
-        "vue-template-es2015-compiler": "^1.6.0"
-      }
-    },
-    "vue-jsonp": {
-      "version": "0.1.8",
-      "resolved": "https://registry.npmjs.org/vue-jsonp/-/vue-jsonp-0.1.8.tgz",
-      "integrity": "sha512-ebxvjHl5D7bv5Z7SeRzZUAPOSRMx+RiAeej7h6dPpbtk8MVz/b3n9fOZ8AAVmakb1pe36e+qG0J+K49a3LfpKA=="
-    },
     "vue-loader": {
-      "version": "15.9.0",
-      "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.0.tgz",
-      "integrity": "sha1-XUsDeKRgYYj8g+WH7SPJS8OhCZg=",
+      "version": "15.9.5",
+      "resolved": "https://registry.npm.taobao.org/vue-loader/download/vue-loader-15.9.5.tgz?cache=0&sync_timestamp=1607093678805&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-loader%2Fdownload%2Fvue-loader-15.9.5.tgz",
+      "integrity": "sha1-epYNxCCjQ53qrN2gOP3Nv3xDJwY=",
       "dev": true,
       "requires": {
         "@vue/component-compiler-utils": "^3.1.0",
@@ -17169,46 +12067,117 @@
         "vue-style-loader": "^4.1.0"
       },
       "dependencies": {
-        "@vue/component-compiler-utils": {
-          "version": "3.1.1",
-          "resolved": "https://registry.npm.taobao.org/@vue/component-compiler-utils/download/@vue/component-compiler-utils-3.1.1.tgz",
-          "integrity": "sha1-1O+PgCkmdARK1iEeM2owLk0qZXU=",
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
+        }
+      }
+    },
+    "vue-loader-v16": {
+      "version": "npm:vue-loader@16.8.3",
+      "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+      "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+      "dev": true,
+      "optional": true,
+      "requires": {
+        "chalk": "^4.1.0",
+        "hash-sum": "^2.0.0",
+        "loader-utils": "^2.0.0"
+      },
+      "dependencies": {
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
           "dev": true,
+          "optional": true,
           "requires": {
-            "consolidate": "^0.15.1",
-            "hash-sum": "^1.0.2",
-            "lru-cache": "^4.1.2",
-            "merge-source-map": "^1.1.0",
-            "postcss": "^7.0.14",
-            "postcss-selector-parser": "^6.0.2",
-            "prettier": "^1.18.2",
-            "source-map": "~0.6.1",
-            "vue-template-es2015-compiler": "^1.9.0"
+            "color-convert": "^2.0.1"
           }
         },
-        "prettier": {
-          "version": "1.19.1",
-          "resolved": "https://registry.npm.taobao.org/prettier/download/prettier-1.19.1.tgz?cache=0&sync_timestamp=1573302169507&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-1.19.1.tgz",
-          "integrity": "sha1-99f1/4qc2HKnvkyhQglZVqYHl8s=",
-          "dev": true
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
         },
-        "source-map": {
-          "version": "0.6.1",
-          "resolved": "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
-          "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        }
+      }
+    },
+    "vue-particles": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npm.taobao.org/vue-particles/download/vue-particles-1.0.9.tgz",
+      "integrity": "sha1-KdnMK+AVffHAqH7DuWyW8zJ5Um4=",
+      "dev": true,
+      "requires": {
+        "particles.js": "^2.0.0",
+        "vue": "^2.2.6"
+      },
+      "dependencies": {
+        "vue": {
+          "version": "2.6.12",
+          "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.12.tgz",
+          "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==",
           "dev": true
         }
       }
     },
     "vue-router": {
-      "version": "3.0.2",
-      "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-3.0.2.tgz",
-      "integrity": "sha1-3txnr+bE4rwlaCyLHCqMDXx+Vr4="
-    },
-    "vue-splitpane": {
-      "version": "1.0.4",
-      "resolved": "https://registry.npm.taobao.org/vue-splitpane/download/vue-splitpane-1.0.4.tgz",
-      "integrity": "sha1-zfdEqPMb7csIbpVFqUU1ZdNgvQI="
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/vue-router/download/vue-router-4.0.1.tgz?cache=0&sync_timestamp=1607347184356&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-router%2Fdownload%2Fvue-router-4.0.1.tgz",
+      "integrity": "sha1-MJJA5QUksefU6C4n8KD6Jf49HXE="
     },
     "vue-style-loader": {
       "version": "4.1.2",
@@ -17218,16 +12187,14 @@
       "requires": {
         "hash-sum": "^1.0.2",
         "loader-utils": "^1.0.2"
-      }
-    },
-    "vue-template-compiler": {
-      "version": "2.6.10",
-      "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.10.tgz?cache=0&sync_timestamp=1576267127911&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-template-compiler%2Fdownload%2Fvue-template-compiler-2.6.10.tgz",
-      "integrity": "sha1-MjtPNJXwT6o1AzN6gvXWUHeZycw=",
-      "dev": true,
-      "requires": {
-        "de-indent": "^1.0.2",
-        "he": "^1.1.0"
+      },
+      "dependencies": {
+        "hash-sum": {
+          "version": "1.0.2",
+          "resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
+        }
       }
     },
     "vue-template-es2015-compiler": {
@@ -17236,64 +12203,219 @@
       "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
       "dev": true
     },
-    "vuedraggable": {
-      "version": "2.20.0",
-      "resolved": "https://registry.npm.taobao.org/vuedraggable/download/vuedraggable-2.20.0.tgz",
-      "integrity": "sha1-gurB+aMsEW70z1IV/hjfsVKvqd0=",
+    "vue-types": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz",
+      "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==",
       "requires": {
-        "sortablejs": "^1.8.4"
+        "is-plain-object": "3.0.1"
+      },
+      "dependencies": {
+        "is-plain-object": {
+          "version": "3.0.1",
+          "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz",
+          "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g=="
+        }
       }
     },
     "vuex": {
-      "version": "3.1.0",
-      "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-3.1.0.tgz",
-      "integrity": "sha1-Y0uBUVzwz+l2vR/+lgF1XlH4Q7k="
-    },
-    "w3c-hr-time": {
-      "version": "1.0.2",
-      "resolved": "https://registry.npm.taobao.org/w3c-hr-time/download/w3c-hr-time-1.0.2.tgz?cache=0&sync_timestamp=1583455604765&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fw3c-hr-time%2Fdownload%2Fw3c-hr-time-1.0.2.tgz",
-      "integrity": "sha1-ConN9cwVgi35w2BUNnaWPgzDCM0=",
-      "dev": true,
-      "requires": {
-        "browser-process-hrtime": "^1.0.0"
-      }
+      "version": "4.0.0-rc.2",
+      "resolved": "https://registry.npm.taobao.org/vuex/download/vuex-4.0.0-rc.2.tgz?cache=0&sync_timestamp=1606318256705&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvuex%2Fdownload%2Fvuex-4.0.0-rc.2.tgz",
+      "integrity": "sha1-NoHITrb1FxsDntqhfMeBBeIHJPM="
     },
-    "walker": {
-      "version": "1.0.7",
-      "resolved": "https://registry.npm.taobao.org/walker/download/walker-1.0.7.tgz",
-      "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=",
-      "dev": true,
+    "warning": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz",
+      "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==",
       "requires": {
-        "makeerror": "1.0.x"
+        "loose-envify": "^1.0.0"
       }
     },
-    "watch": {
-      "version": "0.18.0",
-      "resolved": "https://registry.npm.taobao.org/watch/download/watch-0.18.0.tgz",
-      "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=",
+    "watchpack": {
+      "version": "1.7.5",
+      "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.7.5.tgz?cache=0&sync_timestamp=1607687490176&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack%2Fdownload%2Fwatchpack-1.7.5.tgz",
+      "integrity": "sha1-EmfmxV4Lm1vkTCAjrtVDeiwmxFM=",
       "dev": true,
       "requires": {
-        "exec-sh": "^0.2.0",
-        "minimist": "^1.2.0"
+        "chokidar": "^3.4.1",
+        "graceful-fs": "^4.1.2",
+        "neo-async": "^2.5.0",
+        "watchpack-chokidar2": "^2.0.1"
       },
       "dependencies": {
-        "minimist": {
-          "version": "1.2.0",
-          "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.0.tgz",
-          "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
-          "dev": true
+        "braces": {
+          "version": "3.0.2",
+          "resolved": "https://registry.npm.taobao.org/braces/download/braces-3.0.2.tgz",
+          "integrity": "sha1-NFThpGLujVmeI23zNs2epPiv4Qc=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "fill-range": "^7.0.1"
+          }
+        },
+        "chokidar": {
+          "version": "3.5.1",
+          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-3.5.1.tgz?cache=0&sync_timestamp=1610719440699&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-3.5.1.tgz",
+          "integrity": "sha1-7pznu+vSt59J8wR5nVRo4x4U5oo=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "anymatch": "~3.1.1",
+            "braces": "~3.0.2",
+            "fsevents": "~2.3.1",
+            "glob-parent": "~5.1.0",
+            "is-binary-path": "~2.1.0",
+            "is-glob": "~4.0.1",
+            "normalize-path": "~3.0.0",
+            "readdirp": "~3.5.0"
+          }
+        },
+        "fill-range": {
+          "version": "7.0.1",
+          "resolved": "https://registry.npm.taobao.org/fill-range/download/fill-range-7.0.1.tgz",
+          "integrity": "sha1-GRmmp8df44ssfHflGYU12prN2kA=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "to-regex-range": "^5.0.1"
+          }
+        },
+        "is-number": {
+          "version": "7.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-number/download/is-number-7.0.0.tgz",
+          "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=",
+          "dev": true,
+          "optional": true
+        },
+        "to-regex-range": {
+          "version": "5.0.1",
+          "resolved": "https://registry.npm.taobao.org/to-regex-range/download/to-regex-range-5.0.1.tgz",
+          "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "is-number": "^7.0.0"
+          }
         }
       }
     },
-    "watchpack": {
-      "version": "1.6.0",
-      "resolved": "https://registry.npm.taobao.org/watchpack/download/watchpack-1.6.0.tgz",
-      "integrity": "sha1-S8EsLr6KonenHx0/FNaFx7RGzQA=",
+    "watchpack-chokidar2": {
+      "version": "2.0.1",
+      "resolved": "https://registry.npm.taobao.org/watchpack-chokidar2/download/watchpack-chokidar2-2.0.1.tgz?cache=0&sync_timestamp=1604989085906&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwatchpack-chokidar2%2Fdownload%2Fwatchpack-chokidar2-2.0.1.tgz",
+      "integrity": "sha1-OFAAcu5uzmbzdpk2lQ6hdxvhyVc=",
       "dev": true,
+      "optional": true,
       "requires": {
-        "chokidar": "^2.0.2",
-        "graceful-fs": "^4.1.2",
-        "neo-async": "^2.5.0"
+        "chokidar": "^2.1.8"
+      },
+      "dependencies": {
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
+          }
+        },
+        "binary-extensions": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz",
+          "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
+          "dev": true,
+          "optional": true
+        },
+        "chokidar": {
+          "version": "2.1.8",
+          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1602588845974&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz",
+          "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "anymatch": "^2.0.0",
+            "async-each": "^1.0.1",
+            "braces": "^2.3.2",
+            "fsevents": "^1.2.7",
+            "glob-parent": "^3.1.0",
+            "inherits": "^2.0.3",
+            "is-binary-path": "^1.0.0",
+            "is-glob": "^4.0.0",
+            "normalize-path": "^3.0.0",
+            "path-is-absolute": "^1.0.0",
+            "readdirp": "^2.2.1",
+            "upath": "^1.1.1"
+          }
+        },
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1608033993741&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz",
+          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
+          }
+        },
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "optional": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
+          }
+        },
+        "is-binary-path": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
+          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "binary-extensions": "^1.0.0"
+          }
+        },
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
+          "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
+          }
+        }
       }
     },
     "wbuf": {
@@ -17314,52 +12436,58 @@
         "defaults": "^1.0.3"
       }
     },
-    "webidl-conversions": {
-      "version": "4.0.2",
-      "resolved": "https://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-4.0.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebidl-conversions%2Fdownload%2Fwebidl-conversions-4.0.2.tgz",
-      "integrity": "sha1-qFWYCx8LazWbodXZ+zmulB+qY60=",
-      "dev": true
-    },
     "webpack": {
-      "version": "4.28.4",
-      "resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.28.4.tgz",
-      "integrity": "sha1-HdrmyJiH1++3Uq3ww80yubB+rNA=",
-      "dev": true,
-      "requires": {
-        "@webassemblyjs/ast": "1.7.11",
-        "@webassemblyjs/helper-module-context": "1.7.11",
-        "@webassemblyjs/wasm-edit": "1.7.11",
-        "@webassemblyjs/wasm-parser": "1.7.11",
-        "acorn": "^5.6.2",
-        "acorn-dynamic-import": "^3.0.0",
-        "ajv": "^6.1.0",
-        "ajv-keywords": "^3.1.0",
-        "chrome-trace-event": "^1.0.0",
-        "enhanced-resolve": "^4.1.0",
-        "eslint-scope": "^4.0.0",
+      "version": "4.44.2",
+      "resolved": "https://registry.npm.taobao.org/webpack/download/webpack-4.44.2.tgz?cache=0&sync_timestamp=1608060653278&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack%2Fdownload%2Fwebpack-4.44.2.tgz",
+      "integrity": "sha1-a/4rCvBVyLLR6Q7SzZNj+EEma3I=",
+      "dev": true,
+      "requires": {
+        "@webassemblyjs/ast": "1.9.0",
+        "@webassemblyjs/helper-module-context": "1.9.0",
+        "@webassemblyjs/wasm-edit": "1.9.0",
+        "@webassemblyjs/wasm-parser": "1.9.0",
+        "acorn": "^6.4.1",
+        "ajv": "^6.10.2",
+        "ajv-keywords": "^3.4.1",
+        "chrome-trace-event": "^1.0.2",
+        "enhanced-resolve": "^4.3.0",
+        "eslint-scope": "^4.0.3",
         "json-parse-better-errors": "^1.0.2",
-        "loader-runner": "^2.3.0",
-        "loader-utils": "^1.1.0",
-        "memory-fs": "~0.4.1",
-        "micromatch": "^3.1.8",
-        "mkdirp": "~0.5.0",
-        "neo-async": "^2.5.0",
-        "node-libs-browser": "^2.0.0",
-        "schema-utils": "^0.4.4",
-        "tapable": "^1.1.0",
-        "terser-webpack-plugin": "^1.1.0",
-        "watchpack": "^1.5.0",
-        "webpack-sources": "^1.3.0"
+        "loader-runner": "^2.4.0",
+        "loader-utils": "^1.2.3",
+        "memory-fs": "^0.4.1",
+        "micromatch": "^3.1.10",
+        "mkdirp": "^0.5.3",
+        "neo-async": "^2.6.1",
+        "node-libs-browser": "^2.2.1",
+        "schema-utils": "^1.0.0",
+        "tapable": "^1.1.3",
+        "terser-webpack-plugin": "^1.4.3",
+        "watchpack": "^1.7.4",
+        "webpack-sources": "^1.4.1"
+      },
+      "dependencies": {
+        "schema-utils": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz",
+          "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
+          "dev": true,
+          "requires": {
+            "ajv": "^6.1.0",
+            "ajv-errors": "^1.0.0",
+            "ajv-keywords": "^3.1.0"
+          }
+        }
       }
     },
     "webpack-bundle-analyzer": {
-      "version": "3.6.0",
-      "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.6.0.tgz",
-      "integrity": "sha1-ObOo+CnKBEaCvG+eARyV3rVUrv0=",
+      "version": "3.9.0",
+      "resolved": "https://registry.npm.taobao.org/webpack-bundle-analyzer/download/webpack-bundle-analyzer-3.9.0.tgz?cache=0&sync_timestamp=1608133719952&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-bundle-analyzer%2Fdownload%2Fwebpack-bundle-analyzer-3.9.0.tgz",
+      "integrity": "sha1-9vlNsQj7V05BWtMT3kGicH0z7zw=",
       "dev": true,
       "requires": {
-        "acorn": "^6.0.7",
-        "acorn-walk": "^6.1.1",
+        "acorn": "^7.1.1",
+        "acorn-walk": "^7.1.1",
         "bfj": "^6.1.1",
         "chalk": "^2.4.1",
         "commander": "^2.18.0",
@@ -17367,49 +12495,34 @@
         "express": "^4.16.3",
         "filesize": "^3.6.1",
         "gzip-size": "^5.0.0",
-        "lodash": "^4.17.15",
+        "lodash": "^4.17.19",
         "mkdirp": "^0.5.1",
         "opener": "^1.5.1",
         "ws": "^6.0.0"
       },
       "dependencies": {
         "acorn": {
-          "version": "6.4.1",
-          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-6.4.1.tgz?cache=0&sync_timestamp=1583823913618&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-6.4.1.tgz",
-          "integrity": "sha1-Ux5Yuj9RudrLmmZGyk3r9bFMpHQ=",
-          "dev": true
-        },
-        "commander": {
-          "version": "2.20.3",
-          "resolved": "https://registry.npm.taobao.org/commander/download/commander-2.20.3.tgz",
-          "integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
+          "version": "7.4.1",
+          "resolved": "https://registry.npm.taobao.org/acorn/download/acorn-7.4.1.tgz?cache=0&sync_timestamp=1602534280466&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Facorn%2Fdownload%2Facorn-7.4.1.tgz",
+          "integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
           "dev": true
-        },
-        "ws": {
-          "version": "6.2.1",
-          "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz",
-          "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=",
-          "dev": true,
-          "requires": {
-            "async-limiter": "~1.0.0"
-          }
         }
       }
     },
     "webpack-chain": {
-      "version": "4.12.1",
-      "resolved": "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-4.12.1.tgz?cache=0&sync_timestamp=1580740851884&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-chain%2Fdownload%2Fwebpack-chain-4.12.1.tgz",
-      "integrity": "sha1-bIQ5u7KrVQlS1g4eqTGRQZBsAqY=",
+      "version": "6.5.1",
+      "resolved": "https://registry.npm.taobao.org/webpack-chain/download/webpack-chain-6.5.1.tgz",
+      "integrity": "sha1-TycoTLu2N+PI+970Pu9YjU2GEgY=",
       "dev": true,
       "requires": {
         "deepmerge": "^1.5.2",
-        "javascript-stringify": "^1.6.0"
+        "javascript-stringify": "^2.0.1"
       }
     },
     "webpack-dev-middleware": {
-      "version": "3.7.2",
-      "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.2.tgz?cache=0&sync_timestamp=1582191388714&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.2.tgz",
-      "integrity": "sha1-ABnD23FuP6XOy/ZPKriKdLqzMfM=",
+      "version": "3.7.3",
+      "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-3.7.3.tgz?cache=0&sync_timestamp=1608052639209&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-middleware%2Fdownload%2Fwebpack-dev-middleware-3.7.3.tgz",
+      "integrity": "sha1-Bjk3KxQyYuK4SrldO5GnWXBhwsU=",
       "dev": true,
       "requires": {
         "memory-fs": "^0.4.1",
@@ -17420,9 +12533,9 @@
       }
     },
     "webpack-dev-server": {
-      "version": "3.10.3",
-      "resolved": "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.10.3.tgz",
-      "integrity": "sha1-81lFA2gT5X71gsJCDve0cOFNOvA=",
+      "version": "3.11.0",
+      "resolved": "https://registry.npm.taobao.org/webpack-dev-server/download/webpack-dev-server-3.11.0.tgz?cache=0&sync_timestamp=1606496402755&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-dev-server%2Fdownload%2Fwebpack-dev-server-3.11.0.tgz",
+      "integrity": "sha1-jxVKO84bz9HMYY705wMniFXn/4w=",
       "dev": true,
       "requires": {
         "ansi-html": "0.0.7",
@@ -17433,31 +12546,31 @@
         "debug": "^4.1.1",
         "del": "^4.1.1",
         "express": "^4.17.1",
-        "html-entities": "^1.2.1",
+        "html-entities": "^1.3.1",
         "http-proxy-middleware": "0.19.1",
         "import-local": "^2.0.0",
         "internal-ip": "^4.3.0",
         "ip": "^1.1.5",
         "is-absolute-url": "^3.0.3",
         "killable": "^1.0.1",
-        "loglevel": "^1.6.6",
+        "loglevel": "^1.6.8",
         "opn": "^5.5.0",
         "p-retry": "^3.0.1",
-        "portfinder": "^1.0.25",
+        "portfinder": "^1.0.26",
         "schema-utils": "^1.0.0",
         "selfsigned": "^1.10.7",
         "semver": "^6.3.0",
         "serve-index": "^1.9.1",
-        "sockjs": "0.3.19",
+        "sockjs": "0.3.20",
         "sockjs-client": "1.4.0",
-        "spdy": "^4.0.1",
+        "spdy": "^4.0.2",
         "strip-ansi": "^3.0.1",
         "supports-color": "^6.1.0",
         "url": "^0.11.0",
         "webpack-dev-middleware": "^3.7.2",
         "webpack-log": "^2.0.0",
         "ws": "^6.2.1",
-        "yargs": "12.0.5"
+        "yargs": "^13.3.2"
       },
       "dependencies": {
         "ansi-regex": {
@@ -17466,6 +12579,33 @@
           "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
           "dev": true
         },
+        "anymatch": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/anymatch/download/anymatch-2.0.0.tgz",
+          "integrity": "sha1-vLJLTzeTTZqnrBe0ra+J58du8us=",
+          "dev": true,
+          "requires": {
+            "micromatch": "^3.1.4",
+            "normalize-path": "^2.1.1"
+          },
+          "dependencies": {
+            "normalize-path": {
+              "version": "2.1.1",
+              "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-2.1.1.tgz",
+              "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
+              "dev": true,
+              "requires": {
+                "remove-trailing-separator": "^1.0.1"
+              }
+            }
+          }
+        },
+        "binary-extensions": {
+          "version": "1.13.1",
+          "resolved": "https://registry.npm.taobao.org/binary-extensions/download/binary-extensions-1.13.1.tgz",
+          "integrity": "sha1-WYr+VHVbKGilMw0q/51Ou1Mgm2U=",
+          "dev": true
+        },
         "camelcase": {
           "version": "5.3.1",
           "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz",
@@ -17474,7 +12614,7 @@
         },
         "chokidar": {
           "version": "2.1.8",
-          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz",
+          "resolved": "https://registry.npm.taobao.org/chokidar/download/chokidar-2.1.8.tgz?cache=0&sync_timestamp=1602588845974&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fchokidar%2Fdownload%2Fchokidar-2.1.8.tgz",
           "integrity": "sha1-gEs6e2qZNYw8XGHnHYco8EHP+Rc=",
           "dev": true,
           "requires": {
@@ -17492,100 +12632,102 @@
             "upath": "^1.1.1"
           }
         },
-        "cross-spawn": {
-          "version": "6.0.5",
-          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-6.0.5.tgz?cache=0&sync_timestamp=1570439926300&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-6.0.5.tgz",
-          "integrity": "sha1-Sl7Hxk364iw6FBJNus3uhG2Ay8Q=",
+        "cliui": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npm.taobao.org/cliui/download/cliui-5.0.0.tgz",
+          "integrity": "sha1-3u/P2y6AB4SqNPRvoI4GhRx7u8U=",
           "dev": true,
           "requires": {
-            "nice-try": "^1.0.4",
-            "path-key": "^2.0.1",
-            "semver": "^5.5.0",
-            "shebang-command": "^1.2.0",
-            "which": "^1.2.9"
+            "string-width": "^3.1.0",
+            "strip-ansi": "^5.2.0",
+            "wrap-ansi": "^5.1.0"
           },
           "dependencies": {
-            "semver": {
-              "version": "5.7.1",
-              "resolved": "https://registry.npm.taobao.org/semver/download/semver-5.7.1.tgz",
-              "integrity": "sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=",
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
               "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
             }
           }
         },
-        "debug": {
-          "version": "4.1.1",
-          "resolved": "https://registry.npm.taobao.org/debug/download/debug-4.1.1.tgz",
-          "integrity": "sha1-O3ImAlUQnGtYnO4FDx1RYTlmR5E=",
-          "dev": true,
-          "requires": {
-            "ms": "^2.1.1"
-          }
-        },
-        "execa": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-1.0.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-1.0.0.tgz",
-          "integrity": "sha1-xiNqW7TfbW8V6I5/AXeYIWdJ3dg=",
-          "dev": true,
-          "requires": {
-            "cross-spawn": "^6.0.0",
-            "get-stream": "^4.0.0",
-            "is-stream": "^1.1.0",
-            "npm-run-path": "^2.0.0",
-            "p-finally": "^1.0.0",
-            "signal-exit": "^3.0.0",
-            "strip-eof": "^1.0.0"
-          }
+        "emoji-regex": {
+          "version": "7.0.3",
+          "resolved": "https://registry.npm.taobao.org/emoji-regex/download/emoji-regex-7.0.3.tgz",
+          "integrity": "sha1-kzoEBShgyF6DwSJHnEdIqOTHIVY=",
+          "dev": true
         },
         "find-up": {
           "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/find-up/download/find-up-3.0.0.tgz?cache=0&sync_timestamp=1597169795121&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffind-up%2Fdownload%2Ffind-up-3.0.0.tgz",
           "integrity": "sha1-SRafHXmTQwZG2mHsxa41XCHJe3M=",
           "dev": true,
           "requires": {
             "locate-path": "^3.0.0"
           }
         },
-        "get-stream": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-4.1.0.tgz",
-          "integrity": "sha1-wbJVV189wh1Zv8ec09K0axw6VLU=",
+        "fsevents": {
+          "version": "1.2.13",
+          "resolved": "https://registry.npm.taobao.org/fsevents/download/fsevents-1.2.13.tgz?cache=0&sync_timestamp=1608033993741&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-1.2.13.tgz",
+          "integrity": "sha1-8yXLBFVZJCi88Rs4M3DvcOO/zDg=",
           "dev": true,
+          "optional": true,
           "requires": {
-            "pump": "^3.0.0"
+            "bindings": "^1.5.0",
+            "nan": "^2.12.1"
           }
         },
-        "import-local": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/import-local/download/import-local-2.0.0.tgz",
-          "integrity": "sha1-VQcL44pZk88Y72236WH1vuXFoJ0=",
+        "glob-parent": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/glob-parent/download/glob-parent-3.1.0.tgz",
+          "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
           "dev": true,
           "requires": {
-            "pkg-dir": "^3.0.0",
-            "resolve-cwd": "^2.0.0"
+            "is-glob": "^3.1.0",
+            "path-dirname": "^1.0.0"
+          },
+          "dependencies": {
+            "is-glob": {
+              "version": "3.1.0",
+              "resolved": "https://registry.npm.taobao.org/is-glob/download/is-glob-3.1.0.tgz",
+              "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+              "dev": true,
+              "requires": {
+                "is-extglob": "^2.1.0"
+              }
+            }
           }
         },
-        "invert-kv": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/invert-kv/download/invert-kv-2.0.0.tgz",
-          "integrity": "sha1-c5P1r6Weyf9fZ6J2INEcIm4+7AI=",
-          "dev": true
-        },
         "is-absolute-url": {
           "version": "3.0.3",
           "resolved": "https://registry.npm.taobao.org/is-absolute-url/download/is-absolute-url-3.0.3.tgz?cache=0&sync_timestamp=1569736493122&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-absolute-url%2Fdownload%2Fis-absolute-url-3.0.3.tgz",
           "integrity": "sha1-lsaiK2ojkpsR6gr7GDbDatSl1pg=",
           "dev": true
         },
-        "lcid": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npm.taobao.org/lcid/download/lcid-2.0.0.tgz",
-          "integrity": "sha1-bvXS32DlL4LrIopMNz6NHzlyU88=",
+        "is-binary-path": {
+          "version": "1.0.1",
+          "resolved": "https://registry.npm.taobao.org/is-binary-path/download/is-binary-path-1.0.1.tgz",
+          "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
           "dev": true,
           "requires": {
-            "invert-kv": "^2.0.0"
+            "binary-extensions": "^1.0.0"
           }
         },
+        "is-fullwidth-code-point": {
+          "version": "2.0.0",
+          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-2.0.0.tgz",
+          "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+          "dev": true
+        },
         "locate-path": {
           "version": "3.0.0",
           "resolved": "https://registry.npm.taobao.org/locate-path/download/locate-path-3.0.0.tgz",
@@ -17596,76 +12738,35 @@
             "path-exists": "^3.0.0"
           }
         },
-        "mem": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npm.taobao.org/mem/download/mem-4.3.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmem%2Fdownload%2Fmem-4.3.0.tgz",
-          "integrity": "sha1-Rhr0l7xK4JYIzbLmDu+2m/90QXg=",
-          "dev": true,
-          "requires": {
-            "map-age-cleaner": "^0.1.1",
-            "mimic-fn": "^2.0.0",
-            "p-is-promise": "^2.0.0"
-          }
-        },
-        "mimic-fn": {
-          "version": "2.1.0",
-          "resolved": "https://registry.npm.taobao.org/mimic-fn/download/mimic-fn-2.1.0.tgz",
-          "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=",
-          "dev": true
-        },
-        "ms": {
-          "version": "2.1.2",
-          "resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.2.tgz",
-          "integrity": "sha1-0J0fNXtEP0kzgqjrPM0YOHKuYAk=",
-          "dev": true
-        },
-        "os-locale": {
-          "version": "3.1.0",
-          "resolved": "https://registry.npm.taobao.org/os-locale/download/os-locale-3.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fos-locale%2Fdownload%2Fos-locale-3.1.0.tgz",
-          "integrity": "sha1-qAKm7hfyTBBIOrmTVxnO9O0Wvxo=",
-          "dev": true,
-          "requires": {
-            "execa": "^1.0.0",
-            "lcid": "^2.0.0",
-            "mem": "^4.0.0"
-          }
-        },
-        "p-limit": {
-          "version": "2.2.2",
-          "resolved": "https://registry.npm.taobao.org/p-limit/download/p-limit-2.2.2.tgz?cache=0&sync_timestamp=1577904218145&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-limit%2Fdownload%2Fp-limit-2.2.2.tgz",
-          "integrity": "sha1-YSebZ3IfUoeqHBOpp/u8SMkpGx4=",
-          "dev": true,
-          "requires": {
-            "p-try": "^2.0.0"
-          }
-        },
         "p-locate": {
           "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/p-locate/download/p-locate-3.0.0.tgz?cache=0&sync_timestamp=1597081369770&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fp-locate%2Fdownload%2Fp-locate-3.0.0.tgz",
           "integrity": "sha1-Mi1poFwCZLJZl9n0DNiokasAZKQ=",
           "dev": true,
           "requires": {
             "p-limit": "^2.0.0"
           }
         },
-        "p-try": {
-          "version": "2.2.0",
-          "resolved": "https://registry.npm.taobao.org/p-try/download/p-try-2.2.0.tgz",
-          "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=",
+        "path-exists": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/path-exists/download/path-exists-3.0.0.tgz",
+          "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
           "dev": true
         },
-        "pkg-dir": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npm.taobao.org/pkg-dir/download/pkg-dir-3.0.0.tgz",
-          "integrity": "sha1-J0kCDyOe2ZCIGx9xIQ1R62UjvqM=",
+        "readdirp": {
+          "version": "2.2.1",
+          "resolved": "https://registry.npm.taobao.org/readdirp/download/readdirp-2.2.1.tgz",
+          "integrity": "sha1-DodiKjMlqjPokihcr4tOhGUppSU=",
           "dev": true,
           "requires": {
-            "find-up": "^3.0.0"
+            "graceful-fs": "^4.1.11",
+            "micromatch": "^3.1.10",
+            "readable-stream": "^2.0.2"
           }
         },
         "schema-utils": {
           "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fschema-utils%2Fdownload%2Fschema-utils-1.0.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/schema-utils/download/schema-utils-1.0.0.tgz",
           "integrity": "sha1-C3mpMgTXtgDUsoUNH2bCo0lRx3A=",
           "dev": true,
           "requires": {
@@ -17676,10 +12777,38 @@
         },
         "semver": {
           "version": "6.3.0",
-          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/semver/download/semver-6.3.0.tgz?cache=0&sync_timestamp=1606853731020&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsemver%2Fdownload%2Fsemver-6.3.0.tgz",
           "integrity": "sha1-7gpkyK9ejO6mdoexM3YeG+y9HT0=",
           "dev": true
         },
+        "string-width": {
+          "version": "3.1.0",
+          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-3.1.0.tgz",
+          "integrity": "sha1-InZ74htirxCBV0MG9prFG2IgOWE=",
+          "dev": true,
+          "requires": {
+            "emoji-regex": "^7.0.1",
+            "is-fullwidth-code-point": "^2.0.0",
+            "strip-ansi": "^5.1.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
+          }
+        },
         "strip-ansi": {
           "version": "3.0.1",
           "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
@@ -17691,46 +12820,63 @@
         },
         "supports-color": {
           "version": "6.1.0",
-          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/supports-color/download/supports-color-6.1.0.tgz?cache=0&sync_timestamp=1608033349725&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsupports-color%2Fdownload%2Fsupports-color-6.1.0.tgz",
           "integrity": "sha1-B2Srxpxj1ayELdSGfo0CXogN+PM=",
           "dev": true,
           "requires": {
             "has-flag": "^3.0.0"
           }
         },
-        "ws": {
-          "version": "6.2.1",
-          "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz",
-          "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=",
+        "wrap-ansi": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-5.1.0.tgz",
+          "integrity": "sha1-H9H2cjXVttD+54EFYAG/tpTAOwk=",
           "dev": true,
           "requires": {
-            "async-limiter": "~1.0.0"
+            "ansi-styles": "^3.2.0",
+            "string-width": "^3.0.0",
+            "strip-ansi": "^5.0.0"
+          },
+          "dependencies": {
+            "ansi-regex": {
+              "version": "4.1.0",
+              "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-4.1.0.tgz",
+              "integrity": "sha1-i5+PCM8ay4Q3Vqg5yox+MWjFGZc=",
+              "dev": true
+            },
+            "strip-ansi": {
+              "version": "5.2.0",
+              "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-5.2.0.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-5.2.0.tgz",
+              "integrity": "sha1-jJpTb+tq/JYr36WxBKUJHBrZwK4=",
+              "dev": true,
+              "requires": {
+                "ansi-regex": "^4.1.0"
+              }
+            }
           }
         },
         "yargs": {
-          "version": "12.0.5",
-          "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-12.0.5.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-12.0.5.tgz",
-          "integrity": "sha1-BfWZe2CWR7ZPZrgeO0sQo2jnrRM=",
+          "version": "13.3.2",
+          "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-13.3.2.tgz?cache=0&sync_timestamp=1607207963779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-13.3.2.tgz",
+          "integrity": "sha1-rX/+/sGqWVZayRX4Lcyzipwxot0=",
           "dev": true,
           "requires": {
-            "cliui": "^4.0.0",
-            "decamelize": "^1.2.0",
+            "cliui": "^5.0.0",
             "find-up": "^3.0.0",
-            "get-caller-file": "^1.0.1",
-            "os-locale": "^3.0.0",
+            "get-caller-file": "^2.0.1",
             "require-directory": "^2.1.1",
-            "require-main-filename": "^1.0.1",
+            "require-main-filename": "^2.0.0",
             "set-blocking": "^2.0.0",
-            "string-width": "^2.0.0",
+            "string-width": "^3.0.0",
             "which-module": "^2.0.0",
-            "y18n": "^3.2.1 || ^4.0.0",
-            "yargs-parser": "^11.1.1"
+            "y18n": "^4.0.0",
+            "yargs-parser": "^13.1.2"
           }
         },
         "yargs-parser": {
-          "version": "11.1.1",
-          "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-11.1.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-11.1.1.tgz",
-          "integrity": "sha1-h5oIZZc7yp9rq1y987HGfsfTvPQ=",
+          "version": "13.1.2",
+          "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-13.1.2.tgz?cache=0&sync_timestamp=1604886709178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-13.1.2.tgz",
+          "integrity": "sha1-Ew8JcC667vJlDVTObj5XBvek+zg=",
           "dev": true,
           "requires": {
             "camelcase": "^5.0.0",
@@ -17751,7 +12897,7 @@
     },
     "webpack-merge": {
       "version": "4.2.2",
-      "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-merge%2Fdownload%2Fwebpack-merge-4.2.2.tgz",
+      "resolved": "https://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.2.2.tgz",
       "integrity": "sha1-onxS6ng9E5iv0gh/VH17nS9DY00=",
       "dev": true,
       "requires": {
@@ -17760,7 +12906,7 @@
     },
     "webpack-sources": {
       "version": "1.4.3",
-      "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz",
+      "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.4.3.tgz?cache=0&sync_timestamp=1603965333971&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwebpack-sources%2Fdownload%2Fwebpack-sources-1.4.3.tgz",
       "integrity": "sha1-7t2OwLko+/HL/plOItLYkPMwqTM=",
       "dev": true,
       "requires": {
@@ -17777,52 +12923,25 @@
       }
     },
     "websocket-driver": {
-      "version": "0.7.3",
-      "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.7.3.tgz",
-      "integrity": "sha1-otTg1PTxFvHmKX66WLBdQwEA6fk=",
+      "version": "0.6.5",
+      "resolved": "https://registry.npm.taobao.org/websocket-driver/download/websocket-driver-0.6.5.tgz",
+      "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
       "dev": true,
       "requires": {
-        "http-parser-js": ">=0.4.0 <0.4.11",
-        "safe-buffer": ">=5.1.0",
         "websocket-extensions": ">=0.1.1"
       }
     },
     "websocket-extensions": {
-      "version": "0.1.3",
-      "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.3.tgz",
-      "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=",
-      "dev": true
-    },
-    "whatwg-encoding": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npm.taobao.org/whatwg-encoding/download/whatwg-encoding-1.0.5.tgz",
-      "integrity": "sha1-WrrPd3wyFmpR0IXWtPPn0nET3bA=",
-      "dev": true,
-      "requires": {
-        "iconv-lite": "0.4.24"
-      }
-    },
-    "whatwg-mimetype": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/whatwg-mimetype/download/whatwg-mimetype-2.3.0.tgz",
-      "integrity": "sha1-PUseAxLSB5h5+Cav8Y2+7KWWD78=",
+      "version": "0.1.4",
+      "resolved": "https://registry.npm.taobao.org/websocket-extensions/download/websocket-extensions-0.1.4.tgz",
+      "integrity": "sha1-f4RzvIOd/YdgituV1+sHUhFXikI=",
       "dev": true
     },
-    "whatwg-url": {
-      "version": "6.5.0",
-      "resolved": "https://registry.npm.taobao.org/whatwg-url/download/whatwg-url-6.5.0.tgz?cache=0&sync_timestamp=1578023109671&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhatwg-url%2Fdownload%2Fwhatwg-url-6.5.0.tgz",
-      "integrity": "sha1-8t8Cv/F2/WUHDfdK1cy7WhmZZag=",
-      "dev": true,
-      "requires": {
-        "lodash.sortby": "^4.7.0",
-        "tr46": "^1.0.1",
-        "webidl-conversions": "^4.0.2"
-      }
-    },
     "which": {
       "version": "1.3.1",
       "resolved": "https://registry.npm.taobao.org/which/download/which-1.3.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fwhich%2Fdownload%2Fwhich-1.3.1.tgz",
       "integrity": "sha1-pFBD1U9YBTFtqNYvn1CRjT2nCwo=",
+      "dev": true,
       "requires": {
         "isexe": "^2.0.0"
       }
@@ -17830,16 +12949,18 @@
     "which-module": {
       "version": "2.0.0",
       "resolved": "https://registry.npm.taobao.org/which-module/download/which-module-2.0.0.tgz",
-      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+      "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+      "dev": true
     },
-    "wide-align": {
-      "version": "1.1.3",
-      "resolved": "https://registry.npm.taobao.org/wide-align/download/wide-align-1.1.3.tgz",
-      "integrity": "sha1-rgdOa9wMFKQx6ATmJFScYzsABFc=",
-      "dev": true,
-      "requires": {
-        "string-width": "^1.0.2 || 2"
-      }
+    "wmf": {
+      "version": "1.0.2",
+      "resolved": "https://r2.cnpmjs.org/wmf/-/wmf-1.0.2.tgz",
+      "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw=="
+    },
+    "word": {
+      "version": "0.3.0",
+      "resolved": "https://r2.cnpmjs.org/word/-/word-0.3.0.tgz",
+      "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA=="
     },
     "word-wrap": {
       "version": "1.2.3",
@@ -17847,12 +12968,6 @@
       "integrity": "sha1-YQY29rH3A4kb00dxzLF/uTtHB5w=",
       "dev": true
     },
-    "wordwrap": {
-      "version": "0.0.3",
-      "resolved": "https://registry.npm.taobao.org/wordwrap/download/wordwrap-0.0.3.tgz",
-      "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=",
-      "dev": true
-    },
     "worker-farm": {
       "version": "1.7.0",
       "resolved": "https://registry.npm.taobao.org/worker-farm/download/worker-farm-1.7.0.tgz",
@@ -17863,44 +12978,39 @@
       }
     },
     "wrap-ansi": {
-      "version": "2.1.0",
-      "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-2.1.0.tgz",
-      "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+      "version": "6.2.0",
+      "resolved": "https://registry.npm.taobao.org/wrap-ansi/download/wrap-ansi-6.2.0.tgz",
+      "integrity": "sha1-6Tk7oHEC5skaOyIUePAlfNKFblM=",
+      "dev": true,
       "requires": {
-        "string-width": "^1.0.1",
-        "strip-ansi": "^3.0.1"
+        "ansi-styles": "^4.0.0",
+        "string-width": "^4.1.0",
+        "strip-ansi": "^6.0.0"
       },
       "dependencies": {
-        "ansi-regex": {
-          "version": "2.1.1",
-          "resolved": "https://registry.npm.taobao.org/ansi-regex/download/ansi-regex-2.1.1.tgz",
-          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
-        },
-        "is-fullwidth-code-point": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
-          "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npm.taobao.org/ansi-styles/download/ansi-styles-4.3.0.tgz?cache=0&sync_timestamp=1606792371412&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fansi-styles%2Fdownload%2Fansi-styles-4.3.0.tgz",
+          "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=",
+          "dev": true,
           "requires": {
-            "number-is-nan": "^1.0.0"
+            "color-convert": "^2.0.1"
           }
         },
-        "string-width": {
-          "version": "1.0.2",
-          "resolved": "https://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
-          "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-2.0.1.tgz",
+          "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=",
+          "dev": true,
           "requires": {
-            "code-point-at": "^1.0.0",
-            "is-fullwidth-code-point": "^1.0.0",
-            "strip-ansi": "^3.0.0"
+            "color-name": "~1.1.4"
           }
         },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "resolved": "https://registry.npm.taobao.org/strip-ansi/download/strip-ansi-3.0.1.tgz?cache=0&sync_timestamp=1573280518303&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstrip-ansi%2Fdownload%2Fstrip-ansi-3.0.1.tgz",
-          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npm.taobao.org/color-name/download/color-name-1.1.4.tgz",
+          "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=",
+          "dev": true
         }
       }
     },
@@ -17911,55 +13021,37 @@
       "dev": true
     },
     "write": {
-      "version": "0.2.1",
-      "resolved": "https://registry.npm.taobao.org/write/download/write-0.2.1.tgz",
-      "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
+      "version": "1.0.3",
+      "resolved": "https://registry.npm.taobao.org/write/download/write-1.0.3.tgz",
+      "integrity": "sha1-CADhRSO5I6OH5BUSPIZWFqrg9cM=",
       "dev": true,
-      "optional": true,
       "requires": {
         "mkdirp": "^0.5.1"
       }
     },
-    "write-file-atomic": {
-      "version": "2.4.3",
-      "resolved": "https://registry.npm.taobao.org/write-file-atomic/download/write-file-atomic-2.4.3.tgz",
-      "integrity": "sha1-H9Lprh3z51uNjDZ0Q8aS1MqB9IE=",
-      "dev": true,
-      "requires": {
-        "graceful-fs": "^4.1.11",
-        "imurmurhash": "^0.1.4",
-        "signal-exit": "^3.0.2"
-      }
-    },
     "ws": {
-      "version": "5.2.2",
-      "resolved": "https://registry.npm.taobao.org/ws/download/ws-5.2.2.tgz",
-      "integrity": "sha1-3/7xSGa46NyRM1glFNG++vlumA8=",
+      "version": "6.2.1",
+      "resolved": "https://registry.npm.taobao.org/ws/download/ws-6.2.1.tgz?cache=0&sync_timestamp=1607113213006&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fws%2Fdownload%2Fws-6.2.1.tgz",
+      "integrity": "sha1-RC/fCkftZPWbal2P8TD0dI7VJPs=",
       "dev": true,
       "requires": {
         "async-limiter": "~1.0.0"
       }
     },
     "xlsx": {
-      "version": "0.14.1",
-      "resolved": "https://registry.npm.taobao.org/xlsx/download/xlsx-0.14.1.tgz",
-      "integrity": "sha1-7O31Nr0elAVUhv9IT1iI3KqJvT0=",
-      "requires": {
-        "adler-32": "~1.2.0",
-        "cfb": "^1.1.0",
-        "codepage": "~1.14.0",
-        "commander": "~2.17.1",
-        "crc-32": "~1.2.0",
-        "exit-on-epipe": "~1.0.1",
-        "ssf": "~0.10.2"
+      "version": "0.18.4",
+      "resolved": "https://r.cnpmjs.org/xlsx/-/xlsx-0.18.4.tgz",
+      "integrity": "sha512-u2plLVR/Ju2NxByPcWuxW3eOHEE/EH8w0vDyvHx8pFa8qO3fpq+l/57msr/Eq4cY5LErFOFD4sp4jIyPd6nFzQ==",
+      "requires": {
+        "adler-32": "~1.3.0",
+        "cfb": "~1.2.1",
+        "codepage": "~1.15.0",
+        "crc-32": "~1.2.1",
+        "ssf": "~0.11.2",
+        "wmf": "~1.0.1",
+        "word": "~0.3.0"
       }
     },
-    "xml-name-validator": {
-      "version": "3.0.0",
-      "resolved": "https://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-3.0.0.tgz",
-      "integrity": "sha1-auc+Bt5NjG5H+fsYH3jWSK1FfGo=",
-      "dev": true
-    },
     "xtend": {
       "version": "4.0.2",
       "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz",
@@ -17967,40 +13059,52 @@
       "dev": true
     },
     "y18n": {
-      "version": "3.2.1",
-      "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-3.2.1.tgz",
-      "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+      "version": "4.0.1",
+      "resolved": "https://registry.npm.taobao.org/y18n/download/y18n-4.0.1.tgz?cache=0&sync_timestamp=1606778028917&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fy18n%2Fdownload%2Fy18n-4.0.1.tgz",
+      "integrity": "sha1-jbK4PDHF11CZu4kLI/MJSJHiR9Q=",
+      "dev": true
     },
     "yallist": {
-      "version": "2.1.2",
-      "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
-      "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+      "version": "3.1.1",
+      "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-3.1.1.tgz",
+      "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=",
+      "dev": true
     },
     "yargs": {
-      "version": "10.1.2",
-      "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-10.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-10.1.2.tgz",
-      "integrity": "sha1-RU0HTCsWpRpD4vt4B+T53mnMtcU=",
-      "requires": {
-        "cliui": "^4.0.0",
-        "decamelize": "^1.1.1",
-        "find-up": "^2.1.0",
-        "get-caller-file": "^1.0.1",
-        "os-locale": "^2.0.0",
+      "version": "15.4.1",
+      "resolved": "https://registry.npm.taobao.org/yargs/download/yargs-15.4.1.tgz?cache=0&sync_timestamp=1607207963779&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs%2Fdownload%2Fyargs-15.4.1.tgz",
+      "integrity": "sha1-DYehbeAa7p2L7Cv7909nhRcw9Pg=",
+      "dev": true,
+      "requires": {
+        "cliui": "^6.0.0",
+        "decamelize": "^1.2.0",
+        "find-up": "^4.1.0",
+        "get-caller-file": "^2.0.1",
         "require-directory": "^2.1.1",
-        "require-main-filename": "^1.0.1",
+        "require-main-filename": "^2.0.0",
         "set-blocking": "^2.0.0",
-        "string-width": "^2.0.0",
+        "string-width": "^4.2.0",
         "which-module": "^2.0.0",
-        "y18n": "^3.2.1",
-        "yargs-parser": "^8.1.0"
+        "y18n": "^4.0.0",
+        "yargs-parser": "^18.1.2"
       }
     },
     "yargs-parser": {
-      "version": "8.1.0",
-      "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-8.1.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-8.1.0.tgz",
-      "integrity": "sha1-8TdqM7Ziml0GN4KUTacyYx6WaVA=",
+      "version": "18.1.3",
+      "resolved": "https://registry.npm.taobao.org/yargs-parser/download/yargs-parser-18.1.3.tgz?cache=0&sync_timestamp=1604886709178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyargs-parser%2Fdownload%2Fyargs-parser-18.1.3.tgz",
+      "integrity": "sha1-vmjEl1xrKr9GkjawyHA2L6sJp7A=",
+      "dev": true,
       "requires": {
-        "camelcase": "^4.1.0"
+        "camelcase": "^5.0.0",
+        "decamelize": "^1.2.0"
+      },
+      "dependencies": {
+        "camelcase": {
+          "version": "5.3.1",
+          "resolved": "https://registry.npm.taobao.org/camelcase/download/camelcase-5.3.1.tgz",
+          "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=",
+          "dev": true
+        }
       }
     },
     "yorkie": {
@@ -18015,9 +13119,20 @@
         "strip-indent": "^2.0.0"
       },
       "dependencies": {
+        "cross-spawn": {
+          "version": "5.1.0",
+          "resolved": "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-5.1.0.tgz",
+          "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+          "dev": true,
+          "requires": {
+            "lru-cache": "^4.0.1",
+            "shebang-command": "^1.2.0",
+            "which": "^1.2.9"
+          }
+        },
         "execa": {
           "version": "0.8.0",
-          "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1576749101742&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz",
+          "resolved": "https://registry.npm.taobao.org/execa/download/execa-0.8.0.tgz?cache=0&sync_timestamp=1606970975645&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexeca%2Fdownload%2Fexeca-0.8.0.tgz",
           "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
           "dev": true,
           "requires": {
@@ -18030,55 +13145,35 @@
             "strip-eof": "^1.0.0"
           }
         },
-        "normalize-path": {
-          "version": "1.0.0",
-          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz",
-          "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
+        "get-stream": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npm.taobao.org/get-stream/download/get-stream-3.0.0.tgz",
+          "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
           "dev": true
-        }
-      }
-    },
-    "yup": {
-      "version": "0.26.10",
-      "resolved": "https://registry.npm.taobao.org/yup/download/yup-0.26.10.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fyup%2Fdownload%2Fyup-0.26.10.tgz",
-      "integrity": "sha1-NUWDlmMokDj68l+s/AfhH9Z8DLE=",
-      "dev": true,
-      "requires": {
-        "@babel/runtime": "7.0.0",
-        "fn-name": "~2.0.1",
-        "lodash": "^4.17.10",
-        "property-expr": "^1.5.0",
-        "synchronous-promise": "^2.0.5",
-        "toposort": "^2.0.2"
-      },
-      "dependencies": {
-        "@babel/runtime": {
-          "version": "7.0.0",
-          "resolved": "https://registry.npm.taobao.org/@babel/runtime/download/@babel/runtime-7.0.0.tgz?cache=0&sync_timestamp=1583373757080&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fruntime%2Fdownload%2F%40babel%2Fruntime-7.0.0.tgz",
-          "integrity": "sha1-ret4/t/IVaoFvAQWQPP2+Y6FQkw=",
+        },
+        "lru-cache": {
+          "version": "4.1.5",
+          "resolved": "https://registry.npm.taobao.org/lru-cache/download/lru-cache-4.1.5.tgz?cache=0&sync_timestamp=1594427573763&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Flru-cache%2Fdownload%2Flru-cache-4.1.5.tgz",
+          "integrity": "sha1-i75Q6oW+1ZvJ4z3KuCNe6bz0Q80=",
           "dev": true,
           "requires": {
-            "regenerator-runtime": "^0.12.0"
+            "pseudomap": "^1.0.2",
+            "yallist": "^2.1.2"
           }
         },
-        "regenerator-runtime": {
-          "version": "0.12.1",
-          "resolved": "https://registry.npm.taobao.org/regenerator-runtime/download/regenerator-runtime-0.12.1.tgz?cache=0&sync_timestamp=1582505712016&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fregenerator-runtime%2Fdownload%2Fregenerator-runtime-0.12.1.tgz",
-          "integrity": "sha1-+hpxVEdkwDb4xJsToIsllMn4oN4=",
+        "normalize-path": {
+          "version": "1.0.0",
+          "resolved": "https://registry.npm.taobao.org/normalize-path/download/normalize-path-1.0.0.tgz",
+          "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=",
           "dev": true
         },
-        "toposort": {
-          "version": "2.0.2",
-          "resolved": "https://registry.npm.taobao.org/toposort/download/toposort-2.0.2.tgz",
-          "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=",
+        "yallist": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npm.taobao.org/yallist/download/yallist-2.1.2.tgz",
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
           "dev": true
         }
       }
-    },
-    "zrender": {
-      "version": "4.0.7",
-      "resolved": "https://registry.npm.taobao.org/zrender/download/zrender-4.0.7.tgz?cache=0&sync_timestamp=1583136509110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fzrender%2Fdownload%2Fzrender-4.0.7.tgz",
-      "integrity": "sha1-Fa6WCCL17+1BCZXTflEH/j3hDm0="
     }
   }
 }
diff --git a/WebSite/package.json b/WebSite/package.json
index 939263a..8a76f66 100644
--- a/WebSite/package.json
+++ b/WebSite/package.json
@@ -1,122 +1,54 @@
 {
-  "name": "vue-element-admin",
-  "version": "1.1.0",
-  "description": "A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features",
-  "author": "Pan <panfree23@gmail.com>",
-  "license": "MIT",
+  "name": "vue-element-next",
+  "version": "0.7.8",
+  "private": true,
   "scripts": {
-    "serve": "vue-cli-service serve --open",
+    "serve": "vue-cli-service serve",
+    "serve-mock": "vue-cli-service serve --mode mock",
     "build": "vue-cli-service build",
-    "build:prod": "vue-cli-service build",
-    "build:stage": "vue-cli-service build --mode staging",
-    "build:test": "vue-cli-service build --mode test",
-    "preview": "node build/index.js --preview",
-    "lint": "eslint --ext .js,.vue src",
-    "lint-fix": "eslint --fix --ext .js --ext .jsx --ext .vue src",
-    "test:unit": "jest --clearCache && vue-cli-service test:unit",
-    "test:ci": "npm run lint && npm run test:unit",
-    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
-    "new": "plop"
-  },
-  "husky": {
-    "hooks": {
-      "pre-commit": "lint-staged"
-    }
-  },
-  "lint-staged": {
-    "src/**/*.{js,vue}": [
-      "eslint --fix",
-      "git add"
-    ]
-  },
-  "keywords": [
-    "vue",
-    "admin",
-    "dashboard",
-    "element-ui",
-    "boilerplate",
-    "admin-template",
-    "management-system"
-  ],
-  "repository": {
-    "type": "git",
-    "url": "git+https://github.com/PanJiaChen/vue-element-admin.git"
-  },
-  "bugs": {
-    "url": "https://github.com/PanJiaChen/vue-element-admin/issues"
+    "lint": "vue-cli-service lint"
   },
   "dependencies": {
-    "axios": "0.18.1",
+    "@ant-design/icons-vue": "^7.0.1",
+    "@element-plus/icons": "0.0.11",
+    "@element-plus/icons-vue": "^2.3.1",
+    "ant-design-vue": "^4.0.0-rc.6",
+    "axios": "^0.21.1",
     "clipboard": "2.0.4",
-    "codemirror": "5.45.0",
-    "css-loader": "^3.5.3",
-    "driver.js": "0.9.5",
-    "dropzone": "5.5.1",
-    "echarts": "4.2.1",
-    "element-ui": "2.13.0",
-    "file-saver": "2.0.1",
-    "fuse.js": "3.4.4",
-    "js-cookie": "2.2.0",
-    "jsonlint": "1.6.3",
-    "jszip": "3.2.1",
-    "moment": "^2.24.0",
+    "core-js": "^3.6.5",
+    "crypto-js": "4.0.0",
+    "element-plus": "^1.0.2-beta.31",
+    "file-saver": "^2.0.5",
+    "js-cookie": "^3.0.5",
     "normalize.css": "7.0.0",
     "nprogress": "0.2.0",
-    "path-to-regexp": "2.4.0",
-    "screenfull": "4.2.0",
-    "script-loader": "0.7.2",
-    "showdown": "1.9.0",
-    "sortablejs": "1.8.4",
-    "tui-editor": "1.3.3",
-    "vue": "2.6.10",
-    "vue-count-to": "1.0.13",
-    "vue-jsonp": "^0.1.8",
-    "vue-router": "3.0.2",
-    "vue-splitpane": "1.0.4",
-    "vuedraggable": "2.20.0",
-    "vuex": "3.1.0",
-    "xlsx": "0.14.1"
+    "qs": "^6.10.3",
+    "vue": "3.0.5",
+    "vue-router": "^4.0.0-0",
+    "vuex": "^4.0.0-0",
+    "xlsx": "^0.18.4"
   },
   "devDependencies": {
-    "@babel/core": "7.0.0",
-    "@babel/register": "7.0.0",
-    "@vue/cli-plugin-babel": "3.5.3",
-    "@vue/cli-plugin-eslint": "^3.9.1",
-    "@vue/cli-plugin-unit-jest": "3.5.3",
-    "@vue/cli-service": "3.5.3",
+    "@fortawesome/fontawesome-free": "^5.15.1",
+    "@vue/cli-plugin-babel": "~4.5.0",
+    "@vue/cli-plugin-eslint": "~4.5.0",
+    "@vue/cli-plugin-router": "~4.5.0",
+    "@vue/cli-plugin-vuex": "~4.5.0",
+    "@vue/cli-service": "~4.5.0",
+    "@vue/compiler-sfc": "3.0.5",
     "@vue/eslint-config-prettier": "^6.0.0",
-    "@vue/test-utils": "1.0.0-beta.29",
-    "autoprefixer": "^9.5.1",
-    "babel-core": "7.0.0-bridge.0",
-    "babel-eslint": "10.0.1",
-    "babel-jest": "23.6.0",
+    "babel-eslint": "^10.1.0",
     "chalk": "2.4.2",
-    "chokidar": "2.1.5",
-    "connect": "3.6.6",
-    "eslint": "5.15.3",
-    "eslint-plugin-prettier": "^3.1.2",
-    "eslint-plugin-vue": "5.2.2",
-    "html-webpack-plugin": "3.2.0",
-    "husky": "1.3.1",
-    "lint-staged": "8.1.5",
+    "chokidar": "3.5.1",
+    "eslint": "^6.7.2",
+    "eslint-plugin-prettier": "^3.1.3",
+    "eslint-plugin-vue": "^7.0.0-0",
     "mockjs": "1.0.1-beta3",
-    "node-sass": "^4.9.0",
-    "plop": "2.3.0",
     "prettier": "^1.19.1",
-    "runjs": "^4.3.2",
-    "sass-loader": "^7.1.0",
-    "script-ext-html-webpack-plugin": "2.1.3",
-    "serve-static": "^1.13.2",
+    "sass": "^1.26.5",
+    "sass-loader": "^8.0.2",
+    "script-loader": "^0.7.2",
     "svg-sprite-loader": "4.1.3",
-    "svgo": "1.2.0",
-    "vue-template-compiler": "2.6.10"
-  },
-  "engines": {
-    "node": ">=8.9",
-    "npm": ">= 3.0.0"
-  },
-  "browserslist": [
-    "> 1%",
-    "last 2 versions"
-  ]
+    "vue-particles": "^1.0.9"
+  }
 }
diff --git a/WebSite/plop-templates/component/index.hbs b/WebSite/plop-templates/component/index.hbs
deleted file mode 100644
index 7661055..0000000
--- a/WebSite/plop-templates/component/index.hbs
+++ /dev/null
@@ -1,26 +0,0 @@
-{{#if template}}
-<template>
-  <div />
-</template>
-{{/if}}
-
-{{#if script}}
-<script>
-export default {
-  name: '{{ properCase name }}',
-  props: {},
-  data() {
-    return {}
-  },
-  created() {},
-  mounted() {},
-  methods: {}
-}
-</script>
-{{/if}}
-
-{{#if style}}
-<style lang="scss" scoped>
-
-</style>
-{{/if}}
diff --git a/WebSite/plop-templates/component/prompt.js b/WebSite/plop-templates/component/prompt.js
deleted file mode 100644
index 3723e8e..0000000
--- a/WebSite/plop-templates/component/prompt.js
+++ /dev/null
@@ -1,55 +0,0 @@
-const { notEmpty } = require('../utils.js')
-
-module.exports = {
-  description: 'generate vue component',
-  prompts: [{
-    type: 'input',
-    name: 'name',
-    message: 'component name please',
-    validate: notEmpty('name')
-  },
-  {
-    type: 'checkbox',
-    name: 'blocks',
-    message: 'Blocks:',
-    choices: [{
-      name: '<template>',
-      value: 'template',
-      checked: true
-    },
-    {
-      name: '<script>',
-      value: 'script',
-      checked: true
-    },
-    {
-      name: 'style',
-      value: 'style',
-      checked: true
-    }
-    ],
-    validate(value) {
-      if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
-        return 'Components require at least a <script> or <template> tag.'
-      }
-      return true
-    }
-  }
-  ],
-  actions: data => {
-    const name = '{{properCase name}}'
-    const actions = [{
-      type: 'add',
-      path: `src/components/${name}/index.vue`,
-      templateFile: 'plop-templates/component/index.hbs',
-      data: {
-        name: name,
-        template: data.blocks.includes('template'),
-        script: data.blocks.includes('script'),
-        style: data.blocks.includes('style')
-      }
-    }]
-
-    return actions
-  }
-}
diff --git a/WebSite/plop-templates/store/index.hbs b/WebSite/plop-templates/store/index.hbs
deleted file mode 100644
index 4f8e2dc..0000000
--- a/WebSite/plop-templates/store/index.hbs
+++ /dev/null
@@ -1,16 +0,0 @@
-{{#if state}}
-const state = {}
-{{/if}}
-
-{{#if mutations}}
-const mutations = {}
-{{/if}}
-
-{{#if actions}}
-const actions = {}
-{{/if}}
-
-export default {
-  namespaced: true,
-  {{options}}
-}
diff --git a/WebSite/plop-templates/store/prompt.js b/WebSite/plop-templates/store/prompt.js
deleted file mode 100644
index bcbc11d..0000000
--- a/WebSite/plop-templates/store/prompt.js
+++ /dev/null
@@ -1,62 +0,0 @@
-const { notEmpty } = require('../utils.js')
-
-module.exports = {
-  description: 'generate store',
-  prompts: [{
-    type: 'input',
-    name: 'name',
-    message: 'store name please',
-    validate: notEmpty('name')
-  },
-  {
-    type: 'checkbox',
-    name: 'blocks',
-    message: 'Blocks:',
-    choices: [{
-      name: 'state',
-      value: 'state',
-      checked: true
-    },
-    {
-      name: 'mutations',
-      value: 'mutations',
-      checked: true
-    },
-    {
-      name: 'actions',
-      value: 'actions',
-      checked: true
-    }
-    ],
-    validate(value) {
-      if (!value.includes('state') || !value.includes('mutations')) {
-        return 'store require at least state and mutations'
-      }
-      return true
-    }
-  }
-  ],
-  actions(data) {
-    const name = '{{name}}'
-    const { blocks } = data
-    const options = ['state', 'mutations']
-    const joinFlag = `,
-  `
-    if (blocks.length === 3) {
-      options.push('actions')
-    }
-
-    const actions = [{
-      type: 'add',
-      path: `src/store/modules/${name}.js`,
-      templateFile: 'plop-templates/store/index.hbs',
-      data: {
-        options: options.join(joinFlag),
-        state: blocks.includes('state'),
-        mutations: blocks.includes('mutations'),
-        actions: blocks.includes('actions')
-      }
-    }]
-    return actions
-  }
-}
diff --git a/WebSite/plop-templates/utils.js b/WebSite/plop-templates/utils.js
deleted file mode 100644
index 0310ca0..0000000
--- a/WebSite/plop-templates/utils.js
+++ /dev/null
@@ -1,9 +0,0 @@
-exports.notEmpty = name => {
-  return v => {
-    if (!v || v.trim === '') {
-      return `${name} is required`
-    } else {
-      return true
-    }
-  }
-}
diff --git a/WebSite/plop-templates/view/index.hbs b/WebSite/plop-templates/view/index.hbs
deleted file mode 100644
index 7661055..0000000
--- a/WebSite/plop-templates/view/index.hbs
+++ /dev/null
@@ -1,26 +0,0 @@
-{{#if template}}
-<template>
-  <div />
-</template>
-{{/if}}
-
-{{#if script}}
-<script>
-export default {
-  name: '{{ properCase name }}',
-  props: {},
-  data() {
-    return {}
-  },
-  created() {},
-  mounted() {},
-  methods: {}
-}
-</script>
-{{/if}}
-
-{{#if style}}
-<style lang="scss" scoped>
-
-</style>
-{{/if}}
diff --git a/WebSite/plop-templates/view/prompt.js b/WebSite/plop-templates/view/prompt.js
deleted file mode 100644
index 1d490ee..0000000
--- a/WebSite/plop-templates/view/prompt.js
+++ /dev/null
@@ -1,55 +0,0 @@
-const { notEmpty } = require('../utils.js')
-
-module.exports = {
-  description: 'generate a view',
-  prompts: [{
-    type: 'input',
-    name: 'name',
-    message: 'view name please',
-    validate: notEmpty('name')
-  },
-  {
-    type: 'checkbox',
-    name: 'blocks',
-    message: 'Blocks:',
-    choices: [{
-      name: '<template>',
-      value: 'template',
-      checked: true
-    },
-    {
-      name: '<script>',
-      value: 'script',
-      checked: true
-    },
-    {
-      name: 'style',
-      value: 'style',
-      checked: true
-    }
-    ],
-    validate(value) {
-      if (value.indexOf('script') === -1 && value.indexOf('template') === -1) {
-        return 'View require at least a <script> or <template> tag.'
-      }
-      return true
-    }
-  }
-  ],
-  actions: data => {
-    const name = '{{name}}'
-    const actions = [{
-      type: 'add',
-      path: `src/views/${name}/index.vue`,
-      templateFile: 'plop-templates/view/index.hbs',
-      data: {
-        name: name,
-        template: data.blocks.includes('template'),
-        script: data.blocks.includes('script'),
-        style: data.blocks.includes('style')
-      }
-    }]
-
-    return actions
-  }
-}
diff --git a/WebSite/plopfile.js b/WebSite/plopfile.js
deleted file mode 100644
index 57387bf..0000000
--- a/WebSite/plopfile.js
+++ /dev/null
@@ -1,9 +0,0 @@
-const viewGenerator = require('./plop-templates/view/prompt')
-const componentGenerator = require('./plop-templates/component/prompt')
-const storeGenerator = require('./plop-templates/store/prompt.js')
-
-module.exports = function(plop) {
-  plop.setGenerator('view', viewGenerator)
-  plop.setGenerator('component', componentGenerator)
-  plop.setGenerator('store', storeGenerator)
-}
diff --git a/WebSite/postcss.config.js b/WebSite/postcss.config.js
deleted file mode 100644
index 961986e..0000000
--- a/WebSite/postcss.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  plugins: {
-    autoprefixer: {}
-  }
-}
diff --git a/WebSite/public/favicon.ico b/WebSite/public/favicon.ico
index 34b63ac63a87ee3ea8e7a0f3f5b5406c437e2112..f59ac780025ac465c389393f1a16cf832c39ce95 100644
GIT binary patch
literal 4286
zcmeH~Sx8h-7=X`cs1Je?5j{j%V>ymXW@#dgmdm(gF4xgaLLw}pUPM}60u2f(@y?7Z
z<JN<TLAIDPqal%CJp@VgBo%=X;zLDBh<98%{b#0=*E@6XxigQ^8UB0L|NqYY|9h4}
zNCUs9C`6v<ek4L$5kfi;XhKIoNV_{h-~SZ22b}FWrv-DlO;IeSQ-KrYHBSs>1y$H$
zXP5X=EbwJY^4Zm2A0%%nupUESOxB_9C_H5`DzQC%7E?xG6nU-m9&K-0_bz<9J%!EZ
zxlVaY{`b^8&j~Tyi~dgd1-3nSksX7tuCCe;|4F_z3LWvqIZt9R;S-s(X0v@@E-&<L
z&HvVXyMEAU*I~ne*3EC|NM`eSZoq$%w?@^tAspC?gr76)@j+IX7BBE6tU3G?I%>kb
zE&A6|;E1m#Y%0_TV=YHnd<^?Um47tv(Rp^ggR;dwxZIJ%=JVW$w?*|WWn(E@fVm>(
zlQQvvp=&q(#uu~Z;1XI-ZdOm+II_SIcV5aSb^0AVYRO>nNes?yw5q-azMu5Pr#`sY
znZV}r+za)@^^qlG2X+8wO^#1|aJWZ12WP<-#(A(Nv{Y?hx2&#|?})o1$ENMsLprNq
z=9(CMhyiy=9n~|c|3e!B-@l_AUwQ6G3_d=ZbWpHXCJW81Gm)EGc{Qkd3dN)Q^~Am}
zE^W)R$G-2GZbHj1`;owN(~3SI^RrfxE19YUzQ0L1ayg8-PK|+ouPO4$eZkEA9Z&Uq
z<u~5cf$w8K$#F@0?uZV<_qmtq!}k@v#Ee1NN7vI^R7Ex~a_&oG`(8gKH2^Vqt>^<X
zKTAcbR8LyZcj#M{-ktQpzEm&OgMFq>k?)CtS*j<lpPeY$WVFZ5G5Bk+FMF+Lp|xro
z@K+dfn057Cki8ogIueWwHimU6yPrV}#u<EwfhkM;&f+rMGw!nZa30r+b;M<e!5Jo>
z=X%9Dv<&x*Fkmk*_%744G}-e^XseC{{t{yjKj2;xM!7VHJD!Qb#^9e}I$kb^7(8b1
z$(dLx)rYt~Wbj?boQdgDJ!u`{o67b9_du+7=k3)Xcz-LbE1NHYy{;M9Nn#zPGOY7N
z_qinZU(I4NFFP%=>p;o&zt)FonvcMECe$Mn!5C9%)L={nA&mdXFN7MXtZEuFi3pmB
YokFlj=0j&9sH~UfL*2cZs{rt%-;yi*S^xk5

literal 67646
zcmeHQ33wdEm2O$a2gEi66S8a^!){2(X2Y@}*zze`)?rJU(MUFiMYeol`2frK#KsuO
zmSjtF$~K2NVhlNfB)}R7SkfFaCWOr{`-R<PITFnGWxw6rWZ5JvA?f}9>N#4YIW(H-
zo|aUj@2RJ{r>m>p|LWDNSFfrSr2u~|Eeif$u3R;tK>3)WC|7}SiYLW+e&x3_lNCW)
zTK<<DkQ|U4kQ|U4kQ|U4kQ|U4kQ|U4kQ|U4kQ|U4kQ|U4kQ|U4kQ|U4kQ|U4kQ|U4
zkQ|U4kQ|U4kQ|U4$Q=jV{%XY?v@4!ajp7N`;Cuh07ip54*GU0~;tkX&ErA8OD}>C+
zR1SCpF}#VnD^NAY(^oSQ_)Y=-Q*rK69RC8x%Ygl*pi6-NM{#|U$L|<_q}x%@6|58T
zLYZ(QKeyk8bhWAVkPjO?2iki|(6)h5$e}p<YT1@20pBY@vp_46K8WK<P&eqipdWyK
z2<-Vi1bPa;xz7`**^BQtL1)av@oJp=q$^;ba^EZUQF)-g@cC;8UpV<oLpk6I)Ix_l
z6j!in9PqyexUB^FK*aWcK<W_a|8UP+pznZ=f^G#>LQj0&7qVaE>Z7c&zo=1K1Eq%6
zPiCH&1Bd<PXp=U@8L0aRu>l<cy#jh4G!)F!-SZ3NOPTsI=nmjth5lk%_e%#M2kaxN
z6y<w~%PP<2jsrfnb+o_Ez~b{fLHi<L@ioxfpmg}<^7@B(-Z>Eaj^n`p2H2XH-4&`R
zaKVOzju8668Ca6LijVS~I{X!|<*Jo?14|3sA^XR{_hyjUxF?dKKcgH!1N|%L9(TY|
z2K#cdCuAS%3oX;eA1Jr{WXAz_z@{ANU04A7>+jL-p9Zi007`^MKF@uCGW`m47X8B(
z*pZ(BUEm4TVO(ifyuDHmh9U*zoy%WY2;57-+wX(^1j;AQ>7GrUKw0=Ps1sD|_1iAy
z_{598q3GG6aAEY`)74uI>}zU4Z-CPA-ip`%8|8iwRO1cVF6jz!jA|RbfM!s07yWm^
znsU&OKvu*ylQR7rb@)2yMo*~vLfA1%M@ZU;iNwK!@f7@aw4c5Jew`fw*z4tl`rs7s
zU)>q3yb!iRLCeb(&<S?sXwT9_>=<?D?*H}-j-lwMeFVhumY#nj<@+yDuU^!14eZ*F
z0slhk1UG!m2Tv~;b(lvg41Um`!ts3*_+ykm$4WBv9_slbr~x$18CqQE1rOlUjId<X
z9Jl+gQM&r-3ZVDt%Y7YWC7g^bOJvM|zRunVU2x_07cMVgpU^dm<{Q*kUspPUmE(c?
z1E7(r_tVJ{>m7g`Yy$q5yZX>4Kn_O3$Axhb>N*GY|4&dlK8^J2zXK1R2Q`8xQ`s+)
zM)Jqyw-=zk$3cGtjdXkmTfbj}7ta9uTF^vKpqe~V=o24FANcs-=d*tvb^G^WgMFYz
zbtfUr4-XdK!Tyfp#z!&VGy{FZcwcC#LVY<>K41Nh-SqYB0?{5GEKl<GyN*-U>Rk_1
zsQd0NA4tc_#kJ07Z7SMqF3U*U;2qF@#Jv1f+lysmFz1AJQ#b6z0ArphsMnLj0eg3^
zUEOh@L|s`qLr?>bdRn<;hPq~Hk&ppzUrzCl$P)X<K8%xY0{&Ayuo1nGgW>!^eHMa-
zg^#}j?RxuN3)PM5=c=n~W~wVHAP2x)Pb(^}Q*Yb5Ky^N!a~%+o0Umz~dKj@u^ST0c
zV-S-vEJeWCEByT1Q5VKu>FZ~?@9gh)9a^Mr**0Ho{aU4ZM^~A;sd28_V4K+w|CNhp
zsH<y>)B}$$R-xOBuE)Q@hj=^iXI!h&)?GHN<iP2-UkKb!SRH%z<*i?@RByg%w$Sg*
z4^;?U4?k6{-r6)@>ko8#fO=uCw^Vie4acA5pxyKg@Go)ttH&OFu~s>PSmsmRw_08n
z;OC&-|FY%rN88_a$AT!%TW*`Lc0OlQ+n%UWH{Lu~Wt-Rc0ZcdTC^ote(CZfZ5#NE1
z+5x&`f8Qd@+XX(v*CS?X3ChiJuD&kT`i{0wtT%0#8}08`*=MSat7og5HqKMm-7qUE
z7kU|3v#dz;6DHS<@llT>Hu~D5y>*4qTb9)UzFylHjAz%I%%6;9i+23MuPjm5ub8dj
zkG8#{{5o|7j+BGdj-rJ4H&o3~ceO84Ic6}qj?@LOf$A}rK8bdL6+gb9?E;kXu*tm1
z91H0F-LU%_s$u5=bGGZPyNlKJD`yYX`#KwdW5lMN#j2~vbo?WAWPEBn@SldGa=*o5
z44|7XMY$fcGX8A)?Bh4AofFmlYwC)`7=X6mfPP<(KfbT~hgoVn?$2W#e~)KB0s6Zy
zbuTM$`K=RY0=c{b<>LHzKKYaK*>1mGy}fhMK>ZFqpzrIGeP<uAZQnxG0H1Kma>wzM
zakDRBook6Z=oo92IYspSSD{>%jql^w{m_%N@6q-LiFYD7*t~gOzVVO9${WzR%YpxR
z#uw!K1MC^=!Sz*<@>%Lg-On*UeL0D69n?9<4ef+O-$ox`yf0`l{QD{J-w6CC<y!`T
z`*k48`u*s;+3PD)sl$_EO}&stH;6s}zJolB1Cq(Z&w>4J5Z5c^O$`A1nIMi;l9e;B
z=c)TS=1YY=$No3pG%KZya6W+Z1)Mjuhz=lM!!lrl9>~x5(9-y0%*Q$2RBfL=Uity=
zyr*2)`N{MEf45=H95D_sVLl*}HuDQ$-vpZ2b*2h?UYNVTftB&6?%(4oO^g3ljPE<1
zsaCh&xiI-}(Lb!h9MSF$_<|r;7SnhCg|%t*DAU-^fVr^*R>q(H-p!ll4IKCB#`kR3
zP1}oA#(K1zT&%9bd~mY9g1@Ezn0BDWbO7b?Cx|5|+0(t=R9nEx_}_VNx#ri^;T?}H
z`*n`(ou}>40XB8*^~uKx#J_RX9JTcum8wB;A=&DcvzUwd8#mUfn)R_V{`B`!XUAh6
zO+%+M&S(Gea?ze$-FEndF+Z3>UYOq<N6NCr$*B9eZuunezl8I0W_+xQKie{Obt)`*
zjlO;7^YHD5$Mu{eS`FWDvin3Ifce71Pg`mnpqD4k!)^io=b41R<;MTi%^dTKIlW}#
zdYtFDulXUw_w+e5{y_!~|6{efz9GeU5i-L$B+7|J`vBJE2cR$d5LamQ2hXvb|BrZX
z-Blc&>xpm691pHtUL?i_ZvDI-@b3Wr8!=CmY#b=^!kplp_m%70oYlT_uE2va!4&RU
zVdMwT`7Fpfai74j^E;Z|&-wj$?3v~`zUAS?1Lt&cFXKIL+XEXQncfK728<bD94YE<
zRr)FBW{P}$HoWoGxDV?8DbPPzg%2E;(U(KJE*XZ5`DGj!b^U;H<9^Bp;{%f2PZ?so
z=v@zL@q+{Mu!c;~C+kD|Ki^1O5YPAo=sC;q0KS>+`xlDXo<wb5oTJ?j8;^Z|#O{lf
zpYp?aQ2GsM>m|(teZVcZ%+uzCtbzAHS%yylbJm~k>NRdGfO)8k!MhU?{^j)u?5O)0
zvzbiyNARRCKUw?dIFRcD=o^UqKGBhJV-_9@QXVibXWxwZp+cj20PJ@$5zpWry@}+{
z)N{1Q>BAGToGJQm>h8Us(xhc$K8y{gjhLzrApU#3mh}a&e(VFD1&ucfe@|~E*RyT}
zCFQ3n*U<K9yU~}I3NyB2;zl`18qY&L0^9DEE%TG=5sm@rE8gR_H2%coZM4rT48xy$
zJz;M&5M!3}Cj;!a;gjK7o^<$gJ~*N7*Oi}RNMT1TPTU93x5Std_BHG;@>+LYxf7J*
zm*}I7GXNl1@HunOhc^>E+dRGi|2FvL*WHLX{uH{O@w|IHWr*WQEvxJU*tf5))#8N*
z^#90*&*3;>|M3bd`-0wsjl12b_RoA_Uwj(a`}2uE<Fgs3KLDrjcs+U^xV1ip`5VYf
z%JOEQPv~nhX^mLwGAGsp?;}RnX(aww%RU*rd?+P96PIl$^+|XS=Xx9A*NNgBk9#=H
zSnff`@j(VS4iIYwlH|vjQtF)M6Z9jektu_Dkc9u36SCiJB>qRc#hxbn@O;{v3Gp%d
zJmb99Ek_(z{cLRxH$fl3HU5m>81z~W;J?RRD%Oank}LWNb~KkHw<q(&lQ7ReMF0Gt
zk@(ZUgl8=WajlB!_%kMRC-!rQ*yIW4d?62OAs+|6oY}k$<*KnEwO*mGfj(nl2d3*+
z%;(Ps(ErDb#GiS4Lk{ls`Y-vwpD~%~>^`<puJLXE7GifY(9`VKx9wYyJT46V0{Z}t
zDGoxm;{A#F;78muF)p*W8;!pwVB;PD+}q#u_RskKbpCqU>O0VvXWT~NPo|G2l?}kY
zf%3JpwPf&pi+OzdE$s7+#^YbjKA;U`?w+r}hx>UX)cIkXjo5IV-+@Om)BO=yZhKtY
zGa{W0z*rL6p%&8tKZE{XXf*!J-xGAu4`klnkLYXJ_C>r#0(&ol7w7xw%Ngq04c@n_
zEy4Oh-I#!Vz^z;7ix@(S;r}M~oV(N<{Oy+kf75J$n2#p8pPsm|?PnXW!?{ASUziSa
zAz$<Zg?&L>Bi8;+%d8P&Kl~@O{l_pqA7=*shkMH~7hrz?&;29Fcsl^?|8{4o7PFnC
z{YUIR#`k7ZCdLFL!hh}cv!H*pcp)*qL|-&iJ(ErOlHB_T=%O`7&j0D<>JZ=M8L}@$
zS>8=jo~$s?=Slw^+Zt_pw(*Frk3SNB&I#!6&G<W>)%JK5{0i_bCuslr^+h*xuK?-*
zGvq)0Gk$_SWUk;l_ssZoVC@Osq4#mr{f9=^-+RU({PV)@3*%3$N&Wo)xV8oTa#npZ
z@TdNuFR)+U@v?xlur;ub$RawxiM<8SN1HSQex)O@lyd>&&<7j?{@m--uy#QFwe=m^
z{*4V)GsXH$uH|EFPXs5n+2${0AE!lIgTAA6HzwXMBqDn}Zdfzd3gf_Y;Q!3Gwtd7D
z>?04sUPX)tC<VP|B>rsA9j9#A*P~SUUfAx~7c_03kGSvfnh)4zjL{mjzc-b<;&~!2
z2;+!|Y>B=A`i1krTd;<V<A2hAtU0y7d{8I&f5EZS=Dwo}xZs`6Vo#uuk@!1bu!%Vr
z;@`L$_E*>r7kzQKKj8PBEzrd|+P{%Hfb%^4e2sV(bqxCkt~KR;qKpfr-`L3dr^)+O
z*he$kU%nyIEKNOn{f=>nt!Y9T8Ha8NANJj&&CN3gM_?Z5i-8Bv(I3kg4X)M8RT+ps
z_l)IyfUq;d&!pWi_K?GKx#ooWXY*$46@WFxxq5a6`TQR3Z>O)XX6%uk{Jew6eY%dm
zz^g%TWKizG^9nvc&db%8VgJ6c%@;X}Hh-{0rG5}L7=D|pG7x{Uj~M2e6Foap2F?f3
z=fE*TR(5CRZHG43Q+N-<C(!;)ZS(ODgUvY^W%1;S_wo5Kevkb<eJ)W#o2UK9z1q^o
zcVy06fhFUMxp(}Ab#p|&vwr2A*z+T0K{>dlT*R2cZip|tfoaBIl>+~GI80A-%z?7-
z-Je*8l6xMoPiGtl{dxz#TB#AfA9~W@b(tIsLbveQZI9vkk!Qyp4;x*Mfjs?R@OkSI
zf30D$-kA!KJ0#`=A2tGi=E*irovbHQ^evy8;Mt~^BPIj%w;sj2wx{?k^d5<O&o;mx
zShEaeGjC2P#uGF3Za$wy8~YUAPd?q#T`AsGpJ_Wa>i5mvMd$<U7omJlfeaf9An$zg
zKcCNLydB>ob4~jh8)I;cf^x|D9_bNr0eOoJ8{x9?3dVZ#F~3&;Jv(HKjK0wss5~Dy
zJPtC{Cp^Nj*6SIz`!m3P0mx|hvd&*sRp_RgVw73h0onIeY(w7!?q6)~E6ExgGcxG-
zZWVmOjtM9?{Q>6024v4?eS5RY_un9v2XlIkEA9?nubl9&Gy}e@pK%oL!1kRLK0&M#
zvYQqk1X;5RZrPTDZRS<P@z;C&_Q|fkTBS8unl&zFW<c8%?}#k~{`IH}-+PxWPe#lA
zTvKrz{<P1!0yTxcK(*rQtu_<7oIUI0YfT)ZOhtX}1xZ^lbsP8{c*Hf8*W=xw6Py^|
zq5UiSdm3_vM?Ny59zdPAXPEWh7nd3zqx28`B-~HwcC4wGhL~!l%R)ZAT*%C$&($+V
zggya7<_3_jQP>!r@0;-D9DuI>!pU!~QGh>ac<TC8a)LPu1#v>>!&ko_SdDgDfc+rH
z#ct57&c4bCoI4|p<PYP7Tp`;>(Wjk6y*~gM-L|ZjKi`>h4#Y9>wTPRX<O1fd(8z1=
z$>jLhndP(vJ_&jrM4y(`FfyV%+$ZNpAP?mKb7%(>Iz!O&z}`x8cgZlz<@wfNnS#CP
zXbaFDJPR^{-&V<!^Yh;WwPH`k&*3<xBUB08887Kjj`o=Q-i}=2m`z@cQ3Fv1=7B7;
zk0{ELE4leK^1>c$_HACj?J7^717qNk-M42d58OYZqvuAvN7%7o1j)cVsLTDpeL3PX
zrn&mi&QVXVfqQXg%6BXM-sP`TI(wFn!8=SS1K$S?H+z8NcKU42BKCO~j@O}2zo;v;
z3^oq>b_>MhSqbk%WpQKun6q~o-zR=8_}2@v`nZ5H%5^SpV;pk=WA`PPm%9vm%Z<l5
zVbgW`7bmK!JePz6e1Dm<cM0qP`{m%_gP>o5a@7~-Dj)hRUI#smxwuC7XRieQ6EJow
z;CwvVzvAk({=9q=2=ac~9f1D>1Ya@Ud+*o;KL0a_`ZZVh4J9AiaV*C-Kuxe!{ubl4
z^MHQ={j>DV3%?EGo#ZDs9N=8R&euxOe~R%T{UkpI4F$WQ-b4TNX^;>4Xcfk4SG)XG
zSl_CR*}DAJi?_=S=dF{A@D+pKt{$voM!XZ^AH3lITcDw0n(DsaAYb|+I6q0fQ;IhI
z*PX%2v9#ehR(HcEFF)pU0P8)3j>TAUGWuBVHMa%Cwn@EAUn*lH*heH9H}E|D?EDRX
z%RQ>-kD)#}1#)8C!MKDX$k?ZV^M%J=s;A!3bb1hTufufC-F&2sd!iQ@h%q!{NkTQ}
zp%0$w4m#jFcdP?JFW8>|etp306%c)GJiY{ZLHxP>5qx)IOtux@?VziX{!1J$Mm`rD
zdSUq(AKEzkaoNs|!!Q>)yZw02F>wM_oVXiyVr?Pt=e`pYaDF1rGu}8#z#p-P_VK`e
z9DHwMy@Bd6zB3$`GY_#&4Y5hJ%HiPBTog~{VIl`y7%z&L5)oGtZogsK(C`)e5kzsO
z@6|(nj(%MB<t73pA0;^;IUqS8IUqS8IUqS8IUqS8IUqS8IUqS8IUqS8IUqS8IUqS8
zIUqS8IUqS8IUqS8IUqS8IbbRWuveG-#Bt!9(*J~_Owpfs9{}mo=a8PRJ0b9krT;9_
z#nBTVigYYTW~V5H(d+MubnFS?bTosYc71&0h88Vd5SLb(!zZ-Mu_8v&;Sy-Y!^v<7
zqUmr3v2?M>FqYOb(5k~swGzeBT8Uz5tx8&TMIl6ny7Y8DK$jL7hO5sTL<x0i@c>;~
zlvtnU1N7<XacR~-f1MB1r};pAnl(t7ZjQSipDvEOK0Pjt0`<#3K8*tQyB?oLf%{z_
zL|Vsh!QpJvI=n@G>C!QI(h$xxtqM^J|3iKI-A_RE*W=R^fEL{kfJe%7F|G%7zi&qR
zT#7U<>j8-u*!VQ%P2T`mJbijP(>jJ0$EBN@)-ixd9Rsum8LObkURU8_@$*;(o3(VL
zg5lev6(TeFiAY>HyJ&&6tI-0B%JE#dfRUd^3RoQZeYk+pq*kEl?O~2I$F7qjy2~QN
X;@D+E7Ad=S_FbjlW&KY_+xPzm3MBT?

diff --git a/WebSite/public/index.html b/WebSite/public/index.html
index e6b877d..1cb2826 100644
--- a/WebSite/public/index.html
+++ b/WebSite/public/index.html
@@ -1,16 +1,25 @@
+<!--
+ * @Description: 
+ * @Autor: dongjunhua
+ * @Date: 2020-12-17 10:20:47
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-02-02 15:20:19
+-->
 <!DOCTYPE html>
-<html>
+<html lang="en">
   <head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="renderer" content="webkit">
-    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
+    <!-- <meta charset="utf-8" http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';default-src 'self';"> -->
+    <meta charset="utf-8" http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-eval' 'unsafe-inline'; style-src 'self' 'unsafe-inline';img-src 'self' data:;font-src 'self' data:">
+    <meta name="viewport" content="width=device-width,initial-scale=1.0">
     <link rel="icon" href="<%= BASE_URL %>favicon.ico">
+    <!-- <title><%= htmlWebpackPlugin.options.title %></title> -->
     <title><%= webpackConfig.name %></title>
-    <link rel="stylesheet" href="http://at.alicdn.com/t/font_1876535_e9h4x5vyl4.css"/>
   </head>
   <body>
-    <div id="app"></div>
+    <noscript>
+      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
+    </noscript>
+    <div id="app" class="light"></div>
     <!-- built files will be auto injected -->
   </body>
 </html>
diff --git a/WebSite/src/App.vue b/WebSite/src/App.vue
index 00fceee..e28d235 100644
--- a/WebSite/src/App.vue
+++ b/WebSite/src/App.vue
@@ -1,14 +1,35 @@
 <template>
-  <div id="app">
-    <router-view />
+  <div id="app-inner">
+    <router-view v-slot="{ Component }">
+      <transition name="fade-transform-top" mode="out-in">
+        <component :is="Component" />
+      </transition>
+    </router-view>
   </div>
 </template>
 
 <script>
+import { watch } from 'vue';
+import { useStore } from 'vuex';
 export default {
-  name: "App"
+  name: 'App',
+  setup() {
+    const store = useStore();
+
+    watch(
+      () => store.state.app.themes,
+      val => {
+        document.querySelector('#app').className = val.find(
+          t => t.active
+        ).className;
+      },
+      { immediate: true, deep: true }
+    );
+  }
 };
 </script>
-<style lang="scss">
-@import "./styles/reset";
+<style >
+.el-table__body tr.current-row>td{
+    background-color: #cce4ff !important;
+  }
 </style>
diff --git a/WebSite/src/api/article.js b/WebSite/src/api/article.js
deleted file mode 100644
index 1d9fa29..0000000
--- a/WebSite/src/api/article.js
+++ /dev/null
@@ -1,41 +0,0 @@
-import request from "@/utils/request";
-
-export function fetchList(query) {
-  return request({
-    url: "/vue-element-admin/article/list",
-    method: "get",
-    params: query
-  });
-}
-
-export function fetchArticle(id) {
-  return request({
-    url: "/vue-element-admin/article/detail",
-    method: "get",
-    params: { id }
-  });
-}
-
-export function fetchPv(pv) {
-  return request({
-    url: "/vue-element-admin/article/pv",
-    method: "get",
-    params: { pv }
-  });
-}
-
-export function createArticle(data) {
-  return request({
-    url: "/vue-element-admin/article/create",
-    method: "post",
-    data
-  });
-}
-
-export function updateArticle(data) {
-  return request({
-    url: "/vue-element-admin/article/update",
-    method: "post",
-    data
-  });
-}
diff --git a/WebSite/src/api/qiniu.js b/WebSite/src/api/qiniu.js
deleted file mode 100644
index c843100..0000000
--- a/WebSite/src/api/qiniu.js
+++ /dev/null
@@ -1,8 +0,0 @@
-import request from "@/utils/request";
-
-export function getToken() {
-  return request({
-    url: "/qiniu/upload/token", // 假地址 自行替换
-    method: "get"
-  });
-}
diff --git a/WebSite/src/api/remote-search.js b/WebSite/src/api/remote-search.js
deleted file mode 100644
index 2cccb11..0000000
--- a/WebSite/src/api/remote-search.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import request from "@/utils/request";
-
-export function searchUser(name) {
-  return request({
-    url: "/vue-element-admin/search/user",
-    method: "get",
-    params: { name }
-  });
-}
-
-export function transactionList(query) {
-  return request({
-    url: "/vue-element-admin/transaction/list",
-    method: "get",
-    params: query
-  });
-}
diff --git a/WebSite/src/api/role.js b/WebSite/src/api/role.js
deleted file mode 100644
index e861bb5..0000000
--- a/WebSite/src/api/role.js
+++ /dev/null
@@ -1,38 +0,0 @@
-import request from "@/utils/request";
-
-export function getRoutes() {
-  return request({
-    url: "/vue-element-admin/routes",
-    method: "get"
-  });
-}
-
-export function getRoles() {
-  return request({
-    url: "/vue-element-admin/roles",
-    method: "get"
-  });
-}
-
-export function addRole(data) {
-  return request({
-    url: "/vue-element-admin/role",
-    method: "post",
-    data
-  });
-}
-
-export function updateRole(id, data) {
-  return request({
-    url: `/vue-element-admin/role/${id}`,
-    method: "put",
-    data
-  });
-}
-
-export function deleteRole(id) {
-  return request({
-    url: `/vue-element-admin/role/${id}`,
-    method: "delete"
-  });
-}
diff --git a/WebSite/src/api/user.js b/WebSite/src/api/user.js
index d55d770..ccb04e1 100644
--- a/WebSite/src/api/user.js
+++ b/WebSite/src/api/user.js
@@ -1,31 +1,17 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-03-13 10:03:56
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-04-21 10:21:42
- */
-import request from "@/utils/request";
+import request from '@/core/base/request';
 
-export function login(data) {
-  return request({
-    url: "/vue-element-admin/user/login",
-    method: "post",
-    data
-  });
-}
+class User {
+  static setCurrent(data) {
+    return request.post('/user/pc/v1/setCurrent', data);
+  }
 
-export function getInfo(token) {
-  return request({
-    url: "/vue-element-admin/user/info",
-    method: "get",
-    params: { token }
-  });
-}
+  static getCurrent() {
+    return request.post('/user/pc/v1/getCurrent');
+  }
 
-export function logout() {
-  return request({
-    url: "/vue-element-admin/user/logout",
-    method: "post"
-  });
+  static getToken(data) {
+    return request.post('login/sfpLoginVerify', data);
+  }
 }
+
+export default User;
diff --git a/WebSite/src/assets/configs/default.json b/WebSite/src/assets/configs/default.json
deleted file mode 100644
index c89256b..0000000
--- a/WebSite/src/assets/configs/default.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "title": "default",
-  "recognizeId": "seasky_base_data"
-}
diff --git a/WebSite/src/assets/configs/staging.json b/WebSite/src/assets/configs/staging.json
deleted file mode 100644
index d5649cb..0000000
--- a/WebSite/src/assets/configs/staging.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "title": "staging",
-  "recognizeId": "seasky_base_data"
-}
diff --git a/WebSite/src/assets/configs/test.json b/WebSite/src/assets/configs/test.json
deleted file mode 100644
index 95de420..0000000
--- a/WebSite/src/assets/configs/test.json
+++ /dev/null
@@ -1,4 +0,0 @@
-{
-  "title": "test",
-  "recognizeId": "seasky_base_data"
-}
diff --git a/WebSite/src/components/BackToTop/index.vue b/WebSite/src/components/BackToTop/index.vue
deleted file mode 100644
index eb313d5..0000000
--- a/WebSite/src/components/BackToTop/index.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
-  <transition :name="transitionName">
-    <div
-      v-show="visible"
-      :style="customStyle"
-      class="back-to-ceiling"
-      @click="backToTop"
-    >
-      <svg
-        width="16"
-        height="16"
-        viewBox="0 0 17 17"
-        xmlns="http://www.w3.org/2000/svg"
-        class="Icon Icon--backToTopArrow"
-        aria-hidden="true"
-        style="height:16px;width:16px"
-      >
-        <path
-          d="M12.036 15.59a1 1 0 0 1-.997.995H5.032a.996.996 0 0 1-.997-.996V8.584H1.03c-1.1 0-1.36-.633-.578-1.416L7.33.29a1.003 1.003 0 0 1 1.412 0l6.878 6.88c.782.78.523 1.415-.58 1.415h-3.004v7.004z"
-        />
-      </svg>
-    </div>
-  </transition>
-</template>
-
-<script>
-export default {
-  name: "BackToTop",
-  props: {
-    visibilityHeight: {
-      type: Number,
-      default: 400
-    },
-    backPosition: {
-      type: Number,
-      default: 0
-    },
-    customStyle: {
-      type: Object,
-      default: function() {
-        return {
-          right: "50px",
-          bottom: "50px",
-          width: "40px",
-          height: "40px",
-          "border-radius": "4px",
-          "line-height": "45px",
-          background: "#e7eaf1"
-        };
-      }
-    },
-    transitionName: {
-      type: String,
-      default: "fade"
-    }
-  },
-  data() {
-    return {
-      visible: false,
-      interval: null,
-      isMoving: false
-    };
-  },
-  mounted() {
-    window.addEventListener("scroll", this.handleScroll);
-  },
-  beforeDestroy() {
-    window.removeEventListener("scroll", this.handleScroll);
-    if (this.interval) {
-      clearInterval(this.interval);
-    }
-  },
-  methods: {
-    handleScroll() {
-      this.visible = window.pageYOffset > this.visibilityHeight;
-    },
-    backToTop() {
-      if (this.isMoving) return;
-      const start = window.pageYOffset;
-      let i = 0;
-      this.isMoving = true;
-      this.interval = setInterval(() => {
-        const next = Math.floor(this.easeInOutQuad(10 * i, start, -start, 500));
-        if (next <= this.backPosition) {
-          window.scrollTo(0, this.backPosition);
-          clearInterval(this.interval);
-          this.isMoving = false;
-        } else {
-          window.scrollTo(0, next);
-        }
-        i++;
-      }, 16.7);
-    },
-    easeInOutQuad(t, b, c, d) {
-      if ((t /= d / 2) < 1) return (c / 2) * t * t + b;
-      return (-c / 2) * (--t * (t - 2) - 1) + b;
-    }
-  }
-};
-</script>
-
-<style scoped>
-.back-to-ceiling {
-  position: fixed;
-  display: inline-block;
-  text-align: center;
-  cursor: pointer;
-}
-
-.back-to-ceiling:hover {
-  background: #d5dbe7;
-}
-
-.fade-enter-active,
-.fade-leave-active {
-  transition: opacity 0.5s;
-}
-
-.fade-enter,
-.fade-leave-to {
-  opacity: 0;
-}
-
-.back-to-ceiling .Icon {
-  fill: #9aaabf;
-  background: none;
-}
-</style>
diff --git a/WebSite/src/components/Breadcrumb/index.vue b/WebSite/src/components/Breadcrumb/index.vue
deleted file mode 100644
index 4a73c70..0000000
--- a/WebSite/src/components/Breadcrumb/index.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-08 12:38:19
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-08-15 11:27:38
--->
-<template>
-  <el-breadcrumb class="app-breadcrumb" separator="/">
-    <transition-group name="breadcrumb">
-      <el-breadcrumb-item v-for="(item, index) in levelList" :key="item.id">
-        <span
-          v-if="item.redirect === 'noRedirect' || index == levelList.length - 1"
-          class="no-redirect"
-          >{{ item.meta.title }}</span
-        >
-        <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
-      </el-breadcrumb-item>
-    </transition-group>
-  </el-breadcrumb>
-</template>
-
-<script>
-import { deepClone } from "@/utils/index.js";
-import pathToRegexp from "path-to-regexp";
-import { mapGetters } from "vuex";
-export default {
-  data() {
-    return {
-      levelList: null
-    };
-  },
-  computed: {
-    ...mapGetters(["menuTree"])
-  },
-  watch: {
-    $route(route) {
-      // if you go to the redirect page, do not update the breadcrumbs
-      if (route.path.startsWith("/redirect/")) {
-        return;
-      }
-      // this.getBreadcrumb();
-      this.getBreadcrumbFromMenu();
-    }
-  },
-  created() {
-    // this.getBreadcrumb();
-    this.getBreadcrumbFromMenu();
-  },
-  methods: {
-    getBreadcrumbFromMenu() {
-      this.levelList = [];
-      const matched = this.$route.matched.filter(
-        item => item.meta && item.meta.title
-      );
-      if (matched && matched.length === 1 && matched[0].name === "Home") {
-        this.levelList.unshift({
-          id: "0",
-          redirect: "noRedirect",
-          path: `/i/`,
-          meta: { title: "首页" }
-        });
-      } else {
-        const menu = deepClone(this.menuTree);
-        menu.forEach(m => this.filterMenuNode(m, this.$route.path));
-      }
-    },
-    filterMenuNode(node, path) {
-      if (node.children && node.children.length > 0) {
-        node.children.forEach(c => this.filterMenuNode(c, path));
-        node.children = node.children.filter(
-          c =>
-            `/i/${c.routingUrl}` === path ||
-            (c.children && c.children.length > 0)
-        );
-      }
-      if (
-        `/i/${node.routingUrl}` === path ||
-        (node.children && node.children.length > 0)
-      ) {
-        this.levelList.unshift({
-          id: node.id,
-          redirect: "noRedirect",
-          path: `/i/${node.routingUrl}`,
-          meta: { title: node.name }
-        });
-      }
-    },
-    // getBreadcrumb() {
-    //   // only show routes with meta.title
-    //   let matched = this.$route.matched.filter(
-    //     item => item.meta && item.meta.title
-    //   );
-    //   const first = matched[0];
-    //   if (!this.isDashboard(first)) {
-    //     matched = [{ path: "/", meta: { title: "首页" } }].concat(matched);
-    //   }
-
-    //   this.levelList = matched.filter(
-    //     item => item.meta && item.meta.title && item.meta.breadcrumb !== false
-    //   );
-    // },
-    // isDashboard(route) {
-    //   const name = route && route.name;
-    //   if (!name) {
-    //     return false;
-    //   }
-    //   return (
-    //     name.trim().toLocaleLowerCase() === "Dashboard".toLocaleLowerCase()
-    //   );
-    // },
-    pathCompile(path) {
-      // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
-      const { params } = this.$route;
-      var toPath = pathToRegexp.compile(path);
-      return toPath(params);
-    },
-    handleLink(item) {
-      const { redirect, path } = item;
-      if (redirect) {
-        this.$router.push(redirect);
-        return;
-      }
-      this.$router.push(this.pathCompile(path));
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.app-breadcrumb.el-breadcrumb {
-  display: inline-block;
-  font-size: 14px;
-  line-height: 50px;
-  margin-left: 8px;
-
-  .no-redirect {
-    color: #97a8be;
-    cursor: text;
-  }
-}
-</style>
diff --git a/WebSite/src/components/Charts/Keyboard.vue b/WebSite/src/components/Charts/Keyboard.vue
deleted file mode 100644
index 05af311..0000000
--- a/WebSite/src/components/Charts/Keyboard.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<template>
-  <div :id="id" :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-import resize from "./mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    id: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "200px"
-    },
-    height: {
-      type: String,
-      default: "200px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.initChart();
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(document.getElementById(this.id));
-
-      const xAxisData = [];
-      const data = [];
-      const data2 = [];
-      for (let i = 0; i < 50; i++) {
-        xAxisData.push(i);
-        data.push((Math.sin(i / 5) * (i / 5 - 10) + i / 6) * 5);
-        data2.push((Math.sin(i / 5) * (i / 5 + 10) + i / 6) * 3);
-      }
-      this.chart.setOption({
-        backgroundColor: "#08263a",
-        grid: {
-          left: "5%",
-          right: "5%"
-        },
-        xAxis: [
-          {
-            show: false,
-            data: xAxisData
-          },
-          {
-            show: false,
-            data: xAxisData
-          }
-        ],
-        visualMap: {
-          show: false,
-          min: 0,
-          max: 50,
-          dimension: 0,
-          inRange: {
-            color: [
-              "#4a657a",
-              "#308e92",
-              "#b1cfa5",
-              "#f5d69f",
-              "#f5898b",
-              "#ef5055"
-            ]
-          }
-        },
-        yAxis: {
-          axisLine: {
-            show: false
-          },
-          axisLabel: {
-            textStyle: {
-              color: "#4a657a"
-            }
-          },
-          splitLine: {
-            show: true,
-            lineStyle: {
-              color: "#08263f"
-            }
-          },
-          axisTick: {
-            show: false
-          }
-        },
-        series: [
-          {
-            name: "back",
-            type: "bar",
-            data: data2,
-            z: 1,
-            itemStyle: {
-              normal: {
-                opacity: 0.4,
-                barBorderRadius: 5,
-                shadowBlur: 3,
-                shadowColor: "#111"
-              }
-            }
-          },
-          {
-            name: "Simulate Shadow",
-            type: "line",
-            data,
-            z: 2,
-            showSymbol: false,
-            animationDelay: 0,
-            animationEasing: "linear",
-            animationDuration: 1200,
-            lineStyle: {
-              normal: {
-                color: "transparent"
-              }
-            },
-            areaStyle: {
-              normal: {
-                color: "#08263a",
-                shadowBlur: 50,
-                shadowColor: "#000"
-              }
-            }
-          },
-          {
-            name: "front",
-            type: "bar",
-            data,
-            xAxisIndex: 1,
-            z: 3,
-            itemStyle: {
-              normal: {
-                barBorderRadius: 5
-              }
-            }
-          }
-        ],
-        animationEasing: "elasticOut",
-        animationEasingUpdate: "elasticOut",
-        animationDelay(idx) {
-          return idx * 20;
-        },
-        animationDelayUpdate(idx) {
-          return idx * 20;
-        }
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/components/Charts/LineMarker.vue b/WebSite/src/components/Charts/LineMarker.vue
deleted file mode 100644
index a4e86f8..0000000
--- a/WebSite/src/components/Charts/LineMarker.vue
+++ /dev/null
@@ -1,276 +0,0 @@
-<template>
-  <div :id="id" :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-import resize from "./mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    id: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "200px"
-    },
-    height: {
-      type: String,
-      default: "200px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.initChart();
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(document.getElementById(this.id));
-
-      this.chart.setOption({
-        backgroundColor: "#394056",
-        title: {
-          top: 20,
-          text: "Requests",
-          textStyle: {
-            fontWeight: "normal",
-            fontSize: 16,
-            color: "#F1F1F3"
-          },
-          left: "1%"
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            lineStyle: {
-              color: "#57617B"
-            }
-          }
-        },
-        legend: {
-          top: 20,
-          icon: "rect",
-          itemWidth: 14,
-          itemHeight: 5,
-          itemGap: 13,
-          data: ["CMCC", "CTCC", "CUCC"],
-          right: "4%",
-          textStyle: {
-            fontSize: 12,
-            color: "#F1F1F3"
-          }
-        },
-        grid: {
-          top: 100,
-          left: "2%",
-          right: "2%",
-          bottom: "2%",
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            boundaryGap: false,
-            axisLine: {
-              lineStyle: {
-                color: "#57617B"
-              }
-            },
-            data: [
-              "13:00",
-              "13:05",
-              "13:10",
-              "13:15",
-              "13:20",
-              "13:25",
-              "13:30",
-              "13:35",
-              "13:40",
-              "13:45",
-              "13:50",
-              "13:55"
-            ]
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            name: "(%)",
-            axisTick: {
-              show: false
-            },
-            axisLine: {
-              lineStyle: {
-                color: "#57617B"
-              }
-            },
-            axisLabel: {
-              margin: 10,
-              textStyle: {
-                fontSize: 14
-              }
-            },
-            splitLine: {
-              lineStyle: {
-                color: "#57617B"
-              }
-            }
-          }
-        ],
-        series: [
-          {
-            name: "CMCC",
-            type: "line",
-            smooth: true,
-            symbol: "circle",
-            symbolSize: 5,
-            showSymbol: false,
-            lineStyle: {
-              normal: {
-                width: 1
-              }
-            },
-            areaStyle: {
-              normal: {
-                color: new echarts.graphic.LinearGradient(
-                  0,
-                  0,
-                  0,
-                  1,
-                  [
-                    {
-                      offset: 0,
-                      color: "rgba(137, 189, 27, 0.3)"
-                    },
-                    {
-                      offset: 0.8,
-                      color: "rgba(137, 189, 27, 0)"
-                    }
-                  ],
-                  false
-                ),
-                shadowColor: "rgba(0, 0, 0, 0.1)",
-                shadowBlur: 10
-              }
-            },
-            itemStyle: {
-              normal: {
-                color: "rgb(137,189,27)",
-                borderColor: "rgba(137,189,2,0.27)",
-                borderWidth: 12
-              }
-            },
-            data: [220, 182, 191, 134, 150, 120, 110, 125, 145, 122, 165, 122]
-          },
-          {
-            name: "CTCC",
-            type: "line",
-            smooth: true,
-            symbol: "circle",
-            symbolSize: 5,
-            showSymbol: false,
-            lineStyle: {
-              normal: {
-                width: 1
-              }
-            },
-            areaStyle: {
-              normal: {
-                color: new echarts.graphic.LinearGradient(
-                  0,
-                  0,
-                  0,
-                  1,
-                  [
-                    {
-                      offset: 0,
-                      color: "rgba(0, 136, 212, 0.3)"
-                    },
-                    {
-                      offset: 0.8,
-                      color: "rgba(0, 136, 212, 0)"
-                    }
-                  ],
-                  false
-                ),
-                shadowColor: "rgba(0, 0, 0, 0.1)",
-                shadowBlur: 10
-              }
-            },
-            itemStyle: {
-              normal: {
-                color: "rgb(0,136,212)",
-                borderColor: "rgba(0,136,212,0.2)",
-                borderWidth: 12
-              }
-            },
-            data: [120, 110, 125, 145, 122, 165, 122, 220, 182, 191, 134, 150]
-          },
-          {
-            name: "CUCC",
-            type: "line",
-            smooth: true,
-            symbol: "circle",
-            symbolSize: 5,
-            showSymbol: false,
-            lineStyle: {
-              normal: {
-                width: 1
-              }
-            },
-            areaStyle: {
-              normal: {
-                color: new echarts.graphic.LinearGradient(
-                  0,
-                  0,
-                  0,
-                  1,
-                  [
-                    {
-                      offset: 0,
-                      color: "rgba(219, 50, 51, 0.3)"
-                    },
-                    {
-                      offset: 0.8,
-                      color: "rgba(219, 50, 51, 0)"
-                    }
-                  ],
-                  false
-                ),
-                shadowColor: "rgba(0, 0, 0, 0.1)",
-                shadowBlur: 10
-              }
-            },
-            itemStyle: {
-              normal: {
-                color: "rgb(219,50,51)",
-                borderColor: "rgba(219,50,51,0.2)",
-                borderWidth: 12
-              }
-            },
-            data: [220, 182, 125, 145, 122, 191, 134, 150, 120, 110, 165, 122]
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/components/Charts/MixChart.vue b/WebSite/src/components/Charts/MixChart.vue
deleted file mode 100644
index 865755f..0000000
--- a/WebSite/src/components/Charts/MixChart.vue
+++ /dev/null
@@ -1,277 +0,0 @@
-<template>
-  <div :id="id" :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-import resize from "./mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    id: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "200px"
-    },
-    height: {
-      type: String,
-      default: "200px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.initChart();
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(document.getElementById(this.id));
-      const xData = (function() {
-        const data = [];
-        for (let i = 1; i < 13; i++) {
-          data.push(i + "month");
-        }
-        return data;
-      })();
-      this.chart.setOption({
-        backgroundColor: "#344b58",
-        title: {
-          text: "statistics",
-          x: "20",
-          top: "20",
-          textStyle: {
-            color: "#fff",
-            fontSize: "22"
-          },
-          subtextStyle: {
-            color: "#90979c",
-            fontSize: "16"
-          }
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            textStyle: {
-              color: "#fff"
-            }
-          }
-        },
-        grid: {
-          left: "5%",
-          right: "5%",
-          borderWidth: 0,
-          top: 150,
-          bottom: 95,
-          textStyle: {
-            color: "#fff"
-          }
-        },
-        legend: {
-          x: "5%",
-          top: "10%",
-          textStyle: {
-            color: "#90979c"
-          },
-          data: ["female", "male", "average"]
-        },
-        calculable: true,
-        xAxis: [
-          {
-            type: "category",
-            axisLine: {
-              lineStyle: {
-                color: "#90979c"
-              }
-            },
-            splitLine: {
-              show: false
-            },
-            axisTick: {
-              show: false
-            },
-            splitArea: {
-              show: false
-            },
-            axisLabel: {
-              interval: 0
-            },
-            data: xData
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            splitLine: {
-              show: false
-            },
-            axisLine: {
-              lineStyle: {
-                color: "#90979c"
-              }
-            },
-            axisTick: {
-              show: false
-            },
-            axisLabel: {
-              interval: 0
-            },
-            splitArea: {
-              show: false
-            }
-          }
-        ],
-        dataZoom: [
-          {
-            show: true,
-            height: 30,
-            xAxisIndex: [0],
-            bottom: 30,
-            start: 10,
-            end: 80,
-            handleIcon:
-              "path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z",
-            handleSize: "110%",
-            handleStyle: {
-              color: "#d3dee5"
-            },
-            textStyle: {
-              color: "#fff"
-            },
-            borderColor: "#90979c"
-          },
-          {
-            type: "inside",
-            show: true,
-            height: 15,
-            start: 1,
-            end: 35
-          }
-        ],
-        series: [
-          {
-            name: "female",
-            type: "bar",
-            stack: "total",
-            barMaxWidth: 35,
-            barGap: "10%",
-            itemStyle: {
-              normal: {
-                color: "rgba(255,144,128,1)",
-                label: {
-                  show: true,
-                  textStyle: {
-                    color: "#fff"
-                  },
-                  position: "insideTop",
-                  formatter(p) {
-                    return p.value > 0 ? p.value : "";
-                  }
-                }
-              }
-            },
-            data: [
-              709,
-              1917,
-              2455,
-              2610,
-              1719,
-              1433,
-              1544,
-              3285,
-              5208,
-              3372,
-              2484,
-              4078
-            ]
-          },
-
-          {
-            name: "male",
-            type: "bar",
-            stack: "total",
-            itemStyle: {
-              normal: {
-                color: "rgba(0,191,183,1)",
-                barBorderRadius: 0,
-                label: {
-                  show: true,
-                  position: "top",
-                  formatter(p) {
-                    return p.value > 0 ? p.value : "";
-                  }
-                }
-              }
-            },
-            data: [
-              327,
-              1776,
-              507,
-              1200,
-              800,
-              482,
-              204,
-              1390,
-              1001,
-              951,
-              381,
-              220
-            ]
-          },
-          {
-            name: "average",
-            type: "line",
-            stack: "total",
-            symbolSize: 10,
-            symbol: "circle",
-            itemStyle: {
-              normal: {
-                color: "rgba(252,230,48,1)",
-                barBorderRadius: 0,
-                label: {
-                  show: true,
-                  position: "top",
-                  formatter(p) {
-                    return p.value > 0 ? p.value : "";
-                  }
-                }
-              }
-            },
-            data: [
-              1036,
-              3693,
-              2962,
-              3810,
-              2519,
-              1915,
-              1748,
-              4675,
-              6209,
-              4323,
-              2865,
-              4298
-            ]
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/components/Charts/mixins/resize.js b/WebSite/src/components/Charts/mixins/resize.js
deleted file mode 100644
index 77d662d..0000000
--- a/WebSite/src/components/Charts/mixins/resize.js
+++ /dev/null
@@ -1,66 +0,0 @@
-import { debounce } from "@/utils";
-
-export default {
-  data() {
-    return {
-      $_sidebarElm: null,
-      $_resizeHandler: null
-    };
-  },
-  mounted() {
-    this.initListener();
-  },
-  activated() {
-    if (!this.$_resizeHandler) {
-      // avoid duplication init
-      this.initListener();
-    }
-
-    // when keep-alive chart activated, auto resize
-    this.resize();
-  },
-  beforeDestroy() {
-    this.destroyListener();
-  },
-  deactivated() {
-    this.destroyListener();
-  },
-  methods: {
-    // use $_ for mixins properties
-    // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
-    $_sidebarResizeHandler(e) {
-      if (e.propertyName === "width") {
-        this.$_resizeHandler();
-      }
-    },
-    initListener() {
-      this.$_resizeHandler = debounce(() => {
-        this.resize();
-      }, 100);
-      window.addEventListener("resize", this.$_resizeHandler);
-
-      this.$_sidebarElm = document.getElementsByClassName(
-        "sidebar-container"
-      )[0];
-      this.$_sidebarElm &&
-        this.$_sidebarElm.addEventListener(
-          "transitionend",
-          this.$_sidebarResizeHandler
-        );
-    },
-    destroyListener() {
-      window.removeEventListener("resize", this.$_resizeHandler);
-      this.$_resizeHandler = null;
-
-      this.$_sidebarElm &&
-        this.$_sidebarElm.removeEventListener(
-          "transitionend",
-          this.$_sidebarResizeHandler
-        );
-    },
-    resize() {
-      const { chart } = this;
-      chart && chart.resize();
-    }
-  }
-};
diff --git a/WebSite/src/components/DeptGroup/index.vue b/WebSite/src/components/DeptGroup/index.vue
deleted file mode 100644
index 4220bc6..0000000
--- a/WebSite/src/components/DeptGroup/index.vue
+++ /dev/null
@@ -1,105 +0,0 @@
-<template>
-  <div class="deptGroup" style="position:relative">
-    <el-input
-      :placeholder="holder"
-      name="treeInfo"
-      @click.native="showDeptInfo"
-      v-model="deptName"
-      :suffix-icon="treeVisble ? 'el-icon-caret-top' : 'el-icon-caret-bottom'"
-    ></el-input>
-    <div class="deptInfo" v-if="treeVisble">
-      <el-input
-        placeholder="输入关键字进行过滤"
-        name="treeInfo"
-        v-model="filterText"
-        @click.native="showDeptInfo"
-      >
-      </el-input>
-      <el-tree
-        class="filter-tree"
-        :data="deptList"
-        :props="defaultProps"
-        highlight-current
-        :default-expand-all="true"
-        :filter-node-method="filterNode"
-        ref="tree"
-        @node-click="handleNodeClick"
-      >
-      </el-tree>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  props: {
-    holder: {
-      type: String
-    },
-    deptList: {
-      type: Array
-    }
-  },
-  data() {
-    return {
-      treeVisble: false,
-      deptName: "", //部门名称
-      filterText: "",
-      defaultProps: {
-        children: "children",
-        label: "fullName"
-      },
-      event: null
-    };
-  },
-  mounted() {
-    document.body.addEventListener("click", e => {
-      if (this.event) {
-        if (e.target.name !== "treeInfo" || e.target !== this.event.target) {
-          this.treeVisble = false;
-        }
-      }
-    });
-  },
-  watch: {
-    filterText(val) {
-      this.$refs.tree.filter(val);
-    },
-    deptName(val) {
-      if (val == "") {
-        this.$emit("clearGroupId");
-      }
-    }
-  },
-  methods: {
-    showDeptInfo(e) {
-      this.event = e;
-      this.treeVisble = true;
-    },
-    // 树节点点击
-    handleNodeClick(data) {
-      this.deptName = data.fullName;
-      this.$emit("handleSetVal", data);
-      this.treeVisble = false;
-    },
-    filterNode(value, data) {
-      if (!value) return true;
-      return data.fullName.indexOf(value) !== -1;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.deptInfo {
-  // position: absolute;
-  position: fixed;
-  width: 209px;
-  height: 200px;
-  z-index: 10;
-  .el-tree {
-    height: 200px;
-    overflow: scroll;
-  }
-}
-</style>
diff --git a/WebSite/src/components/DndList/index.vue b/WebSite/src/components/DndList/index.vue
deleted file mode 100644
index c30eb14..0000000
--- a/WebSite/src/components/DndList/index.vue
+++ /dev/null
@@ -1,182 +0,0 @@
-<template>
-  <div class="dndList">
-    <div :style="{ width: width1 }" class="dndList-list">
-      <h3>{{ list1Title }}</h3>
-      <draggable
-        :set-data="setData"
-        :list="list1"
-        group="article"
-        class="dragArea"
-      >
-        <div
-          v-for="element in list1"
-          :key="element.id"
-          class="list-complete-item"
-        >
-          <div class="list-complete-item-handle">
-            {{ element.id }}[{{ element.author }}] {{ element.title }}
-          </div>
-          <div style="position:absolute;right:0px;">
-            <span
-              style="float: right ;margin-top: -20px;margin-right:5px;"
-              @click="deleteEle(element)"
-            >
-              <i style="color:#ff4949" class="el-icon-delete" />
-            </span>
-          </div>
-        </div>
-      </draggable>
-    </div>
-    <div :style="{ width: width2 }" class="dndList-list">
-      <h3>{{ list2Title }}</h3>
-      <draggable :list="list2" group="article" class="dragArea">
-        <div
-          v-for="element in list2"
-          :key="element.id"
-          class="list-complete-item"
-        >
-          <div class="list-complete-item-handle2" @click="pushEle(element)">
-            {{ element.id }} [{{ element.author }}] {{ element.title }}
-          </div>
-        </div>
-      </draggable>
-    </div>
-  </div>
-</template>
-
-<script>
-import draggable from "vuedraggable";
-
-export default {
-  name: "DndList",
-  components: { draggable },
-  props: {
-    list1: {
-      type: Array,
-      default() {
-        return [];
-      }
-    },
-    list2: {
-      type: Array,
-      default() {
-        return [];
-      }
-    },
-    list1Title: {
-      type: String,
-      default: "list1"
-    },
-    list2Title: {
-      type: String,
-      default: "list2"
-    },
-    width1: {
-      type: String,
-      default: "48%"
-    },
-    width2: {
-      type: String,
-      default: "48%"
-    }
-  },
-  methods: {
-    isNotInList1(v) {
-      return this.list1.every(k => v.id !== k.id);
-    },
-    isNotInList2(v) {
-      return this.list2.every(k => v.id !== k.id);
-    },
-    deleteEle(ele) {
-      for (const item of this.list1) {
-        if (item.id === ele.id) {
-          const index = this.list1.indexOf(item);
-          this.list1.splice(index, 1);
-          break;
-        }
-      }
-      if (this.isNotInList2(ele)) {
-        this.list2.unshift(ele);
-      }
-    },
-    pushEle(ele) {
-      for (const item of this.list2) {
-        if (item.id === ele.id) {
-          const index = this.list2.indexOf(item);
-          this.list2.splice(index, 1);
-          break;
-        }
-      }
-      if (this.isNotInList1(ele)) {
-        this.list1.push(ele);
-      }
-    },
-    setData(dataTransfer) {
-      // to avoid Firefox bug
-      // Detail see : https://github.com/RubaXa/Sortable/issues/1012
-      dataTransfer.setData("Text", "");
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.dndList {
-  background: #fff;
-  padding-bottom: 40px;
-  &:after {
-    content: "";
-    display: table;
-    clear: both;
-  }
-  .dndList-list {
-    float: left;
-    padding-bottom: 30px;
-    &:first-of-type {
-      margin-right: 2%;
-    }
-    .dragArea {
-      margin-top: 15px;
-      min-height: 50px;
-      padding-bottom: 30px;
-    }
-  }
-}
-
-.list-complete-item {
-  cursor: pointer;
-  position: relative;
-  font-size: 14px;
-  padding: 5px 12px;
-  margin-top: 4px;
-  border: 1px solid #bfcbd9;
-  transition: all 1s;
-}
-
-.list-complete-item-handle {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  margin-right: 50px;
-}
-
-.list-complete-item-handle2 {
-  overflow: hidden;
-  text-overflow: ellipsis;
-  white-space: nowrap;
-  margin-right: 20px;
-}
-
-.list-complete-item.sortable-chosen {
-  background: #4ab7bd;
-}
-
-.list-complete-item.sortable-ghost {
-  background: #30b08f;
-}
-
-.list-complete-enter,
-.list-complete-leave-active {
-  opacity: 0;
-}
-</style>
diff --git a/WebSite/src/components/DragSelect/index.vue b/WebSite/src/components/DragSelect/index.vue
deleted file mode 100644
index b255f2f..0000000
--- a/WebSite/src/components/DragSelect/index.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <el-select
-    ref="dragSelect"
-    v-model="selectVal"
-    v-bind="$attrs"
-    class="drag-select"
-    multiple
-    v-on="$listeners"
-  >
-    <slot />
-  </el-select>
-</template>
-
-<script>
-import Sortable from "sortablejs";
-
-export default {
-  name: "DragSelect",
-  props: {
-    value: {
-      type: Array,
-      required: true
-    }
-  },
-  computed: {
-    selectVal: {
-      get() {
-        return [...this.value];
-      },
-      set(val) {
-        this.$emit("input", [...val]);
-      }
-    }
-  },
-  mounted() {
-    this.setSort();
-  },
-  methods: {
-    setSort() {
-      const el = this.$refs.dragSelect.$el.querySelectorAll(
-        ".el-select__tags > span"
-      )[0];
-      this.sortable = Sortable.create(el, {
-        ghostClass: "sortable-ghost", // Class name for the drop placeholder,
-        setData: function(dataTransfer) {
-          dataTransfer.setData("Text", "");
-          // to avoid Firefox bug
-          // Detail see : https://github.com/RubaXa/Sortable/issues/1012
-        },
-        onEnd: evt => {
-          const targetRow = this.value.splice(evt.oldIndex, 1)[0];
-          this.value.splice(evt.newIndex, 0, targetRow);
-        }
-      });
-    }
-  }
-};
-</script>
-
-<style scoped>
-.drag-select >>> .sortable-ghost {
-  opacity: 0.8;
-  color: #fff !important;
-  background: #42b983 !important;
-}
-
-.drag-select >>> .el-tag {
-  cursor: pointer;
-}
-</style>
diff --git a/WebSite/src/components/Dropzone/index.vue b/WebSite/src/components/Dropzone/index.vue
deleted file mode 100644
index 2fadc74..0000000
--- a/WebSite/src/components/Dropzone/index.vue
+++ /dev/null
@@ -1,312 +0,0 @@
-<template>
-  <div :id="id" :ref="id" :action="url" class="dropzone">
-    <input type="file" name="file" />
-  </div>
-</template>
-
-<script>
-import Dropzone from "dropzone";
-import "dropzone/dist/dropzone.css";
-// import { getToken } from 'api/qiniu';
-
-Dropzone.autoDiscover = false;
-
-export default {
-  props: {
-    id: {
-      type: String,
-      required: true
-    },
-    url: {
-      type: String,
-      required: true
-    },
-    clickable: {
-      type: Boolean,
-      default: true
-    },
-    defaultMsg: {
-      type: String,
-      default: "上传图片"
-    },
-    acceptedFiles: {
-      type: String,
-      default: ""
-    },
-    thumbnailHeight: {
-      type: Number,
-      default: 200
-    },
-    thumbnailWidth: {
-      type: Number,
-      default: 200
-    },
-    showRemoveLink: {
-      type: Boolean,
-      default: true
-    },
-    maxFilesize: {
-      type: Number,
-      default: 2
-    },
-    maxFiles: {
-      type: Number,
-      default: 3
-    },
-    autoProcessQueue: {
-      type: Boolean,
-      default: true
-    },
-    useCustomDropzoneOptions: {
-      type: Boolean,
-      default: false
-    },
-    defaultImg: {
-      default: "",
-      type: [String, Array]
-    },
-    couldPaste: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      dropzone: "",
-      initOnce: true
-    };
-  },
-  watch: {
-    defaultImg(val) {
-      if (val.length === 0) {
-        this.initOnce = false;
-        return;
-      }
-      if (!this.initOnce) return;
-      this.initImages(val);
-      this.initOnce = false;
-    }
-  },
-  mounted() {
-    const element = document.getElementById(this.id);
-    const vm = this;
-    this.dropzone = new Dropzone(element, {
-      clickable: this.clickable,
-      thumbnailWidth: this.thumbnailWidth,
-      thumbnailHeight: this.thumbnailHeight,
-      maxFiles: this.maxFiles,
-      maxFilesize: this.maxFilesize,
-      dictRemoveFile: "Remove",
-      addRemoveLinks: this.showRemoveLink,
-      acceptedFiles: this.acceptedFiles,
-      autoProcessQueue: this.autoProcessQueue,
-      dictDefaultMessage:
-        '<i style="margin-top: 3em;display: inline-block" class="material-icons">' +
-        this.defaultMsg +
-        "</i><br>Drop files here to upload",
-      dictMaxFilesExceeded: "只能一个图",
-      previewTemplate:
-        '<div class="dz-preview dz-file-preview">  <div class="dz-image" style="width:' +
-        this.thumbnailWidth +
-        "px;height:" +
-        this.thumbnailHeight +
-        'px" ><img style="width:' +
-        this.thumbnailWidth +
-        "px;height:" +
-        this.thumbnailHeight +
-        'px" data-dz-thumbnail /></div>  <div class="dz-details"><div class="dz-size"><span data-dz-size></span></div> <div class="dz-progress"><span class="dz-upload" data-dz-uploadprogress></span></div>  <div class="dz-error-message"><span data-dz-errormessage></span></div>  <div class="dz-success-mark"> <i class="material-icons">done</i> </div>  <div class="dz-error-mark"><i class="material-icons">error</i></div></div>',
-      init() {
-        const val = vm.defaultImg;
-        if (!val) return;
-        if (Array.isArray(val)) {
-          if (val.length === 0) return;
-          val.map((v, i) => {
-            const mockFile = { name: "name" + i, size: 12345, url: v };
-            this.options.addedfile.call(this, mockFile);
-            this.options.thumbnail.call(this, mockFile, v);
-            mockFile.previewElement.classList.add("dz-success");
-            mockFile.previewElement.classList.add("dz-complete");
-            vm.initOnce = false;
-            return true;
-          });
-        } else {
-          const mockFile = { name: "name", size: 12345, url: val };
-          this.options.addedfile.call(this, mockFile);
-          this.options.thumbnail.call(this, mockFile, val);
-          mockFile.previewElement.classList.add("dz-success");
-          mockFile.previewElement.classList.add("dz-complete");
-          vm.initOnce = false;
-        }
-      },
-      accept: (file, done) => {
-        /* 七牛*/
-        // const token = this.$store.getters.token;
-        // getToken(token).then(response => {
-        //   file.token = response.data.qiniu_token;
-        //   file.key = response.data.qiniu_key;
-        //   file.url = response.data.qiniu_url;
-        //   done();
-        // })
-        done();
-      },
-      sending: (file, xhr, formData) => {
-        // formData.append('token', file.token);
-        // formData.append('key', file.key);
-        vm.initOnce = false;
-      }
-    });
-
-    if (this.couldPaste) {
-      document.addEventListener("paste", this.pasteImg);
-    }
-
-    this.dropzone.on("success", file => {
-      vm.$emit("dropzone-success", file, vm.dropzone.element);
-    });
-    this.dropzone.on("addedfile", file => {
-      vm.$emit("dropzone-fileAdded", file);
-    });
-    this.dropzone.on("removedfile", file => {
-      vm.$emit("dropzone-removedFile", file);
-    });
-    this.dropzone.on("error", (file, error, xhr) => {
-      vm.$emit("dropzone-error", file, error, xhr);
-    });
-    this.dropzone.on("successmultiple", (file, error, xhr) => {
-      vm.$emit("dropzone-successmultiple", file, error, xhr);
-    });
-  },
-  destroyed() {
-    document.removeEventListener("paste", this.pasteImg);
-    this.dropzone.destroy();
-  },
-  methods: {
-    removeAllFiles() {
-      this.dropzone.removeAllFiles(true);
-    },
-    processQueue() {
-      this.dropzone.processQueue();
-    },
-    pasteImg(event) {
-      const items = (event.clipboardData || event.originalEvent.clipboardData)
-        .items;
-      if (items[0].kind === "file") {
-        this.dropzone.addFile(items[0].getAsFile());
-      }
-    },
-    initImages(val) {
-      if (!val) return;
-      if (Array.isArray(val)) {
-        val.map((v, i) => {
-          const mockFile = { name: "name" + i, size: 12345, url: v };
-          this.dropzone.options.addedfile.call(this.dropzone, mockFile);
-          this.dropzone.options.thumbnail.call(this.dropzone, mockFile, v);
-          mockFile.previewElement.classList.add("dz-success");
-          mockFile.previewElement.classList.add("dz-complete");
-          return true;
-        });
-      } else {
-        const mockFile = { name: "name", size: 12345, url: val };
-        this.dropzone.options.addedfile.call(this.dropzone, mockFile);
-        this.dropzone.options.thumbnail.call(this.dropzone, mockFile, val);
-        mockFile.previewElement.classList.add("dz-success");
-        mockFile.previewElement.classList.add("dz-complete");
-      }
-    }
-  }
-};
-</script>
-
-<style scoped>
-.dropzone {
-  border: 2px solid #e5e5e5;
-  font-family: "Roboto", sans-serif;
-  color: #777;
-  transition: background-color 0.2s linear;
-  padding: 5px;
-}
-
-.dropzone:hover {
-  background-color: #f6f6f6;
-}
-
-i {
-  color: #ccc;
-}
-
-.dropzone .dz-image img {
-  width: 100%;
-  height: 100%;
-}
-
-.dropzone input[name="file"] {
-  display: none;
-}
-
-.dropzone .dz-preview .dz-image {
-  border-radius: 0px;
-}
-
-.dropzone .dz-preview:hover .dz-image img {
-  transform: none;
-  filter: none;
-  width: 100%;
-  height: 100%;
-}
-
-.dropzone .dz-preview .dz-details {
-  bottom: 0px;
-  top: 0px;
-  color: white;
-  background-color: rgba(33, 150, 243, 0.8);
-  transition: opacity 0.2s linear;
-  text-align: left;
-}
-
-.dropzone .dz-preview .dz-details .dz-filename span,
-.dropzone .dz-preview .dz-details .dz-size span {
-  background-color: transparent;
-}
-
-.dropzone .dz-preview .dz-details .dz-filename:not(:hover) span {
-  border: none;
-}
-
-.dropzone .dz-preview .dz-details .dz-filename:hover span {
-  background-color: transparent;
-  border: none;
-}
-
-.dropzone .dz-preview .dz-remove {
-  position: absolute;
-  z-index: 30;
-  color: white;
-  margin-left: 15px;
-  padding: 10px;
-  top: inherit;
-  bottom: 15px;
-  border: 2px white solid;
-  text-decoration: none;
-  text-transform: uppercase;
-  font-size: 0.8rem;
-  font-weight: 800;
-  letter-spacing: 1.1px;
-  opacity: 0;
-}
-
-.dropzone .dz-preview:hover .dz-remove {
-  opacity: 1;
-}
-
-.dropzone .dz-preview .dz-success-mark,
-.dropzone .dz-preview .dz-error-mark {
-  margin-left: -40px;
-  margin-top: -50px;
-}
-
-.dropzone .dz-preview .dz-success-mark i,
-.dropzone .dz-preview .dz-error-mark i {
-  color: white;
-  font-size: 5rem;
-}
-</style>
diff --git a/WebSite/src/components/ErrorLog/index.vue b/WebSite/src/components/ErrorLog/index.vue
deleted file mode 100644
index 5cf626b..0000000
--- a/WebSite/src/components/ErrorLog/index.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-<template>
-  <div v-if="errorLogs.length > 0">
-    <el-badge
-      :is-dot="true"
-      style="line-height: 25px;margin-top: -5px;"
-      @click.native="dialogTableVisible = true"
-    >
-      <el-button style="padding: 8px 10px;" size="small" type="danger">
-        <svg-icon icon-class="bug" />
-      </el-button>
-    </el-badge>
-
-    <el-dialog :visible.sync="dialogTableVisible" width="80%" append-to-body>
-      <div slot="title">
-        <span style="padding-right: 10px;">Error Log</span>
-        <el-button
-          size="mini"
-          type="primary"
-          icon="el-icon-delete"
-          @click="clearAll"
-          >Clear All</el-button
-        >
-      </div>
-      <el-table :data="errorLogs" border>
-        <el-table-column label="Message">
-          <template slot-scope="{ row }">
-            <div>
-              <span class="message-title">Msg:</span>
-              <el-tag type="danger">
-                {{ row.err.message }}
-              </el-tag>
-            </div>
-            <br />
-            <div>
-              <span class="message-title" style="padding-right: 10px;"
-                >Info:
-              </span>
-              <el-tag type="warning">
-                {{ row.vm.$vnode.tag }} error in {{ row.info }}
-              </el-tag>
-            </div>
-            <br />
-            <div>
-              <span class="message-title" style="padding-right: 16px;"
-                >Url:
-              </span>
-              <el-tag type="success">
-                {{ row.url }}
-              </el-tag>
-            </div>
-          </template>
-        </el-table-column>
-        <el-table-column label="Stack">
-          <template slot-scope="scope">
-            {{ scope.row.err.stack }}
-          </template>
-        </el-table-column>
-      </el-table>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "ErrorLog",
-  data() {
-    return {
-      dialogTableVisible: false
-    };
-  },
-  computed: {
-    errorLogs() {
-      return this.$store.getters.errorLogs;
-    }
-  },
-  methods: {
-    clearAll() {
-      this.dialogTableVisible = false;
-      this.$store.dispatch("errorLog/clearErrorLog");
-    }
-  }
-};
-</script>
-
-<style scoped>
-.message-title {
-  font-size: 16px;
-  color: #333;
-  font-weight: bold;
-  padding-right: 8px;
-}
-</style>
diff --git a/WebSite/src/components/GithubCorner/index.vue b/WebSite/src/components/GithubCorner/index.vue
deleted file mode 100644
index 22662b8..0000000
--- a/WebSite/src/components/GithubCorner/index.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <a
-    href="https://github.com/PanJiaChen/vue-element-admin"
-    target="_blank"
-    class="github-corner"
-    aria-label="View source on Github"
-  >
-    <svg
-      width="80"
-      height="80"
-      viewBox="0 0 250 250"
-      style="fill:#40c9c6; color:#fff;"
-      aria-hidden="true"
-    >
-      <path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z" />
-      <path
-        d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2"
-        fill="currentColor"
-        style="transform-origin: 130px 106px;"
-        class="octo-arm"
-      />
-      <path
-        d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z"
-        fill="currentColor"
-        class="octo-body"
-      />
-    </svg>
-  </a>
-</template>
-
-<style scoped>
-.github-corner:hover .octo-arm {
-  animation: octocat-wave 560ms ease-in-out;
-}
-
-@keyframes octocat-wave {
-  0%,
-  100% {
-    transform: rotate(0);
-  }
-  20%,
-  60% {
-    transform: rotate(-25deg);
-  }
-  40%,
-  80% {
-    transform: rotate(10deg);
-  }
-}
-
-@media (max-width: 500px) {
-  .github-corner:hover .octo-arm {
-    animation: none;
-  }
-  .github-corner .octo-arm {
-    animation: octocat-wave 560ms ease-in-out;
-  }
-}
-</style>
diff --git a/WebSite/src/components/Hamburger/index.vue b/WebSite/src/components/Hamburger/index.vue
deleted file mode 100644
index cc798b5..0000000
--- a/WebSite/src/components/Hamburger/index.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-<template>
-  <div style="padding: 0 15px;" @click="toggleClick">
-    <svg
-      :class="{ 'is-active': isActive }"
-      class="hamburger"
-      viewBox="0 0 1024 1024"
-      xmlns="http://www.w3.org/2000/svg"
-      width="64"
-      height="64"
-    >
-      <path
-        d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM142.4 642.1L298.7 519a8.84 8.84 0 0 0 0-13.9L142.4 381.9c-5.8-4.6-14.4-.5-14.4 6.9v246.3a8.9 8.9 0 0 0 14.4 7z"
-      />
-    </svg>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "Hamburger",
-  props: {
-    isActive: {
-      type: Boolean,
-      default: false
-    }
-  },
-  methods: {
-    toggleClick() {
-      this.$emit("toggleClick");
-    }
-  }
-};
-</script>
-
-<style scoped>
-.hamburger {
-  display: inline-block;
-  vertical-align: middle;
-  width: 20px;
-  height: 20px;
-}
-
-.hamburger.is-active {
-  transform: rotate(180deg);
-}
-</style>
diff --git a/WebSite/src/components/HeaderSearch/index.vue b/WebSite/src/components/HeaderSearch/index.vue
deleted file mode 100644
index 336e178..0000000
--- a/WebSite/src/components/HeaderSearch/index.vue
+++ /dev/null
@@ -1,198 +0,0 @@
-<template>
-  <div :class="{ show: show }" class="header-search">
-    <svg-icon
-      class-name="search-icon"
-      icon-class="search"
-      @click.stop="click"
-    />
-    <el-select
-      ref="headerSearchSelect"
-      v-model="search"
-      :remote-method="querySearch"
-      filterable
-      default-first-option
-      remote
-      placeholder="Search"
-      class="header-search-select"
-      @change="change"
-    >
-      <el-option
-        v-for="item in options"
-        :key="item.path"
-        :value="item"
-        :label="item.title.join(' > ')"
-      />
-    </el-select>
-  </div>
-</template>
-
-<script>
-// fuse is a lightweight fuzzy-search module
-// make search results more in line with expectations
-import Fuse from "fuse.js";
-import path from "path";
-
-export default {
-  name: "HeaderSearch",
-  data() {
-    return {
-      search: "",
-      options: [],
-      searchPool: [],
-      show: false,
-      fuse: undefined
-    };
-  },
-  computed: {
-    routes() {
-      return this.$store.getters.permissionRoutes;
-    }
-  },
-  watch: {
-    routes() {
-      this.searchPool = this.generateRoutes(this.routes);
-    },
-    searchPool(list) {
-      this.initFuse(list);
-    },
-    show(value) {
-      if (value) {
-        document.body.addEventListener("click", this.close);
-      } else {
-        document.body.removeEventListener("click", this.close);
-      }
-    }
-  },
-  mounted() {
-    this.searchPool = this.generateRoutes(this.routes);
-  },
-  methods: {
-    click() {
-      this.show = !this.show;
-      if (this.show) {
-        this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.focus();
-      }
-    },
-    close() {
-      this.$refs.headerSearchSelect && this.$refs.headerSearchSelect.blur();
-      this.options = [];
-      this.show = false;
-    },
-    change(val) {
-      this.$router.push(val.path);
-      this.search = "";
-      this.options = [];
-      this.$nextTick(() => {
-        this.show = false;
-      });
-    },
-    initFuse(list) {
-      this.fuse = new Fuse(list, {
-        shouldSort: true,
-        threshold: 0.4,
-        location: 0,
-        distance: 100,
-        maxPatternLength: 32,
-        minMatchCharLength: 1,
-        keys: [
-          {
-            name: "title",
-            weight: 0.7
-          },
-          {
-            name: "path",
-            weight: 0.3
-          }
-        ]
-      });
-    },
-    // Filter out the routes that can be displayed in the sidebar
-    // And generate the internationalized title
-    generateRoutes(routes, basePath = "/", prefixTitle = []) {
-      let res = [];
-
-      for (const router of routes) {
-        // skip hidden router
-        if (router.hidden) {
-          continue;
-        }
-
-        const data = {
-          path: path.resolve(basePath, router.path),
-          title: [...prefixTitle]
-        };
-
-        if (router.meta && router.meta.title) {
-          data.title = [...data.title, router.meta.title];
-
-          if (router.redirect !== "noRedirect") {
-            // only push the routes with title
-            // special case: need to exclude parent router without redirect
-            res.push(data);
-          }
-        }
-
-        // recursive child routes
-        if (router.children) {
-          const tempRoutes = this.generateRoutes(
-            router.children,
-            data.path,
-            data.title
-          );
-          if (tempRoutes.length >= 1) {
-            res = [...res, ...tempRoutes];
-          }
-        }
-      }
-      return res;
-    },
-    querySearch(query) {
-      if (query !== "") {
-        this.options = this.fuse.search(query);
-      } else {
-        this.options = [];
-      }
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.header-search {
-  font-size: 0 !important;
-
-  .search-icon {
-    cursor: pointer;
-    font-size: 18px;
-    vertical-align: middle;
-  }
-
-  .header-search-select {
-    font-size: 18px;
-    transition: width 0.2s;
-    width: 0;
-    overflow: hidden;
-    background: transparent;
-    border-radius: 0;
-    display: inline-block;
-    vertical-align: middle;
-
-    /deep/ .el-input__inner {
-      border-radius: 0;
-      border: 0;
-      padding-left: 0;
-      padding-right: 0;
-      box-shadow: none !important;
-      border-bottom: 1px solid #d9d9d9;
-      vertical-align: middle;
-    }
-  }
-
-  &.show {
-    .header-search-select {
-      width: 210px;
-      margin-left: 10px;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/components/ImageCropper/index.vue b/WebSite/src/components/ImageCropper/index.vue
deleted file mode 100644
index 06a60aa..0000000
--- a/WebSite/src/components/ImageCropper/index.vue
+++ /dev/null
@@ -1,1816 +0,0 @@
-<template>
-  <div v-show="value" class="vue-image-crop-upload">
-    <div class="vicp-wrap">
-      <div class="vicp-close" @click="off">
-        <i class="vicp-icon4" />
-      </div>
-
-      <div v-show="step == 1" class="vicp-step1">
-        <div
-          class="vicp-drop-area"
-          @dragleave="preventDefault"
-          @dragover="preventDefault"
-          @dragenter="preventDefault"
-          @click="handleClick"
-          @drop="handleChange"
-        >
-          <i v-show="loading != 1" class="vicp-icon1">
-            <i class="vicp-icon1-arrow" />
-            <i class="vicp-icon1-body" />
-            <i class="vicp-icon1-bottom" />
-          </i>
-          <span v-show="loading !== 1" class="vicp-hint">{{ lang.hint }}</span>
-          <span v-show="!isSupported" class="vicp-no-supported-hint">{{
-            lang.noSupported
-          }}</span>
-          <input
-            v-show="false"
-            v-if="step == 1"
-            ref="fileinput"
-            type="file"
-            @change="handleChange"
-          />
-        </div>
-        <div v-show="hasError" class="vicp-error">
-          <i class="vicp-icon2" />
-          {{ errorMsg }}
-        </div>
-        <div class="vicp-operate">
-          <a @click="off" @mousedown="ripple">{{ lang.btn.off }}</a>
-        </div>
-      </div>
-
-      <div v-if="step == 2" class="vicp-step2">
-        <div class="vicp-crop">
-          <div v-show="true" class="vicp-crop-left">
-            <div class="vicp-img-container">
-              <img
-                ref="img"
-                :src="sourceImgUrl"
-                :style="sourceImgStyle"
-                class="vicp-img"
-                draggable="false"
-                @drag="preventDefault"
-                @dragstart="preventDefault"
-                @dragend="preventDefault"
-                @dragleave="preventDefault"
-                @dragover="preventDefault"
-                @dragenter="preventDefault"
-                @drop="preventDefault"
-                @touchstart="imgStartMove"
-                @touchmove="imgMove"
-                @touchend="createImg"
-                @touchcancel="createImg"
-                @mousedown="imgStartMove"
-                @mousemove="imgMove"
-                @mouseup="createImg"
-                @mouseout="createImg"
-              />
-              <div
-                :style="sourceImgShadeStyle"
-                class="vicp-img-shade vicp-img-shade-1"
-              />
-              <div
-                :style="sourceImgShadeStyle"
-                class="vicp-img-shade vicp-img-shade-2"
-              />
-            </div>
-
-            <div class="vicp-range">
-              <input
-                :value="scale.range"
-                type="range"
-                step="1"
-                min="0"
-                max="100"
-                @input="zoomChange"
-              />
-              <i
-                class="vicp-icon5"
-                @mousedown="startZoomSub"
-                @mouseout="endZoomSub"
-                @mouseup="endZoomSub"
-              />
-              <i
-                class="vicp-icon6"
-                @mousedown="startZoomAdd"
-                @mouseout="endZoomAdd"
-                @mouseup="endZoomAdd"
-              />
-            </div>
-
-            <div v-if="!noRotate" class="vicp-rotate">
-              <i
-                @mousedown="startRotateLeft"
-                @mouseout="endRotate"
-                @mouseup="endRotate"
-                >↺</i
-              >
-              <i
-                @mousedown="startRotateRight"
-                @mouseout="endRotate"
-                @mouseup="endRotate"
-                >↻</i
-              >
-            </div>
-          </div>
-          <div v-show="true" class="vicp-crop-right">
-            <div class="vicp-preview">
-              <div v-if="!noSquare" class="vicp-preview-item">
-                <img :src="createImgUrl" :style="previewStyle" />
-                <span>{{ lang.preview }}</span>
-              </div>
-              <div
-                v-if="!noCircle"
-                class="vicp-preview-item vicp-preview-item-circle"
-              >
-                <img :src="createImgUrl" :style="previewStyle" />
-                <span>{{ lang.preview }}</span>
-              </div>
-            </div>
-          </div>
-        </div>
-        <div class="vicp-operate">
-          <a @click="setStep(1)" @mousedown="ripple">{{ lang.btn.back }}</a>
-          <a
-            class="vicp-operate-btn"
-            @click="prepareUpload"
-            @mousedown="ripple"
-            >{{ lang.btn.save }}</a
-          >
-        </div>
-      </div>
-
-      <div v-if="step == 3" class="vicp-step3">
-        <div class="vicp-upload">
-          <span v-show="loading === 1" class="vicp-loading">{{
-            lang.loading
-          }}</span>
-          <div class="vicp-progress-wrap">
-            <span
-              v-show="loading === 1"
-              :style="progressStyle"
-              class="vicp-progress"
-            />
-          </div>
-          <div v-show="hasError" class="vicp-error">
-            <i class="vicp-icon2" />
-            {{ errorMsg }}
-          </div>
-          <div v-show="loading === 2" class="vicp-success">
-            <i class="vicp-icon3" />
-            {{ lang.success }}
-          </div>
-        </div>
-        <div class="vicp-operate">
-          <a @click="setStep(2)" @mousedown="ripple">{{ lang.btn.back }}</a>
-          <a @click="off" @mousedown="ripple">{{ lang.btn.close }}</a>
-        </div>
-      </div>
-      <canvas v-show="false" ref="canvas" :width="width" :height="height" />
-    </div>
-  </div>
-</template>
-
-<script>
-"use strict";
-import request from "@/utils/request";
-import language from "./utils/language.js";
-import mimes from "./utils/mimes.js";
-import data2blob from "./utils/data2blob.js";
-import effectRipple from "./utils/effectRipple.js";
-export default {
-  props: {
-    // 域,上传文件name,触发事件会带上(如果一个页面多个图片上传控件,可以做区分
-    field: {
-      type: String,
-      default: "avatar"
-    },
-    // 原名key,类似于id,触发事件会带上(如果一个页面多个图片上传控件,可以做区分
-    ki: {
-      type: Number,
-      default: 0
-    },
-    // 显示该控件与否
-    value: {
-      type: Boolean,
-      default: true
-    },
-    // 上传地址
-    url: {
-      type: String,
-      default: ""
-    },
-    // 其他要上传文件附带的数据,对象格式
-    params: {
-      type: Object,
-      default: null
-    },
-    // Add custom headers
-    headers: {
-      type: Object,
-      default: null
-    },
-    // 剪裁图片的宽
-    width: {
-      type: Number,
-      default: 200
-    },
-    // 剪裁图片的高
-    height: {
-      type: Number,
-      default: 200
-    },
-    // 不显示旋转功能
-    noRotate: {
-      type: Boolean,
-      default: true
-    },
-    // 不预览圆形图片
-    noCircle: {
-      type: Boolean,
-      default: false
-    },
-    // 不预览方形图片
-    noSquare: {
-      type: Boolean,
-      default: false
-    },
-    // 单文件大小限制
-    maxSize: {
-      type: Number,
-      default: 10240
-    },
-    // 语言类型
-    langType: {
-      type: String,
-      default: "zh"
-    },
-    // 语言包
-    langExt: {
-      type: Object,
-      default: null
-    },
-    // 图片上传格式
-    imgFormat: {
-      type: String,
-      default: "png"
-    },
-    // 是否支持跨域
-    withCredentials: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    const { imgFormat, langType, langExt, width, height } = this;
-    let isSupported = true;
-    const allowImgFormat = ["jpg", "png"];
-    const tempImgFormat =
-      allowImgFormat.indexOf(imgFormat) === -1 ? "jpg" : imgFormat;
-    const lang = language[langType] ? language[langType] : language["en"];
-    const mime = mimes[tempImgFormat];
-    // 规范图片格式
-    this.imgFormat = tempImgFormat;
-    if (langExt) {
-      Object.assign(lang, langExt);
-    }
-    if (typeof FormData !== "function") {
-      isSupported = false;
-    }
-    return {
-      // 图片的mime
-      mime,
-      // 语言包
-      lang,
-      // 浏览器是否支持该控件
-      isSupported,
-      // 浏览器是否支持触屏事件
-      isSupportTouch: document.hasOwnProperty("ontouchstart"),
-      // 步骤
-      step: 1, // 1选择文件 2剪裁 3上传
-      // 上传状态及进度
-      loading: 0, // 0未开始 1正在 2成功 3错误
-      progress: 0,
-      // 是否有错误及错误信息
-      hasError: false,
-      errorMsg: "",
-      // 需求图宽高比
-      ratio: width / height,
-      // 原图地址、生成图片地址
-      sourceImg: null,
-      sourceImgUrl: "",
-      createImgUrl: "",
-      // 原图片拖动事件初始值
-      sourceImgMouseDown: {
-        on: false,
-        mX: 0, // 鼠标按下的坐标
-        mY: 0,
-        x: 0, // scale原图坐标
-        y: 0
-      },
-      // 生成图片预览的容器大小
-      previewContainer: {
-        width: 100,
-        height: 100
-      },
-      // 原图容器宽高
-      sourceImgContainer: {
-        // sic
-        width: 240,
-        height: 184 // 如果生成图比例与此一致会出现bug,先改成特殊的格式吧,哈哈哈
-      },
-      // 原图展示属性
-      scale: {
-        zoomAddOn: false, // 按钮缩放事件开启
-        zoomSubOn: false, // 按钮缩放事件开启
-        range: 1, // 最大100
-        rotateLeft: false, // 按钮向左旋转事件开启
-        rotateRight: false, // 按钮向右旋转事件开启
-        degree: 0, // 旋转度数
-        x: 0,
-        y: 0,
-        width: 0,
-        height: 0,
-        maxWidth: 0,
-        maxHeight: 0,
-        minWidth: 0, // 最宽
-        minHeight: 0,
-        naturalWidth: 0, // 原宽
-        naturalHeight: 0
-      }
-    };
-  },
-  computed: {
-    // 进度条样式
-    progressStyle() {
-      const { progress } = this;
-      return {
-        width: progress + "%"
-      };
-    },
-    // 原图样式
-    sourceImgStyle() {
-      const { scale, sourceImgMasking } = this;
-      const top = scale.y + sourceImgMasking.y + "px";
-      const left = scale.x + sourceImgMasking.x + "px";
-      return {
-        top,
-        left,
-        width: scale.width + "px",
-        height: scale.height + "px",
-        transform: "rotate(" + scale.degree + "deg)", // 旋转时 左侧原始图旋转样式
-        "-ms-transform": "rotate(" + scale.degree + "deg)", // 兼容IE9
-        "-moz-transform": "rotate(" + scale.degree + "deg)", // 兼容FireFox
-        "-webkit-transform": "rotate(" + scale.degree + "deg)", // 兼容Safari 和 chrome
-        "-o-transform": "rotate(" + scale.degree + "deg)" // 兼容 Opera
-      };
-    },
-    // 原图蒙版属性
-    sourceImgMasking() {
-      const { width, height, ratio, sourceImgContainer } = this;
-      const sic = sourceImgContainer;
-      const sicRatio = sic.width / sic.height; // 原图容器宽高比
-      let x = 0;
-      let y = 0;
-      let w = sic.width;
-      let h = sic.height;
-      let scale = 1;
-      if (ratio < sicRatio) {
-        scale = sic.height / height;
-        w = sic.height * ratio;
-        x = (sic.width - w) / 2;
-      }
-      if (ratio > sicRatio) {
-        scale = sic.width / width;
-        h = sic.width / ratio;
-        y = (sic.height - h) / 2;
-      }
-      return {
-        scale, // 蒙版相对需求宽高的缩放
-        x,
-        y,
-        width: w,
-        height: h
-      };
-    },
-    // 原图遮罩样式
-    sourceImgShadeStyle() {
-      const { sourceImgMasking, sourceImgContainer } = this;
-      const sic = sourceImgContainer;
-      const sim = sourceImgMasking;
-      const w =
-        sim.width === sic.width ? sim.width : (sic.width - sim.width) / 2;
-      const h =
-        sim.height === sic.height ? sim.height : (sic.height - sim.height) / 2;
-      return {
-        width: w + "px",
-        height: h + "px"
-      };
-    },
-    previewStyle() {
-      const { ratio, previewContainer } = this;
-      const pc = previewContainer;
-      let w = pc.width;
-      let h = pc.height;
-      const pcRatio = w / h;
-      if (ratio < pcRatio) {
-        w = pc.height * ratio;
-      }
-      if (ratio > pcRatio) {
-        h = pc.width / ratio;
-      }
-      return {
-        width: w + "px",
-        height: h + "px"
-      };
-    }
-  },
-  watch: {
-    value(newValue) {
-      if (newValue && this.loading !== 1) {
-        this.reset();
-      }
-    }
-  },
-  created() {
-    // 绑定按键esc隐藏此插件事件
-    document.addEventListener("keyup", this.closeHandler);
-  },
-  destroyed() {
-    document.removeEventListener("keyup", this.closeHandler);
-  },
-  methods: {
-    // 点击波纹效果
-    ripple(e) {
-      effectRipple(e);
-    },
-    // 关闭控件
-    off() {
-      setTimeout(() => {
-        this.$emit("input", false);
-        this.$emit("close");
-        if (this.step === 3 && this.loading === 2) {
-          this.setStep(1);
-        }
-      }, 200);
-    },
-    // 设置步骤
-    setStep(no) {
-      // 延时是为了显示动画效果呢,哈哈哈
-      setTimeout(() => {
-        this.step = no;
-      }, 200);
-    },
-    /* 图片选择区域函数绑定
-     ---------------------------------------------------------------*/
-    preventDefault(e) {
-      e.preventDefault();
-      return false;
-    },
-    handleClick(e) {
-      if (this.loading !== 1) {
-        if (e.target !== this.$refs.fileinput) {
-          e.preventDefault();
-          if (document.activeElement !== this.$refs) {
-            this.$refs.fileinput.click();
-          }
-        }
-      }
-    },
-    handleChange(e) {
-      e.preventDefault();
-      if (this.loading !== 1) {
-        const files = e.target.files || e.dataTransfer.files;
-        this.reset();
-        if (this.checkFile(files[0])) {
-          this.setSourceImg(files[0]);
-        }
-      }
-    },
-    /* ---------------------------------------------------------------*/
-    // 检测选择的文件是否合适
-    checkFile(file) {
-      const { lang, maxSize } = this;
-      // 仅限图片
-      if (file.type.indexOf("image") === -1) {
-        this.hasError = true;
-        this.errorMsg = lang.error.onlyImg;
-        return false;
-      }
-      // 超出大小
-      if (file.size / 1024 > maxSize) {
-        this.hasError = true;
-        this.errorMsg = lang.error.outOfSize + maxSize + "kb";
-        return false;
-      }
-      return true;
-    },
-    // 重置控件
-    reset() {
-      this.loading = 0;
-      this.hasError = false;
-      this.errorMsg = "";
-      this.progress = 0;
-    },
-    // 设置图片源
-    setSourceImg(file) {
-      const fr = new FileReader();
-      fr.onload = e => {
-        this.sourceImgUrl = fr.result;
-        this.startCrop();
-      };
-      fr.readAsDataURL(file);
-    },
-    // 剪裁前准备工作
-    startCrop() {
-      const {
-        width,
-        height,
-        ratio,
-        scale,
-        sourceImgUrl,
-        sourceImgMasking,
-        lang
-      } = this;
-      const sim = sourceImgMasking;
-      const img = new Image();
-      img.src = sourceImgUrl;
-      img.onload = () => {
-        const nWidth = img.naturalWidth;
-        const nHeight = img.naturalHeight;
-        const nRatio = nWidth / nHeight;
-        let w = sim.width;
-        let h = sim.height;
-        let x = 0;
-        let y = 0;
-        // 图片像素不达标
-        if (nWidth < width || nHeight < height) {
-          this.hasError = true;
-          this.errorMsg = lang.error.lowestPx + width + "*" + height;
-          return false;
-        }
-        if (ratio > nRatio) {
-          h = w / nRatio;
-          y = (sim.height - h) / 2;
-        }
-        if (ratio < nRatio) {
-          w = h * nRatio;
-          x = (sim.width - w) / 2;
-        }
-        scale.range = 0;
-        scale.x = x;
-        scale.y = y;
-        scale.width = w;
-        scale.height = h;
-        scale.degree = 0;
-        scale.minWidth = w;
-        scale.minHeight = h;
-        scale.maxWidth = nWidth * sim.scale;
-        scale.maxHeight = nHeight * sim.scale;
-        scale.naturalWidth = nWidth;
-        scale.naturalHeight = nHeight;
-        this.sourceImg = img;
-        this.createImg();
-        this.setStep(2);
-      };
-    },
-    // 鼠标按下图片准备移动
-    imgStartMove(e) {
-      e.preventDefault();
-      // 支持触摸事件,则鼠标事件无效
-      if (this.isSupportTouch && !e.targetTouches) {
-        return false;
-      }
-      const et = e.targetTouches ? e.targetTouches[0] : e;
-      const { sourceImgMouseDown, scale } = this;
-      const simd = sourceImgMouseDown;
-      simd.mX = et.screenX;
-      simd.mY = et.screenY;
-      simd.x = scale.x;
-      simd.y = scale.y;
-      simd.on = true;
-    },
-    // 鼠标按下状态下移动,图片移动
-    imgMove(e) {
-      e.preventDefault();
-      // 支持触摸事件,则鼠标事件无效
-      if (this.isSupportTouch && !e.targetTouches) {
-        return false;
-      }
-      const et = e.targetTouches ? e.targetTouches[0] : e;
-      const {
-        sourceImgMouseDown: { on, mX, mY, x, y },
-        scale,
-        sourceImgMasking
-      } = this;
-      const sim = sourceImgMasking;
-      const nX = et.screenX;
-      const nY = et.screenY;
-      const dX = nX - mX;
-      const dY = nY - mY;
-      let rX = x + dX;
-      let rY = y + dY;
-      if (!on) return;
-      if (rX > 0) {
-        rX = 0;
-      }
-      if (rY > 0) {
-        rY = 0;
-      }
-      if (rX < sim.width - scale.width) {
-        rX = sim.width - scale.width;
-      }
-      if (rY < sim.height - scale.height) {
-        rY = sim.height - scale.height;
-      }
-      scale.x = rX;
-      scale.y = rY;
-    },
-    // 按钮按下开始向右旋转
-    startRotateRight(e) {
-      const { scale } = this;
-      scale.rotateRight = true;
-      const rotate = () => {
-        if (scale.rotateRight) {
-          const degree = ++scale.degree;
-          this.createImg(degree);
-          setTimeout(function() {
-            rotate();
-          }, 60);
-        }
-      };
-      rotate();
-    },
-    // 按钮按下开始向左旋转
-    startRotateLeft(e) {
-      const { scale } = this;
-      scale.rotateLeft = true;
-      const rotate = () => {
-        if (scale.rotateLeft) {
-          const degree = --scale.degree;
-          this.createImg(degree);
-          setTimeout(function() {
-            rotate();
-          }, 60);
-        }
-      };
-      rotate();
-    },
-    // 停止旋转
-    endRotate() {
-      const { scale } = this;
-      scale.rotateLeft = false;
-      scale.rotateRight = false;
-    },
-    // 按钮按下开始放大
-    startZoomAdd(e) {
-      const { scale } = this;
-      scale.zoomAddOn = true;
-      const zoom = () => {
-        if (scale.zoomAddOn) {
-          const range = scale.range >= 100 ? 100 : ++scale.range;
-          this.zoomImg(range);
-          setTimeout(function() {
-            zoom();
-          }, 60);
-        }
-      };
-      zoom();
-    },
-    // 按钮松开或移开取消放大
-    endZoomAdd(e) {
-      this.scale.zoomAddOn = false;
-    },
-    // 按钮按下开始缩小
-    startZoomSub(e) {
-      const { scale } = this;
-      scale.zoomSubOn = true;
-      const zoom = () => {
-        if (scale.zoomSubOn) {
-          const range = scale.range <= 0 ? 0 : --scale.range;
-          this.zoomImg(range);
-          setTimeout(function() {
-            zoom();
-          }, 60);
-        }
-      };
-      zoom();
-    },
-    // 按钮松开或移开取消缩小
-    endZoomSub(e) {
-      const { scale } = this;
-      scale.zoomSubOn = false;
-    },
-    zoomChange(e) {
-      this.zoomImg(e.target.value);
-    },
-    // 缩放原图
-    zoomImg(newRange) {
-      const { sourceImgMasking, scale } = this;
-      const {
-        maxWidth,
-        maxHeight,
-        minWidth,
-        minHeight,
-        width,
-        height,
-        x,
-        y
-      } = scale;
-      const sim = sourceImgMasking;
-      // 蒙版宽高
-      const sWidth = sim.width;
-      const sHeight = sim.height;
-      // 新宽高
-      const nWidth = minWidth + ((maxWidth - minWidth) * newRange) / 100;
-      const nHeight = minHeight + ((maxHeight - minHeight) * newRange) / 100;
-      // 新坐标(根据蒙版中心点缩放)
-      let nX = sWidth / 2 - (nWidth / width) * (sWidth / 2 - x);
-      let nY = sHeight / 2 - (nHeight / height) * (sHeight / 2 - y);
-      // 判断新坐标是否超过蒙版限制
-      if (nX > 0) {
-        nX = 0;
-      }
-      if (nY > 0) {
-        nY = 0;
-      }
-      if (nX < sWidth - nWidth) {
-        nX = sWidth - nWidth;
-      }
-      if (nY < sHeight - nHeight) {
-        nY = sHeight - nHeight;
-      }
-      // 赋值处理
-      scale.x = nX;
-      scale.y = nY;
-      scale.width = nWidth;
-      scale.height = nHeight;
-      scale.range = newRange;
-      setTimeout(() => {
-        if (scale.range === newRange) {
-          this.createImg();
-        }
-      }, 300);
-    },
-    // 生成需求图片
-    createImg(e) {
-      const {
-        mime,
-        sourceImg,
-        scale: { x, y, width, height, degree },
-        sourceImgMasking: { scale }
-      } = this;
-      const canvas = this.$refs.canvas;
-      const ctx = canvas.getContext("2d");
-      if (e) {
-        // 取消鼠标按下移动状态
-        this.sourceImgMouseDown.on = false;
-      }
-      canvas.width = this.width;
-      canvas.height = this.height;
-      ctx.clearRect(0, 0, this.width, this.height);
-      // 将透明区域设置为白色底边
-      ctx.fillStyle = "#fff";
-      ctx.fillRect(0, 0, this.width, this.height);
-      ctx.translate(this.width * 0.5, this.height * 0.5);
-      ctx.rotate((Math.PI * degree) / 180);
-      ctx.translate(-this.width * 0.5, -this.height * 0.5);
-      ctx.drawImage(
-        sourceImg,
-        x / scale,
-        y / scale,
-        width / scale,
-        height / scale
-      );
-      this.createImgUrl = canvas.toDataURL(mime);
-    },
-    prepareUpload() {
-      const { url, createImgUrl, field, ki } = this;
-      this.$emit("crop-success", createImgUrl, field, ki);
-      if (typeof url === "string" && url) {
-        this.upload();
-      } else {
-        this.off();
-      }
-    },
-    // 上传图片
-    upload() {
-      const {
-        lang,
-        imgFormat,
-        mime,
-        url,
-        params,
-        field,
-        ki,
-        createImgUrl
-      } = this;
-      const fmData = new FormData();
-      fmData.append(
-        field,
-        data2blob(createImgUrl, mime),
-        field + "." + imgFormat
-      );
-      // 添加其他参数
-      if (typeof params === "object" && params) {
-        Object.keys(params).forEach(k => {
-          fmData.append(k, params[k]);
-        });
-      }
-      // 监听进度回调
-      // const uploadProgress = (event) => {
-      //   if (event.lengthComputable) {
-      //     this.progress = 100 * Math.round(event.loaded) / event.total
-      //   }
-      // }
-      // 上传文件
-      this.reset();
-      this.loading = 1;
-      this.setStep(3);
-      request({
-        url,
-        method: "post",
-        data: fmData
-      })
-        .then(resData => {
-          this.loading = 2;
-          this.$emit("crop-upload-success", resData.data);
-        })
-        .catch(err => {
-          if (this.value) {
-            this.loading = 3;
-            this.hasError = true;
-            this.errorMsg = lang.fail;
-            this.$emit("crop-upload-fail", err, field, ki);
-          }
-        });
-    },
-    closeHandler(e) {
-      if (this.value && (e.key === "Escape" || e.keyCode === 27)) {
-        this.off();
-      }
-    }
-  }
-};
-</script>
-
-<style lang="scss">
-@charset "UTF-8";
-@-webkit-keyframes vicp_progress {
-  0% {
-    background-position-y: 0;
-  }
-  100% {
-    background-position-y: 40px;
-  }
-}
-@keyframes vicp_progress {
-  0% {
-    background-position-y: 0;
-  }
-  100% {
-    background-position-y: 40px;
-  }
-}
-@-webkit-keyframes vicp {
-  0% {
-    opacity: 0;
-    -webkit-transform: scale(0) translatey(-60px);
-    transform: scale(0) translatey(-60px);
-  }
-  100% {
-    opacity: 1;
-    -webkit-transform: scale(1) translatey(0);
-    transform: scale(1) translatey(0);
-  }
-}
-@keyframes vicp {
-  0% {
-    opacity: 0;
-    -webkit-transform: scale(0) translatey(-60px);
-    transform: scale(0) translatey(-60px);
-  }
-  100% {
-    opacity: 1;
-    -webkit-transform: scale(1) translatey(0);
-    transform: scale(1) translatey(0);
-  }
-}
-.vue-image-crop-upload {
-  position: fixed;
-  display: block;
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-  z-index: 10000;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  width: 100%;
-  height: 100%;
-  background-color: rgba(0, 0, 0, 0.65);
-  -webkit-tap-highlight-color: transparent;
-  -moz-tap-highlight-color: transparent;
-}
-.vue-image-crop-upload .vicp-wrap {
-  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
-  position: fixed;
-  display: block;
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-  z-index: 10000;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  margin: auto;
-  width: 600px;
-  height: 330px;
-  padding: 25px;
-  background-color: #fff;
-  border-radius: 2px;
-  -webkit-animation: vicp 0.12s ease-in;
-  animation: vicp 0.12s ease-in;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-close {
-  position: absolute;
-  right: -30px;
-  top: -30px;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4 {
-  position: relative;
-  display: block;
-  width: 30px;
-  height: 30px;
-  cursor: pointer;
-  -webkit-transition: -webkit-transform 0.18s;
-  transition: -webkit-transform 0.18s;
-  transition: transform 0.18s;
-  transition: transform 0.18s, -webkit-transform 0.18s;
-  -webkit-transform: rotate(0);
-  -ms-transform: rotate(0);
-  transform: rotate(0);
-}
-.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::after,
-.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::before {
-  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
-  content: "";
-  position: absolute;
-  top: 12px;
-  left: 4px;
-  width: 20px;
-  height: 3px;
-  -webkit-transform: rotate(45deg);
-  -ms-transform: rotate(45deg);
-  transform: rotate(45deg);
-  background-color: #fff;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4::after {
-  -webkit-transform: rotate(-45deg);
-  -ms-transform: rotate(-45deg);
-  transform: rotate(-45deg);
-}
-.vue-image-crop-upload .vicp-wrap .vicp-close .vicp-icon4:hover {
-  -webkit-transform: rotate(90deg);
-  -ms-transform: rotate(90deg);
-  transform: rotate(90deg);
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area {
-  position: relative;
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-  padding: 35px;
-  height: 170px;
-  background-color: rgba(0, 0, 0, 0.03);
-  text-align: center;
-  border: 1px dashed rgba(0, 0, 0, 0.08);
-  overflow: hidden;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area .vicp-icon1 {
-  display: block;
-  margin: 0 auto 6px;
-  width: 42px;
-  height: 42px;
-  overflow: hidden;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step1
-  .vicp-drop-area
-  .vicp-icon1
-  .vicp-icon1-arrow {
-  display: block;
-  margin: 0 auto;
-  width: 0;
-  height: 0;
-  border-bottom: 14.7px solid rgba(0, 0, 0, 0.3);
-  border-left: 14.7px solid transparent;
-  border-right: 14.7px solid transparent;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step1
-  .vicp-drop-area
-  .vicp-icon1
-  .vicp-icon1-body {
-  display: block;
-  width: 12.6px;
-  height: 14.7px;
-  margin: 0 auto;
-  background-color: rgba(0, 0, 0, 0.3);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step1
-  .vicp-drop-area
-  .vicp-icon1
-  .vicp-icon1-bottom {
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-  display: block;
-  height: 12.6px;
-  border: 6px solid rgba(0, 0, 0, 0.3);
-  border-top: none;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area .vicp-hint {
-  display: block;
-  padding: 15px;
-  font-size: 14px;
-  color: #666;
-  line-height: 30px;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step1
-  .vicp-drop-area
-  .vicp-no-supported-hint {
-  display: block;
-  position: absolute;
-  top: 0;
-  left: 0;
-  padding: 30px;
-  width: 100%;
-  height: 60px;
-  line-height: 30px;
-  background-color: #eee;
-  text-align: center;
-  color: #666;
-  font-size: 14px;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step1 .vicp-drop-area:hover {
-  cursor: pointer;
-  border-color: rgba(0, 0, 0, 0.1);
-  background-color: rgba(0, 0, 0, 0.05);
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop {
-  overflow: hidden;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-left {
-  float: left;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-img-container {
-  position: relative;
-  display: block;
-  width: 240px;
-  height: 180px;
-  background-color: #e5e5e0;
-  overflow: hidden;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-img-container
-  .vicp-img {
-  position: absolute;
-  display: block;
-  cursor: move;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-img-container
-  .vicp-img-shade {
-  -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
-  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
-  position: absolute;
-  background-color: rgba(241, 242, 243, 0.8);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-img-container
-  .vicp-img-shade.vicp-img-shade-1 {
-  top: 0;
-  left: 0;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-img-container
-  .vicp-img-shade.vicp-img-shade-2 {
-  bottom: 0;
-  right: 0;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-rotate {
-  position: relative;
-  width: 240px;
-  height: 18px;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-rotate
-  i {
-  display: block;
-  width: 18px;
-  height: 18px;
-  border-radius: 100%;
-  line-height: 18px;
-  text-align: center;
-  font-size: 12px;
-  font-weight: bold;
-  background-color: rgba(0, 0, 0, 0.08);
-  color: #fff;
-  overflow: hidden;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-rotate
-  i:hover {
-  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
-  cursor: pointer;
-  background-color: rgba(0, 0, 0, 0.14);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-rotate
-  i:first-child {
-  float: left;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-rotate
-  i:last-child {
-  float: right;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range {
-  position: relative;
-  margin: 30px 0 10px 0;
-  width: 240px;
-  height: 18px;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon5,
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon6 {
-  position: absolute;
-  top: 0;
-  width: 18px;
-  height: 18px;
-  border-radius: 100%;
-  background-color: rgba(0, 0, 0, 0.08);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon5:hover,
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon6:hover {
-  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
-  cursor: pointer;
-  background-color: rgba(0, 0, 0, 0.14);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon5 {
-  left: 0;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon5::before {
-  position: absolute;
-  content: "";
-  display: block;
-  left: 3px;
-  top: 8px;
-  width: 12px;
-  height: 2px;
-  background-color: #fff;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon6 {
-  right: 0;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon6::before {
-  position: absolute;
-  content: "";
-  display: block;
-  left: 3px;
-  top: 8px;
-  width: 12px;
-  height: 2px;
-  background-color: #fff;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  .vicp-icon6::after {
-  position: absolute;
-  content: "";
-  display: block;
-  top: 3px;
-  left: 8px;
-  width: 2px;
-  height: 12px;
-  background-color: #fff;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"] {
-  display: block;
-  padding-top: 5px;
-  margin: 0 auto;
-  width: 180px;
-  height: 8px;
-  vertical-align: top;
-  background: transparent;
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  appearance: none;
-  cursor: pointer;
-  /* 滑块
-               ---------------------------------------------------------------*/
-  /* 轨道
-               ---------------------------------------------------------------*/
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]:focus {
-  outline: none;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]::-webkit-slider-thumb {
-  -webkit-box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
-  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
-  -webkit-appearance: none;
-  appearance: none;
-  margin-top: -3px;
-  width: 12px;
-  height: 12px;
-  background-color: #61c091;
-  border-radius: 100%;
-  border: none;
-  -webkit-transition: 0.2s;
-  transition: 0.2s;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]::-moz-range-thumb {
-  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
-  -moz-appearance: none;
-  appearance: none;
-  width: 12px;
-  height: 12px;
-  background-color: #61c091;
-  border-radius: 100%;
-  border: none;
-  -webkit-transition: 0.2s;
-  transition: 0.2s;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]::-ms-thumb {
-  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, 0.18);
-  appearance: none;
-  width: 12px;
-  height: 12px;
-  background-color: #61c091;
-  border: none;
-  border-radius: 100%;
-  -webkit-transition: 0.2s;
-  transition: 0.2s;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]:active::-moz-range-thumb {
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
-  width: 14px;
-  height: 14px;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]:active::-ms-thumb {
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
-  width: 14px;
-  height: 14px;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]:active::-webkit-slider-thumb {
-  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.23);
-  margin-top: -4px;
-  width: 14px;
-  height: 14px;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]::-webkit-slider-runnable-track {
-  -webkit-box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
-  width: 100%;
-  height: 6px;
-  cursor: pointer;
-  border-radius: 2px;
-  border: none;
-  background-color: rgba(68, 170, 119, 0.3);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]::-moz-range-track {
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
-  width: 100%;
-  height: 6px;
-  cursor: pointer;
-  border-radius: 2px;
-  border: none;
-  background-color: rgba(68, 170, 119, 0.3);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]::-ms-track {
-  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12);
-  width: 100%;
-  cursor: pointer;
-  background: transparent;
-  border-color: transparent;
-  color: transparent;
-  height: 6px;
-  border-radius: 2px;
-  border: none;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]::-ms-fill-lower {
-  background-color: rgba(68, 170, 119, 0.3);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]::-ms-fill-upper {
-  background-color: rgba(68, 170, 119, 0.15);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]:focus::-webkit-slider-runnable-track {
-  background-color: rgba(68, 170, 119, 0.5);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]:focus::-moz-range-track {
-  background-color: rgba(68, 170, 119, 0.5);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]:focus::-ms-fill-lower {
-  background-color: rgba(68, 170, 119, 0.45);
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-left
-  .vicp-range
-  input[type="range"]:focus::-ms-fill-upper {
-  background-color: rgba(68, 170, 119, 0.25);
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step2 .vicp-crop .vicp-crop-right {
-  float: right;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-right
-  .vicp-preview {
-  height: 150px;
-  overflow: hidden;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-right
-  .vicp-preview
-  .vicp-preview-item {
-  position: relative;
-  padding: 5px;
-  width: 100px;
-  height: 100px;
-  float: left;
-  margin-right: 16px;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-right
-  .vicp-preview
-  .vicp-preview-item
-  span {
-  position: absolute;
-  bottom: -30px;
-  width: 100%;
-  font-size: 14px;
-  color: #bbb;
-  display: block;
-  text-align: center;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-right
-  .vicp-preview
-  .vicp-preview-item
-  img {
-  position: absolute;
-  display: block;
-  top: 0;
-  bottom: 0;
-  left: 0;
-  right: 0;
-  margin: auto;
-  padding: 3px;
-  background-color: #fff;
-  border: 1px solid rgba(0, 0, 0, 0.15);
-  overflow: hidden;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-right
-  .vicp-preview
-  .vicp-preview-item.vicp-preview-item-circle {
-  margin-right: 0;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step2
-  .vicp-crop
-  .vicp-crop-right
-  .vicp-preview
-  .vicp-preview-item.vicp-preview-item-circle
-  img {
-  border-radius: 100%;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload {
-  position: relative;
-  -webkit-box-sizing: border-box;
-  box-sizing: border-box;
-  padding: 35px;
-  height: 170px;
-  background-color: rgba(0, 0, 0, 0.03);
-  text-align: center;
-  border: 1px dashed #ddd;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-loading {
-  display: block;
-  padding: 15px;
-  font-size: 16px;
-  color: #999;
-  line-height: 30px;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-progress-wrap {
-  margin-top: 12px;
-  background-color: rgba(0, 0, 0, 0.08);
-  border-radius: 3px;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step3
-  .vicp-upload
-  .vicp-progress-wrap
-  .vicp-progress {
-  position: relative;
-  display: block;
-  height: 5px;
-  border-radius: 3px;
-  background-color: #4a7;
-  -webkit-box-shadow: 0 2px 6px 0 rgba(68, 170, 119, 0.3);
-  box-shadow: 0 2px 6px 0 rgba(68, 170, 119, 0.3);
-  -webkit-transition: width 0.15s linear;
-  transition: width 0.15s linear;
-  background-image: -webkit-linear-gradient(
-    135deg,
-    rgba(255, 255, 255, 0.2) 25%,
-    transparent 25%,
-    transparent 50%,
-    rgba(255, 255, 255, 0.2) 50%,
-    rgba(255, 255, 255, 0.2) 75%,
-    transparent 75%,
-    transparent
-  );
-  background-image: linear-gradient(
-    -45deg,
-    rgba(255, 255, 255, 0.2) 25%,
-    transparent 25%,
-    transparent 50%,
-    rgba(255, 255, 255, 0.2) 50%,
-    rgba(255, 255, 255, 0.2) 75%,
-    transparent 75%,
-    transparent
-  );
-  background-size: 40px 40px;
-  -webkit-animation: vicp_progress 0.5s linear infinite;
-  animation: vicp_progress 0.5s linear infinite;
-}
-.vue-image-crop-upload
-  .vicp-wrap
-  .vicp-step3
-  .vicp-upload
-  .vicp-progress-wrap
-  .vicp-progress::after {
-  content: "";
-  position: absolute;
-  display: block;
-  top: -3px;
-  right: -3px;
-  width: 9px;
-  height: 9px;
-  border: 1px solid rgba(245, 246, 247, 0.7);
-  -webkit-box-shadow: 0 1px 4px 0 rgba(68, 170, 119, 0.7);
-  box-shadow: 0 1px 4px 0 rgba(68, 170, 119, 0.7);
-  border-radius: 100%;
-  background-color: #4a7;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-error,
-.vue-image-crop-upload .vicp-wrap .vicp-step3 .vicp-upload .vicp-success {
-  height: 100px;
-  line-height: 100px;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-operate {
-  position: absolute;
-  right: 20px;
-  bottom: 20px;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-operate a {
-  position: relative;
-  float: left;
-  display: block;
-  margin-left: 10px;
-  width: 100px;
-  height: 36px;
-  line-height: 36px;
-  text-align: center;
-  cursor: pointer;
-  font-size: 14px;
-  color: #4a7;
-  border-radius: 2px;
-  overflow: hidden;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-operate a:hover {
-  background-color: rgba(0, 0, 0, 0.03);
-}
-.vue-image-crop-upload .vicp-wrap .vicp-error,
-.vue-image-crop-upload .vicp-wrap .vicp-success {
-  display: block;
-  font-size: 14px;
-  line-height: 24px;
-  height: 24px;
-  color: #d10;
-  text-align: center;
-  vertical-align: top;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-success {
-  color: #4a7;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-icon3 {
-  position: relative;
-  display: inline-block;
-  width: 20px;
-  height: 20px;
-  top: 4px;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-icon3::after {
-  position: absolute;
-  top: 3px;
-  left: 6px;
-  width: 6px;
-  height: 10px;
-  border-width: 0 2px 2px 0;
-  border-color: #4a7;
-  border-style: solid;
-  -webkit-transform: rotate(45deg);
-  -ms-transform: rotate(45deg);
-  transform: rotate(45deg);
-  content: "";
-}
-.vue-image-crop-upload .vicp-wrap .vicp-icon2 {
-  position: relative;
-  display: inline-block;
-  width: 20px;
-  height: 20px;
-  top: 4px;
-}
-.vue-image-crop-upload .vicp-wrap .vicp-icon2::after,
-.vue-image-crop-upload .vicp-wrap .vicp-icon2::before {
-  content: "";
-  position: absolute;
-  top: 9px;
-  left: 4px;
-  width: 13px;
-  height: 2px;
-  background-color: #d10;
-  -webkit-transform: rotate(45deg);
-  -ms-transform: rotate(45deg);
-  transform: rotate(45deg);
-}
-.vue-image-crop-upload .vicp-wrap .vicp-icon2::after {
-  -webkit-transform: rotate(-45deg);
-  -ms-transform: rotate(-45deg);
-  transform: rotate(-45deg);
-}
-.e-ripple {
-  position: absolute;
-  border-radius: 100%;
-  background-color: rgba(0, 0, 0, 0.15);
-  background-clip: padding-box;
-  pointer-events: none;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-  -webkit-transform: scale(0);
-  -ms-transform: scale(0);
-  transform: scale(0);
-  opacity: 1;
-}
-.e-ripple.z-active {
-  opacity: 0;
-  -webkit-transform: scale(2);
-  -ms-transform: scale(2);
-  transform: scale(2);
-  -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
-  transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
-  transition: opacity 1.2s ease-out, transform 0.6s ease-out;
-  transition: opacity 1.2s ease-out, transform 0.6s ease-out,
-    -webkit-transform 0.6s ease-out;
-}
-</style>
diff --git a/WebSite/src/components/ImageCropper/utils/data2blob.js b/WebSite/src/components/ImageCropper/utils/data2blob.js
deleted file mode 100644
index 59092dc..0000000
--- a/WebSite/src/components/ImageCropper/utils/data2blob.js
+++ /dev/null
@@ -1,19 +0,0 @@
-/**
- * database64文件格式转换为2进制
- *
- * @param  {[String]} data dataURL 的格式为 “data:image/png;base64,****”,逗号之前都是一些说明性的文字,我们只需要逗号之后的就行了
- * @param  {[String]} mime [description]
- * @return {[blob]}      [description]
- */
-export default function(data, mime) {
-  data = data.split(",")[1];
-  data = window.atob(data);
-  var ia = new Uint8Array(data.length);
-  for (var i = 0; i < data.length; i++) {
-    ia[i] = data.charCodeAt(i);
-  }
-  // canvas.toDataURL 返回的默认格式就是 image/png
-  return new Blob([ia], {
-    type: mime
-  });
-}
diff --git a/WebSite/src/components/ImageCropper/utils/effectRipple.js b/WebSite/src/components/ImageCropper/utils/effectRipple.js
deleted file mode 100644
index 3d42d00..0000000
--- a/WebSite/src/components/ImageCropper/utils/effectRipple.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * 点击波纹效果
- *
- * @param  {[event]} e        [description]
- * @param  {[Object]} arg_opts [description]
- * @return {[bollean]}          [description]
- */
-export default function(e, arg_opts) {
-  var opts = Object.assign(
-    {
-      ele: e.target, // 波纹作用元素
-      type: "hit", // hit点击位置扩散center中心点扩展
-      bgc: "rgba(0, 0, 0, 0.15)" // 波纹颜色
-    },
-    arg_opts
-  );
-  var target = opts.ele;
-  if (target) {
-    var rect = target.getBoundingClientRect();
-    var ripple = target.querySelector(".e-ripple");
-    if (!ripple) {
-      ripple = document.createElement("span");
-      ripple.className = "e-ripple";
-      ripple.style.height = ripple.style.width =
-        Math.max(rect.width, rect.height) + "px";
-      target.appendChild(ripple);
-    } else {
-      ripple.className = "e-ripple";
-    }
-    switch (opts.type) {
-      case "center":
-        ripple.style.top = rect.height / 2 - ripple.offsetHeight / 2 + "px";
-        ripple.style.left = rect.width / 2 - ripple.offsetWidth / 2 + "px";
-        break;
-      default:
-        ripple.style.top =
-          e.pageY -
-          rect.top -
-          ripple.offsetHeight / 2 -
-          document.body.scrollTop +
-          "px";
-        ripple.style.left =
-          e.pageX -
-          rect.left -
-          ripple.offsetWidth / 2 -
-          document.body.scrollLeft +
-          "px";
-    }
-    ripple.style.backgroundColor = opts.bgc;
-    ripple.className = "e-ripple z-active";
-    return false;
-  }
-}
diff --git a/WebSite/src/components/ImageCropper/utils/language.js b/WebSite/src/components/ImageCropper/utils/language.js
deleted file mode 100644
index 36cb300..0000000
--- a/WebSite/src/components/ImageCropper/utils/language.js
+++ /dev/null
@@ -1,240 +0,0 @@
-export default {
-  zh: {
-    hint: "点击,或拖动图片至此处",
-    loading: "正在上传……",
-    noSupported: "浏览器不支持该功能,请使用IE10以上或其他现在浏览器!",
-    success: "上传成功",
-    fail: "图片上传失败",
-    preview: "头像预览",
-    btn: {
-      off: "取消",
-      close: "关闭",
-      back: "上一步",
-      save: "保存"
-    },
-    error: {
-      onlyImg: "仅限图片格式",
-      outOfSize: "单文件大小不能超过 ",
-      lowestPx: "图片最低像素为(宽*高):"
-    }
-  },
-  "zh-tw": {
-    hint: "點擊,或拖動圖片至此處",
-    loading: "正在上傳……",
-    noSupported: "瀏覽器不支持該功能,請使用IE10以上或其他現代瀏覽器!",
-    success: "上傳成功",
-    fail: "圖片上傳失敗",
-    preview: "頭像預覽",
-    btn: {
-      off: "取消",
-      close: "關閉",
-      back: "上一步",
-      save: "保存"
-    },
-    error: {
-      onlyImg: "僅限圖片格式",
-      outOfSize: "單文件大小不能超過 ",
-      lowestPx: "圖片最低像素為(寬*高):"
-    }
-  },
-  en: {
-    hint: "Click or drag the file here to upload",
-    loading: "Uploading…",
-    noSupported: "Browser is not supported, please use IE10+ or other browsers",
-    success: "Upload success",
-    fail: "Upload failed",
-    preview: "Preview",
-    btn: {
-      off: "Cancel",
-      close: "Close",
-      back: "Back",
-      save: "Save"
-    },
-    error: {
-      onlyImg: "Image only",
-      outOfSize: "Image exceeds size limit: ",
-      lowestPx: "Image's size is too low. Expected at least: "
-    }
-  },
-  ro: {
-    hint: "Atinge sau trage fișierul aici",
-    loading: "Se încarcă",
-    noSupported:
-      "Browser-ul tău nu suportă acest feature. Te rugăm încearcă cu alt browser.",
-    success: "S-a încărcat cu succes",
-    fail: "A apărut o problemă la încărcare",
-    preview: "Previzualizează",
-
-    btn: {
-      off: "Anulează",
-      close: "ÃŽnchide",
-      back: "ÃŽnapoi",
-      save: "Salvează"
-    },
-
-    error: {
-      onlyImg: "Doar imagini",
-      outOfSize: "Imaginea depășește limita de: ",
-      loewstPx: "Imaginea este prea mică; Minim: "
-    }
-  },
-  ru: {
-    hint: "Нажмите, или перетащите файл в это окно",
-    loading: "Загружаю……",
-    noSupported:
-      "Ваш браузер не поддерживается, пожалуйста, используйте IE10 + или другие браузеры",
-    success: "Загрузка выполнена успешно",
-    fail: "Ошибка загрузки",
-    preview: "Предпросмотр",
-    btn: {
-      off: "Отменить",
-      close: "Закрыть",
-      back: "Назад",
-      save: "Сохранить"
-    },
-    error: {
-      onlyImg: "Только изображения",
-      outOfSize: "Изображение превышает предельный размер: ",
-      lowestPx: "Минимальный размер изображения: "
-    }
-  },
-  "pt-br": {
-    hint: "Clique ou arraste o arquivo aqui para carregar",
-    loading: "Carregando…",
-    noSupported: "Browser não suportado, use o IE10+ ou outro browser",
-    success: "Sucesso ao carregar imagem",
-    fail: "Falha ao carregar imagem",
-    preview: "Pré-visualizar",
-    btn: {
-      off: "Cancelar",
-      close: "Fechar",
-      back: "Voltar",
-      save: "Salvar"
-    },
-    error: {
-      onlyImg: "Apenas imagens",
-      outOfSize: "A imagem excede o limite de tamanho: ",
-      lowestPx: "O tamanho da imagem é muito pequeno. Tamanho mínimo: "
-    }
-  },
-  fr: {
-    hint: "Cliquez ou glissez le fichier ici.",
-    loading: "Téléchargement…",
-    noSupported:
-      "Votre navigateur n'est pas supporté. Utilisez IE10 + ou un autre navigateur s'il vous plaît.",
-    success: "Téléchargement réussit",
-    fail: "Téléchargement echoué",
-    preview: "Aperçu",
-    btn: {
-      off: "Annuler",
-      close: "Fermer",
-      back: "Retour",
-      save: "Enregistrer"
-    },
-    error: {
-      onlyImg: "Image uniquement",
-      outOfSize: "L'image sélectionnée dépasse la taille maximum: ",
-      lowestPx: "L'image sélectionnée est trop petite. Dimensions attendues: "
-    }
-  },
-  nl: {
-    hint: "Klik hier of sleep een afbeelding in dit vlak",
-    loading: "Uploaden…",
-    noSupported:
-      "Je browser wordt helaas niet ondersteund. Gebruik IE10+ of een andere browser.",
-    success: "Upload succesvol",
-    fail: "Upload mislukt",
-    preview: "Voorbeeld",
-    btn: {
-      off: "Annuleren",
-      close: "Sluiten",
-      back: "Terug",
-      save: "Opslaan"
-    },
-    error: {
-      onlyImg: "Alleen afbeeldingen",
-      outOfSize: "De afbeelding is groter dan: ",
-      lowestPx: "De afbeelding is te klein! Minimale afmetingen: "
-    }
-  },
-  tr: {
-    hint: "Tıkla veya yüklemek istediğini buraya sürükle",
-    loading: "Yükleniyor…",
-    noSupported:
-      "Tarayıcı desteklenmiyor, lütfen IE10+ veya farklı tarayıcı kullanın",
-    success: "Yükleme başarılı",
-    fail: "Yüklemede hata oluştu",
-    preview: "Önizle",
-    btn: {
-      off: "İptal",
-      close: "Kapat",
-      back: "Geri",
-      save: "Kaydet"
-    },
-    error: {
-      onlyImg: "Sadece resim",
-      outOfSize: "Resim yükleme limitini aşıyor: ",
-      lowestPx: "Resmin boyutu çok küçük. En az olması gereken: "
-    }
-  },
-  "es-MX": {
-    hint: "Selecciona o arrastra una imagen",
-    loading: "Subiendo...",
-    noSupported:
-      "Tu navegador no es soportado, porfavor usa IE10+ u otros navegadores mas recientes",
-    success: "Subido exitosamente",
-    fail: "Sucedió un error",
-    preview: "Vista previa",
-    btn: {
-      off: "Cancelar",
-      close: "Cerrar",
-      back: "Atras",
-      save: "Guardar"
-    },
-    error: {
-      onlyImg: "Unicamente imagenes",
-      outOfSize: "La imagen excede el tamaño maximo:",
-      lowestPx: "La imagen es demasiado pequeño. Se espera por lo menos:"
-    }
-  },
-  de: {
-    hint: "Klick hier oder zieh eine Datei hier rein zum Hochladen",
-    loading: "Hochladen…",
-    noSupported:
-      "Browser wird nicht unterstützt, bitte verwende IE10+ oder andere Browser",
-    success: "Upload erfolgreich",
-    fail: "Upload fehlgeschlagen",
-    preview: "Vorschau",
-    btn: {
-      off: "Abbrechen",
-      close: "Schließen",
-      back: "Zurück",
-      save: "Speichern"
-    },
-    error: {
-      onlyImg: "Nur Bilder",
-      outOfSize: "Das Bild ist zu groß: ",
-      lowestPx: "Das Bild ist zu klein. Mindestens: "
-    }
-  },
-  ja: {
-    hint: "クリック・ドラッグしてファイルをアップロード",
-    loading: "アップロード中...",
-    noSupported:
-      "このブラウザは対応されていません。IE10+かその他の主要ブラウザをお使いください。",
-    success: "アップロード成功",
-    fail: "アップロード失敗",
-    preview: "プレビュー",
-    btn: {
-      off: "キャンセル",
-      close: "閉じる",
-      back: "戻る",
-      save: "保存"
-    },
-    error: {
-      onlyImg: "画像のみ",
-      outOfSize: "画像サイズが上限を超えています。上限: ",
-      lowestPx: "画像が小さすぎます。最小サイズ: "
-    }
-  }
-};
diff --git a/WebSite/src/components/ImageCropper/utils/mimes.js b/WebSite/src/components/ImageCropper/utils/mimes.js
deleted file mode 100644
index 049d6bc..0000000
--- a/WebSite/src/components/ImageCropper/utils/mimes.js
+++ /dev/null
@@ -1,7 +0,0 @@
-export default {
-  jpg: "image/jpeg",
-  png: "image/png",
-  gif: "image/gif",
-  svg: "image/svg+xml",
-  psd: "image/photoshop"
-};
diff --git a/WebSite/src/components/JcRange/index.vue b/WebSite/src/components/JcRange/index.vue
deleted file mode 100644
index c75301b..0000000
--- a/WebSite/src/components/JcRange/index.vue
+++ /dev/null
@@ -1,170 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-18 16:39:04
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-06-19 16:21:56
--->
-<template>
-  <div class="jc-component__range">
-    <div class="jc-range" :class="rangeStatus ? 'success' : ''">
-      <div
-        :class="{ 'jc-range-block': true, login: rangeStatus }"
-        @mousedown="rangeMove"
-        @click="handleConfirm"
-      >
-        <i :class="rangeStatus ? successIcon : startIcon"></i>
-        <span> 登 录</span>
-      </div>
-      {{ rangeStatus ? successText : startText }}
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "JcRange",
-  props: {
-    // 成功之后的函数
-    successFun: {
-      type: Function
-    },
-    //成功图标
-    successIcon: {
-      type: String,
-      default: "el-icon-mouse"
-    },
-    //成功文字
-    successText: {
-      type: String,
-      default: "验证成功"
-    },
-    //开始的图标
-    startIcon: {
-      type: String,
-      default: "el-icon-right"
-    },
-    //开始的文字
-    startText: {
-      type: String,
-      default: "拖动滑块至最右以登录"
-    },
-    //失败之后的函数
-    errorFun: {
-      type: Function
-    },
-    //或者用值来进行监听
-    status: {
-      type: Boolean,
-      default: false
-    }
-  },
-  data() {
-    return {
-      disX: 0,
-      rangeStatus: false
-    };
-  },
-  methods: {
-    handleConfirm() {
-      this.$emit("handle-confirm");
-    },
-    //滑块移动
-    rangeMove(e) {
-      let ele = document.querySelector(".jc-range-block");
-      let startX = e.clientX;
-      let eleWidth = ele.offsetWidth;
-      let parentWidth = ele.parentElement.offsetWidth;
-      let MaxX = parentWidth - eleWidth;
-      if (this.rangeStatus) {
-        //不运行
-        return false;
-      }
-      document.onmousemove = e => {
-        let endX = e.clientX;
-        this.disX = endX - startX;
-        if (this.disX <= 0) {
-          this.disX = 0;
-        }
-        if (this.disX >= MaxX - eleWidth) {
-          //减去滑块的宽度,体验效果更好
-          this.disX = MaxX;
-        }
-        ele.style.transition = ".1s all";
-        ele.style.transform = "translateX(" + this.disX + "px)";
-        e.preventDefault();
-      };
-      document.onmouseup = () => {
-        if (this.disX !== MaxX) {
-          ele.style.transition = ".5s all";
-          ele.style.transform = "translateX(0)";
-          //执行成功的函数
-          this.errorFun && this.errorFun();
-        } else {
-          this.rangeStatus = true;
-          if (!this.status) {
-            this.$emit("update:status", true);
-          }
-          //执行成功的函数
-          this.successFun && this.successFun();
-        }
-        document.onmousemove = null;
-        document.onmouseup = null;
-      };
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-@mixin jc-flex {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-.jc-component__range {
-  .jc-range {
-    background-color: #e9e9e9;
-    position: relative;
-    transition: 1s all;
-    user-select: none;
-    color: #585858;
-    border-radius: 3px;
-    @include jc-flex;
-    height: 40px; /*no*/
-    &.success {
-      background-color: rgb(24, 144, 255);
-      color: #fff;
-      i {
-        color: rgb(24, 144, 255);
-      }
-    }
-    .jc-range-block {
-      position: absolute;
-      left: 0;
-      width: 50px; /*no*/
-      height: 100%;
-      color: #409eff;
-      border-radius: 3px;
-      background-color: #fff;
-      border: 1px solid #d8d8d8;
-      cursor: pointer;
-      font-size: 20px;
-      @include jc-flex;
-
-      span {
-        position: absolute;
-        left: 50px;
-        font-size: 14px;
-        margin-left: 5px;
-        opacity: 0;
-      }
-    }
-
-    .login {
-      left: -50px;
-      width: 100px;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/components/JsonEditor/index.vue b/WebSite/src/components/JsonEditor/index.vue
deleted file mode 100644
index 851e32c..0000000
--- a/WebSite/src/components/JsonEditor/index.vue
+++ /dev/null
@@ -1,72 +0,0 @@
-<template>
-  <div class="json-editor">
-    <textarea ref="textarea" />
-  </div>
-</template>
-
-<script>
-import CodeMirror from "codemirror";
-import "codemirror/addon/lint/lint.css";
-import "codemirror/lib/codemirror.css";
-import "codemirror/theme/rubyblue.css";
-require("script-loader!jsonlint");
-import "codemirror/mode/javascript/javascript";
-import "codemirror/addon/lint/lint";
-import "codemirror/addon/lint/json-lint";
-
-export default {
-  name: "JsonEditor",
-  /* eslint-disable vue/require-prop-types */
-  props: ["value"],
-  data() {
-    return {
-      jsonEditor: false
-    };
-  },
-  watch: {
-    value(value) {
-      const editorValue = this.jsonEditor.getValue();
-      if (value !== editorValue) {
-        this.jsonEditor.setValue(JSON.stringify(this.value, null, 2));
-      }
-    }
-  },
-  mounted() {
-    this.jsonEditor = CodeMirror.fromTextArea(this.$refs.textarea, {
-      lineNumbers: true,
-      mode: "application/json",
-      gutters: ["CodeMirror-lint-markers"],
-      theme: "rubyblue",
-      lint: true
-    });
-
-    this.jsonEditor.setValue(JSON.stringify(this.value, null, 2));
-    this.jsonEditor.on("change", cm => {
-      this.$emit("changed", cm.getValue());
-      this.$emit("input", cm.getValue());
-    });
-  },
-  methods: {
-    getValue() {
-      return this.jsonEditor.getValue();
-    }
-  }
-};
-</script>
-
-<style scoped>
-.json-editor {
-  height: 100%;
-  position: relative;
-}
-.json-editor >>> .CodeMirror {
-  height: auto;
-  min-height: 300px;
-}
-.json-editor >>> .CodeMirror-scroll {
-  min-height: 300px;
-}
-.json-editor >>> .cm-s-rubyblue span.cm-string {
-  color: #f08047;
-}
-</style>
diff --git a/WebSite/src/components/JumpDialog/components/JumpDialogItem.vue b/WebSite/src/components/JumpDialog/components/JumpDialogItem.vue
deleted file mode 100644
index 8335599..0000000
--- a/WebSite/src/components/JumpDialog/components/JumpDialogItem.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
- * @Descripttion: 
- * @Author: dongjunhua
- * @Date: 2020-08-20 08:32:52
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-08-20 12:55:38
--->
-<template>
-  <div v-if="visible">
-    <slot></slot>
-  </div>
-</template>
-
-<script>
-import { eventBus } from "../event-bus";
-export default {
-  name: "JumpDialogItem",
-  data() {
-    return {
-      visible: false
-    };
-  },
-  props: {
-    name: {
-      type: String
-    },
-    label: {
-      type: String
-    }
-  },
-  created() {
-    eventBus.$on("activeChange", activeName => {
-      this.visible = this.name === activeName;
-      this.visible && eventBus.$emit("setTitle", this.label);
-    });
-  },
-  mounted() {}
-};
-</script>
diff --git a/WebSite/src/components/JumpDialog/event-bus.js b/WebSite/src/components/JumpDialog/event-bus.js
deleted file mode 100644
index 03c63fd..0000000
--- a/WebSite/src/components/JumpDialog/event-bus.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * @Descripttion:
- * @Author: dongjunhua
- * @Date: 2020-08-20 08:42:33
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-08-20 08:44:20
- */
-import Vue from "vue";
-export const eventBus = new Vue();
diff --git a/WebSite/src/components/JumpDialog/index.vue b/WebSite/src/components/JumpDialog/index.vue
deleted file mode 100644
index 2ddcd16..0000000
--- a/WebSite/src/components/JumpDialog/index.vue
+++ /dev/null
@@ -1,103 +0,0 @@
-<!--
- * @Descripttion: 
- * @Author: dongjunhua
- * @Date: 2020-08-16 15:43:55
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-08-20 12:32:54
--->
-<template>
-  <div class="jump-dialog-outer-container" :style="{ width }">
-    <transition name="jump-dialog" mode="out-in">
-      <div class="jump-dialog-inner-container" v-show="!visible">
-        <slot name="layout"></slot>
-      </div>
-    </transition>
-    <transition name="jump-dialog" mode="out-in">
-      <div class="jump-dialog-inner-container" v-show="visible">
-        <el-card shadow="hover">
-          <el-page-header @back="goBack" :content="title"></el-page-header>
-          <div class="content-container">
-            <slot></slot>
-          </div>
-        </el-card>
-      </div>
-    </transition>
-  </div>
-</template>
-
-<script>
-import { eventBus } from "./event-bus";
-export default {
-  name: "JumpDialog",
-  props: {
-    visible: {
-      type: Boolean,
-      default: false
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    activeName: {
-      type: String
-    }
-  },
-  data() {
-    return {
-      title: ""
-    };
-  },
-  watch: {
-    activeName(val) {
-      eventBus.$emit("activeChange", val);
-    }
-  },
-  created() {
-    eventBus.$on("setTitle", title => {
-      this.title = title;
-    });
-  },
-  mounted() {},
-  beforeDestroy() {
-    eventBus.$off();
-  },
-  methods: {
-    goBack() {
-      this.$emit("update:visible", false);
-    }
-  }
-};
-</script>
-
-<style scoped>
-.jump-dialog-outer-container {
-  position: relative;
-  width: 100%;
-}
-.jump-dialog-inner-container {
-  position: absolute;
-  width: 100%;
-}
-.content-container {
-  width: 100%;
-  margin-top: 20px;
-}
-
-.jump-dialog-leave-active {
-  transition: all 0.6s ease;
-}
-
-.jump-dialog-enter-active {
-  transition: all 0.6s ease;
-}
-
-.jump-dialog-enter {
-  opacity: 0;
-  transform: translateX(-30px);
-}
-
-.jump-dialog-leave-to {
-  opacity: 0;
-  transform: translateX(30px);
-}
-</style>
diff --git a/WebSite/src/components/Kanban/index.vue b/WebSite/src/components/Kanban/index.vue
deleted file mode 100644
index a858ac9..0000000
--- a/WebSite/src/components/Kanban/index.vue
+++ /dev/null
@@ -1,98 +0,0 @@
-<template>
-  <div class="board-column">
-    <div class="board-column-header">
-      {{ headerText }}
-    </div>
-    <draggable
-      :list="list"
-      v-bind="$attrs"
-      class="board-column-content"
-      :set-data="setData"
-    >
-      <div v-for="element in list" :key="element.id" class="board-item">
-        {{ element.name }} {{ element.id }}
-      </div>
-    </draggable>
-  </div>
-</template>
-
-<script>
-import draggable from "vuedraggable";
-
-export default {
-  name: "DragKanbanDemo",
-  components: {
-    draggable
-  },
-  props: {
-    headerText: {
-      type: String,
-      default: "Header"
-    },
-    options: {
-      type: Object,
-      default() {
-        return {};
-      }
-    },
-    list: {
-      type: Array,
-      default() {
-        return [];
-      }
-    }
-  },
-  methods: {
-    setData(dataTransfer) {
-      // to avoid Firefox bug
-      // Detail see : https://github.com/RubaXa/Sortable/issues/1012
-      dataTransfer.setData("Text", "");
-    }
-  }
-};
-</script>
-<style lang="scss" scoped>
-.board-column {
-  min-width: 300px;
-  min-height: 100px;
-  height: auto;
-  overflow: hidden;
-  background: #f0f0f0;
-  border-radius: 3px;
-
-  .board-column-header {
-    height: 50px;
-    line-height: 50px;
-    overflow: hidden;
-    padding: 0 20px;
-    text-align: center;
-    background: #333;
-    color: #fff;
-    border-radius: 3px 3px 0 0;
-  }
-
-  .board-column-content {
-    height: auto;
-    overflow: hidden;
-    border: 10px solid transparent;
-    min-height: 60px;
-    display: flex;
-    justify-content: flex-start;
-    flex-direction: column;
-    align-items: center;
-
-    .board-item {
-      cursor: pointer;
-      width: 100%;
-      height: 64px;
-      margin: 5px 0;
-      background-color: #fff;
-      text-align: left;
-      line-height: 54px;
-      padding: 5px 10px;
-      box-sizing: border-box;
-      box-shadow: 0px 1px 3px 0 rgba(0, 0, 0, 0.2);
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/components/LayoutCard/index.vue b/WebSite/src/components/LayoutCard/index.vue
deleted file mode 100644
index 5861776..0000000
--- a/WebSite/src/components/LayoutCard/index.vue
+++ /dev/null
@@ -1,103 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-19 09:00:48
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-06-19 11:01:53
--->
-<template>
-  <div :class="['container', type]">
-    <header>
-      <div class="title-container" v-if="showTitle">
-        <slot name="title"></slot>
-      </div>
-    </header>
-    <main>
-      <div class="filter-container" v-if="showFilter">
-        <slot name="filter"></slot>
-      </div>
-      <div class="button-container" v-if="showButton">
-        <slot name="button"></slot>
-      </div>
-      <div class="content-container">
-        <slot name="content"></slot>
-      </div>
-    </main>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "LayoutCard",
-  props: {
-    type: {
-      type: String
-    },
-    showTitle: {
-      type: Boolean,
-      default: true
-    },
-    showFilter: {
-      type: Boolean,
-      default: true
-    },
-    showButton: {
-      type: Boolean,
-      default: true
-    }
-  }
-};
-</script>
-
-<style scoped>
-.container {
-  width: 100%;
-  border-radius: 4px;
-  border: 1px solid #e6ebf5;
-  background-color: #fff;
-  overflow: hidden;
-  color: #303133;
-  transition: 0.3s;
-  box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
-  padding: 20px;
-}
-.clearfix:before,
-.clearfix:after {
-  display: table;
-  content: "";
-}
-.clearfix:after {
-  clear: both;
-}
-.primary {
-  border-top: 3px solid #409eff;
-}
-.success {
-  border-top: 3px solid #67c23a;
-}
-.warning {
-  border-top: 3px solid #e6a23c;
-}
-.danger {
-  border-top: 3px solid #f56c6c;
-}
-.info {
-  border-top: 3px solid #909399;
-}
-.title-container {
-  padding-bottom: 20px;
-  margin-bottom: 20px;
-  border-bottom: 1px solid #dcdfe6;
-}
-.filter-container {
-  padding-bottom: 20px;
-  margin-bottom: 20px;
-  border-bottom: 1px solid #dcdfe6;
-}
-.button-container {
-  padding-bottom: 20px;
-}
-.content-container {
-  padding-bottom: 10px;
-}
-</style>
diff --git a/WebSite/src/components/MDinput/index.vue b/WebSite/src/components/MDinput/index.vue
deleted file mode 100644
index 822d19a..0000000
--- a/WebSite/src/components/MDinput/index.vue
+++ /dev/null
@@ -1,364 +0,0 @@
-<template>
-  <div :class="computedClasses" class="material-input__component">
-    <div :class="{ iconClass: icon }">
-      <i
-        v-if="icon"
-        :class="['el-icon-' + icon]"
-        class="el-input__icon material-input__icon"
-      />
-      <input
-        v-if="type === 'email'"
-        v-model="currentValue"
-        :name="name"
-        :placeholder="fillPlaceHolder"
-        :readonly="readonly"
-        :disabled="disabled"
-        :autocomplete="autoComplete"
-        :required="required"
-        type="email"
-        class="material-input"
-        @focus="handleMdFocus"
-        @blur="handleMdBlur"
-        @input="handleModelInput"
-      />
-      <input
-        v-if="type === 'url'"
-        v-model="currentValue"
-        :name="name"
-        :placeholder="fillPlaceHolder"
-        :readonly="readonly"
-        :disabled="disabled"
-        :autocomplete="autoComplete"
-        :required="required"
-        type="url"
-        class="material-input"
-        @focus="handleMdFocus"
-        @blur="handleMdBlur"
-        @input="handleModelInput"
-      />
-      <input
-        v-if="type === 'number'"
-        v-model="currentValue"
-        :name="name"
-        :placeholder="fillPlaceHolder"
-        :step="step"
-        :readonly="readonly"
-        :disabled="disabled"
-        :autocomplete="autoComplete"
-        :max="max"
-        :min="min"
-        :minlength="minlength"
-        :maxlength="maxlength"
-        :required="required"
-        type="number"
-        class="material-input"
-        @focus="handleMdFocus"
-        @blur="handleMdBlur"
-        @input="handleModelInput"
-      />
-      <input
-        v-if="type === 'password'"
-        v-model="currentValue"
-        :name="name"
-        :placeholder="fillPlaceHolder"
-        :readonly="readonly"
-        :disabled="disabled"
-        :autocomplete="autoComplete"
-        :max="max"
-        :min="min"
-        :required="required"
-        type="password"
-        class="material-input"
-        @focus="handleMdFocus"
-        @blur="handleMdBlur"
-        @input="handleModelInput"
-      />
-      <input
-        v-if="type === 'tel'"
-        v-model="currentValue"
-        :name="name"
-        :placeholder="fillPlaceHolder"
-        :readonly="readonly"
-        :disabled="disabled"
-        :autocomplete="autoComplete"
-        :required="required"
-        type="tel"
-        class="material-input"
-        @focus="handleMdFocus"
-        @blur="handleMdBlur"
-        @input="handleModelInput"
-      />
-      <input
-        v-if="type === 'text'"
-        v-model="currentValue"
-        :name="name"
-        :placeholder="fillPlaceHolder"
-        :readonly="readonly"
-        :disabled="disabled"
-        :autocomplete="autoComplete"
-        :minlength="minlength"
-        :maxlength="maxlength"
-        :required="required"
-        type="text"
-        class="material-input"
-        @focus="handleMdFocus"
-        @blur="handleMdBlur"
-        @input="handleModelInput"
-      />
-      <span class="material-input-bar" />
-      <label class="material-label">
-        <slot />
-      </label>
-    </div>
-  </div>
-</template>
-
-<script>
-// source:https://github.com/wemake-services/vue-material-input/blob/master/src/components/MaterialInput.vue
-
-export default {
-  name: "MdInput",
-  props: {
-    /* eslint-disable */
-    icon: String,
-    name: String,
-    type: {
-      type: String,
-      default: 'text'
-    },
-    value: [String, Number],
-    placeholder: String,
-    readonly: Boolean,
-    disabled: Boolean,
-    min: String,
-    max: String,
-    step: String,
-    minlength: Number,
-    maxlength: Number,
-    required: {
-      type: Boolean,
-      default: true
-    },
-    autoComplete: {
-      type: String,
-      default: 'off'
-    },
-    validateEvent: {
-      type: Boolean,
-      default: true
-    }
-  },
-  data() {
-    return {
-      currentValue: this.value,
-      focus: false,
-      fillPlaceHolder: null
-    }
-  },
-  computed: {
-    computedClasses() {
-      return {
-        'material--active': this.focus,
-        'material--disabled': this.disabled,
-        'material--raised': Boolean(this.focus || this.currentValue) // has value
-      }
-    }
-  },
-  watch: {
-    value(newValue) {
-      this.currentValue = newValue
-    }
-  },
-  methods: {
-    handleModelInput(event) {
-      const value = event.target.value
-      this.$emit('input', value)
-      if (this.$parent.$options.componentName === 'ElFormItem') {
-        if (this.validateEvent) {
-          this.$parent.$emit('el.form.change', [value])
-        }
-      }
-      this.$emit('change', value)
-    },
-    handleMdFocus(event) {
-      this.focus = true
-      this.$emit('focus', event)
-      if (this.placeholder && this.placeholder !== '') {
-        this.fillPlaceHolder = this.placeholder
-      }
-    },
-    handleMdBlur(event) {
-      this.focus = false
-      this.$emit('blur', event)
-      this.fillPlaceHolder = null
-      if (this.$parent.$options.componentName === 'ElFormItem') {
-        if (this.validateEvent) {
-          this.$parent.$emit('el.form.blur', [this.currentValue])
-        }
-      }
-    }
-  }
-}
-</script>
-
-<style lang="scss" scoped>
-  // Fonts:
-  $font-size-base: 16px;
-  $font-size-small: 18px;
-  $font-size-smallest: 12px;
-  $font-weight-normal: normal;
-  $font-weight-bold: bold;
-  $apixel: 1px;
-  // Utils
-  $spacer: 12px;
-  $transition: 0.2s ease all;
-  $index: 0px;
-  $index-has-icon: 30px;
-  // Theme:
-  $color-white: white;
-  $color-grey: #9E9E9E;
-  $color-grey-light: #E0E0E0;
-  $color-blue: #2196F3;
-  $color-red: #F44336;
-  $color-black: black;
-  // Base clases:
-  %base-bar-pseudo {
-    content: '';
-    height: 1px;
-    width: 0;
-    bottom: 0;
-    position: absolute;
-    transition: $transition;
-  }
-
-  // Mixins:
-  @mixin slided-top() {
-    top: - ($font-size-base + $spacer);
-    left: 0;
-    font-size: $font-size-base;
-    font-weight: $font-weight-bold;
-  }
-
-  // Component:
-  .material-input__component {
-    margin-top: 36px;
-    position: relative;
-    * {
-      box-sizing: border-box;
-    }
-    .iconClass {
-      .material-input__icon {
-        position: absolute;
-        left: 0;
-        line-height: $font-size-base;
-        color: $color-blue;
-        top: $spacer;
-        width: $index-has-icon;
-        height: $font-size-base;
-        font-size: $font-size-base;
-        font-weight: $font-weight-normal;
-        pointer-events: none;
-      }
-      .material-label {
-        left: $index-has-icon;
-      }
-      .material-input {
-        text-indent: $index-has-icon;
-      }
-    }
-    .material-input {
-      font-size: $font-size-base;
-      padding: $spacer $spacer $spacer - $apixel * 10 $spacer / 2;
-      display: block;
-      width: 100%;
-      border: none;
-      line-height: 1;
-      border-radius: 0;
-      &:focus {
-        outline: none;
-        border: none;
-        border-bottom: 1px solid transparent; // fixes the height issue
-      }
-    }
-    .material-label {
-      font-weight: $font-weight-normal;
-      position: absolute;
-      pointer-events: none;
-      left: $index;
-      top: 0;
-      transition: $transition;
-      font-size: $font-size-small;
-    }
-    .material-input-bar {
-      position: relative;
-      display: block;
-      width: 100%;
-      &:before {
-        @extend %base-bar-pseudo;
-        left: 50%;
-      }
-      &:after {
-        @extend %base-bar-pseudo;
-        right: 50%;
-      }
-    }
-    // Disabled state:
-    &.material--disabled {
-      .material-input {
-        border-bottom-style: dashed;
-      }
-    }
-    // Raised state:
-    &.material--raised {
-      .material-label {
-        @include slided-top();
-      }
-    }
-    // Active state:
-    &.material--active {
-      .material-input-bar {
-        &:before,
-        &:after {
-          width: 50%;
-        }
-      }
-    }
-  }
-
-  .material-input__component {
-    background: $color-white;
-    .material-input {
-      background: none;
-      color: $color-black;
-      text-indent: $index;
-      border-bottom: 1px solid $color-grey-light;
-    }
-    .material-label {
-      color: $color-grey;
-    }
-    .material-input-bar {
-      &:before,
-      &:after {
-        background: $color-blue;
-      }
-    }
-    // Active state:
-    &.material--active {
-      .material-label {
-        color: $color-blue;
-      }
-    }
-    // Errors:
-    &.material--has-errors {
-      &.material--active .material-label {
-        color: $color-red;
-      }
-      .material-input-bar {
-        &:before,
-        &:after {
-          background: transparent;
-        }
-      }
-    }
-  }
-</style>
diff --git a/WebSite/src/components/MarkdownEditor/default-options.js b/WebSite/src/components/MarkdownEditor/default-options.js
deleted file mode 100644
index e1da02d..0000000
--- a/WebSite/src/components/MarkdownEditor/default-options.js
+++ /dev/null
@@ -1,31 +0,0 @@
-// doc: https://nhnent.github.io/tui.editor/api/latest/ToastUIEditor.html#ToastUIEditor
-export default {
-  minHeight: "200px",
-  previewStyle: "vertical",
-  useCommandShortcut: true,
-  useDefaultHTMLSanitizer: true,
-  usageStatistics: false,
-  hideModeSwitch: false,
-  toolbarItems: [
-    "heading",
-    "bold",
-    "italic",
-    "strike",
-    "divider",
-    "hr",
-    "quote",
-    "divider",
-    "ul",
-    "ol",
-    "task",
-    "indent",
-    "outdent",
-    "divider",
-    "table",
-    "image",
-    "link",
-    "divider",
-    "code",
-    "codeblock"
-  ]
-};
diff --git a/WebSite/src/components/MarkdownEditor/index.vue b/WebSite/src/components/MarkdownEditor/index.vue
deleted file mode 100644
index 7343da7..0000000
--- a/WebSite/src/components/MarkdownEditor/index.vue
+++ /dev/null
@@ -1,122 +0,0 @@
-<template>
-  <div :id="id" />
-</template>
-
-<script>
-// deps for editor
-import "codemirror/lib/codemirror.css"; // codemirror
-import "tui-editor/dist/tui-editor.css"; // editor ui
-import "tui-editor/dist/tui-editor-contents.css"; // editor content
-
-import Editor from "tui-editor";
-import defaultOptions from "./default-options";
-
-export default {
-  name: "MarkdownEditor",
-  props: {
-    value: {
-      type: String,
-      default: ""
-    },
-    id: {
-      type: String,
-      required: false,
-      default() {
-        return (
-          "markdown-editor-" +
-          +new Date() +
-          ((Math.random() * 1000).toFixed(0) + "")
-        );
-      }
-    },
-    options: {
-      type: Object,
-      default() {
-        return defaultOptions;
-      }
-    },
-    mode: {
-      type: String,
-      default: "markdown"
-    },
-    height: {
-      type: String,
-      required: false,
-      default: "300px"
-    },
-    language: {
-      type: String,
-      required: false,
-      default: "en_US" // https://github.com/nhnent/tui.editor/tree/master/src/js/langs
-    }
-  },
-  data() {
-    return {
-      editor: null
-    };
-  },
-  computed: {
-    editorOptions() {
-      const options = Object.assign({}, defaultOptions, this.options);
-      options.initialEditType = this.mode;
-      options.height = this.height;
-      options.language = this.language;
-      return options;
-    }
-  },
-  watch: {
-    value(newValue, preValue) {
-      if (newValue !== preValue && newValue !== this.editor.getValue()) {
-        this.editor.setValue(newValue);
-      }
-    },
-    language(val) {
-      this.destroyEditor();
-      this.initEditor();
-    },
-    height(newValue) {
-      this.editor.height(newValue);
-    },
-    mode(newValue) {
-      this.editor.changeMode(newValue);
-    }
-  },
-  mounted() {
-    this.initEditor();
-  },
-  destroyed() {
-    this.destroyEditor();
-  },
-  methods: {
-    initEditor() {
-      this.editor = new Editor({
-        el: document.getElementById(this.id),
-        ...this.editorOptions
-      });
-      if (this.value) {
-        this.editor.setValue(this.value);
-      }
-      this.editor.on("change", () => {
-        this.$emit("input", this.editor.getValue());
-      });
-    },
-    destroyEditor() {
-      if (!this.editor) return;
-      this.editor.off("change");
-      this.editor.remove();
-    },
-    setValue(value) {
-      this.editor.setValue(value);
-    },
-    getValue() {
-      return this.editor.getValue();
-    },
-    setHtml(value) {
-      this.editor.setHtml(value);
-    },
-    getHtml() {
-      return this.editor.getHtml();
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/components/ModifyPassword/index.vue b/WebSite/src/components/ModifyPassword/index.vue
deleted file mode 100644
index 9357e15..0000000
--- a/WebSite/src/components/ModifyPassword/index.vue
+++ /dev/null
@@ -1,132 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-07-07 13:04:03
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-07-08 10:28:36
--->
-
-<template>
-  <el-dialog
-    :loading="loading"
-    :before-close="handleCloseDialog"
-    :close-on-click-modal="false"
-    width="30%"
-    :title="`${isInitial ? '首次登录请先' : ''}修改密码`"
-    :visible.sync="visible"
-  >
-    <el-form
-      ref="dataForm"
-      :model="data"
-      label-position="top"
-      size="large"
-      :rules="rules"
-    >
-      <el-form-item label="旧密码" style="width: 100%;" prop="oldPassword">
-        <el-input
-          show-password
-          placeholder="请输入旧密码"
-          v-model="data.oldPassword"
-          autocomplete="new-password"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="新密码" style="width: 100%;" prop="password">
-        <el-input
-          show-password
-          placeholder="请输入新密码"
-          v-model="data.password"
-          autocomplete="new-password"
-        ></el-input>
-      </el-form-item>
-      <el-form-item label="确认密码" style="width: 100%;" prop="passwordAgain">
-        <el-input
-          show-password
-          placeholder="请输再次入新密码"
-          v-model="data.passwordAgain"
-          autocomplete="new-password"
-        ></el-input>
-      </el-form-item>
-    </el-form>
-    <div slot="footer" class="dialog-footer">
-      <el-button @click="handleCloseDialog()">
-        取消
-      </el-button>
-      <el-button type="primary" @click="handleComfirm">
-        确认
-      </el-button>
-    </div>
-  </el-dialog>
-</template>
-
-<script>
-export default {
-  name: "ModifyPassword",
-  props: {
-    visible: {
-      type: Boolean,
-      default: false
-    },
-    isInitial: {
-      type: Boolean,
-      default: false
-    }
-  },
-  watch: {
-    visible(val) {
-      if (val) {
-        this.$refs["dataForm"] && this.$refs["dataForm"].resetFields();
-        this.data.id = this.$store.getters.accountId;
-      }
-    }
-  },
-  data() {
-    const validPasswordAgain = (rule, value, callback) => {
-      if (!value) {
-        callback(new Error("请再次输入新密码"));
-      } else {
-        if (this.data.password !== this.data.passwordAgain) {
-          callback(new Error("新密码两次输入必须一致"));
-        }
-        callback();
-      }
-    };
-    return {
-      loading: false,
-      data: {
-        id: "",
-        oldPassword: "",
-        password: "",
-        passwordAgain: ""
-      },
-      rules: {
-        oldPassword: [
-          { required: true, message: "请输入旧密码", trigger: "blur" }
-        ],
-        password: [
-          { required: true, message: "请输入新密码", trigger: "blur" }
-        ],
-        passwordAgain: [
-          { required: true, validator: validPasswordAgain, trigger: "blur" }
-        ]
-      }
-    };
-  },
-  methods: {
-    handleComfirm() {
-      this.$refs["dataForm"].validate(async valid => {
-        if (valid) {
-          try {
-            await this.$service.Account.modifyPassword(this.data);
-            this.$message.success("修改密码成功");
-            this.$emit("update:visible", false);
-            this.$emit("handle-confirm");
-          } catch (_) {}
-        }
-      });
-    },
-    handleCloseDialog() {
-      this.$emit("update:visible", false);
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/components/OrganizationSelectTree/index.vue b/WebSite/src/components/OrganizationSelectTree/index.vue
deleted file mode 100644
index 947daf8..0000000
--- a/WebSite/src/components/OrganizationSelectTree/index.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
- @Descripttion:
- @Author: gong qun
- @Date: 2020-06-18 10:25:12
- @LastEditors: gong qun
- @LastEditTime: 2020-06-18 10:25:12
--->
-<template>
-  <SelectTree
-    ref="selectTree"
-    :options="options"
-    placeholder="请选择部门"
-    @change="change"
-    :props="props"
-  ></SelectTree>
-</template>
-
-<script>
-import SelectTree from "@/components/SelectTree";
-export default {
-  components: {
-    SelectTree
-  },
-  name: "organization-select-tree",
-  data() {
-    return {
-      options: [],
-      props: {
-        value: "id",
-        label: "fullName",
-        children: "children"
-      }
-    };
-  },
-  mounted() {
-    let deptTree = sessionStorage.getItem("deptTree");
-    if (deptTree) {
-      this.options = JSON.parse(deptTree);
-      return;
-    }
-    this.$service.Organization.getTreeList().then(res => {
-      this.options = res.data;
-      sessionStorage.setItem("deptTree", JSON.stringify(this.options));
-    });
-  },
-  methods: {
-    change(value) {
-      this.$emit("change", value);
-    },
-    clearSelect() {
-      this.$refs.selectTree.clearSelect();
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/components/Pagination/index.vue b/WebSite/src/components/Pagination/index.vue
index 99c6f1f..d50ac2e 100644
--- a/WebSite/src/components/Pagination/index.vue
+++ b/WebSite/src/components/Pagination/index.vue
@@ -2,8 +2,8 @@
   <div :class="{ hidden: hidden }" class="pagination-container">
     <el-pagination
       :background="background"
-      :current-page.sync="currentPage"
-      :page-size.sync="pageSize"
+      v-model:current-page="currentPage"
+      v-model:page-size="pageSize"
       :layout="layout"
       :page-sizes="pageSizes"
       :total="total"
@@ -15,10 +15,10 @@
 </template>
 
 <script>
-import { scrollTo } from "@/utils/scroll-to";
+import { scrollTo } from '@/utils/scroll-to';
 
 export default {
-  name: "Pagination",
+  name: 'Pagination',
   props: {
     total: {
       required: true,
@@ -30,17 +30,17 @@ export default {
     },
     limit: {
       type: Number,
-      default: 20
+      default: 5
     },
     pageSizes: {
       type: Array,
       default() {
-        return [10, 20, 30, 50];
+        return [10, 20, 50, 100,200,500];
       }
     },
     layout: {
       type: String,
-      default: "total, sizes, prev, pager, next, jumper"
+      default: 'total, sizes, prev, pager, next, jumper'
     },
     background: {
       type: Boolean,
@@ -61,7 +61,7 @@ export default {
         return this.page;
       },
       set(val) {
-        this.$emit("update:page", val);
+        this.$emit('update:page', val);
       }
     },
     pageSize: {
@@ -69,19 +69,19 @@ export default {
         return this.limit;
       },
       set(val) {
-        this.$emit("update:limit", val);
+        this.$emit('update:limit', val);
       }
     }
   },
   methods: {
     handleSizeChange(val) {
-      this.$emit("pagination", { page: this.currentPage, limit: val });
+      this.$emit('pagination', { page: this.currentPage, limit: val });
       if (this.autoScroll) {
         scrollTo(0, 800);
       }
     },
     handleCurrentChange(val) {
-      this.$emit("pagination", { page: val, limit: this.pageSize });
+      this.$emit('pagination', { page: val, limit: this.pageSize });
       if (this.autoScroll) {
         scrollTo(0, 800);
       }
diff --git a/WebSite/src/components/PanThumb/index.vue b/WebSite/src/components/PanThumb/index.vue
deleted file mode 100644
index fc945ba..0000000
--- a/WebSite/src/components/PanThumb/index.vue
+++ /dev/null
@@ -1,146 +0,0 @@
-<template>
-  <div
-    :style="{ zIndex: zIndex, height: height, width: width }"
-    class="pan-item"
-  >
-    <div class="pan-info">
-      <div class="pan-info-roles-container">
-        <slot />
-      </div>
-    </div>
-    <!-- eslint-disable-next-line -->
-    <div :style="{backgroundImage: `url(${image})`}" class="pan-thumb"></div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "PanThumb",
-  props: {
-    image: {
-      type: String,
-      required: true
-    },
-    zIndex: {
-      type: Number,
-      default: 1
-    },
-    width: {
-      type: String,
-      default: "150px"
-    },
-    height: {
-      type: String,
-      default: "150px"
-    }
-  }
-};
-</script>
-
-<style scoped>
-.pan-item {
-  width: 200px;
-  height: 200px;
-  border-radius: 50%;
-  display: inline-block;
-  position: relative;
-  cursor: default;
-  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
-}
-
-.pan-info-roles-container {
-  padding: 20px;
-  text-align: center;
-}
-
-.pan-thumb {
-  width: 100%;
-  height: 100%;
-  background-position: center center;
-  background-size: cover;
-  border-radius: 50%;
-  overflow: hidden;
-  position: absolute;
-  transform-origin: 95% 40%;
-  transition: all 0.3s ease-in-out;
-}
-
-/* .pan-thumb:after {
-  content: '';
-  width: 8px;
-  height: 8px;
-  position: absolute;
-  border-radius: 50%;
-  top: 40%;
-  left: 95%;
-  margin: -4px 0 0 -4px;
-  background: radial-gradient(ellipse at center, rgba(14, 14, 14, 1) 0%, rgba(125, 126, 125, 1) 100%);
-  box-shadow: 0 0 1px rgba(255, 255, 255, 0.9);
-} */
-
-.pan-info {
-  position: absolute;
-  width: inherit;
-  height: inherit;
-  border-radius: 50%;
-  overflow: hidden;
-  box-shadow: inset 0 0 0 5px rgba(0, 0, 0, 0.05);
-}
-
-.pan-info h3 {
-  color: #fff;
-  text-transform: uppercase;
-  position: relative;
-  letter-spacing: 2px;
-  font-size: 18px;
-  margin: 0 60px;
-  padding: 22px 0 0 0;
-  height: 85px;
-  font-family: "Open Sans", Arial, sans-serif;
-  text-shadow: 0 0 1px #fff, 0 1px 2px rgba(0, 0, 0, 0.3);
-}
-
-.pan-info p {
-  color: #fff;
-  padding: 10px 5px;
-  font-style: italic;
-  margin: 0 30px;
-  font-size: 12px;
-  border-top: 1px solid rgba(255, 255, 255, 0.5);
-}
-
-.pan-info p a {
-  display: block;
-  color: #333;
-  width: 80px;
-  height: 80px;
-  background: rgba(255, 255, 255, 0.3);
-  border-radius: 50%;
-  color: #fff;
-  font-style: normal;
-  font-weight: 700;
-  text-transform: uppercase;
-  font-size: 9px;
-  letter-spacing: 1px;
-  padding-top: 24px;
-  margin: 7px auto 0;
-  font-family: "Open Sans", Arial, sans-serif;
-  opacity: 0;
-  transition: transform 0.3s ease-in-out 0.2s, opacity 0.3s ease-in-out 0.2s,
-    background 0.2s linear 0s;
-  transform: translateX(60px) rotate(90deg);
-}
-
-.pan-info p a:hover {
-  background: rgba(255, 255, 255, 0.5);
-}
-
-.pan-item:hover .pan-thumb {
-  transform: rotate(-110deg);
-}
-
-.pan-item:hover .pan-info p a {
-  opacity: 1;
-  transform: translateX(0px) rotate(0deg);
-}
-</style>
diff --git a/WebSite/src/components/RightPanel/index.vue b/WebSite/src/components/RightPanel/index.vue
deleted file mode 100644
index 3e9fb03..0000000
--- a/WebSite/src/components/RightPanel/index.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
-  <div ref="rightPanel" :class="{ show: show }" class="rightPanel-container">
-    <div class="rightPanel-background" />
-    <div class="rightPanel">
-      <div
-        class="handle-button"
-        :style="{ top: buttonTop + 'px', 'background-color': theme }"
-        @click="show = !show"
-      >
-        <i :class="show ? 'el-icon-close' : 'el-icon-setting'" />
-      </div>
-      <div class="rightPanel-items">
-        <slot />
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { addClass, removeClass } from "@/utils";
-
-export default {
-  name: "RightPanel",
-  props: {
-    clickNotClose: {
-      default: false,
-      type: Boolean
-    },
-    buttonTop: {
-      default: 250,
-      type: Number
-    }
-  },
-  data() {
-    return {
-      show: false
-    };
-  },
-  computed: {
-    theme() {
-      return this.$store.state.settings.theme;
-    }
-  },
-  watch: {
-    show(value) {
-      if (value && !this.clickNotClose) {
-        this.addEventClick();
-      }
-      if (value) {
-        addClass(document.body, "showRightPanel");
-      } else {
-        removeClass(document.body, "showRightPanel");
-      }
-    }
-  },
-  mounted() {
-    this.insertToBody();
-  },
-  beforeDestroy() {
-    const elx = this.$refs.rightPanel;
-    elx.remove();
-  },
-  methods: {
-    addEventClick() {
-      window.addEventListener("click", this.closeSidebar);
-    },
-    closeSidebar(evt) {
-      const parent = evt.target.closest(".rightPanel");
-      if (!parent) {
-        this.show = false;
-        window.removeEventListener("click", this.closeSidebar);
-      }
-    },
-    insertToBody() {
-      const elx = this.$refs.rightPanel;
-      const body = document.querySelector("body");
-      body.insertBefore(elx, body.firstChild);
-    }
-  }
-};
-</script>
-
-<style>
-.showRightPanel {
-  overflow: hidden;
-  position: relative;
-  width: calc(100% - 15px);
-}
-</style>
-
-<style lang="scss" scoped>
-.rightPanel-background {
-  position: fixed;
-  top: 0;
-  left: 0;
-  opacity: 0;
-  transition: opacity 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);
-  background: rgba(0, 0, 0, 0.2);
-  z-index: -1;
-}
-
-.rightPanel {
-  width: 100%;
-  max-width: 260px;
-  height: 100vh;
-  position: fixed;
-  top: 0;
-  right: 0;
-  box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.05);
-  transition: all 0.25s cubic-bezier(0.7, 0.3, 0.1, 1);
-  transform: translate(100%);
-  background: #fff;
-  z-index: 40000;
-}
-
-.show {
-  transition: all 0.3s cubic-bezier(0.7, 0.3, 0.1, 1);
-
-  .rightPanel-background {
-    z-index: 20000;
-    opacity: 1;
-    width: 100%;
-    height: 100%;
-  }
-
-  .rightPanel {
-    transform: translate(0);
-  }
-}
-
-.handle-button {
-  width: 48px;
-  height: 48px;
-  position: absolute;
-  left: -48px;
-  text-align: center;
-  font-size: 24px;
-  border-radius: 6px 0 0 6px !important;
-  z-index: 0;
-  pointer-events: auto;
-  cursor: pointer;
-  color: #fff;
-  line-height: 48px;
-  i {
-    font-size: 24px;
-    line-height: 48px;
-  }
-}
-</style>
diff --git a/WebSite/src/components/Screenfull/index.vue b/WebSite/src/components/Screenfull/index.vue
deleted file mode 100644
index 69e328b..0000000
--- a/WebSite/src/components/Screenfull/index.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-<template>
-  <div>
-    <svg-icon
-      :icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
-      @click="click"
-    />
-  </div>
-</template>
-
-<script>
-import screenfull from "screenfull";
-
-export default {
-  name: "Screenfull",
-  data() {
-    return {
-      isFullscreen: false
-    };
-  },
-  mounted() {
-    this.init();
-  },
-  beforeDestroy() {
-    this.destroy();
-  },
-  methods: {
-    click() {
-      if (!screenfull.enabled) {
-        this.$message({
-          message: "you browser can not work",
-          type: "warning"
-        });
-        return false;
-      }
-      screenfull.toggle();
-    },
-    change() {
-      this.isFullscreen = screenfull.isFullscreen;
-    },
-    init() {
-      if (screenfull.enabled) {
-        screenfull.on("change", this.change);
-      }
-    },
-    destroy() {
-      if (screenfull.enabled) {
-        screenfull.off("change", this.change);
-      }
-    }
-  }
-};
-</script>
-
-<style scoped>
-.screenfull-svg {
-  display: inline-block;
-  cursor: pointer;
-  fill: #5a5e66;
-  width: 20px;
-  height: 20px;
-  vertical-align: 10px;
-}
-</style>
diff --git a/WebSite/src/components/SelectTree/index.vue b/WebSite/src/components/SelectTree/index.vue
deleted file mode 100644
index 28637e0..0000000
--- a/WebSite/src/components/SelectTree/index.vue
+++ /dev/null
@@ -1,201 +0,0 @@
-<!--
- @Descripttion:
- @Author: gong qun
- @Date: 2020-06-18 10:25:12
- @LastEditors: gong qun
- @LastEditTime: 2020-06-18 10:25:12
--->
-<template>
-  <el-select
-    :value="valueTitle"
-    :clearable="clearable"
-    @clear="clearSelect"
-    :placeholder="placeholder"
-    ref="select"
-    :filterable="filterable"
-    :filter-method="filterMethod"
-    style="width:100%"
-  >
-    <el-option :value="valueTitle" :label="valueTitle">
-      <el-tree
-        id="tree-option"
-        ref="selectTree"
-        :data="options"
-        :props="props"
-        :node-key="props.value"
-        :default-expanded-keys="defaultExpandedKey"
-        :default-expand-all="true"
-        @node-click="handleNodeClick"
-        :filter-node-method="filterNode"
-        :expand-on-click-node="false"
-      >
-      </el-tree>
-    </el-option>
-  </el-select>
-</template>
-
-<script>
-export default {
-  name: "select-tree",
-  props: {
-    /* 配置项 */
-    props: {
-      type: Object,
-      default: () => {
-        return {
-          value: "id", // ID字段名
-          label: "name", // 显示名称
-          children: "children" // 子级字段名
-        };
-      }
-    },
-    /* 选项列表(树) */
-    options: {
-      type: Array,
-      default: () => {
-        return [];
-      }
-    },
-    /* 初始值 */
-    value: {
-      type: String,
-      default: () => {
-        return null;
-      }
-    },
-    /* 可清空选项 */
-    clearable: {
-      type: Boolean,
-      default: () => {
-        return true;
-      }
-    },
-    /* 选中后隐藏下拉框 */
-    autoHide: {
-      type: Boolean,
-      default: () => {
-        return true;
-      }
-    },
-    /* 是否可搜索 */
-    filterable: {
-      type: Boolean,
-      default: () => {
-        return true;
-      }
-    },
-    /* 提示文字 */
-    placeholder: {
-      type: String,
-      default: () => {
-        return "请选择";
-      }
-    }
-  },
-  data() {
-    return {
-      valueId: this.value, // 初始值
-      valueTitle: "",
-      defaultExpandedKey: []
-    };
-  },
-  mounted() {
-    this.initHandle();
-  },
-  methods: {
-    // 初始化值
-    initHandle() {
-      if (this.valueId) {
-        this.valueTitle = this.$refs.selectTree.getNode(this.valueId).data[
-          this.props.label
-        ]; // 初始化显示
-        this.$refs.selectTree.setCurrentKey(this.valueId); // 设置默认选中
-        this.defaultExpandedKey = [this.valueId]; // 设置默认展开
-      }
-      this.$nextTick(() => {
-        let scrollWrap = document.querySelectorAll(
-          ".el-scrollbar .el-select-dropdown__wrap"
-        )[0];
-        let scrollBar = document.querySelectorAll(
-          ".el-scrollbar .el-scrollbar__bar"
-        );
-        scrollWrap.style.cssText =
-          "margin: 0px; max-height: none; overflow: hidden;";
-        scrollBar.forEach(ele => (ele.style.width = 0));
-      });
-    },
-    // 切换选项
-    handleNodeClick(node) {
-      this.valueTitle = node[this.props.label];
-      this.valueId = node[this.props.value];
-      this.$emit("change", this.valueId);
-      this.defaultExpandedKey = [];
-      if (this.autoHide) {
-        this.$refs.select.blur();
-      }
-      this.filterMethod(null);
-    },
-    // 清除选中
-    clearSelect() {
-      this.valueTitle = "";
-      this.valueId = null;
-      this.defaultExpandedKey = [];
-      this.clearSelected();
-      this.$emit("change", null);
-      this.filterMethod(null);
-    },
-    /* 清空选中样式 */
-    clearSelected() {
-      let allNode = document.querySelectorAll("#tree-option .el-tree-node");
-      allNode.forEach(element => element.classList.remove("is-current"));
-    },
-    /* 筛选节点 */
-    filterMethod(val) {
-      this.$refs.selectTree.filter(val);
-    },
-    filterNode(value, data) {
-      if (!value) return true;
-      return (
-        data[this.props.label].toLowerCase().indexOf(value.toLowerCase()) !== -1
-      );
-    }
-  },
-  watch: {
-    value() {
-      this.valueId = this.value;
-      this.initHandle();
-    }
-  }
-};
-</script>
-
-<style scoped>
-.el-scrollbar .el-scrollbar__view .el-select-dropdown__item {
-  height: auto;
-  max-height: 274px;
-  padding: 0;
-  overflow: hidden;
-  overflow-y: auto;
-}
-.el-select-dropdown__item.selected {
-  font-weight: normal;
-}
-ul li >>> .el-tree .el-tree-node__content {
-  height: auto;
-  padding: 0 20px;
-}
-.el-tree-node__label {
-  font-weight: normal;
-}
-.el-tree >>> .is-current .el-tree-node__label {
-  color: #409eff;
-  font-weight: 700;
-}
-.el-tree >>> .is-current .el-tree-node__children .el-tree-node__label {
-  color: #606266;
-  font-weight: normal;
-}
-.el-select-dropdown__list {
-  padding: 0px;
-}
-</style>
diff --git a/WebSite/src/components/SelectUser/index.vue b/WebSite/src/components/SelectUser/index.vue
deleted file mode 100644
index b909e8d..0000000
--- a/WebSite/src/components/SelectUser/index.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-11 13:21:28
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-07-15 17:33:39
--->
-<template>
-  <el-dialog
-    :visible.sync="visible"
-    width="30%"
-    :show-close="false"
-    :close-on-click-modal="false"
-  >
-    <span slot="title">
-      <i class="el-icon-user"> 选择用户</i>
-    </span>
-    <el-row :gutter="20">
-      <el-col
-        v-for="item in userList"
-        :key="item.id"
-        :item="item"
-        :sm="24"
-        :md="12"
-        :lg="8"
-      >
-        <div @click="handleSelectUser(item.id)">
-          <el-card
-            :class="{
-              'box-card': true,
-              'box-card-selected': selectedUserId === item.id
-            }"
-            :shadow="selectedUserId === item.id ? 'always' : 'hover'"
-          >
-            <el-radio v-model="selectedUserId" :label="item.id">
-              {{ `${item.name}` }}
-            </el-radio>
-          </el-card>
-        </div>
-      </el-col>
-    </el-row>
-    <span slot="footer" class="dialog-footer tright">
-      <el-button type="primary" @click="handleConfirm">确定</el-button>
-    </span>
-  </el-dialog>
-</template>
-
-<script>
-export default {
-  name: "SelectUser",
-  props: {
-    visible: {
-      type: Boolean,
-      default: false
-    },
-    userList: {
-      type: Array,
-      default: () => []
-    }
-  },
-  data() {
-    return {
-      selectedUserId: ""
-    };
-  },
-  watch: {
-    visible(val) {
-      if (val) {
-        this.selectedUserId = this.userList[0].id;
-      }
-    }
-  },
-  methods: {
-    handleSelectUser(id) {
-      this.selectedUserId = id;
-    },
-    handleConfirm() {
-      this.$emit("handle-confirm", this.selectedUserId);
-      this.$emit("update:visible", false);
-    }
-  }
-};
-</script>
-
-<style scoped>
-.el-col {
-  margin-bottom: 10px;
-}
-.box-card {
-  cursor: pointer;
-  border-color: #dcdfe6;
-}
-.box-card-selected {
-  background: rgb(236, 245, 255);
-  border-color: rgb(102, 177, 255);
-}
-</style>
diff --git a/WebSite/src/components/Share/DropdownMenu.vue b/WebSite/src/components/Share/DropdownMenu.vue
deleted file mode 100644
index 20214e6..0000000
--- a/WebSite/src/components/Share/DropdownMenu.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-<template>
-  <div :class="{ active: isActive }" class="share-dropdown-menu">
-    <div class="share-dropdown-menu-wrapper">
-      <span class="share-dropdown-menu-title" @click.self="clickTitle">{{
-        title
-      }}</span>
-      <div
-        v-for="(item, index) of items"
-        :key="index"
-        class="share-dropdown-menu-item"
-      >
-        <a v-if="item.href" :href="item.href" target="_blank">{{
-          item.title
-        }}</a>
-        <span v-else>{{ item.title }}</span>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  props: {
-    items: {
-      type: Array,
-      default: function() {
-        return [];
-      }
-    },
-    title: {
-      type: String,
-      default: "vue"
-    }
-  },
-  data() {
-    return {
-      isActive: false
-    };
-  },
-  methods: {
-    clickTitle() {
-      this.isActive = !this.isActive;
-    }
-  }
-};
-</script>
-
-<style lang="scss">
-$n: 9; //和items.length 相同
-$t: 0.1s;
-.share-dropdown-menu {
-  width: 250px;
-  position: relative;
-  z-index: 1;
-  height: auto !important;
-  &-title {
-    width: 100%;
-    display: block;
-    cursor: pointer;
-    background: black;
-    color: white;
-    height: 60px;
-    line-height: 60px;
-    font-size: 20px;
-    text-align: center;
-    z-index: 2;
-    transform: translate3d(0, 0, 0);
-  }
-  &-wrapper {
-    position: relative;
-  }
-  &-item {
-    text-align: center;
-    position: absolute;
-    width: 100%;
-    background: #e0e0e0;
-    color: #000;
-    line-height: 60px;
-    height: 60px;
-    cursor: pointer;
-    font-size: 18px;
-    overflow: hidden;
-    opacity: 1;
-    transition: transform 0.28s ease;
-    &:hover {
-      background: black;
-      color: white;
-    }
-    @for $i from 1 through $n {
-      &:nth-of-type(#{$i}) {
-        z-index: -1;
-        transition-delay: $i * $t;
-        transform: translate3d(0, -60px, 0);
-      }
-    }
-  }
-  &.active {
-    .share-dropdown-menu-wrapper {
-      z-index: 1;
-    }
-    .share-dropdown-menu-item {
-      @for $i from 1 through $n {
-        &:nth-of-type(#{$i}) {
-          transition-delay: ($n - $i) * $t;
-          transform: translate3d(0, ($i - 1) * 60px, 0);
-        }
-      }
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/components/SizeSelect/index.vue b/WebSite/src/components/SizeSelect/index.vue
deleted file mode 100644
index d4aa5ba..0000000
--- a/WebSite/src/components/SizeSelect/index.vue
+++ /dev/null
@@ -1,60 +0,0 @@
-<template>
-  <el-dropdown trigger="click" @command="handleSetSize">
-    <div>
-      <svg-icon class-name="size-icon" icon-class="size" />
-    </div>
-    <el-dropdown-menu slot="dropdown">
-      <el-dropdown-item
-        v-for="item of sizeOptions"
-        :key="item.value"
-        :disabled="size === item.value"
-        :command="item.value"
-      >
-        {{ item.label }}
-      </el-dropdown-item>
-    </el-dropdown-menu>
-  </el-dropdown>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      sizeOptions: [
-        { label: "Default", value: "default" },
-        { label: "Medium", value: "medium" },
-        { label: "Small", value: "small" },
-        { label: "Mini", value: "mini" }
-      ]
-    };
-  },
-  computed: {
-    size() {
-      return this.$store.getters.size;
-    }
-  },
-  methods: {
-    handleSetSize(size) {
-      this.$ELEMENT.size = size;
-      this.$store.dispatch("app/setSize", size);
-      this.refreshView();
-      this.$message({
-        message: "Switch Size Success",
-        type: "success"
-      });
-    },
-    refreshView() {
-      // In order to make the cached page re-rendered
-      this.$store.dispatch("tagsView/delAllCachedViews", this.$route);
-
-      const { fullPath } = this.$route;
-
-      this.$nextTick(() => {
-        this.$router.replace({
-          path: "/redirect" + fullPath
-        });
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/components/Sticky/index.vue b/WebSite/src/components/Sticky/index.vue
deleted file mode 100644
index 332c613..0000000
--- a/WebSite/src/components/Sticky/index.vue
+++ /dev/null
@@ -1,97 +0,0 @@
-<template>
-  <div :style="{ height: height + 'px', zIndex: zIndex }">
-    <div
-      :class="className"
-      :style="{
-        top: isSticky ? stickyTop + 'px' : '',
-        zIndex: zIndex,
-        position: position,
-        width: width,
-        height: height + 'px'
-      }"
-    >
-      <slot>
-        <div>sticky</div>
-      </slot>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "Sticky",
-  props: {
-    stickyTop: {
-      type: Number,
-      default: 0
-    },
-    zIndex: {
-      type: Number,
-      default: 1
-    },
-    className: {
-      type: String,
-      default: ""
-    }
-  },
-  data() {
-    return {
-      active: false,
-      position: "",
-      width: undefined,
-      height: undefined,
-      isSticky: false
-    };
-  },
-  mounted() {
-    this.height = this.$el.getBoundingClientRect().height;
-    window.addEventListener("scroll", this.handleScroll);
-    window.addEventListener("resize", this.handleResize);
-  },
-  activated() {
-    this.handleScroll();
-  },
-  destroyed() {
-    window.removeEventListener("scroll", this.handleScroll);
-    window.removeEventListener("resize", this.handleResize);
-  },
-  methods: {
-    sticky() {
-      if (this.active) {
-        return;
-      }
-      this.position = "fixed";
-      this.active = true;
-      this.width = this.width + "px";
-      this.isSticky = true;
-    },
-    handleReset() {
-      if (!this.active) {
-        return;
-      }
-      this.reset();
-    },
-    reset() {
-      this.position = "";
-      this.width = "auto";
-      this.active = false;
-      this.isSticky = false;
-    },
-    handleScroll() {
-      const width = this.$el.getBoundingClientRect().width;
-      this.width = width || "auto";
-      const offsetTop = this.$el.getBoundingClientRect().top;
-      if (offsetTop < this.stickyTop) {
-        this.sticky();
-        return;
-      }
-      this.handleReset();
-    },
-    handleResize() {
-      if (this.isSticky) {
-        this.width = this.$el.getBoundingClientRect().width + "px";
-      }
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/components/SvgIcon/index.vue b/WebSite/src/components/SvgIcon/index.vue
index 1f16cb8..909549e 100644
--- a/WebSite/src/components/SvgIcon/index.vue
+++ b/WebSite/src/components/SvgIcon/index.vue
@@ -1,21 +1,28 @@
+<!--
+ * @Description: 
+ * @Autor: dongjunhua
+ * @Date: 2020-12-18 10:56:19
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-05 16:51:44
+-->
 <template>
   <div
     v-if="isExternal"
     :style="styleExternalIcon"
     class="svg-external-icon svg-icon"
-    v-on="$listeners"
+    v-bind="$attrs"
   />
-  <svg v-else :class="svgClass" aria-hidden="true" v-on="$listeners">
-    <use :href="iconName" />
+  <svg v-else :class="svgClass" aria-hidden="true" v-bind="$attrs">
+    <use :xlink:href="iconName" />
   </svg>
 </template>
 
 <script>
 // doc: https://panjiachen.github.io/vue-element-admin-site/feature/component/svg-icon.html#usage
-import { isExternal } from "@/utils/validate";
+import { isExternal } from '@/utils/validate';
 
 export default {
-  name: "SvgIcon",
+  name: 'SvgIcon',
   props: {
     iconClass: {
       type: String,
@@ -23,7 +30,7 @@ export default {
     },
     className: {
       type: String,
-      default: ""
+      default: ''
     }
   },
   computed: {
@@ -35,15 +42,15 @@ export default {
     },
     svgClass() {
       if (this.className) {
-        return "svg-icon " + this.className;
+        return 'svg-icon ' + this.className;
       } else {
-        return "svg-icon";
+        return 'svg-icon';
       }
     },
     styleExternalIcon() {
       return {
         mask: `url(${this.iconClass}) no-repeat 50% 50%`,
-        "-webkit-mask": `url(${this.iconClass}) no-repeat 50% 50%`
+        '-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
       };
     }
   }
diff --git a/WebSite/src/components/TextField/index.vue b/WebSite/src/components/TextField/index.vue
deleted file mode 100644
index 4f1995a..0000000
--- a/WebSite/src/components/TextField/index.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-<!--
- * @Descripttion: 
- * @Author: dongjunhua
- * @Date: 2020-08-16 13:43:13
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-09-13 15:18:40
--->
-<template>
-  <div class="text-field">
-    <slot></slot>
-  </div>
-</template>
-<script>
-export default {
-  name: "TextField"
-};
-</script>
-<style scoped>
-.text-field {
-  width: 100%;
-  border: 1px solid #ebeef5;
-  border-radius: 4px;
-  background-color: #fafafa;
-  padding: 20px;
-  font-size: 12px;
-}
-
-.text-field span {
-  line-height: 24px;
-}
-</style>
diff --git a/WebSite/src/components/TextHoverEffect/Mallki.vue b/WebSite/src/components/TextHoverEffect/Mallki.vue
deleted file mode 100644
index 7a7efab..0000000
--- a/WebSite/src/components/TextHoverEffect/Mallki.vue
+++ /dev/null
@@ -1,113 +0,0 @@
-<template>
-  <a :class="className" class="link--mallki" href="#">
-    {{ text }}
-    <span :data-letters="text" />
-    <span :data-letters="text" />
-  </a>
-</template>
-
-<script>
-export default {
-  props: {
-    className: {
-      type: String,
-      default: ""
-    },
-    text: {
-      type: String,
-      default: "vue-element-admin"
-    }
-  }
-};
-</script>
-
-<style>
-/* Mallki */
-
-.link--mallki {
-  font-weight: 800;
-  color: #4dd9d5;
-  font-family: "Dosis", sans-serif;
-  -webkit-transition: color 0.5s 0.25s;
-  transition: color 0.5s 0.25s;
-  overflow: hidden;
-  position: relative;
-  display: inline-block;
-  line-height: 1;
-  outline: none;
-  text-decoration: none;
-}
-
-.link--mallki:hover {
-  -webkit-transition: none;
-  transition: none;
-  color: transparent;
-}
-
-.link--mallki::before {
-  content: "";
-  width: 100%;
-  height: 6px;
-  margin: -3px 0 0 0;
-  background: #3888fa;
-  position: absolute;
-  left: 0;
-  top: 50%;
-  -webkit-transform: translate3d(-100%, 0, 0);
-  transform: translate3d(-100%, 0, 0);
-  -webkit-transition: -webkit-transform 0.4s;
-  transition: transform 0.4s;
-  -webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
-  transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1);
-}
-
-.link--mallki:hover::before {
-  -webkit-transform: translate3d(100%, 0, 0);
-  transform: translate3d(100%, 0, 0);
-}
-
-.link--mallki span {
-  position: absolute;
-  height: 50%;
-  width: 100%;
-  left: 0;
-  top: 0;
-  overflow: hidden;
-}
-
-.link--mallki span::before {
-  content: attr(data-letters);
-  color: red;
-  position: absolute;
-  left: 0;
-  width: 100%;
-  color: #3888fa;
-  -webkit-transition: -webkit-transform 0.5s;
-  transition: transform 0.5s;
-}
-
-.link--mallki span:nth-child(2) {
-  top: 50%;
-}
-
-.link--mallki span:first-child::before {
-  top: 0;
-  -webkit-transform: translate3d(0, 100%, 0);
-  transform: translate3d(0, 100%, 0);
-}
-
-.link--mallki span:nth-child(2)::before {
-  bottom: 0;
-  -webkit-transform: translate3d(0, -100%, 0);
-  transform: translate3d(0, -100%, 0);
-}
-
-.link--mallki:hover span::before {
-  -webkit-transition-delay: 0.3s;
-  transition-delay: 0.3s;
-  -webkit-transform: translate3d(0, 0, 0);
-  transform: translate3d(0, 0, 0);
-  -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
-  transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1);
-}
-</style>
diff --git a/WebSite/src/components/ThemePicker/index.vue b/WebSite/src/components/ThemePicker/index.vue
deleted file mode 100644
index 3fc0c26..0000000
--- a/WebSite/src/components/ThemePicker/index.vue
+++ /dev/null
@@ -1,198 +0,0 @@
-<template>
-  <el-color-picker
-    v-model="theme"
-    :predefine="[
-      '#409EFF',
-      '#1890ff',
-      '#304156',
-      '#212121',
-      '#11a983',
-      '#13c2c2',
-      '#6959CD',
-      '#f5222d'
-    ]"
-    class="theme-picker"
-    popper-class="theme-picker-dropdown"
-  />
-</template>
-
-<script>
-const version = require("element-ui/package.json").version; // element-ui version from node_modules
-const ORIGINAL_THEME = "#409EFF"; // default color
-
-export default {
-  data() {
-    return {
-      chalk: "", // content of theme-chalk css
-      theme: ""
-    };
-  },
-  computed: {
-    defaultTheme() {
-      return this.$store.state.settings.theme;
-    }
-  },
-  watch: {
-    defaultTheme: {
-      handler: function(val, oldVal) {
-        this.theme = val;
-      },
-      immediate: true
-    },
-    async theme(val) {
-      const oldVal = this.chalk ? this.theme : ORIGINAL_THEME;
-      if (typeof val !== "string") return;
-      const themeCluster = this.getThemeCluster(val.replace("#", ""));
-      const originalCluster = this.getThemeCluster(oldVal.replace("#", ""));
-      console.log(themeCluster, originalCluster);
-
-      const $message = this.$message({
-        message: "  Compiling the theme",
-        customClass: "theme-message",
-        type: "success",
-        duration: 0,
-        iconClass: "el-icon-loading"
-      });
-
-      const getHandler = (variable, id) => {
-        return () => {
-          const originalCluster = this.getThemeCluster(
-            ORIGINAL_THEME.replace("#", "")
-          );
-          const newStyle = this.updateStyle(
-            this[variable],
-            originalCluster,
-            themeCluster
-          );
-
-          let styleTag = document.getElementById(id);
-          if (!styleTag) {
-            styleTag = document.createElement("style");
-            styleTag.setAttribute("id", id);
-            document.head.appendChild(styleTag);
-          }
-          styleTag.innerText = newStyle;
-        };
-      };
-
-      if (!this.chalk) {
-        const url = `https://unpkg.com/element-ui@${version}/lib/theme-chalk/index.css`;
-        await this.getCSSString(url, "chalk");
-      }
-
-      const chalkHandler = getHandler("chalk", "chalk-style");
-
-      chalkHandler();
-
-      const styles = [].slice
-        .call(document.querySelectorAll("style"))
-        .filter(style => {
-          const text = style.innerText;
-          return (
-            new RegExp(oldVal, "i").test(text) && !/Chalk Variables/.test(text)
-          );
-        });
-      styles.forEach(style => {
-        const { innerText } = style;
-        if (typeof innerText !== "string") return;
-        style.innerText = this.updateStyle(
-          innerText,
-          originalCluster,
-          themeCluster
-        );
-      });
-
-      this.$emit("change", val);
-
-      $message.close();
-    }
-  },
-
-  methods: {
-    updateStyle(style, oldCluster, newCluster) {
-      let newStyle = style;
-      oldCluster.forEach((color, index) => {
-        newStyle = newStyle.replace(new RegExp(color, "ig"), newCluster[index]);
-      });
-      return newStyle;
-    },
-
-    getCSSString(url, variable) {
-      return new Promise(resolve => {
-        const xhr = new XMLHttpRequest();
-        xhr.onreadystatechange = () => {
-          if (xhr.readyState === 4 && xhr.status === 200) {
-            this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, "");
-            resolve();
-          }
-        };
-        xhr.open("GET", url);
-        xhr.send();
-      });
-    },
-
-    getThemeCluster(theme) {
-      const tintColor = (color, tint) => {
-        let red = parseInt(color.slice(0, 2), 16);
-        let green = parseInt(color.slice(2, 4), 16);
-        let blue = parseInt(color.slice(4, 6), 16);
-
-        if (tint === 0) {
-          // when primary color is in its rgb space
-          return [red, green, blue].join(",");
-        } else {
-          red += Math.round(tint * (255 - red));
-          green += Math.round(tint * (255 - green));
-          blue += Math.round(tint * (255 - blue));
-
-          red = red.toString(16);
-          green = green.toString(16);
-          blue = blue.toString(16);
-
-          return `#${red}${green}${blue}`;
-        }
-      };
-
-      const shadeColor = (color, shade) => {
-        let red = parseInt(color.slice(0, 2), 16);
-        let green = parseInt(color.slice(2, 4), 16);
-        let blue = parseInt(color.slice(4, 6), 16);
-
-        red = Math.round((1 - shade) * red);
-        green = Math.round((1 - shade) * green);
-        blue = Math.round((1 - shade) * blue);
-
-        red = red.toString(16);
-        green = green.toString(16);
-        blue = blue.toString(16);
-
-        return `#${red}${green}${blue}`;
-      };
-
-      const clusters = [theme];
-      for (let i = 0; i <= 9; i++) {
-        clusters.push(tintColor(theme, Number((i / 10).toFixed(2))));
-      }
-      clusters.push(shadeColor(theme, 0.1));
-      return clusters;
-    }
-  }
-};
-</script>
-
-<style>
-.theme-message,
-.theme-picker-dropdown {
-  z-index: 99999 !important;
-}
-
-.theme-picker .el-color-picker__trigger {
-  height: 26px !important;
-  width: 26px !important;
-  padding: 2px;
-}
-
-.theme-picker-dropdown .el-color-dropdown__link-btn {
-  display: none;
-}
-</style>
diff --git a/WebSite/src/components/Tinymce/components/EditorImage.vue b/WebSite/src/components/Tinymce/components/EditorImage.vue
deleted file mode 100644
index 6cb6389..0000000
--- a/WebSite/src/components/Tinymce/components/EditorImage.vue
+++ /dev/null
@@ -1,126 +0,0 @@
-<template>
-  <div class="upload-container">
-    <el-button
-      :style="{ background: color, borderColor: color }"
-      icon="el-icon-upload"
-      size="mini"
-      type="primary"
-      @click="dialogVisible = true"
-    >
-      upload
-    </el-button>
-    <el-dialog :visible.sync="dialogVisible">
-      <el-upload
-        :multiple="true"
-        :file-list="fileList"
-        :show-file-list="true"
-        :on-remove="handleRemove"
-        :on-success="handleSuccess"
-        :before-upload="beforeUpload"
-        class="editor-slide-upload"
-        action="https://httpbin.org/post"
-        list-type="picture-card"
-      >
-        <el-button size="small" type="primary">
-          Click upload
-        </el-button>
-      </el-upload>
-      <el-button @click="dialogVisible = false">
-        Cancel
-      </el-button>
-      <el-button type="primary" @click="handleSubmit">
-        Confirm
-      </el-button>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-// import { getToken } from 'api/qiniu'
-
-export default {
-  name: "EditorSlideUpload",
-  props: {
-    color: {
-      type: String,
-      default: "#1890ff"
-    }
-  },
-  data() {
-    return {
-      dialogVisible: false,
-      listObj: {},
-      fileList: []
-    };
-  },
-  methods: {
-    checkAllSuccess() {
-      return Object.keys(this.listObj).every(
-        item => this.listObj[item].hasSuccess
-      );
-    },
-    handleSubmit() {
-      const arr = Object.keys(this.listObj).map(v => this.listObj[v]);
-      if (!this.checkAllSuccess()) {
-        this.$message(
-          "Please wait for all images to be uploaded successfully. If there is a network problem, please refresh the page and upload again!"
-        );
-        return;
-      }
-      this.$emit("successCBK", arr);
-      this.listObj = {};
-      this.fileList = [];
-      this.dialogVisible = false;
-    },
-    handleSuccess(response, file) {
-      const uid = file.uid;
-      const objKeyArr = Object.keys(this.listObj);
-      for (let i = 0, len = objKeyArr.length; i < len; i++) {
-        if (this.listObj[objKeyArr[i]].uid === uid) {
-          this.listObj[objKeyArr[i]].url = response.files.file;
-          this.listObj[objKeyArr[i]].hasSuccess = true;
-          return;
-        }
-      }
-    },
-    handleRemove(file) {
-      const uid = file.uid;
-      const objKeyArr = Object.keys(this.listObj);
-      for (let i = 0, len = objKeyArr.length; i < len; i++) {
-        if (this.listObj[objKeyArr[i]].uid === uid) {
-          delete this.listObj[objKeyArr[i]];
-          return;
-        }
-      }
-    },
-    beforeUpload(file) {
-      const _self = this;
-      const _URL = window.URL || window.webkitURL;
-      const fileName = file.uid;
-      this.listObj[fileName] = {};
-      return new Promise((resolve, reject) => {
-        const img = new Image();
-        img.src = _URL.createObjectURL(file);
-        img.onload = function() {
-          _self.listObj[fileName] = {
-            hasSuccess: false,
-            uid: file.uid,
-            width: this.width,
-            height: this.height
-          };
-        };
-        resolve(true);
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.editor-slide-upload {
-  margin-bottom: 20px;
-  /deep/ .el-upload--picture-card {
-    width: 100%;
-  }
-}
-</style>
diff --git a/WebSite/src/components/Tinymce/dynamicLoadScript.js b/WebSite/src/components/Tinymce/dynamicLoadScript.js
deleted file mode 100644
index 667657d..0000000
--- a/WebSite/src/components/Tinymce/dynamicLoadScript.js
+++ /dev/null
@@ -1,61 +0,0 @@
-let callbacks = [];
-
-function loadedTinymce() {
-  // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2144
-  // check is successfully downloaded script
-  return window.tinymce;
-}
-
-const dynamicLoadScript = (src, callback) => {
-  const existingScript = document.getElementById(src);
-  const cb = callback || function() {};
-
-  if (!existingScript) {
-    const script = document.createElement("script");
-    script.src = src; // src url for the third-party library being loaded.
-    script.id = src;
-    document.body.appendChild(script);
-    callbacks.push(cb);
-    const onEnd = "onload" in script ? stdOnEnd : ieOnEnd;
-    onEnd(script);
-  }
-
-  if (existingScript && cb) {
-    if (loadedTinymce()) {
-      cb(null, existingScript);
-    } else {
-      callbacks.push(cb);
-    }
-  }
-
-  function stdOnEnd(script) {
-    script.onload = function() {
-      // this.onload = null here is necessary
-      // because even IE9 works not like others
-      this.onerror = this.onload = null;
-      for (const cb of callbacks) {
-        cb(null, script);
-      }
-      callbacks = null;
-    };
-    script.onerror = function() {
-      this.onerror = this.onload = null;
-      cb(new Error("Failed to load " + src), script);
-    };
-  }
-
-  function ieOnEnd(script) {
-    script.onreadystatechange = function() {
-      if (this.readyState !== "complete" && this.readyState !== "loaded") {
-        return;
-      }
-      this.onreadystatechange = null;
-      for (const cb of callbacks) {
-        cb(null, script); // there is no way to catch loading errors in IE8
-      }
-      callbacks = null;
-    };
-  }
-};
-
-export default dynamicLoadScript;
diff --git a/WebSite/src/components/Tinymce/index.vue b/WebSite/src/components/Tinymce/index.vue
deleted file mode 100644
index 628e057..0000000
--- a/WebSite/src/components/Tinymce/index.vue
+++ /dev/null
@@ -1,254 +0,0 @@
-<template>
-  <div
-    :class="{ fullscreen: fullscreen }"
-    class="tinymce-container"
-    :style="{ width: containerWidth }"
-  >
-    <textarea :id="tinymceId" class="tinymce-textarea" />
-    <div class="editor-custom-btn-container">
-      <editorImage
-        color="#1890ff"
-        class="editor-upload-btn"
-        @successCBK="imageSuccessCBK"
-      />
-    </div>
-  </div>
-</template>
-
-<script>
-/**
- * docs:
- * https://panjiachen.github.io/vue-element-admin-site/feature/component/rich-editor.html#tinymce
- */
-import editorImage from "./components/EditorImage";
-import plugins from "./plugins";
-import toolbar from "./toolbar";
-import load from "./dynamicLoadScript";
-
-// why use this cdn, detail see https://github.com/PanJiaChen/tinymce-all-in-one
-const tinymceCDN =
-  "https://cdn.jsdelivr.net/npm/tinymce-all-in-one@4.9.3/tinymce.min.js";
-
-export default {
-  name: "Tinymce",
-  components: { editorImage },
-  props: {
-    id: {
-      type: String,
-      default: function() {
-        return (
-          "vue-tinymce-" +
-          +new Date() +
-          ((Math.random() * 1000).toFixed(0) + "")
-        );
-      }
-    },
-    value: {
-      type: String,
-      default: ""
-    },
-    toolbar: {
-      type: Array,
-      required: false,
-      default() {
-        return [];
-      }
-    },
-    menubar: {
-      type: String,
-      default: "file edit insert view format table"
-    },
-    height: {
-      type: [Number, String],
-      required: false,
-      default: 360
-    },
-    width: {
-      type: [Number, String],
-      required: false,
-      default: "auto"
-    }
-  },
-  data() {
-    return {
-      hasChange: false,
-      hasInit: false,
-      tinymceId: this.id,
-      fullscreen: false,
-      languageTypeList: {
-        en: "en",
-        zh: "zh_CN",
-        es: "es_MX",
-        ja: "ja"
-      }
-    };
-  },
-  computed: {
-    containerWidth() {
-      const width = this.width;
-      if (/^[\d]+(\.[\d]+)?$/.test(width)) {
-        // matches `100`, `'100'`
-        return `${width}px`;
-      }
-      return width;
-    }
-  },
-  watch: {
-    value(val) {
-      if (!this.hasChange && this.hasInit) {
-        this.$nextTick(() =>
-          window.tinymce.get(this.tinymceId).setContent(val || "")
-        );
-      }
-    }
-  },
-  mounted() {
-    this.init();
-  },
-  activated() {
-    if (window.tinymce) {
-      this.initTinymce();
-    }
-  },
-  deactivated() {
-    this.destroyTinymce();
-  },
-  destroyed() {
-    this.destroyTinymce();
-  },
-  methods: {
-    init() {
-      // dynamic load tinymce from cdn
-      load(tinymceCDN, err => {
-        if (err) {
-          this.$message.error(err.message);
-          return;
-        }
-        this.initTinymce();
-      });
-    },
-    initTinymce() {
-      const _this = this;
-      window.tinymce.init({
-        selector: `#${this.tinymceId}`,
-        language: this.languageTypeList["en"],
-        height: this.height,
-        body_class: "panel-body ",
-        object_resizing: false,
-        toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,
-        menubar: this.menubar,
-        plugins: plugins,
-        end_container_on_empty_block: true,
-        powerpaste_word_import: "clean",
-        code_dialog_height: 450,
-        code_dialog_width: 1000,
-        advlist_bullet_styles: "square",
-        advlist_number_styles: "default",
-        imagetools_cors_hosts: ["www.tinymce.com", "codepen.io"],
-        default_link_target: "_blank",
-        link_title: false,
-        nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin
-        init_instance_callback: editor => {
-          if (_this.value) {
-            editor.setContent(_this.value);
-          }
-          _this.hasInit = true;
-          editor.on("NodeChange Change KeyUp SetContent", () => {
-            this.hasChange = true;
-            this.$emit("input", editor.getContent());
-          });
-        },
-        setup(editor) {
-          editor.on("FullscreenStateChanged", e => {
-            _this.fullscreen = e.state;
-          });
-        }
-        // 整合七牛上传
-        // images_dataimg_filter(img) {
-        //   setTimeout(() => {
-        //     const $image = $(img);
-        //     $image.removeAttr('width');
-        //     $image.removeAttr('height');
-        //     if ($image[0].height && $image[0].width) {
-        //       $image.attr('data-wscntype', 'image');
-        //       $image.attr('data-wscnh', $image[0].height);
-        //       $image.attr('data-wscnw', $image[0].width);
-        //       $image.addClass('wscnph');
-        //     }
-        //   }, 0);
-        //   return img
-        // },
-        // images_upload_handler(blobInfo, success, failure, progress) {
-        //   progress(0);
-        //   const token = _this.$store.getters.token;
-        //   getToken(token).then(response => {
-        //     const url = response.data.qiniu_url;
-        //     const formData = new FormData();
-        //     formData.append('token', response.data.qiniu_token);
-        //     formData.append('key', response.data.qiniu_key);
-        //     formData.append('file', blobInfo.blob(), url);
-        //     upload(formData).then(() => {
-        //       success(url);
-        //       progress(100);
-        //     })
-        //   }).catch(err => {
-        //     failure('出现未知问题,刷新页面,或者联系程序员')
-        //     console.log(err);
-        //   });
-        // },
-      });
-    },
-    destroyTinymce() {
-      const tinymce = window.tinymce.get(this.tinymceId);
-      if (this.fullscreen) {
-        tinymce.execCommand("mceFullScreen");
-      }
-
-      if (tinymce) {
-        tinymce.destroy();
-      }
-    },
-    setContent(value) {
-      window.tinymce.get(this.tinymceId).setContent(value);
-    },
-    getContent() {
-      window.tinymce.get(this.tinymceId).getContent();
-    },
-    imageSuccessCBK(arr) {
-      const _this = this;
-      arr.forEach(v => {
-        window.tinymce
-          .get(_this.tinymceId)
-          .insertContent(`<img class="wscnph" src="${v.url}" >`);
-      });
-    }
-  }
-};
-</script>
-
-<style scoped>
-.tinymce-container {
-  position: relative;
-  line-height: normal;
-}
-.tinymce-container >>> .mce-fullscreen {
-  z-index: 10000;
-}
-.tinymce-textarea {
-  visibility: hidden;
-  z-index: -1;
-}
-.editor-custom-btn-container {
-  position: absolute;
-  right: 4px;
-  top: 4px;
-  /*z-index: 2005;*/
-}
-.fullscreen .editor-custom-btn-container {
-  z-index: 10000;
-  position: fixed;
-}
-.editor-upload-btn {
-  display: inline-block;
-}
-</style>
diff --git a/WebSite/src/components/Tinymce/plugins.js b/WebSite/src/components/Tinymce/plugins.js
deleted file mode 100644
index 2ad5e17..0000000
--- a/WebSite/src/components/Tinymce/plugins.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// Any plugins you want to use has to be imported
-// Detail plugins list see https://www.tinymce.com/docs/plugins/
-// Custom builds see https://www.tinymce.com/download/custom-builds/
-
-const plugins = [
-  "advlist anchor autolink autosave code codesample colorpicker colorpicker contextmenu directionality emoticons fullscreen hr image imagetools insertdatetime link lists media nonbreaking noneditable pagebreak paste preview print save searchreplace spellchecker tabfocus table template textcolor textpattern visualblocks visualchars wordcount"
-];
-
-export default plugins;
diff --git a/WebSite/src/components/Tinymce/toolbar.js b/WebSite/src/components/Tinymce/toolbar.js
deleted file mode 100644
index 46196ed..0000000
--- a/WebSite/src/components/Tinymce/toolbar.js
+++ /dev/null
@@ -1,9 +0,0 @@
-// Here is a list of the toolbar
-// Detail list see https://www.tinymce.com/docs/advanced/editor-control-identifiers/#toolbarcontrols
-
-const toolbar = [
-  "searchreplace bold italic underline strikethrough alignleft aligncenter alignright outdent indent  blockquote undo redo removeformat subscript superscript code codesample",
-  "hr bullist numlist link image charmap preview anchor pagebreak insertdatetime media table emoticons forecolor backcolor fullscreen"
-];
-
-export default toolbar;
diff --git a/WebSite/src/components/UnionUser/index.vue b/WebSite/src/components/UnionUser/index.vue
deleted file mode 100644
index a42cfd8..0000000
--- a/WebSite/src/components/UnionUser/index.vue
+++ /dev/null
@@ -1,285 +0,0 @@
-<!--
- @Descripttion:
- @Author: gong qun
- @Date: 2020-06-16 14:11:45
- @LastEditors: gong qun
- @LastEditTime: 2020-06-18 10:25:12
--->
-<template>
-  <div v-if="isShow">
-    <layout-card :show-title="true" type="primary">
-      <div slot="title">{{ tableTitle }}&nbsp;下用户</div>
-      <el-row slot="filter" :gutter="5">
-        <el-col :xs="24" :sm="12" :lg="8" :xl="6">
-          <el-input
-            v-model="searchUserModel.code"
-            placeholder="请输入工号"
-            :clearable="true"
-          ></el-input>
-        </el-col>
-        <el-col :xs="24" :sm="12" :lg="8" :xl="6">
-          <el-input
-            v-model="searchUserModel.name"
-            placeholder="请输入姓名"
-            :clearable="true"
-          ></el-input>
-        </el-col>
-        <el-col :xs="24" :sm="12" :lg="8" :xl="6">
-          <el-select
-            v-model="searchUserModel.userType"
-            placeholder="请选择用户类型"
-            :clearable="true"
-            style="width:100%"
-          >
-            <el-option
-              v-for="item in userTypeOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            ></el-option>
-          </el-select>
-        </el-col>
-        <el-col :xs="24" :sm="12" :lg="8" :xl="6">
-          <OrganizationSelectTree
-            ref="organizationTree"
-            @change="onOrganizationTreeChange"
-          >
-          </OrganizationSelectTree>
-        </el-col>
-        <el-col :xs="24" :sm="12" :lg="8" :xl="6">
-          <el-button
-            type="default"
-            plain
-            icon="el-icon-search"
-            @click="onSearchUnion"
-          >
-            查询
-          </el-button>
-        </el-col>
-      </el-row>
-      <div slot="button" style="text-align: right;">
-        <el-button
-          type="primary"
-          plain
-          icon="el-icon-plus"
-          @click="onSelectUser"
-        >
-          添加
-        </el-button>
-        <el-button
-          type="danger"
-          plain
-          icon="el-icon-delete"
-          @click="onDeleteUnion"
-        >
-          删除
-        </el-button>
-      </div>
-      <div slot="content">
-        <el-table
-          stripe
-          :data="userPageInfo.data"
-          style="width: 100%"
-          class="mtop"
-          ref="userTable"
-          fit
-          @selection-change="onSelectionChange"
-        >
-          <el-table-column type="selection" width="55"> </el-table-column>
-          <el-table-column label="工号" prop="code"></el-table-column>
-          <el-table-column label="姓名" prop="name"></el-table-column>
-          <el-table-column label="类型" prop="userType">
-            <template slot-scope="scope">
-              <span>{{ userTypeFilters(scope.row.userType) }}</span>
-            </template>
-          </el-table-column>
-        </el-table>
-        <Pagination
-          v-show="userPageInfo.total > 0"
-          :total="userPageInfo.total"
-          :page.sync="searchUserModel.pageIndex"
-          :limit.sync="searchUserModel.pageSize"
-          @pagination="getUserPageInfo"
-        />
-      </div>
-    </layout-card>
-
-    <SelectUser
-      ref="selectUser"
-      :dialogSelectUser="dialogSelectUser"
-      @onCloseSelectUser="onCloseSelectUser"
-      @onSelectUserChange="onSelectUserChange"
-    ></SelectUser>
-  </div>
-</template>
-<script>
-import SelectUser from "@/components/SelectUser";
-import OrganizationSelectTree from "@/components/OrganizationSelectTree";
-import Pagination from "@/components/Pagination";
-export default {
-  components: {
-    SelectUser,
-    OrganizationSelectTree,
-    Pagination
-  },
-  props: {
-    tableTitle: {
-      type: String,
-      default: "关联关系"
-    }
-  },
-  data() {
-    return {
-      activeNames: ["1"],
-      searchUserModel: {
-        pageIndex: 1,
-        pageSize: 10
-      },
-      userTypeOptions: [
-        { value: "ADMIN", label: "管理员" },
-        { value: "TEACHER", label: "教工" },
-        { value: "STUDENT", label: "学生" },
-        { value: "EXTERNAL", label: "外聘" },
-        { value: "OTHER", label: "å…¶ä»–" }
-      ],
-      userPageInfo: {
-        total: 0
-      },
-      multipleSelectionUser: [],
-      dialogSelectUser: false,
-      isShow: false
-    };
-  },
-  methods: {
-    searchUser(val) {
-      if (this.$refs.organizationTree) {
-        this.$refs.organizationTree.clearSelect();
-      }
-      this.searchUserModel = {
-        pageIndex: 1,
-        pageSize: 10,
-        enabled: "YES"
-      };
-      if (val) {
-        if (val.roleId) {
-          this.searchUserModel.roleIds = [val.roleId];
-        } else {
-          this.searchUserModel.roleIds = [];
-        }
-        if (val.accountId) {
-          this.searchUserModel.accountIds = [val.accountId];
-        } else {
-          this.searchUserModel.accountIds = [];
-        }
-      }
-      this.getUserPageInfo();
-    },
-    getUserPageInfo() {
-      if (!this.getIsSelect()) {
-        this.userPageInfo = {};
-        this.$message.warning("请选择" + this.tableTitle);
-        return;
-      }
-      this.$service.User.getPageByRelation(this.searchUserModel).then(res => {
-        this.userPageInfo = res;
-      });
-    },
-    onUserSizeChange(val) {
-      this.searchUserModel.pageIndex = 1;
-      this.searchUserModel.pageSize = val;
-      this.getUserPageInfo();
-    },
-    onUserCurrentChange(val) {
-      this.searchUserModel.pageIndex = val;
-      this.getUserPageInfo();
-    },
-    onSelectionChange(val) {
-      this.multipleSelectionUser = val;
-    },
-    onDeleteUnion() {
-      if (this.multipleSelectionUser.length === 0) {
-        this.$message.warning("请勾选用户!");
-        return;
-      }
-      this.$emit("onRemoveUnion", this.multipleSelectionUser);
-    },
-    clearSelection() {
-      this.$refs.userTable.clearSelection();
-      this.onSearchUnion();
-    },
-    userTypeFilters(value) {
-      if (!value) return "";
-      let userType = this.userTypeOptions.filter(t => t.value === value);
-      if (userType.length === 0) {
-        return "";
-      }
-      return userType[0].label;
-    },
-    onSearchUnion() {
-      this.searchUserModel.pageIndex = 1;
-      this.getUserPageInfo();
-    },
-    onSelectUser() {
-      if (!this.getIsSelect()) {
-        this.$message.warning("请选择" + this.tableTitle);
-        return;
-      }
-      this.$refs.selectUser.onShowSelectUser();
-    },
-    onCloseSelectUser() {
-      this.onSearchUnion();
-      this.$refs.selectUser.onCloseSelectUser();
-    },
-    onSelectUserChange(val) {
-      this.$emit("onAddUnion", val);
-    },
-    getIsSelect() {
-      let isNotRole =
-        this.searchUserModel.roleIds == null ||
-        this.searchUserModel.roleIds.length === 0;
-      let isNotAccount =
-        this.searchUserModel.accountIds == null ||
-        this.searchUserModel.accountIds.length === 0;
-      this.isShow = !(isNotRole && isNotAccount);
-      return this.isShow;
-    },
-    onOrganizationTreeChange(val) {
-      this.searchUserModel.organizationIds = !val ? null : [val];
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.account {
-  width: 100%;
-  // min-height: calc(100vh - 90px);
-  display: flex;
-  .mtop {
-    margin-top: 20px;
-  }
-  .fl {
-    width: 50%;
-    margin-right: 20px;
-  }
-  .fr {
-    width: 50%;
-  }
-  .header {
-    padding-bottom: 10px;
-    border-bottom: 1px solid #f2f2f2;
-  }
-  .el-collapse {
-    border-top: none;
-  }
-}
-.el-button + .el-button {
-  margin-left: 0px;
-}
-.el-col {
-  margin-bottom: 5px;
-  // &:last-child {
-  //   margin-bottom: 0;
-  // }
-}
-</style>
diff --git a/WebSite/src/components/Upload/SingleImage.vue b/WebSite/src/components/Upload/SingleImage.vue
deleted file mode 100644
index f81d71c..0000000
--- a/WebSite/src/components/Upload/SingleImage.vue
+++ /dev/null
@@ -1,133 +0,0 @@
-<template>
-  <div class="upload-container">
-    <el-upload
-      :data="dataObj"
-      :multiple="false"
-      :show-file-list="false"
-      :on-success="handleImageSuccess"
-      class="image-uploader"
-      drag
-      action="https://httpbin.org/post"
-    >
-      <i class="el-icon-upload" />
-      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-    </el-upload>
-    <div class="image-preview">
-      <div v-show="imageUrl.length > 1" class="image-preview-wrapper">
-        <img :src="imageUrl + '?imageView2/1/w/200/h/200'" />
-        <div class="image-preview-action">
-          <i class="el-icon-delete" @click="rmImage" />
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { getToken } from "@/api/qiniu";
-
-export default {
-  name: "SingleImageUpload",
-  props: {
-    value: {
-      type: String,
-      default: ""
-    }
-  },
-  data() {
-    return {
-      tempUrl: "",
-      dataObj: { token: "", key: "" }
-    };
-  },
-  computed: {
-    imageUrl() {
-      return this.value;
-    }
-  },
-  methods: {
-    rmImage() {
-      this.emitInput("");
-    },
-    emitInput(val) {
-      this.$emit("input", val);
-    },
-    handleImageSuccess() {
-      this.emitInput(this.tempUrl);
-    },
-    beforeUpload() {
-      const _self = this;
-      return new Promise((resolve, reject) => {
-        getToken()
-          .then(response => {
-            const key = response.data.qiniu_key;
-            const token = response.data.qiniu_token;
-            _self._data.dataObj.token = token;
-            _self._data.dataObj.key = key;
-            this.tempUrl = response.data.qiniu_url;
-            resolve(true);
-          })
-          .catch(err => {
-            console.log(err);
-            reject(false);
-          });
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-@import "~@/styles/mixin.scss";
-.upload-container {
-  width: 100%;
-  position: relative;
-  @include clearfix;
-  .image-uploader {
-    width: 60%;
-    float: left;
-  }
-  .image-preview {
-    width: 200px;
-    height: 200px;
-    position: relative;
-    border: 1px dashed #d9d9d9;
-    float: left;
-    margin-left: 50px;
-    .image-preview-wrapper {
-      position: relative;
-      width: 100%;
-      height: 100%;
-      img {
-        width: 100%;
-        height: 100%;
-      }
-    }
-    .image-preview-action {
-      position: absolute;
-      width: 100%;
-      height: 100%;
-      left: 0;
-      top: 0;
-      cursor: default;
-      text-align: center;
-      color: #fff;
-      opacity: 0;
-      font-size: 20px;
-      background-color: rgba(0, 0, 0, 0.5);
-      transition: opacity 0.3s;
-      cursor: pointer;
-      text-align: center;
-      line-height: 200px;
-      .el-icon-delete {
-        font-size: 36px;
-      }
-    }
-    &:hover {
-      .image-preview-action {
-        opacity: 1;
-      }
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/components/Upload/SingleImage2.vue b/WebSite/src/components/Upload/SingleImage2.vue
deleted file mode 100644
index e9456ed..0000000
--- a/WebSite/src/components/Upload/SingleImage2.vue
+++ /dev/null
@@ -1,130 +0,0 @@
-<template>
-  <div class="singleImageUpload2 upload-container">
-    <el-upload
-      :data="dataObj"
-      :multiple="false"
-      :show-file-list="false"
-      :on-success="handleImageSuccess"
-      class="image-uploader"
-      drag
-      action="https://httpbin.org/post"
-    >
-      <i class="el-icon-upload" />
-      <div class="el-upload__text">Drag或<em>点击上传</em></div>
-    </el-upload>
-    <div v-show="imageUrl.length > 0" class="image-preview">
-      <div v-show="imageUrl.length > 1" class="image-preview-wrapper">
-        <img :src="imageUrl" />
-        <div class="image-preview-action">
-          <i class="el-icon-delete" @click="rmImage" />
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { getToken } from "@/api/qiniu";
-
-export default {
-  name: "SingleImageUpload2",
-  props: {
-    value: {
-      type: String,
-      default: ""
-    }
-  },
-  data() {
-    return {
-      tempUrl: "",
-      dataObj: { token: "", key: "" }
-    };
-  },
-  computed: {
-    imageUrl() {
-      return this.value;
-    }
-  },
-  methods: {
-    rmImage() {
-      this.emitInput("");
-    },
-    emitInput(val) {
-      this.$emit("input", val);
-    },
-    handleImageSuccess() {
-      this.emitInput(this.tempUrl);
-    },
-    beforeUpload() {
-      const _self = this;
-      return new Promise((resolve, reject) => {
-        getToken()
-          .then(response => {
-            const key = response.data.qiniu_key;
-            const token = response.data.qiniu_token;
-            _self._data.dataObj.token = token;
-            _self._data.dataObj.key = key;
-            this.tempUrl = response.data.qiniu_url;
-            resolve(true);
-          })
-          .catch(() => {
-            reject(false);
-          });
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.upload-container {
-  width: 100%;
-  height: 100%;
-  position: relative;
-  .image-uploader {
-    height: 100%;
-  }
-  .image-preview {
-    width: 100%;
-    height: 100%;
-    position: absolute;
-    left: 0px;
-    top: 0px;
-    border: 1px dashed #d9d9d9;
-    .image-preview-wrapper {
-      position: relative;
-      width: 100%;
-      height: 100%;
-      img {
-        width: 100%;
-        height: 100%;
-      }
-    }
-    .image-preview-action {
-      position: absolute;
-      width: 100%;
-      height: 100%;
-      left: 0;
-      top: 0;
-      cursor: default;
-      text-align: center;
-      color: #fff;
-      opacity: 0;
-      font-size: 20px;
-      background-color: rgba(0, 0, 0, 0.5);
-      transition: opacity 0.3s;
-      cursor: pointer;
-      text-align: center;
-      line-height: 200px;
-      .el-icon-delete {
-        font-size: 36px;
-      }
-    }
-    &:hover {
-      .image-preview-action {
-        opacity: 1;
-      }
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/components/Upload/SingleImage3.vue b/WebSite/src/components/Upload/SingleImage3.vue
deleted file mode 100644
index 7a9757d..0000000
--- a/WebSite/src/components/Upload/SingleImage3.vue
+++ /dev/null
@@ -1,157 +0,0 @@
-<template>
-  <div class="upload-container">
-    <el-upload
-      :data="dataObj"
-      :multiple="false"
-      :show-file-list="false"
-      :on-success="handleImageSuccess"
-      class="image-uploader"
-      drag
-      action="https://httpbin.org/post"
-    >
-      <i class="el-icon-upload" />
-      <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-    </el-upload>
-    <div class="image-preview image-app-preview">
-      <div v-show="imageUrl.length > 1" class="image-preview-wrapper">
-        <img :src="imageUrl" />
-        <div class="image-preview-action">
-          <i class="el-icon-delete" @click="rmImage" />
-        </div>
-      </div>
-    </div>
-    <div class="image-preview">
-      <div v-show="imageUrl.length > 1" class="image-preview-wrapper">
-        <img :src="imageUrl" />
-        <div class="image-preview-action">
-          <i class="el-icon-delete" @click="rmImage" />
-        </div>
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import { getToken } from "@/api/qiniu";
-
-export default {
-  name: "SingleImageUpload3",
-  props: {
-    value: {
-      type: String,
-      default: ""
-    }
-  },
-  data() {
-    return {
-      tempUrl: "",
-      dataObj: { token: "", key: "" }
-    };
-  },
-  computed: {
-    imageUrl() {
-      return this.value;
-    }
-  },
-  methods: {
-    rmImage() {
-      this.emitInput("");
-    },
-    emitInput(val) {
-      this.$emit("input", val);
-    },
-    handleImageSuccess(file) {
-      this.emitInput(file.files.file);
-    },
-    beforeUpload() {
-      const _self = this;
-      return new Promise((resolve, reject) => {
-        getToken()
-          .then(response => {
-            const key = response.data.qiniu_key;
-            const token = response.data.qiniu_token;
-            _self._data.dataObj.token = token;
-            _self._data.dataObj.key = key;
-            this.tempUrl = response.data.qiniu_url;
-            resolve(true);
-          })
-          .catch(err => {
-            console.log(err);
-            reject(false);
-          });
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-@import "~@/styles/mixin.scss";
-.upload-container {
-  width: 100%;
-  position: relative;
-  @include clearfix;
-  .image-uploader {
-    width: 35%;
-    float: left;
-  }
-  .image-preview {
-    width: 200px;
-    height: 200px;
-    position: relative;
-    border: 1px dashed #d9d9d9;
-    float: left;
-    margin-left: 50px;
-    .image-preview-wrapper {
-      position: relative;
-      width: 100%;
-      height: 100%;
-      img {
-        width: 100%;
-        height: 100%;
-      }
-    }
-    .image-preview-action {
-      position: absolute;
-      width: 100%;
-      height: 100%;
-      left: 0;
-      top: 0;
-      cursor: default;
-      text-align: center;
-      color: #fff;
-      opacity: 0;
-      font-size: 20px;
-      background-color: rgba(0, 0, 0, 0.5);
-      transition: opacity 0.3s;
-      cursor: pointer;
-      text-align: center;
-      line-height: 200px;
-      .el-icon-delete {
-        font-size: 36px;
-      }
-    }
-    &:hover {
-      .image-preview-action {
-        opacity: 1;
-      }
-    }
-  }
-  .image-app-preview {
-    width: 320px;
-    height: 180px;
-    position: relative;
-    border: 1px dashed #d9d9d9;
-    float: left;
-    margin-left: 50px;
-    .app-fake-conver {
-      height: 44px;
-      position: absolute;
-      width: 100%; // background: rgba(0, 0, 0, .1);
-      text-align: center;
-      line-height: 64px;
-      color: #fff;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/components/UploadExcel/index.vue b/WebSite/src/components/UploadExcel/index.vue
deleted file mode 100644
index 94d45fd..0000000
--- a/WebSite/src/components/UploadExcel/index.vue
+++ /dev/null
@@ -1,158 +0,0 @@
-<template>
-  <div>
-    <input
-      ref="excel-upload-input"
-      class="excel-upload-input"
-      type="file"
-      accept=".xlsx, .xls"
-      @change="handleClick"
-    />
-    <div
-      class="drop"
-      @drop="handleDrop"
-      @dragover="handleDragover"
-      @dragenter="handleDragover"
-    >
-      Drop excel file here or
-      <el-button
-        :loading="loading"
-        style="margin-left:16px;"
-        size="mini"
-        type="primary"
-        @click="handleUpload"
-      >
-        Browse
-      </el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-import XLSX from "xlsx";
-
-export default {
-  props: {
-    beforeUpload: Function, // eslint-disable-line
-    onSuccess: Function// eslint-disable-line
-  },
-  data() {
-    return {
-      loading: false,
-      excelData: {
-        header: null,
-        results: null
-      }
-    };
-  },
-  methods: {
-    generateData({ header, results }) {
-      this.excelData.header = header;
-      this.excelData.results = results;
-      this.onSuccess && this.onSuccess(this.excelData);
-    },
-    handleDrop(e) {
-      e.stopPropagation();
-      e.preventDefault();
-      if (this.loading) return;
-      const files = e.dataTransfer.files;
-      if (files.length !== 1) {
-        this.$message.error("Only support uploading one file!");
-        return;
-      }
-      const rawFile = files[0]; // only use files[0]
-
-      if (!this.isExcel(rawFile)) {
-        this.$message.error(
-          "Only supports upload .xlsx, .xls, .csv suffix files"
-        );
-        return false;
-      }
-      this.upload(rawFile);
-      e.stopPropagation();
-      e.preventDefault();
-    },
-    handleDragover(e) {
-      e.stopPropagation();
-      e.preventDefault();
-      e.dataTransfer.dropEffect = "copy";
-    },
-    handleUpload() {
-      this.$refs["excel-upload-input"].click();
-    },
-    handleClick(e) {
-      const files = e.target.files;
-      const rawFile = files[0]; // only use files[0]
-      if (!rawFile) return;
-      this.upload(rawFile);
-    },
-    upload(rawFile) {
-      this.$refs["excel-upload-input"].value = null; // fix can't select the same excel
-
-      if (!this.beforeUpload) {
-        this.readerData(rawFile);
-        return;
-      }
-      const before = this.beforeUpload(rawFile);
-      if (before) {
-        this.readerData(rawFile);
-      }
-    },
-    readerData(rawFile) {
-      this.loading = true;
-      return new Promise((resolve, reject) => {
-        const reader = new FileReader();
-        reader.onload = e => {
-          const data = e.target.result;
-          const workbook = XLSX.read(data, { type: "array" });
-          const firstSheetName = workbook.SheetNames[0];
-          const worksheet = workbook.Sheets[firstSheetName];
-          const header = this.getHeaderRow(worksheet);
-          const results = XLSX.utils.sheet_to_json(worksheet);
-          this.generateData({ header, results });
-          this.loading = false;
-          resolve();
-        };
-        reader.readAsArrayBuffer(rawFile);
-      });
-    },
-    getHeaderRow(sheet) {
-      const headers = [];
-      const range = XLSX.utils.decode_range(sheet["!ref"]);
-      let C;
-      const R = range.s.r;
-      /* start in the first row */
-      for (C = range.s.c; C <= range.e.c; ++C) {
-        /* walk every column in the range */
-        const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })];
-        /* find the cell in the first row */
-        let hdr = "UNKNOWN " + C; // <-- replace with your desired default
-        if (cell && cell.t) hdr = XLSX.utils.format_cell(cell);
-        headers.push(hdr);
-      }
-      return headers;
-    },
-    isExcel(file) {
-      return /\.(xlsx|xls|csv)$/.test(file.name);
-    }
-  }
-};
-</script>
-
-<style scoped>
-.excel-upload-input {
-  display: none;
-  z-index: -9999;
-}
-.drop {
-  border: 2px dashed #bbb;
-  width: 600px;
-  height: 160px;
-  line-height: 160px;
-  margin: 0 auto;
-  font-size: 24px;
-  border-radius: 5px;
-  text-align: center;
-  color: #bbb;
-  position: relative;
-}
-</style>
diff --git a/WebSite/src/directive/clipboard/clipboard.js b/WebSite/src/directive/clipboard/clipboard.js
deleted file mode 100644
index 80bdc54..0000000
--- a/WebSite/src/directive/clipboard/clipboard.js
+++ /dev/null
@@ -1,57 +0,0 @@
-// Inspired by https://github.com/Inndy/vue-clipboard2
-const Clipboard = require("clipboard");
-if (!Clipboard) {
-  throw new Error("you should npm install `clipboard` --save at first ");
-}
-
-export default {
-  bind(el, binding) {
-    if (binding.arg === "success") {
-      el._v_clipboard_success = binding.value;
-    } else if (binding.arg === "error") {
-      el._v_clipboard_error = binding.value;
-    } else {
-      const clipboard = new Clipboard(el, {
-        text() {
-          return binding.value;
-        },
-        action() {
-          return binding.arg === "cut" ? "cut" : "copy";
-        }
-      });
-      clipboard.on("success", e => {
-        const callback = el._v_clipboard_success;
-        callback && callback(e) // eslint-disable-line
-      });
-      clipboard.on("error", e => {
-        const callback = el._v_clipboard_error;
-        callback && callback(e) // eslint-disable-line
-      });
-      el._v_clipboard = clipboard;
-    }
-  },
-  update(el, binding) {
-    if (binding.arg === "success") {
-      el._v_clipboard_success = binding.value;
-    } else if (binding.arg === "error") {
-      el._v_clipboard_error = binding.value;
-    } else {
-      el._v_clipboard.text = function() {
-        return binding.value;
-      };
-      el._v_clipboard.action = function() {
-        return binding.arg === "cut" ? "cut" : "copy";
-      };
-    }
-  },
-  unbind(el, binding) {
-    if (binding.arg === "success") {
-      delete el._v_clipboard_success;
-    } else if (binding.arg === "error") {
-      delete el._v_clipboard_error;
-    } else {
-      el._v_clipboard.destroy();
-      delete el._v_clipboard;
-    }
-  }
-};
diff --git a/WebSite/src/directive/clipboard/index.js b/WebSite/src/directive/clipboard/index.js
deleted file mode 100644
index d44c7d2..0000000
--- a/WebSite/src/directive/clipboard/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import Clipboard from "./clipboard";
-
-const install = function(Vue) {
-  Vue.directive("Clipboard", Clipboard);
-};
-
-if (window.Vue) {
-  window.clipboard = Clipboard;
-  Vue.use(install); // eslint-disable-line
-}
-
-Clipboard.install = install;
-export default Clipboard;
diff --git a/WebSite/src/directive/el-drag-dialog/drag.js b/WebSite/src/directive/el-drag-dialog/drag.js
deleted file mode 100644
index 7eb2742..0000000
--- a/WebSite/src/directive/el-drag-dialog/drag.js
+++ /dev/null
@@ -1,77 +0,0 @@
-export default {
-  bind(el, binding, vnode) {
-    const dialogHeaderEl = el.querySelector(".el-dialog__header");
-    const dragDom = el.querySelector(".el-dialog");
-    dialogHeaderEl.style.cssText += ";cursor:move;";
-    dragDom.style.cssText += ";top:0px;";
-
-    // 获取原有属性 ie dom元素.currentStyle 火狐谷歌 window.getComputedStyle(dom元素, null);
-    const getStyle = (function() {
-      if (window.document.currentStyle) {
-        return (dom, attr) => dom.currentStyle[attr];
-      } else {
-        return (dom, attr) => getComputedStyle(dom, false)[attr];
-      }
-    })();
-
-    dialogHeaderEl.onmousedown = e => {
-      // 鼠标按下,计算当前元素距离可视区的距离
-      const disX = e.clientX - dialogHeaderEl.offsetLeft;
-      const disY = e.clientY - dialogHeaderEl.offsetTop;
-
-      const dragDomWidth = dragDom.offsetWidth;
-      const dragDomHeight = dragDom.offsetHeight;
-
-      const screenWidth = document.body.clientWidth;
-      const screenHeight = document.body.clientHeight;
-
-      const minDragDomLeft = dragDom.offsetLeft;
-      const maxDragDomLeft = screenWidth - dragDom.offsetLeft - dragDomWidth;
-
-      const minDragDomTop = dragDom.offsetTop;
-      const maxDragDomTop = screenHeight - dragDom.offsetTop - dragDomHeight;
-
-      // 获取到的值带px 正则匹配替换
-      let styL = getStyle(dragDom, "left");
-      let styT = getStyle(dragDom, "top");
-
-      if (styL.includes("%")) {
-        styL = +document.body.clientWidth * (+styL.replace(/\%/g, "") / 100);
-        styT = +document.body.clientHeight * (+styT.replace(/\%/g, "") / 100);
-      } else {
-        styL = +styL.replace(/\px/g, "");
-        styT = +styT.replace(/\px/g, "");
-      }
-
-      document.onmousemove = function(e) {
-        // 通过事件委托,计算移动的距离
-        let left = e.clientX - disX;
-        let top = e.clientY - disY;
-
-        // 边界处理
-        if (-left > minDragDomLeft) {
-          left = -minDragDomLeft;
-        } else if (left > maxDragDomLeft) {
-          left = maxDragDomLeft;
-        }
-
-        if (-top > minDragDomTop) {
-          top = -minDragDomTop;
-        } else if (top > maxDragDomTop) {
-          top = maxDragDomTop;
-        }
-
-        // 移动当前元素
-        dragDom.style.cssText += `;left:${left + styL}px;top:${top + styT}px;`;
-
-        // emit onDrag event
-        vnode.child.$emit("dragDialog");
-      };
-
-      document.onmouseup = function(e) {
-        document.onmousemove = null;
-        document.onmouseup = null;
-      };
-    };
-  }
-};
diff --git a/WebSite/src/directive/el-drag-dialog/index.js b/WebSite/src/directive/el-drag-dialog/index.js
deleted file mode 100644
index 9ccbea6..0000000
--- a/WebSite/src/directive/el-drag-dialog/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import drag from "./drag";
-
-const install = function(Vue) {
-  Vue.directive("el-drag-dialog", drag);
-};
-
-if (window.Vue) {
-  window["el-drag-dialog"] = drag;
-  Vue.use(install); // eslint-disable-line
-}
-
-drag.install = install;
-export default drag;
diff --git a/WebSite/src/directive/el-table/adaptive.js b/WebSite/src/directive/el-table/adaptive.js
deleted file mode 100644
index 38e30f8..0000000
--- a/WebSite/src/directive/el-table/adaptive.js
+++ /dev/null
@@ -1,45 +0,0 @@
-import {
-  addResizeListener,
-  removeResizeListener
-} from "element-ui/src/utils/resize-event";
-
-/**
- * How to use
- * <el-table height="100px" v-el-height-adaptive-table="{bottomOffset: 30}">...</el-table>
- * el-table height is must be set
- * bottomOffset: 30(default)   // The height of the table from the bottom of the page.
- */
-
-const doResize = (el, binding, vnode) => {
-  const { componentInstance: $table } = vnode;
-
-  const { value } = binding;
-
-  if (!$table.height) {
-    throw new Error(`el-$table must set the height. Such as height='100px'`);
-  }
-  const bottomOffset = (value && value.bottomOffset) || 30;
-
-  if (!$table) return;
-
-  const height =
-    window.innerHeight - el.getBoundingClientRect().top - bottomOffset;
-  $table.layout.setHeight(height);
-  $table.doLayout();
-};
-
-export default {
-  bind(el, binding, vnode) {
-    el.resizeListener = () => {
-      doResize(el, binding, vnode);
-    };
-    // parameter 1 is must be "Element" type
-    addResizeListener(window.document.body, el.resizeListener);
-  },
-  inserted(el, binding, vnode) {
-    doResize(el, binding, vnode);
-  },
-  unbind(el) {
-    removeResizeListener(window.document.body, el.resizeListener);
-  }
-};
diff --git a/WebSite/src/directive/el-table/index.js b/WebSite/src/directive/el-table/index.js
deleted file mode 100644
index ad0577f..0000000
--- a/WebSite/src/directive/el-table/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import adaptive from "./adaptive";
-
-const install = function(Vue) {
-  Vue.directive("el-height-adaptive-table", adaptive);
-};
-
-if (window.Vue) {
-  window["el-height-adaptive-table"] = adaptive;
-  Vue.use(install); // eslint-disable-line
-}
-
-adaptive.install = install;
-export default adaptive;
diff --git a/WebSite/src/directive/permission/index.js b/WebSite/src/directive/permission/index.js
deleted file mode 100644
index 7565e68..0000000
--- a/WebSite/src/directive/permission/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import permission from "./permission";
-
-const install = function(Vue) {
-  Vue.directive("permission", permission);
-};
-
-if (window.Vue) {
-  window["permission"] = permission;
-  Vue.use(install); // eslint-disable-line
-}
-
-permission.install = install;
-export default permission;
diff --git a/WebSite/src/directive/permission/permission.js b/WebSite/src/directive/permission/permission.js
deleted file mode 100644
index 41ec77e..0000000
--- a/WebSite/src/directive/permission/permission.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import store from "@/store";
-
-export default {
-  inserted(el, binding, vnode) {
-    const { value } = binding;
-    const roles = store.getters && store.getters.roles;
-
-    if (value && value instanceof Array && value.length > 0) {
-      const permissionRoles = value;
-
-      const hasPermission = roles.some(role => {
-        return permissionRoles.includes(role);
-      });
-
-      if (!hasPermission) {
-        el.parentNode && el.parentNode.removeChild(el);
-      }
-    } else {
-      throw new Error(`need roles! Like v-permission="['admin','editor']"`);
-    }
-  }
-};
diff --git a/WebSite/src/directive/sticky.js b/WebSite/src/directive/sticky.js
deleted file mode 100644
index 6be81ae..0000000
--- a/WebSite/src/directive/sticky.js
+++ /dev/null
@@ -1,90 +0,0 @@
-const vueSticky = {};
-let listenAction;
-vueSticky.install = Vue => {
-  Vue.directive("sticky", {
-    inserted(el, binding) {
-      const params = binding.value || {};
-      const stickyTop = params.stickyTop || 0;
-      const zIndex = params.zIndex || 1000;
-      const elStyle = el.style;
-
-      elStyle.position = "-webkit-sticky";
-      elStyle.position = "sticky";
-      // if the browser support css sticky(Currently Safari, Firefox and Chrome Canary)
-      // if (~elStyle.position.indexOf('sticky')) {
-      //     elStyle.top = `${stickyTop}px`;
-      //     elStyle.zIndex = zIndex;
-      //     return
-      // }
-      const elHeight = el.getBoundingClientRect().height;
-      const elWidth = el.getBoundingClientRect().width;
-      elStyle.cssText = `top: ${stickyTop}px; z-index: ${zIndex}`;
-
-      const parentElm = el.parentNode || document.documentElement;
-      const placeholder = document.createElement("div");
-      placeholder.style.display = "none";
-      placeholder.style.width = `${elWidth}px`;
-      placeholder.style.height = `${elHeight}px`;
-      parentElm.insertBefore(placeholder, el);
-
-      let active = false;
-
-      const getScroll = (target, top) => {
-        const prop = top ? "pageYOffset" : "pageXOffset";
-        const method = top ? "scrollTop" : "scrollLeft";
-        let ret = target[prop];
-        if (typeof ret !== "number") {
-          ret = window.document.documentElement[method];
-        }
-        return ret;
-      };
-
-      const sticky = () => {
-        if (active) {
-          return;
-        }
-        if (!elStyle.height) {
-          elStyle.height = `${el.offsetHeight}px`;
-        }
-
-        elStyle.position = "fixed";
-        elStyle.width = `${elWidth}px`;
-        placeholder.style.display = "inline-block";
-        active = true;
-      };
-
-      const reset = () => {
-        if (!active) {
-          return;
-        }
-
-        elStyle.position = "";
-        placeholder.style.display = "none";
-        active = false;
-      };
-
-      const check = () => {
-        const scrollTop = getScroll(window, true);
-        const offsetTop = el.getBoundingClientRect().top;
-        if (offsetTop < stickyTop) {
-          sticky();
-        } else {
-          if (scrollTop < elHeight + stickyTop) {
-            reset();
-          }
-        }
-      };
-      listenAction = () => {
-        check();
-      };
-
-      window.addEventListener("scroll", listenAction);
-    },
-
-    unbind() {
-      window.removeEventListener("scroll", listenAction);
-    }
-  });
-};
-
-export default vueSticky;
diff --git a/WebSite/src/directive/waves/index.js b/WebSite/src/directive/waves/index.js
deleted file mode 100644
index bafd2cb..0000000
--- a/WebSite/src/directive/waves/index.js
+++ /dev/null
@@ -1,13 +0,0 @@
-import waves from "./waves";
-
-const install = function(Vue) {
-  Vue.directive("waves", waves);
-};
-
-if (window.Vue) {
-  window.waves = waves;
-  Vue.use(install); // eslint-disable-line
-}
-
-waves.install = install;
-export default waves;
diff --git a/WebSite/src/directive/waves/waves.css b/WebSite/src/directive/waves/waves.css
deleted file mode 100644
index af7a7ef..0000000
--- a/WebSite/src/directive/waves/waves.css
+++ /dev/null
@@ -1,26 +0,0 @@
-.waves-ripple {
-    position: absolute;
-    border-radius: 100%;
-    background-color: rgba(0, 0, 0, 0.15);
-    background-clip: padding-box;
-    pointer-events: none;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    -webkit-transform: scale(0);
-    -ms-transform: scale(0);
-    transform: scale(0);
-    opacity: 1;
-}
-
-.waves-ripple.z-active {
-    opacity: 0;
-    -webkit-transform: scale(2);
-    -ms-transform: scale(2);
-    transform: scale(2);
-    -webkit-transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
-    transition: opacity 1.2s ease-out, -webkit-transform 0.6s ease-out;
-    transition: opacity 1.2s ease-out, transform 0.6s ease-out;
-    transition: opacity 1.2s ease-out, transform 0.6s ease-out, -webkit-transform 0.6s ease-out;
-}
\ No newline at end of file
diff --git a/WebSite/src/directive/waves/waves.js b/WebSite/src/directive/waves/waves.js
deleted file mode 100644
index ca1ca26..0000000
--- a/WebSite/src/directive/waves/waves.js
+++ /dev/null
@@ -1,80 +0,0 @@
-import "./waves.css";
-
-const context = "@@wavesContext";
-
-function handleClick(el, binding) {
-  function handle(e) {
-    const customOpts = Object.assign({}, binding.value);
-    const opts = Object.assign(
-      {
-        ele: el, // 波纹作用元素
-        type: "hit", // hit 点击位置扩散 center中心点扩展
-        color: "rgba(0, 0, 0, 0.15)" // 波纹颜色
-      },
-      customOpts
-    );
-    const target = opts.ele;
-    if (target) {
-      target.style.position = "relative";
-      target.style.overflow = "hidden";
-      const rect = target.getBoundingClientRect();
-      let ripple = target.querySelector(".waves-ripple");
-      if (!ripple) {
-        ripple = document.createElement("span");
-        ripple.className = "waves-ripple";
-        ripple.style.height = ripple.style.width =
-          Math.max(rect.width, rect.height) + "px";
-        target.appendChild(ripple);
-      } else {
-        ripple.className = "waves-ripple";
-      }
-      switch (opts.type) {
-        case "center":
-          ripple.style.top = rect.height / 2 - ripple.offsetHeight / 2 + "px";
-          ripple.style.left = rect.width / 2 - ripple.offsetWidth / 2 + "px";
-          break;
-        default:
-          ripple.style.top =
-            (e.pageY -
-              rect.top -
-              ripple.offsetHeight / 2 -
-              document.documentElement.scrollTop || document.body.scrollTop) +
-            "px";
-          ripple.style.left =
-            (e.pageX -
-              rect.left -
-              ripple.offsetWidth / 2 -
-              document.documentElement.scrollLeft || document.body.scrollLeft) +
-            "px";
-      }
-      ripple.style.backgroundColor = opts.color;
-      ripple.className = "waves-ripple z-active";
-      return false;
-    }
-  }
-
-  if (!el[context]) {
-    el[context] = {
-      removeHandle: handle
-    };
-  } else {
-    el[context].removeHandle = handle;
-  }
-
-  return handle;
-}
-
-export default {
-  bind(el, binding) {
-    el.addEventListener("click", handleClick(el, binding), false);
-  },
-  update(el, binding) {
-    el.removeEventListener("click", el[context].removeHandle, false);
-    el.addEventListener("click", handleClick(el, binding), false);
-  },
-  unbind(el) {
-    el.removeEventListener("click", el[context].removeHandle, false);
-    el[context] = null;
-    delete el[context];
-  }
-};
diff --git a/WebSite/src/filters/index.js b/WebSite/src/filters/index.js
deleted file mode 100644
index 8d40f2b..0000000
--- a/WebSite/src/filters/index.js
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * @Description:
- * @Autor: dong
- * @Date: 2020-03-13 10:03:57
- * @LastEditors: dong
- * @LastEditTime: 2020-04-13 09:00:20
- */
-
-// import parseTime, formatTime and set to filter
-export { parseTime, formatTime } from "@/utils";
-import moment from "moment"; // moment
-
-/**
- * Show plural label if time is plural number
- * @param {number} time
- * @param {string} label
- * @return {string}
- */
-function pluralize(time, label) {
-  if (time === 1) {
-    return time + label;
-  }
-  return time + label + "s";
-}
-
-/**
- * @param {number} time
- */
-export function timeAgo(time) {
-  const between = Date.now() / 1000 - Number(time);
-  if (between < 3600) {
-    return pluralize(~~(between / 60), " minute");
-  } else if (between < 86400) {
-    return pluralize(~~(between / 3600), " hour");
-  } else {
-    return pluralize(~~(between / 86400), " day");
-  }
-}
-
-/**
- * date formatting
- * @method: dateFormatter
- * @param {String} date 日期
- * @param {String} pattern 格式化字符串
- * @return {String}
- */
-export function dateFormatter(date, pattern = "YYYY-MM-DD HH:mm:ss") {
-  return moment(date).format(pattern);
-}
-
-/**
- * money formatting
- * @method: moneyFormatter
- * @param {Number} number 要格式化的数字
- * @param {Number} decimals 保留几位小数
- * @param {String} thousandsSep 千分位符号
- * @return {String}
- */
-export function moneyFormatter(number, decimals, thousandsSep = "") {
-  number = (number + "").replace(/[^0-9+-Ee.]/g, "");
-  const n = !isFinite(+number) ? 0 : +number,
-    prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
-    toFixedFix = function(n, prec) {
-      const k = Math.pow(10, prec);
-      return "" + Math.ceil(n * k) / k;
-    };
-
-  const s = (prec ? toFixedFix(n, prec) : "" + Math.round(n)).split(".");
-  const re = /(-?\d+)(\d{3})/;
-  while (re.test(s[0]) && thousandsSep) {
-    s[0] = s[0].replace(re, `$1${thousandsSep}$2`);
-  }
-
-  if ((s[1] || "").length < prec) {
-    s[1] = s[1] || "";
-    s[1] += new Array(prec - s[1].length + 1).join("0");
-  }
-  return s.join(".");
-}
-
-/**
- * Number formatting
- * like 10000 => 10k
- * @param {number} num
- * @param {number} digits
- */
-export function numberFormatter(num, digits) {
-  const si = [
-    { value: 1e18, symbol: "E" },
-    { value: 1e15, symbol: "P" },
-    { value: 1e12, symbol: "T" },
-    { value: 1e9, symbol: "G" },
-    { value: 1e6, symbol: "M" },
-    { value: 1e3, symbol: "k" }
-  ];
-  for (let i = 0; i < si.length; i++) {
-    if (num >= si[i].value) {
-      return (
-        (num / si[i].value)
-          .toFixed(digits)
-          .replace(/\.0+$|(\.[0-9]*[1-9])0+$/, "$1") + si[i].symbol
-      );
-    }
-  }
-  return num.toString();
-}
-
-/**
- * 10000 => "10,000"
- * @param {number} num
- */
-export function toThousandFilter(num) {
-  return (+num || 0)
-    .toString()
-    .replace(/^-?\d+/g, m => m.replace(/(?=(?!\b)(\d{3})+$)/g, ","));
-}
-
-/**
- * Upper case first char
- * @param {String} string
- */
-export function uppercaseFirst(string) {
-  return string.charAt(0).toUpperCase() + string.slice(1);
-}
diff --git a/WebSite/src/icons/index.js b/WebSite/src/icons/index.js
index d702940..1a6401b 100644
--- a/WebSite/src/icons/index.js
+++ b/WebSite/src/icons/index.js
@@ -1,9 +1,11 @@
-import Vue from "vue";
-import SvgIcon from "@/components/SvgIcon"; // svg component
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2020-12-18 10:16:38
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2020-12-18 11:33:17
+ */
 
-// register globally
-Vue.component("svg-icon", SvgIcon);
-
-const req = require.context("./svg", false, /\.svg$/);
+const req = require.context('./svg', false, /\.svg$/);
 const requireAll = requireContext => requireContext.keys().map(requireContext);
 requireAll(req);
diff --git a/WebSite/src/layout/components/AppMain.vue b/WebSite/src/layout/components/AppMain.vue
deleted file mode 100644
index c5fcc5d..0000000
--- a/WebSite/src/layout/components/AppMain.vue
+++ /dev/null
@@ -1,66 +0,0 @@
-<!--
- * @Descripttion: 
- * @Author: dongjunhua
- * @Date: 2020-04-21 18:54:20
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-09-13 13:54:22
--->
-<template>
-  <section class="app-main">
-    <transition name="fade-transform" mode="out-in">
-      <keep-alive :include="cachedViews">
-        <router-view :key="key" />
-      </keep-alive>
-    </transition>
-  </section>
-</template>
-
-<script>
-export default {
-  name: "AppMain",
-  computed: {
-    cachedViews() {
-      return this.$store.state.tagsView.cachedViews;
-    },
-    key() {
-      return this.$route.path;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.app-main {
-  /* 50= navbar  50  */
-  min-height: calc(100vh - 50px);
-  width: 100%;
-  position: relative;
-  overflow: hidden;
-  // padding: 20px;
-  background: #f5f5f5;
-}
-
-.fixed-header + .app-main {
-  padding-top: 50px;
-}
-
-.hasTagsView {
-  .app-main {
-    /* 84 = navbar + tags-view = 50 + 34 */
-    min-height: calc(100vh - 84px);
-  }
-
-  .fixed-header + .app-main {
-    padding-top: 84px;
-  }
-}
-</style>
-
-<style lang="scss">
-// fix css style bug in open el-dialog
-.el-popup-parent--hidden {
-  .fixed-header {
-    padding-right: 15px;
-  }
-}
-</style>
diff --git a/WebSite/src/layout/components/Navbar.vue b/WebSite/src/layout/components/Navbar.vue
deleted file mode 100644
index c4d9816..0000000
--- a/WebSite/src/layout/components/Navbar.vue
+++ /dev/null
@@ -1,250 +0,0 @@
-<template>
-  <div class="navbar">
-    <hamburger
-      id="hamburger-container"
-      :is-active="sidebar.opened"
-      class="hamburger-container"
-      @toggleClick="toggleSideBar"
-    />
-
-    <breadcrumb id="breadcrumb-container" class="breadcrumb-container" />
-
-    <div class="right-menu">
-      <template v-if="false">
-        <!-- device !== 'mobile' -->
-        <search id="header-search" class="right-menu-item" />
-
-        <error-log class="errLog-container right-menu-item hover-effect" />
-
-        <screenfull id="screenfull" class="right-menu-item hover-effect" />
-
-        <el-tooltip content="Global Size" effect="dark" placement="bottom">
-          <size-select id="size-select" class="right-menu-item hover-effect" />
-        </el-tooltip>
-      </template>
-
-      <el-dropdown
-        class="avatar-container right-menu-item hover-effect"
-        trigger="click"
-      >
-        <div class="avatar-wrapper">
-          <!-- <img :src="avatar + '?imageView2/1/w/80/h/80'" class="user-avatar" /> -->
-          <span class="text-avatar"><i class="el-icon-user-solid"></i></span>
-          <i class="el-icon-caret-bottom" />
-        </div>
-        <el-dropdown-menu slot="dropdown">
-          <!-- <router-link to="/profile/index">
-            <el-dropdown-item>Profile</el-dropdown-item>
-          </router-link>
-          <router-link to="/">
-            <el-dropdown-item>Dashboard</el-dropdown-item>
-          </router-link>
-          <a
-            target="_blank"
-            href="https://github.com/PanJiaChen/vue-element-admin/"
-          >
-            <el-dropdown-item>Github</el-dropdown-item>
-          </a>
-          <a
-            target="_blank"
-            href="https://panjiachen.github.io/vue-element-admin-site/#/"
-          >
-            <el-dropdown-item>Docs</el-dropdown-item>
-          </a>
-          <el-dropdown-item divided @click.native="logout">
-            <span style="display:block;">Log Out</span>
-          </el-dropdown-item> -->
-          <!-- <el-dropdown-item @click.native="handleSelectUser"
-            >{{ name
-            }}<span style="color:#409EFF"> 切换</span></el-dropdown-item
-          > -->
-          <el-dropdown-item
-            ><span style="display:block; font-size:12px"
-              ><i class="el-icon-user-solid" /> {{ name }}</span
-            ></el-dropdown-item
-          >
-          <el-dropdown-item divided @click.native="handleModifyPassword">
-            <span style="display:block; font-size:12px">
-              <i class="el-icon-s-cooperation" />
-              修改密码</span
-            >
-          </el-dropdown-item>
-          <el-dropdown-item @click.native="logout">
-            <span style="display:block; font-size:12px"
-              ><i class="el-icon-switch-button" /> 注销</span
-            >
-          </el-dropdown-item>
-        </el-dropdown-menu>
-      </el-dropdown>
-    </div>
-    <select-user
-      :visible.sync="dialogSelectUser.visible"
-      :userList="dialogSelectUser.userList"
-      @handle-confirm="setUser"
-    />
-    <modify-password :visible.sync="dialogModifyPassword.visible" />
-  </div>
-</template>
-
-<script>
-import { mapGetters } from "vuex";
-import Breadcrumb from "@/components/Breadcrumb";
-import Hamburger from "@/components/Hamburger";
-import ErrorLog from "@/components/ErrorLog";
-import Screenfull from "@/components/Screenfull";
-import SizeSelect from "@/components/SizeSelect";
-import Search from "@/components/HeaderSearch";
-import ModifyPassword from "@/components/ModifyPassword";
-import SelectUser from "@/components/SelectUser";
-
-export default {
-  data() {
-    return {
-      dialogSelectUser: {
-        visible: false,
-        userList: []
-      },
-      dialogModifyPassword: {
-        visible: false
-      }
-    };
-  },
-  components: {
-    Breadcrumb,
-    Hamburger,
-    ErrorLog,
-    Screenfull,
-    SizeSelect,
-    Search,
-    ModifyPassword,
-    SelectUser
-  },
-  computed: {
-    ...mapGetters(["sidebar", "avatar", "device", "name"])
-  },
-  methods: {
-    toggleSideBar() {
-      this.$store.dispatch("app/toggleSideBar");
-    },
-    async logout() {
-      await this.$store.dispatch("user/logout");
-      this.$router.push("/login");
-    },
-    async handleSelectUser() {
-      const { users } = await this.$store.dispatch("user/login", {});
-      this.dialogSelectUser.userList = users;
-      if (this.dialogSelectUser.userList.length > 1) {
-        this.dialogSelectUser.visible = true;
-      }
-    },
-    async setUser(id) {
-      await this.$store.dispatch("user/setUser", id);
-      await this.$store.dispatch("user/getInfo");
-      this.$router.push({
-        path: "/",
-        query: {
-          t: new Date().valueOf()
-        }
-      });
-    },
-    handleModifyPassword() {
-      this.dialogModifyPassword.visible = true;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.navbar {
-  height: 50px;
-  overflow: hidden;
-  position: relative;
-  background: #fff;
-  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
-
-  .hamburger-container {
-    line-height: 46px;
-    height: 100%;
-    float: left;
-    cursor: pointer;
-    transition: background 0.3s;
-    -webkit-tap-highlight-color: transparent;
-
-    &:hover {
-      background: rgba(0, 0, 0, 0.025);
-    }
-  }
-
-  .breadcrumb-container {
-    float: left;
-  }
-
-  .errLog-container {
-    display: inline-block;
-    vertical-align: top;
-  }
-
-  .right-menu {
-    float: right;
-    height: 100%;
-    line-height: 50px;
-
-    &:focus {
-      outline: none;
-    }
-
-    .right-menu-item {
-      display: inline-block;
-      padding: 0 8px;
-      height: 100%;
-      font-size: 18px;
-      color: #5a5e66;
-      vertical-align: text-bottom;
-
-      &.hover-effect {
-        cursor: pointer;
-        transition: background 0.3s;
-
-        &:hover {
-          background: rgba(0, 0, 0, 0.025);
-        }
-      }
-    }
-
-    .avatar-container {
-      margin-right: 30px;
-
-      .avatar-wrapper {
-        margin-top: 5px;
-        position: relative;
-
-        .user-avatar {
-          cursor: pointer;
-          width: 40px;
-          height: 40px;
-          border-radius: 10px;
-        }
-
-        .el-icon-caret-bottom {
-          cursor: pointer;
-          position: absolute;
-          right: -20px;
-          top: 25px;
-          font-size: 12px;
-        }
-
-        .text-avatar {
-          display: flex;
-          cursor: pointer;
-          width: 40px;
-          height: 40px;
-          border-radius: 20px;
-          justify-content: center;
-          align-items: center;
-          background-color: #eeeeee;
-        }
-      }
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/layout/components/Settings/index.vue b/WebSite/src/layout/components/Settings/index.vue
deleted file mode 100644
index e09ff9c..0000000
--- a/WebSite/src/layout/components/Settings/index.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-<template>
-  <div class="drawer-container">
-    <div>
-      <h3 class="drawer-title">Page style setting</h3>
-
-      <div class="drawer-item">
-        <span>Theme Color</span>
-        <theme-picker
-          style="float: right;height: 26px;margin: -3px 8px 0 0;"
-          @change="themeChange"
-        />
-      </div>
-
-      <div class="drawer-item">
-        <span>Open Tags-View</span>
-        <el-switch v-model="tagsView" class="drawer-switch" />
-      </div>
-
-      <div class="drawer-item">
-        <span>Fixed Header</span>
-        <el-switch v-model="fixedHeader" class="drawer-switch" />
-      </div>
-
-      <div class="drawer-item">
-        <span>Sidebar Logo</span>
-        <el-switch v-model="sidebarLogo" class="drawer-switch" />
-      </div>
-    </div>
-  </div>
-</template>
-
-<script>
-import ThemePicker from "@/components/ThemePicker";
-
-export default {
-  components: { ThemePicker },
-  data() {
-    return {};
-  },
-  computed: {
-    fixedHeader: {
-      get() {
-        return this.$store.state.settings.fixedHeader;
-      },
-      set(val) {
-        this.$store.dispatch("settings/changeSetting", {
-          key: "fixedHeader",
-          value: val
-        });
-      }
-    },
-    tagsView: {
-      get() {
-        return this.$store.state.settings.tagsView;
-      },
-      set(val) {
-        this.$store.dispatch("settings/changeSetting", {
-          key: "tagsView",
-          value: val
-        });
-      }
-    },
-    sidebarLogo: {
-      get() {
-        return this.$store.state.settings.sidebarLogo;
-      },
-      set(val) {
-        this.$store.dispatch("settings/changeSetting", {
-          key: "sidebarLogo",
-          value: val
-        });
-      }
-    }
-  },
-  methods: {
-    themeChange(val) {
-      this.$store.dispatch("settings/changeSetting", {
-        key: "theme",
-        value: val
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.drawer-container {
-  padding: 24px;
-  font-size: 14px;
-  line-height: 1.5;
-  word-wrap: break-word;
-
-  .drawer-title {
-    margin-bottom: 12px;
-    color: rgba(0, 0, 0, 0.85);
-    font-size: 14px;
-    line-height: 22px;
-  }
-
-  .drawer-item {
-    color: rgba(0, 0, 0, 0.65);
-    font-size: 14px;
-    padding: 12px 0;
-  }
-
-  .drawer-switch {
-    float: right;
-  }
-}
-</style>
diff --git a/WebSite/src/layout/components/Sidebar/FixiOSBug.js b/WebSite/src/layout/components/Sidebar/FixiOSBug.js
deleted file mode 100644
index c9c5d2a..0000000
--- a/WebSite/src/layout/components/Sidebar/FixiOSBug.js
+++ /dev/null
@@ -1,26 +0,0 @@
-export default {
-  computed: {
-    device() {
-      return this.$store.state.app.device;
-    }
-  },
-  mounted() {
-    // In order to fix the click on menu on the ios device will trigger the mouseleave bug
-    // https://github.com/PanJiaChen/vue-element-admin/issues/1135
-    this.fixBugIniOS();
-  },
-  methods: {
-    fixBugIniOS() {
-      const $subMenu = this.$refs.subMenu;
-      if ($subMenu) {
-        const handleMouseleave = $subMenu.handleMouseleave;
-        $subMenu.handleMouseleave = e => {
-          if (this.device === "mobile") {
-            return;
-          }
-          handleMouseleave(e);
-        };
-      }
-    }
-  }
-};
diff --git a/WebSite/src/layout/components/Sidebar/Item.vue b/WebSite/src/layout/components/Sidebar/Item.vue
deleted file mode 100644
index ecd826b..0000000
--- a/WebSite/src/layout/components/Sidebar/Item.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-<script>
-export default {
-  name: "MenuItem",
-  functional: true,
-  props: {
-    icon: {
-      type: String,
-      default: ""
-    },
-    title: {
-      type: String,
-      default: ""
-    }
-  },
-  render(h, context) {
-    const { icon, title } = context.props;
-    const vnodes = [];
-
-    if (icon) {
-      vnodes.push(<svg-icon icon-class={icon} />);
-    }
-
-    if (title) {
-      vnodes.push(<span slot="title">{title}</span>);
-    }
-    return vnodes;
-  }
-};
-</script>
diff --git a/WebSite/src/layout/components/Sidebar/Link.vue b/WebSite/src/layout/components/Sidebar/Link.vue
deleted file mode 100644
index 3be5ba6..0000000
--- a/WebSite/src/layout/components/Sidebar/Link.vue
+++ /dev/null
@@ -1,35 +0,0 @@
-<template>
-  <!-- eslint-disable vue/require-component-is -->
-  <component v-bind="linkProps(to)">
-    <slot />
-  </component>
-</template>
-
-<script>
-import { isExternal } from "@/utils/validate";
-
-export default {
-  props: {
-    to: {
-      type: String,
-      required: true
-    }
-  },
-  methods: {
-    linkProps(url) {
-      if (isExternal(url)) {
-        return {
-          is: "a",
-          href: url,
-          target: "_blank",
-          rel: "noopener"
-        };
-      }
-      return {
-        is: "router-link",
-        to: url
-      };
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/layout/components/Sidebar/Logo.vue b/WebSite/src/layout/components/Sidebar/Logo.vue
deleted file mode 100644
index 0bb917e..0000000
--- a/WebSite/src/layout/components/Sidebar/Logo.vue
+++ /dev/null
@@ -1,95 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-15 11:18:22
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-06-15 14:11:55
--->
-<template>
-  <div class="sidebar-logo-container" :class="{ collapse: collapse }">
-    <transition name="sidebarLogoFade">
-      <router-link
-        v-if="collapse"
-        key="collapse"
-        class="sidebar-logo-link"
-        to="/"
-      >
-        <img v-if="logo" :src="logo" class="sidebar-logo" />
-        <h1 v-else class="sidebar-title">{{ title }}</h1>
-      </router-link>
-      <router-link v-else key="expand" class="sidebar-logo-link" to="/">
-        <img v-if="logo" :src="logo" class="sidebar-logo" />
-        <h1 class="sidebar-title">{{ title }}</h1>
-      </router-link>
-    </transition>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "SidebarLogo",
-  props: {
-    collapse: {
-      type: Boolean,
-      required: true
-    }
-  },
-  data() {
-    return {
-      title: "Vue Element Admin",
-      logo:
-        "https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png"
-    };
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.sidebarLogoFade-enter-active {
-  transition: opacity 1.5s;
-}
-
-.sidebarLogoFade-enter,
-.sidebarLogoFade-leave-to {
-  opacity: 0;
-}
-
-.sidebar-logo-container {
-  position: relative;
-  width: 100%;
-  height: 50px;
-  line-height: 50px;
-  background: #2b2f3a;
-  text-align: center;
-  overflow: hidden;
-
-  & .sidebar-logo-link {
-    height: 100%;
-    width: 100%;
-
-    & .sidebar-logo {
-      width: 32px;
-      height: 32px;
-      vertical-align: middle;
-      margin-right: 12px;
-    }
-
-    & .sidebar-title {
-      display: inline-block;
-      margin: 0;
-      color: #fff;
-      font-weight: 600;
-      line-height: 50px;
-      font-size: 14px;
-      font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif;
-      vertical-align: middle;
-    }
-  }
-
-  &.collapse {
-    .sidebar-logo {
-      margin-right: 0px;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/layout/components/Sidebar/SidebarItem.vue b/WebSite/src/layout/components/Sidebar/SidebarItem.vue
deleted file mode 100644
index c6293c8..0000000
--- a/WebSite/src/layout/components/Sidebar/SidebarItem.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-15 11:18:22
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-08-14 16:01:05
--->
-<template>
-  <div>
-    <!-- 可展开 -->
-    <el-submenu
-      v-if="item.children && item.children.length > 0"
-      ref="subMenu"
-      :index="item.id"
-      popper-append-to-body
-    >
-      <template slot="title">
-        <item :icon="item.icon" :title="item.name" />
-      </template>
-      <sidebar-item
-        v-for="child in item.children"
-        :key="child.id"
-        :item="child"
-        class="nest-menu"
-      />
-    </el-submenu>
-
-    <template v-else>
-      <app-link :to="`${path}${params}`">
-        <el-menu-item :index="path">
-          <item :icon="item.icon" :title="item.name" />
-        </el-menu-item>
-      </app-link>
-    </template>
-  </div>
-</template>
-
-<script>
-// import path from "path";
-import { isExternal } from "@/utils/validate";
-import Item from "./Item";
-import AppLink from "./Link";
-import FixiOSBug from "./FixiOSBug";
-
-export default {
-  name: "SidebarItem",
-  components: { Item, AppLink },
-  mixins: [FixiOSBug],
-  props: {
-    // route object
-    item: {
-      type: Object,
-      required: true
-    }
-  },
-  computed: {
-    path() {
-      return `/i/${this.item.routingUrl}`;
-    },
-    params() {
-      return this.item.redirectUrl ? `?url=${this.item.redirectUrl}` : "";
-    }
-  },
-  data() {
-    return {};
-  },
-  methods: {}
-};
-</script>
diff --git a/WebSite/src/layout/components/Sidebar/index.vue b/WebSite/src/layout/components/Sidebar/index.vue
index 959591e..a993d3c 100644
--- a/WebSite/src/layout/components/Sidebar/index.vue
+++ b/WebSite/src/layout/components/Sidebar/index.vue
@@ -1,13 +1,13 @@
 <!--
  * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-15 11:18:22
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-08-14 16:31:21
+ * @Autor: dongjunhua
+ * @Date: 2020-12-21 09:02:09
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-02-03 13:03:18
 -->
 <template>
-  <div :class="{ 'has-logo': showLogo }">
-    <logo v-if="showLogo" :collapse="isCollapse" />
+  <div :class="{ 'has-logo': sidebar.showLogo }">
+    <logo v-if="sidebar.showLogo" :collapse="isCollapse" />
     <el-scrollbar wrap-class="scrollbar-wrapper">
       <el-menu
         :default-active="activeMenu"
@@ -19,45 +19,39 @@
         :collapse-transition="false"
         mode="vertical"
       >
-        <sidebar-item v-for="root in menuTree" :key="root.id" :item="root" />
+        <sidebar-item v-for="root in menuList" :key="root.id" :item="root" />
       </el-menu>
     </el-scrollbar>
   </div>
 </template>
 
 <script>
-import { mapGetters } from "vuex";
-import Logo from "./Logo";
-import SidebarItem from "./SidebarItem";
-import variables from "@/styles/variables.scss";
+import { useStore } from 'vuex';
+import { useRoute } from 'vue-router';
+import Logo from './components/Logo';
+import SidebarItem from './components/SidebarItem';
+import variablesStyle from '@/styles/variables.scss';
+import { computed } from 'vue';
 export default {
-  name: "MenuTree",
+  name: 'Sidebar',
   components: { SidebarItem, Logo },
-  computed: {
-    ...mapGetters(["menuTree", "sidebar"]),
-    activeMenu() {
-      const route = this.$route;
-      const { meta, path } = route;
-      // if set path, the sidebar will highlight the path you set
-      if (meta.activeMenu) {
-        return meta.activeMenu;
-      }
-      return path;
-    },
-    showLogo() {
-      return this.$store.state.settings.sidebarLogo;
-    },
-    variables() {
-      return variables;
-    },
-    isCollapse() {
-      return !this.sidebar.opened;
-    }
-  },
-  data() {
-    return {};
-  },
-  mounted() {},
-  methods: {}
+  setup() {
+    const store = useStore();
+    const route = useRoute();
+
+    const activeMenu = computed(() => route.path);
+    const variables = computed(() => variablesStyle);
+    const menuList = computed(() => store.state.subject.user.menuList || []);
+    const sidebar = computed(() => store.state.app.sidebar);
+    const isCollapse = computed(() => !sidebar.value.opened);
+
+    return {
+      activeMenu,
+      variables,
+      sidebar,
+      menuList,
+      isCollapse
+    };
+  }
 };
 </script>
diff --git a/WebSite/src/layout/components/TagsView/ScrollPane.vue b/WebSite/src/layout/components/TagsView/ScrollPane.vue
deleted file mode 100644
index a513290..0000000
--- a/WebSite/src/layout/components/TagsView/ScrollPane.vue
+++ /dev/null
@@ -1,96 +0,0 @@
-<template>
-  <el-scrollbar
-    ref="scrollContainer"
-    :vertical="false"
-    class="scroll-container"
-    @wheel.native.prevent="handleScroll"
-  >
-    <slot />
-  </el-scrollbar>
-</template>
-
-<script>
-const tagAndTagSpacing = 4; // tagAndTagSpacing
-
-export default {
-  name: "ScrollPane",
-  data() {
-    return {
-      left: 0
-    };
-  },
-  computed: {
-    scrollWrapper() {
-      return this.$refs.scrollContainer.$refs.wrap;
-    }
-  },
-  methods: {
-    handleScroll(e) {
-      const eventDelta = e.wheelDelta || -e.deltaY * 40;
-      const $scrollWrapper = this.scrollWrapper;
-      $scrollWrapper.scrollLeft = $scrollWrapper.scrollLeft + eventDelta / 4;
-    },
-    moveToTarget(currentTag) {
-      const $container = this.$refs.scrollContainer.$el;
-      const $containerWidth = $container.offsetWidth;
-      const $scrollWrapper = this.scrollWrapper;
-      const tagList = this.$parent.$refs.tag;
-
-      let firstTag = null;
-      let lastTag = null;
-
-      // find first tag and last tag
-      if (tagList.length > 0) {
-        firstTag = tagList[0];
-        lastTag = tagList[tagList.length - 1];
-      }
-
-      if (firstTag === currentTag) {
-        $scrollWrapper.scrollLeft = 0;
-      } else if (lastTag === currentTag) {
-        $scrollWrapper.scrollLeft =
-          $scrollWrapper.scrollWidth - $containerWidth;
-      } else {
-        // find preTag and nextTag
-        const currentIndex = tagList.findIndex(item => item === currentTag);
-        const prevTag = tagList[currentIndex - 1];
-        const nextTag = tagList[currentIndex + 1];
-
-        // the tag's offsetLeft after of nextTag
-        const afterNextTagOffsetLeft =
-          nextTag.$el.offsetLeft + nextTag.$el.offsetWidth + tagAndTagSpacing;
-
-        // the tag's offsetLeft before of prevTag
-        const beforePrevTagOffsetLeft =
-          prevTag.$el.offsetLeft - tagAndTagSpacing;
-
-        if (
-          afterNextTagOffsetLeft >
-          $scrollWrapper.scrollLeft + $containerWidth
-        ) {
-          $scrollWrapper.scrollLeft = afterNextTagOffsetLeft - $containerWidth;
-        } else if (beforePrevTagOffsetLeft < $scrollWrapper.scrollLeft) {
-          $scrollWrapper.scrollLeft = beforePrevTagOffsetLeft;
-        }
-      }
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.scroll-container {
-  white-space: nowrap;
-  position: relative;
-  overflow: hidden;
-  width: 100%;
-  /deep/ {
-    .el-scrollbar__bar {
-      bottom: 0px;
-    }
-    .el-scrollbar__wrap {
-      height: 49px;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/layout/components/TagsView/index.vue b/WebSite/src/layout/components/TagsView/index.vue
index 2b7c05e..06a0163 100644
--- a/WebSite/src/layout/components/TagsView/index.vue
+++ b/WebSite/src/layout/components/TagsView/index.vue
@@ -1,209 +1,128 @@
+<!--
+ * @Description: 
+ * @Autor: dongjunhua
+ * @Date: 2020-12-21 09:02:14
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-02-04 09:43:44
+-->
 <template>
-  <div id="tags-view-container" class="tags-view-container">
-    <scroll-pane ref="scrollPane" class="tags-view-wrapper">
-      <router-link
-        v-for="tag in visitedViews"
-        ref="tag"
-        :key="tag.path"
-        :class="isActive(tag) ? 'active' : ''"
-        :to="{ path: tag.path, query: tag.query, fullPath: tag.fullPath }"
-        tag="span"
-        class="tags-view-item"
-        @click.middle.native="!isAffix(tag) ? closeSelectedTag(tag) : ''"
-        @contextmenu.prevent.native="openMenu(tag, $event)"
-      >
-        {{ tag.title }}
-        <span
-          v-if="!isAffix(tag)"
-          class="el-icon-close"
-          @click.prevent.stop="closeSelectedTag(tag)"
-        />
-      </router-link>
-    </scroll-pane>
-    <ul
-      v-show="visible"
-      :style="{ left: left + 'px', top: top + 'px' }"
-      class="contextmenu"
+  <transition name="fade-transform-top">
+    <div
+      id="tags-view-container"
+      class="tags-view-container"
+      v-if="cachedViews.length > 1"
     >
-      <li @click="refreshSelectedTag(selectedTag)">Refresh</li>
-      <li v-if="!isAffix(selectedTag)" @click="closeSelectedTag(selectedTag)">
-        Close
-      </li>
-      <li @click="closeOthersTags">Close Others</li>
-      <li @click="closeAllTags(selectedTag)">Close All</li>
-    </ul>
-  </div>
+      <scroll-pane>
+        <div class="router-link-container">
+          <router-link
+            v-for="view in cachedViews"
+            ref="tag"
+            :key="view.id"
+            :class="view.active ? 'active' : ''"
+            :to="{ path: path(view.path) }"
+            tag="span"
+            class="tags-view-item"
+          >
+            <!-- <svg-icon v-if="view.active && view.icon" :icon-class="view.icon" /> -->
+            <i v-if="view.icon" :class="view.icon"></i>
+            <span v-if="view.name" class="context">{{ view.name }}</span>
+            <div
+              class="close-icon-container"
+              v-if="view.allowClose"
+              @click.prevent="closeTag(view)"
+            >
+              <svg width="16" height="16">
+                <line
+                  x1="5"
+                  y1="5"
+                  x2="11"
+                  y2="11"
+                  style="stroke:rgb(99,99,99);stroke-width:1"
+                />
+                <line
+                  x1="5"
+                  y1="11"
+                  x2="11"
+                  y2="5"
+                  style="stroke:rgb(99,99,99);stroke-width:1"
+                />
+              </svg>
+            </div>
+          </router-link>
+        </div>
+      </scroll-pane>
+    </div>
+  </transition>
 </template>
 
 <script>
-import ScrollPane from "./ScrollPane";
-import path from "path";
-
+import { useStore } from 'vuex';
+import { useRoute, useRouter } from 'vue-router';
+import { computed, watch } from 'vue';
+import ScrollPane from './components/ScrollPane';
+import TagView from '@/core/model/TagView';
 export default {
+  name: 'TagsView',
   components: { ScrollPane },
-  data() {
-    return {
-      visible: false,
-      top: 0,
-      left: 0,
-      selectedTag: {},
-      affixTags: []
+  setup() {
+    const store = useStore();
+    const route = useRoute();
+    const router = useRouter();
+
+    const cachedViews = computed(() => {
+      return store.state.app.tagsView.cachedViews;
+    });
+    const menuList = computed(() => store.state.subject.user.menuList || []);
+
+    const path = routingUrl => {
+      return routingUrl ? `/i/${routingUrl}` : '/i';
     };
-  },
-  computed: {
-    visitedViews() {
-      return this.$store.state.tagsView.visitedViews;
-    },
-    routes() {
-      return this.$store.state.permission.routes;
-    }
-  },
-  watch: {
-    $route() {
-      this.addTags();
-      this.moveToCurrentTag();
-    },
-    visible(value) {
-      if (value) {
-        document.body.addEventListener("click", this.closeMenu);
+
+    const getTag = () => {
+      if (route.path === '/i') {
+        store.dispatch(
+          'app/addTagView',
+          new TagView(0, '', '', 'fas fa-home', true, false)
+        );
       } else {
-        document.body.removeEventListener("click", this.closeMenu);
+        menuList.value.forEach(m => checkNode(m, route.path));
       }
-    }
-  },
-  mounted() {
-    this.initTags();
-    this.addTags();
-  },
-  methods: {
-    isActive(route) {
-      return route.path === this.$route.path;
-    },
-    isAffix(tag) {
-      return tag.meta && tag.meta.affix;
-    },
-    filterAffixTags(routes, basePath = "/") {
-      let tags = [];
-      routes.forEach(route => {
-        if (route.meta && route.meta.affix) {
-          const tagPath = path.resolve(basePath, route.path);
-          tags.push({
-            fullPath: tagPath,
-            path: tagPath,
-            name: route.name,
-            meta: { ...route.meta }
-          });
-        }
-        if (route.children) {
-          const tempTags = this.filterAffixTags(route.children, route.path);
-          if (tempTags.length >= 1) {
-            tags = [...tags, ...tempTags];
-          }
-        }
-      });
-      return tags;
-    },
-    initTags() {
-      const affixTags = (this.affixTags = this.filterAffixTags(this.routes));
-      for (const tag of affixTags) {
-        // Must have tag name
-        if (tag.name) {
-          this.$store.dispatch("tagsView/addVisitedView", tag);
-        }
-      }
-    },
-    addTags() {
-      const { name } = this.$route;
-      if (name) {
-        this.$store.dispatch("tagsView/addView", this.$route);
-      }
-      return false;
-    },
-    moveToCurrentTag() {
-      const tags = this.$refs.tag;
-      this.$nextTick(() => {
-        for (const tag of tags) {
-          if (tag.to.path === this.$route.path) {
-            this.$refs.scrollPane.moveToTarget(tag);
-            // when query is different then update
-            if (tag.to.fullPath !== this.$route.fullPath) {
-              this.$store.dispatch("tagsView/updateVisitedView", this.$route);
-            }
-            break;
-          }
-        }
-      });
-    },
-    refreshSelectedTag(view) {
-      this.$store.dispatch("tagsView/delCachedView", view).then(() => {
-        const { fullPath } = view;
-        this.$nextTick(() => {
-          this.$router.replace({
-            path: "/redirect" + fullPath
-          });
-        });
-      });
-    },
-    closeSelectedTag(view) {
-      this.$store
-        .dispatch("tagsView/delView", view)
-        .then(({ visitedViews }) => {
-          if (this.isActive(view)) {
-            this.toLastView(visitedViews, view);
-          }
-        });
-    },
-    closeOthersTags() {
-      this.$router.push(this.selectedTag);
-      this.$store
-        .dispatch("tagsView/delOthersViews", this.selectedTag)
-        .then(() => {
-          this.moveToCurrentTag();
-        });
-    },
-    closeAllTags(view) {
-      this.$store.dispatch("tagsView/delAllViews").then(({ visitedViews }) => {
-        if (this.affixTags.some(tag => tag.path === view.path)) {
-          return;
-        }
-        this.toLastView(visitedViews, view);
-      });
-    },
-    toLastView(visitedViews, view) {
-      const latestView = visitedViews.slice(-1)[0];
-      if (latestView) {
-        this.$router.push(latestView.fullPath);
-      } else {
-        // now the default is to redirect to the home page if there is no tags-view,
-        // you can adjust it according to your needs.
-        if (view.name === "Dashboard") {
-          // to reload home page
-          this.$router.replace({ path: "/redirect" + view.fullPath });
-        } else {
-          this.$router.push("/");
-        }
+    };
+
+    const checkNode = (node, path) => {
+      if (`/i/${node.routingUrl}` === path) {
+        store.dispatch(
+          'app/addTagView',
+          new TagView(node.id, node.name, node.routingUrl, node.icon)
+        );
+      } else if (node.children && node.children.length > 0) {
+        node.children.forEach(c => checkNode(c, path));
       }
-    },
-    openMenu(tag, e) {
-      const menuMinWidth = 105;
-      const offsetLeft = this.$el.getBoundingClientRect().left; // container margin left
-      const offsetWidth = this.$el.offsetWidth; // container width
-      const maxLeft = offsetWidth - menuMinWidth; // left boundary
-      const left = e.clientX - offsetLeft + 15; // 15: margin right
+    };
 
-      if (left > maxLeft) {
-        this.left = maxLeft;
+    const closeTag = view => {
+      store.dispatch('app/delTagView', view);
+      const activeView = cachedViews.value.find(v => v.active);
+      if (activeView) {
+        router.push(path(activeView.path));
       } else {
-        this.left = left;
+        router.push('/');
       }
+    };
 
-      this.top = e.clientY;
-      this.visible = true;
-      this.selectedTag = tag;
-    },
-    closeMenu() {
-      this.visible = false;
-    }
+    watch(
+      () => route.path,
+      () => {
+        getTag();
+      },
+      { immediate: true }
+    );
+
+    return {
+      path,
+      cachedViews,
+      closeTag
+    };
   }
 };
 </script>
@@ -212,64 +131,126 @@ export default {
 .tags-view-container {
   height: 34px;
   width: 100%;
-  background: #fff;
+  position: relative;
+  z-index: 10;
+  background: rgb(245, 245, 245);
   border-bottom: 1px solid #d8dce5;
-  // box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.12), 0 0 3px 0 rgba(0, 0, 0, 0.04);
-  .tags-view-wrapper {
+  box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
+
+  .router-link-container {
+    display: flex;
+
     .tags-view-item {
-      display: inline-block;
+      transition: all 0.18s;
+      display: flex;
       position: relative;
       cursor: pointer;
-      height: 26px;
+      height: 33px;
       line-height: 26px;
-      border: 1px solid #d8dce5;
-      color: #495060;
-      background: #fff;
-      padding: 0 8px;
+      justify-content: center;
+      align-items: center;
+      color: #777;
+      padding: 1px 2px 0 8px;
       font-size: 12px;
-      margin-left: 5px;
-      margin-top: 4px;
+      margin-left: 10px;
+      font-weight: bold;
+
       &:first-of-type {
-        margin-left: 15px;
+        margin-left: 5px;
+        padding-left: 15px;
+        padding-right: 15px;
       }
       &:last-of-type {
-        margin-right: 15px;
+        margin-right: 5px;
+        &::after {
+          position: absolute;
+          right: -5px;
+          content: '';
+          width: 1px;
+          height: 30px;
+          border-right: 1px solid rgb(245, 245, 245);
+        }
       }
+      &::before {
+        transition: all 0.18s;
+        position: absolute;
+        left: 0;
+        bottom: 0;
+        content: '';
+        height: 0;
+        width: 100%;
+        background-color: rgb(80, 138, 255);
+      }
+      &::after {
+        position: absolute;
+        right: -5px;
+        content: '';
+        width: 1px;
+        height: 16px;
+        border-right: 1px solid #ccc;
+      }
+
+      &:hover {
+        color: #495060;
+      }
+
       &.active {
-        background-color: #42b983;
-        color: #fff;
-        border-color: #42b983;
+        color: #495060;
+
         &::before {
-          content: "";
-          background: #fff;
-          display: inline-block;
-          width: 8px;
-          height: 8px;
-          border-radius: 50%;
-          position: relative;
-          margin-right: 2px;
+          position: absolute;
+          left: 0;
+          bottom: 0;
+          content: '';
+          height: 3px;
+          width: 100%;
+          background-color: rgb(80, 138, 255);
+          // background: linear-gradient(
+          //   to left,
+          //   rgba(80, 138, 255, 0.8),
+          //   rgba(30, 180, 97, 0.8),
+          //   rgba(80, 138, 255, 0.8)
+          // );
         }
       }
     }
-  }
-  .contextmenu {
-    margin: 0;
-    background: #fff;
-    z-index: 3000;
-    position: absolute;
-    list-style-type: none;
-    padding: 5px 0;
-    border-radius: 4px;
-    font-size: 12px;
-    font-weight: 400;
-    color: #333;
-    box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);
-    li {
-      margin: 0;
-      padding: 7px 16px;
-      cursor: pointer;
+    .context {
+      display: inline-block;
+      padding: 0 10px;
+    }
+
+    .close-icon-container {
+      position: relative;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      width: 18px;
+      height: 18px;
+      border-radius: 9px;
       &:hover {
-        background: #eee;
+        background-color: #ccc;
+      }
+    }
+
+    .contextmenu {
+      margin: 0;
+      background: #fff;
+      z-index: 3000;
+      position: absolute;
+      list-style-type: none;
+      padding: 5px 0;
+      border-radius: 4px;
+      font-size: 12px;
+      font-weight: 400;
+      color: #333;
+      box-shadow: 2px 2px 3px 0 rgba(0, 0, 0, 0.3);
+      li {
+        margin: 0;
+        padding: 7px 16px;
+        cursor: pointer;
+        &:hover {
+          background: #eee;
+        }
       }
     }
   }
diff --git a/WebSite/src/layout/components/index.js b/WebSite/src/layout/components/index.js
index 750be80..b5975a7 100644
--- a/WebSite/src/layout/components/index.js
+++ b/WebSite/src/layout/components/index.js
@@ -1,13 +1,12 @@
 /*
  * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-06-08 09:28:04
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-06-16 10:35:57
+ * @Autor: dongjunhua
+ * @Date: 2020-12-21 09:01:40
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-27 20:27:30
  */
-
-export { default as AppMain } from "./AppMain";
-export { default as Navbar } from "./Navbar";
-export { default as Settings } from "./Settings";
-export { default as Sidebar } from "./Sidebar";
-export { default as TagsView } from "./TagsView";
+export { default as AppMainSection } from './AppMain/index.vue';
+export { default as NavbarSection } from './Navbar/index.vue';
+// export { default as Settings } from './Settings'
+export { default as SidebarSection } from './Sidebar/index.vue';
+export { default as TagsViewSection } from './TagsView/index.vue';
diff --git a/WebSite/src/layout/index.vue b/WebSite/src/layout/index.vue
index a65534b..afa69f1 100644
--- a/WebSite/src/layout/index.vue
+++ b/WebSite/src/layout/index.vue
@@ -1,69 +1,86 @@
+<!--
+ * @Description: 
+ * @Autor: dongjunhua
+ * @Date: 2020-12-21 08:50:10
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-02-19 08:57:14
+-->
 <template>
-  <div :class="classObj" class="app-wrapper">
+  <div
+    :class="{
+      hideSidebar: !sidebar.opened || !sidebar.enabled,
+      openSidebar: sidebar.opened && sidebar.enabled,
+      withoutAnimation: sidebar.withoutAnimation,
+      mobile: device === 'mobile' || !sidebar.enabled
+    }"
+    class="app-wrapper"
+  >
     <div
       v-if="device === 'mobile' && sidebar.opened"
       class="drawer-bg"
       @click="handleClickOutside"
     />
-    <sidebar class="sidebar-container" />
-    <div :class="{ hasTagsView: needTagsView }" class="main-container">
+    <sidebar-section v-if="sidebar.enabled" class="sidebar-container" />
+    <div :class="{ hasTagsView: tagsView.enabled }" class="main-container">
       <div :class="{ 'fixed-header': fixedHeader }">
-        <navbar />
-        <tags-view v-if="needTagsView" />
+        <navbar-section v-if="navbar.enabled" />
+        <tags-view-section v-if="tagsView.enabled" />
       </div>
-      <app-main />
-      <right-panel v-if="showSettings">
-        <settings />
-      </right-panel>
+      <app-main-section />
     </div>
   </div>
 </template>
 
 <script>
-import RightPanel from "@/components/RightPanel";
-import { AppMain, Navbar, Settings, TagsView, Sidebar } from "./components";
-import ResizeMixin from "./mixin/ResizeHandler";
-import { mapState } from "vuex";
+import {
+  AppMainSection,
+  NavbarSection,
+  SidebarSection,
+  TagsViewSection
+} from './components';
+import { useStore } from 'vuex';
+import { computed } from 'vue';
+import ResizeMixin from './mixin/ResizeHandler';
 
 export default {
-  name: "Layout",
+  name: 'Layout',
   components: {
-    AppMain,
-    Navbar,
-    RightPanel,
-    Settings,
-    TagsView,
-    Sidebar
+    AppMainSection,
+    NavbarSection,
+    SidebarSection,
+    TagsViewSection
   },
   mixins: [ResizeMixin],
-  computed: {
-    ...mapState({
-      sidebar: state => state.app.sidebar,
-      device: state => state.app.device,
-      showSettings: state => state.settings.showSettings,
-      needTagsView: state => state.settings.tagsView,
-      fixedHeader: state => state.settings.fixedHeader
-    }),
-    classObj() {
-      return {
-        hideSidebar: !this.sidebar.opened,
-        openSidebar: this.sidebar.opened,
-        withoutAnimation: this.sidebar.withoutAnimation,
-        mobile: this.device === "mobile"
-      };
-    }
-  },
-  methods: {
-    handleClickOutside() {
-      this.$store.dispatch("app/closeSideBar", { withoutAnimation: false });
-    }
+  setup() {
+    const store = useStore();
+
+    // !! the name of variable in steup can not be same with the name in components
+    // even they are diff in case on initial (case-insensitive)
+    const fixedHeader = computed(() => store.state.app.fixedHeader);
+    const device = computed(() => store.state.app.device);
+    const sidebar = computed(() => store.state.app.sidebar);
+    const navbar = computed(() => store.state.app.navbar);
+    const tagsView = computed(() => store.state.app.tagsView);
+
+    const handleClickOutside = () => {
+      store.dispatch('app/closeSideBar', { withoutAnimation: false });
+    };
+
+    return {
+      fixedHeader,
+      device,
+      sidebar,
+      navbar,
+      tagsView,
+      handleClickOutside
+    };
   }
 };
 </script>
 
 <style lang="scss" scoped>
-@import "~@/styles/mixin.scss";
-@import "~@/styles/variables.scss";
+@import '~@/styles/mixin.scss';
+@import '~@/styles/variables.scss';
 
 .app-wrapper {
   @include clearfix;
diff --git a/WebSite/src/layout/mixin/ResizeHandler.js b/WebSite/src/layout/mixin/ResizeHandler.js
index 48f7959..cdd0858 100644
--- a/WebSite/src/layout/mixin/ResizeHandler.js
+++ b/WebSite/src/layout/mixin/ResizeHandler.js
@@ -1,27 +1,34 @@
-import store from "@/store";
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2021-02-03 09:24:05
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-02-03 09:29:57
+ */
+import store from '@/store';
 
 const { body } = document;
 const WIDTH = 992; // refer to Bootstrap's responsive design
 
 export default {
   watch: {
-    $route(route) {
-      if (this.device === "mobile" && this.sidebar.opened) {
-        store.dispatch("app/closeSideBar", { withoutAnimation: false });
+    $route() {
+      if (this.device === 'mobile' && this.sidebar.opened) {
+        store.dispatch('app/closeSideBar', { withoutAnimation: false });
       }
     }
   },
   beforeMount() {
-    window.addEventListener("resize", this.$_resizeHandler);
+    window.addEventListener('resize', this.$_resizeHandler);
   },
-  beforeDestroy() {
-    window.removeEventListener("resize", this.$_resizeHandler);
+  beforeUnmount() {
+    window.removeEventListener('resize', this.$_resizeHandler);
   },
   mounted() {
     const isMobile = this.$_isMobile();
     if (isMobile) {
-      store.dispatch("app/toggleDevice", "mobile");
-      store.dispatch("app/closeSideBar", { withoutAnimation: true });
+      store.dispatch('app/setDevice', 'mobile');
+      store.dispatch('app/closeSideBar', { withoutAnimation: true });
     }
   },
   methods: {
@@ -34,10 +41,10 @@ export default {
     $_resizeHandler() {
       if (!document.hidden) {
         const isMobile = this.$_isMobile();
-        store.dispatch("app/toggleDevice", isMobile ? "mobile" : "desktop");
+        store.dispatch('app/setDevice', isMobile ? 'mobile' : 'desktop');
 
         if (isMobile) {
-          store.dispatch("app/closeSideBar", { withoutAnimation: true });
+          store.dispatch('app/closeSideBar', { withoutAnimation: true });
         }
       }
     }
diff --git a/WebSite/src/main.js b/WebSite/src/main.js
index 4cf333a..4c2bc62 100644
--- a/WebSite/src/main.js
+++ b/WebSite/src/main.js
@@ -1,58 +1,96 @@
 /*
- * @Descripttion:
- * @Author: dong
- * @Date: 2020-04-21 18:54:20
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2020-12-17 10:20:47
  * @LastEditors: dongjunhua
- * @LastEditTime: 2020-08-20 08:39:38
+ * @LastEditTime: 2021-01-05 14:57:59
  */
-import Vue from "vue";
-import Cookies from "js-cookie";
-import "normalize.css/normalize.css"; // a modern alternative to CSS resets
-import Element from "element-ui";
-import "./styles/element-variables.scss";
-import "@/styles/index.scss"; // global css
-import App from "./App";
-import store from "./store";
-import router from "./router";
-import "./icons"; // icon
-import "./permission"; // permission control
-import "./utils/error-log"; // error log
-import * as filters from "./filters"; // global filters
-import VueJsonp from "vue-jsonp"; // jsonp
-import service from "./service";
-import LayoutCard from "./components/LayoutCard";
-import JumpDialog from "./components/JumpDialog";
-import JumpDialogItem from "./components/JumpDialog/components/JumpDialogItem";
-
-// 打包后提供mock数据,如使用真实api,请注释
-if (process.env.NODE_ENV === "test") {
-  const { mockXHR } = require("../mock");
-  mockXHR();
+import { createApp } from 'vue';
+import App from './App.vue';
+import router from './router';
+import store from './store';
+import 'normalize.css/normalize.css'; // a modern alternative to CSS resets
+import ElementPlus from 'element-plus';
+import 'element-plus/lib/theme-chalk/index.css';
+import defaultSettings from './settings';
+import '@/styles/index.scss'; // global css
+import './icons'; // icon
+import SvgIcon from './components/SvgIcon/index.vue';
+import VueParticles from 'vue-particles';
+import '@fortawesome/fontawesome-free/css/all.css';
+import locale from 'element-plus/lib/locale/lang/zh-cn';
+import './icons/ali/iconfont.css';
+
+const app = createApp(App);
+
+// register plugins
+app
+  .use(ElementPlus, { locale, size: 'small', zIndex: 3000 })
+  .use(store)
+  .use(router)
+
+  .use(VueParticles);
+
+// register global component
+app.component('SvgIcon', SvgIcon);
+
+// mount instance
+
+let formatDate = (date, fmt) => {
+  date = new Date(date);
+  if (typeof fmt === 'undefined') {
+    fmt = 'yyyy-MM-dd HH:mm:ss';
+  }
+  if (/(y+)/.test(fmt)) {
+    fmt = fmt.replace(
+      RegExp.$1,
+      (date.getFullYear() + '').substr(4 - RegExp.$1.length)
+    );
+  }
+  let o = {
+    'M+': date.getMonth() + 1,
+    'd+': date.getDate(),
+    'H+': date.getHours(),
+    'm+': date.getMinutes(),
+    's+': date.getSeconds()
+  };
+  for (let k in o) {
+    if (new RegExp(`(${k})`).test(fmt)) {
+      let str = o[k] + '';
+      fmt = fmt.replace(
+        RegExp.$1,
+        RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length)
+      );
+    }
+  }
+  return fmt;
+};
+
+let isvalidPhone = (phone)=> {
+  const reg = /^1([38][0-9]|4[014-9]|[59][0-35-9]|6[2567]|7[0-8])\d{8}$/
+  return reg.test(phone)
 }
 
-//全局注册组件
-Vue.component("LayoutCard", LayoutCard);
-Vue.component("JumpDialog", JumpDialog);
-Vue.component("JumpDialogItem", JumpDialogItem);
-
-Vue.use(service);
-Vue.use(Element, {
-  //size: Cookies.get("size") || "medium" // set element-ui default size
-  size: "mini"
-});
-// use jsonp
-Vue.use(VueJsonp);
-
-// register global utility filters
-Object.keys(filters).forEach(key => {
-  Vue.filter(key, filters[key]);
-});
-
-Vue.config.productionTip = false;
-
-new Vue({
-  el: "#app",
-  router,
-  store,
-  render: h => h(App)
-});
+app.config.globalProperties.$formatDate = formatDate;
+app.use(formatDate);
+app.config.globalProperties.$isvalidPhone = isvalidPhone;
+app.use(isvalidPhone);
+const digitsRE = /(\d{3})(?=\d)/g;
+let currency = (value, currency, decimals) => {
+  value = parseFloat(value);
+  if (!isFinite(value) || (!value && value !== 0)) return '';
+  currency = currency != null ? currency : '$';
+  decimals = decimals != null ? decimals : 2;
+  var stringified = Math.abs(value).toFixed(decimals);
+  var _int = decimals ? stringified.slice(0, -1 - decimals) : stringified;
+  var i = _int.length % 3;
+  var head = i > 0 ? _int.slice(0, i) + (_int.length > 3 ? ',' : '') : '';
+  var _float = decimals ? stringified.slice(-1 - decimals) : '';
+  var sign = value < 0 ? '-' : '';
+  return (
+    sign + currency + head + _int.slice(i).replace(digitsRE, '$1,') + _float
+  );
+};
+app.config.globalProperties.$currency = currency;
+app.use(currency);
+app.mount('#app');
diff --git a/WebSite/src/permission.js b/WebSite/src/permission.js
deleted file mode 100644
index 9b2325b..0000000
--- a/WebSite/src/permission.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-03-13 10:03:56
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-08-10 13:07:55
- */
-import router from "./router";
-import store from "./store";
-import { Message } from "element-ui";
-import NProgress from "nprogress"; // progress bar
-import "nprogress/nprogress.css"; // progress bar style
-import { getToken } from "@/utils/auth"; // get token from cookie
-import getPageTitle from "@/utils/get-page-title";
-
-NProgress.configure({ showSpinner: false }); // NProgress Configuration
-
-const whiteList = ["/login", "/auth-redirect"]; // no redirect whitelist
-
-router.beforeEach(async (to, from, next) => {
-  // start progress bar
-  NProgress.start();
-
-  // set page title
-  document.title = getPageTitle(to.meta.title);
-
-  // determine whether the user has logged in
-  const hasToken = getToken();
-
-  if (hasToken) {
-    if (to.path === "/login") {
-      // if is logged in, redirect to the home page
-      next({ path: "/" });
-      NProgress.done();
-    } else {
-      // determine whether the user has existed through getInfo
-      if (store.getters.user) {
-        next();
-      } else {
-        try {
-          // get user info
-          await store.dispatch("user/getInfo");
-          // store.dispatch("permission/generateRoutes");
-
-          // hack method to ensure that addRoutes is complete
-          // set the replace: true, so the navigation will not leave a history record
-          next({ ...to, replace: true });
-        } catch (error) {
-          // remove token and go to login page to re-login
-          await store.dispatch("user/resetCache");
-          Message.error(error || "Has Error");
-          next("/login");
-          NProgress.done();
-        }
-      }
-    }
-  } else {
-    /* has no token*/
-
-    if (whiteList.indexOf(to.path) !== -1) {
-      // in the free login whitelist, go directly
-      next();
-    } else {
-      // other pages that do not have permission to access are redirected to the login page.
-      next("/login");
-      NProgress.done();
-    }
-  }
-});
-
-router.afterEach(() => {
-  // finish progress bar
-  NProgress.done();
-});
diff --git a/WebSite/src/router/index.js b/WebSite/src/router/index.js
index 510c240..abb021a 100644
--- a/WebSite/src/router/index.js
+++ b/WebSite/src/router/index.js
@@ -1,119 +1,87 @@
-import Vue from "vue";
-import Router from "vue-router";
-
-Vue.use(Router);
-
-/* Layout */
-import Layout from "@/layout";
-
-/**
- * Note: sub-menu only appear when route children.length >= 1
- * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html
- *
- * hidden: true                   if set true, item will not show in the sidebar(default is false)
- * alwaysShow: true               if set true, will always show the root menu
- *                                if not set alwaysShow, when item has more than one children route,
- *                                it will becomes nested mode, otherwise not show the root menu
- * redirect: noRedirect           if set noRedirect will no redirect in the breadcrumb
- * name:'router-name'             the name is used by <keep-alive> (must set!!!)
- * meta : {
-    roles: ['admin','editor']    control the page roles (you can set multiple roles)
-    title: 'title'               the name show in sidebar and breadcrumb (recommend set)
-    icon: 'svg-name'             the icon show in the sidebar
-    noCache: true                if set true, the page will no be cached(default is false)
-    affix: true                  if set true, the tag will affix in the tags-view
-    breadcrumb: false            if set false, the item will hidden in breadcrumb(default is true)
-    activeMenu: '/example/list'  if set path, the sidebar will highlight the path you set
-  }
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2020-12-17 10:20:47
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-02-20 12:51:36
  */
+import { createRouter, createWebHashHistory } from 'vue-router';
+import { before, after } from './guards';
+import Layout from '@/layout';
 
-/**
- * 基础路由
- */
-export const constantRoutes = [
+// get routes from modules
+const modulesFiles = require.context('./modules', true, /\.js$/);
+// router for layout
+const moduleRoutes = modulesFiles.keys().reduce((moduleRoutes, modulePath) => {
+  const value = modulesFiles(modulePath);
+  return [...moduleRoutes, ...value.default];
+}, []);
+// router for outer
+const moduleRoutesForOuter = moduleRoutes.map(r => {
+  const routeForOuter = {
+    path: `/${r.path}`,
+    component: r.component,
+    name: `${r.name}ForOuter`
+  };
+  return routeForOuter;
+});
+
+const routes = [
   {
-    path: "/redirect",
-    component: Layout,
-    hidden: true,
-    children: [
-      {
-        path: "/redirect/:path(.*)",
-        component: () => import("@/views/redirect/index")
-      }
-    ]
+    path: '/login',
+    name: 'Login',
+    component: () => import('@/views/login/index')
   },
   {
-    path: "/login",
-    component: () => import("@/views/login/index"),
-    hidden: true
+    path: '/auth-redirect',
+    name: 'AuthRedirect',
+    component: () => import('@/views/auth-redirect')
   },
   {
-    path: "/auth-redirect",
-    component: () => import("@/views/login/auth-redirect"),
-    hidden: true
+    path: '/401',
+    name: 'NoPermission',
+    component: () => import('@/views/error-page/401')
   },
   {
-    path: "/404",
-    component: () => import("@/views/error-page/404"),
-    hidden: true
+    path: '/404',
+    name: 'NotFound',
+    component: () => import('@/views/error-page/404')
   },
+
   {
-    path: "/401",
-    component: () => import("@/views/error-page/401"),
-    hidden: true
+    path: '/main',
+    component: () => import('@/views/main/index'),
+    name: 'main'
   },
   {
-    path: "/",
-    component: Layout,
-    redirect: "/i"
-  }
-];
-
-import { demoRoutes } from "./modules/demo";
-
-/**
- * 需要动态加载的路由
- */
-export const asyncRoutes = [...demoRoutes];
-
-/**
- * 外层框架路由
- */
-export const layoutRoutes = [
-  {
-    path: "/i",
+    path: '/i',
     component: Layout,
     children: [
       {
-        path: "",
-        component: () => import("@/views/home"),
-        name: "Home",
-        meta: { title: "首页", affix: true }
-      }
+        path: '',
+        name: 'Home',
+        component: () => import('@/views/home')
+      },
+      ...moduleRoutes
     ]
-  }
+  },
+  ...moduleRoutesForOuter,
+  {
+    path: '/',
+    redirect: '/i'
+  },
+  // catch all routes (*, /*) must now be defined using a parameter with a custom regex
+  { path: '/:pathMatch(.*)*', redirect: { name: 'NotFound' } }
 ];
 
-/**
- * 404页面,必须在最后加载
- */
-export const notFoundRoutes = [{ path: "*", redirect: "/404", hidden: true }];
-
-export const routes = [...constantRoutes];
-
-const createRouter = () =>
-  new Router({
-    // mode: 'history', // require service support
-    scrollBehavior: () => ({ y: 0 }),
-    routes
-  });
-
-const router = createRouter();
+const router = createRouter({
+  history: createWebHashHistory(),
+  routes
+});
 
-// Detail see: https://github.com/vuejs/vue-router/issues/1234#issuecomment-357941465
-export function resetRouter() {
-  const newRouter = createRouter();
-  router.matcher = newRouter.matcher; // reset router
-}
+// set global router guards
+router.beforeEach(before);
+router.afterEach(after);
 
+export { moduleRoutes };
 export default router;
diff --git a/WebSite/src/router/modules/demo.js b/WebSite/src/router/modules/demo.js
deleted file mode 100644
index 67b8006..0000000
--- a/WebSite/src/router/modules/demo.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-07-15 16:40:16
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-18 13:56:32
- */
-
-export const demoRoutes = [
-  {
-    path: "icon",
-    component: () => import("@/views/icons"),
-    name: "Icon"
-  },
-  {
-    path: "dashboard",
-    component: () => import("@/views/dashboard"),
-    name: "Dashboard"
-  },
-  {
-    path: "example/index",
-    component: () => import("@/views/example/index"),
-    name: "Example"
-  },
-  {
-    path: "example/button",
-    component: () => import("@/views/example/button"),
-    name: "Button"
-  },
-  {
-    path: "example/table",
-    component: () => import("@/views/example/table"),
-    name: "Table"
-  },
-  {
-    path: "example/dialog",
-    component: () => import("@/views/example/dialog"),
-    name: "Dialog"
-  },
-  {
-    path: "example/icon",
-    component: () => import("@/views/example/icon"),
-    name: "Icon"
-  },
-  {
-    path: "example/layout",
-    component: () => import("@/views/example/layout"),
-    name: "Layout"
-  },
-  {
-    path: "example/form",
-    component: () => import("@/views/example/form"),
-    name: "Form"
-  }
-];
diff --git a/WebSite/src/service/base/base.js b/WebSite/src/service/base/base.js
deleted file mode 100644
index 675890d..0000000
--- a/WebSite/src/service/base/base.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * @Description:
- * @Autor: qun
- * @Date: 2020-06-10 14:23:40
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-07-15 17:15:06
- */
-
-class Base {
-  static downloadFile(res) {
-    if (!res.data) return;
-    var blob = new Blob([res.data], { type: res.data.type });
-    // 针对于IE浏览器的处理, 因部分IE浏览器不支持createObjectURL
-    if (window.navigator && window.navigator.msSaveOrOpenBlob) {
-      window.navigator.msSaveOrOpenBlob(blob, res.fileName);
-    } else {
-      var downloadElement = document.createElement("a");
-      var href = window.URL.createObjectURL(blob); // 创建下载的链接
-      downloadElement.href = href;
-      downloadElement.download = res.fileName; // 下载后文件名
-      document.body.appendChild(downloadElement);
-      downloadElement.click(); // 点击下载
-      document.body.removeChild(downloadElement); // 下载完成移除元素
-      window.URL.revokeObjectURL(href); // 释放掉blob对象
-    }
-  }
-
-  static processRequestData(data) {
-    if (!data.enabled) {
-      delete data.enabled;
-    }
-  }
-}
-export { Base };
diff --git a/WebSite/src/service/index.js b/WebSite/src/service/index.js
deleted file mode 100644
index f890cc7..0000000
--- a/WebSite/src/service/index.js
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * @Descripttion: global service module ver .1
- * @Author: dong
- * @Date: 2020-05-11 19:56:12
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-06-17 14:39:39
- */
-
-const modulesFiles = require.context("./modules", true, /\.js$/);
-
-const modules = modulesFiles.keys().reduce((modules, modulePath) => {
-  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, "$1");
-  const value = modulesFiles(modulePath);
-
-  const key = moduleName.charAt(0).toUpperCase() + moduleName.slice(1);
-  modules[key] = value.default;
-
-  return modules;
-}, {});
-
-// import Organization from "@/service/modules/organization";
-// const modules = { Organization };
-
-Object.defineProperty(modules, "invoke", {
-  value: function(method, ...params) {
-    let im;
-    eachMethod(this, (name, m) => {
-      name === method && (im = m);
-    });
-    if (im) {
-      return im(...params);
-    }
-  },
-  writable: false,
-  enumerable: false,
-  configurable: false
-});
-
-function eachMethod(modules, cb) {
-  Object.keys(modules).forEach(cKey => {
-    const c = modules[cKey];
-    typeof c === "function" &&
-      Object.getOwnPropertyNames(c).forEach(mKey => {
-        const m = c[mKey];
-        typeof m === "function" && cb(`${c.name}/${m.name}`, m);
-      });
-  });
-}
-
-const service = {
-  install(Vue) {
-    Vue.prototype.$service = modules;
-  }
-};
-
-export default service;
diff --git a/WebSite/src/service/modules/account.js b/WebSite/src/service/modules/account.js
deleted file mode 100644
index 78b6caa..0000000
--- a/WebSite/src/service/modules/account.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-06-11 11:13:25
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-07-15 17:21:52
- */
-import request from "@/utils/request";
-import { Base } from "../base/base";
-
-class Account extends Base {
-  static login(data) {
-    return request.post("/account/pc/v1/login", data);
-  }
-
-  static modifyPassword(data) {
-    return Promise.resolve("success");
-  }
-}
-
-export default Account;
diff --git a/WebSite/src/service/modules/user.js b/WebSite/src/service/modules/user.js
deleted file mode 100644
index 8f7e877..0000000
--- a/WebSite/src/service/modules/user.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * @Descripttion:
- * @Author: dong
- * @Date: 2020-05-11 19:57:33
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-07-15 17:14:35
- */
-import request from "@/utils/request";
-import { Base } from "../base/base";
-
-class User extends Base {
-  static setCurrent(data) {
-    return request.post("/user/pc/v1/setCurrent", data);
-  }
-
-  static getCurrent() {
-    return request.post("/user/pc/v1/getCurrent");
-  }
-}
-
-export default User;
diff --git a/WebSite/src/settings.js b/WebSite/src/settings.js
deleted file mode 100644
index a96eb55..0000000
--- a/WebSite/src/settings.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-03-13 10:03:56
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-08-14 16:31:37
- */
-module.exports = {
-  title: "Vue Element Admin",
-
-  /**
-   * @type {boolean} true | false
-   * @description Whether show the settings right-panel
-   */
-  showSettings: false,
-
-  /**
-   * @type {boolean} true | false
-   * @description Whether need tagsView
-   */
-  tagsView: true,
-
-  /**
-   * @type {boolean} true | false
-   * @description Whether fix the header
-   */
-  fixedHeader: false,
-
-  /**
-   * @type {boolean} true | false
-   * @description Whether show the logo in sidebar
-   */
-  sidebarLogo: false,
-
-  /**
-   * @type {boolean} true | false
-   * @description Whether show when there is only one root menu
-   */
-  sidebarRootMenu: true,
-
-  /**
-   * @type {string | array} 'production' | ['production', 'development']
-   * @description Need show err logs component.
-   * The default is only used in the production env
-   * If you want to also use it in dev, you can pass ['production', 'development']
-   */
-  errorLog: "production"
-};
diff --git a/WebSite/src/store/getters.js b/WebSite/src/store/getters.js
index 8e765c5..69ea6ea 100644
--- a/WebSite/src/store/getters.js
+++ b/WebSite/src/store/getters.js
@@ -1,34 +1,15 @@
 /*
  * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-03-13 10:03:57
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-08-14 16:30:05
+ * @Autor: dongjunhua
+ * @Date: 2021-01-27 13:17:54
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-27 13:21:36
  */
-import { sidebarRootMenu } from "@/settings";
 
 const getters = {
   sidebar: state => state.app.sidebar,
-  size: state => state.app.size,
-  device: state => state.app.device,
-  visitedViews: state => state.tagsView.visitedViews,
-  cachedViews: state => state.tagsView.cachedViews,
-  token: state => state.user.token,
-  avatar: state => state.user.avatar,
-  name: state => state.user.name,
-  introduction: state => state.user.introduction,
-  roles: state => state.user.roles,
-  user: state => state.user.user,
-  accountId: state => state.user.accountId,
-  permissionRoutes: state => state.permission.routes,
-  menuTree: state => {
-    if (!sidebarRootMenu) {
-      if (state.user.menuTree.length === 1 && state.user.menuTree[0].children) {
-        return state.user.menuTree[0].children;
-      }
-    }
-    return state.user.menuTree;
-  },
-  errorLogs: state => state.errorLog.logs
+  user: state => state.subject.user,
+  menuList: state => (state.subject.user ? state.subject.user.menuList : [])
 };
+
 export default getters;
diff --git a/WebSite/src/store/index.js b/WebSite/src/store/index.js
index cb6eb46..088dd36 100644
--- a/WebSite/src/store/index.js
+++ b/WebSite/src/store/index.js
@@ -1,25 +1,27 @@
-import Vue from "vue";
-import Vuex from "vuex";
-import getters from "./getters";
-
-Vue.use(Vuex);
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2020-12-17 10:20:47
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-27 13:26:54
+ */
+import { createStore } from 'vuex';
+import getters from '@/store/getters';
 
 // https://webpack.js.org/guides/dependency-management/#requirecontext
-const modulesFiles = require.context("./modules", true, /\.js$/);
+const modulesFiles = require.context('./modules', true, /\.js$/);
 
 // you do not need `import app from './modules/app'`
 // it will auto require all vuex module from modules file
 const modules = modulesFiles.keys().reduce((modules, modulePath) => {
   // set './app.js' => 'app'
-  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, "$1");
+  const moduleName = modulePath.replace(/^\.\/(.*)\.\w+$/, '$1');
   const value = modulesFiles(modulePath);
   modules[moduleName] = value.default;
   return modules;
 }, {});
 
-const store = new Vuex.Store({
+export default createStore({
   modules,
   getters
 });
-
-export default store;
diff --git a/WebSite/src/store/modules/app.js b/WebSite/src/store/modules/app.js
index 692dcad..99489e0 100644
--- a/WebSite/src/store/modules/app.js
+++ b/WebSite/src/store/modules/app.js
@@ -1,52 +1,199 @@
-import Cookies from "js-cookie";
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2020-12-21 09:34:12
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-02-18 16:16:01
+ */
+import App from '@/core/model/App';
+import TagView from '@/core/model/TagView';
+import Storage from '@/utils/Storage';
 
-const state = {
-  sidebar: {
-    opened: Cookies.get("sidebarStatus")
-      ? !!+Cookies.get("sidebarStatus")
-      : true,
-    withoutAnimation: false
-  },
-  device: "desktop",
-  size: Cookies.get("size") || "medium"
+import {
+  version,
+  coreVersion,
+  device,
+  dynamicLoginBg,
+  fixedHeader,
+  navbar,
+  sidebar,
+  tagsView
+} from '@/settings';
+
+import { themeConfigs } from '@/settings/theme';
+
+const getThemes = () => {
+  const activeTheme =
+    Storage.getLocal('app.theme') ||
+    themeConfigs.find(s => s.default).name ||
+    'default';
+  const themes = themeConfigs.map(t => {
+    return {
+      name: t.name,
+      className: t.className,
+      active: activeTheme === t.name
+    };
+  });
+  return themes;
 };
 
+const state = new App(
+  version,
+  coreVersion,
+  device,
+  dynamicLoginBg,
+  fixedHeader,
+  getThemes(),
+  {
+    enabled: navbar.enabled
+  },
+  {
+    enabled: sidebar.enabled,
+    showLogo: sidebar.showLogo,
+    opened: Storage.getSession('app.sidebar.opened') === false ? false : true,
+    withoutAnimation: true
+  },
+  {
+    enabled: tagsView.enabled,
+    cachedViews: []
+  }
+);
+
 const mutations = {
+  SET_DEVICE: (state, device) => {
+    state.device = device;
+  },
+  CHANGE_THEME: (state, theme) => {
+    state.sidebar.withoutAnimation = false;
+    state.themes.forEach(t => {
+      t.active = t.name === theme;
+    });
+    Storage.setLocal('app.theme', theme);
+  },
   TOGGLE_SIDEBAR: state => {
-    state.sidebar.opened = !state.sidebar.opened;
     state.sidebar.withoutAnimation = false;
-    if (state.sidebar.opened) {
-      Cookies.set("sidebarStatus", 1);
+    state.sidebar.opened = !state.sidebar.opened;
+    Storage.setSession('app.sidebar.opened', state.sidebar.opened);
+  },
+  CLOSE_SIDEBAR: (state, withoutAnimation = true) => {
+    state.sidebar.withoutAnimation = withoutAnimation;
+    state.sidebar.opened = false;
+    Storage.setSession('app.sidebar.opened', state.sidebar.opened);
+  },
+  ADD_TAGVIEW: (state, view) => {
+    if (state.tagsView.cachedViews.length === 0) {
+      // try get views from sessionStorage
+      const sessionViews = Storage.getSession('app.tagsView.cachedViews');
+      if (sessionViews && sessionViews.length > 0) {
+        sessionViews.forEach(v =>
+          state.tagsView.cachedViews.push(
+            new TagView(v.id, v.name, v.path, v.icon, v.active, v.allowClose)
+          )
+        );
+      }
+    }
+    // console.log('add', view.name);
+    const index = state.tagsView.cachedViews.findIndex(v => v.id === view.id);
+    state.tagsView.cachedViews.forEach(v => (v.active = false));
+    if (index < 0) {
+      state.tagsView.cachedViews.push(view);
     } else {
-      Cookies.set("sidebarStatus", 0);
+      state.tagsView.cachedViews[index].active = true;
     }
+    Storage.setSession('app.tagsView.cachedViews', state.tagsView.cachedViews);
   },
-  CLOSE_SIDEBAR: (state, withoutAnimation) => {
-    Cookies.set("sidebarStatus", 0);
-    state.sidebar.opened = false;
-    state.sidebar.withoutAnimation = withoutAnimation;
+  DEL_TAGVIEW: (state, view) => {
+    // console.log('del', view.name);
+    const index = state.tagsView.cachedViews.findIndex(v => v.id === view.id);
+    if (index > -1) {
+      const [{ active }] = state.tagsView.cachedViews.splice(index, 1);
+      if (active) {
+        // if the view has been deleted is active, change the active view
+        if (index - 1 > -1) {
+          state.tagsView.cachedViews[index - 1].active = true;
+        } else if (index < state.tagsView.cachedViews.length) {
+          state.tagsView.cachedViews[index].active = true;
+        }
+      }
+    }
+    Storage.setSession('app.tagsView.cachedViews', state.tagsView.cachedViews);
   },
-  TOGGLE_DEVICE: (state, device) => {
-    state.device = device;
+  CLEAR_TAGVIEW: state => {
+    state.tagsView.cachedViews = [];
   },
-  SET_SIZE: (state, size) => {
-    state.size = size;
-    Cookies.set("size", size);
+  SET_LOADING: (state, loading) => {
+    state.loading = loading;
   }
 };
 
 const actions = {
-  toggleSideBar({ commit }) {
-    commit("TOGGLE_SIDEBAR");
+  /**
+   * @method toggleDevice
+   * @param {*} context
+   * @param {string} device
+   */
+  setDevice: ({ commit }, device) => {
+    commit('SET_DEVICE', device);
+  },
+  /**
+   * @method setTheme
+   * @param {*} context
+   * @param {string} theme
+   */
+  setTheme: ({ commit }, theme) => {
+    commit('CHANGE_THEME', theme);
+  },
+  /**
+   * @method toggleSideBar
+   * @param {*} context
+   */
+  toggleSideBar: ({ commit }) => {
+    commit('TOGGLE_SIDEBAR');
+  },
+  /**
+   * @method closeSideBar
+   * @param {*} context
+   * @param {*} payload
+   */
+  closeSideBar: ({ commit }, { withoutAnimation }) => {
+    commit('CLOSE_SIDEBAR', withoutAnimation);
+  },
+  /**
+   * @method closeSideBar
+   * @param {*} context
+   * @param {TagView} view
+   */
+  addTagView: ({ commit }, view) => {
+    commit('ADD_TAGVIEW', view);
+  },
+  /**
+   * @method delTagView
+   * @param {*} context
+   * @param {TagView} view
+   */
+  delTagView: ({ commit }, view) => {
+    commit('DEL_TAGVIEW', view);
   },
-  closeSideBar({ commit }, { withoutAnimation }) {
-    commit("CLOSE_SIDEBAR", withoutAnimation);
+  /**
+   * @method clearTagView
+   * @param {*} context
+   */
+  clearTagView: ({ commit }) => {
+    commit('CLEAR_TAGVIEW');
   },
-  toggleDevice({ commit }, device) {
-    commit("TOGGLE_DEVICE", device);
+  /**
+   * @method startLoading
+   * @param {*} context
+   */
+  startLoading: ({ commit }) => {
+    commit('SET_LOADING', true);
   },
-  setSize({ commit }, size) {
-    commit("SET_SIZE", size);
+  /**
+   * @method endLoading
+   * @param {*} context
+   */
+  endLoading: ({ commit }) => {
+    commit('SET_LOADING', false);
   }
 };
 
diff --git a/WebSite/src/store/modules/errorLog.js b/WebSite/src/store/modules/errorLog.js
deleted file mode 100644
index 72bdb4a..0000000
--- a/WebSite/src/store/modules/errorLog.js
+++ /dev/null
@@ -1,28 +0,0 @@
-const state = {
-  logs: []
-};
-
-const mutations = {
-  ADD_ERROR_LOG: (state, log) => {
-    state.logs.push(log);
-  },
-  CLEAR_ERROR_LOG: state => {
-    state.logs.splice(0);
-  }
-};
-
-const actions = {
-  addErrorLog({ commit }, log) {
-    commit("ADD_ERROR_LOG", log);
-  },
-  clearErrorLog({ commit }) {
-    commit("CLEAR_ERROR_LOG");
-  }
-};
-
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
-};
diff --git a/WebSite/src/store/modules/permission.js b/WebSite/src/store/modules/permission.js
deleted file mode 100644
index 025b302..0000000
--- a/WebSite/src/store/modules/permission.js
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-06-08 09:28:05
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-07-10 13:48:29
- */
-import { deepClone } from "@/utils/index.js";
-import router, {
-  constantRoutes,
-  asyncRoutes,
-  layoutRoutes,
-  notFoundRoutes
-} from "@/router";
-
-const state = {
-  routes: []
-};
-
-const mutations = {
-  SET_ROUTES: (state, routes) => {
-    state.routes = routes;
-  }
-};
-
-const component = () => import("@/views/outer");
-
-function eachMenu(menuList, cb) {
-  menuList.forEach(m => {
-    cb(m);
-    m.children && m.children.length > 0 && eachMenu(m.children, cb);
-  });
-}
-
-function getDynamicRoutes(menuList) {
-  const dynamicRoutes = [];
-  const layoutRoute = deepClone(layoutRoutes[0]);
-
-  eachMenu(menuList, m => {
-    if (m.routingUrl && !m.redirectUrl) {
-      const asyncRoute = asyncRoutes.find(r => r.path === m.routingUrl);
-      if (asyncRoute) {
-        const route = deepClone(asyncRoute);
-        // 设置meta
-        route.meta = {
-          icon: m.icon,
-          title: m.name
-        };
-        // 系统内部路由
-        layoutRoute.children.push(route);
-        // 供外部调用的路由
-        const routeForOuter = deepClone(route);
-        routeForOuter.path = `/${routeForOuter.path}`;
-        routeForOuter.name = `${routeForOuter.name}ForOuter`;
-        dynamicRoutes.push(routeForOuter);
-      }
-    }
-    if (m.routingUrl && m.redirectUrl) {
-      const routeToOuter = {
-        path: m.routingUrl,
-        component,
-        name: `${m.id}ToOuter`,
-        meta: {
-          icon: m.icon,
-          title: m.name
-        }
-      };
-      layoutRoute.children.push(routeToOuter);
-    }
-  });
-  dynamicRoutes.push(layoutRoute);
-  return dynamicRoutes;
-}
-
-const actions = {
-  /**
-   * 根据当前用户权限动态添加路由
-   */
-  generateRoutes({ commit }, menuList) {
-    //
-    const dynamicRoutes = getDynamicRoutes(menuList);
-    router.addRoutes(dynamicRoutes);
-    router.addRoutes(notFoundRoutes);
-    commit("SET_ROUTES", [
-      ...constantRoutes,
-      ...dynamicRoutes,
-      ...notFoundRoutes
-    ]);
-  }
-};
-
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
-};
diff --git a/WebSite/src/store/modules/settings.js b/WebSite/src/store/modules/settings.js
deleted file mode 100644
index c287845..0000000
--- a/WebSite/src/store/modules/settings.js
+++ /dev/null
@@ -1,33 +0,0 @@
-import variables from "@/styles/element-variables.scss";
-import defaultSettings from "@/settings";
-
-const { showSettings, tagsView, fixedHeader, sidebarLogo } = defaultSettings;
-
-const state = {
-  theme: variables.theme,
-  showSettings: showSettings,
-  tagsView: tagsView,
-  fixedHeader: fixedHeader,
-  sidebarLogo: sidebarLogo
-};
-
-const mutations = {
-  CHANGE_SETTING: (state, { key, value }) => {
-    if (state.hasOwnProperty(key)) {
-      state[key] = value;
-    }
-  }
-};
-
-const actions = {
-  changeSetting({ commit }, data) {
-    commit("CHANGE_SETTING", data);
-  }
-};
-
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
-};
diff --git a/WebSite/src/store/modules/tagsView.js b/WebSite/src/store/modules/tagsView.js
deleted file mode 100644
index 97bd2e7..0000000
--- a/WebSite/src/store/modules/tagsView.js
+++ /dev/null
@@ -1,160 +0,0 @@
-const state = {
-  visitedViews: [],
-  cachedViews: []
-};
-
-const mutations = {
-  ADD_VISITED_VIEW: (state, view) => {
-    if (state.visitedViews.some(v => v.path === view.path)) return;
-    state.visitedViews.push(
-      Object.assign({}, view, {
-        title: view.meta.title || "no-name"
-      })
-    );
-  },
-  ADD_CACHED_VIEW: (state, view) => {
-    if (state.cachedViews.includes(view.name)) return;
-    if (!view.meta.noCache) {
-      state.cachedViews.push(view.name);
-    }
-  },
-
-  DEL_VISITED_VIEW: (state, view) => {
-    for (const [i, v] of state.visitedViews.entries()) {
-      if (v.path === view.path) {
-        state.visitedViews.splice(i, 1);
-        break;
-      }
-    }
-  },
-  DEL_CACHED_VIEW: (state, view) => {
-    const index = state.cachedViews.indexOf(view.name);
-    index > -1 && state.cachedViews.splice(index, 1);
-  },
-
-  DEL_OTHERS_VISITED_VIEWS: (state, view) => {
-    state.visitedViews = state.visitedViews.filter(v => {
-      return v.meta.affix || v.path === view.path;
-    });
-  },
-  DEL_OTHERS_CACHED_VIEWS: (state, view) => {
-    const index = state.cachedViews.indexOf(view.name);
-    if (index > -1) {
-      state.cachedViews = state.cachedViews.slice(index, index + 1);
-    } else {
-      // if index = -1, there is no cached tags
-      state.cachedViews = [];
-    }
-  },
-
-  DEL_ALL_VISITED_VIEWS: state => {
-    // keep affix tags
-    const affixTags = state.visitedViews.filter(tag => tag.meta.affix);
-    state.visitedViews = affixTags;
-  },
-  DEL_ALL_CACHED_VIEWS: state => {
-    state.cachedViews = [];
-  },
-
-  UPDATE_VISITED_VIEW: (state, view) => {
-    for (let v of state.visitedViews) {
-      if (v.path === view.path) {
-        v = Object.assign(v, view);
-        break;
-      }
-    }
-  }
-};
-
-const actions = {
-  addView({ dispatch }, view) {
-    dispatch("addVisitedView", view);
-    dispatch("addCachedView", view);
-  },
-  addVisitedView({ commit }, view) {
-    commit("ADD_VISITED_VIEW", view);
-  },
-  addCachedView({ commit }, view) {
-    commit("ADD_CACHED_VIEW", view);
-  },
-
-  delView({ dispatch, state }, view) {
-    return new Promise(resolve => {
-      dispatch("delVisitedView", view);
-      dispatch("delCachedView", view);
-      resolve({
-        visitedViews: [...state.visitedViews],
-        cachedViews: [...state.cachedViews]
-      });
-    });
-  },
-  delVisitedView({ commit, state }, view) {
-    return new Promise(resolve => {
-      commit("DEL_VISITED_VIEW", view);
-      resolve([...state.visitedViews]);
-    });
-  },
-  delCachedView({ commit, state }, view) {
-    return new Promise(resolve => {
-      commit("DEL_CACHED_VIEW", view);
-      resolve([...state.cachedViews]);
-    });
-  },
-
-  delOthersViews({ dispatch, state }, view) {
-    return new Promise(resolve => {
-      dispatch("delOthersVisitedViews", view);
-      dispatch("delOthersCachedViews", view);
-      resolve({
-        visitedViews: [...state.visitedViews],
-        cachedViews: [...state.cachedViews]
-      });
-    });
-  },
-  delOthersVisitedViews({ commit, state }, view) {
-    return new Promise(resolve => {
-      commit("DEL_OTHERS_VISITED_VIEWS", view);
-      resolve([...state.visitedViews]);
-    });
-  },
-  delOthersCachedViews({ commit, state }, view) {
-    return new Promise(resolve => {
-      commit("DEL_OTHERS_CACHED_VIEWS", view);
-      resolve([...state.cachedViews]);
-    });
-  },
-
-  delAllViews({ dispatch, state }, view) {
-    return new Promise(resolve => {
-      dispatch("delAllVisitedViews", view);
-      dispatch("delAllCachedViews", view);
-      resolve({
-        visitedViews: [...state.visitedViews],
-        cachedViews: [...state.cachedViews]
-      });
-    });
-  },
-  delAllVisitedViews({ commit, state }) {
-    return new Promise(resolve => {
-      commit("DEL_ALL_VISITED_VIEWS");
-      resolve([...state.visitedViews]);
-    });
-  },
-  delAllCachedViews({ commit, state }) {
-    return new Promise(resolve => {
-      commit("DEL_ALL_CACHED_VIEWS");
-      resolve([...state.cachedViews]);
-    });
-  },
-
-  updateVisitedView({ commit }, view) {
-    commit("UPDATE_VISITED_VIEW", view);
-  }
-};
-
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
-};
diff --git a/WebSite/src/store/modules/user.js b/WebSite/src/store/modules/user.js
deleted file mode 100644
index 0fcbaa2..0000000
--- a/WebSite/src/store/modules/user.js
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-03-13 10:03:58
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-08-10 13:17:16
- */
-import { getToken, setToken, removeToken } from "@/utils/auth";
-import router, { resetRouter } from "@/router";
-import Account from "@/service/modules/account";
-import User from "@/service/modules/user";
-import { Message } from "element-ui";
-import { getConfig } from "@/utils/config";
-
-const state = {
-  token: getToken(),
-  name: "",
-  avatar: "",
-  introduction: "",
-  roles: [],
-  menuTree: [],
-  user: null,
-  accountId: "",
-  userId: ""
-};
-
-const mutations = {
-  SET_TOKEN: (state, token) => {
-    state.token = token;
-  },
-  SET_INTRODUCTION: (state, introduction) => {
-    state.introduction = introduction;
-  },
-  SET_NAME: (state, name) => {
-    state.name = name;
-  },
-  SET_AVATAR: (state, avatar) => {
-    state.avatar = avatar;
-  },
-  SET_ROLES: (state, roles) => {
-    state.roles = roles;
-  },
-  SET_MENUTREE: (state, menuTree) => {
-    state.menuTree = menuTree;
-  },
-  SET_USER: (state, user) => {
-    state.user = user;
-  },
-  SET_ACCOUNTID: (state, accountId) => {
-    state.accountId = accountId;
-  },
-  SET_USERID: (state, userId) => {
-    state.userId = userId;
-  }
-};
-
-const actions = {
-  async login({ commit }, loginInfo) {
-    loginInfo.rememberMe = true;
-    const { recognizeId } = await getConfig();
-    if (!recognizeId) {
-      Message.error("请先配置应用识别id");
-      return Promise.reject();
-    }
-    const resLogin = await Account.login({ recognizeId, ...loginInfo });
-    const account = resLogin.data[0];
-    const { id, users } = resLogin.data[0];
-    if (!users || users.length === 0) {
-      Message.error("当前登录账号无可选用户");
-      return Promise.reject();
-    }
-    commit("SET_ACCOUNTID", id);
-    localStorage.setItem("accountId", id);
-    return account;
-  },
-
-  async setUser({ commit }, id) {
-    await User.setCurrent({ id });
-    commit("SET_USERID", id);
-    commit("SET_TOKEN", id);
-    setToken(id);
-  },
-
-  async getInfo({ commit, dispatch }) {
-    const accountId = localStorage.getItem("accountId");
-    commit("SET_ACCOUNTID", accountId);
-
-    const res = await User.getCurrent();
-    const { id, name } = res.data[0];
-    const menuTree = res.data[0].menuList;
-    const roles = ["admin"];
-    const avatar =
-      "https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif";
-    const introduction = "";
-
-    const data = { roles, menuTree, id, name, avatar, introduction };
-
-    commit("SET_ROLES", roles);
-    commit("SET_MENUTREE", menuTree);
-    commit("SET_NAME", name);
-    commit("SET_AVATAR", avatar);
-    commit("SET_INTRODUCTION", introduction);
-    commit("SET_USER", res.data[0]);
-    commit("SET_USERID", id);
-
-    dispatch("permission/generateRoutes", menuTree, { root: true });
-
-    return data;
-  },
-
-  // user logout
-  async logout({ dispatch }) {
-    await dispatch("resetCache");
-    resetRouter();
-
-    // reset visited views and cached views
-    // to fixed https://github.com/PanJiaChen/vue-element-admin/issues/2485
-    dispatch("tagsView/delAllViews", null, { root: true });
-  },
-
-  // resst all cache
-  async resetCache({ commit }) {
-    commit("SET_ACCOUNTID", null);
-    commit("SET_TOKEN", null);
-    commit("SET_ROLES", null);
-    commit("SET_MENUTREE", null);
-    commit("SET_NAME", null);
-    commit("SET_AVATAR", null);
-    commit("SET_INTRODUCTION", null);
-    commit("SET_USER", null);
-    commit("SET_USERID", null);
-    localStorage.clear();
-    removeToken();
-  }
-};
-
-export default {
-  namespaced: true,
-  state,
-  mutations,
-  actions
-};
diff --git a/WebSite/src/styles/element-ui.scss b/WebSite/src/styles/element-ui.scss
index 955d3ca..e631084 100644
--- a/WebSite/src/styles/element-ui.scss
+++ b/WebSite/src/styles/element-ui.scss
@@ -6,7 +6,7 @@
 }
 
 .el-upload {
-  input[type="file"] {
+  input[type='file'] {
     display: none !important;
   }
 }
@@ -31,7 +31,7 @@
 .fixed-width {
   .el-button--mini {
     padding: 7px 10px;
-    width: 60px;
+    min-width: 60px;
   }
 }
 
@@ -69,7 +69,7 @@
 // dropdown
 .el-dropdown-menu {
   a {
-    display: block
+    display: block;
   }
 }
 
@@ -82,3 +82,23 @@
 .el-range-separator {
   box-sizing: content-box;
 }
+
+// notification
+.el-notification {
+  background-color: rgba(0, 0, 0, 0.6) !important;
+  border: 0 !important;
+
+  .el-notification__title {
+    color: #fff !important;
+  }
+
+  .el-notification__content {
+    color: #eee !important;
+  }
+
+  .el-notification__closeBtn {
+    &:hover {
+      color: #ddd !important;
+    }
+  }
+}
diff --git a/WebSite/src/styles/element-variables.scss b/WebSite/src/styles/element-variables.scss
index 30a0e6b..5bdc4da 100644
--- a/WebSite/src/styles/element-variables.scss
+++ b/WebSite/src/styles/element-variables.scss
@@ -6,7 +6,7 @@
 /* theme color */
 $--color-primary: #1890ff;
 $--color-success: #13ce66;
-$--color-warning: #FFBA00;
+$--color-warning: #ffba00;
 $--color-danger: #ff4949;
 // $--color-info: #1E1E1E;
 
@@ -17,10 +17,10 @@ $--button-font-weight: 400;
 $--border-color-light: #dfe4ed;
 $--border-color-lighter: #e6ebf5;
 
-$--table-border:1px solid#dfe6ec;
+$--table-border: 1px solid #dfe6ec;
 
 /* icon font path, required */
-$--font-path: '~element-ui/lib/theme-chalk/fonts';
+$--font-path: "~element-ui/lib/theme-chalk/fonts";
 
 @import "~element-ui/packages/theme-chalk/src/index";
 
diff --git a/WebSite/src/styles/index.scss b/WebSite/src/styles/index.scss
index 96095ef..b7327d5 100644
--- a/WebSite/src/styles/index.scss
+++ b/WebSite/src/styles/index.scss
@@ -4,8 +4,10 @@
 @import './element-ui.scss';
 @import './sidebar.scss';
 @import './btn.scss';
+@import './mixin-theme.scss';
 
 body {
+  overflow: visible !important;
   height: 100%;
   -moz-osx-font-smoothing: grayscale;
   -webkit-font-smoothing: antialiased;
@@ -22,7 +24,7 @@ html {
   box-sizing: border-box;
 }
 
-#app {
+#app,#app-inner {
   height: 100%;
 }
 
diff --git a/WebSite/src/styles/reset.scss b/WebSite/src/styles/reset.scss
deleted file mode 100644
index b796962..0000000
--- a/WebSite/src/styles/reset.scss
+++ /dev/null
@@ -1,67 +0,0 @@
-.mtNone {
-  .el-card__body {
-    padding-top: 0;
-  }
-}
-.tright {
-  text-align: right;
-}
-.filter-tree {
-  .custom-tree-node {
-    flex: 1;
-    display: flex;
-    align-items: center;
-    justify-content: space-between;
-    font-size: 14px;
-    padding-right: 8px;
-  }
-}
-.mt20 {
-  margin-top: 20px;
-}
-.btop {
-  border-top: 3px solid #3c8dbc;
-}
-.pd10 {
-  .el-card__body {
-    padding: 10px;
-  }
-}
-.pnone {
-  .el-card__body {
-    padding-top: 0;
-  }
-  .el-collapse-item__wrap {
-    border: none;
-  }
-}
-
-.overAuto {
-  overflow: inherit;
-}
-/* 滚动条美化 */
-::-webkit-scrollbar {
-  width: 5px;
-  height: 5px;
-}
-/*外层轨道。可以用display:none让其不显示,也可以添加背景图片,颜色改变显示效果*/
-::-webkit-scrollbar-track {
-  width: 6px;
-  background-color: #fff;
-  -webkit-border-radius: 2em;
-  -moz-border-radius: 2em;
-  border-radius: 2em;
-}
-/*滚动条的设置*/
-::-webkit-scrollbar-thumb {
-  background-color: #409eff;
-  background-clip: padding-box;
-  min-height: 28px;
-  -webkit-border-radius: 2em;
-  -moz-border-radius: 2em;
-  border-radius: 2em;
-}
-/*滚动条移上去的背景*/
-::-webkit-scrollbar-thumb:hover {
-  background-color: #409eff;
-}
diff --git a/WebSite/src/styles/sidebar.scss b/WebSite/src/styles/sidebar.scss
index 3dad4c3..858fadb 100644
--- a/WebSite/src/styles/sidebar.scss
+++ b/WebSite/src/styles/sidebar.scss
@@ -8,7 +8,8 @@
   }
 
   .sidebar-container {
-    transition: width 0.28s;
+    transition-property: width,background-color;
+    transition-duration: 0.28s;
     width: $sideBarWidth !important;
     background-color: $menuBg;
     height: 100%;
@@ -27,6 +28,17 @@
 
     .scrollbar-wrapper {
       overflow-x: hidden !important;
+
+      // fixd on 1.0.2-beta.31
+      // scrollbar-width: none will be set on firefox, maybe a bug
+      // this may cause the display problem on sidebar menu
+      // set auto to fix
+      // scrollbar-width: auto !important;
+
+      // fixd on 1.0.2-beta.31
+      // margin will lose on m1 mac, maybe a bug
+      // force set margin
+      // margin: 0 -17px -17px 0 !important;
     }
 
     .el-scrollbar__bar.is-vertical {
@@ -57,6 +69,11 @@
       margin-right: 16px;
     }
 
+    .sub-el-icon {
+      margin-right: 12px;
+      margin-left: -2px;
+    }
+
     .el-menu {
       border: none;
       height: 100%;
@@ -64,25 +81,34 @@
     }
 
     // menu hover
-    .submenu-title-noDropdown,
-    .el-submenu__title {
-      &:hover {
-        background-color: $menuHover !important;
-      }
-    }
+    // .submenu-title-noDropdown,
+    // .el-submenu__title {
+    //   &:hover {
+    //     background-color: $menuHover !important;
+    //   }
+    // }
 
-    .is-active>.el-submenu__title {
-      color: $subMenuActiveText !important;
-    }
+    // .is-active>.el-submenu__title {
+    //   color: $subMenuActiveText !important;
+    // }
 
     & .nest-menu .el-submenu>.el-submenu__title,
     & .el-submenu .el-menu-item {
+      
       min-width: $sideBarWidth !important;
-      background-color: $subMenuBg !important;
+      // background-color: $subMenuBg !important;
 
-      &:hover {
-        background-color: $subMenuHover !important;
-      }
+      // &:hover {
+      //   background-color: $subMenuHover !important;
+      // }
+    }
+    .el-menu-item{
+      border-left: 0 solid rgb(80, 138, 255);
+      transition: all 0.18s;
+    }
+    .el-menu-item.is-active {
+      
+      border-left: 5px solid rgb(80, 138, 255);
     }
   }
 
@@ -105,6 +131,10 @@
         .svg-icon {
           margin-left: 20px;
         }
+
+        .sub-el-icon {
+          margin-left: 19px;
+        }
       }
     }
 
@@ -118,6 +148,10 @@
           margin-left: 20px;
         }
 
+        .sub-el-icon {
+          margin-left: 19px;
+        }
+
         .el-submenu__icon-arrow {
           display: none;
         }
@@ -178,16 +212,20 @@
     .svg-icon {
       margin-right: 16px;
     }
-  }
-
-  .nest-menu .el-submenu>.el-submenu__title,
-  .el-menu-item {
-    &:hover {
-      // you can use $subMenuHover
-      background-color: $menuHover !important;
+    .sub-el-icon {
+      margin-right: 12px;
+      margin-left: -2px;
     }
   }
 
+  // .nest-menu .el-submenu>.el-submenu__title,
+  // .el-menu-item {
+  //   &:hover {
+  //     // you can use $subMenuHover
+  //     background-color: $menuHover !important;
+  //   }
+  // }
+
   // the scroll bar appears when the subMenu is too long
   >.el-menu--popup {
     max-height: 100vh;
diff --git a/WebSite/src/styles/transition.scss b/WebSite/src/styles/transition.scss
index 4cb27cc..50dab1a 100644
--- a/WebSite/src/styles/transition.scss
+++ b/WebSite/src/styles/transition.scss
@@ -1,46 +1,101 @@
 // global transition css
+// !! there are only six classes can be used in Vue.js 3.x
+// v-enter-active,v-enter-from,v-enter-to
+// v-leave-active,v-leave-from,v-leave-to
+// see detail: https://v3.vuejs.org/guide/transitions-enterleave.html#transition-classes
 
 /* fade */
-.fade-enter-active,
-.fade-leave-active {
+.fade-leave-active,
+.fade-enter-active {
   transition: opacity 0.28s;
 }
 
-.fade-enter,
-.fade-leave-active {
+.fade-enter-from,
+.fade-leave-to {
   opacity: 0;
 }
 
 /* fade-transform */
-.fade-transform-leave-active,
-.fade-transform-enter-active {
-  transition: all .5s;
+.fade-transform-s-leave-active,
+.fade-transform-s-enter-active {
+  transition: all 0.18s;
 }
 
-.fade-transform-enter {
+.fade-transform-s-enter-from,
+.fade-transform-s-leave-to {
   opacity: 0;
-  transform: translateX(-30px);
+  transform: translateX(20px);
+}
+
+.fade-transform-leave-active,
+.fade-transform-enter-active {
+  transition: all 0.5s;
 }
 
+.fade-transform-enter-from,
 .fade-transform-leave-to {
   opacity: 0;
   transform: translateX(30px);
 }
 
+.fade-transform-bottom-s-leave-active,
+.fade-transform-bottom-s-enter-active {
+  transition: all 0.18s;
+}
+
+.fade-transform-bottom-s-enter-from,
+.fade-transform-bottom-s-leave-to {
+  opacity: 0;
+  transform: translateY(20px);
+}
+
+.fade-transform-bottom-leave-active,
+.fade-transform-bottom-enter-active {
+  transition: all 0.5s;
+}
+
+.fade-transform-bottom-enter-from,
+.fade-transform-bottom-leave-to {
+  opacity: 0;
+  transform: translateY(30px);
+}
+
+.fade-transform-top-s-leave-active,
+.fade-transform-top-s-enter-active {
+  transition: all 0.18s;
+}
+
+.fade-transform-top-s-enter-from,
+.fade-transform-top-s-leave-to {
+  opacity: 0;
+  transform: translateY(-20px);
+}
+
+.fade-transform-top-leave-active,
+.fade-transform-top-enter-active {
+  transition: all 0.5s;
+}
+
+.fade-transform-top-enter-from,
+.fade-transform-top-leave-to {
+  opacity: 0;
+  transform: translateY(-30px);
+}
+
 /* breadcrumb transition */
 .breadcrumb-enter-active,
 .breadcrumb-leave-active {
-  transition: all .5s;
+  transition: all 0.5s;
 }
 
-.breadcrumb-enter,
-.breadcrumb-leave-active {
+.breadcrumb-enter-from,
+.breadcrumb-leave-to {
   opacity: 0;
   transform: translateX(20px);
 }
 
 .breadcrumb-move {
-  transition: all .5s;
+  transition: all 0.5s;
 }
 
 .breadcrumb-leave-active {
diff --git a/WebSite/src/styles/variables.scss b/WebSite/src/styles/variables.scss
index a19c27c..a2f3b19 100644
--- a/WebSite/src/styles/variables.scss
+++ b/WebSite/src/styles/variables.scss
@@ -1,17 +1,17 @@
 // base color
-$blue:#324157;
-$light-blue:#3A71A8;
-$red:#C03639;
-$pink: #E65D6E;
-$green: #30B08F;
-$tiffany: #4AB7BD;
-$yellow:#FEC171;
-$panGreen: #30B08F;
+$blue: #324157;
+$light-blue: #3a71a8;
+$red: #c03639;
+$pink: #e65d6e;
+$green: #30b08f;
+$tiffany: #4ab7bd;
+$yellow: #fec171;
+$panGreen: #30b08f;
 
 // sidebar
-$menuText:#bfcbd9;
-$menuActiveText:#409EFF;
-$subMenuActiveText:#f4f4f5; // https://github.com/ElemeFE/element/issues/12951
+$menuText: #bfcbd9;
+$menuActiveText: #409eff;
+$subMenuActiveText: #f4f4f5; // https://github.com/ElemeFE/element/issues/12951
 
 $menuBg:#304156;
 $menuHover:#263445;
diff --git a/WebSite/src/utils/auth.js b/WebSite/src/utils/auth.js
index ba92eea..de4743b 100644
--- a/WebSite/src/utils/auth.js
+++ b/WebSite/src/utils/auth.js
@@ -1,13 +1,6 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-03-13 10:03:58
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-04-21 09:25:25
- */
 import Cookies from "js-cookie";
 
-const TokenKey = "Admin-Token";
+const TokenKey = "SFP_Verify_Cookie";
 
 export function getToken() {
   return Cookies.get(TokenKey);
diff --git a/WebSite/src/utils/clipboard.js b/WebSite/src/utils/clipboard.js
index a44307c..cc22b5c 100644
--- a/WebSite/src/utils/clipboard.js
+++ b/WebSite/src/utils/clipboard.js
@@ -1,18 +1,25 @@
-import Vue from "vue";
-import Clipboard from "clipboard";
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2020-12-18 10:12:27
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2020-12-18 10:12:34
+ */
+import Vue from 'vue';
+import Clipboard from 'clipboard';
 
 function clipboardSuccess() {
   Vue.prototype.$message({
-    message: "Copy successfully",
-    type: "success",
+    message: 'Copy successfully',
+    type: 'success',
     duration: 1500
   });
 }
 
 function clipboardError() {
   Vue.prototype.$message({
-    message: "Copy failed",
-    type: "error"
+    message: 'Copy failed',
+    type: 'error'
   });
 }
 
@@ -20,11 +27,11 @@ export default function handleClipboard(text, event) {
   const clipboard = new Clipboard(event.target, {
     text: () => text
   });
-  clipboard.on("success", () => {
+  clipboard.on('success', () => {
     clipboardSuccess();
     clipboard.destroy();
   });
-  clipboard.on("error", () => {
+  clipboard.on('error', () => {
     clipboardError();
     clipboard.destroy();
   });
diff --git a/WebSite/src/utils/enum.js b/WebSite/src/utils/enum.js
index 529a002..6eee786 100644
--- a/WebSite/src/utils/enum.js
+++ b/WebSite/src/utils/enum.js
@@ -1,19 +1,35 @@
-/*
- * @Description:
- * @Autor: dong jun hua
- * @Date: 2020-06-17 15:42:24
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-06-17 16:12:16
+//使用方法
+/**
+ * 获取枚举值:STATUSMAP.SH
+ * 获取枚举描述:STATUSMAP.getDesc('SH')
+ * 通过枚举值获取描述:STATUSMAP.getDescFromValue('TG')
  */
-export const EnableInfo = {
-  YES: "禁用",
-  NO: "启用"
-};
+let EnumYongChe = createEnum({
+  自助: [0, '自助'],
+  æ»´æ»´: [1, 'æ»´æ»´'],
+  曹操: [2, '曹操'],
+  美团: [3, '美团'],
+  享道出行: [4, '享道出行'],
+  携程: [5, '携程'],
+  订单授权: [6, '订单授权']
+});
 
-export const UserType = {
-  ADMIN: "管理员",
-  TEACHER: "教工",
-  STUDENT: "学生",
-  EXTERNAL: "外聘",
-  OTHER: "å…¶ä»–"
-};
+function createEnum(definition) {
+  const valueMap = {};
+  const descMap = {};
+  for (const key of Object.keys(definition)) {
+    const [value, desc] = definition[key];
+    valueMap[key] = value;
+    descMap[value] = desc;
+  }
+  return {
+    ...valueMap,
+    getDesc(key) {
+      return (definition[key] && definition[key][1]) || 'æ— ';
+    },
+    getDescFromValue(value) {
+      return descMap[value] || 'æ— ';
+    }
+  };
+}
+export default EnumYongChe;
diff --git a/WebSite/src/utils/index.js b/WebSite/src/utils/index.js
index 27dcdf3..12d13cc 100644
--- a/WebSite/src/utils/index.js
+++ b/WebSite/src/utils/index.js
@@ -1,362 +1,388 @@
 /**
- * Created by PanJiaChen on 16/11/18.
+ * 判断空对象,数组,字符串,undefined,null
+ * @param {*} obj
  */
-
-/**
- * Parse the time to string
- * @param {(Object|string|number)} time
- * @param {string} cFormat
- * @returns {string | null}
- */
-export function parseTime(time, cFormat) {
-  if (arguments.length === 0) {
-    return null;
+export function isEmpty(obj) {
+  if (
+    typeof obj == 'undefined' ||
+    (!obj && typeof obj != 'undefined' && obj != 0) ||
+    obj == null
+  ) {
+    return true;
   }
-  const format = cFormat || "{y}-{m}-{d} {h}:{i}:{s}";
-  let date;
-  if (typeof time === "object") {
-    date = time;
-  } else {
-    if (typeof time === "string" && /^[0-9]+$/.test(time)) {
-      time = parseInt(time);
-    }
-    if (typeof time === "number" && time.toString().length === 10) {
-      time = time * 1000;
+  for (let i in obj) {
+    if (Object.prototype.hasOwnProperty.call(obj, i)) {
+      return false;
     }
-    date = new Date(time);
-  }
-  const formatObj = {
-    y: date.getFullYear(),
-    m: date.getMonth() + 1,
-    d: date.getDate(),
-    h: date.getHours(),
-    i: date.getMinutes(),
-    s: date.getSeconds(),
-    a: date.getDay()
-  };
-  const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
-    const value = formatObj[key];
-    // Note: getDay() returns 0 on Sunday
-    if (key === "a") {
-      return ["日", "一", "二", "三", "四", "五", "六"][value];
-    }
-    return value.toString().padStart(2, "0");
-  });
-  return time_str;
-}
-
-/**
- * @param {number} time
- * @param {string} option
- * @returns {string}
- */
-export function formatTime(time, option) {
-  if (("" + time).length === 10) {
-    time = parseInt(time) * 1000;
-  } else {
-    time = +time;
   }
-  const d = new Date(time);
-  const now = Date.now();
-
-  const diff = (now - d) / 1000;
-
-  if (diff < 30) {
-    return "刚刚";
-  } else if (diff < 3600) {
-    // less 1 hour
-    return Math.ceil(diff / 60) + "分钟前";
-  } else if (diff < 3600 * 24) {
-    return Math.ceil(diff / 3600) + "小时前";
-  } else if (diff < 3600 * 24 * 2) {
-    return "1天前";
-  }
-  if (option) {
-    return parseTime(time, option);
-  } else {
-    return (
-      d.getMonth() +
-      1 +
-      "月" +
-      d.getDate() +
-      "æ—¥" +
-      d.getHours() +
-      "æ—¶" +
-      d.getMinutes() +
-      "分"
-    );
+  if (typeof obj === 'number') {
+    return false;
   }
+  return true;
 }
 
-/**
- * @param {string} url
- * @returns {Object}
- */
-export function getQueryObject(url) {
-  url = url == null ? window.location.href : url;
-  const search = url.substring(url.lastIndexOf("?") + 1);
-  const obj = {};
-  const reg = /([^?&=]+)=([^?&=]*)/g;
-  search.replace(reg, (rs, $1, $2) => {
-    const name = decodeURIComponent($1);
-    let val = decodeURIComponent($2);
-    val = String(val);
-    obj[name] = val;
-    return rs;
-  });
-  return obj;
+export function isNotEmpty(obj) {
+  return !isEmpty(obj);
 }
 
 /**
- * @param {string} input value
- * @returns {number} output value
+ * @name {防抖}
  */
-export function byteLength(str) {
-  // returns the byte length of an utf8 string
-  let s = str.length;
-  for (var i = str.length - 1; i >= 0; i--) {
-    const code = str.charCodeAt(i);
-    if (code > 0x7f && code <= 0x7ff) s++;
-    else if (code > 0x7ff && code <= 0xffff) s += 2;
-    if (code >= 0xdc00 && code <= 0xdfff) i--;
-  }
-  return s;
-}
-
-/**
- * @param {Array} actual
- * @returns {Array}
- */
-export function cleanArray(actual) {
-  const newArray = [];
-  for (let i = 0; i < actual.length; i++) {
-    if (actual[i]) {
-      newArray.push(actual[i]);
+export function debounce(fn, delay) {
+  let timer = null;
+  return function () {
+    if (timer) {
+      clearTimeout(timer);
     }
-  }
-  return newArray;
+    timer = setTimeout(() => {
+      fn.call(this, arguments);
+      timer = null;
+    }, delay);
+  };
 }
 
 /**
- * @param {Object} json
- * @returns {Array}
+ * @name {节流}
+ * @param {*} fn
+ * @param {*} delay
  */
-export function param(json) {
-  if (!json) return "";
-  return cleanArray(
-    Object.keys(json).map(key => {
-      if (json[key] === undefined) return "";
-      return encodeURIComponent(key) + "=" + encodeURIComponent(json[key]);
-    })
-  ).join("&");
+export function throttle(fn, delay) {
+  let timer = null;
+  return function () {
+    if (!timer) {
+      timer = setTimeout(() => {
+        fn.call(this, arguments);
+        timer = null;
+      }, delay);
+    }
+  };
 }
 
 /**
- * @param {string} url
- * @returns {Object}
+ * 获取所有url参数
  */
-export function param2Obj(url) {
-  const search = url.split("?")[1];
-  if (!search) {
-    return {};
+export function getQueryStringArgs() {
+  // 取得没有开头问号的查询字符串
+  let qs = location.search.length > 0 ? location.search.substring(1) : '',
+    // 保存数据的对象
+    args = {};
+  // 把每个参数添加到 args 对象
+  for (let item of qs.split('&').map((kv) => kv.split('='))) {
+    let name = decodeURIComponent(item[0]),
+      value = decodeURIComponent(item[1]);
+    if (name.length) {
+      args[name] = value;
+    }
   }
-  return JSON.parse(
-    '{"' +
-      decodeURIComponent(search)
-        .replace(/"/g, '\\"')
-        .replace(/&/g, '","')
-        .replace(/=/g, '":"')
-        .replace(/\+/g, " ") +
-      '"}'
-  );
-}
-
-/**
- * @param {string} val
- * @returns {string}
- */
-export function html2Text(val) {
-  const div = document.createElement("div");
-  div.innerHTML = val;
-  return div.textContent || div.innerText;
+  return args;
 }
 
 /**
- * Merges two objects, giving the last one precedence
- * @param {Object} target
- * @param {(Object|Array)} source
- * @returns {Object}
+ * @name {拼接url参数}
  */
-export function objectMerge(target, source) {
-  if (typeof target !== "object") {
-    target = {};
-  }
-  if (Array.isArray(source)) {
-    return source.slice();
-  }
-  Object.keys(source).forEach(property => {
-    const sourceProperty = source[property];
-    if (typeof sourceProperty === "object") {
-      target[property] = objectMerge(target[property], sourceProperty);
+export function urlParamCombine(obj) {
+  let param = '?';
+  for (let key in obj) {
+    obj[key] = obj[key] == null ? '' : obj[key];
+    if (Array.isArray(obj[key]) || typeof obj[key] == 'object') {
+      for (let k in obj[key]) {
+        param += k + '=' + obj[key][k] + '&';
+      }
     } else {
-      target[property] = sourceProperty;
+      param += key + '=' + obj[key] + '&';
     }
-  });
-  return target;
+  }
+  return param.substr(0, param.length - 1);
 }
 
 /**
- * @param {HTMLElement} element
- * @param {string} className
+ * 格式化时间
  */
-export function toggleClass(element, className) {
-  if (!element || !className) {
-    return;
-  }
-  let classString = element.className;
-  const nameIndex = classString.indexOf(className);
-  if (nameIndex === -1) {
-    classString += "" + className;
+export function formatTime(
+  dateOrTimestamp,
+  format = 'yyyy-MM-dd HH:mm:ss.SSS',
+  isMomentAgo = false,
+  isHideThisYear = false
+) {
+  let date;
+  if (dateOrTimestamp instanceof Date) {
+    date = dateOrTimestamp;
   } else {
-    classString =
-      classString.substr(0, nameIndex) +
-      classString.substr(nameIndex + className.length);
+    if (/^-?\d+$/.test(dateOrTimestamp)) {
+      date = new Date(parseInt(dateOrTimestamp));
+    } else if (new Date(dateOrTimestamp).toString() != 'Invalid Date') {
+      date = new Date(dateOrTimestamp);
+    } else {
+      console.error('时间格式化失败,参数dateOrStamp错误:', dateOrTimestamp);
+      return '时间错误';
+    }
   }
-  element.className = classString;
-}
 
-/**
- * @param {string} type
- * @returns {Date}
- */
-export function getTime(type) {
-  if (type === "start") {
-    return new Date().getTime() - 3600 * 1000 * 24 * 90;
-  } else {
-    return new Date(new Date().toDateString());
+  if (isHideThisYear && new Date().getFullYear() == date.getFullYear()) {
+    let matchRes = format.match(/M.*/);
+    if (matchRes && matchRes.length) {
+      format = matchRes[0];
+    }
   }
-}
 
-/**
- * @param {Function} func
- * @param {number} wait
- * @param {boolean} immediate
- * @return {*}
- */
-export function debounce(func, wait, immediate) {
-  let timeout, args, context, timestamp, result;
+  let dict = {
+    yyyy: date.getFullYear(),
+    M: date.getMonth() + 1,
+    d: date.getDate(),
+    H: date.getHours(),
+    m: date.getMinutes(),
+    s: date.getSeconds(),
+    S: ('' + (date.getMilliseconds() + 1000)).substring(1),
+    MM: ('' + (date.getMonth() + 101)).substring(1),
+    dd: ('' + (date.getDate() + 100)).substring(1),
+    HH: ('' + (date.getHours() + 100)).substring(1),
+    mm: ('' + (date.getMinutes() + 100)).substring(1),
+    ss: ('' + (date.getSeconds() + 100)).substring(1)
+  };
 
-  const later = function() {
-    // 据上一次触发时间间隔
-    const last = +new Date() - timestamp;
+  if (isMomentAgo) {
+    if (this.isToday(date)) {
+      let diffMin = parseInt((+new Date() - +date) / 1000 / 60); //时间差(单位分钟)
+      let diffHour = parseInt(diffMin / 60);
+      if (diffMin < 1) {
+        return '刚刚';
+      } else if (diffMin < 60) {
+        return diffMin + '分钟前';
+      } else if (diffHour < 6) {
+        return diffHour + '小时前';
+      } else {
+        if (format.indexOf('H') > -1) {
+          format = format.replace(/[\s\S].*?(?=H)/g, '');
+        } else if (format.indexOf('m') > -1) {
+          format = format.replace(/[\s\S].*?(?=m)/g, '');
+        } else if (format.indexOf('s') > -1) {
+          format = format.replace(/[\s\S].*?(?=s)/g, '');
+        } else if (format.indexOf('S') > -1) {
+          format = format.replace(/[\s\S].*?(?=S)/g, '');
+        }
 
-    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
-    if (last < wait && last > 0) {
-      timeout = setTimeout(later, wait - last);
-    } else {
-      timeout = null;
-      // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
-      if (!immediate) {
-        result = func.apply(context, args);
-        if (!timeout) context = args = null;
+        if (
+          format.indexOf('H') < 0 &&
+          format.indexOf('s') < 0 &&
+          format.indexOf('m') < 0 &&
+          format.indexOf('S') < 0
+        ) {
+          format = ''; //当Hms都不存在的时候,移除 MM-dd的格式化
+        }
+
+        let result =
+          '今天 ' +
+          format.replace(/(H+|s+|m+|S)/g, function (a) {
+            return dict[a];
+          });
+        return result.trim();
+      }
+    } else if (this.isYesterday(date)) {
+      if (format.indexOf('H') > -1) {
+        format = format.replace(/[\s\S].*?(?=H)/g, '');
+      } else if (format.indexOf('m') > -1) {
+        format = format.replace(/[\s\S].*?(?=m)/g, '');
+      } else if (format.indexOf('s') > -1) {
+        format = format.replace(/[\s\S].*?(?=s)/g, '');
+      } else if (format.indexOf('S') > -1) {
+        format = format.replace(/[\s\S].*?(?=S)/g, '');
       }
-    }
-  };
 
-  return function(...args) {
-    context = this;
-    timestamp = +new Date();
-    const callNow = immediate && !timeout;
-    // 如果延时不存在,重新设定延时
-    if (!timeout) timeout = setTimeout(later, wait);
-    if (callNow) {
-      result = func.apply(context, args);
-      context = args = null;
-    }
+      if (
+        format.indexOf('H') < 0 &&
+        format.indexOf('s') < 0 &&
+        format.indexOf('m') < 0 &&
+        format.indexOf('S') < 0
+      ) {
+        format = ''; //当Hms都不存在的时候,移除 MM-dd的格式化
+      }
 
-    return result;
-  };
-}
+      let result =
+        '昨天 ' +
+        format.replace(/(H+|s+|m+|S)/g, function (a) {
+          return dict[a];
+        });
 
-/**
- * This is just a simple version of deep copy
- * Has a lot of edge cases bug
- * If you want to use a perfect deep copy, use lodash's _.cloneDeep
- * @param {Object} source
- * @returns {Object}
- */
-export function deepClone(source) {
-  if (!source && typeof source !== "object") {
-    throw new Error("error arguments", "deepClone");
-  }
-  const targetObj = source.constructor === Array ? [] : {};
-  Object.keys(source).forEach(keys => {
-    if (source[keys] && typeof source[keys] === "object") {
-      targetObj[keys] = deepClone(source[keys]);
-    } else {
-      targetObj[keys] = source[keys];
+      return result.trim();
     }
+  }
+
+  return format.replace(/(y+|M+|d+|H+|s+|m+|S)/g, function (a) {
+    return dict[a];
   });
-  return targetObj;
 }
-// export function deepClone(p) {
-//   if (typeof p === "object" && p !== null) {
-//     if (Array.isArray(p)) {
-//       return p.map(item => deepClone(item));
-//     } else {
-//       const newObj = {};
-//       Object.keys(p).forEach(key => (newObj[key] = deepCopy(p[key])));
-//       return newObj;
-//     }
-//   } else {
-//     return p;
-//   }
-// }
 
-/**
- * @param {Array} arr
- * @returns {Array}
- */
-export function uniqueArr(arr) {
-  return Array.from(new Set(arr));
+export function moneyThousandsSep(number) {
+  number = (number + '').replace(/[^0-9+-Ee.]/g, '');
+  const s = number.split('.');
+  const re = /(-?\d+)(\d{3})/;
+  while (re.test(s[0])) {
+    s[0] = s[0].replace(re, `$1,$2`);
+  }
+  return s.join('.');
 }
 
 /**
- * @returns {string}
+ * money formatting
+ * @method: moneyFormatter
+ * @param {Number} number 要格式化的数字
+ * @param {Number} decimals 保留几位小数
+ * @param {String} thousandsSep 千分位符号
+ * @return {String}
  */
-export function createUniqueString() {
-  const timestamp = +new Date() + "";
-  const randomNum = parseInt((1 + Math.random()) * 65536) + "";
-  return (+(randomNum + timestamp)).toString(32);
+export function moneyFormat(number, decimals, thousandsSep = '') {
+  number = (number + '').replace(/[^0-9+-Ee.]/g, '');
+  const n = !isFinite(+number) ? 0 : +number,
+    prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
+    toFixedFix = function (n, prec) {
+      const k = Math.pow(10, prec);
+      return '' + Math.round(operate(n, k, '*')) / k;
+    };
+
+  const s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
+  const re = /(-?\d+)(\d{3})/;
+  while (re.test(s[0]) && thousandsSep) {
+    s[0] = s[0].replace(re, `$1${thousandsSep}$2`);
+  }
+
+  if ((s[1] || '').length < prec) {
+    s[1] = s[1] || '';
+    s[1] += new Array(prec - s[1].length + 1).join('0');
+  }
+  return s.join('.');
+}
+// 保留两位小数
+export function toThousands(num) {
+  num += '';
+  // eslint-disable-next-line no-useless-escape
+  // 清除字符串中的非数字非“.”字符
+  // eslint-disable-next-line no-useless-escape
+  num = num.replace(/[^0-9|\.]/g, '');
+  // 清除字符串开头的0
+  num = num.replace(/^0+/, '');
+  if (!/\./.test(num)) {
+    // 为整数字符串在末尾添加.00
+    num += '.00';
+  }
+  if (/^\./.test(num)) {
+    // 字符以.开头时,在开头添加0
+    num = '0' + num;
+  }
+  num += '00';
+  let numMatch = num.match(/\d+\.\d{2}/);
+  num = numMatch ? numMatch[0] : '0.00';
+  num = (num || 0).toString().replace(/^\./g, '');
+  // eslint-disable-next-line no-useless-escape
+  num = num.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');
+  let arr = num.split('.');
+  let num1 = (arr[0] || 0).toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,');
+  let resultNumStr = arr[1] == undefined ? num1 + '' : num1 + '.' + arr[1];
+  return resultNumStr;
+}
+// 将千分符格式的金额数字转化成普通格式的数字
+export function moneyToNumValue(val) {
+  val += '';
+  var num = val.trim();
+  var ss = num.toString();
+  if (ss.length == 0) {
+    return '0.00';
+  }
+  return ss.replace(/,/g, '');
+}
+function toIntObj(num) {
+  const rel = {};
+  const str = num < 0 ? -num + '' : num + '';
+  const pos = str.indexOf('.');
+  const len = pos > -1 ? str.slice(pos + 1).length : 0;
+  rel.num = parseFloat(num.toString().replace(/\./g, '')); //去掉小数点转为整数;
+  rel.len = len;
+  return rel;
 }
 
-/**
- * Check if an element has a class
- * @param {HTMLElement} elm
- * @param {string} cls
- * @returns {boolean}
- */
-export function hasClass(ele, cls) {
-  return !!ele.className.match(new RegExp("(\\s|^)" + cls + "(\\s|$)"));
+//计算过程
+export function operate(a, b, op) {
+  const d1 = toIntObj(a);
+  const d2 = toIntObj(b);
+  const maxlen = d1.len > d2.len ? d1.len : d2.len; //小数位的最大值
+  const max = Math.pow(10, maxlen);
+  const o1 = d1.len < maxlen ? d1.num * Math.pow(10, maxlen - d1.len) : d1.num; //如果小数位小于最大值,则补差
+  const o2 = d2.len < maxlen ? d2.num * Math.pow(10, maxlen - d2.len) : d2.num;
+  switch (op) {
+    case '+':
+      return (o1 + o2) / max;
+    case '-':
+      return (o1 - o2) / max;
+    case '*':
+      return (o1 * o2) / (max * max);
+    case '/':
+      return o1 / o2;
+  }
 }
 
-/**
- * Add class to element
- * @param {HTMLElement} elm
- * @param {string} cls
- */
-export function addClass(ele, cls) {
-  if (!hasClass(ele, cls)) ele.className += " " + cls;
+export function downloadBase64File(base64, name) {
+  const blob = base64ToBlob(base64);
+  downloadBlobFile(blob, name);
+}
+export function downloadBlobFile(blob, name) {
+  if ('msSaveOrOpenBlob' in navigator) {
+    window.navigator.msSaveOrOpenBlob(blob, name);
+    return;
+  }
+  const href = window.URL.createObjectURL(blob);
+  downUrlFile(href, name);
+  window.URL.revokeObjectURL(href); // 释放内存
+}
+export function downUrlFile(url, name) {
+  const eleLink = document.createElement('a');
+  eleLink.download = name;
+  eleLink.style.display = 'none';
+  eleLink.href = url;
+  document.body.appendChild(eleLink);
+  eleLink.click();
+  document.body.removeChild(eleLink);
 }
 
-/**
- * Remove class from element
- * @param {HTMLElement} elm
- * @param {string} cls
- */
-export function removeClass(ele, cls) {
-  if (hasClass(ele, cls)) {
-    const reg = new RegExp("(\\s|^)" + cls + "(\\s|$)");
-    ele.className = ele.className.replace(reg, " ");
+//文件类型转换
+export function fileToBase64(file) {
+  const reader = new FileReader();
+  reader.readAsDataURL(file);
+  return reader.result;
+}
+export function base64ToFile(base64, name) {
+  let arr = base64.split(','),
+    mime = arr[0].match(/:(.*?);/)[1],
+    bstr = atob(arr[1]),
+    n = bstr.length,
+    u8arr = new Uint8Array(n);
+  while (n--) {
+    u8arr[n] = bstr.charCodeAt(n);
   }
+  return new File([u8arr], name, { type: mime });
+}
+export function base64ToBlob(base64) {
+  const mimeString = base64.split(',')[0].split(':')[1].split(';')[0];
+  let binary = atob(base64.replace(/\s/g, ''));
+  let len = binary.length;
+  let buffer = new ArrayBuffer(len);
+  let view = new Uint8Array(buffer);
+  for (let i = 0; i < len; i++) {
+    view[i] = binary.charCodeAt(i);
+  }
+  return new Blob([view], { type: mimeString });
+}
+export function base64ToUrl(base64) {
+  const blob = base64ToBlob(base64);
+  return URL.createObjectURL(blob);
 }
+export default {
+  isEmpty,
+  isNotEmpty,
+  debounce,
+  throttle,
+  urlParamCombine,
+  formatTime,
+  moneyFormat,
+  downloadBase64File,
+  downUrlFile,
+  base64ToUrl
+};
diff --git a/WebSite/src/utils/loading.js b/WebSite/src/utils/loading.js
index e761c21..13f997e 100644
--- a/WebSite/src/utils/loading.js
+++ b/WebSite/src/utils/loading.js
@@ -6,7 +6,7 @@
  * @LastEditTime: 2020-06-18 13:01:12
  */
 
-import { Loading } from "element-ui";
+import { Loading } from "element-plus";
 let loading;
 let loadCount = 0;
 export function startLoading() {
diff --git a/WebSite/src/utils/request.js b/WebSite/src/utils/request.js
index 60b0342..bf66790 100644
--- a/WebSite/src/utils/request.js
+++ b/WebSite/src/utils/request.js
@@ -70,26 +70,27 @@ service.interceptors.response.use(
     const res = response.data;
 
     // if the custom code is not 20000, it is judged as an error.
-    if (res.code !== 20000 && res.code !== "00000") {
-      Message({
-        message: res.message || res.description || "Error",
-        type: "error",
-        duration: 5 * 1000
-      });
+    // if (res.code !== 20000 && res.code !== "00000") {
+    //   Message({
+    //     message: res.message || res.description || "Error",
+    //     type: "error",
+    //     duration: 5 * 1000
+    //   });
 
-      // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
-      if (res.code === "10000") {
-        // to re-login
-        store.dispatch("user/logout").then(() => {
-          router.push("/login");
-        });
-      }
-      return Promise.reject(
-        new Error(res.message || res.description || "Error")
-      );
-    } else {
-      return res;
-    }
+    //   // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
+    //   if (res.code === "10000") {
+    //     // to re-login
+    //     store.dispatch("user/logout").then(() => {
+    //       router.push("/login");
+    //     });
+    //   }
+    //   return Promise.reject(
+    //     new Error(res.message || res.description || "Error")
+    //   );
+    // } else {
+    //   return res;
+    // }
+    return res;
   },
   error => {
     endLoading();
diff --git a/WebSite/src/utils/validate.js b/WebSite/src/utils/validate.js
index c86a80c..79389f9 100644
--- a/WebSite/src/utils/validate.js
+++ b/WebSite/src/utils/validate.js
@@ -1,3 +1,10 @@
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2020-12-18 11:17:43
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2020-12-18 11:19:03
+ */
 /**
  * Created by PanJiaChen on 16/11/18.
  */
@@ -15,7 +22,7 @@ export function isExternal(path) {
  * @returns {Boolean}
  */
 export function validUsername(str) {
-  const valid_map = ["admin", "editor"];
+  const valid_map = ['admin', 'editor'];
   return valid_map.indexOf(str.trim()) >= 0;
 }
 
@@ -60,7 +67,7 @@ export function validAlphabets(str) {
  * @returns {Boolean}
  */
 export function validEmail(email) {
-  const reg = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
+  const reg = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
   return reg.test(email);
 }
 
@@ -69,7 +76,7 @@ export function validEmail(email) {
  * @returns {Boolean}
  */
 export function isString(str) {
-  if (typeof str === "string" || str instanceof String) {
+  if (typeof str === 'string' || str instanceof String) {
     return true;
   }
   return false;
@@ -80,8 +87,8 @@ export function isString(str) {
  * @returns {Boolean}
  */
 export function isArray(arg) {
-  if (typeof Array.isArray === "undefined") {
-    return Object.prototype.toString.call(arg) === "[object Array]";
+  if (typeof Array.isArray === 'undefined') {
+    return Object.prototype.toString.call(arg) === '[object Array]';
   }
   return Array.isArray(arg);
 }
diff --git a/WebSite/src/vendor/Export2Excel.js b/WebSite/src/vendor/Export2Excel.js
deleted file mode 100644
index d8a2af3..0000000
--- a/WebSite/src/vendor/Export2Excel.js
+++ /dev/null
@@ -1,220 +0,0 @@
-/* eslint-disable */
-import { saveAs } from 'file-saver'
-import XLSX from 'xlsx'
-
-function generateArray(table) {
-  var out = [];
-  var rows = table.querySelectorAll('tr');
-  var ranges = [];
-  for (var R = 0; R < rows.length; ++R) {
-    var outRow = [];
-    var row = rows[R];
-    var columns = row.querySelectorAll('td');
-    for (var C = 0; C < columns.length; ++C) {
-      var cell = columns[C];
-      var colspan = cell.getAttribute('colspan');
-      var rowspan = cell.getAttribute('rowspan');
-      var cellValue = cell.innerText;
-      if (cellValue !== "" && cellValue == +cellValue) cellValue = +cellValue;
-
-      //Skip ranges
-      ranges.forEach(function (range) {
-        if (R >= range.s.r && R <= range.e.r && outRow.length >= range.s.c && outRow.length <= range.e.c) {
-          for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
-        }
-      });
-
-      //Handle Row Span
-      if (rowspan || colspan) {
-        rowspan = rowspan || 1;
-        colspan = colspan || 1;
-        ranges.push({
-          s: {
-            r: R,
-            c: outRow.length
-          },
-          e: {
-            r: R + rowspan - 1,
-            c: outRow.length + colspan - 1
-          }
-        });
-      };
-
-      //Handle Value
-      outRow.push(cellValue !== "" ? cellValue : null);
-
-      //Handle Colspan
-      if (colspan)
-        for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
-    }
-    out.push(outRow);
-  }
-  return [out, ranges];
-};
-
-function datenum(v, date1904) {
-  if (date1904) v += 1462;
-  var epoch = Date.parse(v);
-  return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
-}
-
-function sheet_from_array_of_arrays(data, opts) {
-  var ws = {};
-  var range = {
-    s: {
-      c: 10000000,
-      r: 10000000
-    },
-    e: {
-      c: 0,
-      r: 0
-    }
-  };
-  for (var R = 0; R != data.length; ++R) {
-    for (var C = 0; C != data[R].length; ++C) {
-      if (range.s.r > R) range.s.r = R;
-      if (range.s.c > C) range.s.c = C;
-      if (range.e.r < R) range.e.r = R;
-      if (range.e.c < C) range.e.c = C;
-      var cell = {
-        v: data[R][C]
-      };
-      if (cell.v == null) continue;
-      var cell_ref = XLSX.utils.encode_cell({
-        c: C,
-        r: R
-      });
-
-      if (typeof cell.v === 'number') cell.t = 'n';
-      else if (typeof cell.v === 'boolean') cell.t = 'b';
-      else if (cell.v instanceof Date) {
-        cell.t = 'n';
-        cell.z = XLSX.SSF._table[14];
-        cell.v = datenum(cell.v);
-      } else cell.t = 's';
-
-      ws[cell_ref] = cell;
-    }
-  }
-  if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
-  return ws;
-}
-
-function Workbook() {
-  if (!(this instanceof Workbook)) return new Workbook();
-  this.SheetNames = [];
-  this.Sheets = {};
-}
-
-function s2ab(s) {
-  var buf = new ArrayBuffer(s.length);
-  var view = new Uint8Array(buf);
-  for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;
-  return buf;
-}
-
-export function export_table_to_excel(id) {
-  var theTable = document.getElementById(id);
-  var oo = generateArray(theTable);
-  var ranges = oo[1];
-
-  /* original data */
-  var data = oo[0];
-  var ws_name = "SheetJS";
-
-  var wb = new Workbook(),
-    ws = sheet_from_array_of_arrays(data);
-
-  /* add ranges to worksheet */
-  // ws['!cols'] = ['apple', 'banan'];
-  ws['!merges'] = ranges;
-
-  /* add worksheet to workbook */
-  wb.SheetNames.push(ws_name);
-  wb.Sheets[ws_name] = ws;
-
-  var wbout = XLSX.write(wb, {
-    bookType: 'xlsx',
-    bookSST: false,
-    type: 'binary'
-  });
-
-  saveAs(new Blob([s2ab(wbout)], {
-    type: "application/octet-stream"
-  }), "test.xlsx")
-}
-
-export function export_json_to_excel({
-  multiHeader = [],
-  header,
-  data,
-  filename,
-  merges = [],
-  autoWidth = true,
-  bookType = 'xlsx'
-} = {}) {
-  /* original data */
-  filename = filename || 'excel-list'
-  data = [...data]
-  data.unshift(header);
-
-  for (let i = multiHeader.length - 1; i > -1; i--) {
-    data.unshift(multiHeader[i])
-  }
-
-  var ws_name = "SheetJS";
-  var wb = new Workbook(),
-    ws = sheet_from_array_of_arrays(data);
-
-  if (merges.length > 0) {
-    if (!ws['!merges']) ws['!merges'] = [];
-    merges.forEach(item => {
-      ws['!merges'].push(XLSX.utils.decode_range(item))
-    })
-  }
-
-  if (autoWidth) {
-    /*设置worksheet每列的最大宽度*/
-    const colWidth = data.map(row => row.map(val => {
-      /*先判断是否为null/undefined*/
-      if (val == null) {
-        return {
-          'wch': 10
-        };
-      }
-      /*再判断是否为中文*/
-      else if (val.toString().charCodeAt(0) > 255) {
-        return {
-          'wch': val.toString().length * 2
-        };
-      } else {
-        return {
-          'wch': val.toString().length
-        };
-      }
-    }))
-    /*以第一行为初始值*/
-    let result = colWidth[0];
-    for (let i = 1; i < colWidth.length; i++) {
-      for (let j = 0; j < colWidth[i].length; j++) {
-        if (result[j]['wch'] < colWidth[i][j]['wch']) {
-          result[j]['wch'] = colWidth[i][j]['wch'];
-        }
-      }
-    }
-    ws['!cols'] = result;
-  }
-
-  /* add worksheet to workbook */
-  wb.SheetNames.push(ws_name);
-  wb.Sheets[ws_name] = ws;
-
-  var wbout = XLSX.write(wb, {
-    bookType: bookType,
-    bookSST: false,
-    type: 'binary'
-  });
-  saveAs(new Blob([s2ab(wbout)], {
-    type: "application/octet-stream"
-  }), `${filename}.${bookType}`);
-}
diff --git a/WebSite/src/vendor/Export2Zip.js b/WebSite/src/vendor/Export2Zip.js
deleted file mode 100644
index db70707..0000000
--- a/WebSite/src/vendor/Export2Zip.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/* eslint-disable */
-import { saveAs } from 'file-saver'
-import JSZip from 'jszip'
-
-export function export_txt_to_zip(th, jsonData, txtName, zipName) {
-  const zip = new JSZip()
-  const txt_name = txtName || 'file'
-  const zip_name = zipName || 'file'
-  const data = jsonData
-  let txtData = `${th}\r\n`
-  data.forEach((row) => {
-    let tempStr = ''
-    tempStr = row.toString()
-    txtData += `${tempStr}\r\n`
-  })
-  zip.file(`${txt_name}.txt`, txtData)
-  zip.generateAsync({
-    type: "blob"
-  }).then((blob) => {
-    saveAs(blob, `${zip_name}.zip`)
-  }, (err) => {
-    alert('导出失败')
-  })
-}
diff --git a/WebSite/src/views/charts/keyboard.vue b/WebSite/src/views/charts/keyboard.vue
deleted file mode 100644
index 8252211..0000000
--- a/WebSite/src/views/charts/keyboard.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-<template>
-  <div class="chart-container">
-    <chart height="100%" width="100%" />
-  </div>
-</template>
-
-<script>
-import Chart from "@/components/Charts/Keyboard";
-
-export default {
-  name: "KeyboardChart",
-  components: { Chart }
-};
-</script>
-
-<style scoped>
-.chart-container {
-  position: relative;
-  width: 100%;
-  height: calc(100vh - 84px);
-}
-</style>
diff --git a/WebSite/src/views/charts/line.vue b/WebSite/src/views/charts/line.vue
deleted file mode 100644
index e638010..0000000
--- a/WebSite/src/views/charts/line.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-<template>
-  <div class="chart-container">
-    <chart height="100%" width="100%" />
-  </div>
-</template>
-
-<script>
-import Chart from "@/components/Charts/LineMarker";
-
-export default {
-  name: "LineChart",
-  components: { Chart }
-};
-</script>
-
-<style scoped>
-.chart-container {
-  position: relative;
-  width: 100%;
-  height: calc(100vh - 84px);
-}
-</style>
diff --git a/WebSite/src/views/charts/mix-chart.vue b/WebSite/src/views/charts/mix-chart.vue
deleted file mode 100644
index 7bdc487..0000000
--- a/WebSite/src/views/charts/mix-chart.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-<template>
-  <div class="chart-container">
-    <chart height="100%" width="100%" />
-  </div>
-</template>
-
-<script>
-import Chart from "@/components/Charts/MixChart";
-
-export default {
-  name: "MixChart",
-  components: { Chart }
-};
-</script>
-
-<style scoped>
-.chart-container {
-  position: relative;
-  width: 100%;
-  height: calc(100vh - 84px);
-}
-</style>
diff --git a/WebSite/src/views/clipboard/index.vue b/WebSite/src/views/clipboard/index.vue
deleted file mode 100644
index e296dda..0000000
--- a/WebSite/src/views/clipboard/index.vue
+++ /dev/null
@@ -1,65 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-tabs v-model="activeName">
-      <el-tab-pane label="use clipboard  directly" name="directly">
-        <el-input
-          v-model="inputData"
-          placeholder="Please input"
-          style="width:400px;max-width:100%;"
-        />
-        <el-button
-          type="primary"
-          icon="el-icon-document"
-          @click="handleCopy(inputData, $event)"
-        >
-          copy
-        </el-button>
-      </el-tab-pane>
-      <el-tab-pane label="use clipboard by v-directive" name="v-directive">
-        <el-input
-          v-model="inputData"
-          placeholder="Please input"
-          style="width:400px;max-width:100%;"
-        />
-        <el-button
-          v-clipboard:copy="inputData"
-          v-clipboard:success="clipboardSuccess"
-          type="primary"
-          icon="el-icon-document"
-        >
-          copy
-        </el-button>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-
-<script>
-import clip from "@/utils/clipboard"; // use clipboard directly
-import clipboard from "@/directive/clipboard/index.js"; // use clipboard by v-directive
-
-export default {
-  name: "ClipboardDemo",
-  directives: {
-    clipboard
-  },
-  data() {
-    return {
-      activeName: "directly",
-      inputData: "https://github.com/PanJiaChen/vue-element-admin"
-    };
-  },
-  methods: {
-    handleCopy(text, event) {
-      clip(text, event);
-    },
-    clipboardSuccess() {
-      this.$message({
-        message: "Copy successfully",
-        type: "success",
-        duration: 1500
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/components-demo/avatar-upload.vue b/WebSite/src/views/components-demo/avatar-upload.vue
deleted file mode 100644
index ea12253..0000000
--- a/WebSite/src/views/components-demo/avatar-upload.vue
+++ /dev/null
@@ -1,69 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      This is based on
-      <a class="link-type" href="//github.com/dai-siki/vue-image-crop-upload">
-        vue-image-crop-upload</a
-      >. Since I was using only the vue@1 version, and it is not compatible with
-      mockjs at the moment, I modified it myself, and if you are going to use
-      it, it is better to use official version.
-    </aside>
-
-    <pan-thumb :image="image" />
-
-    <el-button
-      type="primary"
-      icon="el-icon-upload"
-      style="position: absolute;bottom: 15px;margin-left: 40px;"
-      @click="imagecropperShow = true"
-    >
-      Change Avatar
-    </el-button>
-
-    <image-cropper
-      v-show="imagecropperShow"
-      :key="imagecropperKey"
-      :width="300"
-      :height="300"
-      url="https://httpbin.org/post"
-      lang-type="en"
-      @close="close"
-      @crop-upload-success="cropSuccess"
-    />
-  </div>
-</template>
-
-<script>
-import ImageCropper from "@/components/ImageCropper";
-import PanThumb from "@/components/PanThumb";
-
-export default {
-  name: "AvatarUploadDemo",
-  components: { ImageCropper, PanThumb },
-  data() {
-    return {
-      imagecropperShow: false,
-      imagecropperKey: 0,
-      image: "https://wpimg.wallstcn.com/577965b9-bb9e-4e02-9f0c-095b41417191"
-    };
-  },
-  methods: {
-    cropSuccess(resData) {
-      this.imagecropperShow = false;
-      this.imagecropperKey = this.imagecropperKey + 1;
-      this.image = resData.files.avatar;
-    },
-    close() {
-      this.imagecropperShow = false;
-    }
-  }
-};
-</script>
-
-<style scoped>
-.avatar {
-  width: 200px;
-  height: 200px;
-  border-radius: 50%;
-}
-</style>
diff --git a/WebSite/src/views/components-demo/back-to-top.vue b/WebSite/src/views/components-demo/back-to-top.vue
deleted file mode 100644
index 9ab1057..0000000
--- a/WebSite/src/views/components-demo/back-to-top.vue
+++ /dev/null
@@ -1,162 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      When the page is scrolled to the specified position, the Back to Top
-      button appears in the lower right corner
-    </aside>
-    <aside>
-      You can customize the style of the button, show / hide, height of
-      appearance, height of the return. If you need a text prompt, you can use
-      element-ui el-tooltip elements externally
-    </aside>
-    <div class="placeholder-container">
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-    </div>
-    <!-- you can add element-ui's tooltip -->
-    <el-tooltip placement="top" content="tooltip">
-      <back-to-top
-        :custom-style="myBackToTopStyle"
-        :visibility-height="300"
-        :back-position="50"
-        transition-name="fade"
-      />
-    </el-tooltip>
-  </div>
-</template>
-
-<script>
-import BackToTop from "@/components/BackToTop";
-
-export default {
-  name: "BackToTopDemo",
-  components: { BackToTop },
-  data() {
-    return {
-      // customizable button style, show/hide critical point, return position
-      myBackToTopStyle: {
-        right: "50px",
-        bottom: "50px",
-        width: "40px",
-        height: "40px",
-        "border-radius": "4px",
-        "line-height": "45px", // 请保持与高度一致以垂直居中 Please keep consistent with height to center vertically
-        background: "#e7eaf1" // 按钮的背景颜色 The background color of the button
-      }
-    };
-  }
-};
-</script>
-
-<style scoped>
-.placeholder-container div {
-  margin: 10px;
-}
-</style>
diff --git a/WebSite/src/views/components-demo/count-to.vue b/WebSite/src/views/components-demo/count-to.vue
deleted file mode 100644
index b7f29f3..0000000
--- a/WebSite/src/views/components-demo/count-to.vue
+++ /dev/null
@@ -1,244 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      <a href="https://github.com/PanJiaChen/vue-countTo" target="_blank"
-        >countTo-component</a
-      >
-    </aside>
-    <count-to
-      ref="example"
-      :start-val="_startVal"
-      :end-val="_endVal"
-      :duration="_duration"
-      :decimals="_decimals"
-      :separator="_separator"
-      :prefix="_prefix"
-      :suffix="_suffix"
-      :autoplay="false"
-      class="example"
-    />
-    <div style="margin-left: 25%;margin-top: 40px;">
-      <label class="label" for="startValInput"
-        >startVal:
-        <input
-          v-model.number="setStartVal"
-          type="number"
-          name="startValInput"
-        />
-      </label>
-      <label class="label" for="endValInput"
-        >endVal:
-        <input v-model.number="setEndVal" type="number" name="endVaInput" />
-      </label>
-      <label class="label" for="durationInput"
-        >duration:
-        <input
-          v-model.number="setDuration"
-          type="number"
-          name="durationInput"
-        />
-      </label>
-      <div class="startBtn example-btn" @click="start">
-        Start
-      </div>
-      <div class="pause-resume-btn example-btn" @click="pauseResume">
-        pause/resume
-      </div>
-      <br />
-      <label class="label" for="decimalsInput"
-        >decimals:
-        <input
-          v-model.number="setDecimals"
-          type="number"
-          name="decimalsInput"
-        />
-      </label>
-      <label class="label" for="separatorInput"
-        >separator:
-        <input v-model="setSeparator" name="separatorInput" />
-      </label>
-      <label class="label" for="prefixInput"
-        >prefix:
-        <input v-model="setPrefix" name="prefixInput" />
-      </label>
-      <label class="label" for="suffixInput"
-        >suffix:
-        <input v-model="setSuffix" name="suffixInput" />
-      </label>
-    </div>
-    <aside>
-      &lt;count-to :start-val=&#x27;{{ _startVal }}&#x27; :end-val=&#x27;{{
-        _endVal
-      }}&#x27; :duration=&#x27;{{ _duration }}&#x27; :decimals=&#x27;{{
-        _decimals
-      }}&#x27; :separator=&#x27;{{ _separator }}&#x27; :prefix=&#x27;{{
-        _prefix
-      }}&#x27; :suffix=&#x27;{{ _suffix }}&#x27; :autoplay=false&gt;
-    </aside>
-  </div>
-</template>
-
-<script>
-import countTo from "vue-count-to";
-
-export default {
-  name: "CountToDemo",
-  components: { countTo },
-  data() {
-    return {
-      setStartVal: 0,
-      setEndVal: 2017,
-      setDuration: 4000,
-      setDecimals: 0,
-      setSeparator: ",",
-      setSuffix: " rmb",
-      setPrefix: "Â¥ "
-    };
-  },
-  computed: {
-    _startVal() {
-      if (this.setStartVal) {
-        return this.setStartVal;
-      } else {
-        return 0;
-      }
-    },
-    _endVal() {
-      if (this.setEndVal) {
-        return this.setEndVal;
-      } else {
-        return 0;
-      }
-    },
-    _duration() {
-      if (this.setDuration) {
-        return this.setDuration;
-      } else {
-        return 100;
-      }
-    },
-    _decimals() {
-      if (this.setDecimals) {
-        if (this.setDecimals < 0 || this.setDecimals > 20) {
-          alert("digits argument must be between 0 and 20");
-          return 0;
-        }
-        return this.setDecimals;
-      } else {
-        return 0;
-      }
-    },
-    _separator() {
-      return this.setSeparator;
-    },
-    _suffix() {
-      return this.setSuffix;
-    },
-    _prefix() {
-      return this.setPrefix;
-    }
-  },
-  methods: {
-    start() {
-      this.$refs.example.start();
-    },
-    pauseResume() {
-      this.$refs.example.pauseResume();
-    }
-  }
-};
-</script>
-
-<style scoped>
-.example-btn {
-  display: inline-block;
-  margin-bottom: 0;
-  font-weight: 500;
-  text-align: center;
-  -ms-touch-action: manipulation;
-  touch-action: manipulation;
-  cursor: pointer;
-  background-image: none;
-  border: 1px solid transparent;
-  white-space: nowrap;
-  line-height: 1.5;
-  padding: 4px 15px;
-  font-size: 12px;
-  border-radius: 4px;
-  -webkit-user-select: none;
-  -moz-user-select: none;
-  -ms-user-select: none;
-  user-select: none;
-  -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-  transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);
-  position: relative;
-  color: rgba(0, 0, 0, 0.65);
-  background-color: #fff;
-  border-color: #d9d9d9;
-}
-
-.example-btn:hover {
-  color: #4ab7bd;
-  background-color: #fff;
-  border-color: #4ab7bd;
-}
-.example {
-  font-size: 50px;
-  color: #f6416c;
-  display: block;
-  margin: 10px 0;
-  text-align: center;
-  font-size: 80px;
-  font-weight: 500;
-}
-
-.label {
-  color: #2f4f4f;
-  font-size: 16px;
-  display: inline-block;
-  margin: 15px 30px 15px 0;
-}
-
-input {
-  position: relative;
-  display: inline-block;
-  padding: 4px 7px;
-  width: 70px;
-  height: 28px;
-  cursor: text;
-  font-size: 12px;
-  line-height: 1.5;
-  color: rgba(0, 0, 0, 0.65);
-  background-color: #fff;
-  background-image: none;
-  border: 1px solid #d9d9d9;
-  border-radius: 4px;
-  -webkit-transition: all 0.3s;
-  transition: all 0.3s;
-}
-
-.startBtn {
-  margin-left: 20px;
-  font-size: 20px;
-  color: #30b08f;
-  background-color: #fff;
-}
-
-.startBtn:hover {
-  background-color: #30b08f;
-  color: #fff;
-  border-color: #30b08f;
-}
-
-.pause-resume-btn {
-  font-size: 20px;
-  color: #e65d6e;
-  background-color: #fff;
-}
-
-.pause-resume-btn:hover {
-  background-color: #e65d6e;
-  color: #fff;
-  border-color: #e65d6e;
-}
-</style>
diff --git a/WebSite/src/views/components-demo/dnd-list.vue b/WebSite/src/views/components-demo/dnd-list.vue
deleted file mode 100644
index 61cfa11..0000000
--- a/WebSite/src/views/components-demo/dnd-list.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      drag-list base on
-      <a href="https://github.com/SortableJS/Vue.Draggable" target="_blank"
-        >Vue.Draggable</a
-      >
-    </aside>
-    <div class="editor-container">
-      <dnd-list
-        :list1="list1"
-        :list2="list2"
-        list1-title="List"
-        list2-title="Article pool"
-      />
-    </div>
-  </div>
-</template>
-
-<script>
-import DndList from "@/components/DndList";
-import { fetchList } from "@/api/article";
-
-export default {
-  name: "DndListDemo",
-  components: { DndList },
-  data() {
-    return {
-      list1: [],
-      list2: []
-    };
-  },
-  created() {
-    this.getData();
-  },
-  methods: {
-    getData() {
-      this.listLoading = true;
-      fetchList().then(response => {
-        this.list1 = response.data.items.splice(0, 5);
-        this.list2 = response.data.items;
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/components-demo/drag-dialog.vue b/WebSite/src/views/components-demo/drag-dialog.vue
deleted file mode 100644
index 698239c..0000000
--- a/WebSite/src/views/components-demo/drag-dialog.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <div class="components-container">
-    <el-button type="primary" @click="dialogTableVisible = true">
-      open a Drag Dialog
-    </el-button>
-    <el-dialog
-      v-el-drag-dialog
-      :visible.sync="dialogTableVisible"
-      title="Shipping address"
-      @dragDialog="handleDrag"
-    >
-      <el-select ref="select" v-model="value" placeholder="请选择">
-        <el-option
-          v-for="item in options"
-          :key="item.value"
-          :label="item.label"
-          :value="item.value"
-        />
-      </el-select>
-      <el-table :data="gridData">
-        <el-table-column property="date" label="Date" width="150" />
-        <el-table-column property="name" label="Name" width="200" />
-        <el-table-column property="address" label="Address" />
-      </el-table>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import elDragDialog from "@/directive/el-drag-dialog"; // base on element-ui
-
-export default {
-  name: "DragDialogDemo",
-  directives: { elDragDialog },
-  data() {
-    return {
-      dialogTableVisible: false,
-      options: [
-        { value: "选项1", label: "黄金糕" },
-        { value: "选项2", label: "双皮奶" },
-        { value: "选项3", label: "蚵仔煎" },
-        { value: "选项4", label: "龙须面" }
-      ],
-      value: "",
-      gridData: [
-        {
-          date: "2016-05-02",
-          name: "John Smith",
-          address: "No.1518,  Jinshajiang Road, Putuo District"
-        },
-        {
-          date: "2016-05-04",
-          name: "John Smith",
-          address: "No.1518,  Jinshajiang Road, Putuo District"
-        },
-        {
-          date: "2016-05-01",
-          name: "John Smith",
-          address: "No.1518,  Jinshajiang Road, Putuo District"
-        },
-        {
-          date: "2016-05-03",
-          name: "John Smith",
-          address: "No.1518,  Jinshajiang Road, Putuo District"
-        }
-      ]
-    };
-  },
-  methods: {
-    // v-el-drag-dialog onDrag callback function
-    handleDrag() {
-      this.$refs.select.blur();
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/components-demo/drag-kanban.vue b/WebSite/src/views/components-demo/drag-kanban.vue
deleted file mode 100644
index 7d73214..0000000
--- a/WebSite/src/views/components-demo/drag-kanban.vue
+++ /dev/null
@@ -1,83 +0,0 @@
-<template>
-  <div class="components-container board">
-    <Kanban
-      :key="1"
-      :list="list1"
-      :group="group"
-      class="kanban todo"
-      header-text="Todo"
-    />
-    <Kanban
-      :key="2"
-      :list="list2"
-      :group="group"
-      class="kanban working"
-      header-text="Working"
-    />
-    <Kanban
-      :key="3"
-      :list="list3"
-      :group="group"
-      class="kanban done"
-      header-text="Done"
-    />
-  </div>
-</template>
-<script>
-import Kanban from "@/components/Kanban";
-
-export default {
-  name: "DragKanbanDemo",
-  components: {
-    Kanban
-  },
-  data() {
-    return {
-      group: "mission",
-      list1: [
-        { name: "Mission", id: 1 },
-        { name: "Mission", id: 2 },
-        { name: "Mission", id: 3 },
-        { name: "Mission", id: 4 }
-      ],
-      list2: [
-        { name: "Mission", id: 5 },
-        { name: "Mission", id: 6 },
-        { name: "Mission", id: 7 }
-      ],
-      list3: [
-        { name: "Mission", id: 8 },
-        { name: "Mission", id: 9 },
-        { name: "Mission", id: 10 }
-      ]
-    };
-  }
-};
-</script>
-<style lang="scss">
-.board {
-  width: 1000px;
-  margin-left: 20px;
-  display: flex;
-  justify-content: space-around;
-  flex-direction: row;
-  align-items: flex-start;
-}
-.kanban {
-  &.todo {
-    .board-column-header {
-      background: #4a9ff9;
-    }
-  }
-  &.working {
-    .board-column-header {
-      background: #f9944a;
-    }
-  }
-  &.done {
-    .board-column-header {
-      background: #2ac06d;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/views/components-demo/drag-select.vue b/WebSite/src/views/components-demo/drag-select.vue
deleted file mode 100644
index 6caa5ba..0000000
--- a/WebSite/src/views/components-demo/drag-select.vue
+++ /dev/null
@@ -1,59 +0,0 @@
-<template>
-  <div class="components-container">
-    <el-drag-select
-      v-model="value"
-      style="width:500px;"
-      multiple
-      placeholder="请选择"
-    >
-      <el-option
-        v-for="item in options"
-        :key="item.value"
-        :label="item.label"
-        :value="item.value"
-      />
-    </el-drag-select>
-
-    <div style="margin-top:30px;">
-      <el-tag v-for="item of value" :key="item" style="margin-right:15px;">
-        {{ item }}
-      </el-tag>
-    </div>
-  </div>
-</template>
-
-<script>
-import ElDragSelect from "@/components/DragSelect"; // base on element-ui
-
-export default {
-  name: "DragSelectDemo",
-  components: { ElDragSelect },
-  data() {
-    return {
-      value: ["Apple", "Banana", "Orange"],
-      options: [
-        {
-          value: "Apple",
-          label: "Apple"
-        },
-        {
-          value: "Banana",
-          label: "Banana"
-        },
-        {
-          value: "Orange",
-          label: "Orange"
-        },
-        {
-          value: "Pear",
-          label: "Pear"
-        },
-        {
-          value: "Strawberry",
-          label: "Strawberry"
-        }
-      ]
-    };
-  }
-};
-</script>
diff --git a/WebSite/src/views/components-demo/dropzone.vue b/WebSite/src/views/components-demo/dropzone.vue
deleted file mode 100644
index e70d78e..0000000
--- a/WebSite/src/views/components-demo/dropzone.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      Based on
-      <a class="link-type" href="https://github.com/rowanwins/vue-dropzone">
-        dropzone </a
-      >. Because my business has special needs, and has to upload images to
-      qiniu, so instead of a third party, I chose encapsulate it by myself. It
-      is very simple, you can see the detail code in @/components/Dropzone.
-    </aside>
-    <div class="editor-container">
-      <dropzone
-        id="myVueDropzone"
-        url="https://httpbin.org/post"
-        @dropzone-removedFile="dropzoneR"
-        @dropzone-success="dropzoneS"
-      />
-    </div>
-  </div>
-</template>
-
-<script>
-import Dropzone from "@/components/Dropzone";
-
-export default {
-  name: "DropzoneDemo",
-  components: { Dropzone },
-  methods: {
-    dropzoneS(file) {
-      console.log(file);
-      this.$message({ message: "Upload success", type: "success" });
-    },
-    dropzoneR(file) {
-      console.log(file);
-      this.$message({ message: "Delete success", type: "success" });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/components-demo/json-editor.vue b/WebSite/src/views/components-demo/json-editor.vue
deleted file mode 100644
index e9d21ec..0000000
--- a/WebSite/src/views/components-demo/json-editor.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      Json-Editor is base on
-      <a href="https://github.com/codemirror/CodeMirror" target="_blank"
-        >CodeMirrorr</a
-      >. Lint base on
-      <a
-        href="https://github.com/codemirror/CodeMirror/blob/master/addon/lint/json-lint.js"
-        target="_blank"
-        >json-lint</a
-      >.
-    </aside>
-    <div class="editor-container">
-      <json-editor ref="jsonEditor" v-model="value" />
-    </div>
-  </div>
-</template>
-
-<script>
-import JsonEditor from "@/components/JsonEditor";
-
-const jsonData =
-  '[{"items":[{"market_type":"forexdata","symbol":"XAUUSD"},{"market_type":"forexdata","symbol":"UKOIL"},{"market_type":"forexdata","symbol":"CORN"}],"name":""},{"items":[{"market_type":"forexdata","symbol":"XAUUSD"},{"market_type":"forexdata","symbol":"XAGUSD"},{"market_type":"forexdata","symbol":"AUTD"},{"market_type":"forexdata","symbol":"AGTD"}],"name":"贵金属"},{"items":[{"market_type":"forexdata","symbol":"CORN"},{"market_type":"forexdata","symbol":"WHEAT"},{"market_type":"forexdata","symbol":"SOYBEAN"},{"market_type":"forexdata","symbol":"SUGAR"}],"name":"农产品"},{"items":[{"market_type":"forexdata","symbol":"UKOIL"},{"market_type":"forexdata","symbol":"USOIL"},{"market_type":"forexdata","symbol":"NGAS"}],"name":"能源化工"}]';
-
-export default {
-  name: "JsonEditorDemo",
-  components: { JsonEditor },
-  data() {
-    return {
-      value: JSON.parse(jsonData)
-    };
-  }
-};
-</script>
-
-<style scoped>
-.editor-container {
-  position: relative;
-  height: 100%;
-}
-</style>
diff --git a/WebSite/src/views/components-demo/markdown.vue b/WebSite/src/views/components-demo/markdown.vue
deleted file mode 100644
index 4ad7f9a..0000000
--- a/WebSite/src/views/components-demo/markdown.vue
+++ /dev/null
@@ -1,124 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      Markdown is based on
-      <a href="https://github.com/nhnent/tui.editor" target="_blank"
-        >tui.editor</a
-      >
-      ,simply wrapped with Vue.
-      <a
-        target="_blank"
-        href="https://panjiachen.github.io/vue-element-admin-site/feature/component/markdown-editor.html"
-      >
-        Documentation
-      </a>
-    </aside>
-
-    <div class="editor-container">
-      <el-tag class="tag-title">
-        Basic:
-      </el-tag>
-      <markdown-editor v-model="content1" height="300px" />
-    </div>
-
-    <div class="editor-container">
-      <el-tag class="tag-title">
-        Markdown Mode:
-      </el-tag>
-      <markdown-editor
-        ref="markdownEditor"
-        v-model="content2"
-        :options="{ hideModeSwitch: true, previewStyle: 'tab' }"
-        height="200px"
-      />
-    </div>
-
-    <div class="editor-container">
-      <el-tag class="tag-title">
-        Customize Toolbar:
-      </el-tag>
-      <markdown-editor
-        v-model="content3"
-        :options="{ toolbarItems: ['heading', 'bold', 'italic'] }"
-      />
-    </div>
-
-    <div class="editor-container">
-      <el-tag class="tag-title">
-        I18n:
-      </el-tag>
-      <el-alert
-        :closable="false"
-        title="You can change the language of the admin system to see the effect"
-        type="success"
-      />
-      <markdown-editor
-        ref="markdownEditor"
-        v-model="content4"
-        :language="language"
-        height="300px"
-      />
-    </div>
-
-    <el-button
-      style="margin-top:80px;"
-      type="primary"
-      icon="el-icon-document"
-      @click="getHtml"
-    >
-      Get HTML
-    </el-button>
-    <div v-html="html" />
-  </div>
-</template>
-
-<script>
-import MarkdownEditor from "@/components/MarkdownEditor";
-
-const content = `
-**This is test**
-
-* vue
-* element
-* webpack
-
-`;
-export default {
-  name: "MarkdownDemo",
-  components: { MarkdownEditor },
-  data() {
-    return {
-      content1: content,
-      content2: content,
-      content3: content,
-      content4: content,
-      html: "",
-      languageTypeList: {
-        en: "en_US",
-        zh: "zh_CN",
-        es: "es_ES"
-      }
-    };
-  },
-  computed: {
-    language() {
-      return this.languageTypeList["en"];
-    }
-  },
-  methods: {
-    getHtml() {
-      this.html = this.$refs.markdownEditor.getHtml();
-      console.log(this.html);
-    }
-  }
-};
-</script>
-
-<style scoped>
-.editor-container {
-  margin-bottom: 30px;
-}
-.tag-title {
-  margin-bottom: 5px;
-}
-</style>
diff --git a/WebSite/src/views/components-demo/mixin.vue b/WebSite/src/views/components-demo/mixin.vue
deleted file mode 100644
index 18691eb..0000000
--- a/WebSite/src/views/components-demo/mixin.vue
+++ /dev/null
@@ -1,200 +0,0 @@
-<template>
-  <div class="mixin-components-container">
-    <el-row>
-      <el-card class="box-card">
-        <div slot="header" class="clearfix">
-          <span>Buttons</span>
-        </div>
-        <div style="margin-bottom:50px;">
-          <el-col :span="4" class="text-center">
-            <router-link class="pan-btn blue-btn" to="/documentation/index">
-              Documentation
-            </router-link>
-          </el-col>
-          <el-col :span="4" class="text-center">
-            <router-link class="pan-btn light-blue-btn" to="/icon/index">
-              Icons
-            </router-link>
-          </el-col>
-          <el-col :span="4" class="text-center">
-            <router-link class="pan-btn pink-btn" to="/excel/export-excel">
-              Excel
-            </router-link>
-          </el-col>
-          <el-col :span="4" class="text-center">
-            <router-link class="pan-btn green-btn" to="/table/complex-table">
-              Table
-            </router-link>
-          </el-col>
-          <el-col :span="4" class="text-center">
-            <router-link class="pan-btn tiffany-btn" to="/example/create">
-              Form
-            </router-link>
-          </el-col>
-          <el-col :span="4" class="text-center">
-            <router-link class="pan-btn yellow-btn" to="/theme/index">
-              Theme
-            </router-link>
-          </el-col>
-        </div>
-      </el-card>
-    </el-row>
-
-    <el-row :gutter="20" style="margin-top:50px;">
-      <el-col :span="6">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix">
-            <span>Material Design 的input</span>
-          </div>
-          <div style="height:100px;">
-            <el-form :model="demo" :rules="demoRules">
-              <el-form-item prop="title">
-                <md-input
-                  v-model="demo.title"
-                  icon="el-icon-search"
-                  name="title"
-                  placeholder="输入标题"
-                >
-                  标题
-                </md-input>
-              </el-form-item>
-            </el-form>
-          </div>
-        </el-card>
-      </el-col>
-
-      <el-col :span="6">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix">
-            <span>图片hover效果</span>
-          </div>
-          <div class="component-item">
-            <pan-thumb
-              width="100px"
-              height="100px"
-              image="https://wpimg.wallstcn.com/577965b9-bb9e-4e02-9f0c-095b41417191"
-            >
-              vue-element-admin
-            </pan-thumb>
-          </div>
-        </el-card>
-      </el-col>
-
-      <el-col :span="6">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix">
-            <span>水波纹 waves v-directive</span>
-          </div>
-          <div class="component-item">
-            <el-button v-waves type="primary">
-              水波纹效果
-            </el-button>
-          </div>
-        </el-card>
-      </el-col>
-
-      <el-col :span="6">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix">
-            <span>hover text</span>
-          </div>
-          <div class="component-item">
-            <mallki class-name="mallki-text" text="vue-element-admin" />
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
-
-    <el-row :gutter="20" style="margin-top:50px;">
-      <el-col :span="8">
-        <el-card class="box-card">
-          <div slot="header" class="clearfix">
-            <span>Share</span>
-          </div>
-          <div class="component-item" style="height:420px;">
-            <dropdown-menu
-              :items="articleList"
-              style="margin:0 auto;"
-              title="系列文章"
-            />
-          </div>
-        </el-card>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import PanThumb from "@/components/PanThumb";
-import MdInput from "@/components/MDinput";
-import Mallki from "@/components/TextHoverEffect/Mallki";
-import DropdownMenu from "@/components/Share/DropdownMenu";
-import waves from "@/directive/waves/index.js"; // 水波纹指令
-
-export default {
-  name: "ComponentMixinDemo",
-  components: {
-    PanThumb,
-    MdInput,
-    Mallki,
-    DropdownMenu
-  },
-  directives: {
-    waves
-  },
-  data() {
-    const validate = (rule, value, callback) => {
-      if (value.length !== 6) {
-        callback(new Error("请输入六个字符"));
-      } else {
-        callback();
-      }
-    };
-    return {
-      demo: {
-        title: ""
-      },
-      demoRules: {
-        title: [{ required: true, trigger: "change", validator: validate }]
-      },
-      articleList: [
-        {
-          title: "基础篇",
-          href: "https://juejin.im/post/59097cd7a22b9d0065fb61d2"
-        },
-        {
-          title: "登录权限篇",
-          href: "https://juejin.im/post/591aa14f570c35006961acac"
-        },
-        {
-          title: "实战篇",
-          href: "https://juejin.im/post/593121aa0ce4630057f70d35"
-        },
-        {
-          title: "vue-admin-template 篇",
-          href: "https://juejin.im/post/595b4d776fb9a06bbe7dba56"
-        },
-        {
-          title: "v4.0 篇",
-          href: "https://juejin.im/post/5c92ff94f265da6128275a85"
-        },
-        {
-          title: "优雅的使用 icon",
-          href: "https://juejin.im/post/59bb864b5188257e7a427c09"
-        }
-      ]
-    };
-  }
-};
-</script>
-
-<style scoped>
-.mixin-components-container {
-  background-color: #f0f2f5;
-  padding: 30px;
-  min-height: calc(100vh - 84px);
-}
-.component-item {
-  min-height: 100px;
-}
-</style>
diff --git a/WebSite/src/views/components-demo/split-pane.vue b/WebSite/src/views/components-demo/split-pane.vue
deleted file mode 100644
index 59ba599..0000000
--- a/WebSite/src/views/components-demo/split-pane.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      <strong>SplitPane</strong> If you've used
-      <a href="https://codepen.io/" target="_blank"> codepen</a>,
-      <a href="https://jsfiddle.net/" target="_blank"> jsfiddle </a>will not be
-      unfamiliar.
-      <a href="https://github.com/PanJiaChen/vue-split-pane" target="_blank">
-        Github repository</a
-      >
-    </aside>
-    <split-pane split="vertical" @resize="resize">
-      <template slot="paneL">
-        <div class="left-container" />
-      </template>
-      <template slot="paneR">
-        <split-pane split="horizontal">
-          <template slot="paneL">
-            <div class="top-container" />
-          </template>
-          <template slot="paneR">
-            <div class="bottom-container" />
-          </template>
-        </split-pane>
-      </template>
-    </split-pane>
-  </div>
-</template>
-
-<script>
-import splitPane from "vue-splitpane";
-
-export default {
-  name: "SplitpaneDemo",
-  components: { splitPane },
-  methods: {
-    resize() {
-      console.log("resize");
-    }
-  }
-};
-</script>
-
-<style scoped>
-.components-container {
-  position: relative;
-  height: 100vh;
-}
-
-.left-container {
-  background-color: #f38181;
-  height: 100%;
-}
-
-.right-container {
-  background-color: #fce38a;
-  height: 200px;
-}
-
-.top-container {
-  background-color: #fce38a;
-  width: 100%;
-  height: 100%;
-}
-
-.bottom-container {
-  width: 100%;
-  background-color: #95e1d3;
-  height: 100%;
-}
-</style>
diff --git a/WebSite/src/views/components-demo/sticky.vue b/WebSite/src/views/components-demo/sticky.vue
deleted file mode 100644
index 882c6c3..0000000
--- a/WebSite/src/views/components-demo/sticky.vue
+++ /dev/null
@@ -1,149 +0,0 @@
-<template>
-  <div>
-    <sticky :z-index="10" class-name="sub-navbar">
-      <el-dropdown trigger="click">
-        <el-button plain>
-          Platform<i class="el-icon-caret-bottom el-icon--right" />
-        </el-button>
-        <el-dropdown-menu slot="dropdown" class="no-border">
-          <el-checkbox-group v-model="platforms" style="padding: 5px 15px;">
-            <el-checkbox
-              v-for="item in platformsOptions"
-              :key="item.key"
-              :label="item.key"
-            >
-              {{ item.name }}
-            </el-checkbox>
-          </el-checkbox-group>
-        </el-dropdown-menu>
-      </el-dropdown>
-
-      <el-dropdown trigger="click">
-        <el-button plain>
-          Link<i class="el-icon-caret-bottom el-icon--right" />
-        </el-button>
-        <el-dropdown-menu
-          slot="dropdown"
-          class="no-padding no-border"
-          style="width:300px"
-        >
-          <el-input v-model="url" placeholder="Please enter the content">
-            <template slot="prepend">
-              Url
-            </template>
-          </el-input>
-        </el-dropdown-menu>
-      </el-dropdown>
-
-      <div class="time-container">
-        <el-date-picker
-          v-model="time"
-          type="datetime"
-          format="yyyy-MM-dd HH:mm:ss"
-          placeholder="Release time"
-        />
-      </div>
-
-      <el-button style="margin-left: 10px;" type="success">
-        publish
-      </el-button>
-    </sticky>
-
-    <div class="components-container">
-      <aside>
-        Sticky header, When the page is scrolled to the preset position will be
-        sticky on the top.
-      </aside>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <sticky :sticky-top="200">
-        <el-button type="primary"> placeholder</el-button>
-      </sticky>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-      <div>placeholder</div>
-    </div>
-  </div>
-</template>
-
-<script>
-import Sticky from "@/components/Sticky";
-
-export default {
-  name: "StickyDemo",
-  components: { Sticky },
-  data() {
-    return {
-      time: "",
-      url: "",
-      platforms: ["a-platform"],
-      platformsOptions: [
-        { key: "a-platform", name: "platformA" },
-        { key: "b-platform", name: "platformB" },
-        { key: "c-platform", name: "platformC" }
-      ],
-      pickerOptions: {
-        disabledDate(time) {
-          return time.getTime() > Date.now();
-        }
-      }
-    };
-  }
-};
-</script>
-
-<style scoped>
-.components-container div {
-  margin: 10px;
-}
-
-.time-container {
-  display: inline-block;
-}
-</style>
diff --git a/WebSite/src/views/components-demo/tinymce.vue b/WebSite/src/views/components-demo/tinymce.vue
deleted file mode 100644
index aa1a9d8..0000000
--- a/WebSite/src/views/components-demo/tinymce.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-<template>
-  <div class="components-container">
-    <aside>
-      Rich text is a core feature of the management backend, but at the same
-      time it is a place with lots of pits. In the process of selecting rich
-      texts, I also took a lot of detours. The common rich texts on the market
-      have been basically used, and I finally chose Tinymce. See the more
-      detailed rich text comparison and introduction.
-      <a
-        target="_blank"
-        class="link-type"
-        href="https://panjiachen.github.io/vue-element-admin-site/component/rich-editor.html"
-        >Documentation</a
-      >
-    </aside>
-    <div>
-      <tinymce v-model="content" :height="300" />
-    </div>
-    <div class="editor-content" v-html="content" />
-  </div>
-</template>
-
-<script>
-import Tinymce from "@/components/Tinymce";
-
-export default {
-  name: "TinymceDemo",
-  components: { Tinymce },
-  data() {
-    return {
-      content: `<h1 style="text-align: center;">Welcome to the TinyMCE demo!</h1><p style="text-align: center; font-size: 15px;"><img title="TinyMCE Logo" src="//www.tinymce.com/images/glyph-tinymce@2x.png" alt="TinyMCE Logo" width="110" height="97" /><ul>
-        <li>Our <a href="//www.tinymce.com/docs/">documentation</a> is a great resource for learning how to configure TinyMCE.</li><li>Have a specific question? Visit the <a href="https://community.tinymce.com/forum/">Community Forum</a>.</li><li>We also offer enterprise grade support as part of <a href="https://tinymce.com/pricing">TinyMCE premium subscriptions</a>.</li>
-      </ul>`
-    };
-  }
-};
-</script>
-
-<style scoped>
-.editor-content {
-  margin-top: 20px;
-}
-</style>
diff --git a/WebSite/src/views/dashboard/admin/components/BarChart.vue b/WebSite/src/views/dashboard/admin/components/BarChart.vue
deleted file mode 100644
index df33a08..0000000
--- a/WebSite/src/views/dashboard/admin/components/BarChart.vue
+++ /dev/null
@@ -1,111 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-
-const animationDuration = 6000;
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 坐标轴指示器,坐标轴触发有效
-            type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
-          }
-        },
-        grid: {
-          top: 10,
-          left: "2%",
-          right: "2%",
-          bottom: "3%",
-          containLabel: true
-        },
-        xAxis: [
-          {
-            type: "category",
-            data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
-            axisTick: {
-              alignWithLabel: true
-            }
-          }
-        ],
-        yAxis: [
-          {
-            type: "value",
-            axisTick: {
-              show: false
-            }
-          }
-        ],
-        series: [
-          {
-            name: "pageA",
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: [79, 52, 200, 334, 390, 330, 220],
-            animationDuration
-          },
-          {
-            name: "pageB",
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: [80, 52, 200, 334, 390, 330, 220],
-            animationDuration
-          },
-          {
-            name: "pageC",
-            type: "bar",
-            stack: "vistors",
-            barWidth: "60%",
-            data: [30, 52, 200, 334, 390, 330, 220],
-            animationDuration
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/dashboard/admin/components/BoxCard.vue b/WebSite/src/views/dashboard/admin/components/BoxCard.vue
deleted file mode 100644
index 9eb4c31..0000000
--- a/WebSite/src/views/dashboard/admin/components/BoxCard.vue
+++ /dev/null
@@ -1,116 +0,0 @@
-<template>
-  <el-card class="box-card-component" style="margin-left:8px;">
-    <div slot="header" class="box-card-header">
-      <img
-        src="https://wpimg.wallstcn.com/e7d23d71-cf19-4b90-a1cc-f56af8c0903d.png"
-      />
-    </div>
-    <div style="position:relative;">
-      <pan-thumb :image="avatar" class="panThumb" />
-      <mallki class-name="mallki-text" text="vue-element-admin" />
-      <div style="padding-top:35px;" class="progress-item">
-        <span>Vue</span>
-        <el-progress :percentage="70" />
-      </div>
-      <div class="progress-item">
-        <span>JavaScript</span>
-        <el-progress :percentage="18" />
-      </div>
-      <div class="progress-item">
-        <span>Css</span>
-        <el-progress :percentage="12" />
-      </div>
-      <div class="progress-item">
-        <span>ESLint</span>
-        <el-progress :percentage="100" status="success" />
-      </div>
-    </div>
-  </el-card>
-</template>
-
-<script>
-import { mapGetters } from "vuex";
-import PanThumb from "@/components/PanThumb";
-import Mallki from "@/components/TextHoverEffect/Mallki";
-
-export default {
-  components: { PanThumb, Mallki },
-
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        success: "success",
-        pending: "danger"
-      };
-      return statusMap[status];
-    }
-  },
-  data() {
-    return {
-      statisticsData: {
-        article_count: 1024,
-        pageviews_count: 1024
-      }
-    };
-  },
-  computed: {
-    ...mapGetters(["name", "avatar", "roles"])
-  }
-};
-</script>
-
-<style lang="scss">
-.box-card-component {
-  .el-card__header {
-    padding: 0px !important;
-  }
-}
-</style>
-<style lang="scss" scoped>
-.box-card-component {
-  .box-card-header {
-    position: relative;
-    height: 220px;
-    img {
-      width: 100%;
-      height: 100%;
-      transition: all 0.2s linear;
-      &:hover {
-        transform: scale(1.1, 1.1);
-        filter: contrast(130%);
-      }
-    }
-  }
-  .mallki-text {
-    position: absolute;
-    top: 0px;
-    right: 0px;
-    font-size: 20px;
-    font-weight: bold;
-  }
-  .panThumb {
-    z-index: 100;
-    height: 70px !important;
-    width: 70px !important;
-    position: absolute !important;
-    top: -45px;
-    left: 0px;
-    border: 5px solid #ffffff;
-    background-color: #fff;
-    margin: auto;
-    box-shadow: none !important;
-    /deep/ .pan-info {
-      box-shadow: none !important;
-    }
-  }
-  .progress-item {
-    margin-bottom: 10px;
-    font-size: 14px;
-  }
-  @media only screen and (max-width: 1510px) {
-    .mallki-text {
-      display: none;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/views/dashboard/admin/components/LineChart.vue b/WebSite/src/views/dashboard/admin/components/LineChart.vue
deleted file mode 100644
index e8cdf89..0000000
--- a/WebSite/src/views/dashboard/admin/components/LineChart.vue
+++ /dev/null
@@ -1,138 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "350px"
-    },
-    autoResize: {
-      type: Boolean,
-      default: true
-    },
-    chartData: {
-      type: Object,
-      required: true
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  watch: {
-    chartData: {
-      deep: true,
-      handler(val) {
-        this.setOptions(val);
-      }
-    }
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-      this.setOptions(this.chartData);
-    },
-    setOptions({ expectedData, actualData } = {}) {
-      this.chart.setOption({
-        xAxis: {
-          data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"],
-          boundaryGap: false,
-          axisTick: {
-            show: false
-          }
-        },
-        grid: {
-          left: 10,
-          right: 10,
-          bottom: 20,
-          top: 30,
-          containLabel: true
-        },
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            type: "cross"
-          },
-          padding: [5, 10]
-        },
-        yAxis: {
-          axisTick: {
-            show: false
-          }
-        },
-        legend: {
-          data: ["expected", "actual"]
-        },
-        series: [
-          {
-            name: "expected",
-            itemStyle: {
-              normal: {
-                color: "#FF005A",
-                lineStyle: {
-                  color: "#FF005A",
-                  width: 2
-                }
-              }
-            },
-            smooth: true,
-            type: "line",
-            data: expectedData,
-            animationDuration: 2800,
-            animationEasing: "cubicInOut"
-          },
-          {
-            name: "actual",
-            smooth: true,
-            type: "line",
-            itemStyle: {
-              normal: {
-                color: "#3888fa",
-                lineStyle: {
-                  color: "#3888fa",
-                  width: 2
-                },
-                areaStyle: {
-                  color: "#f3f8ff"
-                }
-              }
-            },
-            data: actualData,
-            animationDuration: 2800,
-            animationEasing: "quadraticOut"
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/dashboard/admin/components/PanelGroup.vue b/WebSite/src/views/dashboard/admin/components/PanelGroup.vue
deleted file mode 100644
index 49ffc00..0000000
--- a/WebSite/src/views/dashboard/admin/components/PanelGroup.vue
+++ /dev/null
@@ -1,201 +0,0 @@
-<template>
-  <el-row :gutter="40" class="panel-group">
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('newVisitis')">
-        <div class="card-panel-icon-wrapper icon-people">
-          <svg-icon icon-class="peoples" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            New Visits
-          </div>
-          <count-to
-            :start-val="0"
-            :end-val="102400"
-            :duration="2600"
-            class="card-panel-num"
-          />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('messages')">
-        <div class="card-panel-icon-wrapper icon-message">
-          <svg-icon icon-class="message" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            Messages
-          </div>
-          <count-to
-            :start-val="0"
-            :end-val="81212"
-            :duration="3000"
-            class="card-panel-num"
-          />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('purchases')">
-        <div class="card-panel-icon-wrapper icon-money">
-          <svg-icon icon-class="money" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            Purchases
-          </div>
-          <count-to
-            :start-val="0"
-            :end-val="9280"
-            :duration="3200"
-            class="card-panel-num"
-          />
-        </div>
-      </div>
-    </el-col>
-    <el-col :xs="12" :sm="12" :lg="6" class="card-panel-col">
-      <div class="card-panel" @click="handleSetLineChartData('shoppings')">
-        <div class="card-panel-icon-wrapper icon-shopping">
-          <svg-icon icon-class="shopping" class-name="card-panel-icon" />
-        </div>
-        <div class="card-panel-description">
-          <div class="card-panel-text">
-            Shoppings
-          </div>
-          <count-to
-            :start-val="0"
-            :end-val="13600"
-            :duration="3600"
-            class="card-panel-num"
-          />
-        </div>
-      </div>
-    </el-col>
-  </el-row>
-</template>
-
-<script>
-import CountTo from "vue-count-to";
-
-export default {
-  components: {
-    CountTo
-  },
-  methods: {
-    handleSetLineChartData(type) {
-      this.$emit("handleSetLineChartData", type);
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.panel-group {
-  margin-top: 18px;
-
-  .card-panel-col {
-    margin-bottom: 32px;
-  }
-
-  .card-panel {
-    height: 108px;
-    cursor: pointer;
-    font-size: 12px;
-    position: relative;
-    overflow: hidden;
-    color: #666;
-    background: #fff;
-    box-shadow: 4px 4px 40px rgba(0, 0, 0, 0.05);
-    border-color: rgba(0, 0, 0, 0.05);
-
-    &:hover {
-      .card-panel-icon-wrapper {
-        color: #fff;
-      }
-
-      .icon-people {
-        background: #40c9c6;
-      }
-
-      .icon-message {
-        background: #36a3f7;
-      }
-
-      .icon-money {
-        background: #f4516c;
-      }
-
-      .icon-shopping {
-        background: #34bfa3;
-      }
-    }
-
-    .icon-people {
-      color: #40c9c6;
-    }
-
-    .icon-message {
-      color: #36a3f7;
-    }
-
-    .icon-money {
-      color: #f4516c;
-    }
-
-    .icon-shopping {
-      color: #34bfa3;
-    }
-
-    .card-panel-icon-wrapper {
-      float: left;
-      margin: 14px 0 0 14px;
-      padding: 16px;
-      transition: all 0.38s ease-out;
-      border-radius: 6px;
-    }
-
-    .card-panel-icon {
-      float: left;
-      font-size: 48px;
-    }
-
-    .card-panel-description {
-      float: right;
-      font-weight: bold;
-      margin: 26px;
-      margin-left: 0px;
-
-      .card-panel-text {
-        line-height: 18px;
-        color: rgba(0, 0, 0, 0.45);
-        font-size: 16px;
-        margin-bottom: 12px;
-      }
-
-      .card-panel-num {
-        font-size: 20px;
-      }
-    }
-  }
-}
-
-@media (max-width: 550px) {
-  .card-panel-description {
-    display: none;
-  }
-
-  .card-panel-icon-wrapper {
-    float: none !important;
-    width: 100%;
-    height: 100%;
-    margin: 0 !important;
-
-    .svg-icon {
-      display: block;
-      margin: 14px auto !important;
-      float: none !important;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/views/dashboard/admin/components/PieChart.vue b/WebSite/src/views/dashboard/admin/components/PieChart.vue
deleted file mode 100644
index cd81bc0..0000000
--- a/WebSite/src/views/dashboard/admin/components/PieChart.vue
+++ /dev/null
@@ -1,79 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-
-      this.chart.setOption({
-        tooltip: {
-          trigger: "item",
-          formatter: "{a} <br/>{b} : {c} ({d}%)"
-        },
-        legend: {
-          left: "center",
-          bottom: "10",
-          data: ["Industries", "Technology", "Forex", "Gold", "Forecasts"]
-        },
-        series: [
-          {
-            name: "WEEKLY WRITE ARTICLES",
-            type: "pie",
-            roseType: "radius",
-            radius: [15, 95],
-            center: ["50%", "38%"],
-            data: [
-              { value: 320, name: "Industries" },
-              { value: 240, name: "Technology" },
-              { value: 149, name: "Forex" },
-              { value: 100, name: "Gold" },
-              { value: 59, name: "Forecasts" }
-            ],
-            animationEasing: "cubicInOut",
-            animationDuration: 2600
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/dashboard/admin/components/RaddarChart.vue b/WebSite/src/views/dashboard/admin/components/RaddarChart.vue
deleted file mode 100644
index bf0e1cd..0000000
--- a/WebSite/src/views/dashboard/admin/components/RaddarChart.vue
+++ /dev/null
@@ -1,119 +0,0 @@
-<template>
-  <div :class="className" :style="{ height: height, width: width }" />
-</template>
-
-<script>
-import echarts from "echarts";
-require("echarts/theme/macarons"); // echarts theme
-import resize from "./mixins/resize";
-
-const animationDuration = 3000;
-
-export default {
-  mixins: [resize],
-  props: {
-    className: {
-      type: String,
-      default: "chart"
-    },
-    width: {
-      type: String,
-      default: "100%"
-    },
-    height: {
-      type: String,
-      default: "300px"
-    }
-  },
-  data() {
-    return {
-      chart: null
-    };
-  },
-  mounted() {
-    this.$nextTick(() => {
-      this.initChart();
-    });
-  },
-  beforeDestroy() {
-    if (!this.chart) {
-      return;
-    }
-    this.chart.dispose();
-    this.chart = null;
-  },
-  methods: {
-    initChart() {
-      this.chart = echarts.init(this.$el, "macarons");
-
-      this.chart.setOption({
-        tooltip: {
-          trigger: "axis",
-          axisPointer: {
-            // 坐标轴指示器,坐标轴触发有效
-            type: "shadow" // 默认为直线,可选为:'line' | 'shadow'
-          }
-        },
-        radar: {
-          radius: "66%",
-          center: ["50%", "42%"],
-          splitNumber: 8,
-          splitArea: {
-            areaStyle: {
-              color: "rgba(127,95,132,.3)",
-              opacity: 1,
-              shadowBlur: 45,
-              shadowColor: "rgba(0,0,0,.5)",
-              shadowOffsetX: 0,
-              shadowOffsetY: 15
-            }
-          },
-          indicator: [
-            { name: "Sales", max: 10000 },
-            { name: "Administration", max: 20000 },
-            { name: "Information Techology", max: 20000 },
-            { name: "Customer Support", max: 20000 },
-            { name: "Development", max: 20000 },
-            { name: "Marketing", max: 20000 }
-          ]
-        },
-        legend: {
-          left: "center",
-          bottom: "10",
-          data: ["Allocated Budget", "Expected Spending", "Actual Spending"]
-        },
-        series: [
-          {
-            type: "radar",
-            symbolSize: 0,
-            areaStyle: {
-              normal: {
-                shadowBlur: 13,
-                shadowColor: "rgba(0,0,0,.2)",
-                shadowOffsetX: 0,
-                shadowOffsetY: 10,
-                opacity: 1
-              }
-            },
-            data: [
-              {
-                value: [5000, 7000, 12000, 11000, 15000, 14000],
-                name: "Allocated Budget"
-              },
-              {
-                value: [4000, 9000, 15000, 15000, 13000, 11000],
-                name: "Expected Spending"
-              },
-              {
-                value: [5500, 11000, 12000, 15000, 12000, 12000],
-                name: "Actual Spending"
-              }
-            ],
-            animationDuration: animationDuration
-          }
-        ]
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/dashboard/admin/components/TodoList/Todo.vue b/WebSite/src/views/dashboard/admin/components/TodoList/Todo.vue
deleted file mode 100644
index 4112358..0000000
--- a/WebSite/src/views/dashboard/admin/components/TodoList/Todo.vue
+++ /dev/null
@@ -1,81 +0,0 @@
-<template>
-  <li :class="{ completed: todo.done, editing: editing }" class="todo">
-    <div class="view">
-      <input
-        :checked="todo.done"
-        class="toggle"
-        type="checkbox"
-        @change="toggleTodo(todo)"
-      />
-      <label @dblclick="editing = true" v-text="todo.text" />
-      <button class="destroy" @click="deleteTodo(todo)" />
-    </div>
-    <input
-      v-show="editing"
-      v-focus="editing"
-      :value="todo.text"
-      class="edit"
-      @keyup.enter="doneEdit"
-      @keyup.esc="cancelEdit"
-      @blur="doneEdit"
-    />
-  </li>
-</template>
-
-<script>
-export default {
-  name: "Todo",
-  directives: {
-    focus(el, { value }, { context }) {
-      if (value) {
-        context.$nextTick(() => {
-          el.focus();
-        });
-      }
-    }
-  },
-  props: {
-    todo: {
-      type: Object,
-      default: function() {
-        return {};
-      }
-    }
-  },
-  data() {
-    return {
-      editing: false
-    };
-  },
-  methods: {
-    deleteTodo(todo) {
-      this.$emit("deleteTodo", todo);
-    },
-    editTodo({ todo, value }) {
-      this.$emit("editTodo", { todo, value });
-    },
-    toggleTodo(todo) {
-      this.$emit("toggleTodo", todo);
-    },
-    doneEdit(e) {
-      const value = e.target.value.trim();
-      const { todo } = this;
-      if (!value) {
-        this.deleteTodo({
-          todo
-        });
-      } else if (this.editing) {
-        this.editTodo({
-          todo,
-          value
-        });
-        this.editing = false;
-      }
-    },
-    cancelEdit(e) {
-      e.target.value = this.todo.text;
-      this.editing = false;
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/dashboard/admin/components/TodoList/index.scss b/WebSite/src/views/dashboard/admin/components/TodoList/index.scss
deleted file mode 100644
index 74ce0d5..0000000
--- a/WebSite/src/views/dashboard/admin/components/TodoList/index.scss
+++ /dev/null
@@ -1,320 +0,0 @@
-.todoapp {
-  font: 14px 'Helvetica Neue', Helvetica, Arial, sans-serif;
-  line-height: 1.4em;
-  color: #4d4d4d;
-  min-width: 230px;
-  max-width: 550px;
-  margin: 0 auto ;
-  -webkit-font-smoothing: antialiased;
-  -moz-osx-font-smoothing: grayscale;
-  font-weight: 300;
-  background: #fff;
-  z-index: 1;
-  position: relative;
-  button {
-    margin: 0;
-    padding: 0;
-    border: 0;
-    background: none;
-    font-size: 100%;
-    vertical-align: baseline;
-    font-family: inherit;
-    font-weight: inherit;
-    color: inherit;
-    -webkit-appearance: none;
-    appearance: none;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-  }
-  :focus {
-    outline: 0;
-  }
-  .hidden {
-    display: none;
-  }
-  .todoapp {
-    background: #fff;
-    margin: 130px 0 40px 0;
-    position: relative;
-    box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.2), 0 25px 50px 0 rgba(0, 0, 0, 0.1);
-  }
-  .todoapp input::-webkit-input-placeholder {
-    font-style: italic;
-    font-weight: 300;
-    color: #e6e6e6;
-  }
-  .todoapp input::-moz-placeholder {
-    font-style: italic;
-    font-weight: 300;
-    color: #e6e6e6;
-  }
-  .todoapp input::input-placeholder {
-    font-style: italic;
-    font-weight: 300;
-    color: #e6e6e6;
-  }
-  .todoapp h1 {
-    position: absolute;
-    top: -155px;
-    width: 100%;
-    font-size: 100px;
-    font-weight: 100;
-    text-align: center;
-    color: rgba(175, 47, 47, 0.15);
-    -webkit-text-rendering: optimizeLegibility;
-    -moz-text-rendering: optimizeLegibility;
-    text-rendering: optimizeLegibility;
-  }
-  .new-todo,
-  .edit {
-    position: relative;
-    margin: 0;
-    width: 100%;
-    font-size: 18px;
-    font-family: inherit;
-    font-weight: inherit;
-    line-height: 1.4em;
-    border: 0;
-    color: inherit;
-    padding: 6px;
-    border: 1px solid #999;
-    box-shadow: inset 0 -1px 5px 0 rgba(0, 0, 0, 0.2);
-    box-sizing: border-box;
-    -webkit-font-smoothing: antialiased;
-    -moz-osx-font-smoothing: grayscale;
-  }
-  .new-todo {
-    padding: 10px 16px 16px 60px;
-    border: none;
-    background: rgba(0, 0, 0, 0.003);
-    box-shadow: inset 0 -2px 1px rgba(0, 0, 0, 0.03);
-  }
-  .main {
-    position: relative;
-    z-index: 2;
-    border-top: 1px solid #e6e6e6;
-  }
-  .toggle-all {
-    text-align: center;
-    border: none;
-    /* Mobile Safari */
-    opacity: 0;
-    position: absolute;
-  }
-  .toggle-all+label {
-    width: 60px;
-    height: 34px;
-    font-size: 0;
-    position: absolute;
-    top: -52px;
-    left: -13px;
-    -webkit-transform: rotate(90deg);
-    transform: rotate(90deg);
-  }
-  .toggle-all+label:before {
-    content: '❯';
-    font-size: 22px;
-    color: #e6e6e6;
-    padding: 10px 27px 10px 27px;
-  }
-  .toggle-all:checked+label:before {
-    color: #737373;
-  }
-  .todo-list {
-    margin: 0;
-    padding: 0;
-    list-style: none;
-  }
-  .todo-list li {
-    position: relative;
-    font-size: 24px;
-    border-bottom: 1px solid #ededed;
-  }
-  .todo-list li:last-child {
-    border-bottom: none;
-  }
-  .todo-list li.editing {
-    border-bottom: none;
-    padding: 0;
-  }
-  .todo-list li.editing .edit {
-    display: block;
-    width: 506px;
-    padding: 12px 16px;
-    margin: 0 0 0 43px;
-  }
-  .todo-list li.editing .view {
-    display: none;
-  }
-  .todo-list li .toggle {
-    text-align: center;
-    width: 40px;
-    /* auto, since non-WebKit browsers doesn't support input styling */
-    height: auto;
-    position: absolute;
-    top: 0;
-    bottom: 0;
-    margin: auto 0;
-    border: none;
-    /* Mobile Safari */
-    -webkit-appearance: none;
-    appearance: none;
-  }
-  .todo-list li .toggle {
-    opacity: 0;
-  }
-  .todo-list li .toggle+label {
-    /*
-    Firefox requires `#` to be escaped - https://bugzilla.mozilla.org/show_bug.cgi?id=922433
-    IE and Edge requires *everything* to be escaped to render, so we do that instead of just the `#` - https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/7157459/
-  */
-    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23ededed%22%20stroke-width%3D%223%22/%3E%3C/svg%3E');
-    background-repeat: no-repeat;
-    background-position: center left;
-    background-size: 36px;
-  }
-  .todo-list li .toggle:checked+label {
-    background-size: 36px;
-    background-image: url('data:image/svg+xml;utf8,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20width%3D%2240%22%20height%3D%2240%22%20viewBox%3D%22-10%20-18%20100%20135%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22none%22%20stroke%3D%22%23bddad5%22%20stroke-width%3D%223%22/%3E%3Cpath%20fill%3D%22%235dc2af%22%20d%3D%22M72%2025L42%2071%2027%2056l-4%204%2020%2020%2034-52z%22/%3E%3C/svg%3E');
-  }
-  .todo-list li label {
-    word-break: break-all;
-    padding: 15px 15px 15px 50px;
-    display: block;
-    line-height: 1.0;
-        font-size: 14px;
-    transition: color 0.4s;
-  }
-  .todo-list li.completed label {
-    color: #d9d9d9;
-    text-decoration: line-through;
-  }
-  .todo-list li .destroy {
-    display: none;
-    position: absolute;
-    top: 0;
-    right: 10px;
-    bottom: 0;
-    width: 40px;
-    height: 40px;
-    margin: auto 0;
-    font-size: 30px;
-    color: #cc9a9a;
-    transition: color 0.2s ease-out;
-    cursor: pointer;
-  }
-  .todo-list li .destroy:hover {
-    color: #af5b5e;
-  }
-  .todo-list li .destroy:after {
-    content: '×';
-  }
-  .todo-list li:hover .destroy {
-    display: block;
-  }
-  .todo-list li .edit {
-    display: none;
-  }
-  .todo-list li.editing:last-child {
-    margin-bottom: -1px;
-  }
-  .footer {
-    color: #777;
-    position: relative;
-    padding: 10px 15px;
-    height: 40px;
-    text-align: center;
-    border-top: 1px solid #e6e6e6;
-  }
-  .footer:before {
-    content: '';
-    position: absolute;
-    right: 0;
-    bottom: 0;
-    left: 0;
-    height: 40px;
-    overflow: hidden;
-    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2), 0 8px 0 -3px #f6f6f6, 0 9px 1px -3px rgba(0, 0, 0, 0.2), 0 16px 0 -6px #f6f6f6, 0 17px 2px -6px rgba(0, 0, 0, 0.2);
-  }
-  .todo-count {
-    float: left;
-    text-align: left;
-  }
-  .todo-count strong {
-    font-weight: 300;
-  }
-  .filters {
-    margin: 0;
-    padding: 0;
-    position: relative;
-    z-index: 1;
-    list-style: none;
-  }
-  .filters li {
-    display: inline;
-  }
-  .filters li a {
-    color: inherit;
-    font-size: 12px;
-    padding: 3px 7px;
-    text-decoration: none;
-    border: 1px solid transparent;
-    border-radius: 3px;
-  }
-  .filters li a:hover {
-    border-color: rgba(175, 47, 47, 0.1);
-  }
-  .filters li a.selected {
-    border-color: rgba(175, 47, 47, 0.2);
-  }
-  .clear-completed,
-  html .clear-completed:active {
-    float: right;
-    position: relative;
-    line-height: 20px;
-    text-decoration: none;
-    cursor: pointer;
-  }
-  .clear-completed:hover {
-    text-decoration: underline;
-  }
-  .info {
-    margin: 65px auto 0;
-    color: #bfbfbf;
-    font-size: 10px;
-    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
-    text-align: center;
-  }
-  .info p {
-    line-height: 1;
-  }
-  .info a {
-    color: inherit;
-    text-decoration: none;
-    font-weight: 400;
-  }
-  .info a:hover {
-    text-decoration: underline;
-  }
-  /*
-  Hack to remove background from Mobile Safari.
-  Can't use it globally since it destroys checkboxes in Firefox
-*/
-  @media screen and (-webkit-min-device-pixel-ratio:0) {
-    .toggle-all,
-    .todo-list li .toggle {
-      background: none;
-    }
-    .todo-list li .toggle {
-      height: 40px;
-    }
-  }
-  @media (max-width: 430px) {
-    .footer {
-      height: 50px;
-    }
-    .filters {
-      bottom: 10px;
-    }
-  }
-}
diff --git a/WebSite/src/views/dashboard/admin/components/TodoList/index.vue b/WebSite/src/views/dashboard/admin/components/TodoList/index.vue
deleted file mode 100644
index 7a32015..0000000
--- a/WebSite/src/views/dashboard/admin/components/TodoList/index.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-<template>
-  <section class="todoapp">
-    <!-- header -->
-    <header class="header">
-      <input
-        class="new-todo"
-        autocomplete="off"
-        placeholder="Todo List"
-        @keyup.enter="addTodo"
-      />
-    </header>
-    <!-- main section -->
-    <section v-show="todos.length" class="main">
-      <input
-        id="toggle-all"
-        :checked="allChecked"
-        class="toggle-all"
-        type="checkbox"
-        @change="toggleAll({ done: !allChecked })"
-      />
-      <label for="toggle-all" />
-      <ul class="todo-list">
-        <todo
-          v-for="(todo, index) in filteredTodos"
-          :key="index"
-          :todo="todo"
-          @toggleTodo="toggleTodo"
-          @editTodo="editTodo"
-          @deleteTodo="deleteTodo"
-        />
-      </ul>
-    </section>
-    <!-- footer -->
-    <footer v-show="todos.length" class="footer">
-      <span class="todo-count">
-        <strong>{{ remaining }}</strong>
-        {{ remaining | pluralize("item") }} left
-      </span>
-      <ul class="filters">
-        <li v-for="(val, key) in filters" :key="key">
-          <a
-            :class="{ selected: visibility === key }"
-            @click.prevent="visibility = key"
-            >{{ key | capitalize }}</a
-          >
-        </li>
-      </ul>
-      <!-- <button class="clear-completed" v-show="todos.length > remaining" @click="clearCompleted">
-        Clear completed
-      </button> -->
-    </footer>
-  </section>
-</template>
-
-<script>
-import Todo from "./Todo.vue";
-
-const STORAGE_KEY = "todos";
-const filters = {
-  all: todos => todos,
-  active: todos => todos.filter(todo => !todo.done),
-  completed: todos => todos.filter(todo => todo.done)
-};
-const defalutList = [
-  { text: "star this repository", done: false },
-  { text: "fork this repository", done: false },
-  { text: "follow author", done: false },
-  { text: "vue-element-admin", done: true },
-  { text: "vue", done: true },
-  { text: "element-ui", done: true },
-  { text: "axios", done: true },
-  { text: "webpack", done: true }
-];
-export default {
-  components: { Todo },
-  filters: {
-    pluralize: (n, w) => (n === 1 ? w : w + "s"),
-    capitalize: s => s.charAt(0).toUpperCase() + s.slice(1)
-  },
-  data() {
-    return {
-      visibility: "all",
-      filters,
-      // todos: JSON.parse(window.localStorage.getItem(STORAGE_KEY)) || defalutList
-      todos: defalutList
-    };
-  },
-  computed: {
-    allChecked() {
-      return this.todos.every(todo => todo.done);
-    },
-    filteredTodos() {
-      return filters[this.visibility](this.todos);
-    },
-    remaining() {
-      return this.todos.filter(todo => !todo.done).length;
-    }
-  },
-  methods: {
-    setLocalStorage() {
-      window.localStorage.setItem(STORAGE_KEY, JSON.stringify(this.todos));
-    },
-    addTodo(e) {
-      const text = e.target.value;
-      if (text.trim()) {
-        this.todos.push({
-          text,
-          done: false
-        });
-        this.setLocalStorage();
-      }
-      e.target.value = "";
-    },
-    toggleTodo(val) {
-      val.done = !val.done;
-      this.setLocalStorage();
-    },
-    deleteTodo(todo) {
-      this.todos.splice(this.todos.indexOf(todo), 1);
-      this.setLocalStorage();
-    },
-    editTodo({ todo, value }) {
-      todo.text = value;
-      this.setLocalStorage();
-    },
-    clearCompleted() {
-      this.todos = this.todos.filter(todo => !todo.done);
-      this.setLocalStorage();
-    },
-    toggleAll({ done }) {
-      this.todos.forEach(todo => {
-        todo.done = done;
-        this.setLocalStorage();
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss">
-@import "./index.scss";
-</style>
diff --git a/WebSite/src/views/dashboard/admin/components/TransactionTable.vue b/WebSite/src/views/dashboard/admin/components/TransactionTable.vue
deleted file mode 100644
index aa6a95c..0000000
--- a/WebSite/src/views/dashboard/admin/components/TransactionTable.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <el-table :data="list" style="width: 100%;padding-top: 15px;">
-    <el-table-column label="Order_No" min-width="200">
-      <template slot-scope="scope">
-        {{ scope.row.order_no | orderNoFilter }}
-      </template>
-    </el-table-column>
-    <el-table-column label="Price" width="195" align="center">
-      <template slot-scope="scope">
-        ¥{{ scope.row.price | toThousandFilter }}
-      </template>
-    </el-table-column>
-    <el-table-column label="Status" width="100" align="center">
-      <template slot-scope="{ row }">
-        <el-tag :type="row.status | statusFilter">
-          {{ row.status }}
-        </el-tag>
-      </template>
-    </el-table-column>
-  </el-table>
-</template>
-
-<script>
-import { transactionList } from "@/api/remote-search";
-
-export default {
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        success: "success",
-        pending: "danger"
-      };
-      return statusMap[status];
-    },
-    orderNoFilter(str) {
-      return str.substring(0, 30);
-    }
-  },
-  data() {
-    return {
-      list: null
-    };
-  },
-  created() {
-    this.fetchData();
-  },
-  methods: {
-    fetchData() {
-      transactionList().then(response => {
-        this.list = response.data.items.slice(0, 8);
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/dashboard/admin/components/mixins/resize.js b/WebSite/src/views/dashboard/admin/components/mixins/resize.js
deleted file mode 100644
index 53153bf..0000000
--- a/WebSite/src/views/dashboard/admin/components/mixins/resize.js
+++ /dev/null
@@ -1,65 +0,0 @@
-import { debounce } from "@/utils";
-
-export default {
-  data() {
-    return {
-      $_sidebarElm: null,
-      $_resizeHandler: null
-    };
-  },
-  mounted() {
-    this.$_resizeHandler = debounce(() => {
-      if (this.chart) {
-        this.chart.resize();
-      }
-    }, 100);
-    this.$_initResizeEvent();
-    this.$_initSidebarResizeEvent();
-  },
-  beforeDestroy() {
-    this.$_destroyResizeEvent();
-    this.$_destroySidebarResizeEvent();
-  },
-  // to fixed bug when cached by keep-alive
-  // https://github.com/PanJiaChen/vue-element-admin/issues/2116
-  activated() {
-    this.$_initResizeEvent();
-    this.$_initSidebarResizeEvent();
-  },
-  deactivated() {
-    this.$_destroyResizeEvent();
-    this.$_destroySidebarResizeEvent();
-  },
-  methods: {
-    // use $_ for mixins properties
-    // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential
-    $_initResizeEvent() {
-      window.addEventListener("resize", this.$_resizeHandler);
-    },
-    $_destroyResizeEvent() {
-      window.removeEventListener("resize", this.$_resizeHandler);
-    },
-    $_sidebarResizeHandler(e) {
-      if (e.propertyName === "width") {
-        this.$_resizeHandler();
-      }
-    },
-    $_initSidebarResizeEvent() {
-      this.$_sidebarElm = document.getElementsByClassName(
-        "sidebar-container"
-      )[0];
-      this.$_sidebarElm &&
-        this.$_sidebarElm.addEventListener(
-          "transitionend",
-          this.$_sidebarResizeHandler
-        );
-    },
-    $_destroySidebarResizeEvent() {
-      this.$_sidebarElm &&
-        this.$_sidebarElm.removeEventListener(
-          "transitionend",
-          this.$_sidebarResizeHandler
-        );
-    }
-  }
-};
diff --git a/WebSite/src/views/dashboard/admin/index.vue b/WebSite/src/views/dashboard/admin/index.vue
deleted file mode 100644
index ac41376..0000000
--- a/WebSite/src/views/dashboard/admin/index.vue
+++ /dev/null
@@ -1,145 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-    <github-corner class="github-corner" />
-
-    <panel-group @handleSetLineChartData="handleSetLineChartData" />
-
-    <el-row style="background:#fff;padding:16px 16px 0;margin-bottom:32px;">
-      <line-chart :chart-data="lineChartData" />
-    </el-row>
-
-    <el-row :gutter="32">
-      <el-col :xs="24" :sm="24" :lg="8">
-        <div class="chart-wrapper">
-          <raddar-chart />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="8">
-        <div class="chart-wrapper">
-          <pie-chart />
-        </div>
-      </el-col>
-      <el-col :xs="24" :sm="24" :lg="8">
-        <div class="chart-wrapper">
-          <bar-chart />
-        </div>
-      </el-col>
-    </el-row>
-
-    <el-row :gutter="8">
-      <el-col
-        :xs="{ span: 24 }"
-        :sm="{ span: 24 }"
-        :md="{ span: 24 }"
-        :lg="{ span: 12 }"
-        :xl="{ span: 12 }"
-        style="padding-right:8px;margin-bottom:30px;"
-      >
-        <transaction-table />
-      </el-col>
-      <el-col
-        :xs="{ span: 24 }"
-        :sm="{ span: 12 }"
-        :md="{ span: 12 }"
-        :lg="{ span: 6 }"
-        :xl="{ span: 6 }"
-        style="margin-bottom:30px;"
-      >
-        <todo-list />
-      </el-col>
-      <el-col
-        :xs="{ span: 24 }"
-        :sm="{ span: 12 }"
-        :md="{ span: 12 }"
-        :lg="{ span: 6 }"
-        :xl="{ span: 6 }"
-        style="margin-bottom:30px;"
-      >
-        <box-card />
-      </el-col>
-    </el-row>
-  </div>
-</template>
-
-<script>
-import GithubCorner from "@/components/GithubCorner";
-import PanelGroup from "./components/PanelGroup";
-import LineChart from "./components/LineChart";
-import RaddarChart from "./components/RaddarChart";
-import PieChart from "./components/PieChart";
-import BarChart from "./components/BarChart";
-import TransactionTable from "./components/TransactionTable";
-import TodoList from "./components/TodoList";
-import BoxCard from "./components/BoxCard";
-
-const lineChartData = {
-  newVisitis: {
-    expectedData: [100, 120, 161, 134, 105, 160, 165],
-    actualData: [120, 82, 91, 154, 162, 140, 145]
-  },
-  messages: {
-    expectedData: [200, 192, 120, 144, 160, 130, 140],
-    actualData: [180, 160, 151, 106, 145, 150, 130]
-  },
-  purchases: {
-    expectedData: [80, 100, 121, 104, 105, 90, 100],
-    actualData: [120, 90, 100, 138, 142, 130, 130]
-  },
-  shoppings: {
-    expectedData: [130, 140, 141, 142, 145, 150, 160],
-    actualData: [120, 82, 91, 154, 162, 140, 130]
-  }
-};
-
-export default {
-  name: "DashboardAdmin",
-  components: {
-    GithubCorner,
-    PanelGroup,
-    LineChart,
-    RaddarChart,
-    PieChart,
-    BarChart,
-    TransactionTable,
-    TodoList,
-    BoxCard
-  },
-  data() {
-    return {
-      lineChartData: lineChartData.newVisitis
-    };
-  },
-  methods: {
-    handleSetLineChartData(type) {
-      this.lineChartData = lineChartData[type];
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.dashboard-editor-container {
-  padding: 32px;
-  background-color: rgb(240, 242, 245);
-  position: relative;
-
-  .github-corner {
-    position: absolute;
-    top: 0px;
-    border: 0;
-    right: 0;
-  }
-
-  .chart-wrapper {
-    background: #fff;
-    padding: 16px 16px 0;
-    margin-bottom: 32px;
-  }
-}
-
-@media (max-width: 1024px) {
-  .chart-wrapper {
-    padding: 8px;
-  }
-}
-</style>
diff --git a/WebSite/src/views/dashboard/editor/index.vue b/WebSite/src/views/dashboard/editor/index.vue
deleted file mode 100644
index 61de4ce..0000000
--- a/WebSite/src/views/dashboard/editor/index.vue
+++ /dev/null
@@ -1,77 +0,0 @@
-<template>
-  <div class="dashboard-editor-container">
-    <div class=" clearfix">
-      <pan-thumb :image="avatar" style="float: left">
-        Your roles:
-        <span v-for="item in roles" :key="item" class="pan-info-roles">{{
-          item
-        }}</span>
-      </pan-thumb>
-      <github-corner
-        style="position: absolute; top: 0px; border: 0; right: 0;"
-      />
-      <div class="info-container">
-        <span class="display_name">{{ name }}</span>
-        <span style="font-size:20px;padding-top:20px;display:inline-block;"
-          >Editor's Dashboard</span
-        >
-      </div>
-    </div>
-    <div>
-      <img :src="emptyGif" class="emptyGif" />
-    </div>
-  </div>
-</template>
-
-<script>
-import { mapGetters } from "vuex";
-import PanThumb from "@/components/PanThumb";
-import GithubCorner from "@/components/GithubCorner";
-
-export default {
-  name: "DashboardEditor",
-  components: { PanThumb, GithubCorner },
-  data() {
-    return {
-      emptyGif:
-        "https://wpimg.wallstcn.com/0e03b7da-db9e-4819-ba10-9016ddfdaed3"
-    };
-  },
-  computed: {
-    ...mapGetters(["name", "avatar", "roles"])
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.emptyGif {
-  display: block;
-  width: 45%;
-  margin: 0 auto;
-}
-
-.dashboard-editor-container {
-  background-color: #e3e3e3;
-  min-height: 100vh;
-  padding: 50px 60px 0px;
-  .pan-info-roles {
-    font-size: 12px;
-    font-weight: 700;
-    color: #333;
-    display: block;
-  }
-  .info-container {
-    position: relative;
-    margin-left: 190px;
-    height: 150px;
-    line-height: 200px;
-    .display_name {
-      font-size: 48px;
-      line-height: 48px;
-      color: #212121;
-      position: absolute;
-      top: 25px;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/views/dashboard/index.vue b/WebSite/src/views/dashboard/index.vue
deleted file mode 100644
index 1f4d5ba..0000000
--- a/WebSite/src/views/dashboard/index.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--
- * @Descripttion:
- * @Author: dong
- * @Date: 2020-04-21 18:54:21
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-05-12 08:28:53
- -->
-<template>
-  <div class="dashboard-container">
-    <component :is="currentRole" />
-  </div>
-</template>
-
-<script>
-import { mapGetters } from "vuex";
-import adminDashboard from "./admin";
-import editorDashboard from "./editor";
-
-export default {
-  name: "Dashboard",
-  components: { adminDashboard, editorDashboard },
-  data() {
-    return {
-      currentRole: "adminDashboard"
-    };
-  },
-  computed: {
-    ...mapGetters(["roles"])
-  },
-  created() {
-    if (!this.roles.includes("admin")) {
-      this.currentRole = "editorDashboard";
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/documentation/index.vue b/WebSite/src/views/documentation/index.vue
deleted file mode 100644
index d3d5e32..0000000
--- a/WebSite/src/views/documentation/index.vue
+++ /dev/null
@@ -1,103 +0,0 @@
-<template>
-  <div class="app-container documentation-container">
-    <a
-      class="document-btn"
-      target="_blank"
-      href="https://panjiachen.github.io/vue-element-admin-site/"
-      >Documentation</a
-    >
-    <a
-      class="document-btn"
-      target="_blank"
-      href="https://github.com/PanJiaChen/vue-element-admin/"
-      >Github Repository</a
-    >
-    <a
-      class="document-btn"
-      target="_blank"
-      href="https://panjiachen.gitee.io/vue-element-admin-site/zh/"
-      >国内文档</a
-    >
-    <dropdown-menu class="document-btn" :items="articleList" title="系列文章" />
-    <a
-      class="document-btn"
-      target="_blank"
-      href="https://panjiachen.github.io/vue-element-admin-site/zh/job/"
-      >内推招聘</a
-    >
-  </div>
-</template>
-
-<script>
-import DropdownMenu from "@/components/Share/DropdownMenu";
-
-export default {
-  name: "Documentation",
-  components: { DropdownMenu },
-  data() {
-    return {
-      articleList: [
-        {
-          title: "基础篇",
-          href: "https://juejin.im/post/59097cd7a22b9d0065fb61d2"
-        },
-        {
-          title: "登录权限篇",
-          href: "https://juejin.im/post/591aa14f570c35006961acac"
-        },
-        {
-          title: "实战篇",
-          href: "https://juejin.im/post/593121aa0ce4630057f70d35"
-        },
-        {
-          title: "vue-admin-template 篇",
-          href: "https://juejin.im/post/595b4d776fb9a06bbe7dba56"
-        },
-        {
-          title: "v4.0 篇",
-          href: "https://juejin.im/post/5c92ff94f265da6128275a85"
-        },
-        {
-          title: "自行封装 component",
-          href: "https://segmentfault.com/a/1190000009090836"
-        },
-        {
-          title: "优雅的使用 icon",
-          href: "https://juejin.im/post/59bb864b5188257e7a427c09"
-        },
-        {
-          title: "webpack4(上)",
-          href: "https://juejin.im/post/59bb864b5188257e7a427c09"
-        },
-        {
-          title: "webpack4(下)",
-          href: "https://juejin.im/post/5b5d6d6f6fb9a04fea58aabc"
-        }
-      ]
-    };
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.documentation-container {
-  margin: 50px;
-  display: flex;
-  flex-wrap: wrap;
-  justify-content: space-evenly;
-
-  .document-btn {
-    flex-shrink: 0;
-    display: block;
-    cursor: pointer;
-    background: black;
-    color: white;
-    height: 60px;
-    width: 200px;
-    margin-bottom: 16px;
-    line-height: 60px;
-    font-size: 20px;
-    text-align: center;
-  }
-}
-</style>
diff --git a/WebSite/src/views/error-log/components/ErrorTestA.vue b/WebSite/src/views/error-log/components/ErrorTestA.vue
deleted file mode 100644
index f284637..0000000
--- a/WebSite/src/views/error-log/components/ErrorTestA.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-<template>
-  <div>
-    <!--error code-->
-    {{ a.a }}
-    <!--error code-->
-  </div>
-</template>
-
-<script>
-export default {
-  name: "ErrorTestA"
-};
-</script>
diff --git a/WebSite/src/views/error-log/components/ErrorTestB.vue b/WebSite/src/views/error-log/components/ErrorTestB.vue
deleted file mode 100644
index 24a3cd8..0000000
--- a/WebSite/src/views/error-log/components/ErrorTestB.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-<template>
-  <div />
-</template>
-
-<script>
-export default {
-  created() {
-    this.b = b // eslint-disable-line
-  }
-};
-</script>
diff --git a/WebSite/src/views/error-log/index.vue b/WebSite/src/views/error-log/index.vue
deleted file mode 100644
index fd1afb4..0000000
--- a/WebSite/src/views/error-log/index.vue
+++ /dev/null
@@ -1,42 +0,0 @@
-<template>
-  <div class="errPage-container">
-    <ErrorA />
-    <ErrorB />
-    <h3>Please click the bug icon in the upper right corner</h3>
-    <aside>
-      Now the management system are basically the form of the spa, it enhances
-      the user experience, but it also increases the possibility of page
-      problems, a small negligence may lead to the entire page deadlock.
-      Fortunately Vue provides a way to catch handling exceptions, where you can
-      handle errors or report exceptions.
-      <a
-        target="_blank"
-        class="link-type"
-        href="https://panjiachen.github.io/vue-element-admin-site/guide/advanced/error.html"
-      >
-        Document introduction
-      </a>
-    </aside>
-    <a href="#">
-      <img
-        src="https://wpimg.wallstcn.com/360e4842-4db5-42d0-b078-f9a84a825546.gif"
-      />
-    </a>
-  </div>
-</template>
-
-<script>
-import ErrorA from "./components/ErrorTestA";
-import ErrorB from "./components/ErrorTestB";
-
-export default {
-  name: "ErrorLog",
-  components: { ErrorA, ErrorB }
-};
-</script>
-
-<style scoped>
-.errPage-container {
-  padding: 30px;
-}
-</style>
diff --git a/WebSite/src/views/error-page/401.vue b/WebSite/src/views/error-page/401.vue
index dd7534f..62dbf1b 100644
--- a/WebSite/src/views/error-page/401.vue
+++ b/WebSite/src/views/error-page/401.vue
@@ -1,30 +1,22 @@
+<!--
+ * @Description: 
+ * @Autor: dongjunhua
+ * @Date: 2021-01-20 16:39:21
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-20 20:52:00
+-->
 <template>
   <div class="errPage-container">
-    <el-button icon="el-icon-arrow-left" class="pan-back-btn" @click="back">
-      返回
-    </el-button>
     <el-row>
       <el-col :span="12">
         <h1 class="text-jumbo text-ginormous">
           Oops!
         </h1>
-        gif来源<a href="https://zh.airbnb.com/" target="_blank">airbnb</a> 页面
-        <h2>你没有权限去该页面</h2>
-        <h6>如有不满请联系你领导</h6>
-        <ul class="list-unstyled">
-          <li>或者你可以去:</li>
-          <li class="link-type">
-            <router-link to="/dashboard">
-              回首页
-            </router-link>
-          </li>
-          <li class="link-type">
-            <a href="https://www.taobao.com/">随便看看</a>
-          </li>
-          <li>
-            <a href="#" @click.prevent="dialogVisible = true">点我看图</a>
-          </li>
-        </ul>
+        <h2>You have no permission !</h2>
+        <h5>Perhaps you should contact the administrator</h5>
+        <el-button size="large" class="pan-back-btn" @click="goBack">
+          Go Back
+        </el-button>
       </el-col>
       <el-col :span="12">
         <img
@@ -35,32 +27,25 @@
         />
       </el-col>
     </el-row>
-    <el-dialog :visible.sync="dialogVisible" title="随便看">
-      <img :src="ewizardClap" class="pan-img" />
-    </el-dialog>
   </div>
 </template>
 
 <script>
-import errGif from "@/assets/401_images/401.gif";
+import errGif from '@/assets/401_images/401.gif';
 
 export default {
-  name: "Page401",
+  name: 'Page401',
   data() {
     return {
-      errGif: errGif + "?" + +new Date(),
+      errGif: errGif + '?' + +new Date(),
       ewizardClap:
-        "https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646",
+        'https://wpimg.wallstcn.com/007ef517-bafd-4066-aae4-6883632d9646',
       dialogVisible: false
     };
   },
   methods: {
-    back() {
-      if (this.$route.query.noGoBack) {
-        this.$router.push({ path: "/dashboard" });
-      } else {
-        this.$router.go(-1);
-      }
+    goBack() {
+      this.$router.go(-1);
     }
   }
 };
@@ -70,7 +55,8 @@ export default {
 .errPage-container {
   width: 800px;
   max-width: 100%;
-  margin: 100px auto;
+  margin: 0 auto;
+  padding-top: 160px;
   .pan-back-btn {
     background: #008489;
     color: #fff;
diff --git a/WebSite/src/views/error-page/404.vue b/WebSite/src/views/error-page/404.vue
index cb5c47c..291b4cd 100644
--- a/WebSite/src/views/error-page/404.vue
+++ b/WebSite/src/views/error-page/404.vue
@@ -39,7 +39,7 @@
           Please check that the URL you entered is correct, or click the button
           below to return to the homepage.
         </div>
-        <a href="" class="bullshit__return-home">Back to home</a>
+        <a @click="goBack" class="bullshit__return-home">Go Back</a>
       </div>
     </div>
   </div>
@@ -47,10 +47,15 @@
 
 <script>
 export default {
-  name: "Page404",
+  name: 'Page404',
   computed: {
     message() {
-      return "The webmaster said that you can not enter this page...";
+      return 'The webmaster said that you can not enter this page...';
+    }
+  },
+  methods: {
+    goBack() {
+      this.$router.go(-1);
     }
   }
 };
diff --git a/WebSite/src/views/example/button/index.vue b/WebSite/src/views/example/button/index.vue
deleted file mode 100644
index 1fb98bd..0000000
--- a/WebSite/src/views/example/button/index.vue
+++ /dev/null
@@ -1,160 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-07-15 16:50:12
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-09-13 14:28:05
--->
-<template>
-  <div class="app-container">
-    <el-card shadow="hover">
-      <el-row class="row">
-        <span class="text-title">基本按钮类型</span>
-      </el-row>
-      <el-row class="row">
-        <el-button>默认按钮</el-button>
-        <el-button type="primary" plain>主要按钮</el-button>
-        <el-button type="success" plain>成功按钮</el-button>
-        <el-button type="info" plain>信息按钮</el-button>
-        <el-button type="warning" plain>警告按钮</el-button>
-        <el-button type="danger" plain>危险按钮</el-button>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">常见按钮示例</span>
-      </el-row>
-      <el-row class="row">
-        <el-table :data="tableData" style="width: 100%" stripe>
-          <el-table-column prop="type" label="类型"> </el-table-column>
-          <el-table-column prop="text" label="名称"> </el-table-column>
-          <el-table-column prop="icon" label="图标"> </el-table-column>
-          <el-table-column label="展示">
-            <template slot-scope="scope">
-              <el-button
-                :type="scope.row.type"
-                :icon="scope.row.icon"
-                :plain="scope.row.plain"
-                >{{ scope.row.text }}</el-button
-              >
-            </template>
-          </el-table-column>
-        </el-table>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">注意事项</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              如无特殊情况,所有按钮默认 size 为
-              mini(已全局设置,无需单独添加)
-            </li>
-            <li>
-              如无特殊情况,除 “取消” 和 “确定” 外的所有按钮默认添加 plain
-              属性(朴素样式)
-            </li>
-            <li>
-              在常见按钮中已列出的按钮请遵循对应样式,未列出的按钮团队成员间应达成共识,保持样式统一
-            </li>
-            <li>查询条件区域的按钮须单独另起一行</li>
-          </ul>
-        </text-field>
-      </el-row>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import TextField from "@/components/TextField";
-export default {
-  name: "Button",
-  components: { TextField },
-  data() {
-    return {
-      tableData: [
-        {
-          type: "default",
-          text: "查询",
-          icon: "el-icon-search",
-          plain: true
-        },
-        {
-          type: "default",
-          text: "查看",
-          icon: "el-icon-document-copy",
-          plain: true
-        },
-        {
-          type: "primary",
-          text: "新增",
-          icon: "el-icon-plus",
-          plain: true
-        },
-        {
-          type: "primary",
-          text: "修改",
-          icon: "el-icon-edit",
-          plain: true
-        },
-        {
-          type: "danger",
-          text: "删除",
-          icon: "el-icon-delete",
-          plain: true
-        },
-        {
-          type: "danger",
-          text: "重置",
-          icon: "el-icon-refresh-left",
-          plain: true
-        },
-        {
-          type: "info",
-          text: "上传",
-          icon: "el-icon-upload2",
-          plain: true
-        },
-        {
-          type: "info",
-          text: "下载",
-          icon: "el-icon-download",
-          plain: true
-        },
-        {
-          type: "default",
-          text: "取消",
-          icon: "",
-          plain: false
-        },
-        {
-          type: "primary",
-          text: "确定",
-          icon: "",
-          plain: false
-        }
-      ]
-    };
-  }
-};
-</script>
-
-<style scoped>
-.text-title {
-  display: inline-block;
-  font-size: 16px;
-  font-weight: 400;
-  color: #303133;
-}
-.row {
-  margin-bottom: 20px;
-}
-ul.note {
-  padding: 0 0 0 10px !important;
-  margin: 0 !important;
-}
-ul.note > li {
-  line-height: 2;
-  font-size: 14px;
-  color: #606266;
-}
-</style>
diff --git a/WebSite/src/views/example/dialog/components/Detail.vue b/WebSite/src/views/example/dialog/components/Detail.vue
deleted file mode 100644
index 779d188..0000000
--- a/WebSite/src/views/example/dialog/components/Detail.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-<!--
- * @Descripttion: 
- * @Author: dongjunhua
- * @Date: 2020-08-20 12:48:20
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-08-20 12:59:30
--->
-<template>
-  <div>
-    <span>这是详情页面1</span>
-    <div class="footer-container">
-      <el-button type="primary" @click="handleConfirm">确 定</el-button>
-    </div>
-  </div>
-</template>
-
-<script>
-export default {
-  name: "Detail",
-  props: {
-    visible: {
-      type: Boolean
-    }
-  },
-  methods: {
-    handleConfirm() {
-      this.$emit("update:visible", false);
-    }
-  }
-};
-</script>
-
-<style scoped>
-.footer-container {
-  width: 100%;
-  margin-top: 20px;
-  text-align: right;
-}
-</style>
diff --git a/WebSite/src/views/example/dialog/index.vue b/WebSite/src/views/example/dialog/index.vue
deleted file mode 100644
index 9fe4ec0..0000000
--- a/WebSite/src/views/example/dialog/index.vue
+++ /dev/null
@@ -1,116 +0,0 @@
-<!--
- * @Descripttion: 
- * @Author: dongjunhua
- * @Date: 2020-08-16 14:45:34
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-18 14:29:36
--->
-<template>
-  <div class="app-container">
-    <jump-dialog :visible.sync="dialogVisible2" :activeName="activeName">
-      <el-card shadow="hover" slot="layout">
-        <el-row class="row">
-          <span class="text-title">示例</span>
-        </el-row>
-        <el-row>
-          <el-button @click="dialogVisible = true">点击弹出对话框</el-button>
-          <el-button @click="handleOpenJump1">点击跳转对话框1</el-button>
-          <el-button @click="handleOpenJump2">点击跳转对话框2</el-button>
-        </el-row>
-        <el-row class="row" style="margin-top:30px">
-          <span class="text-title">注意事项</span>
-        </el-row>
-        <el-row>
-          <text-field>
-            <ul class="note">
-              <li>
-                对于 pc 端页面,默认使用 el-dialog
-                组件,在右下角放置取消和确定按钮(按钮文字描述根据实际业务场景可进行修改,按钮必须放在名称为
-                footer 的插槽中)
-              </li>
-              <li>
-                应根据内容的实际情况设置 el-dialog 的百分比宽度
-              </li>
-              <li>
-                对于手机端页面,默认使用 el-drawer
-                组件,方向自下往上开启,在底部防止取消和确定按钮
-              </li>
-              <li>
-                对话框中内容较多时,可使用自定义组件 jump-dialog
-                进行整页跳转,以下是该组件的使用说明:<br />
-                (1) 将原页面内容放置在名为 layout 的插槽中<br />
-                (2) 每有一个新的跳转对话框,需在 jump-dialog 中添加一个
-                jump-dialog-item 子组件<br />
-                (3) 子组件接收 name 和 label 作为参数(必须),其中 label
-                会作为跳转对话框的标题展示<br />
-                (4)
-                一般情况下,应在跳转对话框的右下角放置确定按钮(跳转对话框自带返回故不需要取消按钮)
-              </li>
-            </ul>
-          </text-field>
-        </el-row>
-      </el-card>
-      <jump-dialog-item name="first" label="详情页面1">
-        <detail :visible.sync="dialogVisible2"></detail>
-      </jump-dialog-item>
-      <jump-dialog-item name="second" label="详情页面2">
-        <span>这是详情页面2</span>
-      </jump-dialog-item>
-    </jump-dialog>
-    <el-dialog title="编辑" :visible.sync="dialogVisible" width="30%">
-      <span>这是一段信息</span>
-      <span slot="footer" class="dialog-footer">
-        <el-button @click="dialogVisible = false">取 消</el-button>
-        <el-button type="primary" @click="dialogVisible = false"
-          >确 定</el-button
-        >
-      </span>
-    </el-dialog>
-  </div>
-</template>
-<script>
-import Detail from "./components/Detail";
-import TextField from "@/components/TextField";
-export default {
-  name: "Dialog",
-  components: { Detail, TextField },
-  data() {
-    return {
-      dialogVisible: false,
-      dialogVisible2: false,
-      activeName: null
-    };
-  },
-  methods: {
-    handleOpenJump1() {
-      this.dialogVisible2 = true;
-      this.activeName = "first";
-    },
-    handleOpenJump2() {
-      this.dialogVisible2 = true;
-      this.activeName = "second";
-    }
-  }
-};
-</script>
-
-<style scoped>
-.text-title {
-  display: inline-block;
-  font-size: 16px;
-  font-weight: 400;
-  color: #303133;
-}
-.row {
-  margin-bottom: 20px;
-}
-ul.note {
-  padding: 0 0 0 10px !important;
-  margin: 0 !important;
-}
-ul.note > li {
-  line-height: 2;
-  font-size: 14px;
-  color: #606266;
-}
-</style>
diff --git a/WebSite/src/views/example/form.vue b/WebSite/src/views/example/form.vue
deleted file mode 100644
index 8ab770c..0000000
--- a/WebSite/src/views/example/form.vue
+++ /dev/null
@@ -1,205 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-07-15 16:50:12
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-18 14:23:16
--->
-<template>
-  <div class="app-container">
-    <el-card shadow="hover">
-      <el-row class="row">
-        <span class="text-title">示例</span>
-      </el-row>
-      <el-row class="row">
-        <el-col :sm="24" :md="12" :lg="6">
-          <el-form
-            :model="ruleForm"
-            :rules="rules"
-            ref="ruleForm"
-            label-width="100px"
-            class="demo-ruleForm"
-            label-position="top"
-          >
-            <el-form-item label="活动名称" prop="name">
-              <el-input v-model="ruleForm.name"></el-input>
-            </el-form-item>
-            <el-form-item label="活动区域" prop="region">
-              <el-select v-model="ruleForm.region" placeholder="请选择活动区域">
-                <el-option label="区域一" value="shanghai"></el-option>
-                <el-option label="区域二" value="beijing"></el-option>
-              </el-select>
-            </el-form-item>
-            <el-form-item label="活动时间" required>
-              <el-col :span="11">
-                <el-form-item prop="date1">
-                  <el-date-picker
-                    type="date"
-                    placeholder="选择日期"
-                    v-model="ruleForm.date1"
-                    style="width: 100%;"
-                  ></el-date-picker>
-                </el-form-item>
-              </el-col>
-              <el-col class="line" :span="2">-</el-col>
-              <el-col :span="11">
-                <el-form-item prop="date2">
-                  <el-time-picker
-                    placeholder="选择时间"
-                    v-model="ruleForm.date2"
-                    style="width: 100%;"
-                  ></el-time-picker>
-                </el-form-item>
-              </el-col>
-            </el-form-item>
-            <el-form-item label="即时配送" prop="delivery">
-              <el-switch v-model="ruleForm.delivery"></el-switch>
-            </el-form-item>
-            <el-form-item label="活动性质" prop="type">
-              <el-checkbox-group v-model="ruleForm.type">
-                <el-checkbox
-                  label="美食/餐厅线上活动"
-                  name="type"
-                ></el-checkbox>
-                <el-checkbox label="地推活动" name="type"></el-checkbox>
-                <el-checkbox label="线下主题活动" name="type"></el-checkbox>
-                <el-checkbox label="单纯品牌曝光" name="type"></el-checkbox>
-              </el-checkbox-group>
-            </el-form-item>
-            <el-form-item label="特殊资源" prop="resource">
-              <el-radio-group v-model="ruleForm.resource">
-                <el-radio label="线上品牌商赞助"></el-radio>
-                <el-radio label="线下场地免费"></el-radio>
-              </el-radio-group>
-            </el-form-item>
-            <el-form-item label="活动形式" prop="desc">
-              <el-input type="textarea" v-model="ruleForm.desc"></el-input>
-            </el-form-item>
-            <el-form-item>
-              <el-button type="primary" @click="submitForm('ruleForm')"
-                >立即创建</el-button
-              >
-              <el-button @click="resetForm('ruleForm')">重置</el-button>
-            </el-form-item>
-          </el-form>
-        </el-col>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">注意事项</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              应根据具体目标和制约因素,选择最佳的标签对齐方式(例如:当标签文字长度较短时可使用左对齐或右对齐,当长度较长时可使用顶部对齐),但整个项目的对齐方式应尽可能保持一致
-            </li>
-            <li>
-              请根据实际业务需求在提交前对表单项目进行必要的校验和提示
-            </li>
-            <li>
-              如表单处于对话框中,则表单的提交应交由对话框的确定按钮触发
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import TextField from "@/components/TextField";
-export default {
-  name: "Form",
-  components: { TextField },
-  data() {
-    return {
-      ruleForm: {
-        name: "",
-        region: "",
-        date1: "",
-        date2: "",
-        delivery: false,
-        type: [],
-        resource: "",
-        desc: ""
-      },
-      rules: {
-        name: [
-          { required: true, message: "请输入活动名称", trigger: "blur" },
-          { min: 3, max: 5, message: "长度在 3 到 5 个字符", trigger: "blur" }
-        ],
-        region: [
-          { required: true, message: "请选择活动区域", trigger: "change" }
-        ],
-        date1: [
-          {
-            type: "date",
-            required: true,
-            message: "请选择日期",
-            trigger: "change"
-          }
-        ],
-        date2: [
-          {
-            type: "date",
-            required: true,
-            message: "请选择时间",
-            trigger: "change"
-          }
-        ],
-        type: [
-          {
-            type: "array",
-            required: true,
-            message: "请至少选择一个活动性质",
-            trigger: "change"
-          }
-        ],
-        resource: [
-          { required: true, message: "请选择活动资源", trigger: "change" }
-        ],
-        desc: [{ required: true, message: "请填写活动形式", trigger: "blur" }]
-      }
-    };
-  },
-  methods: {
-    submitForm(formName) {
-      this.$refs[formName].validate(valid => {
-        if (valid) {
-          alert("submit!");
-        } else {
-          console.log("error submit!!");
-          return false;
-        }
-      });
-    },
-    resetForm(formName) {
-      this.$refs[formName].resetFields();
-    }
-  }
-};
-</script>
-
-<style scoped>
-.text-title {
-  display: inline-block;
-  font-size: 16px;
-  font-weight: 400;
-  color: #303133;
-}
-.row {
-  margin-bottom: 20px;
-}
-ul.note {
-  padding: 0 0 0 10px !important;
-  margin: 0 !important;
-}
-ul.note > li {
-  line-height: 2;
-  font-size: 14px;
-  color: #606266;
-}
-.line {
-  text-align: center;
-}
-</style>
diff --git a/WebSite/src/views/example/icon.vue b/WebSite/src/views/example/icon.vue
deleted file mode 100644
index eb9b2ec..0000000
--- a/WebSite/src/views/example/icon.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-07-15 16:50:12
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-18 13:47:36
--->
-<template>
-  <div class="app-container">
-    <el-card shadow="hover">
-      <el-row class="row">
-        <span class="text-title">图标</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              推荐使用默认和 element 两种图标样式
-            </li>
-            <li>
-              如有需要可引入外部图标库,但需注意保持风格一致
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-      <el-row style="margin-top:20px">
-        <icons></icons>
-      </el-row>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import TextField from "@/components/TextField";
-import Icons from "@/views/icons";
-export default {
-  name: "Icon",
-  components: { TextField, Icons }
-};
-</script>
-
-<style scoped>
-.text-title {
-  display: inline-block;
-  font-size: 16px;
-  font-weight: 400;
-  color: #303133;
-}
-.row {
-  margin-bottom: 20px;
-}
-ul.note {
-  padding: 0 0 0 10px !important;
-  margin: 0 !important;
-}
-ul.note > li {
-  line-height: 2;
-  font-size: 14px;
-  color: #606266;
-}
-</style>
diff --git a/WebSite/src/views/example/index.vue b/WebSite/src/views/example/index.vue
deleted file mode 100644
index 2168f80..0000000
--- a/WebSite/src/views/example/index.vue
+++ /dev/null
@@ -1,350 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-07-15 16:50:12
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-18 15:17:46
--->
-<template>
-  <div class="app-container" style="position:relative">
-    <div class="tag-outer">
-      <div style="color:#ffffff"><b>ver</b></div>
-      <div style="color:#ffffff">
-        <b>1.0</b>
-      </div>
-    </div>
-    <el-card shadow="hover">
-      <el-row class="row">
-        <span class="text-title">概述</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              此规范为前端 UI 规范,基于 element-ui 制定,其目的是保证项目 UI
-              效果的一致性 ,解决以往开发中项目组不同成员间样式不统一的问题
-            </li>
-            <li>
-              默认情况下,前端开发人员在开发过程中需遵循规范所述内容进行页面开发
-            </li>
-            <li>
-              如当前项目有特殊的样式需求
-              ,则可经由项目负责人和前端开发人员共同讨论制定 UI
-              样式以替代默认样式规范
-            </li>
-            <li>
-              此规范可能会随时间进行更迭,启动新项目时请参照当前最新规范
-            </li>
-            <li>
-              element-ui 组件的使用,请参阅官网
-              <a
-                href="https://element.eleme.cn/#/zh-CN/component/quickstart"
-                target="_blank"
-                style="color:#409EFF"
-                >https://element.eleme.cn/#/zh-CN/component/quickstart</a
-              >
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">字体</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              为了在不同环境下都能达到最佳效果,我们默认使用以下字体:<br />
-              <b>Helvetica Neue</b>, <b>Helvetica</b>, <b>PingFang SC</b>,
-              <b>Hiragino Sans GB</b>, <b>Microsoft YaHei</b>, <b>Arial</b>,
-              <b>sans-serif</b>
-            </li>
-            <li>
-              以上字体已在全局 css 中设置,如无特殊情况禁止使用其他字体
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">字号</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              默认情况下,我们对字号进行以下规定:
-              <br /><span style="font-size:12px; line-height:2"
-                ><b>12px</b> - 用于辅助性提示内容</span
-              ><br /><span style="font-size:14px; line-height:2"
-                ><b>14px</b> - 用于正文内容</span
-              ><br /><span style="font-size:16px; line-height:2"
-                ><b>16px</b> - 用于标题</span
-              >
-            </li>
-            <li>
-              字号根据实际情况可以酌情考虑,但只允许使用偶数字号,且字号规格尽量控制在3种以内
-            </li>
-            <li>
-              字体的行间距一般为字号的1.5 - 2倍,推荐使用2倍
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">颜色</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              默认情况下,我们对字体和边框的颜色进行以下规定:<br />
-              <b>#303133</b> - 用于主要文字(标题) <br /><b>#606266</b> -
-              用于常规文字(正文) <br /><b>#909399</b> -
-              用于次要文字(辅助)<br />
-              <b>#e4ebed</b> - 一级边框(外层) <br /><b>#ebeef5</b> -
-              二级边框(内层)
-            </li>
-            <li>任何时候禁止使用纯黑色 <b>#000000</b></li>
-          </ul>
-        </text-field>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">交互组件的使用</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              默认情况下,我们对常用交互组件的使用场合进行以下规定:<br />
-              <b>el-input</b> - 默认输入框,适合需要文字输入的查询条件或内容<br />
-              <el-input
-                v-model="input"
-                placeholder="请输入内容"
-                style="width:200px; margin:10px 0"
-              ></el-input>
-              <br /><b>el-select</b> - 用于需要进行选择的查询条件或内容 <br />
-              <el-select
-                v-model="value"
-                placeholder="请选择"
-                style="width:200px; margin:10px 0"
-              >
-                <el-option
-                  v-for="item in options"
-                  :key="item.value"
-                  :label="item.label"
-                  :value="item.value"
-                >
-                </el-option>
-              </el-select>
-              <br />
-              <b>el-date-picker</b>
-              - 用于日期类型的查询条件或内容<br />
-              <el-date-picker
-                v-model="value1"
-                type="date"
-                placeholder="选择日期"
-                style="width:200px; margin:10px 0"
-              >
-              </el-date-picker
-              ><br />
-              <b>el-time-select</b> - 用于时间类型的查询条件或内容 <br />
-              <el-time-select
-                v-model="value"
-                :picker-options="{
-                  start: '08:30',
-                  step: '00:15',
-                  end: '18:30'
-                }"
-                placeholder="选择时间"
-                style="width:200px; margin:10px 0"
-              >
-              </el-time-select>
-              <br />
-              <b>el-checkbox</b>
-              -
-              单独使用表示两种状态之间的切换,多个使用表示一组备选项中进行多选<br />
-              <el-row style="margin:10px 0">
-                <el-checkbox-group v-model="checkList">
-                  <el-checkbox label="复选框 A"></el-checkbox>
-                  <el-checkbox label="复选框 B"></el-checkbox>
-                  <el-checkbox label="复选框 C"></el-checkbox>
-                  <el-checkbox label="禁用" disabled></el-checkbox>
-                  <el-checkbox label="选中且禁用" disabled></el-checkbox>
-                </el-checkbox-group>
-              </el-row>
-              <b>el-radio</b>
-              - 不允许单独使用,多个使用表示一组备选项中进行单选<br />
-              <el-row style="margin:10px 0">
-                <el-radio-group v-model="radio">
-                  <el-radio :label="3">单选框 A</el-radio>
-                  <el-radio :label="6">单选框 B</el-radio>
-                  <el-radio :label="9">单选框 C</el-radio>
-                </el-radio-group>
-              </el-row>
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">消息提示</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              我们使用 message
-              组件进行消息提示,下面是4种提示类型的使用场合:<br />
-              <b>message</b> - 默认,通常用于一般提示信息
-              <el-button type="text" @click="openInfo">点击</el-button> <br /><b
-                >message<span style="color:#67C23A">.success</span></b
-              >
-              - 成功,用于表示操作或行为达成
-              <el-button type="text" @click="openSuccess">点击</el-button
-              ><br /><b>message<span style="color:#E6A23C">.warning</span></b> -
-              警告,用于表示操作或行为达成但存在潜在风险或可能未完全达到预期
-              <el-button type="text" @click="openWarning">点击</el-button><br />
-              <b>message<span style="color:#F56C6C">.error</span></b> -
-              错误,用于表示操作或行为不允许或未达成
-              <el-button type="text" @click="openError">点击</el-button>
-            </li>
-            <li>
-              所有弹出框默认显示时间5秒,且需带有关闭按钮
-            </li>
-            <li>
-              对于 http 请求的返回结果,axios
-              实例中已添加全局错误提示,一般情况下无需额外处理(成功提示仍需手动添加)
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">其他注意事项</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              任何不可逆操作在执行前必须弹出确认框
-            </li>
-            <li>
-              事件触发调用 http
-              请求到返回结果这段时间内,应防止事件再次被触发(手段包括但不限于添加
-              loading、设置 disabled 等)
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import TextField from "@/components/TextField";
-export default {
-  name: "Exmple",
-  components: { TextField },
-  data() {
-    return {
-      input: "",
-      options: [
-        {
-          value: "选项1",
-          label: "黄金糕"
-        },
-        {
-          value: "选项2",
-          label: "双皮奶"
-        },
-        {
-          value: "选项3",
-          label: "蚵仔煎"
-        },
-        {
-          value: "选项4",
-          label: "龙须面"
-        },
-        {
-          value: "选项5",
-          label: "北京烤鸭"
-        }
-      ],
-      value1: "",
-      value: "",
-      checkList: ["选中且禁用", "复选框 A"],
-      radio: 3
-    };
-  },
-  methods: {
-    openInfo() {
-      this.$message({
-        showClose: true,
-        message: "这是一条消息提示"
-      });
-    },
-
-    openSuccess() {
-      this.$message({
-        showClose: true,
-        message: "恭喜你,这是一条成功消息",
-        type: "success"
-      });
-    },
-
-    openWarning() {
-      this.$message({
-        showClose: true,
-        message: "警告哦,这是一条警告消息",
-        type: "warning"
-      });
-    },
-
-    openError() {
-      this.$message({
-        showClose: true,
-        message: "错了哦,这是一条错误消息",
-        type: "error"
-      });
-    }
-  }
-};
-</script>
-
-<style scoped>
-.tag-outer {
-  display: flex;
-  flex-direction: column;
-  justify-content: center;
-  align-items: center;
-  position: absolute;
-  top: 20px;
-  right: 40px;
-  width: 40px;
-  height: 40px;
-  font-size: 12px;
-  background-color: #409eff;
-  border-right: 5px solid rgb(121, 187, 255);
-  border-left: 5px solid rgb(121, 187, 255);
-  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
-}
-</style>
-
-<style scoped>
-.text-title {
-  display: inline-block;
-  font-size: 16px;
-  font-weight: 400;
-  color: #303133;
-}
-.row {
-  margin-bottom: 20px;
-}
-ul.note {
-  padding: 0 0 0 10px !important;
-  margin: 0 !important;
-}
-ul.note > li {
-  line-height: 2;
-  font-size: 14px;
-  color: #606266;
-}
-</style>
diff --git a/WebSite/src/views/example/layout.vue b/WebSite/src/views/example/layout.vue
deleted file mode 100644
index fe49f81..0000000
--- a/WebSite/src/views/example/layout.vue
+++ /dev/null
@@ -1,187 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-07-15 16:50:12
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-17 10:01:43
--->
-<template>
-  <div class="app-container">
-    <el-card shadow="hover">
-      <el-row class="row">
-        <span class="text-title">布局指导原则</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              任何时候,页面组件最外层应使用 div 作为最外层容器,且 class 为
-              app-container(该样式已在全局 css 中定义)
-            </li>
-            <li>
-              关于总体布局(例如上下左右区块,元素的内容和位置),开发人员应参照
-              UI 设计进行
-            </li>
-            <li>
-              以展示的内容性质划分区域(例如查询条件、查询结果),每个区域使用
-              el-card 组件作为外部容器
-            </li>
-            <li>
-              每个 el-card 中的内容,应使用 el-row 及 el-col 的栅格化布局
-            </li>
-            <li>
-              对于 el-row 中可能存在多列的情况(例如查询条件),必须使用
-              el-col,默认响应尺寸设置为 :sm="12" :md="8"
-              :lg="6",对于确定不存在多列的情况(例如查询结果),可以将 el-col
-              设置为 :span=24,也可以不使用 el-col
-            </li>
-            <li>
-              每个块级元素的默认间距为20px(包括但不限于:不同 el-card
-              之间、el-card
-              和内部元素之间、内部元素和内部元素之间,按钮之间例外,使用
-              el-button 默认间隔即可)
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">示例</span>
-      </el-row>
-      <el-row>
-        <div class="l-app">
-          <div class="l-card">
-            <el-row :gutter="20">
-              <el-col :sm="12" :md="8" :lg="6" style="margin-bottom:20px">
-                <div class="grid-content bg-purple l-flex">
-                  <b style="color:#666666">el-input</b>
-                </div>
-              </el-col>
-              <el-col :sm="12" :md="8" :lg="6" style="margin-bottom:20px">
-                <div class="grid-content bg-purple l-flex">
-                  <b style="color:#666666">el-input</b>
-                </div>
-              </el-col>
-              <el-col :sm="12" :md="8" :lg="6" style="margin-bottom:20px">
-                <div class="grid-content bg-purple l-flex">
-                  <b style="color:#666666">el-input</b>
-                </div>
-              </el-col>
-              <el-col :sm="12" :md="8" :lg="6" style="margin-bottom:20px">
-                <div class="grid-content bg-purple l-flex">
-                  <b style="color:#666666">el-input</b>
-                </div>
-              </el-col>
-            </el-row>
-            <el-row :gutter="20">
-              <el-col :span="24">
-                <div
-                  class="grid-content bg-blue l-i-flex"
-                  style="width:100px; margin-right:5px"
-                >
-                  <b style="color:#ffffff">el-button</b>
-                </div>
-                <div
-                  class="grid-content bg-red l-i-flex"
-                  style="width:100px; margin-right:5px"
-                >
-                  <b style="color:#ffffff">el-button</b>
-                </div>
-                <div
-                  class="grid-content bg-green l-i-flex"
-                  style="width:100px; margin-right:5px"
-                >
-                  <b style="color:#ffffff">el-button</b>
-                </div>
-              </el-col>
-            </el-row>
-          </div>
-          <div class="l-card" style="margin-top:20px">
-            <el-row>
-              <div class="grid-content bg-purple l-flex" style="height:300px">
-                <b style="color:#666666">el-table</b>
-              </div>
-            </el-row>
-          </div>
-        </div>
-      </el-row>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import TextField from "@/components/TextField";
-export default {
-  name: "Layout",
-  components: { TextField }
-};
-</script>
-
-<style scoped>
-.l-app {
-  width: 100%;
-  padding: 20px;
-  background-color: #eeeeee;
-}
-
-.l-card {
-  width: 100%;
-  padding: 20px;
-  background-color: #ffffff;
-  border-radius: 4px;
-}
-
-.grid-content {
-  border-radius: 4px;
-  min-height: 36px;
-}
-
-.bg-purple-dark {
-  background: #99a9bf;
-}
-.bg-purple {
-  background: #d3dce6;
-}
-.bg-purple-light {
-  background: #e5e9f2;
-}
-.bg-red {
-  background: #f56c6c;
-}
-.bg-green {
-  background: #67c23a;
-}
-.bg-blue {
-  background: #409eff;
-}
-.l-flex {
-  display: flex;
-  justify-content: center;
-  align-items: center;
-}
-.l-i-flex {
-  display: inline-flex;
-  justify-content: center;
-  align-items: center;
-}
-</style>
-
-<style scoped>
-.text-title {
-  display: inline-block;
-  font-size: 16px;
-  font-weight: 400;
-  color: #303133;
-}
-.row {
-  margin-bottom: 20px;
-}
-ul.note {
-  padding: 0 0 0 10px !important;
-  margin: 0 !important;
-}
-ul.note > li {
-  line-height: 2;
-  font-size: 14px;
-  color: #606266;
-}
-</style>
diff --git a/WebSite/src/views/example/table.vue b/WebSite/src/views/example/table.vue
deleted file mode 100644
index 29a458e..0000000
--- a/WebSite/src/views/example/table.vue
+++ /dev/null
@@ -1,169 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-07-15 16:50:12
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-09-18 13:49:43
--->
-<template>
-  <div class="app-container">
-    <el-card shadow="hover">
-      <el-row class="row">
-        <span class="text-title">示例</span>
-      </el-row>
-      <el-row class="row">
-        <el-table
-          :data="tableData"
-          style="width: 100%"
-          stripe
-          :cell-class-name="getCellClass"
-        >
-          <el-table-column type="selection" align="center" width="55">
-          </el-table-column>
-          <el-table-column prop="date" label="日期"> </el-table-column>
-          <el-table-column prop="name" label="姓名"> </el-table-column>
-          <el-table-column prop="amount" label="金额" width="160" align="right">
-            <template slot-scope="scope">
-              {{ scope.row.amount | moneyFormatter(2, ",") }}
-            </template>
-          </el-table-column>
-          <el-table-column prop="address" label="地址"> </el-table-column>
-          <el-table-column label="状态" width="160">
-            <template slot-scope="scope">
-              <el-tag type="success">{{ scope.row.status }}</el-tag>
-              <el-tag type="info">停用</el-tag>
-            </template>
-          </el-table-column>
-          <el-table-column label="操作" width="200">
-            <template slot-scope="scope">
-              <el-button
-                @click="handleClick(scope.row)"
-                type="default"
-                icon="el-icon-document-copy"
-                plain
-                >查看</el-button
-              >
-              <el-button type="primary" icon="el-icon-edit" plain
-                >编辑</el-button
-              >
-            </template>
-          </el-table-column>
-        </el-table>
-        <el-pagination
-          background
-          layout="total, sizes, prev, pager, next"
-          :total="tableData.length"
-          :page-sizes="[20, 50, 100]"
-          style="margin-top:20px"
-        >
-        </el-pagination>
-      </el-row>
-      <el-row class="row" style="margin-top:30px">
-        <span class="text-title">注意事项</span>
-      </el-row>
-      <el-row>
-        <text-field>
-          <ul class="note">
-            <li>
-              如无特殊情况(例如:多级表头),表格默认使用不带竖直方向边框且带有斑马纹的样式
-            </li>
-            <li>
-              如无特殊情况,表格的列默认左对齐,如该列表示金额则右对齐
-            </li>
-            <li>
-              用于选择行的 checkbox 列应位于最左侧,默认宽度55,居中对齐
-            </li>
-            <li>
-              用于放置各种操作按钮的列应位于最右侧,宽度根据按钮数量决定,当
-              table 的列较多时应考虑固定该列
-            </li>
-            <li>
-              表示状态的列需使用 el-tag
-              组件,通常,我们约定其意义为真或带有正面含义的状态颜色为绿色或蓝色,其意义为假或带有负面含义的状态颜色为灰色或红色
-            </li>
-            <li>
-              表格默认每页显示 20 条数据,在分页组件中提供 20 / 50 / 100 共 3
-              档可调整选项,同时显示总条数
-            </li>
-          </ul>
-        </text-field>
-      </el-row>
-    </el-card>
-  </div>
-</template>
-
-<script>
-import TextField from "@/components/TextField";
-export default {
-  name: "Button",
-  components: { TextField },
-  data() {
-    return {
-      tableData: [
-        {
-          date: "2016-05-02",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1518 弄",
-          amount: 234791253.11,
-          status: "启用"
-        },
-        {
-          date: "2016-05-04",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1517 弄",
-          amount: 3241380821.0,
-          status: "启用"
-        },
-        {
-          date: "2016-05-01",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1519 弄",
-          amount: 5436434234.0,
-          status: "启用"
-        },
-        {
-          date: "2016-05-03",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1516 弄",
-          amount: 73472122.0,
-          status: "启用"
-        }
-      ]
-    };
-  },
-  methods: {
-    getCellClass({ row, column, rowIndex, columnIndex }) {
-      if (columnIndex === 3) {
-        return "amount-col";
-      }
-    }
-  }
-};
-</script>
-
-<style>
-.amount-col > .cell {
-  text-align: right;
-}
-</style>
-
-<style scoped>
-.text-title {
-  display: inline-block;
-  font-size: 16px;
-  font-weight: 400;
-  color: #303133;
-}
-.row {
-  margin-bottom: 20px;
-}
-ul.note {
-  padding: 0 0 0 10px !important;
-  margin: 0 !important;
-}
-ul.note > li {
-  line-height: 2;
-  font-size: 14px;
-  color: #606266;
-}
-</style>
diff --git a/WebSite/src/views/excel/components/AutoWidthOption.vue b/WebSite/src/views/excel/components/AutoWidthOption.vue
deleted file mode 100644
index 08cc5a8..0000000
--- a/WebSite/src/views/excel/components/AutoWidthOption.vue
+++ /dev/null
@@ -1,34 +0,0 @@
-<template>
-  <div style="display:inline-block;">
-    <label class="radio-label">Cell Auto-Width: </label>
-    <el-radio-group v-model="autoWidth">
-      <el-radio :label="true" border>
-        True
-      </el-radio>
-      <el-radio :label="false" border>
-        False
-      </el-radio>
-    </el-radio-group>
-  </div>
-</template>
-
-<script>
-export default {
-  props: {
-    value: {
-      type: Boolean,
-      default: true
-    }
-  },
-  computed: {
-    autoWidth: {
-      get() {
-        return this.value;
-      },
-      set(val) {
-        this.$emit("input", val);
-      }
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/excel/components/BookTypeOption.vue b/WebSite/src/views/excel/components/BookTypeOption.vue
deleted file mode 100644
index 465113f..0000000
--- a/WebSite/src/views/excel/components/BookTypeOption.vue
+++ /dev/null
@@ -1,39 +0,0 @@
-<template>
-  <div style="display:inline-block;">
-    <label class="radio-label">Book Type: </label>
-    <el-select v-model="bookType" style="width:120px;">
-      <el-option
-        v-for="item in options"
-        :key="item"
-        :label="item"
-        :value="item"
-      />
-    </el-select>
-  </div>
-</template>
-
-<script>
-export default {
-  props: {
-    value: {
-      type: String,
-      default: "xlsx"
-    }
-  },
-  data() {
-    return {
-      options: ["xlsx", "csv", "txt"]
-    };
-  },
-  computed: {
-    bookType: {
-      get() {
-        return this.value;
-      },
-      set(val) {
-        this.$emit("input", val);
-      }
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/excel/components/FilenameOption.vue b/WebSite/src/views/excel/components/FilenameOption.vue
deleted file mode 100644
index e29cb85..0000000
--- a/WebSite/src/views/excel/components/FilenameOption.vue
+++ /dev/null
@@ -1,32 +0,0 @@
-<template>
-  <div style="display:inline-block;">
-    <label class="radio-label" style="padding-left:0;">Filename: </label>
-    <el-input
-      v-model="filename"
-      placeholder="Please enter the file name (default excel-list)"
-      style="width:345px;"
-      prefix-icon="el-icon-document"
-    />
-  </div>
-</template>
-
-<script>
-export default {
-  props: {
-    value: {
-      type: String,
-      default: ""
-    }
-  },
-  computed: {
-    filename: {
-      get() {
-        return this.value;
-      },
-      set(val) {
-        this.$emit("input", val);
-      }
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/excel/export-excel.vue b/WebSite/src/views/excel/export-excel.vue
deleted file mode 100644
index e613e6a..0000000
--- a/WebSite/src/views/excel/export-excel.vue
+++ /dev/null
@@ -1,142 +0,0 @@
-<template>
-  <div class="app-container">
-    <div>
-      <FilenameOption v-model="filename" />
-      <AutoWidthOption v-model="autoWidth" />
-      <BookTypeOption v-model="bookType" />
-      <el-button
-        :loading="downloadLoading"
-        style="margin:0 0 20px 20px;"
-        type="primary"
-        icon="el-icon-document"
-        @click="handleDownload"
-      >
-        Export Excel
-      </el-button>
-      <a
-        href="https://panjiachen.github.io/vue-element-admin-site/feature/component/excel.html"
-        target="_blank"
-        style="margin-left:15px;"
-      >
-        <el-tag type="info">Documentation</el-tag>
-      </a>
-    </div>
-
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      element-loading-text="Loading..."
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" label="Id" width="95">
-        <template slot-scope="scope">
-          {{ scope.$index }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Title">
-        <template slot-scope="scope">
-          {{ scope.row.title }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Author" width="110" align="center">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.author }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="Readings" width="115" align="center">
-        <template slot-scope="scope">
-          {{ scope.row.pageviews }}
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="Date" width="220">
-        <template slot-scope="scope">
-          <i class="el-icon-time" />
-          <span>{{
-            scope.row.timestamp | parseTime("{y}-{m}-{d} {h}:{i}")
-          }}</span>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { fetchList } from "@/api/article";
-import { parseTime } from "@/utils";
-// options components
-import FilenameOption from "./components/FilenameOption";
-import AutoWidthOption from "./components/AutoWidthOption";
-import BookTypeOption from "./components/BookTypeOption";
-
-export default {
-  name: "ExportExcel",
-  components: { FilenameOption, AutoWidthOption, BookTypeOption },
-  data() {
-    return {
-      list: null,
-      listLoading: true,
-      downloadLoading: false,
-      filename: "",
-      autoWidth: true,
-      bookType: "xlsx"
-    };
-  },
-  created() {
-    this.fetchData();
-  },
-  methods: {
-    fetchData() {
-      this.listLoading = true;
-      fetchList().then(response => {
-        this.list = response.data.items;
-        this.listLoading = false;
-      });
-    },
-    handleDownload() {
-      this.downloadLoading = true;
-      import("@/vendor/Export2Excel").then(excel => {
-        const tHeader = ["Id", "Title", "Author", "Readings", "Date"];
-        const filterVal = [
-          "id",
-          "title",
-          "author",
-          "pageviews",
-          "display_time"
-        ];
-        const list = this.list;
-        const data = this.formatJson(filterVal, list);
-        excel.export_json_to_excel({
-          header: tHeader,
-          data,
-          filename: this.filename,
-          autoWidth: this.autoWidth,
-          bookType: this.bookType
-        });
-        this.downloadLoading = false;
-      });
-    },
-    formatJson(filterVal, jsonData) {
-      return jsonData.map(v =>
-        filterVal.map(j => {
-          if (j === "timestamp") {
-            return parseTime(v[j]);
-          } else {
-            return v[j];
-          }
-        })
-      );
-    }
-  }
-};
-</script>
-
-<style>
-.radio-label {
-  font-size: 14px;
-  color: #606266;
-  line-height: 40px;
-  padding: 0 12px 0 30px;
-}
-</style>
diff --git a/WebSite/src/views/excel/merge-header.vue b/WebSite/src/views/excel/merge-header.vue
deleted file mode 100644
index 2f58423..0000000
--- a/WebSite/src/views/excel/merge-header.vue
+++ /dev/null
@@ -1,116 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-button
-      :loading="downloadLoading"
-      style="margin-bottom:20px"
-      type="primary"
-      icon="el-icon-document"
-      @click="handleDownload"
-      >Export</el-button
-    >
-
-    <el-table
-      ref="multipleTable"
-      v-loading="listLoading"
-      :data="list"
-      element-loading-text="Loading"
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" label="Id" width="95">
-        <template slot-scope="scope">
-          {{ scope.$index }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Main Information" align="center">
-        <el-table-column label="Title">
-          <template slot-scope="scope">
-            {{ scope.row.title }}
-          </template>
-        </el-table-column>
-        <el-table-column label="Author" width="110" align="center">
-          <template slot-scope="scope">
-            <el-tag>{{ scope.row.author }}</el-tag>
-          </template>
-        </el-table-column>
-        <el-table-column label="Readings" width="115" align="center">
-          <template slot-scope="scope">
-            {{ scope.row.pageviews }}
-          </template>
-        </el-table-column>
-      </el-table-column>
-      <el-table-column align="center" label="Date" width="220">
-        <template slot-scope="scope">
-          <i class="el-icon-time" />
-          <span>{{
-            scope.row.timestamp | parseTime("{y}-{m}-{d} {h}:{i}")
-          }}</span>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { fetchList } from "@/api/article";
-import { parseTime } from "@/utils";
-
-export default {
-  name: "MergeHeader",
-  data() {
-    return {
-      list: null,
-      listLoading: true,
-      downloadLoading: false
-    };
-  },
-  created() {
-    this.fetchData();
-  },
-  methods: {
-    fetchData() {
-      this.listLoading = true;
-      fetchList(this.listQuery).then(response => {
-        this.list = response.data.items;
-        this.listLoading = false;
-      });
-    },
-    handleDownload() {
-      this.downloadLoading = true;
-      import("@/vendor/Export2Excel").then(excel => {
-        const multiHeader = [["Id", "Main Information", "", "", "Date"]];
-        const header = ["", "Title", "Author", "Readings", ""];
-        const filterVal = [
-          "id",
-          "title",
-          "author",
-          "pageviews",
-          "display_time"
-        ];
-        const list = this.list;
-        const data = this.formatJson(filterVal, list);
-        const merges = ["A1:A2", "B1:D1", "E1:E2"];
-        excel.export_json_to_excel({
-          multiHeader,
-          header,
-          merges,
-          data
-        });
-        this.downloadLoading = false;
-      });
-    },
-    formatJson(filterVal, jsonData) {
-      return jsonData.map(v =>
-        filterVal.map(j => {
-          if (j === "timestamp") {
-            return parseTime(v[j]);
-          } else {
-            return v[j];
-          }
-        })
-      );
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/excel/select-excel.vue b/WebSite/src/views/excel/select-excel.vue
deleted file mode 100644
index 6012b7c..0000000
--- a/WebSite/src/views/excel/select-excel.vue
+++ /dev/null
@@ -1,128 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-input
-      v-model="filename"
-      placeholder="Please enter the file name (default excel-list)"
-      style="width:350px;"
-      prefix-icon="el-icon-document"
-    />
-    <el-button
-      :loading="downloadLoading"
-      style="margin-bottom:20px"
-      type="primary"
-      icon="el-icon-document"
-      @click="handleDownload"
-    >
-      Export Selected Items
-    </el-button>
-    <a
-      href="https://panjiachen.github.io/vue-element-admin-site/feature/component/excel.html"
-      target="_blank"
-      style="margin-left:15px;"
-    >
-      <el-tag type="info">Documentation</el-tag>
-    </a>
-    <el-table
-      ref="multipleTable"
-      v-loading="listLoading"
-      :data="list"
-      element-loading-text="拼命加载中"
-      border
-      fit
-      highlight-current-row
-      @selection-change="handleSelectionChange"
-    >
-      <el-table-column type="selection" align="center" />
-      <el-table-column align="center" label="Id" width="95">
-        <template slot-scope="scope">
-          {{ scope.$index }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Title">
-        <template slot-scope="scope">
-          {{ scope.row.title }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Author" width="110" align="center">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.author }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="Readings" width="115" align="center">
-        <template slot-scope="scope">
-          {{ scope.row.pageviews }}
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="PDate" width="220">
-        <template slot-scope="scope">
-          <i class="el-icon-time" />
-          <span>{{ scope.row.display_time }}</span>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { fetchList } from "@/api/article";
-
-export default {
-  name: "SelectExcel",
-  data() {
-    return {
-      list: null,
-      listLoading: true,
-      multipleSelection: [],
-      downloadLoading: false,
-      filename: ""
-    };
-  },
-  created() {
-    this.fetchData();
-  },
-  methods: {
-    fetchData() {
-      this.listLoading = true;
-      fetchList(this.listQuery).then(response => {
-        this.list = response.data.items;
-        this.listLoading = false;
-      });
-    },
-    handleSelectionChange(val) {
-      this.multipleSelection = val;
-    },
-    handleDownload() {
-      if (this.multipleSelection.length) {
-        this.downloadLoading = true;
-        import("@/vendor/Export2Excel").then(excel => {
-          const tHeader = ["Id", "Title", "Author", "Readings", "Date"];
-          const filterVal = [
-            "id",
-            "title",
-            "author",
-            "pageviews",
-            "display_time"
-          ];
-          const list = this.multipleSelection;
-          const data = this.formatJson(filterVal, list);
-          excel.export_json_to_excel({
-            header: tHeader,
-            data,
-            filename: this.filename
-          });
-          this.$refs.multipleTable.clearSelection();
-          this.downloadLoading = false;
-        });
-      } else {
-        this.$message({
-          message: "Please select at least one item",
-          type: "warning"
-        });
-      }
-    },
-    formatJson(filterVal, jsonData) {
-      return jsonData.map(v => filterVal.map(j => v[j]));
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/excel/upload-excel.vue b/WebSite/src/views/excel/upload-excel.vue
deleted file mode 100644
index dcd9471..0000000
--- a/WebSite/src/views/excel/upload-excel.vue
+++ /dev/null
@@ -1,55 +0,0 @@
-<template>
-  <div class="app-container">
-    <upload-excel-component
-      :on-success="handleSuccess"
-      :before-upload="beforeUpload"
-    />
-    <el-table
-      :data="tableData"
-      border
-      highlight-current-row
-      style="width: 100%;margin-top:20px;"
-    >
-      <el-table-column
-        v-for="item of tableHeader"
-        :key="item"
-        :prop="item"
-        :label="item"
-      />
-    </el-table>
-  </div>
-</template>
-
-<script>
-import UploadExcelComponent from "@/components/UploadExcel/index.vue";
-
-export default {
-  name: "UploadExcel",
-  components: { UploadExcelComponent },
-  data() {
-    return {
-      tableData: [],
-      tableHeader: []
-    };
-  },
-  methods: {
-    beforeUpload(file) {
-      const isLt1M = file.size / 1024 / 1024 < 1;
-
-      if (isLt1M) {
-        return true;
-      }
-
-      this.$message({
-        message: "Please do not upload files larger than 1m in size.",
-        type: "warning"
-      });
-      return false;
-    },
-    handleSuccess({ results, header }) {
-      this.tableData = results;
-      this.tableHeader = header;
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/guide/index.vue b/WebSite/src/views/guide/index.vue
deleted file mode 100644
index 0c6bedb..0000000
--- a/WebSite/src/views/guide/index.vue
+++ /dev/null
@@ -1,43 +0,0 @@
-<template>
-  <div class="app-container">
-    <aside>
-      The guide page is useful for some people who entered the project for the
-      first time. You can briefly introduce the features of the project. Demo is
-      based on
-      <a href="https://github.com/kamranahmedse/driver.js" target="_blank"
-        >driver.js.</a
-      >
-    </aside>
-    <el-button
-      icon="el-icon-question"
-      type="primary"
-      @click.prevent.stop="guide"
-    >
-      Show Guide
-    </el-button>
-  </div>
-</template>
-
-<script>
-import Driver from "driver.js"; // import driver.js
-import "driver.js/dist/driver.min.css"; // import driver.js css
-import steps from "./steps";
-
-export default {
-  name: "Guide",
-  data() {
-    return {
-      driver: null
-    };
-  },
-  mounted() {
-    this.driver = new Driver();
-  },
-  methods: {
-    guide() {
-      this.driver.defineSteps(steps);
-      this.driver.start();
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/guide/steps.js b/WebSite/src/views/guide/steps.js
deleted file mode 100644
index 6dfc9c2..0000000
--- a/WebSite/src/views/guide/steps.js
+++ /dev/null
@@ -1,53 +0,0 @@
-const steps = [
-  {
-    element: "#hamburger-container",
-    popover: {
-      title: "Hamburger",
-      description: "Open && Close sidebar",
-      position: "bottom"
-    }
-  },
-  {
-    element: "#breadcrumb-container",
-    popover: {
-      title: "Breadcrumb",
-      description: "Indicate the current page location",
-      position: "bottom"
-    }
-  },
-  {
-    element: "#header-search",
-    popover: {
-      title: "Page Search",
-      description: "Page search, quick navigation",
-      position: "left"
-    }
-  },
-  {
-    element: "#screenfull",
-    popover: {
-      title: "Screenfull",
-      description: "Set the page into fullscreen",
-      position: "left"
-    }
-  },
-  {
-    element: "#size-select",
-    popover: {
-      title: "Switch Size",
-      description: "Switch the system size",
-      position: "left"
-    }
-  },
-  {
-    element: "#tags-view-container",
-    popover: {
-      title: "Tags view",
-      description: "The history of the page you visited",
-      position: "bottom"
-    },
-    padding: 0
-  }
-];
-
-export default steps;
diff --git a/WebSite/src/views/home/index.vue b/WebSite/src/views/home/index.vue
index b90e914..9086d6e 100644
--- a/WebSite/src/views/home/index.vue
+++ b/WebSite/src/views/home/index.vue
@@ -1,16 +1,34 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-07-15 16:31:00
- * @LastEditors: dongjunhua
- * @LastEditTime: 2020-09-13 15:36:49
--->
 <template>
-  <div></div>
+  <div class="app-container">
+    <el-card shadow="never" @click="testLoading">
+      <el-calendar v-model="today"> </el-calendar>
+    </el-card>
+  </div>
 </template>
 
 <script>
+import { reactive, toRefs } from 'vue';
+import { useStore } from 'vuex';
 export default {
-  name: "Home"
+  name: 'Home',
+  setup() {
+    const store = useStore();
+
+    const data = reactive({
+      today: new Date()
+    });
+
+    const testLoading = () => {
+      store.dispatch('app/startLoading');
+      setTimeout(() => {
+        store.dispatch('app/endLoading');
+      }, 8000);
+    };
+
+    return {
+      ...toRefs(data),
+      testLoading
+    };
+  }
 };
 </script>
diff --git a/WebSite/src/views/icons/element-icons.js b/WebSite/src/views/icons/element-icons.js
deleted file mode 100644
index 6b4d716..0000000
--- a/WebSite/src/views/icons/element-icons.js
+++ /dev/null
@@ -1,284 +0,0 @@
-const elementIcons = [
-  "platform-eleme",
-  "eleme",
-  "delete-solid",
-  "delete",
-  "s-tools",
-  "setting",
-  "user-solid",
-  "user",
-  "phone",
-  "phone-outline",
-  "more",
-  "more-outline",
-  "star-on",
-  "star-off",
-  "s-goods",
-  "goods",
-  "warning",
-  "warning-outline",
-  "question",
-  "info",
-  "remove",
-  "circle-plus",
-  "success",
-  "error",
-  "zoom-in",
-  "zoom-out",
-  "remove-outline",
-  "circle-plus-outline",
-  "circle-check",
-  "circle-close",
-  "s-help",
-  "help",
-  "minus",
-  "plus",
-  "check",
-  "close",
-  "picture",
-  "picture-outline",
-  "picture-outline-round",
-  "upload",
-  "upload2",
-  "download",
-  "camera-solid",
-  "camera",
-  "video-camera-solid",
-  "video-camera",
-  "message-solid",
-  "bell",
-  "s-cooperation",
-  "s-order",
-  "s-platform",
-  "s-fold",
-  "s-unfold",
-  "s-operation",
-  "s-promotion",
-  "s-home",
-  "s-release",
-  "s-ticket",
-  "s-management",
-  "s-open",
-  "s-shop",
-  "s-marketing",
-  "s-flag",
-  "s-comment",
-  "s-finance",
-  "s-claim",
-  "s-custom",
-  "s-opportunity",
-  "s-data",
-  "s-check",
-  "s-grid",
-  "menu",
-  "share",
-  "d-caret",
-  "caret-left",
-  "caret-right",
-  "caret-bottom",
-  "caret-top",
-  "bottom-left",
-  "bottom-right",
-  "back",
-  "right",
-  "bottom",
-  "top",
-  "top-left",
-  "top-right",
-  "arrow-left",
-  "arrow-right",
-  "arrow-down",
-  "arrow-up",
-  "d-arrow-left",
-  "d-arrow-right",
-  "video-pause",
-  "video-play",
-  "refresh",
-  "refresh-right",
-  "refresh-left",
-  "finished",
-  "sort",
-  "sort-up",
-  "sort-down",
-  "rank",
-  "loading",
-  "view",
-  "c-scale-to-original",
-  "date",
-  "edit",
-  "edit-outline",
-  "folder",
-  "folder-opened",
-  "folder-add",
-  "folder-remove",
-  "folder-delete",
-  "folder-checked",
-  "tickets",
-  "document-remove",
-  "document-delete",
-  "document-copy",
-  "document-checked",
-  "document",
-  "document-add",
-  "printer",
-  "paperclip",
-  "takeaway-box",
-  "search",
-  "monitor",
-  "attract",
-  "mobile",
-  "scissors",
-  "umbrella",
-  "headset",
-  "brush",
-  "mouse",
-  "coordinate",
-  "magic-stick",
-  "reading",
-  "data-line",
-  "data-board",
-  "pie-chart",
-  "data-analysis",
-  "collection-tag",
-  "film",
-  "suitcase",
-  "suitcase-1",
-  "receiving",
-  "collection",
-  "files",
-  "notebook-1",
-  "notebook-2",
-  "toilet-paper",
-  "office-building",
-  "school",
-  "table-lamp",
-  "house",
-  "no-smoking",
-  "smoking",
-  "shopping-cart-full",
-  "shopping-cart-1",
-  "shopping-cart-2",
-  "shopping-bag-1",
-  "shopping-bag-2",
-  "sold-out",
-  "sell",
-  "present",
-  "box",
-  "bank-card",
-  "money",
-  "coin",
-  "wallet",
-  "discount",
-  "price-tag",
-  "news",
-  "guide",
-  "male",
-  "female",
-  "thumb",
-  "cpu",
-  "link",
-  "connection",
-  "open",
-  "turn-off",
-  "set-up",
-  "chat-round",
-  "chat-line-round",
-  "chat-square",
-  "chat-dot-round",
-  "chat-dot-square",
-  "chat-line-square",
-  "message",
-  "postcard",
-  "position",
-  "turn-off-microphone",
-  "microphone",
-  "close-notification",
-  "bangzhu",
-  "time",
-  "odometer",
-  "crop",
-  "aim",
-  "switch-button",
-  "full-screen",
-  "copy-document",
-  "mic",
-  "stopwatch",
-  "medal-1",
-  "medal",
-  "trophy",
-  "trophy-1",
-  "first-aid-kit",
-  "discover",
-  "place",
-  "location",
-  "location-outline",
-  "location-information",
-  "add-location",
-  "delete-location",
-  "map-location",
-  "alarm-clock",
-  "timer",
-  "watch-1",
-  "watch",
-  "lock",
-  "unlock",
-  "key",
-  "service",
-  "mobile-phone",
-  "bicycle",
-  "truck",
-  "ship",
-  "basketball",
-  "football",
-  "soccer",
-  "baseball",
-  "wind-power",
-  "light-rain",
-  "lightning",
-  "heavy-rain",
-  "sunrise",
-  "sunrise-1",
-  "sunset",
-  "sunny",
-  "cloudy",
-  "partly-cloudy",
-  "cloudy-and-sunny",
-  "moon",
-  "moon-night",
-  "dish",
-  "dish-1",
-  "food",
-  "chicken",
-  "fork-spoon",
-  "knife-fork",
-  "burger",
-  "tableware",
-  "sugar",
-  "dessert",
-  "ice-cream",
-  "hot-water",
-  "water-cup",
-  "coffee-cup",
-  "cold-drink",
-  "goblet",
-  "goblet-full",
-  "goblet-square",
-  "goblet-square-full",
-  "refrigerator",
-  "grape",
-  "watermelon",
-  "cherry",
-  "apple",
-  "pear",
-  "orange",
-  "coffee",
-  "ice-tea",
-  "ice-drink",
-  "milk-tea",
-  "potato-strips",
-  "lollipop",
-  "ice-cream-square",
-  "ice-cream-round"
-];
-
-export default elementIcons;
diff --git a/WebSite/src/views/icons/index.vue b/WebSite/src/views/icons/index.vue
deleted file mode 100644
index e78635b..0000000
--- a/WebSite/src/views/icons/index.vue
+++ /dev/null
@@ -1,112 +0,0 @@
-<template>
-  <div class="icons-container">
-    <!-- <aside>
-      <a
-        href="https://panjiachen.github.io/vue-element-admin-site/guide/advanced/icon.html"
-        target="_blank"
-        >Add and use
-      </a>
-    </aside> -->
-    <el-tabs type="border-card">
-      <el-tab-pane label="Icons">
-        <div class="grid">
-          <div
-            v-for="item of svgIcons"
-            :key="item"
-            @click="handleClipboard(generateIconCode(item), $event)"
-          >
-            <el-tooltip placement="top">
-              <div slot="content">
-                {{ generateIconCode(item) }}
-              </div>
-              <div class="icon-item">
-                <svg-icon :icon-class="item" class-name="disabled" />
-                <span>{{ item }}</span>
-              </div>
-            </el-tooltip>
-          </div>
-        </div>
-      </el-tab-pane>
-      <el-tab-pane label="Element-UI Icons">
-        <div class="grid">
-          <div
-            v-for="item of elementIcons"
-            :key="item"
-            @click="handleClipboard(generateElementIconCode(item), $event)"
-          >
-            <el-tooltip placement="top">
-              <div slot="content">
-                {{ generateElementIconCode(item) }}
-              </div>
-              <div class="icon-item">
-                <i :class="'el-icon-' + item" />
-                <span>{{ item }}</span>
-              </div>
-            </el-tooltip>
-          </div>
-        </div>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-
-<script>
-import clipboard from "@/utils/clipboard";
-import svgIcons from "./svg-icons";
-import elementIcons from "./element-icons";
-
-export default {
-  name: "Icons",
-  data() {
-    return {
-      svgIcons,
-      elementIcons
-    };
-  },
-  methods: {
-    generateIconCode(symbol) {
-      return `<svg-icon icon-class="${symbol}" />`;
-    },
-    generateElementIconCode(symbol) {
-      return `<i class="el-icon-${symbol}" />`;
-    },
-    handleClipboard(text, event) {
-      clipboard(text, event);
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.icons-container {
-  // margin: 10px 20px 0;
-  overflow: hidden;
-
-  .grid {
-    position: relative;
-    display: grid;
-    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
-  }
-
-  .icon-item {
-    margin: 20px;
-    height: 85px;
-    text-align: center;
-    width: 100px;
-    float: left;
-    font-size: 30px;
-    color: #24292e;
-    cursor: pointer;
-  }
-
-  span {
-    display: block;
-    font-size: 16px;
-    margin-top: 10px;
-  }
-
-  .disabled {
-    pointer-events: none;
-  }
-}
-</style>
diff --git a/WebSite/src/views/icons/svg-icons.js b/WebSite/src/views/icons/svg-icons.js
deleted file mode 100644
index 4b220e1..0000000
--- a/WebSite/src/views/icons/svg-icons.js
+++ /dev/null
@@ -1,10 +0,0 @@
-const req = require.context("../../icons/svg", false, /\.svg$/);
-const requireAll = requireContext => requireContext.keys();
-
-const re = /\.\/(.*)\.svg/;
-
-const svgIcons = requireAll(req).map(i => {
-  return i.match(re)[1];
-});
-
-export default svgIcons;
diff --git a/WebSite/src/views/login/auth-redirect.vue b/WebSite/src/views/login/auth-redirect.vue
deleted file mode 100644
index 65ee12b..0000000
--- a/WebSite/src/views/login/auth-redirect.vue
+++ /dev/null
@@ -1,15 +0,0 @@
-<script>
-export default {
-  name: "AuthRedirect",
-  created() {
-    const hash = window.location.search.slice(1);
-    if (window.localStorage) {
-      window.localStorage.setItem("x-admin-oauth-code", hash);
-      window.close();
-    }
-  },
-  render: function(h) {
-    return h(); // avoid warning message
-  }
-};
-</script>
diff --git a/WebSite/src/views/login/components/SocialSignin.vue b/WebSite/src/views/login/components/SocialSignin.vue
deleted file mode 100644
index f85e730..0000000
--- a/WebSite/src/views/login/components/SocialSignin.vue
+++ /dev/null
@@ -1,76 +0,0 @@
-<template>
-  <div class="social-signup-container">
-    <div class="sign-btn" @click="wechatHandleClick('wechat')">
-      <span class="wx-svg-container"
-        ><svg-icon icon-class="wechat" class="icon"
-      /></span>
-      WeChat
-    </div>
-    <div class="sign-btn" @click="tencentHandleClick('tencent')">
-      <span class="qq-svg-container"
-        ><svg-icon icon-class="qq" class="icon"
-      /></span>
-      QQ
-    </div>
-  </div>
-</template>
-
-<script>
-// import openWindow from '@/utils/open-window'
-
-export default {
-  name: "SocialSignin",
-  methods: {
-    wechatHandleClick(thirdpart) {
-      alert("ok");
-      // this.$store.commit('SET_AUTH_TYPE', thirdpart)
-      // const appid = 'xxxxx'
-      // const redirect_uri = encodeURIComponent('xxx/redirect?redirect=' + window.location.origin + '/auth-redirect')
-      // const url = 'https://open.weixin.qq.com/connect/qrconnect?appid=' + appid + '&redirect_uri=' + redirect_uri + '&response_type=code&scope=snsapi_login#wechat_redirect'
-      // openWindow(url, thirdpart, 540, 540)
-    },
-    tencentHandleClick(thirdpart) {
-      alert("ok");
-      // this.$store.commit('SET_AUTH_TYPE', thirdpart)
-      // const client_id = 'xxxxx'
-      // const redirect_uri = encodeURIComponent('xxx/redirect?redirect=' + window.location.origin + '/auth-redirect')
-      // const url = 'https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=' + client_id + '&redirect_uri=' + redirect_uri
-      // openWindow(url, thirdpart, 540, 540)
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.social-signup-container {
-  margin: 20px 0;
-  .sign-btn {
-    display: inline-block;
-    cursor: pointer;
-  }
-  .icon {
-    color: #fff;
-    font-size: 24px;
-    margin-top: 8px;
-  }
-  .wx-svg-container,
-  .qq-svg-container {
-    display: inline-block;
-    width: 40px;
-    height: 40px;
-    line-height: 40px;
-    text-align: center;
-    padding-top: 1px;
-    border-radius: 4px;
-    margin-bottom: 20px;
-    margin-right: 5px;
-  }
-  .wx-svg-container {
-    background-color: #24da70;
-  }
-  .qq-svg-container {
-    background-color: #6ba2d6;
-    margin-left: 50px;
-  }
-}
-</style>
diff --git a/WebSite/src/views/login/index.vue b/WebSite/src/views/login/index.vue
index 967bafc..2477853 100644
--- a/WebSite/src/views/login/index.vue
+++ b/WebSite/src/views/login/index.vue
@@ -1,38 +1,65 @@
 <template>
-  <div class="login-warp">
-    <div class="login-container">
-      <el-form
-        ref="loginForm"
-        :model="loginForm"
-        :rules="loginRules"
-        class="login-form"
-        autocomplete="on"
-        label-position="left"
-      >
-        <div class="title-container">
-          <h3 class="title">
-            {{ defaultSettings.title || "Vue Element Admin" }}
-          </h3>
-        </div>
+  <div class="login-container">
+    <vue-particles
+      v-if="dynamicLoginBg"
+      :color="dynamicBgColor"
+      :particleOpacity="0.1"
+      :particlesNumber="15"
+      shapeType="circle"
+      :particleSize="100"
+      :linesColor="dynamicBgColor"
+      :linesWidth="1"
+      :lineLinked="true"
+      :lineOpacity="0.4"
+      :linesDistance="150"
+      :moveSpeed="3"
+      :hoverEffect="true"
+      hoverMode="grab"
+      :clickEffect="true"
+      clickMode="push"
+    ></vue-particles>
+
+    <div class="login-inner-container">
+      <div class="release-info" @click="showSelectUser = !showSelectUser">
+        <span>{{ releaseCycle }}</span>
+      </div>
 
-        <div class="el-form-item-container">
-          <el-form-item prop="username">
+      <transition name="fade-transform-top">
+        <el-form
+          v-show="!showSelectUser"
+          ref="loginForm"
+          :model="formData"
+          :rules="formRules"
+          class="login-form"
+          autocomplete="on"
+          label-position="left"
+        >
+          <div class="title-container">
+            <h3 class="title">
+              <svg-icon
+                v-if="title === 'Vue Element Next'"
+                icon-class="001-adwords"
+                className="logo-icon"
+              />
+              {{ title === 'Vue Element Next' ? title.substring(1) : title }}
+            </h3>
+          </div>
+
+          <el-form-item prop="account">
             <span class="svg-container">
               <svg-icon icon-class="user" />
             </span>
             <el-input
-              ref="username"
-              v-model="loginForm.username"
-              placeholder="Username"
-              name="username"
+              ref="account"
+              v-model="formData.account"
+              placeholder="account"
+              name="account"
               type="text"
               tabindex="1"
               autocomplete="on"
             />
           </el-form-item>
-        </div>
 
-        <div class="el-form-item-container">
           <el-tooltip
             v-model="capsTooltip"
             content="Caps lock is On"
@@ -46,299 +73,303 @@
               <el-input
                 :key="passwordType"
                 ref="password"
-                v-model="loginForm.password"
+                v-model="formData.password"
                 :type="passwordType"
                 placeholder="Password"
                 name="password"
                 tabindex="2"
                 autocomplete="on"
-                @keyup.native="checkCapslock"
+                @keyup="checkCapslock"
                 @blur="capsTooltip = false"
-                @keyup.enter.native="handleLogin"
+                @keyup.enter="handleLogin"
               />
-              <span class="show-pwd" @click="showPwd">
+              <span class="show-pwd" @click="showPassword">
                 <svg-icon
                   :icon-class="passwordType === 'password' ? 'eye' : 'eye-open'"
                 />
               </span>
             </el-form-item>
           </el-tooltip>
+
+          <el-button
+            :loading="loading"
+            type="primary"
+            size="medium"
+            style="width:100%"
+            @click.prevent="handleLogin"
+            >Login</el-button
+          >
+        </el-form>
+      </transition>
+
+      <transition name="fade-transform-bottom">
+        <div v-if="showSelectUser" class="login-form">
+          <select-user :userList="userList" @handle-confirm="handleSetUser" />
         </div>
+      </transition>
 
-        <el-form-item prop="status">
-          <jc-range
-            style="margin-top:30px"
-            :status.sync="loginForm.status"
-            :successFun="onMpanelSuccess"
-            :errorFun="onMpanelError"
-            @handle-confirm="handleLogin"
-          ></jc-range>
-        </el-form-item>
-
-        <!-- <el-button
-          :loading="loading"
-          type="primary"
-          style="width:100%;margin-bottom:30px;margin-top:30px"
-          @click.native.prevent="handleLogin"
-          >登 录</el-button
-        > -->
-
-        <!-- <div style="position:relative">
-        <div class="tips">
-          <span>Username : admin</span>
-          <span>Password : any</span>
+      <!-- <div class="svg-link-container">
+        <div class="icon-container">
+          <a href="https://v3.vuejs.org/" title="Vue.js"
+            ><svg-icon icon-class="vue" className="vue-icon"
+          /></a>
         </div>
-        <div class="tips">
-          <span style="margin-right:18px;">Username : editor</span>
-          <span>Password : any</span>
+        <div class="icon-container">
+          <a href="https://element-plus.gitee.io/#/zh-CN" title="Element Plus">
+            <svg-icon icon-class="element" className="element-icon" />
+          </a>
+        </div>
+        <div class="icon-container">
+          <a
+            href="http://git.seaskysh.com.cn:8800/dongjunhua/vue-element-next"
+            title="GitLab"
+          >
+            <svg-icon icon-class="gitlab" className="gitlab-icon" />
+          </a>
         </div>
+      </div>
 
-        <el-button
-          class="thirdparty-button"
-          type="primary"
-          @click="showDialog = true"
-        >
-          Or connect with
-        </el-button>
+      <div class="info-container">
+        <div class="text-container">
+          <span style="margin-right:10px"
+            >Ver. {{ `${version}(${coreVersion})` }}
+          </span>
+          <span>Powered by Vue.js v3 {{ '&' }} Element Plus</span>
+        </div>
       </div> -->
-      </el-form>
-
-      <el-dialog title="Or connect with" :visible.sync="showDialog">
-        Can not be simulated on local, so please combine you own business
-        simulation! ! !
-        <br />
-        <br />
-        <br />
-        <social-sign />
-      </el-dialog>
     </div>
-    <select-user
-      :visible.sync="dialogSelectUser.visible"
-      :userList="dialogSelectUser.userList"
-      @handle-confirm="setUser"
-    />
-    <modify-password
-      :visible.sync="dialogModifyPassword.visible"
-      :isInitial="true"
-      @handle-confirm="selectUser"
-    />
   </div>
 </template>
 
 <script>
-import { validUsername } from "@/utils/validate";
-import SocialSign from "./components/SocialSignin";
-import SelectUser from "@/components/SelectUser";
-import ModifyPassword from "@/components/ModifyPassword";
-import JcRange from "@/components/JcRange";
+import defaultSettings from '@/settings';
+import {
+  ref,
+  onMounted,
+  reactive,
+  nextTick,
+  toRefs,
+  computed,
+  watch
+} from 'vue';
+import { useStore } from 'vuex';
+import { useRoute } from 'vue-router';
+// import router from '@/router';
+// import { useRouter } from 'vue-router';
+import AuthenticationToken from '@/core/model/AuthenticationToken';
+import SelectUser from './components/SelectUser';
 export default {
-  name: "Login",
-  components: { SocialSign, SelectUser, JcRange, ModifyPassword },
-  data() {
-    const validateUsername = (rule, value, callback) => {
-      callback();
-      // if (!validUsername(value)) {
-      //   callback(new Error("Please enter the correct user name"));
-      // } else {
-      //   callback();
-      // }
-    };
-    const validatePassword = (rule, value, callback) => {
-      callback();
-      // if (value.length < 6) {
-      //   callback(new Error("The password can not be less than 6 digits"));
-      // } else {
-      //   callback();
-      // }
-    };
-    const checkStatus = (rule, value, callback) => {
-      if (!value) {
-        callback(new Error("请拖动滑块完成验证"));
-      } else {
-        callback();
-      }
-    };
-    return {
-      defaultSettings: require("@/settings.js"),
-      loginForm: {
-        username: "admin",
-        password: "123456",
-        status: false
+  name: 'Login',
+  components: {
+    SelectUser
+  },
+  setup() {
+    // important!! this can't be used inside setup
+    // useStore & useRouter can only be used inside setup
+    const store = useStore();
+    const route = useRoute();
+    const loginForm = ref(null);
+    const account = ref(null);
+    const password = ref(null);
+    const data = reactive({
+      title: defaultSettings.applicationName,
+      releaseCycle: defaultSettings.releaseCycle,
+      version: defaultSettings.version,
+      coreVersion: defaultSettings.coreVersion,
+      dynamicLoginBg: defaultSettings.dynamicLoginBg,
+      formData: {
+        account: '',
+        password: ''
       },
-      loginRules: {
-        username: [
-          { required: true, trigger: "blur", validator: validateUsername }
+      formRules: {
+        account: [
+          { required: true, trigger: 'blur', validator: validateAccount }
         ],
         password: [
-          { required: true, trigger: "blur", validator: validatePassword }
-        ],
-        status: [{ trigger: "change", validator: checkStatus }]
+          { required: true, trigger: 'blur', validator: validatePassword }
+        ]
       },
-      passwordType: "password",
+      passwordType: 'password',
       capsTooltip: false,
-      dialogVisible: false,
       loading: false,
       showDialog: false,
       redirect: undefined,
-      radio: "1",
       otherQuery: {},
-      dialogSelectUser: {
-        visible: false,
-        userList: []
-      },
-      dialogModifyPassword: {
-        visible: false
+      userList: [],
+      showSelectUser: false
+    });
+
+    const dynamicBgColor = computed(() => {
+      if (store.state.app.themes.find(t => t.active).className === 'light') {
+        return '#aaa';
+      }
+      if (store.state.app.themes.find(t => t.active).className === 'dark') {
+        return '#ddd';
       }
+      return '#ddd';
+    });
+
+    const validateAccount = (rule, value, callback) => {
+      // do valid here
+      // if invalid, callback(new Error())
+      callback();
     };
-  },
-  watch: {
-    $route: {
-      handler: function(route) {
-        const query = route.query;
-        if (query) {
-          this.redirect = query.redirect;
-          this.otherQuery = this.getOtherQuery(query);
-        }
-      },
-      immediate: true
-    }
-  },
-  created() {
-    // window.addEventListener('storage', this.afterQRScan)
-  },
-  mounted() {
-    if (this.loginForm.username === "") {
-      this.$refs.username.focus();
-    } else if (this.loginForm.password === "") {
-      this.$refs.password.focus();
-    }
-  },
-  destroyed() {
-    // window.removeEventListener('storage', this.afterQRScan)
-  },
-  methods: {
-    onMpanelSuccess() {
-      this.$refs.loginForm.validate(_ => {});
-    },
-    onMpanelError() {},
-    submitForm(formName) {
-      this.$refs[formName].validate(valid => {
-        if (valid) {
-          alert("submit!");
-        } else {
-          console.log("error submit!!");
-          return false;
-        }
-      });
-    },
-    checkCapslock(e) {
+    const validatePassword = (rule, value, callback) => {
+      // do valid here
+      // if invalid, callback(new Error())
+      callback();
+    };
+    const checkCapslock = e => {
       const { key } = e;
-      this.capsTooltip = key && key.length === 1 && key >= "A" && key <= "Z";
-    },
-    showPwd() {
-      if (this.passwordType === "password") {
-        this.passwordType = "";
+      data.capsTooltip = key && key.length === 1 && key >= 'A' && key <= 'Z';
+    };
+    const showPassword = async () => {
+      if (data.passwordType === 'password') {
+        data.passwordType = '';
       } else {
-        this.passwordType = "password";
+        data.passwordType = 'password';
       }
-      this.$nextTick(() => {
-        this.$refs.password.focus();
-      });
-    },
-    handleLogin() {
-      this.$refs.loginForm.validate(async valid => {
+      await nextTick();
+      password.value.focus();
+    };
+    const handleLogin = () => {
+      loginForm.value.validate(async valid => {
         if (valid) {
-          this.loading = true;
-          try {
-            const { isInitial, users } = await this.$store.dispatch(
-              "user/login",
-              this.loginForm
-            );
-            this.dialogSelectUser.userList = users;
-            // 首次登录必须修改密码
-            if (isInitial === "YES") {
-              this.dialogModifyPassword.visible = true;
+          const token = new AuthenticationToken(
+            data.formData.account,
+            data.formData.password
+          );
+          await store.dispatch('subject/login', token);
+          const userList = store.state.subject.account;
+          console.log('userList', userList);
+          if (userList) {
+            if (userList.length > 1) {
+              data.userList = userList;
+              data.showSelectUser = true;
             } else {
-              this.selectUser();
+              const permitOptions = { authorizationToken: userList[0] };
+              await store.dispatch('subject/permit', permitOptions);
             }
-          } catch (err) {
-            this.loading = false;
           }
+        } else {
+          console.log('error submit!!');
+          return false;
         }
       });
-    },
-    selectUser() {
-      // 当前账号只有一个关联用户直接登录,否则选择用户
-      if (this.dialogSelectUser.userList.length === 1) {
-        this.setUser(this.dialogSelectUser.userList[0].id);
-      } else {
-        this.dialogSelectUser.visible = true;
-      }
-    },
-    async setUser(id) {
-      try {
-        await this.$store.dispatch("user/setUser", id);
-        this.$router.push({
-          path: "/"
-        });
-      } catch (err) {
-        this.loading = false;
+    };
+    const handleSetUser = async userId => {
+      const permitOptions = { authorizationToken: userId };
+      if (data.otherQuery.redirect_uri) {
+        permitOptions.afterPermitted = token => {
+          window.location.href = `${data.otherQuery.redirect_uri}?code=${token}`;
+        };
       }
-    },
-    // handleLogin() {
-    //   // this.dialogVisible = true;
-    //   // return;
-    //   this.$refs.loginForm.validate(valid => {
-    //     if (valid) {
-    //       this.loading = true;
-    //       this.$store
-    //         .dispatch("user/login", this.loginForm)
-    //         .then(() => {
-    //           this.$router.push({
-    //             path: this.redirect || "/",
-    //             query: this.otherQuery
-    //           });
-    //           this.loading = false;
-    //         })
-    //         .catch(() => {
-    //           this.loading = false;
-    //         });
-    //     } else {
-    //       console.log("error submit!!");
-    //       return false;
-    //     }
-    //   });
-    // },
-    getOtherQuery(query) {
+      await store.dispatch('subject/permit', permitOptions);
+    };
+    const getQuery = query => {
       return Object.keys(query).reduce((acc, cur) => {
-        if (cur !== "redirect") {
+        if (cur !== 'redirect') {
           acc[cur] = query[cur];
         }
         return acc;
       }, {});
-    }
-    // afterQRScan() {
-    //   if (e.key === 'x-admin-oauth-code') {
-    //     const code = getQueryObject(e.newValue)
-    //     const codeMap = {
-    //       wechat: 'code',
-    //       tencent: 'code'
-    //     }
-    //     const type = codeMap[this.auth_type]
-    //     const codeName = code[type]
-    //     if (codeName) {
-    //       this.$store.dispatch('LoginByThirdparty', codeName).then(() => {
-    //         this.$router.push({ path: this.redirect || '/' })
-    //       })
-    //     } else {
-    //       alert('第三方登录失败')
-    //     }
-    //   }
-    // }
+    };
+    const focus = () => {
+      if (data.formData.account === '') {
+        account.value.focus();
+      } else if (data.formData.password === '') {
+        password.value.focus();
+      }
+    };
+
+    watch(
+      () => route.path,
+      () => {
+        data.otherQuery = getQuery(route.query);
+      },
+      { immediate: true }
+    );
+
+    onMounted(() => {
+      focus();
+    });
+
+    return {
+      loginForm,
+      account,
+      password,
+      ...toRefs(data),
+      dynamicBgColor,
+      checkCapslock,
+      showPassword,
+      handleLogin,
+      handleSetUser
+    };
   }
 };
 </script>
 
+<style lang="scss" scoped>
+/* particles */
+#particles-js {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+}
+
+/* footer */
+.svg-link-container,
+.info-container {
+  position: absolute;
+  display: flex;
+  width: 100%;
+  height: 40px;
+  justify-content: center;
+}
+
+.svg-link-container {
+  bottom: 15%;
+
+  .icon-container {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding: 10px;
+
+    .vue-icon {
+      width: 1.3em !important;
+      height: 1.3em !important;
+    }
+    .element-icon {
+      width: 5em !important;
+      height: 2em !important;
+    }
+    .gitlab-icon {
+      width: 4.8em !important;
+      height: 2em !important;
+    }
+  }
+}
+
+.info-container {
+  bottom: calc(15% - 50px);
+
+  .text-container {
+    display: flex;
+    justify-content: center;
+    align-items: center;
+    padding: 10px;
+
+    span {
+      color: #aaaaaa;
+      font-size: 14px;
+    }
+  }
+}
+</style>
+
 <style lang="scss">
 /* 修复input 背景不协调 和光标变色 */
 /* Detail see https://github.com/PanJiaChen/vue-element-admin/pull/927 */
@@ -352,6 +383,7 @@ $cursor: #fff;
     color: $cursor;
   }
 }
+
 /* reset element-ui css */
 .login-container {
   .el-input {
@@ -365,9 +397,10 @@ $cursor: #fff;
       -webkit-appearance: none;
       border-radius: 0px;
       padding: 12px 5px 12px 15px;
-      color: $light_gray;
+      // color: $light_gray;
       height: 47px;
-      caret-color: $cursor;
+      // caret-color: $cursor;
+      font-size: 16px;
 
       &:-webkit-autofill {
         box-shadow: 0 0 0px 1000px $bg inset !important;
@@ -376,38 +409,61 @@ $cursor: #fff;
     }
   }
 
-  .el-form-item-container {
+  .el-form-item {
     border: 1px solid rgba(255, 255, 255, 0.1);
     background: rgba(0, 0, 0, 0.1);
     border-radius: 5px;
     color: #454545;
-    margin-bottom: 22px;
-
-    .el-form-item {
-      margin-bottom: 0px !important;
-    }
   }
 }
 </style>
 
 <style lang="scss" scoped>
-$bg: #2d3a4b;
+$bg: rgb(41, 39, 50);
 $dark_gray: #889aa4;
 $light_gray: #eee;
-.login-warp {
-  min-height: 100%;
-  width: 100%;
-  background-color: $bg;
-  overflow: hidden;
-}
+
 .login-container {
   min-height: 100%;
   width: 100%;
-  background-color: $bg;
   overflow: hidden;
+  position: relative;
+  display: flex;
+  justify-content: center;
 
-  .login-form {
+  .login-inner-container {
+    min-height: 600px;
+    width: 100%;
+    overflow: hidden;
     position: relative;
+    display: flex;
+    justify-content: center;
+
+    .release-info {
+      width: 100px;
+      height: 100px;
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      background-color: #409eff;
+      position: fixed;
+      top: -50px;
+      right: -50px;
+      transform: rotate(45deg);
+      cursor: pointer;
+
+      span {
+        user-select: none;
+        padding-top: 65px;
+        font-size: 18px;
+        font-weight: bold;
+        color: #eeeeee;
+      }
+    }
+  }
+
+  .login-form {
+    position: absolute;
     width: 520px;
     max-width: 100%;
     padding: 160px 35px 0;
@@ -417,7 +473,7 @@ $light_gray: #eee;
 
   .tips {
     font-size: 14px;
-    color: #fff;
+    // color: #fff;
     margin-bottom: 10px;
 
     span {
@@ -440,10 +496,19 @@ $light_gray: #eee;
 
     .title {
       font-size: 26px;
-      color: $light_gray;
+      // color: $light_gray;
       margin: 0px auto 40px auto;
       text-align: center;
       font-weight: bold;
+
+      .logo-icon {
+        position: relative;
+        top: -1px;
+        left: 7px;
+        transform: rotate(180deg);
+        width: 1em !important;
+        height: 1em !important;
+      }
     }
   }
 
diff --git a/WebSite/src/views/nested/menu1/index.vue b/WebSite/src/views/nested/menu1/index.vue
deleted file mode 100644
index 30cb670..0000000
--- a/WebSite/src/views/nested/menu1/index.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-<template>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1">
-      <router-view />
-    </el-alert>
-  </div>
-</template>
diff --git a/WebSite/src/views/nested/menu1/menu1-1/index.vue b/WebSite/src/views/nested/menu1/menu1-1/index.vue
deleted file mode 100644
index 27e173a..0000000
--- a/WebSite/src/views/nested/menu1/menu1-1/index.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-<template>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-1" type="success">
-      <router-view />
-    </el-alert>
-  </div>
-</template>
diff --git a/WebSite/src/views/nested/menu1/menu1-2/index.vue b/WebSite/src/views/nested/menu1/menu1-2/index.vue
deleted file mode 100644
index 0c86276..0000000
--- a/WebSite/src/views/nested/menu1/menu1-2/index.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-<template>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-2" type="success">
-      <router-view />
-    </el-alert>
-  </div>
-</template>
diff --git a/WebSite/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue b/WebSite/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue
deleted file mode 100644
index f87d88f..0000000
--- a/WebSite/src/views/nested/menu1/menu1-2/menu1-2-1/index.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-<template functional>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-2-1" type="warning" />
-  </div>
-</template>
diff --git a/WebSite/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue b/WebSite/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue
deleted file mode 100644
index d88789f..0000000
--- a/WebSite/src/views/nested/menu1/menu1-2/menu1-2-2/index.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-<template functional>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-2-2" type="warning" />
-  </div>
-</template>
diff --git a/WebSite/src/views/nested/menu1/menu1-3/index.vue b/WebSite/src/views/nested/menu1/menu1-3/index.vue
deleted file mode 100644
index f7cd073..0000000
--- a/WebSite/src/views/nested/menu1/menu1-3/index.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-<template functional>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 1-3" type="success" />
-  </div>
-</template>
diff --git a/WebSite/src/views/nested/menu2/index.vue b/WebSite/src/views/nested/menu2/index.vue
deleted file mode 100644
index 19dd48f..0000000
--- a/WebSite/src/views/nested/menu2/index.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-<template>
-  <div style="padding:30px;">
-    <el-alert :closable="false" title="menu 2" />
-  </div>
-</template>
diff --git a/WebSite/src/views/outer/index.vue b/WebSite/src/views/outer/index.vue
index 69b91a9..fff765e 100644
--- a/WebSite/src/views/outer/index.vue
+++ b/WebSite/src/views/outer/index.vue
@@ -2,8 +2,8 @@
  * @Description: 
  * @Autor: dong jun hua
  * @Date: 2020-07-08 16:06:00
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-07-09 10:56:45
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-20 10:05:22
 -->
 
 <template>
@@ -14,10 +14,10 @@
 
 <script>
 export default {
-  name: "Outer",
+  name: 'Outer',
   data() {
     return {
-      url: ""
+      url: ''
     };
   },
   watch: {
@@ -37,8 +37,8 @@ export default {
   },
   methods: {
     setFrameHeight() {
-      const container = document.querySelector(".frame-container");
-      const frame = document.querySelector(".frame");
+      const container = document.querySelector('.frame-container');
+      const frame = document.querySelector('.frame');
       const height = container.offsetHeight;
       frame.style.height = `${height}px`;
     }
diff --git a/WebSite/src/views/pdf/content.js b/WebSite/src/views/pdf/content.js
deleted file mode 100644
index d5bc71d..0000000
--- a/WebSite/src/views/pdf/content.js
+++ /dev/null
@@ -1,58 +0,0 @@
-const title = "Plans for the Next Iteration of Vue.js";
-
-const content = `<p>Last week at<a href="https://vuejs.london/summary" rel="nofollow">Vue.js London</a>I gave a brief sneak peek of what’s coming in the next major version of Vue. This post provides an in-depth overview of the plan.</p>
-<p><img class=" wscnph" src="https://wpimg.wallstcn.com/b8a1d7be-0b73-41b8-be8c-7c01c93cab66.png" data-wscntype="image" data-wscnh="742" data-wscnw="692" /></p>
-<h3>Why a new majorversion?</h3>
-<p>Vue 2.0 was released<a href="https://medium.com/the-vue-point/vue-2-0-is-here-ef1f26acf4b8" rel="nofollow">exactly two years ago</a>(how time flies!). During this period, the core has remained backwards compatible with five minor releases. We’ve accumulated a number of ideas that would bring improvements, but they were held off because they would result in breaking changes. At the same time, the JavaScript ecosystem and the language itself has been evolving rapidly. There are greatly improved tools that could enhance our workflow, and many new language features that could unlock simpler, more complete, and more efficient solutions to the problems Vue is trying to solve. What’s more exciting is that we are seeing ES2015 support becoming a baseline for all major evergreen browsers. Vue 3.0 aims to leverage these new language features to make Vue core smaller, faster, and more powerful.</p>
-<p>Vue 3.0 is currently in prototyping phase, and we have already implemented a runtime close to feature-parity with 2.x.<strong>Many of the items listed below are either already implemented, or confirmed to be feasible. Ones that are not yet implemented or still in exploration phase are marked with a *.</strong></p>
-<h3>The Details</h3>
-<h4>High-Level APIChanges</h4>
-<blockquote>TL;DR: Everything except render function API and scoped-slots syntax will either remain the same or can be made 2.x compatible via a compatibility build.</blockquote>
-<p>Since it’s a new major, there is going to be some breaking changes. However, we take backwards compatibility seriously, so we want to start communicating these changes as soon as possible. Here’s the currently planned public API changes:</p>
-<ul><li>Template syntax will remain 99% the same. There may be small tweaks in scoped slots syntax, but other than that we have no plans to change anything else for templates.</li><li>3.0 will support class-based components natively, with the aim to provide an API that is pleasant to use in native ES2015 without requiring any transpilation or stage-x features. Most current options will have a reasonable mapping in the class-based API. Stage-x features such as class fields and decorators can still be used optionally to enhance the authoring experience. In addition, the API is designed with TypeScript type inference in mind. The 3.x codebase will itself be written in TypeScript, and providing improved TypeScript support. (That said, usage of TypeScript in an application is still entirely optional.)</li><li>The 2.x object-based component format will still be supported by internally transforming the object to a corresponding class.</li><li>Mixins will still be supported.*</li><li>Top level APIs will likely receive an overhaul to avoid globally mutating the Vue runtime when installing plugins. Instead, plugins will be applied and scoped to a component tree. This will make it easier to test components that rely on specific plugins, and also make it possible to mount multiple Vue applications on the same page with different plugins, but using the same Vue runtime.*</li><li>Functional components can finally be plain functions —however, async components will now need to be explicitly created via a helper function.</li><li>The part that will receive the most changes is the Virtual DOM format used in render functions. We are currently collecting feedback from major library authors and will be sharing more details as we are more confident of the changes, but as long as you don’t heavily rely on hand-written (non-JSX) render functions in your app, upgrading should be a reasonably straightforward process.</li></ul>
-<h4>Source Code Architecture</h4>
-<blockquote>TL;DR: better decoupled internal modules, TypeScript, and a codebase that is easier to contribute to.</blockquote>
-<p>We are re-writing 3.0 from the ground up for a cleaner and more maintainable architecture, in particular trying to make it easier to contribute to. We are breaking some internal functionalities into individual packages in order to isolate the scope of complexity. For example, the observer module will become its own package, with its own public API and tests. Note this does not affect framework-level API— you will not have to manually import individual bits from multiple packages in order to use Vue. Instead, the final Vue package is assembled using these internal packages.</p>
-<p>The codebase is also now written in TypeScript. Although this will make proficiency in TypeScript a pre-requisite for contributing to the new codebase, we believe the type information and IDE support will actually make it easier for a new contributor to make meaningful contributions.</p>
-<p>Decoupling the observer and scheduler into separate packages also allows us to easily experiment with alternative implementations of these parts. For example, we can implement an IE11 compatible observer implementation with the same API, or an alternative scheduler that leverages<code>requestIdleCallback</code>to yield to the browser during long updates.*</p>
-<p><img class=" wscnph" src="https://wpimg.wallstcn.com/4d0b5fb2-d7f9-48fd-8f1b-03362b534dd9.png" data-wscntype="image" data-wscnh="716" data-wscnw="460" /></p>
-<h4>Observation Mechanism</h4>
-<blockquote>TL;DR: more complete, precise, efficient and debuggable reactivity tracking &amp; API for creating observables.</blockquote>
-<p>3.0 will ship with a Proxy-based observer implementation that provides reactivity tracking with full language coverage. This eliminates a number of limitations of Vue 2’s current implementation based on<code>Object.defineProperty</code>:</p>
-<p>The new observer also features the following:</p>
-<p>Easily understand why a component is re-rendering</p>
-<p><img class=" wscnph" src="https://wpimg.wallstcn.com/a0c9d811-1ef9-4628-8976-f7c1aaa66da0.png" data-wscntype="image" data-wscnh="540" data-wscnw="789" /></p>
-<h4>Other Runtime Improvements</h4>
-<blockquote>TL;DR: smaller, faster, tree-shakable features, fragments &amp; portals, custom renderer API.</blockquote>
-<h4>Compiler Improvements*</h4>
-<blockquote>TL;DR: tree-shaking friendly output, more AOT optimizations, parser with better error info and source map support.</blockquote>
-<h4>IE11 Support*</h4>
-<blockquote>TL;DR: it will be supported, but in a separate build with the same reactivity limitations of Vue 2.x.</blockquote>
-<p>The new codebase currently targets evergreen browsers only and assumes baseline native ES2015 support. But alas, we know a lot of our users still need to support IE11 for the foreseeable future. Most of the ES2015 features used can be transpiled / polyfilled for IE11, with the exception for Proxies. Our plan is to implement an alternative observer with the same API, but using the good old ES5<code>Object.defineProperty</code>API. A separate build of Vue 3.x will be distributed using this observer implementation. However, this build will be subject to the same change detection caveats of Vue 2.x and thus not fully compatible with the “modern” build of 3.x. We are aware that this imposes some inconvenience for library authors as they will need to be aware of compatibility for two different builds, but we will make sure to provide clear guidelines on this when we reach that stage.</p>
-<h3>How Do We GetThere</h3>
-<p>First of all, although we are announcing it today, we do not have a definitive timeline yet. What we do know at the moment is the steps we will be taking to get there:</p>
-<h4>1. Internal Feedback for the Runtime Prototype</h4>
-<p>This is the phase we are in right now. Currently, we already have a working runtime prototype that includes the new observer, Virtual DOM and component implementation. We have invited a group of authors of influential community projects to provide feedback for the internal changes, and would like to make sure they are comfortable with the changes before moving forward. We want to ensure that important libraries in the ecosystem will be ready at the same time when we release 3.0, so that users relying on those projects can upgrade easily.</p>
-<h4>2. Public Feedback viaRFCs</h4>
-<p>Once we gain a certain level of confidence in the new design, for each breaking change we will be opening a dedicated RFC issue which includes:</p>
-<p>We will anticipate public feedback from the wider community to help us consolidate these ideas.</p>
-<h4>3. Introduce Compatible Features in 2.x &amp;2.x-next</h4>
-<p>We are not forgetting about 2.x! In fact, we plan to use 2.x to progressively accustom users to the new changes. We will be gradually introducing confirmed API changes into 2.x via opt-in adaptors, and 2.x-next will allow users to try out the new Proxy-based observer.</p>
-<p>The last minor release in 2.x will become LTS and continue to receive bug and security fixes for 18 months when 3.0 is released.</p>
-<h4>4. AlphaPhase</h4>
-<p>Next, we will finish up the compiler and server-side rendering parts of 3.0 and start making alpha releases. These will mostly be for stability testing purposes in small greenfield apps.</p>
-<h4>5. BetaPhase</h4>
-<p>During beta phase, our main goal is updating support libraries and tools like Vue Router, Vuex, Vue CLI, Vue DevTools and make sure they work smoothly with the new core. We will also be working with major library authors from the community to help them get ready for 3.0.</p>
-<h4>6. RCPhase</h4>
-<p>Once we consider the API and codebase stable, we will enter RC phase with API freeze. During this phase we will also work on a “compat build”: a build of 3.0 that includes compatibility layers for 2.x API. This build will also ship with a flag you can turn on to emit deprecation warnings for 2.x API usage in your app. The compat build can be used as a guide to upgrade your app to 3.0.</p>
-<h4>7. IE11build</h4>
-<p>The last task before the final release will be the IE11 compatibility build as mentioned above.</p>
-<h4>8. FinalRelease</h4>
-<p>In all honesty, we don’t know when this will happen yet, but likely in 2019. Again, we care more about shipping something that is solid and stable rather than hitting specific dates. There is a lot of work to be done, but we are excited for what’s coming next!</p>`;
-
-const data = {
-  title,
-  content
-};
-
-export default data;
diff --git a/WebSite/src/views/pdf/download.vue b/WebSite/src/views/pdf/download.vue
deleted file mode 100644
index 74ba12b..0000000
--- a/WebSite/src/views/pdf/download.vue
+++ /dev/null
@@ -1,214 +0,0 @@
-<template>
-  <div
-    v-loading.fullscreen.lock="fullscreenLoading"
-    class="main-article"
-    element-loading-text="Efforts to generate PDF"
-  >
-    <div class="article__heading">
-      <div class="article__heading__title">
-        {{ article.title }}
-      </div>
-    </div>
-    <div style="color: #ccc;">
-      This article is from Evan You on
-      <a
-        target="_blank"
-        href="https://medium.com/the-vue-point/plans-for-the-next-iteration-of-vue-js-777ffea6fabf"
-        >medium</a
-      >
-    </div>
-    <div ref="content" class="node-article-content" v-html="article.content" />
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      article: "",
-      fullscreenLoading: true
-    };
-  },
-  mounted() {
-    this.fetchData();
-  },
-  methods: {
-    fetchData() {
-      import("./content.js").then(data => {
-        const { title } = data.default;
-        document.title = title;
-        this.article = data.default;
-        setTimeout(() => {
-          this.fullscreenLoading = false;
-          this.$nextTick(() => {
-            window.print();
-          });
-        }, 3000);
-      });
-    }
-  }
-};
-</script>
-
-<style lang="scss">
-@mixin clearfix {
-  &:before {
-    display: table;
-    content: "";
-    clear: both;
-  }
-
-  &:after {
-    display: table;
-    content: "";
-    clear: both;
-  }
-}
-
-.main-article {
-  padding: 20px;
-  margin: 0 auto;
-  display: block;
-  width: 740px;
-  background: #fff;
-}
-
-.article__heading {
-  position: relative;
-  padding: 0 0 20px;
-  overflow: hidden;
-}
-
-.article__heading__title {
-  display: block;
-  display: -webkit-box;
-  -webkit-box-orient: vertical;
-  -webkit-line-clamp: 2;
-  line-clamp: 2;
-  word-wrap: break-word;
-  overflow-wrap: break-word;
-  font-size: 32px;
-  line-height: 48px;
-  font-weight: 600;
-  color: #333;
-  overflow: hidden;
-}
-
-.node-article-content {
-  margin: 20px 0 0;
-  @include clearfix;
-  font-size: 16px;
-  color: #333;
-  letter-spacing: 0.5px;
-  line-height: 28px;
-  margin-bottom: 30px;
-  font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman",
-    Times, serif;
-
-  & > :last-child {
-    margin-bottom: 0;
-  }
-
-  b,
-  strong {
-    font-weight: inherit;
-    font-weight: bolder;
-  }
-
-  img {
-    max-width: 100%;
-    display: block;
-    margin: 0 auto;
-  }
-
-  p {
-    font-weight: 400;
-    font-style: normal;
-    font-size: 21px;
-    line-height: 1.58;
-    letter-spacing: -0.003em;
-  }
-
-  ul {
-    margin-bottom: 30px;
-  }
-
-  li {
-    --x-height-multiplier: 0.375;
-    --baseline-multiplier: 0.17;
-
-    letter-spacing: 0.01rem;
-    font-weight: 400;
-    font-style: normal;
-    font-size: 21px;
-    line-height: 1.58;
-    letter-spacing: -0.003em;
-    margin-left: 30px;
-    margin-bottom: 14px;
-  }
-
-  a {
-    text-decoration: none;
-    background-repeat: repeat-x;
-    background-image: linear-gradient(
-      to right,
-      rgba(0, 0, 0, 0.84) 100%,
-      rgba(0, 0, 0, 0) 0
-    );
-    background-size: 1px 1px;
-    background-position: 0 calc(1em + 1px);
-    padding: 0 6px;
-  }
-
-  code {
-    background: rgba(0, 0, 0, 0.05);
-    padding: 3px 4px;
-    margin: 0 2px;
-    font-size: 16px;
-    display: inline-block;
-  }
-
-  img {
-    border: 0;
-  }
-
-  /* 解决 IE6-7 图片缩放锯齿问题 */
-  img {
-    -ms-interpolation-mode: bicubic;
-  }
-
-  blockquote {
-    --x-height-multiplier: 0.375;
-    --baseline-multiplier: 0.17;
-    font-family: medium-content-serif-font, Georgia, Cambria, "Times New Roman",
-      Times, serif;
-    letter-spacing: 0.01rem;
-    font-weight: 400;
-    font-style: italic;
-    font-size: 21px;
-    line-height: 1.58;
-    letter-spacing: -0.003em;
-    border-left: 3px solid rgba(0, 0, 0, 0.84);
-    padding-left: 20px;
-    margin-left: -23px;
-    padding-bottom: 2px;
-  }
-
-  a {
-    text-decoration: none;
-  }
-
-  h2,
-  h3,
-  h4 {
-    font-size: 34px;
-    line-height: 1.15;
-    letter-spacing: -0.015em;
-    margin: 53px 0 0;
-  }
-
-  h4 {
-    font-size: 26px;
-  }
-}
-</style>
diff --git a/WebSite/src/views/pdf/index.vue b/WebSite/src/views/pdf/index.vue
deleted file mode 100644
index 532c964..0000000
--- a/WebSite/src/views/pdf/index.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-<template>
-  <div class="app-container">
-    <aside style="margin-top:15px;">
-      Here we use window.print() to implement the feature of downloading PDF.
-    </aside>
-    <router-link target="_blank" to="/pdf/download">
-      <el-button type="primary">
-        Click to download PDF
-      </el-button>
-    </router-link>
-  </div>
-</template>
diff --git a/WebSite/src/views/permission/components/SwitchRoles.vue b/WebSite/src/views/permission/components/SwitchRoles.vue
deleted file mode 100644
index 743aa9a..0000000
--- a/WebSite/src/views/permission/components/SwitchRoles.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
- * @Description: 
- * @Autor: dong jun hua
- * @Date: 2020-06-08 09:28:06
- * @LastEditors: dong jun hua
- * @LastEditTime: 2020-06-16 10:06:27
--->
-<template>
-  <div>
-    <div style="margin-bottom:15px;">Your roles: {{ roles }}</div>
-    Switch roles:
-    <el-radio-group v-model="switchRoles">
-      <el-radio-button label="editor" />
-      <el-radio-button label="admin" />
-    </el-radio-group>
-  </div>
-</template>
-
-<script>
-export default {
-  computed: {
-    roles() {
-      return this.$store.getters.roles;
-    },
-    switchRoles: {
-      get() {
-        return this.roles[0];
-      },
-      set(val) {}
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/permission/directive.vue b/WebSite/src/views/permission/directive.vue
deleted file mode 100644
index 204b857..0000000
--- a/WebSite/src/views/permission/directive.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
-  <div class="app-container">
-    <switch-roles @change="handleRolesChange" />
-    <div :key="key" style="margin-top:30px;">
-      <div>
-        <span v-permission="['admin']" class="permission-alert">
-          Only
-          <el-tag class="permission-tag" size="small">admin</el-tag> can see
-          this
-        </span>
-        <el-tag
-          v-permission="['admin']"
-          class="permission-sourceCode"
-          type="info"
-        >
-          v-permission="['admin']"
-        </el-tag>
-      </div>
-
-      <div>
-        <span v-permission="['editor']" class="permission-alert">
-          Only
-          <el-tag class="permission-tag" size="small">editor</el-tag> can see
-          this
-        </span>
-        <el-tag
-          v-permission="['editor']"
-          class="permission-sourceCode"
-          type="info"
-        >
-          v-permission="['editor']"
-        </el-tag>
-      </div>
-
-      <div>
-        <span v-permission="['admin', 'editor']" class="permission-alert">
-          Both
-          <el-tag class="permission-tag" size="small">admin</el-tag> and
-          <el-tag class="permission-tag" size="small">editor</el-tag> can see
-          this
-        </span>
-        <el-tag
-          v-permission="['admin', 'editor']"
-          class="permission-sourceCode"
-          type="info"
-        >
-          v-permission="['admin','editor']"
-        </el-tag>
-      </div>
-    </div>
-
-    <div :key="'checkPermission' + key" style="margin-top:60px;">
-      <aside>
-        In some cases, using v-permission will have no effect. For example:
-        Element-UI's Tab component or el-table-column and other scenes that
-        dynamically render dom. You can only do this with v-if.
-        <br />
-        e.g.
-      </aside>
-
-      <el-tabs type="border-card" style="width:550px;">
-        <el-tab-pane v-if="checkPermission(['admin'])" label="Admin">
-          Admin can see this
-          <el-tag class="permission-sourceCode" type="info">
-            v-if="checkPermission(['admin'])"
-          </el-tag>
-        </el-tab-pane>
-
-        <el-tab-pane v-if="checkPermission(['editor'])" label="Editor">
-          Editor can see this
-          <el-tag class="permission-sourceCode" type="info">
-            v-if="checkPermission(['editor'])"
-          </el-tag>
-        </el-tab-pane>
-
-        <el-tab-pane
-          v-if="checkPermission(['admin', 'editor'])"
-          label="Admin-OR-Editor"
-        >
-          Both admin or editor can see this
-          <el-tag class="permission-sourceCode" type="info">
-            v-if="checkPermission(['admin','editor'])"
-          </el-tag>
-        </el-tab-pane>
-      </el-tabs>
-    </div>
-  </div>
-</template>
-
-<script>
-import permission from "@/directive/permission/index.js"; // 权限判断指令
-import checkPermission from "@/utils/permission"; // 权限判断函数
-import SwitchRoles from "./components/SwitchRoles";
-
-export default {
-  name: "DirectivePermission",
-  components: { SwitchRoles },
-  directives: { permission },
-  data() {
-    return {
-      key: 1 // 为了能每次切换权限的时候重新初始化指令
-    };
-  },
-  methods: {
-    checkPermission,
-    handleRolesChange() {
-      this.key++;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.app-container {
-  /deep/ .permission-alert {
-    width: 320px;
-    margin-top: 15px;
-    background-color: #f0f9eb;
-    color: #67c23a;
-    padding: 8px 16px;
-    border-radius: 4px;
-    display: inline-block;
-  }
-  /deep/ .permission-sourceCode {
-    margin-left: 15px;
-  }
-  /deep/ .permission-tag {
-    background-color: #ecf5ff;
-  }
-}
-</style>
diff --git a/WebSite/src/views/permission/page.vue b/WebSite/src/views/permission/page.vue
deleted file mode 100644
index 0727172..0000000
--- a/WebSite/src/views/permission/page.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-<template>
-  <div class="app-container">
-    <switch-roles @change="handleRolesChange" />
-  </div>
-</template>
-
-<script>
-import SwitchRoles from "./components/SwitchRoles";
-
-export default {
-  name: "PagePermission",
-  components: { SwitchRoles },
-  methods: {
-    handleRolesChange() {
-      this.$router.push({ path: "/permission/index?" + +new Date() });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/permission/role.vue b/WebSite/src/views/permission/role.vue
deleted file mode 100644
index dd0d4fd..0000000
--- a/WebSite/src/views/permission/role.vue
+++ /dev/null
@@ -1,302 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-button type="primary" @click="handleAddRole">New Role</el-button>
-
-    <el-table :data="rolesList" style="width: 100%;margin-top:30px;" border>
-      <el-table-column align="center" label="Role Key" width="220">
-        <template slot-scope="scope">
-          {{ scope.row.key }}
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="Role Name" width="220">
-        <template slot-scope="scope">
-          {{ scope.row.name }}
-        </template>
-      </el-table-column>
-      <el-table-column align="header-center" label="Description">
-        <template slot-scope="scope">
-          {{ scope.row.description }}
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="Operations">
-        <template slot-scope="scope">
-          <el-button type="primary" size="small" @click="handleEdit(scope)"
-            >Edit</el-button
-          >
-          <el-button type="danger" size="small" @click="handleDelete(scope)"
-            >Delete</el-button
-          >
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <el-dialog
-      :visible.sync="dialogVisible"
-      :title="dialogType === 'edit' ? 'Edit Role' : 'New Role'"
-    >
-      <el-form :model="role" label-width="80px" label-position="left">
-        <el-form-item label="Name">
-          <el-input v-model="role.name" placeholder="Role Name" />
-        </el-form-item>
-        <el-form-item label="Desc">
-          <el-input
-            v-model="role.description"
-            :autosize="{ minRows: 2, maxRows: 4 }"
-            type="textarea"
-            placeholder="Role Description"
-          />
-        </el-form-item>
-        <el-form-item label="Menus">
-          <el-tree
-            ref="tree"
-            :check-strictly="checkStrictly"
-            :data="routesData"
-            :props="defaultProps"
-            show-checkbox
-            node-key="path"
-            class="permission-tree"
-          />
-        </el-form-item>
-      </el-form>
-      <div style="text-align:right;">
-        <el-button type="danger" @click="dialogVisible = false"
-          >Cancel</el-button
-        >
-        <el-button type="primary" @click="confirmRole">Confirm</el-button>
-      </div>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import path from "path";
-import { deepClone } from "@/utils";
-import {
-  getRoutes,
-  getRoles,
-  addRole,
-  deleteRole,
-  updateRole
-} from "@/api/role";
-
-const defaultRole = {
-  key: "",
-  name: "",
-  description: "",
-  routes: []
-};
-
-export default {
-  data() {
-    return {
-      role: Object.assign({}, defaultRole),
-      routes: [],
-      rolesList: [],
-      dialogVisible: false,
-      dialogType: "new",
-      checkStrictly: false,
-      defaultProps: {
-        children: "children",
-        label: "title"
-      }
-    };
-  },
-  computed: {
-    routesData() {
-      return this.routes;
-    }
-  },
-  created() {
-    // Mock: get all routes and roles list from server
-    this.getRoutes();
-    this.getRoles();
-  },
-  methods: {
-    async getRoutes() {
-      const res = await getRoutes();
-      this.serviceRoutes = res.data;
-      this.routes = this.generateRoutes(res.data);
-    },
-    async getRoles() {
-      const res = await getRoles();
-      this.rolesList = res.data;
-    },
-
-    // Reshape the routes structure so that it looks the same as the sidebar
-    generateRoutes(routes, basePath = "/") {
-      const res = [];
-
-      for (let route of routes) {
-        // skip some route
-        if (route.hidden) {
-          continue;
-        }
-
-        const onlyOneShowingChild = this.onlyOneShowingChild(
-          route.children,
-          route
-        );
-
-        if (route.children && onlyOneShowingChild && !route.alwaysShow) {
-          route = onlyOneShowingChild;
-        }
-
-        const data = {
-          path: path.resolve(basePath, route.path),
-          title: route.meta && route.meta.title
-        };
-
-        // recursive child routes
-        if (route.children) {
-          data.children = this.generateRoutes(route.children, data.path);
-        }
-        res.push(data);
-      }
-      return res;
-    },
-    generateArr(routes) {
-      let data = [];
-      routes.forEach(route => {
-        data.push(route);
-        if (route.children) {
-          const temp = this.generateArr(route.children);
-          if (temp.length > 0) {
-            data = [...data, ...temp];
-          }
-        }
-      });
-      return data;
-    },
-    handleAddRole() {
-      this.role = Object.assign({}, defaultRole);
-      if (this.$refs.tree) {
-        this.$refs.tree.setCheckedNodes([]);
-      }
-      this.dialogType = "new";
-      this.dialogVisible = true;
-    },
-    handleEdit(scope) {
-      this.dialogType = "edit";
-      this.dialogVisible = true;
-      this.checkStrictly = true;
-      this.role = deepClone(scope.row);
-      this.$nextTick(() => {
-        const routes = this.generateRoutes(this.role.routes);
-        this.$refs.tree.setCheckedNodes(this.generateArr(routes));
-        // set checked state of a node not affects its father and child nodes
-        this.checkStrictly = false;
-      });
-    },
-    handleDelete({ $index, row }) {
-      this.$confirm("Confirm to remove the role?", "Warning", {
-        confirmButtonText: "Confirm",
-        cancelButtonText: "Cancel",
-        type: "warning"
-      })
-        .then(async () => {
-          await deleteRole(row.key);
-          this.rolesList.splice($index, 1);
-          this.$message({
-            type: "success",
-            message: "Delete succed!"
-          });
-        })
-        .catch(err => {
-          console.error(err);
-        });
-    },
-    generateTree(routes, basePath = "/", checkedKeys) {
-      const res = [];
-
-      for (const route of routes) {
-        const routePath = path.resolve(basePath, route.path);
-
-        // recursive child routes
-        if (route.children) {
-          route.children = this.generateTree(
-            route.children,
-            routePath,
-            checkedKeys
-          );
-        }
-
-        if (
-          checkedKeys.includes(routePath) ||
-          (route.children && route.children.length >= 1)
-        ) {
-          res.push(route);
-        }
-      }
-      return res;
-    },
-    async confirmRole() {
-      const isEdit = this.dialogType === "edit";
-
-      const checkedKeys = this.$refs.tree.getCheckedKeys();
-      this.role.routes = this.generateTree(
-        deepClone(this.serviceRoutes),
-        "/",
-        checkedKeys
-      );
-
-      if (isEdit) {
-        await updateRole(this.role.key, this.role);
-        for (let index = 0; index < this.rolesList.length; index++) {
-          if (this.rolesList[index].key === this.role.key) {
-            this.rolesList.splice(index, 1, Object.assign({}, this.role));
-            break;
-          }
-        }
-      } else {
-        const { data } = await addRole(this.role);
-        this.role.key = data.key;
-        this.rolesList.push(this.role);
-      }
-
-      const { description, key, name } = this.role;
-      this.dialogVisible = false;
-      this.$notify({
-        title: "Success",
-        dangerouslyUseHTMLString: true,
-        message: `
-            <div>Role Key: ${key}</div>
-            <div>Role Name: ${name}</div>
-            <div>Description: ${description}</div>
-          `,
-        type: "success"
-      });
-    },
-    // reference: src/view/layout/components/Sidebar/SidebarItem.vue
-    onlyOneShowingChild(children = [], parent) {
-      let onlyOneChild = null;
-      const showingChildren = children.filter(item => !item.hidden);
-
-      // When there is only one child route, the child route is displayed by default
-      if (showingChildren.length === 1) {
-        onlyOneChild = showingChildren[0];
-        onlyOneChild.path = path.resolve(parent.path, onlyOneChild.path);
-        return onlyOneChild;
-      }
-
-      // Show parent if there are no child route to display
-      if (showingChildren.length === 0) {
-        onlyOneChild = { ...parent, path: "", noShowingChildren: true };
-        return onlyOneChild;
-      }
-
-      return false;
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.app-container {
-  .roles-table {
-    margin-top: 30px;
-  }
-  .permission-tree {
-    margin-bottom: 30px;
-  }
-}
-</style>
diff --git a/WebSite/src/views/profile/components/Account.vue b/WebSite/src/views/profile/components/Account.vue
deleted file mode 100644
index 77a7b2b..0000000
--- a/WebSite/src/views/profile/components/Account.vue
+++ /dev/null
@@ -1,38 +0,0 @@
-<template>
-  <el-form>
-    <el-form-item label="Name">
-      <el-input v-model.trim="user.name" />
-    </el-form-item>
-    <el-form-item label="Email">
-      <el-input v-model.trim="user.email" />
-    </el-form-item>
-    <el-form-item>
-      <el-button type="primary" @click="submit">Update</el-button>
-    </el-form-item>
-  </el-form>
-</template>
-
-<script>
-export default {
-  props: {
-    user: {
-      type: Object,
-      default: () => {
-        return {
-          name: "",
-          email: ""
-        };
-      }
-    }
-  },
-  methods: {
-    submit() {
-      this.$message({
-        message: "User information has been updated successfully",
-        type: "success",
-        duration: 5 * 1000
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/profile/components/Activity.vue b/WebSite/src/views/profile/components/Activity.vue
deleted file mode 100644
index 679ae25..0000000
--- a/WebSite/src/views/profile/components/Activity.vue
+++ /dev/null
@@ -1,202 +0,0 @@
-<template>
-  <div class="user-activity">
-    <div class="post">
-      <div class="user-block">
-        <img
-          class="img-circle"
-          :src="
-            'https://wpimg.wallstcn.com/57ed425a-c71e-4201-9428-68760c0537c4.jpg' +
-              avatarPrefix
-          "
-        />
-        <span class="username text-muted">Iron Man</span>
-        <span class="description">Shared publicly - 7:30 PM today</span>
-      </div>
-      <p>
-        Lorem ipsum represents a long-held tradition for designers, typographers
-        and the like. Some people hate it and argue for its demise, but others
-        ignore the hate as they create awesome tools to help create filler text
-        for everyone from bacon lovers to Charlie Sheen fans.
-      </p>
-      <ul class="list-inline">
-        <li>
-          <span class="link-black text-sm">
-            <i class="el-icon-share" />
-            Share
-          </span>
-        </li>
-        <li>
-          <span class="link-black text-sm">
-            <svg-icon icon-class="like" />
-            Like
-          </span>
-        </li>
-      </ul>
-    </div>
-    <div class="post">
-      <div class="user-block">
-        <img
-          class="img-circle"
-          :src="
-            'https://wpimg.wallstcn.com/9e2a5d0a-bd5b-457f-ac8e-86554616c87b.jpg' +
-              avatarPrefix
-          "
-        />
-        <span class="username text-muted">Captain American</span>
-        <span class="description">Sent you a message - yesterday</span>
-      </div>
-      <p>
-        Lorem ipsum represents a long-held tradition for designers, typographers
-        and the like. Some people hate it and argue for its demise, but others
-        ignore the hate as they create awesome tools to help create filler text
-        for everyone from bacon lovers to Charlie Sheen fans.
-      </p>
-      <ul class="list-inline">
-        <li>
-          <span class="link-black text-sm">
-            <i class="el-icon-share" />
-            Share
-          </span>
-        </li>
-        <li>
-          <span class="link-black text-sm">
-            <svg-icon icon-class="like" />
-            Like
-          </span>
-        </li>
-      </ul>
-    </div>
-    <div class="post">
-      <div class="user-block">
-        <img
-          class="img-circle"
-          :src="
-            'https://wpimg.wallstcn.com/fb57f689-e1ab-443c-af12-8d4066e202e2.jpg' +
-              avatarPrefix
-          "
-        />
-        <span class="username">Spider Man</span>
-        <span class="description">Posted 4 photos - 2 days ago</span>
-      </div>
-      <div class="user-images">
-        <el-carousel :interval="6000" type="card" height="220px">
-          <el-carousel-item v-for="item in carouselImages" :key="item">
-            <img :src="item + carouselPrefix" class="image" />
-          </el-carousel-item>
-        </el-carousel>
-      </div>
-      <ul class="list-inline">
-        <li>
-          <span class="link-black text-sm"
-            ><i class="el-icon-share" /> Share</span
-          >
-        </li>
-        <li>
-          <span class="link-black text-sm">
-            <svg-icon icon-class="like" /> Like</span
-          >
-        </li>
-      </ul>
-    </div>
-  </div>
-</template>
-
-<script>
-const avatarPrefix = "?imageView2/1/w/80/h/80";
-const carouselPrefix = "?imageView2/2/h/440";
-
-export default {
-  data() {
-    return {
-      carouselImages: [
-        "https://wpimg.wallstcn.com/9679ffb0-9e0b-4451-9916-e21992218054.jpg",
-        "https://wpimg.wallstcn.com/bcce3734-0837-4b9f-9261-351ef384f75a.jpg",
-        "https://wpimg.wallstcn.com/d1d7b033-d75e-4cd6-ae39-fcd5f1c0a7c5.jpg",
-        "https://wpimg.wallstcn.com/50530061-851b-4ca5-9dc5-2fead928a939.jpg"
-      ],
-      avatarPrefix,
-      carouselPrefix
-    };
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.user-activity {
-  .user-block {
-    .username,
-    .description {
-      display: block;
-      margin-left: 50px;
-      padding: 2px 0;
-    }
-
-    .username {
-      font-size: 16px;
-      color: #000;
-    }
-
-    :after {
-      clear: both;
-    }
-
-    .img-circle {
-      border-radius: 50%;
-      width: 40px;
-      height: 40px;
-      float: left;
-    }
-
-    span {
-      font-weight: 500;
-      font-size: 12px;
-    }
-  }
-
-  .post {
-    font-size: 14px;
-    border-bottom: 1px solid #d2d6de;
-    margin-bottom: 15px;
-    padding-bottom: 15px;
-    color: #666;
-
-    .image {
-      width: 100%;
-      height: 100%;
-    }
-
-    .user-images {
-      padding-top: 20px;
-    }
-  }
-
-  .list-inline {
-    padding-left: 0;
-    margin-left: -5px;
-    list-style: none;
-
-    li {
-      display: inline-block;
-      padding-right: 5px;
-      padding-left: 5px;
-      font-size: 13px;
-    }
-
-    .link-black {
-      &:hover,
-      &:focus {
-        color: #999;
-      }
-    }
-  }
-}
-
-.box-center {
-  margin: 0 auto;
-  display: table;
-}
-
-.text-muted {
-  color: #777;
-}
-</style>
diff --git a/WebSite/src/views/profile/components/Timeline.vue b/WebSite/src/views/profile/components/Timeline.vue
deleted file mode 100644
index b3c2b5d..0000000
--- a/WebSite/src/views/profile/components/Timeline.vue
+++ /dev/null
@@ -1,48 +0,0 @@
-<template>
-  <div class="block">
-    <el-timeline>
-      <el-timeline-item
-        v-for="(item, index) of timeline"
-        :key="index"
-        :timestamp="item.timestamp"
-        placement="top"
-      >
-        <el-card>
-          <h4>{{ item.title }}</h4>
-          <p>{{ item.content }}</p>
-        </el-card>
-      </el-timeline-item>
-    </el-timeline>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      timeline: [
-        {
-          timestamp: "2019/4/20",
-          title: "Update Github template",
-          content: "PanJiaChen committed 2019/4/20 20:46"
-        },
-        {
-          timestamp: "2019/4/21",
-          title: "Update Github template",
-          content: "PanJiaChen committed 2019/4/21 20:46"
-        },
-        {
-          timestamp: "2019/4/22",
-          title: "Build Template",
-          content: "PanJiaChen committed 2019/4/22 20:46"
-        },
-        {
-          timestamp: "2019/4/23",
-          title: "Release New Version",
-          content: "PanJiaChen committed 2019/4/23 20:46"
-        }
-      ]
-    };
-  }
-};
-</script>
diff --git a/WebSite/src/views/profile/components/UserCard.vue b/WebSite/src/views/profile/components/UserCard.vue
deleted file mode 100644
index 4905588..0000000
--- a/WebSite/src/views/profile/components/UserCard.vue
+++ /dev/null
@@ -1,145 +0,0 @@
-<template>
-  <el-card style="margin-bottom:20px;">
-    <div slot="header" class="clearfix">
-      <span>About me</span>
-    </div>
-
-    <div class="user-profile">
-      <div class="box-center">
-        <pan-thumb
-          :image="user.avatar"
-          :height="'100px'"
-          :width="'100px'"
-          :hoverable="false"
-        >
-          <div>Hello</div>
-          {{ user.role }}
-        </pan-thumb>
-      </div>
-      <div class="box-center">
-        <div class="user-name text-center">{{ user.name }}</div>
-        <div class="user-role text-center text-muted">
-          {{ user.role | uppercaseFirst }}
-        </div>
-      </div>
-    </div>
-
-    <div class="user-bio">
-      <div class="user-education user-bio-section">
-        <div class="user-bio-section-header">
-          <svg-icon icon-class="education" /><span>Education</span>
-        </div>
-        <div class="user-bio-section-body">
-          <div class="text-muted">
-            JS in Computer Science from the University of Technology
-          </div>
-        </div>
-      </div>
-
-      <div class="user-skills user-bio-section">
-        <div class="user-bio-section-header">
-          <svg-icon icon-class="skill" /><span>Skills</span>
-        </div>
-        <div class="user-bio-section-body">
-          <div class="progress-item">
-            <span>Vue</span>
-            <el-progress :percentage="70" />
-          </div>
-          <div class="progress-item">
-            <span>JavaScript</span>
-            <el-progress :percentage="18" />
-          </div>
-          <div class="progress-item">
-            <span>Css</span>
-            <el-progress :percentage="12" />
-          </div>
-          <div class="progress-item">
-            <span>ESLint</span>
-            <el-progress :percentage="100" status="success" />
-          </div>
-        </div>
-      </div>
-    </div>
-  </el-card>
-</template>
-
-<script>
-import PanThumb from "@/components/PanThumb";
-
-export default {
-  components: { PanThumb },
-  props: {
-    user: {
-      type: Object,
-      default: () => {
-        return {
-          name: "",
-          email: "",
-          avatar: "",
-          roles: ""
-        };
-      }
-    }
-  }
-};
-</script>
-
-<style lang="scss" scoped>
-.box-center {
-  margin: 0 auto;
-  display: table;
-}
-
-.text-muted {
-  color: #777;
-}
-
-.user-profile {
-  .user-name {
-    font-weight: bold;
-  }
-
-  .box-center {
-    padding-top: 10px;
-  }
-
-  .user-role {
-    padding-top: 10px;
-    font-weight: 400;
-    font-size: 14px;
-  }
-
-  .box-social {
-    padding-top: 30px;
-
-    .el-table {
-      border-top: 1px solid #dfe6ec;
-    }
-  }
-
-  .user-follow {
-    padding-top: 20px;
-  }
-}
-
-.user-bio {
-  margin-top: 20px;
-  color: #606266;
-
-  span {
-    padding-left: 4px;
-  }
-
-  .user-bio-section {
-    font-size: 14px;
-    padding: 15px 0;
-
-    .user-bio-section-header {
-      border-bottom: 1px solid #dfe6ec;
-      padding-bottom: 10px;
-      margin-bottom: 10px;
-      font-weight: bold;
-    }
-  }
-}
-</style>
diff --git a/WebSite/src/views/profile/index.vue b/WebSite/src/views/profile/index.vue
deleted file mode 100644
index 326985f..0000000
--- a/WebSite/src/views/profile/index.vue
+++ /dev/null
@@ -1,62 +0,0 @@
-<template>
-  <div class="app-container">
-    <div v-if="user">
-      <el-row :gutter="20">
-        <el-col :span="6" :xs="24">
-          <user-card :user="user" />
-        </el-col>
-
-        <el-col :span="18" :xs="24">
-          <el-card>
-            <el-tabs v-model="activeTab">
-              <el-tab-pane label="Activity" name="activity">
-                <activity />
-              </el-tab-pane>
-              <el-tab-pane label="Timeline" name="timeline">
-                <timeline />
-              </el-tab-pane>
-              <el-tab-pane label="Account" name="account">
-                <account :user="user" />
-              </el-tab-pane>
-            </el-tabs>
-          </el-card>
-        </el-col>
-      </el-row>
-    </div>
-  </div>
-</template>
-
-<script>
-import { mapGetters } from "vuex";
-import UserCard from "./components/UserCard";
-import Activity from "./components/Activity";
-import Timeline from "./components/Timeline";
-import Account from "./components/Account";
-
-export default {
-  name: "Profile",
-  components: { UserCard, Activity, Timeline, Account },
-  data() {
-    return {
-      user: {},
-      activeTab: "activity"
-    };
-  },
-  computed: {
-    ...mapGetters(["name", "avatar", "roles"])
-  },
-  created() {
-    this.getUser();
-  },
-  methods: {
-    getUser() {
-      this.user = {
-        name: this.name,
-        role: this.roles.join(" | "),
-        email: "admin@test.com",
-        avatar: this.avatar
-      };
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/qiniu/upload.vue b/WebSite/src/views/qiniu/upload.vue
deleted file mode 100644
index 8b195c8..0000000
--- a/WebSite/src/views/qiniu/upload.vue
+++ /dev/null
@@ -1,47 +0,0 @@
-<template>
-  <el-upload
-    :data="dataObj"
-    :multiple="true"
-    :before-upload="beforeUpload"
-    action="https://upload.qbox.me"
-    drag
-  >
-    <i class="el-icon-upload" />
-    <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
-  </el-upload>
-</template>
-
-<script>
-import { getToken } from "@/api/qiniu";
-// 获取七牛token 后端通过Access Key,Secret Key,bucket等生成token
-// 七牛官方sdk https://developer.qiniu.com/sdk#official-sdk
-
-export default {
-  data() {
-    return {
-      dataObj: { token: "", key: "" },
-      image_uri: [],
-      fileList: []
-    };
-  },
-  methods: {
-    beforeUpload() {
-      const _self = this;
-      return new Promise((resolve, reject) => {
-        getToken()
-          .then(response => {
-            const key = response.data.qiniu_key;
-            const token = response.data.qiniu_token;
-            _self._data.dataObj.token = token;
-            _self._data.dataObj.key = key;
-            resolve(true);
-          })
-          .catch(err => {
-            console.log(err);
-            reject(false);
-          });
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/redirect/index.vue b/WebSite/src/views/redirect/index.vue
deleted file mode 100644
index 9357ce2..0000000
--- a/WebSite/src/views/redirect/index.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-<script>
-export default {
-  created() {
-    const { params, query } = this.$route;
-    const { path } = params;
-    this.$router.replace({ path: "/" + path, query });
-  },
-  render: function(h) {
-    return h(); // avoid warning message
-  }
-};
-</script>
diff --git a/WebSite/src/views/tab/components/TabPane.vue b/WebSite/src/views/tab/components/TabPane.vue
deleted file mode 100644
index 1d61e65..0000000
--- a/WebSite/src/views/tab/components/TabPane.vue
+++ /dev/null
@@ -1,108 +0,0 @@
-<template>
-  <el-table :data="list" border fit highlight-current-row style="width: 100%">
-    <el-table-column
-      v-loading="loading"
-      align="center"
-      label="ID"
-      width="65"
-      element-loading-text="请给我点时间!"
-    >
-      <template slot-scope="scope">
-        <span>{{ scope.row.id }}</span>
-      </template>
-    </el-table-column>
-
-    <el-table-column width="180px" align="center" label="Date">
-      <template slot-scope="scope">
-        <span>{{
-          scope.row.timestamp | parseTime("{y}-{m}-{d} {h}:{i}")
-        }}</span>
-      </template>
-    </el-table-column>
-
-    <el-table-column min-width="300px" label="Title">
-      <template slot-scope="{ row }">
-        <span>{{ row.title }}</span>
-        <el-tag>{{ row.type }}</el-tag>
-      </template>
-    </el-table-column>
-
-    <el-table-column width="110px" align="center" label="Author">
-      <template slot-scope="scope">
-        <span>{{ scope.row.author }}</span>
-      </template>
-    </el-table-column>
-
-    <el-table-column width="120px" label="Importance">
-      <template slot-scope="scope">
-        <svg-icon
-          v-for="n in +scope.row.importance"
-          :key="n"
-          icon-class="star"
-        />
-      </template>
-    </el-table-column>
-
-    <el-table-column align="center" label="Readings" width="95">
-      <template slot-scope="scope">
-        <span>{{ scope.row.pageviews }}</span>
-      </template>
-    </el-table-column>
-
-    <el-table-column class-name="status-col" label="Status" width="110">
-      <template slot-scope="{ row }">
-        <el-tag :type="row.status | statusFilter">
-          {{ row.status }}
-        </el-tag>
-      </template>
-    </el-table-column>
-  </el-table>
-</template>
-
-<script>
-import { fetchList } from "@/api/article";
-
-export default {
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        published: "success",
-        draft: "info",
-        deleted: "danger"
-      };
-      return statusMap[status];
-    }
-  },
-  props: {
-    type: {
-      type: String,
-      default: "CN"
-    }
-  },
-  data() {
-    return {
-      list: null,
-      listQuery: {
-        page: 1,
-        limit: 5,
-        type: this.type,
-        sort: "+id"
-      },
-      loading: false
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    getList() {
-      this.loading = true;
-      this.$emit("create"); // for test
-      fetchList(this.listQuery).then(response => {
-        this.list = response.data.items;
-        this.loading = false;
-      });
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/tab/index.vue b/WebSite/src/views/tab/index.vue
deleted file mode 100644
index 7857ab4..0000000
--- a/WebSite/src/views/tab/index.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-<template>
-  <div class="tab-container">
-    <el-tag>mounted times :{{ createdTimes }}</el-tag>
-    <el-alert
-      :closable="false"
-      style="width:200px;display:inline-block;vertical-align: middle;margin-left:30px;"
-      title="Tab with keep-alive"
-      type="success"
-    />
-    <el-tabs v-model="activeName" style="margin-top:15px;" type="border-card">
-      <el-tab-pane
-        v-for="item in tabMapOptions"
-        :key="item.key"
-        :label="item.label"
-        :name="item.key"
-      >
-        <keep-alive>
-          <tab-pane
-            v-if="activeName == item.key"
-            :type="item.key"
-            @create="showCreatedTimes"
-          />
-        </keep-alive>
-      </el-tab-pane>
-    </el-tabs>
-  </div>
-</template>
-
-<script>
-import tabPane from "./components/TabPane";
-
-export default {
-  name: "Tab",
-  components: { tabPane },
-  data() {
-    return {
-      tabMapOptions: [
-        { label: "China", key: "CN" },
-        { label: "USA", key: "US" },
-        { label: "Japan", key: "JP" },
-        { label: "Eurozone", key: "EU" }
-      ],
-      activeName: "CN",
-      createdTimes: 0
-    };
-  },
-  watch: {
-    activeName(val) {
-      this.$router.push(`${this.$route.path}?tab=${val}`);
-    }
-  },
-  created() {
-    // init the default selected tab
-    const tab = this.$route.query.tab;
-    if (tab) {
-      this.activeName = tab;
-    }
-  },
-  methods: {
-    showCreatedTimes() {
-      this.createdTimes = this.createdTimes + 1;
-    }
-  }
-};
-</script>
-
-<style scoped>
-.tab-container {
-  margin: 30px;
-}
-</style>
diff --git a/WebSite/src/views/table/complex-table.vue b/WebSite/src/views/table/complex-table.vue
deleted file mode 100644
index 3d4cf90..0000000
--- a/WebSite/src/views/table/complex-table.vue
+++ /dev/null
@@ -1,567 +0,0 @@
-<template>
-  <div class="app-container">
-    <div class="filter-container">
-      <el-input
-        v-model="listQuery.title"
-        placeholder="Title"
-        style="width: 200px;"
-        class="filter-item"
-        @keyup.enter.native="handleFilter"
-      />
-      <el-select
-        v-model="listQuery.importance"
-        placeholder="Imp"
-        clearable
-        style="width: 90px"
-        class="filter-item"
-      >
-        <el-option
-          v-for="item in importanceOptions"
-          :key="item"
-          :label="item"
-          :value="item"
-        />
-      </el-select>
-      <el-select
-        v-model="listQuery.type"
-        placeholder="Type"
-        clearable
-        class="filter-item"
-        style="width: 130px"
-      >
-        <el-option
-          v-for="item in calendarTypeOptions"
-          :key="item.key"
-          :label="item.display_name + '(' + item.key + ')'"
-          :value="item.key"
-        />
-      </el-select>
-      <el-select
-        v-model="listQuery.sort"
-        style="width: 140px"
-        class="filter-item"
-        @change="handleFilter"
-      >
-        <el-option
-          v-for="item in sortOptions"
-          :key="item.key"
-          :label="item.label"
-          :value="item.key"
-        />
-      </el-select>
-      <el-button
-        v-waves
-        class="filter-item"
-        type="primary"
-        icon="el-icon-search"
-        @click="handleFilter"
-      >
-        Search
-      </el-button>
-      <el-button
-        class="filter-item"
-        style="margin-left: 10px;"
-        type="primary"
-        icon="el-icon-edit"
-        @click="handleCreate"
-      >
-        Add
-      </el-button>
-      <el-button
-        v-waves
-        :loading="downloadLoading"
-        class="filter-item"
-        type="primary"
-        icon="el-icon-download"
-        @click="handleDownload"
-      >
-        Export
-      </el-button>
-      <el-checkbox
-        v-model="showReviewer"
-        class="filter-item"
-        style="margin-left:15px;"
-        @change="tableKey = tableKey + 1"
-      >
-        reviewer
-      </el-checkbox>
-    </div>
-
-    <el-table
-      :key="tableKey"
-      v-loading="listLoading"
-      :data="list"
-      border
-      fit
-      highlight-current-row
-      style="width: 100%;"
-      @sort-change="sortChange"
-    >
-      <el-table-column
-        label="ID"
-        prop="id"
-        sortable="custom"
-        align="center"
-        width="80"
-        :class-name="getSortClass('id')"
-      >
-        <template slot-scope="{ row }">
-          <span>{{ row.id }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="Date" width="150px" align="center">
-        <template slot-scope="{ row }">
-          <span>{{ row.timestamp | parseTime("{y}-{m}-{d} {h}:{i}") }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="Title" min-width="150px">
-        <template slot-scope="{ row }">
-          <span class="link-type" @click="handleUpdate(row)">{{
-            row.title
-          }}</span>
-          <el-tag>{{ row.type | typeFilter }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="Author" width="110px" align="center">
-        <template slot-scope="{ row }">
-          <span>{{ row.author }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column
-        v-if="showReviewer"
-        label="Reviewer"
-        width="110px"
-        align="center"
-      >
-        <template slot-scope="{ row }">
-          <span style="color:red;">{{ row.reviewer }}</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="Imp" width="80px">
-        <template slot-scope="{ row }">
-          <svg-icon
-            v-for="n in +row.importance"
-            :key="n"
-            icon-class="star"
-            class="meta-item__icon"
-          />
-        </template>
-      </el-table-column>
-      <el-table-column label="Readings" align="center" width="95">
-        <template slot-scope="{ row }">
-          <span
-            v-if="row.pageviews"
-            class="link-type"
-            @click="handleFetchPv(row.pageviews)"
-            >{{ row.pageviews }}</span
-          >
-          <span v-else>0</span>
-        </template>
-      </el-table-column>
-      <el-table-column label="Status" class-name="status-col" width="100">
-        <template slot-scope="{ row }">
-          <el-tag :type="row.status | statusFilter">
-            {{ row.status }}
-          </el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column
-        label="Actions"
-        align="center"
-        width="230"
-        class-name="small-padding fixed-width"
-      >
-        <template slot-scope="{ row, $index }">
-          <el-button type="primary" size="mini" @click="handleUpdate(row)">
-            Edit
-          </el-button>
-          <el-button
-            v-if="row.status != 'published'"
-            size="mini"
-            type="success"
-            @click="handleModifyStatus(row, 'published')"
-          >
-            Publish
-          </el-button>
-          <el-button
-            v-if="row.status != 'draft'"
-            size="mini"
-            @click="handleModifyStatus(row, 'draft')"
-          >
-            Draft
-          </el-button>
-          <el-button
-            v-if="row.status != 'deleted'"
-            size="mini"
-            type="danger"
-            @click="handleDelete(row, $index)"
-          >
-            Delete
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-
-    <pagination
-      v-show="total > 0"
-      :total="total"
-      :page.sync="listQuery.page"
-      :limit.sync="listQuery.limit"
-      @pagination="getList"
-    />
-
-    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible">
-      <el-form
-        ref="dataForm"
-        :rules="rules"
-        :model="temp"
-        label-position="left"
-        label-width="70px"
-        style="width: 400px; margin-left:50px;"
-      >
-        <el-form-item label="Type" prop="type">
-          <el-select
-            v-model="temp.type"
-            class="filter-item"
-            placeholder="Please select"
-          >
-            <el-option
-              v-for="item in calendarTypeOptions"
-              :key="item.key"
-              :label="item.display_name"
-              :value="item.key"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="Date" prop="timestamp">
-          <el-date-picker
-            v-model="temp.timestamp"
-            type="datetime"
-            placeholder="Please pick a date"
-          />
-        </el-form-item>
-        <el-form-item label="Title" prop="title">
-          <el-input v-model="temp.title" />
-        </el-form-item>
-        <el-form-item label="Status">
-          <el-select
-            v-model="temp.status"
-            class="filter-item"
-            placeholder="Please select"
-          >
-            <el-option
-              v-for="item in statusOptions"
-              :key="item"
-              :label="item"
-              :value="item"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="Imp">
-          <el-rate
-            v-model="temp.importance"
-            :colors="['#99A9BF', '#F7BA2A', '#FF9900']"
-            :max="3"
-            style="margin-top:8px;"
-          />
-        </el-form-item>
-        <el-form-item label="Remark">
-          <el-input
-            v-model="temp.remark"
-            :autosize="{ minRows: 2, maxRows: 4 }"
-            type="textarea"
-            placeholder="Please input"
-          />
-        </el-form-item>
-      </el-form>
-      <div slot="footer" class="dialog-footer">
-        <el-button @click="dialogFormVisible = false">
-          Cancel
-        </el-button>
-        <el-button
-          type="primary"
-          @click="dialogStatus === 'create' ? createData() : updateData()"
-        >
-          Confirm
-        </el-button>
-      </div>
-    </el-dialog>
-
-    <el-dialog :visible.sync="dialogPvVisible" title="Reading statistics">
-      <el-table
-        :data="pvData"
-        border
-        fit
-        highlight-current-row
-        style="width: 100%"
-      >
-        <el-table-column prop="key" label="Channel" />
-        <el-table-column prop="pv" label="Pv" />
-      </el-table>
-      <span slot="footer" class="dialog-footer">
-        <el-button type="primary" @click="dialogPvVisible = false"
-          >Confirm</el-button
-        >
-      </span>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import {
-  fetchList,
-  fetchPv,
-  createArticle,
-  updateArticle
-} from "@/api/article";
-import waves from "@/directive/waves"; // waves directive
-import { parseTime } from "@/utils";
-import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
-
-const calendarTypeOptions = [
-  { key: "CN", display_name: "China" },
-  { key: "US", display_name: "USA" },
-  { key: "JP", display_name: "Japan" },
-  { key: "EU", display_name: "Eurozone" }
-];
-
-// arr to obj, such as { CN : "China", US : "USA" }
-const calendarTypeKeyValue = calendarTypeOptions.reduce((acc, cur) => {
-  acc[cur.key] = cur.display_name;
-  return acc;
-}, {});
-
-export default {
-  name: "ComplexTable",
-  components: { Pagination },
-  directives: { waves },
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        published: "success",
-        draft: "info",
-        deleted: "danger"
-      };
-      return statusMap[status];
-    },
-    typeFilter(type) {
-      return calendarTypeKeyValue[type];
-    }
-  },
-  data() {
-    return {
-      tableKey: 0,
-      list: null,
-      total: 0,
-      listLoading: true,
-      listQuery: {
-        page: 1,
-        limit: 20,
-        importance: undefined,
-        title: undefined,
-        type: undefined,
-        sort: "+id"
-      },
-      importanceOptions: [1, 2, 3],
-      calendarTypeOptions,
-      sortOptions: [
-        { label: "ID Ascending", key: "+id" },
-        { label: "ID Descending", key: "-id" }
-      ],
-      statusOptions: ["published", "draft", "deleted"],
-      showReviewer: false,
-      temp: {
-        id: undefined,
-        importance: 1,
-        remark: "",
-        timestamp: new Date(),
-        title: "",
-        type: "",
-        status: "published"
-      },
-      dialogFormVisible: false,
-      dialogStatus: "",
-      textMap: {
-        update: "Edit",
-        create: "Create"
-      },
-      dialogPvVisible: false,
-      pvData: [],
-      rules: {
-        type: [
-          { required: true, message: "type is required", trigger: "change" }
-        ],
-        timestamp: [
-          {
-            type: "date",
-            required: true,
-            message: "timestamp is required",
-            trigger: "change"
-          }
-        ],
-        title: [
-          { required: true, message: "title is required", trigger: "blur" }
-        ]
-      },
-      downloadLoading: false
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    getList() {
-      this.listLoading = true;
-      fetchList(this.listQuery).then(response => {
-        this.list = response.data.items;
-        this.total = response.data.total;
-
-        // Just to simulate the time of the request
-        setTimeout(() => {
-          this.listLoading = false;
-        }, 1.5 * 1000);
-      });
-    },
-    handleFilter() {
-      this.listQuery.page = 1;
-      this.getList();
-    },
-    handleModifyStatus(row, status) {
-      this.$message({
-        message: "操作Success",
-        type: "success"
-      });
-      row.status = status;
-    },
-    sortChange(data) {
-      const { prop, order } = data;
-      if (prop === "id") {
-        this.sortByID(order);
-      }
-    },
-    sortByID(order) {
-      if (order === "ascending") {
-        this.listQuery.sort = "+id";
-      } else {
-        this.listQuery.sort = "-id";
-      }
-      this.handleFilter();
-    },
-    resetTemp() {
-      this.temp = {
-        id: undefined,
-        importance: 1,
-        remark: "",
-        timestamp: new Date(),
-        title: "",
-        status: "published",
-        type: ""
-      };
-    },
-    handleCreate() {
-      this.resetTemp();
-      this.dialogStatus = "create";
-      this.dialogFormVisible = true;
-      this.$nextTick(() => {
-        this.$refs["dataForm"].clearValidate();
-      });
-    },
-    createData() {
-      this.$refs["dataForm"].validate(valid => {
-        if (valid) {
-          this.temp.id = parseInt(Math.random() * 100) + 1024; // mock a id
-          this.temp.author = "vue-element-admin";
-          createArticle(this.temp).then(() => {
-            this.list.unshift(this.temp);
-            this.dialogFormVisible = false;
-            this.$notify({
-              title: "Success",
-              message: "Created Successfully",
-              type: "success",
-              duration: 2000
-            });
-          });
-        }
-      });
-    },
-    handleUpdate(row) {
-      this.temp = Object.assign({}, row); // copy obj
-      this.temp.timestamp = new Date(this.temp.timestamp);
-      this.dialogStatus = "update";
-      this.dialogFormVisible = true;
-      this.$nextTick(() => {
-        this.$refs["dataForm"].clearValidate();
-      });
-    },
-    updateData() {
-      this.$refs["dataForm"].validate(valid => {
-        if (valid) {
-          const tempData = Object.assign({}, this.temp);
-          tempData.timestamp = +new Date(tempData.timestamp); // change Thu Nov 30 2017 16:41:05 GMT+0800 (CST) to 1512031311464
-          updateArticle(tempData).then(() => {
-            const index = this.list.findIndex(v => v.id === this.temp.id);
-            this.list.splice(index, 1, this.temp);
-            this.dialogFormVisible = false;
-            this.$notify({
-              title: "Success",
-              message: "Update Successfully",
-              type: "success",
-              duration: 2000
-            });
-          });
-        }
-      });
-    },
-    handleDelete(row, index) {
-      this.$notify({
-        title: "Success",
-        message: "Delete Successfully",
-        type: "success",
-        duration: 2000
-      });
-      this.list.splice(index, 1);
-    },
-    handleFetchPv(pv) {
-      fetchPv(pv).then(response => {
-        this.pvData = response.data.pvData;
-        this.dialogPvVisible = true;
-      });
-    },
-    handleDownload() {
-      this.downloadLoading = true;
-      import("@/vendor/Export2Excel").then(excel => {
-        const tHeader = ["timestamp", "title", "type", "importance", "status"];
-        const filterVal = [
-          "timestamp",
-          "title",
-          "type",
-          "importance",
-          "status"
-        ];
-        const data = this.formatJson(filterVal);
-        excel.export_json_to_excel({
-          header: tHeader,
-          data,
-          filename: "table-list"
-        });
-        this.downloadLoading = false;
-      });
-    },
-    formatJson(filterVal) {
-      return this.list.map(v =>
-        filterVal.map(j => {
-          if (j === "timestamp") {
-            return parseTime(v[j]);
-          } else {
-            return v[j];
-          }
-        })
-      );
-    },
-    getSortClass: function(key) {
-      const sort = this.listQuery.sort;
-      return sort === `+${key}` ? "ascending" : "descending";
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/table/drag-table.vue b/WebSite/src/views/table/drag-table.vue
deleted file mode 100644
index 7800568..0000000
--- a/WebSite/src/views/table/drag-table.vue
+++ /dev/null
@@ -1,167 +0,0 @@
-<template>
-  <div class="app-container">
-    <!-- Note that row-key is necessary to get a correct row order. -->
-    <el-table
-      ref="dragTable"
-      v-loading="listLoading"
-      :data="list"
-      row-key="id"
-      border
-      fit
-      highlight-current-row
-      style="width: 100%"
-    >
-      <el-table-column align="center" label="ID" width="65">
-        <template slot-scope="{ row }">
-          <span>{{ row.id }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column width="180px" align="center" label="Date">
-        <template slot-scope="{ row }">
-          <span>{{ row.timestamp | parseTime("{y}-{m}-{d} {h}:{i}") }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column min-width="300px" label="Title">
-        <template slot-scope="{ row }">
-          <span>{{ row.title }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column width="110px" align="center" label="Author">
-        <template slot-scope="{ row }">
-          <span>{{ row.author }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column width="100px" label="Importance">
-        <template slot-scope="{ row }">
-          <svg-icon
-            v-for="n in +row.importance"
-            :key="n"
-            icon-class="star"
-            class="icon-star"
-          />
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" label="Readings" width="95">
-        <template slot-scope="{ row }">
-          <span>{{ row.pageviews }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column class-name="status-col" label="Status" width="110">
-        <template slot-scope="{ row }">
-          <el-tag :type="row.status | statusFilter">
-            {{ row.status }}
-          </el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" label="Drag" width="80">
-        <template slot-scope="{}">
-          <svg-icon class="drag-handler" icon-class="drag" />
-        </template>
-      </el-table-column>
-    </el-table>
-    <div class="show-d"><el-tag>The default order :</el-tag> {{ oldList }}</div>
-    <div class="show-d">
-      <el-tag>The after dragging order :</el-tag> {{ newList }}
-    </div>
-  </div>
-</template>
-
-<script>
-import { fetchList } from "@/api/article";
-import Sortable from "sortablejs";
-
-export default {
-  name: "DragTable",
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        published: "success",
-        draft: "info",
-        deleted: "danger"
-      };
-      return statusMap[status];
-    }
-  },
-  data() {
-    return {
-      list: null,
-      total: null,
-      listLoading: true,
-      listQuery: {
-        page: 1,
-        limit: 10
-      },
-      sortable: null,
-      oldList: [],
-      newList: []
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      this.listLoading = true;
-      const { data } = await fetchList(this.listQuery);
-      this.list = data.items;
-      this.total = data.total;
-      this.listLoading = false;
-      this.oldList = this.list.map(v => v.id);
-      this.newList = this.oldList.slice();
-      this.$nextTick(() => {
-        this.setSort();
-      });
-    },
-    setSort() {
-      const el = this.$refs.dragTable.$el.querySelectorAll(
-        ".el-table__body-wrapper > table > tbody"
-      )[0];
-      this.sortable = Sortable.create(el, {
-        ghostClass: "sortable-ghost", // Class name for the drop placeholder,
-        setData: function(dataTransfer) {
-          // to avoid Firefox bug
-          // Detail see : https://github.com/RubaXa/Sortable/issues/1012
-          dataTransfer.setData("Text", "");
-        },
-        onEnd: evt => {
-          const targetRow = this.list.splice(evt.oldIndex, 1)[0];
-          this.list.splice(evt.newIndex, 0, targetRow);
-
-          // for show the changes, you can delete in you code
-          const tempIndex = this.newList.splice(evt.oldIndex, 1)[0];
-          this.newList.splice(evt.newIndex, 0, tempIndex);
-        }
-      });
-    }
-  }
-};
-</script>
-
-<style>
-.sortable-ghost {
-  opacity: 0.8;
-  color: #fff !important;
-  background: #42b983 !important;
-}
-</style>
-
-<style scoped>
-.icon-star {
-  margin-right: 2px;
-}
-.drag-handler {
-  width: 20px;
-  height: 20px;
-  cursor: pointer;
-}
-.show-d {
-  margin-top: 15px;
-}
-</style>
diff --git a/WebSite/src/views/table/dynamic-table/components/FixedThead.vue b/WebSite/src/views/table/dynamic-table/components/FixedThead.vue
deleted file mode 100644
index 1bfa5d5..0000000
--- a/WebSite/src/views/table/dynamic-table/components/FixedThead.vue
+++ /dev/null
@@ -1,70 +0,0 @@
-<template>
-  <div class="app-container">
-    <div class="filter-container">
-      <el-checkbox-group v-model="checkboxVal">
-        <el-checkbox label="apple">
-          apple
-        </el-checkbox>
-        <el-checkbox label="banana">
-          banana
-        </el-checkbox>
-        <el-checkbox label="orange">
-          orange
-        </el-checkbox>
-      </el-checkbox-group>
-    </div>
-
-    <el-table
-      :key="key"
-      :data="tableData"
-      border
-      fit
-      highlight-current-row
-      style="width: 100%"
-    >
-      <el-table-column prop="name" label="fruitName" width="180" />
-      <el-table-column v-for="fruit in formThead" :key="fruit" :label="fruit">
-        <template slot-scope="scope">
-          {{ scope.row[fruit] }}
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-const defaultFormThead = ["apple", "banana"];
-
-export default {
-  data() {
-    return {
-      tableData: [
-        {
-          name: "fruit-1",
-          apple: "apple-10",
-          banana: "banana-10",
-          orange: "orange-10"
-        },
-        {
-          name: "fruit-2",
-          apple: "apple-20",
-          banana: "banana-20",
-          orange: "orange-20"
-        }
-      ],
-      key: 1, // table key
-      formTheadOptions: ["apple", "banana", "orange"],
-      checkboxVal: defaultFormThead, // checkboxVal
-      formThead: defaultFormThead // 默认表头 Default header
-    };
-  },
-  watch: {
-    checkboxVal(valArr) {
-      this.formThead = this.formTheadOptions.filter(
-        i => valArr.indexOf(i) >= 0
-      );
-      this.key = this.key + 1; // 为了保证table 每次都会重渲 In order to ensure the table will be re-rendered each time
-    }
-  }
-};
-</script>
diff --git a/WebSite/src/views/table/dynamic-table/components/UnfixedThead.vue b/WebSite/src/views/table/dynamic-table/components/UnfixedThead.vue
deleted file mode 100644
index 8b28c23..0000000
--- a/WebSite/src/views/table/dynamic-table/components/UnfixedThead.vue
+++ /dev/null
@@ -1,56 +0,0 @@
-<template>
-  <div class="app-container">
-    <div class="filter-container">
-      <el-checkbox-group v-model="formThead">
-        <el-checkbox label="apple">
-          apple
-        </el-checkbox>
-        <el-checkbox label="banana">
-          banana
-        </el-checkbox>
-        <el-checkbox label="orange">
-          orange
-        </el-checkbox>
-      </el-checkbox-group>
-    </div>
-
-    <el-table
-      :data="tableData"
-      border
-      fit
-      highlight-current-row
-      style="width: 100%"
-    >
-      <el-table-column prop="name" label="fruitName" width="180" />
-      <el-table-column v-for="fruit in formThead" :key="fruit" :label="fruit">
-        <template slot-scope="scope">
-          {{ scope.row[fruit] }}
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-export default {
-  data() {
-    return {
-      tableData: [
-        {
-          name: "fruit-1",
-          apple: "apple-10",
-          banana: "banana-10",
-          orange: "orange-10"
-        },
-        {
-          name: "fruit-2",
-          apple: "apple-20",
-          banana: "banana-20",
-          orange: "orange-20"
-        }
-      ],
-      formThead: ["apple", "banana"]
-    };
-  }
-};
-</script>
diff --git a/WebSite/src/views/table/dynamic-table/index.vue b/WebSite/src/views/table/dynamic-table/index.vue
deleted file mode 100644
index 503784c..0000000
--- a/WebSite/src/views/table/dynamic-table/index.vue
+++ /dev/null
@@ -1,23 +0,0 @@
-<template>
-  <div class="app-container">
-    <div style="margin:0 0 5px 20px">
-      Fixed header, sorted by header order,
-    </div>
-    <fixed-thead />
-
-    <div style="margin:30px 0 5px 20px">
-      Not fixed header, sorted by click order
-    </div>
-    <unfixed-thead />
-  </div>
-</template>
-
-<script>
-import FixedThead from "./components/FixedThead";
-import UnfixedThead from "./components/UnfixedThead";
-
-export default {
-  name: "DynamicTable",
-  components: { FixedThead, UnfixedThead }
-};
-</script>
diff --git a/WebSite/src/views/table/inline-edit-table.vue b/WebSite/src/views/table/inline-edit-table.vue
deleted file mode 100644
index 4b12095..0000000
--- a/WebSite/src/views/table/inline-edit-table.vue
+++ /dev/null
@@ -1,161 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      border
-      fit
-      highlight-current-row
-      style="width: 100%"
-    >
-      <el-table-column align="center" label="ID" width="80">
-        <template slot-scope="{ row }">
-          <span>{{ row.id }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column width="180px" align="center" label="Date">
-        <template slot-scope="{ row }">
-          <span>{{ row.timestamp | parseTime("{y}-{m}-{d} {h}:{i}") }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column width="120px" align="center" label="Author">
-        <template slot-scope="{ row }">
-          <span>{{ row.author }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column width="100px" label="Importance">
-        <template slot-scope="{ row }">
-          <svg-icon
-            v-for="n in +row.importance"
-            :key="n"
-            icon-class="star"
-            class="meta-item__icon"
-          />
-        </template>
-      </el-table-column>
-
-      <el-table-column class-name="status-col" label="Status" width="110">
-        <template slot-scope="{ row }">
-          <el-tag :type="row.status | statusFilter">
-            {{ row.status }}
-          </el-tag>
-        </template>
-      </el-table-column>
-
-      <el-table-column min-width="300px" label="Title">
-        <template slot-scope="{ row }">
-          <template v-if="row.edit">
-            <el-input v-model="row.title" class="edit-input" size="small" />
-            <el-button
-              class="cancel-btn"
-              size="small"
-              icon="el-icon-refresh"
-              type="warning"
-              @click="cancelEdit(row)"
-            >
-              cancel
-            </el-button>
-          </template>
-          <span v-else>{{ row.title }}</span>
-        </template>
-      </el-table-column>
-
-      <el-table-column align="center" label="Actions" width="120">
-        <template slot-scope="{ row }">
-          <el-button
-            v-if="row.edit"
-            type="success"
-            size="small"
-            icon="el-icon-circle-check-outline"
-            @click="confirmEdit(row)"
-          >
-            Ok
-          </el-button>
-          <el-button
-            v-else
-            type="primary"
-            size="small"
-            icon="el-icon-edit"
-            @click="row.edit = !row.edit"
-          >
-            Edit
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { fetchList } from "@/api/article";
-
-export default {
-  name: "InlineEditTable",
-  filters: {
-    statusFilter(status) {
-      const statusMap = {
-        published: "success",
-        draft: "info",
-        deleted: "danger"
-      };
-      return statusMap[status];
-    }
-  },
-  data() {
-    return {
-      list: null,
-      listLoading: true,
-      listQuery: {
-        page: 1,
-        limit: 10
-      }
-    };
-  },
-  created() {
-    this.getList();
-  },
-  methods: {
-    async getList() {
-      this.listLoading = true;
-      const { data } = await fetchList(this.listQuery);
-      const items = data.items;
-      this.list = items.map(v => {
-        this.$set(v, "edit", false); // https://vuejs.org/v2/guide/reactivity.html
-        v.originalTitle = v.title; //  will be used when user click the cancel botton
-        return v;
-      });
-      this.listLoading = false;
-    },
-    cancelEdit(row) {
-      row.title = row.originalTitle;
-      row.edit = false;
-      this.$message({
-        message: "The title has been restored to the original value",
-        type: "warning"
-      });
-    },
-    confirmEdit(row) {
-      row.edit = false;
-      row.originalTitle = row.title;
-      this.$message({
-        message: "The title has been edited",
-        type: "success"
-      });
-    }
-  }
-};
-</script>
-
-<style scoped>
-.edit-input {
-  padding-right: 100px;
-}
-.cancel-btn {
-  position: absolute;
-  right: 15px;
-  top: 10px;
-}
-</style>
diff --git a/WebSite/src/views/theme/index.vue b/WebSite/src/views/theme/index.vue
deleted file mode 100644
index 7435174..0000000
--- a/WebSite/src/views/theme/index.vue
+++ /dev/null
@@ -1,131 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-card class="box-card">
-      <div slot="header">
-        <a
-          class="link-type link-title"
-          target="_blank"
-          href="https://panjiachen.github.io/vue-element-admin-site/guide/advanced/theme.html"
-        >
-          Theme documentation
-        </a>
-      </div>
-      <div class="box-item">
-        <span class="field-label">Change Theme : </span>
-        <el-switch v-model="theme" />
-        <aside style="margin-top:15px;">
-          Tips: It is different from the theme-pick on the navbar is two
-          different skinning methods, each with different application scenarios.
-          Refer to the documentation for details.
-        </aside>
-      </div>
-    </el-card>
-
-    <div class="block">
-      <el-button type="primary">
-        Primary
-      </el-button>
-      <el-button type="success">
-        Success
-      </el-button>
-      <el-button type="info">
-        Info
-      </el-button>
-      <el-button type="warning">
-        Warning
-      </el-button>
-      <el-button type="danger">
-        Danger
-      </el-button>
-    </div>
-
-    <div class="block">
-      <el-button type="primary" icon="el-icon-edit" />
-      <el-button type="primary" icon="el-icon-share" />
-      <el-button type="primary" icon="el-icon-delete" />
-      <el-button type="primary" icon="el-icon-search">
-        Search
-      </el-button>
-      <el-button type="primary">
-        Upload
-        <i class="el-icon-upload el-icon-right" />
-      </el-button>
-    </div>
-
-    <div class="block">
-      <el-tag
-        v-for="tag in tags"
-        :key="tag.type"
-        :type="tag.type"
-        class="tag-item"
-      >
-        {{ tag.name }}
-      </el-tag>
-    </div>
-
-    <div class="block">
-      <el-radio-group v-model="radio">
-        <el-radio :label="3">
-          Option A
-        </el-radio>
-        <el-radio :label="6">
-          Option B
-        </el-radio>
-        <el-radio :label="9">
-          Option C
-        </el-radio>
-      </el-radio-group>
-    </div>
-
-    <div class="block">
-      <el-slider v-model="slideValue" />
-    </div>
-  </div>
-</template>
-
-<script>
-import { toggleClass } from "@/utils";
-import "@/assets/custom-theme/index.css"; // the theme changed version element-ui css
-
-export default {
-  name: "Theme",
-  data() {
-    return {
-      theme: false,
-      tags: [
-        { name: "Tag One", type: "" },
-        { name: "Tag Two", type: "info" },
-        { name: "Tag Three", type: "success" },
-        { name: "Tag Four", type: "warning" },
-        { name: "Tag Five", type: "danger" }
-      ],
-      slideValue: 50,
-      radio: 3
-    };
-  },
-  watch: {
-    theme() {
-      toggleClass(document.body, "custom-theme");
-    }
-  }
-};
-</script>
-
-<style scoped>
-.field-label {
-  vertical-align: middle;
-}
-.box-card {
-  width: 400px;
-  max-width: 100%;
-  margin: 20px auto;
-}
-
-.block {
-  padding: 30px 24px;
-}
-
-.tag-item {
-  margin-right: 15px;
-}
-</style>
diff --git a/WebSite/src/views/zip/index.vue b/WebSite/src/views/zip/index.vue
deleted file mode 100644
index 6bacc58..0000000
--- a/WebSite/src/views/zip/index.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-<template>
-  <div class="app-container">
-    <el-input
-      v-model="filename"
-      placeholder="Please enter the file name (default file)"
-      style="width:300px;"
-      prefix-icon="el-icon-document"
-    />
-    <el-button
-      :loading="downloadLoading"
-      style="margin-bottom:20px;"
-      type="primary"
-      icon="el-icon-document"
-      @click="handleDownload"
-    >
-      Export Zip
-    </el-button>
-    <el-table
-      v-loading="listLoading"
-      :data="list"
-      element-loading-text="拼命加载中"
-      border
-      fit
-      highlight-current-row
-    >
-      <el-table-column align="center" label="ID" width="95">
-        <template slot-scope="scope">
-          {{ scope.$index }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Title">
-        <template slot-scope="scope">
-          {{ scope.row.title }}
-        </template>
-      </el-table-column>
-      <el-table-column label="Author" width="95" align="center">
-        <template slot-scope="scope">
-          <el-tag>{{ scope.row.author }}</el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="Readings" width="115" align="center">
-        <template slot-scope="scope">
-          {{ scope.row.pageviews }}
-        </template>
-      </el-table-column>
-      <el-table-column align="center" label="Date" width="220">
-        <template slot-scope="scope">
-          <i class="el-icon-time" />
-          <span>{{ scope.row.display_time }}</span>
-        </template>
-      </el-table-column>
-    </el-table>
-  </div>
-</template>
-
-<script>
-import { fetchList } from "@/api/article";
-
-export default {
-  name: "ExportZip",
-  data() {
-    return {
-      list: null,
-      listLoading: true,
-      downloadLoading: false,
-      filename: ""
-    };
-  },
-  created() {
-    this.fetchData();
-  },
-  methods: {
-    async fetchData() {
-      this.listLoading = true;
-      const { data } = await fetchList();
-      this.list = data.items;
-      this.listLoading = false;
-    },
-    handleDownload() {
-      this.downloadLoading = true;
-      import("@/vendor/Export2Zip").then(zip => {
-        const tHeader = ["Id", "Title", "Author", "Readings", "Date"];
-        const filterVal = [
-          "id",
-          "title",
-          "author",
-          "pageviews",
-          "display_time"
-        ];
-        const list = this.list;
-        const data = this.formatJson(filterVal, list);
-        zip.export_txt_to_zip(tHeader, data, this.filename, this.filename);
-        this.downloadLoading = false;
-      });
-    },
-    formatJson(filterVal, jsonData) {
-      return jsonData.map(v => filterVal.map(j => v[j]));
-    }
-  }
-};
-</script>
diff --git a/WebSite/tests/unit/.eslintrc.js b/WebSite/tests/unit/.eslintrc.js
deleted file mode 100644
index 958d51b..0000000
--- a/WebSite/tests/unit/.eslintrc.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
-  env: {
-    jest: true
-  }
-}
diff --git a/WebSite/tests/unit/components/Hamburger.spec.js b/WebSite/tests/unit/components/Hamburger.spec.js
deleted file mode 100644
index 01ea303..0000000
--- a/WebSite/tests/unit/components/Hamburger.spec.js
+++ /dev/null
@@ -1,18 +0,0 @@
-import { shallowMount } from '@vue/test-utils'
-import Hamburger from '@/components/Hamburger/index.vue'
-describe('Hamburger.vue', () => {
-  it('toggle click', () => {
-    const wrapper = shallowMount(Hamburger)
-    const mockFn = jest.fn()
-    wrapper.vm.$on('toggleClick', mockFn)
-    wrapper.find('.hamburger').trigger('click')
-    expect(mockFn).toBeCalled()
-  })
-  it('prop isActive', () => {
-    const wrapper = shallowMount(Hamburger)
-    wrapper.setProps({ isActive: true })
-    expect(wrapper.contains('.is-active')).toBe(true)
-    wrapper.setProps({ isActive: false })
-    expect(wrapper.contains('.is-active')).toBe(false)
-  })
-})
diff --git a/WebSite/tests/unit/components/SvgIcon.spec.js b/WebSite/tests/unit/components/SvgIcon.spec.js
deleted file mode 100644
index 31467a9..0000000
--- a/WebSite/tests/unit/components/SvgIcon.spec.js
+++ /dev/null
@@ -1,22 +0,0 @@
-import { shallowMount } from '@vue/test-utils'
-import SvgIcon from '@/components/SvgIcon/index.vue'
-describe('SvgIcon.vue', () => {
-  it('iconClass', () => {
-    const wrapper = shallowMount(SvgIcon, {
-      propsData: {
-        iconClass: 'test'
-      }
-    })
-    expect(wrapper.find('use').attributes().href).toBe('#icon-test')
-  })
-  it('className', () => {
-    const wrapper = shallowMount(SvgIcon, {
-      propsData: {
-        iconClass: 'test'
-      }
-    })
-    expect(wrapper.classes().length).toBe(1)
-    wrapper.setProps({ className: 'test' })
-    expect(wrapper.classes().includes('test')).toBe(true)
-  })
-})
diff --git a/WebSite/tests/unit/utils/formatTime.spec.js b/WebSite/tests/unit/utils/formatTime.spec.js
deleted file mode 100644
index d07e414..0000000
--- a/WebSite/tests/unit/utils/formatTime.spec.js
+++ /dev/null
@@ -1,29 +0,0 @@
-import { formatTime } from '@/utils/index.js'
-describe('Utils:formatTime', () => {
-  const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01"
-  const retrofit = 5 * 1000
-
-  it('ten digits timestamp', () => {
-    expect(formatTime((d / 1000).toFixed(0))).toBe('7月13日17时54分')
-  })
-  it('test now', () => {
-    expect(formatTime(+new Date() - 1)).toBe('刚刚')
-  })
-  it('less two minute', () => {
-    expect(formatTime(+new Date() - 60 * 2 * 1000 + retrofit)).toBe('2分钟前')
-  })
-  it('less two hour', () => {
-    expect(formatTime(+new Date() - 60 * 60 * 2 * 1000 + retrofit)).toBe('2小时前')
-  })
-  it('less one day', () => {
-    expect(formatTime(+new Date() - 60 * 60 * 24 * 1 * 1000)).toBe('1天前')
-  })
-  it('more than one day', () => {
-    expect(formatTime(d)).toBe('7月13日17时54分')
-  })
-  it('format', () => {
-    expect(formatTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54')
-    expect(formatTime(d, '{y}-{m}-{d}')).toBe('2018-07-13')
-    expect(formatTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54')
-  })
-})
diff --git a/WebSite/tests/unit/utils/parseTime.spec.js b/WebSite/tests/unit/utils/parseTime.spec.js
deleted file mode 100644
index 77ecb9d..0000000
--- a/WebSite/tests/unit/utils/parseTime.spec.js
+++ /dev/null
@@ -1,27 +0,0 @@
-import { parseTime } from '@/utils/index.js'
-describe('Utils:parseTime', () => {
-  const d = new Date('2018-07-13 17:54:01') // "2018-07-13 17:54:01"
-  it('timestamp', () => {
-    expect(parseTime(d)).toBe('2018-07-13 17:54:01')
-  })
-  it('ten digits timestamp', () => {
-    expect(parseTime((d / 1000).toFixed(0))).toBe('2018-07-13 17:54:01')
-  })
-  it('new Date', () => {
-    expect(parseTime(new Date(d))).toBe('2018-07-13 17:54:01')
-  })
-  it('format', () => {
-    expect(parseTime(d, '{y}-{m}-{d} {h}:{i}')).toBe('2018-07-13 17:54')
-    expect(parseTime(d, '{y}-{m}-{d}')).toBe('2018-07-13')
-    expect(parseTime(d, '{y}/{m}/{d} {h}-{i}')).toBe('2018/07/13 17-54')
-  })
-  it('get the day of the week', () => {
-    expect(parseTime(d, '{a}')).toBe('五') // 星期五
-  })
-  it('get the day of the week', () => {
-    expect(parseTime(+d + 1000 * 60 * 60 * 24 * 2, '{a}')).toBe('日') // 星期日
-  })
-  it('empty argument', () => {
-    expect(parseTime()).toBeNull()
-  })
-})
diff --git a/WebSite/tests/unit/utils/validate.spec.js b/WebSite/tests/unit/utils/validate.spec.js
deleted file mode 100644
index ef2efe6..0000000
--- a/WebSite/tests/unit/utils/validate.spec.js
+++ /dev/null
@@ -1,28 +0,0 @@
-import { validUsername, validURL, validLowerCase, validUpperCase, validAlphabets } from '@/utils/validate.js'
-describe('Utils:validate', () => {
-  it('validUsername', () => {
-    expect(validUsername('admin')).toBe(true)
-    expect(validUsername('editor')).toBe(true)
-    expect(validUsername('xxxx')).toBe(false)
-  })
-  it('validURL', () => {
-    expect(validURL('https://github.com/PanJiaChen/vue-element-admin')).toBe(true)
-    expect(validURL('http://github.com/PanJiaChen/vue-element-admin')).toBe(true)
-    expect(validURL('github.com/PanJiaChen/vue-element-admin')).toBe(false)
-  })
-  it('validLowerCase', () => {
-    expect(validLowerCase('abc')).toBe(true)
-    expect(validLowerCase('Abc')).toBe(false)
-    expect(validLowerCase('123abc')).toBe(false)
-  })
-  it('validUpperCase', () => {
-    expect(validUpperCase('ABC')).toBe(true)
-    expect(validUpperCase('Abc')).toBe(false)
-    expect(validUpperCase('123ABC')).toBe(false)
-  })
-  it('validAlphabets', () => {
-    expect(validAlphabets('ABC')).toBe(true)
-    expect(validAlphabets('Abc')).toBe(true)
-    expect(validAlphabets('123aBC')).toBe(false)
-  })
-})
diff --git a/WebSite/vue.config.js b/WebSite/vue.config.js
index 5b7c28a..fb34eb7 100644
--- a/WebSite/vue.config.js
+++ b/WebSite/vue.config.js
@@ -1,166 +1,79 @@
-"use strict";
-const path = require("path");
-const defaultSettings = require("./src/settings.js");
+/*
+ * @Description:
+ * @Autor: dongjunhua
+ * @Date: 2020-12-17 12:52:35
+ * @LastEditors: dongjunhua
+ * @LastEditTime: 2021-01-29 13:49:00
+ */
+'use strict';
+
+const path = require('path');
+const defaultSettings = require('./src/settings');
 
 function resolve(dir) {
   return path.join(__dirname, dir);
 }
 
-const name = defaultSettings.title || "Vue Element Admin"; // page title
-
-// If your port is set to 80,
-// use administrator privileges to execute the command line.
-// For example, Mac: sudo npm run
-// You can change the port by the following method:
-// port = 9527 npm run dev OR npm run dev --port = 9527
-const port = process.env.port || process.env.npm_config_port || 9529; // dev port
-
-// get npm config argv
-const configArgv = JSON.parse(process.env.npm_config_argv);
-const original = configArgv.original.slice(1);
-const stage = original[1] ? original[1].replace(/-/g, "") : "";
-
+// devServer
 const devServer = {
-  port: port,
-  open: false,
+  port: 3000,
+  open: true,
   overlay: {
     warnings: false,
     errors: true
   }
 };
-const proxy = {
-  // detail: https://cli.vuejs.org/config/#devserver-proxy
-  [process.env.VUE_APP_BASE_API]: {
-    // target: `http://127.0.0.1:${port}`,
-    target: "http://47.110.127.118:8001",
-    changeOrigin: true,
-    pathRewrite: {
-      ["^" + process.env.VUE_APP_BASE_API]: ""
-    }
-  }
-};
-const mockServer = require("./mock/mock-server.js");
-if (stage === "mock") {
-  devServer.before = mockServer;
+
+if (process.env.NODE_ENV === 'mock') {
+  devServer.before = require('./mock/mock-server.js');
 } else {
-  devServer.proxy = proxy;
+  devServer.proxy = {
+    // detail: https://cli.vuejs.org/config/#devserver-proxy
+    [process.env.VUE_APP_BASE_API]: {
+      target: 'http://localhost:8999',
+      changeOrigin: true,
+      pathRewrite: {
+        ['^' + process.env.VUE_APP_BASE_API]: ''
+      }
+    }
+  };
 }
 
-// All configuration item explanations can be find in https://cli.vuejs.org/config/
 module.exports = {
-  /**
-   * You will need to set publicPath if you plan to deploy your site under a sub path,
-   * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
-   * then publicPath should be set to "/bar/".
-   * In most cases please use '/' !!!
-   * Detail: https://cli.vuejs.org/config/#publicpath
-   */
-  publicPath: "./",
-  outputDir: "dist",
-  assetsDir: "static",
-  lintOnSave: process.env.NODE_ENV === "development",
-  productionSourceMap: false,
+  publicPath: './',
+  outputDir: 'dist',
+  assetsDir: 'static',
+  lintOnSave: false,
   devServer,
   configureWebpack: {
     // provide the app's title in webpack's name field, so that
     // it can be accessed in index.html to inject the correct title.
-    name: name,
+    name: defaultSettings.applicationName,
     resolve: {
       alias: {
-        "@": resolve("src")
+        '@': resolve('src')
       }
     }
   },
   chainWebpack(config) {
-    // copy config file to dist
-    config.plugin("copy").tap(args => {
-      let configName =
-        process.env.ENV &&
-        process.env.ENV !== "development" &&
-        process.env.ENV !== "production"
-          ? process.env.ENV
-          : "default";
-      args[0].push({
-        from: path.resolve(
-          __dirname,
-          `./src/assets/configs/${configName}.json`
-        ),
-        to: path.resolve(__dirname, "./dist/config.json")
-      });
-      return args;
-    });
-    config.plugins.delete("preload"); // TODO: need test
-    config.plugins.delete("prefetch"); // TODO: need test
+    // when there are many pages, it will cause too many meaningless requests
+    config.plugins.delete('prefetch');
 
     // set svg-sprite-loader
     config.module
-      .rule("svg")
-      .exclude.add(resolve("src/icons"))
+      .rule('svg')
+      .exclude.add(resolve('src/icons'))
       .end();
     config.module
-      .rule("icons")
+      .rule('icons')
       .test(/\.svg$/)
-      .include.add(resolve("src/icons"))
+      .include.add(resolve('src/icons'))
       .end()
-      .use("svg-sprite-loader")
-      .loader("svg-sprite-loader")
+      .use('svg-sprite-loader')
+      .loader('svg-sprite-loader')
       .options({
-        symbolId: "icon-[name]"
-      })
-      .end();
-
-    // set preserveWhitespace
-    config.module
-      .rule("vue")
-      .use("vue-loader")
-      .loader("vue-loader")
-      .tap(options => {
-        options.compilerOptions.preserveWhitespace = true;
-        return options;
+        symbolId: 'icon-[name]'
       })
       .end();
-
-    config
-      // https://webpack.js.org/configuration/devtool/#development
-      .when(process.env.NODE_ENV === "development", config =>
-        config.devtool("cheap-source-map")
-      );
-
-    config.when(process.env.NODE_ENV !== "development", config => {
-      config
-        .plugin("ScriptExtHtmlWebpackPlugin")
-        .after("html")
-        .use("script-ext-html-webpack-plugin", [
-          {
-            // `runtime` must same as runtimeChunk name. default is `runtime`
-            inline: /runtime\..*\.js$/
-          }
-        ])
-        .end();
-      config.optimization.splitChunks({
-        chunks: "all",
-        cacheGroups: {
-          libs: {
-            name: "chunk-libs",
-            test: /[\\/]node_modules[\\/]/,
-            priority: 10,
-            chunks: "initial" // only package third parties that are initially dependent
-          },
-          elementUI: {
-            name: "chunk-elementUI", // split elementUI into a single package
-            priority: 20, // the weight needs to be larger than libs and app or it will be packaged into libs or app
-            test: /[\\/]node_modules[\\/]_?element-ui(.*)/ // in order to adapt to cnpm
-          },
-          commons: {
-            name: "chunk-commons",
-            test: resolve("src/components"), // can customize your rules
-            minChunks: 3, //  minimum common number
-            priority: 5,
-            reuseExistingChunk: true
-          }
-        }
-      });
-      config.optimization.runtimeChunk("single");
-    });
   }
 };
-- 
GitLab